URL
https://opencores.org/ocsvn/or1200_soc/or1200_soc/trunk
Subversion Repositories or1200_soc
[/] [or1200_soc/] [trunk/] [sw/] [u-boot-2009.03_diff.txt] - Rev 18
Go to most recent revision | Compare with Previous | Blame | View Log
diff -Naur u-boot-2009.03_orig/CVS/Entries u-boot-2009.03/CVS/Entries
--- u-boot-2009.03_orig/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/CVS/Entries 2009-03-25 17:51:54.217001800 -0700
@@ -0,0 +1,55 @@
+D/api////
+D/api_examples////
+D/board////
+D/common////
+D/cpu////
+D/disk////
+D/doc////
+D/drivers////
+D/examples////
+D/fs////
+D/include////
+D/lib_arm////
+D/lib_avr32////
+D/lib_blackfin////
+D/lib_generic////
+D/lib_i386////
+D/lib_m68k////
+D/lib_microblaze////
+D/lib_mips////
+D/lib_nios////
+D/lib_nios2////
+D/lib_ppc////
+D/lib_sh////
+D/lib_sparc////
+D/libfdt////
+D/nand_spl////
+D/net////
+D/onenand_ipl////
+D/post////
+D/tools////
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CHANGELOG/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CHANGELOG-before-U-Boot-1.1.5/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/COPYING/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CREDITS/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MAINTAINERS/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MAKEALL/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/avr32_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i386_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m68k_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/microblaze_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mips_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mkconfig/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rules.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sparc_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D/lib_or1200////
+/Makefile/1.2/Wed Mar 25 22:43:49 2009//
diff -Naur u-boot-2009.03_orig/CVS/Entries.Extra u-boot-2009.03/CVS/Entries.Extra
--- u-boot-2009.03_orig/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/CVS/Entries.Extra 2009-03-25 17:51:54.232626700 -0700
@@ -0,0 +1,55 @@
+D/api////
+D/api_examples////
+D/board////
+D/common////
+D/cpu////
+D/disk////
+D/doc////
+D/drivers////
+D/examples////
+D/fs////
+D/include////
+D/lib_arm////
+D/lib_avr32////
+D/lib_blackfin////
+D/lib_generic////
+D/lib_i386////
+D/lib_m68k////
+D/lib_microblaze////
+D/lib_mips////
+D/lib_nios////
+D/lib_nios2////
+D/lib_ppc////
+D/lib_sh////
+D/lib_sparc////
+D/libfdt////
+D/nand_spl////
+D/net////
+D/onenand_ipl////
+D/post////
+D/tools////
+/README///1238019686/
+/.gitignore///1238019686/
+/CHANGELOG///1238019686/
+/CHANGELOG-before-U-Boot-1.1.5///1238019686/
+/COPYING///1238019686/
+/CREDITS///1238019686/
+/MAINTAINERS///1238019686/
+/MAKEALL///1238019686/
+/arm_config.mk///1238019686/
+/avr32_config.mk///1238019686/
+/blackfin_config.mk///1238019686/
+/config.mk///1238019686/
+/i386_config.mk///1238019686/
+/m68k_config.mk///1238019686/
+/microblaze_config.mk///1238019686/
+/mips_config.mk///1238019686/
+/mkconfig///1238019686/
+/nios2_config.mk///1238019686/
+/nios_config.mk///1238019686/
+/ppc_config.mk///1238019686/
+/rules.mk///1238019686/
+/sh_config.mk///1238019686/
+/sparc_config.mk///1238019686/
+D/lib_or1200////
+/Makefile///1238028695/
diff -Naur u-boot-2009.03_orig/CVS/Entries.Extra.Old u-boot-2009.03/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/CVS/Entries.Extra.Old 2009-03-25 17:48:29.000000000 -0700
@@ -0,0 +1,55 @@
+/Makefile///1238019686/
+D/api////
+D/api_examples////
+D/board////
+D/common////
+D/cpu////
+D/disk////
+D/doc////
+D/drivers////
+D/examples////
+D/fs////
+D/include////
+D/lib_arm////
+D/lib_avr32////
+D/lib_blackfin////
+D/lib_generic////
+D/lib_i386////
+D/lib_m68k////
+D/lib_microblaze////
+D/lib_mips////
+D/lib_nios////
+D/lib_nios2////
+D/lib_ppc////
+D/lib_sh////
+D/lib_sparc////
+D/libfdt////
+D/nand_spl////
+D/net////
+D/onenand_ipl////
+D/post////
+D/tools////
+/README///1238019686/
+/.gitignore///1238019686/
+/CHANGELOG///1238019686/
+/CHANGELOG-before-U-Boot-1.1.5///1238019686/
+/COPYING///1238019686/
+/CREDITS///1238019686/
+/MAINTAINERS///1238019686/
+/MAKEALL///1238019686/
+/arm_config.mk///1238019686/
+/avr32_config.mk///1238019686/
+/blackfin_config.mk///1238019686/
+/config.mk///1238019686/
+/i386_config.mk///1238019686/
+/m68k_config.mk///1238019686/
+/microblaze_config.mk///1238019686/
+/mips_config.mk///1238019686/
+/mkconfig///1238019686/
+/nios2_config.mk///1238019686/
+/nios_config.mk///1238019686/
+/ppc_config.mk///1238019686/
+/rules.mk///1238019686/
+/sh_config.mk///1238019686/
+/sparc_config.mk///1238019686/
+D/lib_or1200////
diff -Naur u-boot-2009.03_orig/CVS/Entries.Old u-boot-2009.03/CVS/Entries.Old
--- u-boot-2009.03_orig/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/CVS/Entries.Old 2009-03-25 17:48:29.000000000 -0700
@@ -0,0 +1,55 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D/api////
+D/api_examples////
+D/board////
+D/common////
+D/cpu////
+D/disk////
+D/doc////
+D/drivers////
+D/examples////
+D/fs////
+D/include////
+D/lib_arm////
+D/lib_avr32////
+D/lib_blackfin////
+D/lib_generic////
+D/lib_i386////
+D/lib_m68k////
+D/lib_microblaze////
+D/lib_mips////
+D/lib_nios////
+D/lib_nios2////
+D/lib_ppc////
+D/lib_sh////
+D/lib_sparc////
+D/libfdt////
+D/nand_spl////
+D/net////
+D/onenand_ipl////
+D/post////
+D/tools////
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CHANGELOG/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CHANGELOG-before-U-Boot-1.1.5/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/COPYING/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CREDITS/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MAINTAINERS/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MAKEALL/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/avr32_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i386_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m68k_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/microblaze_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mips_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mkconfig/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rules.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sparc_config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D/lib_or1200////
diff -Naur u-boot-2009.03_orig/CVS/Repository u-boot-2009.03/CVS/Repository
--- u-boot-2009.03_orig/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/CVS/Repository 2009-03-25 15:23:57.557075800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03
diff -Naur u-boot-2009.03_orig/CVS/Root u-boot-2009.03/CVS/Root
--- u-boot-2009.03_orig/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/CVS/Root 2009-03-25 15:23:57.557075800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/Makefile u-boot-2009.03/Makefile
--- u-boot-2009.03_orig/Makefile 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/Makefile 2009-03-25 15:43:49.455339700 -0700
@@ -182,7 +182,10 @@
endif
ifeq ($(ARCH),sparc)
CROSS_COMPILE = sparc-elf-
-endif # sparc
+endif
+ifeq ($(ARCH),or1200)
+CROSS_COMPILE = or32-uclinux-
+endif # or1200
endif # HOSTARCH,ARCH
endif # CROSS_COMPILE
@@ -279,7 +282,7 @@
# The "tools" are needed early, so put this first
# Don't include stuff already done in $(LIBS)
SUBDIRS = tools \
- examples \
+# examples \
api_examples
.PHONY : $(SUBDIRS)
@@ -3456,6 +3459,21 @@
# Gaisler LEON2 GRSIM simulator
grsim_leon2_config : unconfig
@$(MKCONFIG) $(@:_config=) sparc leon2 grsim_leon2 gaisler
+
+
+#========================================================================
+# qaz
+#========================================================================
+de1_or1k_config: unconfig
+ @mkdir -p $(obj)include
+ @echo "#define CONFIG_DE1_OR1K" > $(obj)include/config.h
+ @$(MKCONFIG) -a $(@:_config=) or1200 or1200 de1_or1k qaz
+
+Dev_Kit_060804_config: unconfig
+ @mkdir -p $(obj)include
+ @echo "#define CONFIG_DEV_KIT_060804" > $(obj)include/config.h
+ @$(MKCONFIG) -a $(@:_config=) or1200 or1200 Dev_Kit_060804 qaz
+
#########################################################################
#########################################################################
diff -Naur u-boot-2009.03_orig/api/CVS/Entries u-boot-2009.03/api/CVS/Entries
--- u-boot-2009.03_orig/api/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api/CVS/Entries 2009-03-25 15:57:09.012722500 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api_net.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api_platform-arm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api_platform-ppc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api_private.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api_storage.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/api/CVS/Entries.Extra u-boot-2009.03/api/CVS/Entries.Extra
--- u-boot-2009.03_orig/api/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api/CVS/Entries.Extra 2009-03-25 15:57:09.012722500 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019686/
+/README///1238019686/
+/api.c///1238019686/
+/api_net.c///1238019686/
+/api_platform-arm.c///1238019686/
+/api_platform-ppc.c///1238019686/
+/api_private.h///1238019686/
+/api_storage.c///1238019686/
diff -Naur u-boot-2009.03_orig/api/CVS/Entries.Extra.Old u-boot-2009.03/api/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/api/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api/CVS/Entries.Extra.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019686/
+/README///1238019686/
+/api.c///1238019686/
+/api_net.c///1238019686/
+/api_platform-arm.c///1238019686/
+/api_platform-ppc.c///1238019686/
+/api_private.h///1238019686/
+/api_storage.c///1238019686/
diff -Naur u-boot-2009.03_orig/api/CVS/Entries.Old u-boot-2009.03/api/CVS/Entries.Old
--- u-boot-2009.03_orig/api/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api/CVS/Entries.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/api.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/api_net.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/api_platform-arm.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/api_platform-ppc.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/api_private.h/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/api_storage.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/api/CVS/Repository u-boot-2009.03/api/CVS/Repository
--- u-boot-2009.03_orig/api/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api/CVS/Repository 2009-03-25 15:23:58.025819800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/api
diff -Naur u-boot-2009.03_orig/api/CVS/Root u-boot-2009.03/api/CVS/Root
--- u-boot-2009.03_orig/api/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api/CVS/Root 2009-03-25 15:23:58.025819800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/api_examples/CVS/Entries u-boot-2009.03/api_examples/CVS/Entries
--- u-boot-2009.03_orig/api_examples/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api_examples/CVS/Entries 2009-03-25 15:57:09.106471900 -0700
@@ -0,0 +1,8 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crt0.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/demo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/glue.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/glue.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libgenwrap.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/api_examples/CVS/Entries.Extra u-boot-2009.03/api_examples/CVS/Entries.Extra
--- u-boot-2009.03_orig/api_examples/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api_examples/CVS/Entries.Extra 2009-03-25 15:57:09.106471900 -0700
@@ -0,0 +1,7 @@
+/.gitignore///1238019686/
+/Makefile///1238019686/
+/crt0.S///1238019686/
+/demo.c///1238019686/
+/glue.c///1238019686/
+/glue.h///1238019686/
+/libgenwrap.c///1238019686/
diff -Naur u-boot-2009.03_orig/api_examples/CVS/Entries.Extra.Old u-boot-2009.03/api_examples/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/api_examples/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api_examples/CVS/Entries.Extra.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,7 @@
+/.gitignore///1238019686/
+/Makefile///1238019686/
+/crt0.S///1238019686/
+/demo.c///1238019686/
+/glue.c///1238019686/
+/glue.h///1238019686/
+/libgenwrap.c///1238019686/
diff -Naur u-boot-2009.03_orig/api_examples/CVS/Entries.Old u-boot-2009.03/api_examples/CVS/Entries.Old
--- u-boot-2009.03_orig/api_examples/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api_examples/CVS/Entries.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,8 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/crt0.S/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/demo.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/glue.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/glue.h/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/libgenwrap.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/api_examples/CVS/Repository u-boot-2009.03/api_examples/CVS/Repository
--- u-boot-2009.03_orig/api_examples/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api_examples/CVS/Repository 2009-03-25 15:23:58.182067800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/api_examples
diff -Naur u-boot-2009.03_orig/api_examples/CVS/Root u-boot-2009.03/api_examples/CVS/Root
--- u-boot-2009.03_orig/api_examples/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/api_examples/CVS/Root 2009-03-25 15:23:58.182067800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/CVS/Entries u-boot-2009.03/board/AtmarkTechno/CVS/Entries
--- u-boot-2009.03_orig/board/AtmarkTechno/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/CVS/Entries 2009-03-25 15:23:58.525813400 -0700
@@ -0,0 +1 @@
+D/suzaku////
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/CVS/Entries.Extra u-boot-2009.03/board/AtmarkTechno/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/AtmarkTechno/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/CVS/Entries.Extra 2009-03-25 15:23:58.525813400 -0700
@@ -0,0 +1 @@
+D/suzaku////
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/CVS/Repository u-boot-2009.03/board/AtmarkTechno/CVS/Repository
--- u-boot-2009.03_orig/board/AtmarkTechno/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/CVS/Repository 2009-03-25 15:23:58.353940600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/AtmarkTechno
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/CVS/Root u-boot-2009.03/board/AtmarkTechno/CVS/Root
--- u-boot-2009.03_orig/board/AtmarkTechno/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/CVS/Root 2009-03-25 15:23:58.353940600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries
--- u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries 2009-03-25 15:57:09.215846200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/suzaku.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries.Extra u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries.Extra 2009-03-25 15:57:09.231471100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/suzaku.c///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries.Extra.Old u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries.Extra.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/suzaku.c///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries.Old u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries.Old
--- u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Entries.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/suzaku.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Repository u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Repository
--- u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Repository 2009-03-25 15:23:58.416439800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/AtmarkTechno/suzaku
diff -Naur u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Root u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Root
--- u-boot-2009.03_orig/board/AtmarkTechno/suzaku/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/AtmarkTechno/suzaku/CVS/Root 2009-03-25 15:23:58.416439800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/BuS/CVS/Entries u-boot-2009.03/board/BuS/CVS/Entries
--- u-boot-2009.03_orig/board/BuS/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/CVS/Entries 2009-03-25 15:23:58.728935800 -0700
@@ -0,0 +1 @@
+D/EB+MCF-EV123////
diff -Naur u-boot-2009.03_orig/board/BuS/CVS/Entries.Extra u-boot-2009.03/board/BuS/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/BuS/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/CVS/Entries.Extra 2009-03-25 15:23:58.728935800 -0700
@@ -0,0 +1 @@
+D/EB+MCF-EV123////
diff -Naur u-boot-2009.03_orig/board/BuS/CVS/Repository u-boot-2009.03/board/BuS/CVS/Repository
--- u-boot-2009.03_orig/board/BuS/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/CVS/Repository 2009-03-25 15:23:58.557063000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/BuS
diff -Naur u-boot-2009.03_orig/board/BuS/CVS/Root u-boot-2009.03/board/BuS/CVS/Root
--- u-boot-2009.03_orig/board/BuS/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/CVS/Root 2009-03-25 15:23:58.557063000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries
--- u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries 2009-03-25 15:57:09.309595600 -0700
@@ -0,0 +1,11 @@
+/EB+MCF-EV123.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VCxK.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VCxK.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cfm_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cfm_flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/textbase.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries.Extra u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries.Extra 2009-03-25 15:57:09.325220500 -0700
@@ -0,0 +1,10 @@
+/EB+MCF-EV123.c///1238019689/
+/Makefile///1238019689/
+/VCxK.c///1238019689/
+/VCxK.h///1238019689/
+/cfm_flash.c///1238019689/
+/cfm_flash.h///1238019689/
+/config.mk///1238019689/
+/flash.c///1238019689/
+/textbase.mk///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries.Extra.Old u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries.Extra.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,10 @@
+/EB+MCF-EV123.c///1238019689/
+/Makefile///1238019689/
+/VCxK.c///1238019689/
+/VCxK.h///1238019689/
+/cfm_flash.c///1238019689/
+/cfm_flash.h///1238019689/
+/config.mk///1238019689/
+/flash.c///1238019689/
+/textbase.mk///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries.Old u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries.Old
--- u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Entries.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,11 @@
+/EB+MCF-EV123.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/VCxK.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/VCxK.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/cfm_flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/cfm_flash.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/textbase.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Repository u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Repository
--- u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Repository 2009-03-25 15:23:58.588312600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/BuS/EB+MCF-EV123
diff -Naur u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Root u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Root
--- u-boot-2009.03_orig/board/BuS/EB+MCF-EV123/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/BuS/EB+MCF-EV123/CVS/Root 2009-03-25 15:23:58.588312600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/CVS/Entries u-boot-2009.03/board/CVS/Entries
--- u-boot-2009.03_orig/board/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/CVS/Entries 2009-03-25 17:49:08.139939700 -0700
@@ -0,0 +1,252 @@
+D/AtmarkTechno////
+D/BuS////
+D/LEOX////
+D/MAI////
+D/Marvell////
+D/RPXClassic////
+D/RPXlite////
+D/RPXlite_dw////
+D/RRvision////
+D/a3000////
+D/actux1////
+D/actux2////
+D/actux3////
+D/actux4////
+D/adder////
+D/ads5121////
+D/afeb9260////
+D/alaska////
+D/altera////
+D/amcc////
+D/amirix////
+D/apollon////
+D/armadillo////
+D/armltd////
+D/assabet////
+D/atc////
+D/atmel////
+D/atum8548////
+D/avnet////
+D/barco////
+D/bc3450////
+D/bf533-ezkit////
+D/bf533-stamp////
+D/bf537-stamp////
+D/bf561-ezkit////
+D/bmw////
+D/c2mon////
+D/canmb////
+D/cerf250////
+D/cm4008////
+D/cm41xx////
+D/cm5200////
+D/cmc_pu2////
+D/cmi////
+D/cobra5272////
+D/cogent////
+D/cpc45////
+D/cpu86////
+D/cpu87////
+D/cradle////
+D/cray////
+D/csb226////
+D/csb272////
+D/csb472////
+D/csb637////
+D/cu824////
+D/dave////
+D/davedenx////
+D/davinci////
+D/dbau1x00////
+D/delta////
+D/dnp1110////
+D/eNET////
+D/eXalion////
+D/earthlcd////
+D/eltec////
+D/emk////
+D/ep7312////
+D/ep8248////
+D/ep8260////
+D/ep82xxm////
+D/ep88x////
+D/eric////
+D/esd////
+D/esteem192e////
+D/etin////
+D/etx094////
+D/evb4510////
+D/evb64260////
+D/exbitgen////
+D/fads////
+D/flagadm////
+D/freescale////
+D/funkwerk////
+D/g2000////
+D/gaisler////
+D/gcplus////
+D/gdsys////
+D/gen860t////
+D/genietv////
+D/gth////
+D/gth2////
+D/gw8260////
+D/hermes////
+D/hidden_dragon////
+D/hmi1001////
+D/hymod////
+D/icecube////
+D/icu862////
+D/idmr////
+D/ids8247////
+D/impa7////
+D/imx31_litekit////
+D/imx31_phycore////
+D/incaip////
+D/inka4x0////
+D/innokom////
+D/ip860////
+D/iphase4539////
+D/ispan////
+D/ivm////
+D/ixdp425////
+D/jse////
+D/jupiter////
+D/kb9202////
+D/keymile////
+D/korat////
+D/kup////
+D/lantec////
+D/lart////
+D/linkstation////
+D/logodl////
+D/lpc2292sodimm////
+D/lpd7a40x////
+D/lubbock////
+D/lwmon////
+D/lwmon5////
+D/m501sk////
+D/matrix_vision////
+D/mbx8xx////
+D/mcc200////
+D/micronas////
+D/mimc////
+D/miromico////
+D/ml2////
+D/modnet50////
+D/motionpro////
+D/mousse////
+D/mp2usb////
+D/mpc8540eval////
+D/mpl////
+D/mpr2////
+D/ms7720se////
+D/ms7722se////
+D/ms7750se////
+D/muas3001////
+D/mucmc52////
+D/munices////
+D/musenki////
+D/mvblue////
+D/mx1ads////
+D/mx1fs2////
+D/nc650////
+D/netphone////
+D/netstal////
+D/netstar////
+D/netta////
+D/netta2////
+D/netvia////
+D/ns9750dev////
+D/nx823////
+D/o2dnt////
+D/omap1510inn////
+D/omap1610inn////
+D/omap2420h4////
+D/omap3////
+D/omap5912osk////
+D/omap730p2////
+D/oxc////
+D/pb1x00////
+D/pcippc2////
+D/pcs440ep////
+D/pleb2////
+D/pm520////
+D/pm826////
+D/pm828////
+D/pm854////
+D/pm856////
+D/pn62////
+D/ppmc7xx////
+D/ppmc8260////
+D/prodrive////
+D/psyent////
+D/purple////
+D/pxa255_idp////
+D/qemu-mips////
+D/quad100hd////
+D/quantum////
+D/r360mpi////
+D/rattler////
+D/rbc823////
+D/renesas////
+D/rmu////
+D/rpxsuper////
+D/rsdproto////
+D/sacsng////
+D/samsung////
+D/sandburst////
+D/sandpoint////
+D/sbc2410x////
+D/sbc405////
+D/sbc8240////
+D/sbc8260////
+D/sbc8349////
+D/sbc8548////
+D/sbc8560////
+D/sbc8641d////
+D/sc3////
+D/sc520_cdp////
+D/sc520_spunk////
+D/scb9328////
+D/shannon////
+D/sheldon////
+D/siemens////
+D/sixnet////
+D/sl8245////
+D/snmc////
+D/socrates////
+D/sorcery////
+D/spc1920////
+D/spd8xx////
+D/ssv////
+D/st////
+D/stxgp3////
+D/stxssa////
+D/stxxtc////
+D/svm_sc8xx////
+D/sx1////
+D/tb0229////
+D/total5200////
+D/tqc////
+D/trab////
+D/trizepsiv////
+D/uc100////
+D/uc101////
+D/utx8245////
+D/v37////
+D/v38b////
+D/voiceblue////
+D/w7o////
+D/wepep250////
+D/westel////
+D/xaeniax////
+D/xes////
+D/xilinx////
+D/xm250////
+D/xpedite1k////
+D/xsengine////
+D/zeus////
+D/zpc1900////
+D/zylonite////
+D/qaz////
diff -Naur u-boot-2009.03_orig/board/CVS/Entries.Extra u-boot-2009.03/board/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/CVS/Entries.Extra 2009-03-25 17:49:08.139939700 -0700
@@ -0,0 +1,252 @@
+D/AtmarkTechno////
+D/BuS////
+D/LEOX////
+D/MAI////
+D/Marvell////
+D/RPXClassic////
+D/RPXlite////
+D/RPXlite_dw////
+D/RRvision////
+D/a3000////
+D/actux1////
+D/actux2////
+D/actux3////
+D/actux4////
+D/adder////
+D/ads5121////
+D/afeb9260////
+D/alaska////
+D/altera////
+D/amcc////
+D/amirix////
+D/apollon////
+D/armadillo////
+D/armltd////
+D/assabet////
+D/atc////
+D/atmel////
+D/atum8548////
+D/avnet////
+D/barco////
+D/bc3450////
+D/bf533-ezkit////
+D/bf533-stamp////
+D/bf537-stamp////
+D/bf561-ezkit////
+D/bmw////
+D/c2mon////
+D/canmb////
+D/cerf250////
+D/cm4008////
+D/cm41xx////
+D/cm5200////
+D/cmc_pu2////
+D/cmi////
+D/cobra5272////
+D/cogent////
+D/cpc45////
+D/cpu86////
+D/cpu87////
+D/cradle////
+D/cray////
+D/csb226////
+D/csb272////
+D/csb472////
+D/csb637////
+D/cu824////
+D/dave////
+D/davedenx////
+D/davinci////
+D/dbau1x00////
+D/delta////
+D/dnp1110////
+D/eNET////
+D/eXalion////
+D/earthlcd////
+D/eltec////
+D/emk////
+D/ep7312////
+D/ep8248////
+D/ep8260////
+D/ep82xxm////
+D/ep88x////
+D/eric////
+D/esd////
+D/esteem192e////
+D/etin////
+D/etx094////
+D/evb4510////
+D/evb64260////
+D/exbitgen////
+D/fads////
+D/flagadm////
+D/freescale////
+D/funkwerk////
+D/g2000////
+D/gaisler////
+D/gcplus////
+D/gdsys////
+D/gen860t////
+D/genietv////
+D/gth////
+D/gth2////
+D/gw8260////
+D/hermes////
+D/hidden_dragon////
+D/hmi1001////
+D/hymod////
+D/icecube////
+D/icu862////
+D/idmr////
+D/ids8247////
+D/impa7////
+D/imx31_litekit////
+D/imx31_phycore////
+D/incaip////
+D/inka4x0////
+D/innokom////
+D/ip860////
+D/iphase4539////
+D/ispan////
+D/ivm////
+D/ixdp425////
+D/jse////
+D/jupiter////
+D/kb9202////
+D/keymile////
+D/korat////
+D/kup////
+D/lantec////
+D/lart////
+D/linkstation////
+D/logodl////
+D/lpc2292sodimm////
+D/lpd7a40x////
+D/lubbock////
+D/lwmon////
+D/lwmon5////
+D/m501sk////
+D/matrix_vision////
+D/mbx8xx////
+D/mcc200////
+D/micronas////
+D/mimc////
+D/miromico////
+D/ml2////
+D/modnet50////
+D/motionpro////
+D/mousse////
+D/mp2usb////
+D/mpc8540eval////
+D/mpl////
+D/mpr2////
+D/ms7720se////
+D/ms7722se////
+D/ms7750se////
+D/muas3001////
+D/mucmc52////
+D/munices////
+D/musenki////
+D/mvblue////
+D/mx1ads////
+D/mx1fs2////
+D/nc650////
+D/netphone////
+D/netstal////
+D/netstar////
+D/netta////
+D/netta2////
+D/netvia////
+D/ns9750dev////
+D/nx823////
+D/o2dnt////
+D/omap1510inn////
+D/omap1610inn////
+D/omap2420h4////
+D/omap3////
+D/omap5912osk////
+D/omap730p2////
+D/oxc////
+D/pb1x00////
+D/pcippc2////
+D/pcs440ep////
+D/pleb2////
+D/pm520////
+D/pm826////
+D/pm828////
+D/pm854////
+D/pm856////
+D/pn62////
+D/ppmc7xx////
+D/ppmc8260////
+D/prodrive////
+D/psyent////
+D/purple////
+D/pxa255_idp////
+D/qemu-mips////
+D/quad100hd////
+D/quantum////
+D/r360mpi////
+D/rattler////
+D/rbc823////
+D/renesas////
+D/rmu////
+D/rpxsuper////
+D/rsdproto////
+D/sacsng////
+D/samsung////
+D/sandburst////
+D/sandpoint////
+D/sbc2410x////
+D/sbc405////
+D/sbc8240////
+D/sbc8260////
+D/sbc8349////
+D/sbc8548////
+D/sbc8560////
+D/sbc8641d////
+D/sc3////
+D/sc520_cdp////
+D/sc520_spunk////
+D/scb9328////
+D/shannon////
+D/sheldon////
+D/siemens////
+D/sixnet////
+D/sl8245////
+D/snmc////
+D/socrates////
+D/sorcery////
+D/spc1920////
+D/spd8xx////
+D/ssv////
+D/st////
+D/stxgp3////
+D/stxssa////
+D/stxxtc////
+D/svm_sc8xx////
+D/sx1////
+D/tb0229////
+D/total5200////
+D/tqc////
+D/trab////
+D/trizepsiv////
+D/uc100////
+D/uc101////
+D/utx8245////
+D/v37////
+D/v38b////
+D/voiceblue////
+D/w7o////
+D/wepep250////
+D/westel////
+D/xaeniax////
+D/xes////
+D/xilinx////
+D/xm250////
+D/xpedite1k////
+D/xsengine////
+D/zeus////
+D/zpc1900////
+D/zylonite////
+D/qaz////
diff -Naur u-boot-2009.03_orig/board/CVS/Entries.Extra.Old u-boot-2009.03/board/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/CVS/Entries.Extra.Old 2009-03-25 15:25:09.000000000 -0700
@@ -0,0 +1,251 @@
+D/AtmarkTechno////
+D/BuS////
+D/LEOX////
+D/MAI////
+D/Marvell////
+D/RPXClassic////
+D/RPXlite////
+D/RPXlite_dw////
+D/RRvision////
+D/a3000////
+D/actux1////
+D/actux2////
+D/actux3////
+D/actux4////
+D/adder////
+D/ads5121////
+D/afeb9260////
+D/alaska////
+D/altera////
+D/amcc////
+D/amirix////
+D/apollon////
+D/armadillo////
+D/armltd////
+D/assabet////
+D/atc////
+D/atmel////
+D/atum8548////
+D/avnet////
+D/barco////
+D/bc3450////
+D/bf533-ezkit////
+D/bf533-stamp////
+D/bf537-stamp////
+D/bf561-ezkit////
+D/bmw////
+D/c2mon////
+D/canmb////
+D/cerf250////
+D/cm4008////
+D/cm41xx////
+D/cm5200////
+D/cmc_pu2////
+D/cmi////
+D/cobra5272////
+D/cogent////
+D/cpc45////
+D/cpu86////
+D/cpu87////
+D/cradle////
+D/cray////
+D/csb226////
+D/csb272////
+D/csb472////
+D/csb637////
+D/cu824////
+D/dave////
+D/davedenx////
+D/davinci////
+D/dbau1x00////
+D/delta////
+D/dnp1110////
+D/eNET////
+D/eXalion////
+D/earthlcd////
+D/eltec////
+D/emk////
+D/ep7312////
+D/ep8248////
+D/ep8260////
+D/ep82xxm////
+D/ep88x////
+D/eric////
+D/esd////
+D/esteem192e////
+D/etin////
+D/etx094////
+D/evb4510////
+D/evb64260////
+D/exbitgen////
+D/fads////
+D/flagadm////
+D/freescale////
+D/funkwerk////
+D/g2000////
+D/gaisler////
+D/gcplus////
+D/gdsys////
+D/gen860t////
+D/genietv////
+D/gth////
+D/gth2////
+D/gw8260////
+D/hermes////
+D/hidden_dragon////
+D/hmi1001////
+D/hymod////
+D/icecube////
+D/icu862////
+D/idmr////
+D/ids8247////
+D/impa7////
+D/imx31_litekit////
+D/imx31_phycore////
+D/incaip////
+D/inka4x0////
+D/innokom////
+D/ip860////
+D/iphase4539////
+D/ispan////
+D/ivm////
+D/ixdp425////
+D/jse////
+D/jupiter////
+D/kb9202////
+D/keymile////
+D/korat////
+D/kup////
+D/lantec////
+D/lart////
+D/linkstation////
+D/logodl////
+D/lpc2292sodimm////
+D/lpd7a40x////
+D/lubbock////
+D/lwmon////
+D/lwmon5////
+D/m501sk////
+D/matrix_vision////
+D/mbx8xx////
+D/mcc200////
+D/micronas////
+D/mimc////
+D/miromico////
+D/ml2////
+D/modnet50////
+D/motionpro////
+D/mousse////
+D/mp2usb////
+D/mpc8540eval////
+D/mpl////
+D/mpr2////
+D/ms7720se////
+D/ms7722se////
+D/ms7750se////
+D/muas3001////
+D/mucmc52////
+D/munices////
+D/musenki////
+D/mvblue////
+D/mx1ads////
+D/mx1fs2////
+D/nc650////
+D/netphone////
+D/netstal////
+D/netstar////
+D/netta////
+D/netta2////
+D/netvia////
+D/ns9750dev////
+D/nx823////
+D/o2dnt////
+D/omap1510inn////
+D/omap1610inn////
+D/omap2420h4////
+D/omap3////
+D/omap5912osk////
+D/omap730p2////
+D/oxc////
+D/pb1x00////
+D/pcippc2////
+D/pcs440ep////
+D/pleb2////
+D/pm520////
+D/pm826////
+D/pm828////
+D/pm854////
+D/pm856////
+D/pn62////
+D/ppmc7xx////
+D/ppmc8260////
+D/prodrive////
+D/psyent////
+D/purple////
+D/pxa255_idp////
+D/qemu-mips////
+D/quad100hd////
+D/quantum////
+D/r360mpi////
+D/rattler////
+D/rbc823////
+D/renesas////
+D/rmu////
+D/rpxsuper////
+D/rsdproto////
+D/sacsng////
+D/samsung////
+D/sandburst////
+D/sandpoint////
+D/sbc2410x////
+D/sbc405////
+D/sbc8240////
+D/sbc8260////
+D/sbc8349////
+D/sbc8548////
+D/sbc8560////
+D/sbc8641d////
+D/sc3////
+D/sc520_cdp////
+D/sc520_spunk////
+D/scb9328////
+D/shannon////
+D/sheldon////
+D/siemens////
+D/sixnet////
+D/sl8245////
+D/snmc////
+D/socrates////
+D/sorcery////
+D/spc1920////
+D/spd8xx////
+D/ssv////
+D/st////
+D/stxgp3////
+D/stxssa////
+D/stxxtc////
+D/svm_sc8xx////
+D/sx1////
+D/tb0229////
+D/total5200////
+D/tqc////
+D/trab////
+D/trizepsiv////
+D/uc100////
+D/uc101////
+D/utx8245////
+D/v37////
+D/v38b////
+D/voiceblue////
+D/w7o////
+D/wepep250////
+D/westel////
+D/xaeniax////
+D/xes////
+D/xilinx////
+D/xm250////
+D/xpedite1k////
+D/xsengine////
+D/zeus////
+D/zpc1900////
+D/zylonite////
diff -Naur u-boot-2009.03_orig/board/CVS/Entries.Old u-boot-2009.03/board/CVS/Entries.Old
--- u-boot-2009.03_orig/board/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/CVS/Entries.Old 2009-03-25 15:25:09.000000000 -0700
@@ -0,0 +1,251 @@
+D/AtmarkTechno////
+D/BuS////
+D/LEOX////
+D/MAI////
+D/Marvell////
+D/RPXClassic////
+D/RPXlite////
+D/RPXlite_dw////
+D/RRvision////
+D/a3000////
+D/actux1////
+D/actux2////
+D/actux3////
+D/actux4////
+D/adder////
+D/ads5121////
+D/afeb9260////
+D/alaska////
+D/altera////
+D/amcc////
+D/amirix////
+D/apollon////
+D/armadillo////
+D/armltd////
+D/assabet////
+D/atc////
+D/atmel////
+D/atum8548////
+D/avnet////
+D/barco////
+D/bc3450////
+D/bf533-ezkit////
+D/bf533-stamp////
+D/bf537-stamp////
+D/bf561-ezkit////
+D/bmw////
+D/c2mon////
+D/canmb////
+D/cerf250////
+D/cm4008////
+D/cm41xx////
+D/cm5200////
+D/cmc_pu2////
+D/cmi////
+D/cobra5272////
+D/cogent////
+D/cpc45////
+D/cpu86////
+D/cpu87////
+D/cradle////
+D/cray////
+D/csb226////
+D/csb272////
+D/csb472////
+D/csb637////
+D/cu824////
+D/dave////
+D/davedenx////
+D/davinci////
+D/dbau1x00////
+D/delta////
+D/dnp1110////
+D/eNET////
+D/eXalion////
+D/earthlcd////
+D/eltec////
+D/emk////
+D/ep7312////
+D/ep8248////
+D/ep8260////
+D/ep82xxm////
+D/ep88x////
+D/eric////
+D/esd////
+D/esteem192e////
+D/etin////
+D/etx094////
+D/evb4510////
+D/evb64260////
+D/exbitgen////
+D/fads////
+D/flagadm////
+D/freescale////
+D/funkwerk////
+D/g2000////
+D/gaisler////
+D/gcplus////
+D/gdsys////
+D/gen860t////
+D/genietv////
+D/gth////
+D/gth2////
+D/gw8260////
+D/hermes////
+D/hidden_dragon////
+D/hmi1001////
+D/hymod////
+D/icecube////
+D/icu862////
+D/idmr////
+D/ids8247////
+D/impa7////
+D/imx31_litekit////
+D/imx31_phycore////
+D/incaip////
+D/inka4x0////
+D/innokom////
+D/ip860////
+D/iphase4539////
+D/ispan////
+D/ivm////
+D/ixdp425////
+D/jse////
+D/jupiter////
+D/kb9202////
+D/keymile////
+D/korat////
+D/kup////
+D/lantec////
+D/lart////
+D/linkstation////
+D/logodl////
+D/lpc2292sodimm////
+D/lpd7a40x////
+D/lubbock////
+D/lwmon////
+D/lwmon5////
+D/m501sk////
+D/matrix_vision////
+D/mbx8xx////
+D/mcc200////
+D/micronas////
+D/mimc////
+D/miromico////
+D/ml2////
+D/modnet50////
+D/motionpro////
+D/mousse////
+D/mp2usb////
+D/mpc8540eval////
+D/mpl////
+D/mpr2////
+D/ms7720se////
+D/ms7722se////
+D/ms7750se////
+D/muas3001////
+D/mucmc52////
+D/munices////
+D/musenki////
+D/mvblue////
+D/mx1ads////
+D/mx1fs2////
+D/nc650////
+D/netphone////
+D/netstal////
+D/netstar////
+D/netta////
+D/netta2////
+D/netvia////
+D/ns9750dev////
+D/nx823////
+D/o2dnt////
+D/omap1510inn////
+D/omap1610inn////
+D/omap2420h4////
+D/omap3////
+D/omap5912osk////
+D/omap730p2////
+D/oxc////
+D/pb1x00////
+D/pcippc2////
+D/pcs440ep////
+D/pleb2////
+D/pm520////
+D/pm826////
+D/pm828////
+D/pm854////
+D/pm856////
+D/pn62////
+D/ppmc7xx////
+D/ppmc8260////
+D/prodrive////
+D/psyent////
+D/purple////
+D/pxa255_idp////
+D/qemu-mips////
+D/quad100hd////
+D/quantum////
+D/r360mpi////
+D/rattler////
+D/rbc823////
+D/renesas////
+D/rmu////
+D/rpxsuper////
+D/rsdproto////
+D/sacsng////
+D/samsung////
+D/sandburst////
+D/sandpoint////
+D/sbc2410x////
+D/sbc405////
+D/sbc8240////
+D/sbc8260////
+D/sbc8349////
+D/sbc8548////
+D/sbc8560////
+D/sbc8641d////
+D/sc3////
+D/sc520_cdp////
+D/sc520_spunk////
+D/scb9328////
+D/shannon////
+D/sheldon////
+D/siemens////
+D/sixnet////
+D/sl8245////
+D/snmc////
+D/socrates////
+D/sorcery////
+D/spc1920////
+D/spd8xx////
+D/ssv////
+D/st////
+D/stxgp3////
+D/stxssa////
+D/stxxtc////
+D/svm_sc8xx////
+D/sx1////
+D/tb0229////
+D/total5200////
+D/tqc////
+D/trab////
+D/trizepsiv////
+D/uc100////
+D/uc101////
+D/utx8245////
+D/v37////
+D/v38b////
+D/voiceblue////
+D/w7o////
+D/wepep250////
+D/westel////
+D/xaeniax////
+D/xes////
+D/xilinx////
+D/xm250////
+D/xpedite1k////
+D/xsengine////
+D/zeus////
+D/zpc1900////
+D/zylonite////
diff -Naur u-boot-2009.03_orig/board/CVS/Repository u-boot-2009.03/board/CVS/Repository
--- u-boot-2009.03_orig/board/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/CVS/Repository 2009-03-25 15:23:58.307066200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board
diff -Naur u-boot-2009.03_orig/board/CVS/Root u-boot-2009.03/board/CVS/Root
--- u-boot-2009.03_orig/board/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/CVS/Root 2009-03-25 15:23:58.307066200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/LEOX/CVS/Entries u-boot-2009.03/board/LEOX/CVS/Entries
--- u-boot-2009.03_orig/board/LEOX/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/CVS/Entries 2009-03-25 15:23:58.932058200 -0700
@@ -0,0 +1 @@
+D/elpt860////
diff -Naur u-boot-2009.03_orig/board/LEOX/CVS/Entries.Extra u-boot-2009.03/board/LEOX/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/LEOX/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/CVS/Entries.Extra 2009-03-25 15:23:58.932058200 -0700
@@ -0,0 +1 @@
+D/elpt860////
diff -Naur u-boot-2009.03_orig/board/LEOX/CVS/Repository u-boot-2009.03/board/LEOX/CVS/Repository
--- u-boot-2009.03_orig/board/LEOX/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/CVS/Repository 2009-03-25 15:23:58.760185400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/LEOX
diff -Naur u-boot-2009.03_orig/board/LEOX/CVS/Root u-boot-2009.03/board/LEOX/CVS/Root
--- u-boot-2009.03_orig/board/LEOX/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/CVS/Root 2009-03-25 15:23:58.760185400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries u-boot-2009.03/board/LEOX/elpt860/CVS/Entries
--- u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/elpt860/CVS/Entries 2009-03-25 15:57:09.403345000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.LEOX/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/elpt860.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries.Extra u-boot-2009.03/board/LEOX/elpt860/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/elpt860/CVS/Entries.Extra 2009-03-25 15:57:09.403345000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019701/
+/README.LEOX///1238019701/
+/config.mk///1238019701/
+/elpt860.c///1238019701/
+/flash.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries.Extra.Old u-boot-2009.03/board/LEOX/elpt860/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/elpt860/CVS/Entries.Extra.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019701/
+/README.LEOX///1238019701/
+/config.mk///1238019701/
+/elpt860.c///1238019701/
+/flash.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries.Old u-boot-2009.03/board/LEOX/elpt860/CVS/Entries.Old
--- u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/elpt860/CVS/Entries.Old 2009-03-25 15:23:58.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/README.LEOX/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/elpt860.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Repository u-boot-2009.03/board/LEOX/elpt860/CVS/Repository
--- u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/elpt860/CVS/Repository 2009-03-25 15:23:58.791435000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/LEOX/elpt860
diff -Naur u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Root u-boot-2009.03/board/LEOX/elpt860/CVS/Root
--- u-boot-2009.03_orig/board/LEOX/elpt860/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/LEOX/elpt860/CVS/Root 2009-03-25 15:23:58.791435000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries
--- u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries 2009-03-25 15:57:09.575218900 -0700
@@ -0,0 +1,34 @@
+/AmigaOneG3SE.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/articiaS.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/articiaS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/articiaS_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board_asm_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_boota.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/enet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash_new.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i8259.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i8259.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/macros.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memio.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory_dump/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nvram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ps2kbd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ps2kbd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/short_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smbus.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smbus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/todo.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_uhci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_uhci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/via686.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/via686.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries.Extra u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries.Extra 2009-03-25 15:57:09.575218900 -0700
@@ -0,0 +1,33 @@
+/AmigaOneG3SE.c///1238019701/
+/Makefile///1238019702/
+/articiaS.c///1238019701/
+/articiaS.h///1238019701/
+/articiaS_pci.c///1238019701/
+/board_asm_init.S///1238019702/
+/cmd_boota.c///1238019702/
+/config.mk///1238019702/
+/enet.c///1238019702/
+/flash.c///1238019702/
+/flash_new.c///1238019702/
+/i8259.c///1238019702/
+/i8259.h///1238019702/
+/interrupts.c///1238019702/
+/macros.h///1238019702/
+/memio.S///1238019702/
+/memio.h///1238019702/
+/memory_dump///1238019702/
+/nvram.c///1238019702/
+/ps2kbd.c///1238019702/
+/ps2kbd.h///1238019702/
+/serial.c///1238019702/
+/short_types.h///1238019702/
+/smbus.c///1238019702/
+/smbus.h///1238019702/
+/start.txt///1238019702/
+/todo.txt///1238019702/
+/u-boot.lds///1238019702/
+/usb_uhci.c///1238019702/
+/usb_uhci.h///1238019702/
+/via686.c///1238019702/
+/via686.h///1238019702/
+/video.c///1238019702/
diff -Naur u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries.Extra.Old u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries.Extra.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1,33 @@
+/AmigaOneG3SE.c///1238019701/
+/Makefile///1238019702/
+/articiaS.c///1238019701/
+/articiaS.h///1238019701/
+/articiaS_pci.c///1238019701/
+/board_asm_init.S///1238019702/
+/cmd_boota.c///1238019702/
+/config.mk///1238019702/
+/enet.c///1238019702/
+/flash.c///1238019702/
+/flash_new.c///1238019702/
+/i8259.c///1238019702/
+/i8259.h///1238019702/
+/interrupts.c///1238019702/
+/macros.h///1238019702/
+/memio.S///1238019702/
+/memio.h///1238019702/
+/memory_dump///1238019702/
+/nvram.c///1238019702/
+/ps2kbd.c///1238019702/
+/ps2kbd.h///1238019702/
+/serial.c///1238019702/
+/short_types.h///1238019702/
+/smbus.c///1238019702/
+/smbus.h///1238019702/
+/start.txt///1238019702/
+/todo.txt///1238019702/
+/u-boot.lds///1238019702/
+/usb_uhci.c///1238019702/
+/usb_uhci.h///1238019702/
+/via686.c///1238019702/
+/via686.h///1238019702/
+/video.c///1238019702/
diff -Naur u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries.Old u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries.Old
--- u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Entries.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1,34 @@
+/AmigaOneG3SE.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/articiaS.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/articiaS.h/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/articiaS_pci.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/board_asm_init.S/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/cmd_boota.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/enet.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/flash_new.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/i8259.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/i8259.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/macros.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/memio.S/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/memio.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/memory_dump/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/nvram.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/ps2kbd.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/ps2kbd.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/short_types.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/smbus.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/smbus.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/start.txt/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/todo.txt/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/usb_uhci.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/usb_uhci.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/via686.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/via686.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/video.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Repository u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Repository
--- u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Repository 2009-03-25 15:23:59.010182200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/MAI/AmigaOneG3SE
diff -Naur u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Root u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Root
--- u-boot-2009.03_orig/board/MAI/AmigaOneG3SE/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/AmigaOneG3SE/CVS/Root 2009-03-25 15:23:59.010182200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/MAI/CVS/Entries u-boot-2009.03/board/MAI/CVS/Entries
--- u-boot-2009.03_orig/board/MAI/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/CVS/Entries 2009-03-25 15:23:59.478926200 -0700
@@ -0,0 +1,2 @@
+D/AmigaOneG3SE////
+D/menu////
diff -Naur u-boot-2009.03_orig/board/MAI/CVS/Entries.Extra u-boot-2009.03/board/MAI/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/MAI/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/CVS/Entries.Extra 2009-03-25 15:23:59.478926200 -0700
@@ -0,0 +1,2 @@
+D/AmigaOneG3SE////
+D/menu////
diff -Naur u-boot-2009.03_orig/board/MAI/CVS/Repository u-boot-2009.03/board/MAI/CVS/Repository
--- u-boot-2009.03_orig/board/MAI/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/CVS/Repository 2009-03-25 15:23:58.994557400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/MAI
diff -Naur u-boot-2009.03_orig/board/MAI/CVS/Root u-boot-2009.03/board/MAI/CVS/Root
--- u-boot-2009.03_orig/board/MAI/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/CVS/Root 2009-03-25 15:23:58.978932600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/MAI/menu/CVS/Entries u-boot-2009.03/board/MAI/menu/CVS/Entries
--- u-boot-2009.03_orig/board/MAI/menu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/menu/CVS/Entries 2009-03-25 15:57:09.653343400 -0700
@@ -0,0 +1,2 @@
+/cmd_menu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/MAI/menu/CVS/Entries.Extra u-boot-2009.03/board/MAI/menu/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/MAI/menu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/menu/CVS/Entries.Extra 2009-03-25 15:57:09.653343400 -0700
@@ -0,0 +1 @@
+/cmd_menu.c///1238019702/
diff -Naur u-boot-2009.03_orig/board/MAI/menu/CVS/Entries.Extra.Old u-boot-2009.03/board/MAI/menu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/MAI/menu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/menu/CVS/Entries.Extra.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1 @@
+/cmd_menu.c///1238019702/
diff -Naur u-boot-2009.03_orig/board/MAI/menu/CVS/Entries.Old u-boot-2009.03/board/MAI/menu/CVS/Entries.Old
--- u-boot-2009.03_orig/board/MAI/menu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/menu/CVS/Entries.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1,2 @@
+/cmd_menu.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/MAI/menu/CVS/Repository u-boot-2009.03/board/MAI/menu/CVS/Repository
--- u-boot-2009.03_orig/board/MAI/menu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/menu/CVS/Repository 2009-03-25 15:23:59.400802200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/MAI/menu
diff -Naur u-boot-2009.03_orig/board/MAI/menu/CVS/Root u-boot-2009.03/board/MAI/menu/CVS/Root
--- u-boot-2009.03_orig/board/MAI/menu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/MAI/menu/CVS/Root 2009-03-25 15:23:59.369552600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/Marvell/CVS/Entries u-boot-2009.03/board/Marvell/CVS/Entries
--- u-boot-2009.03_orig/board/Marvell/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/CVS/Entries 2009-03-25 15:24:00.275791000 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/db64360////
+D/db64460////
+D/include////
diff -Naur u-boot-2009.03_orig/board/Marvell/CVS/Entries.Extra u-boot-2009.03/board/Marvell/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/Marvell/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/CVS/Entries.Extra 2009-03-25 15:24:00.275791000 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/db64360////
+D/db64460////
+D/include////
diff -Naur u-boot-2009.03_orig/board/Marvell/CVS/Repository u-boot-2009.03/board/Marvell/CVS/Repository
--- u-boot-2009.03_orig/board/Marvell/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/CVS/Repository 2009-03-25 15:23:59.525800600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/Marvell
diff -Naur u-boot-2009.03_orig/board/Marvell/CVS/Root u-boot-2009.03/board/Marvell/CVS/Root
--- u-boot-2009.03_orig/board/Marvell/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/CVS/Root 2009-03-25 15:23:59.525800600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/Marvell/common/CVS/Entries u-boot-2009.03/board/Marvell/common/CVS/Entries
--- u-boot-2009.03_orig/board/Marvell/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/common/CVS/Entries 2009-03-25 15:57:09.778342600 -0700
@@ -0,0 +1,15 @@
+/bootseq.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ecctest.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intel_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intel_flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_error_no.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/common/CVS/Entries.Extra u-boot-2009.03/board/Marvell/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/Marvell/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/common/CVS/Entries.Extra 2009-03-25 15:57:09.778342600 -0700
@@ -0,0 +1,14 @@
+/bootseq.txt///1238019702/
+/ecctest.c///1238019702/
+/flash.c///1238019702/
+/i2c.c///1238019702/
+/i2c.h///1238019702/
+/intel_flash.c///1238019702/
+/intel_flash.h///1238019702/
+/memory.c///1238019702/
+/misc.S///1238019702/
+/ns16550.c///1238019702/
+/ns16550.h///1238019702/
+/ppc_error_no.h///1238019702/
+/serial.c///1238019702/
+/serial.h///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/common/CVS/Entries.Extra.Old u-boot-2009.03/board/Marvell/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/Marvell/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/common/CVS/Entries.Extra.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1,14 @@
+/bootseq.txt///1238019702/
+/ecctest.c///1238019702/
+/flash.c///1238019702/
+/i2c.c///1238019702/
+/i2c.h///1238019702/
+/intel_flash.c///1238019702/
+/intel_flash.h///1238019702/
+/memory.c///1238019702/
+/misc.S///1238019702/
+/ns16550.c///1238019702/
+/ns16550.h///1238019702/
+/ppc_error_no.h///1238019702/
+/serial.c///1238019702/
+/serial.h///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/common/CVS/Entries.Old u-boot-2009.03/board/Marvell/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/Marvell/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/common/CVS/Entries.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1,15 @@
+/bootseq.txt/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/ecctest.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/i2c.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/intel_flash.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/intel_flash.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/memory.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/misc.S/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/ns16550.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/ns16550.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/ppc_error_no.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/serial.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/common/CVS/Repository u-boot-2009.03/board/Marvell/common/CVS/Repository
--- u-boot-2009.03_orig/board/Marvell/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/common/CVS/Repository 2009-03-25 15:23:59.557050200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/Marvell/common
diff -Naur u-boot-2009.03_orig/board/Marvell/common/CVS/Root u-boot-2009.03/board/Marvell/common/CVS/Root
--- u-boot-2009.03_orig/board/Marvell/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/common/CVS/Root 2009-03-25 15:23:59.557050200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries u-boot-2009.03/board/Marvell/db64360/CVS/Entries
--- u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64360/CVS/Entries 2009-03-25 15:57:09.903341800 -0700
@@ -0,0 +1,14 @@
+/64360.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/db64360.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries.Extra u-boot-2009.03/board/Marvell/db64360/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64360/CVS/Entries.Extra 2009-03-25 15:57:09.903341800 -0700
@@ -0,0 +1,13 @@
+/64360.h///1238019702/
+/Makefile///1238019702/
+/config.mk///1238019702/
+/db64360.c///1238019702/
+/eth.h///1238019702/
+/mpsc.c///1238019702/
+/mpsc.h///1238019702/
+/mv_eth.c///1238019702/
+/mv_eth.h///1238019702/
+/mv_regs.h///1238019702/
+/pci.c///1238019702/
+/sdram_init.c///1238019702/
+/u-boot.lds///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries.Extra.Old u-boot-2009.03/board/Marvell/db64360/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64360/CVS/Entries.Extra.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1,13 @@
+/64360.h///1238019702/
+/Makefile///1238019702/
+/config.mk///1238019702/
+/db64360.c///1238019702/
+/eth.h///1238019702/
+/mpsc.c///1238019702/
+/mpsc.h///1238019702/
+/mv_eth.c///1238019702/
+/mv_eth.h///1238019702/
+/mv_regs.h///1238019702/
+/pci.c///1238019702/
+/sdram_init.c///1238019702/
+/u-boot.lds///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries.Old u-boot-2009.03/board/Marvell/db64360/CVS/Entries.Old
--- u-boot-2009.03_orig/board/Marvell/db64360/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64360/CVS/Entries.Old 2009-03-25 15:23:59.000000000 -0700
@@ -0,0 +1,14 @@
+/64360.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/db64360.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/eth.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mpsc.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mpsc.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mv_eth.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mv_eth.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mv_regs.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/sdram_init.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/db64360/CVS/Repository u-boot-2009.03/board/Marvell/db64360/CVS/Repository
--- u-boot-2009.03_orig/board/Marvell/db64360/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64360/CVS/Repository 2009-03-25 15:23:59.760172600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/Marvell/db64360
diff -Naur u-boot-2009.03_orig/board/Marvell/db64360/CVS/Root u-boot-2009.03/board/Marvell/db64360/CVS/Root
--- u-boot-2009.03_orig/board/Marvell/db64360/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64360/CVS/Root 2009-03-25 15:23:59.760172600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries u-boot-2009.03/board/Marvell/db64460/CVS/Entries
--- u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64460/CVS/Entries 2009-03-25 15:57:09.997091200 -0700
@@ -0,0 +1,14 @@
+/64460.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/db64460.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries.Extra u-boot-2009.03/board/Marvell/db64460/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64460/CVS/Entries.Extra 2009-03-25 15:57:09.997091200 -0700
@@ -0,0 +1,13 @@
+/64460.h///1238019702/
+/Makefile///1238019702/
+/config.mk///1238019702/
+/db64460.c///1238019702/
+/eth.h///1238019702/
+/mpsc.c///1238019702/
+/mpsc.h///1238019702/
+/mv_eth.c///1238019702/
+/mv_eth.h///1238019702/
+/mv_regs.h///1238019702/
+/pci.c///1238019702/
+/sdram_init.c///1238019702/
+/u-boot.lds///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries.Extra.Old u-boot-2009.03/board/Marvell/db64460/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64460/CVS/Entries.Extra.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,13 @@
+/64460.h///1238019702/
+/Makefile///1238019702/
+/config.mk///1238019702/
+/db64460.c///1238019702/
+/eth.h///1238019702/
+/mpsc.c///1238019702/
+/mpsc.h///1238019702/
+/mv_eth.c///1238019702/
+/mv_eth.h///1238019702/
+/mv_regs.h///1238019702/
+/pci.c///1238019702/
+/sdram_init.c///1238019702/
+/u-boot.lds///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries.Old u-boot-2009.03/board/Marvell/db64460/CVS/Entries.Old
--- u-boot-2009.03_orig/board/Marvell/db64460/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64460/CVS/Entries.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,14 @@
+/64460.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/db64460.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/eth.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mpsc.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mpsc.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mv_eth.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mv_eth.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mv_regs.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/sdram_init.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/db64460/CVS/Repository u-boot-2009.03/board/Marvell/db64460/CVS/Repository
--- u-boot-2009.03_orig/board/Marvell/db64460/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64460/CVS/Repository 2009-03-25 15:23:59.963295000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/Marvell/db64460
diff -Naur u-boot-2009.03_orig/board/Marvell/db64460/CVS/Root u-boot-2009.03/board/Marvell/db64460/CVS/Root
--- u-boot-2009.03_orig/board/Marvell/db64460/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/db64460/CVS/Root 2009-03-25 15:23:59.963295000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/Marvell/include/CVS/Entries u-boot-2009.03/board/Marvell/include/CVS/Entries
--- u-boot-2009.03_orig/board/Marvell/include/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/include/CVS/Entries 2009-03-25 15:57:10.075215700 -0700
@@ -0,0 +1,5 @@
+/core.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_gen_reg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/include/CVS/Entries.Extra u-boot-2009.03/board/Marvell/include/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/Marvell/include/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/include/CVS/Entries.Extra 2009-03-25 15:57:10.075215700 -0700
@@ -0,0 +1,4 @@
+/core.h///1238019702/
+/memory.h///1238019702/
+/mv_gen_reg.h///1238019702/
+/pci.h///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/include/CVS/Entries.Extra.Old u-boot-2009.03/board/Marvell/include/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/Marvell/include/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/include/CVS/Entries.Extra.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,4 @@
+/core.h///1238019702/
+/memory.h///1238019702/
+/mv_gen_reg.h///1238019702/
+/pci.h///1238019702/
diff -Naur u-boot-2009.03_orig/board/Marvell/include/CVS/Entries.Old u-boot-2009.03/board/Marvell/include/CVS/Entries.Old
--- u-boot-2009.03_orig/board/Marvell/include/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/include/CVS/Entries.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,5 @@
+/core.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/memory.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mv_gen_reg.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/pci.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/Marvell/include/CVS/Repository u-boot-2009.03/board/Marvell/include/CVS/Repository
--- u-boot-2009.03_orig/board/Marvell/include/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/include/CVS/Repository 2009-03-25 15:24:00.166417400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/Marvell/include
diff -Naur u-boot-2009.03_orig/board/Marvell/include/CVS/Root u-boot-2009.03/board/Marvell/include/CVS/Root
--- u-boot-2009.03_orig/board/Marvell/include/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/Marvell/include/CVS/Root 2009-03-25 15:24:00.166417400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/RPXClassic/CVS/Entries u-boot-2009.03/board/RPXClassic/CVS/Entries
--- u-boot-2009.03_orig/board/RPXClassic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXClassic/CVS/Entries 2009-03-25 15:57:10.153340200 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXClassic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eccx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RPXClassic/CVS/Entries.Extra u-boot-2009.03/board/RPXClassic/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/RPXClassic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXClassic/CVS/Entries.Extra 2009-03-25 15:57:10.153340200 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/RPXClassic.c///1238019710/
+/config.mk///1238019710/
+/eccx.c///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/RPXClassic/CVS/Entries.Extra.Old u-boot-2009.03/board/RPXClassic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/RPXClassic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXClassic/CVS/Entries.Extra.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/RPXClassic.c///1238019710/
+/config.mk///1238019710/
+/eccx.c///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/RPXClassic/CVS/Entries.Old u-boot-2009.03/board/RPXClassic/CVS/Entries.Old
--- u-boot-2009.03_orig/board/RPXClassic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXClassic/CVS/Entries.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/RPXClassic.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/eccx.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RPXClassic/CVS/Repository u-boot-2009.03/board/RPXClassic/CVS/Repository
--- u-boot-2009.03_orig/board/RPXClassic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXClassic/CVS/Repository 2009-03-25 15:24:00.322665400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/RPXClassic
diff -Naur u-boot-2009.03_orig/board/RPXClassic/CVS/Root u-boot-2009.03/board/RPXClassic/CVS/Root
--- u-boot-2009.03_orig/board/RPXClassic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXClassic/CVS/Root 2009-03-25 15:24:00.322665400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/RPXlite/CVS/Entries u-boot-2009.03/board/RPXlite/CVS/Entries
--- u-boot-2009.03_orig/board/RPXlite/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite/CVS/Entries 2009-03-25 15:57:10.231464700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXlite.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RPXlite/CVS/Entries.Extra u-boot-2009.03/board/RPXlite/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/RPXlite/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite/CVS/Entries.Extra 2009-03-25 15:57:10.231464700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/RPXlite.c///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/RPXlite/CVS/Entries.Extra.Old u-boot-2009.03/board/RPXlite/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/RPXlite/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite/CVS/Entries.Extra.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/RPXlite.c///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/RPXlite/CVS/Entries.Old u-boot-2009.03/board/RPXlite/CVS/Entries.Old
--- u-boot-2009.03_orig/board/RPXlite/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite/CVS/Entries.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/RPXlite.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RPXlite/CVS/Repository u-boot-2009.03/board/RPXlite/CVS/Repository
--- u-boot-2009.03_orig/board/RPXlite/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite/CVS/Repository 2009-03-25 15:24:00.494538200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/RPXlite
diff -Naur u-boot-2009.03_orig/board/RPXlite/CVS/Root u-boot-2009.03/board/RPXlite/CVS/Root
--- u-boot-2009.03_orig/board/RPXlite/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite/CVS/Root 2009-03-25 15:24:00.494538200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries u-boot-2009.03/board/RPXlite_dw/CVS/Entries
--- u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite_dw/CVS/Entries 2009-03-25 15:57:10.293964300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXlite_dw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries.Extra u-boot-2009.03/board/RPXlite_dw/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite_dw/CVS/Entries.Extra 2009-03-25 15:57:10.293964300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/README///1238019710/
+/RPXlite_dw.c///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries.Extra.Old u-boot-2009.03/board/RPXlite_dw/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite_dw/CVS/Entries.Extra.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/README///1238019710/
+/RPXlite_dw.c///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries.Old u-boot-2009.03/board/RPXlite_dw/CVS/Entries.Old
--- u-boot-2009.03_orig/board/RPXlite_dw/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite_dw/CVS/Entries.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/RPXlite_dw.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RPXlite_dw/CVS/Repository u-boot-2009.03/board/RPXlite_dw/CVS/Repository
--- u-boot-2009.03_orig/board/RPXlite_dw/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite_dw/CVS/Repository 2009-03-25 15:24:00.603911800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/RPXlite_dw
diff -Naur u-boot-2009.03_orig/board/RPXlite_dw/CVS/Root u-boot-2009.03/board/RPXlite_dw/CVS/Root
--- u-boot-2009.03_orig/board/RPXlite_dw/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RPXlite_dw/CVS/Root 2009-03-25 15:24:00.603911800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/RRvision/CVS/Entries u-boot-2009.03/board/RRvision/CVS/Entries
--- u-boot-2009.03_orig/board/RRvision/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RRvision/CVS/Entries 2009-03-25 15:57:10.372088800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RRvision.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_ad7179.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RRvision/CVS/Entries.Extra u-boot-2009.03/board/RRvision/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/RRvision/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RRvision/CVS/Entries.Extra 2009-03-25 15:57:10.372088800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/RRvision.c///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/video_ad7179.h///1238019710/
diff -Naur u-boot-2009.03_orig/board/RRvision/CVS/Entries.Extra.Old u-boot-2009.03/board/RRvision/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/RRvision/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RRvision/CVS/Entries.Extra.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/RRvision.c///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/u-boot.lds///1238019710/
+/video_ad7179.h///1238019710/
diff -Naur u-boot-2009.03_orig/board/RRvision/CVS/Entries.Old u-boot-2009.03/board/RRvision/CVS/Entries.Old
--- u-boot-2009.03_orig/board/RRvision/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RRvision/CVS/Entries.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/RRvision.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/video_ad7179.h/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/RRvision/CVS/Repository u-boot-2009.03/board/RRvision/CVS/Repository
--- u-boot-2009.03_orig/board/RRvision/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RRvision/CVS/Repository 2009-03-25 15:24:00.744535000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/RRvision
diff -Naur u-boot-2009.03_orig/board/RRvision/CVS/Root u-boot-2009.03/board/RRvision/CVS/Root
--- u-boot-2009.03_orig/board/RRvision/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/RRvision/CVS/Root 2009-03-25 15:24:00.744535000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/a3000/CVS/Entries u-boot-2009.03/board/a3000/CVS/Entries
--- u-boot-2009.03_orig/board/a3000/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/a3000/CVS/Entries 2009-03-25 15:57:10.434588400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/a3000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/a3000/CVS/Entries.Extra u-boot-2009.03/board/a3000/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/a3000/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/a3000/CVS/Entries.Extra 2009-03-25 15:57:10.434588400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/README///1238019686/
+/a3000.c///1238019686/
+/config.mk///1238019686/
+/flash.c///1238019686/
diff -Naur u-boot-2009.03_orig/board/a3000/CVS/Entries.Extra.Old u-boot-2009.03/board/a3000/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/a3000/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/a3000/CVS/Entries.Extra.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/README///1238019686/
+/a3000.c///1238019686/
+/config.mk///1238019686/
+/flash.c///1238019686/
diff -Naur u-boot-2009.03_orig/board/a3000/CVS/Entries.Old u-boot-2009.03/board/a3000/CVS/Entries.Old
--- u-boot-2009.03_orig/board/a3000/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/a3000/CVS/Entries.Old 2009-03-25 15:24:00.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/a3000.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/board/a3000/CVS/Repository u-boot-2009.03/board/a3000/CVS/Repository
--- u-boot-2009.03_orig/board/a3000/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/a3000/CVS/Repository 2009-03-25 15:24:00.869533400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/a3000
diff -Naur u-boot-2009.03_orig/board/a3000/CVS/Root u-boot-2009.03/board/a3000/CVS/Root
--- u-boot-2009.03_orig/board/a3000/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/a3000/CVS/Root 2009-03-25 15:24:00.853908600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/actux1/CVS/Entries u-boot-2009.03/board/actux1/CVS/Entries
--- u-boot-2009.03_orig/board/actux1/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux1/CVS/Entries 2009-03-25 15:57:10.497088000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux1_hw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux1/CVS/Entries.Extra u-boot-2009.03/board/actux1/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/actux1/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux1/CVS/Entries.Extra 2009-03-25 15:57:10.497088000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux1.c///1238019686/
+/actux1_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux1/CVS/Entries.Extra.Old u-boot-2009.03/board/actux1/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/actux1/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux1/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux1.c///1238019686/
+/actux1_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux1/CVS/Entries.Old u-boot-2009.03/board/actux1/CVS/Entries.Old
--- u-boot-2009.03_orig/board/actux1/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux1/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux1.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux1_hw.h/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux1/CVS/Repository u-boot-2009.03/board/actux1/CVS/Repository
--- u-boot-2009.03_orig/board/actux1/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux1/CVS/Repository 2009-03-25 15:24:00.978907000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/actux1
diff -Naur u-boot-2009.03_orig/board/actux1/CVS/Root u-boot-2009.03/board/actux1/CVS/Root
--- u-boot-2009.03_orig/board/actux1/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux1/CVS/Root 2009-03-25 15:24:00.978907000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/actux2/CVS/Entries u-boot-2009.03/board/actux2/CVS/Entries
--- u-boot-2009.03_orig/board/actux2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux2/CVS/Entries 2009-03-25 15:57:10.590837400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux2_hw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux2/CVS/Entries.Extra u-boot-2009.03/board/actux2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/actux2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux2/CVS/Entries.Extra 2009-03-25 15:57:10.590837400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux2.c///1238019686/
+/actux2_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux2/CVS/Entries.Extra.Old u-boot-2009.03/board/actux2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/actux2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux2/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux2.c///1238019686/
+/actux2_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux2/CVS/Entries.Old u-boot-2009.03/board/actux2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/actux2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux2/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux2.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux2_hw.h/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux2/CVS/Repository u-boot-2009.03/board/actux2/CVS/Repository
--- u-boot-2009.03_orig/board/actux2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux2/CVS/Repository 2009-03-25 15:24:01.088280600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/actux2
diff -Naur u-boot-2009.03_orig/board/actux2/CVS/Root u-boot-2009.03/board/actux2/CVS/Root
--- u-boot-2009.03_orig/board/actux2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux2/CVS/Root 2009-03-25 15:24:01.088280600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/actux3/CVS/Entries u-boot-2009.03/board/actux3/CVS/Entries
--- u-boot-2009.03_orig/board/actux3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux3/CVS/Entries 2009-03-25 15:57:10.653337000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux3_hw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux3/CVS/Entries.Extra u-boot-2009.03/board/actux3/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/actux3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux3/CVS/Entries.Extra 2009-03-25 15:57:10.653337000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux3.c///1238019686/
+/actux3_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux3/CVS/Entries.Extra.Old u-boot-2009.03/board/actux3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/actux3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux3/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux3.c///1238019686/
+/actux3_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux3/CVS/Entries.Old u-boot-2009.03/board/actux3/CVS/Entries.Old
--- u-boot-2009.03_orig/board/actux3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux3/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux3.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux3_hw.h/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux3/CVS/Repository u-boot-2009.03/board/actux3/CVS/Repository
--- u-boot-2009.03_orig/board/actux3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux3/CVS/Repository 2009-03-25 15:24:01.197654200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/actux3
diff -Naur u-boot-2009.03_orig/board/actux3/CVS/Root u-boot-2009.03/board/actux3/CVS/Root
--- u-boot-2009.03_orig/board/actux3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux3/CVS/Root 2009-03-25 15:24:01.197654200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/actux4/CVS/Entries u-boot-2009.03/board/actux4/CVS/Entries
--- u-boot-2009.03_orig/board/actux4/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux4/CVS/Entries 2009-03-25 15:57:10.731461500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux4.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux4_hw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux4/CVS/Entries.Extra u-boot-2009.03/board/actux4/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/actux4/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux4/CVS/Entries.Extra 2009-03-25 15:57:10.731461500 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux4.c///1238019686/
+/actux4_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux4/CVS/Entries.Extra.Old u-boot-2009.03/board/actux4/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/actux4/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux4/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019686/
+/actux4.c///1238019686/
+/actux4_hw.h///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/actux4/CVS/Entries.Old u-boot-2009.03/board/actux4/CVS/Entries.Old
--- u-boot-2009.03_orig/board/actux4/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux4/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux4.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/actux4_hw.h/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/board/actux4/CVS/Repository u-boot-2009.03/board/actux4/CVS/Repository
--- u-boot-2009.03_orig/board/actux4/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux4/CVS/Repository 2009-03-25 15:24:01.307027800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/actux4
diff -Naur u-boot-2009.03_orig/board/actux4/CVS/Root u-boot-2009.03/board/actux4/CVS/Root
--- u-boot-2009.03_orig/board/actux4/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/actux4/CVS/Root 2009-03-25 15:24:01.307027800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/adder/CVS/Entries u-boot-2009.03/board/adder/CVS/Entries
--- u-boot-2009.03_orig/board/adder/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/adder/CVS/Entries 2009-03-25 15:57:10.793961100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/adder.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/adder/CVS/Entries.Extra u-boot-2009.03/board/adder/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/adder/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/adder/CVS/Entries.Extra 2009-03-25 15:57:10.793961100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019686/
+/adder.c///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/adder/CVS/Entries.Extra.Old u-boot-2009.03/board/adder/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/adder/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/adder/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019686/
+/adder.c///1238019686/
+/config.mk///1238019686/
+/u-boot.lds///1238019686/
diff -Naur u-boot-2009.03_orig/board/adder/CVS/Entries.Old u-boot-2009.03/board/adder/CVS/Entries.Old
--- u-boot-2009.03_orig/board/adder/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/adder/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/adder.c/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:26 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:26 2009//
+D
diff -Naur u-boot-2009.03_orig/board/adder/CVS/Repository u-boot-2009.03/board/adder/CVS/Repository
--- u-boot-2009.03_orig/board/adder/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/adder/CVS/Repository 2009-03-25 15:24:01.510150200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/adder
diff -Naur u-boot-2009.03_orig/board/adder/CVS/Root u-boot-2009.03/board/adder/CVS/Root
--- u-boot-2009.03_orig/board/adder/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/adder/CVS/Root 2009-03-25 15:24:01.510150200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ads5121/CVS/Entries u-boot-2009.03/board/ads5121/CVS/Entries
--- u-boot-2009.03_orig/board/ads5121/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ads5121/CVS/Entries 2009-03-25 15:57:10.872085600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ads5121.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ads5121_diu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ads5121/CVS/Entries.Extra u-boot-2009.03/board/ads5121/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ads5121/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ads5121/CVS/Entries.Extra 2009-03-25 15:57:10.872085600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/README///1238019687/
+/ads5121.c///1238019687/
+/ads5121_diu.c///1238019687/
+/config.mk///1238019687/
+/pci.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/ads5121/CVS/Entries.Extra.Old u-boot-2009.03/board/ads5121/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ads5121/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ads5121/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/README///1238019687/
+/ads5121.c///1238019687/
+/ads5121_diu.c///1238019687/
+/config.mk///1238019687/
+/pci.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/ads5121/CVS/Entries.Old u-boot-2009.03/board/ads5121/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ads5121/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ads5121/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ads5121.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ads5121_diu.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ads5121/CVS/Repository u-boot-2009.03/board/ads5121/CVS/Repository
--- u-boot-2009.03_orig/board/ads5121/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ads5121/CVS/Repository 2009-03-25 15:24:01.603899000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ads5121
diff -Naur u-boot-2009.03_orig/board/ads5121/CVS/Root u-boot-2009.03/board/ads5121/CVS/Root
--- u-boot-2009.03_orig/board/ads5121/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ads5121/CVS/Root 2009-03-25 15:24:01.603899000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/afeb9260/CVS/Entries u-boot-2009.03/board/afeb9260/CVS/Entries
--- u-boot-2009.03_orig/board/afeb9260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/afeb9260/CVS/Entries 2009-03-25 15:57:10.934585200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/afeb9260.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/partition.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/afeb9260/CVS/Entries.Extra u-boot-2009.03/board/afeb9260/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/afeb9260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/afeb9260/CVS/Entries.Extra 2009-03-25 15:57:10.934585200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019687/
+/afeb9260.c///1238019687/
+/config.mk///1238019687/
+/nand.c///1238019687/
+/partition.c///1238019687/
diff -Naur u-boot-2009.03_orig/board/afeb9260/CVS/Entries.Extra.Old u-boot-2009.03/board/afeb9260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/afeb9260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/afeb9260/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019687/
+/afeb9260.c///1238019687/
+/config.mk///1238019687/
+/nand.c///1238019687/
+/partition.c///1238019687/
diff -Naur u-boot-2009.03_orig/board/afeb9260/CVS/Entries.Old u-boot-2009.03/board/afeb9260/CVS/Entries.Old
--- u-boot-2009.03_orig/board/afeb9260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/afeb9260/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/afeb9260.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/partition.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/afeb9260/CVS/Repository u-boot-2009.03/board/afeb9260/CVS/Repository
--- u-boot-2009.03_orig/board/afeb9260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/afeb9260/CVS/Repository 2009-03-25 15:24:01.744522200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/afeb9260
diff -Naur u-boot-2009.03_orig/board/afeb9260/CVS/Root u-boot-2009.03/board/afeb9260/CVS/Root
--- u-boot-2009.03_orig/board/afeb9260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/afeb9260/CVS/Root 2009-03-25 15:24:01.744522200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/alaska/CVS/Entries u-boot-2009.03/board/alaska/CVS/Entries
--- u-boot-2009.03_orig/board/alaska/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/alaska/CVS/Entries 2009-03-25 15:57:10.997084800 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/alaska.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/alaska/CVS/Entries.Extra u-boot-2009.03/board/alaska/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/alaska/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/alaska/CVS/Entries.Extra 2009-03-25 15:57:10.997084800 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/alaska.c///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
diff -Naur u-boot-2009.03_orig/board/alaska/CVS/Entries.Extra.Old u-boot-2009.03/board/alaska/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/alaska/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/alaska/CVS/Entries.Extra.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/alaska.c///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
diff -Naur u-boot-2009.03_orig/board/alaska/CVS/Entries.Old u-boot-2009.03/board/alaska/CVS/Entries.Old
--- u-boot-2009.03_orig/board/alaska/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/alaska/CVS/Entries.Old 2009-03-25 15:24:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/alaska.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/alaska/CVS/Repository u-boot-2009.03/board/alaska/CVS/Repository
--- u-boot-2009.03_orig/board/alaska/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/alaska/CVS/Repository 2009-03-25 15:24:01.853895800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/alaska
diff -Naur u-boot-2009.03_orig/board/alaska/CVS/Root u-boot-2009.03/board/alaska/CVS/Root
--- u-boot-2009.03_orig/board/alaska/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/alaska/CVS/Root 2009-03-25 15:24:01.853895800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/altera/CVS/Entries u-boot-2009.03/board/altera/CVS/Entries
--- u-boot-2009.03_orig/board/altera/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/CVS/Entries 2009-03-25 15:24:02.853883000 -0700
@@ -0,0 +1,6 @@
+D/common////
+D/dk1c20////
+D/dk1s10////
+D/ep1c20////
+D/ep1s10////
+D/ep1s40////
diff -Naur u-boot-2009.03_orig/board/altera/CVS/Entries.Extra u-boot-2009.03/board/altera/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/altera/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/CVS/Entries.Extra 2009-03-25 15:24:02.869507800 -0700
@@ -0,0 +1,6 @@
+D/common////
+D/dk1c20////
+D/dk1s10////
+D/ep1c20////
+D/ep1s10////
+D/ep1s40////
diff -Naur u-boot-2009.03_orig/board/altera/CVS/Repository u-boot-2009.03/board/altera/CVS/Repository
--- u-boot-2009.03_orig/board/altera/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/CVS/Repository 2009-03-25 15:24:01.947644600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/altera
diff -Naur u-boot-2009.03_orig/board/altera/CVS/Root u-boot-2009.03/board/altera/CVS/Root
--- u-boot-2009.03_orig/board/altera/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/CVS/Root 2009-03-25 15:24:01.947644600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/altera/common/CVS/Entries u-boot-2009.03/board/altera/common/CVS/Entries
--- u-boot-2009.03_orig/board/altera/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/common/CVS/Entries 2009-03-25 15:57:11.122084000 -0700
@@ -0,0 +1,6 @@
+/AMDLV065D.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/epled.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sevenseg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sevenseg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/common/CVS/Entries.Extra u-boot-2009.03/board/altera/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/altera/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/common/CVS/Entries.Extra 2009-03-25 15:57:11.122084000 -0700
@@ -0,0 +1,5 @@
+/AMDLV065D.c///1238019687/
+/epled.c///1238019687/
+/flash.c///1238019687/
+/sevenseg.c///1238019687/
+/sevenseg.h///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/common/CVS/Entries.Extra.Old u-boot-2009.03/board/altera/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/altera/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/common/CVS/Entries.Extra.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,5 @@
+/AMDLV065D.c///1238019687/
+/epled.c///1238019687/
+/flash.c///1238019687/
+/sevenseg.c///1238019687/
+/sevenseg.h///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/common/CVS/Entries.Old u-boot-2009.03/board/altera/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/altera/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/common/CVS/Entries.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,6 @@
+/AMDLV065D.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/epled.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/sevenseg.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/sevenseg.h/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/common/CVS/Repository u-boot-2009.03/board/altera/common/CVS/Repository
--- u-boot-2009.03_orig/board/altera/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/common/CVS/Repository 2009-03-25 15:24:01.978894200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/altera/common
diff -Naur u-boot-2009.03_orig/board/altera/common/CVS/Root u-boot-2009.03/board/altera/common/CVS/Root
--- u-boot-2009.03_orig/board/altera/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/common/CVS/Root 2009-03-25 15:24:01.963269400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries u-boot-2009.03/board/altera/dk1c20/CVS/Entries
--- u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1c20/CVS/Entries 2009-03-25 15:57:11.184583600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dk1c20.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vectors.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries.Extra u-boot-2009.03/board/altera/dk1c20/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1c20/CVS/Entries.Extra 2009-03-25 15:57:11.200208500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/dk1c20.c///1238019687/
+/flash.c///1238019687/
+/misc.c///1238019687/
+/u-boot.lds///1238019687/
+/vectors.S///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries.Extra.Old u-boot-2009.03/board/altera/dk1c20/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1c20/CVS/Entries.Extra.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/dk1c20.c///1238019687/
+/flash.c///1238019687/
+/misc.c///1238019687/
+/u-boot.lds///1238019687/
+/vectors.S///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries.Old u-boot-2009.03/board/altera/dk1c20/CVS/Entries.Old
--- u-boot-2009.03_orig/board/altera/dk1c20/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1c20/CVS/Entries.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/dk1c20.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/vectors.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/dk1c20/CVS/Repository u-boot-2009.03/board/altera/dk1c20/CVS/Repository
--- u-boot-2009.03_orig/board/altera/dk1c20/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1c20/CVS/Repository 2009-03-25 15:24:02.119517400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/altera/dk1c20
diff -Naur u-boot-2009.03_orig/board/altera/dk1c20/CVS/Root u-boot-2009.03/board/altera/dk1c20/CVS/Root
--- u-boot-2009.03_orig/board/altera/dk1c20/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1c20/CVS/Root 2009-03-25 15:24:02.119517400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries u-boot-2009.03/board/altera/dk1s10/CVS/Entries
--- u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1s10/CVS/Entries 2009-03-25 15:57:11.262708100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dk1s10.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vectors.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries.Extra u-boot-2009.03/board/altera/dk1s10/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1s10/CVS/Entries.Extra 2009-03-25 15:57:11.262708100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/dk1s10.c///1238019687/
+/flash.c///1238019687/
+/misc.c///1238019687/
+/u-boot.lds///1238019687/
+/vectors.S///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries.Extra.Old u-boot-2009.03/board/altera/dk1s10/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1s10/CVS/Entries.Extra.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/dk1s10.c///1238019687/
+/flash.c///1238019687/
+/misc.c///1238019687/
+/u-boot.lds///1238019687/
+/vectors.S///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries.Old u-boot-2009.03/board/altera/dk1s10/CVS/Entries.Old
--- u-boot-2009.03_orig/board/altera/dk1s10/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1s10/CVS/Entries.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/dk1s10.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/vectors.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/dk1s10/CVS/Repository u-boot-2009.03/board/altera/dk1s10/CVS/Repository
--- u-boot-2009.03_orig/board/altera/dk1s10/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1s10/CVS/Repository 2009-03-25 15:24:02.260140600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/altera/dk1s10
diff -Naur u-boot-2009.03_orig/board/altera/dk1s10/CVS/Root u-boot-2009.03/board/altera/dk1s10/CVS/Root
--- u-boot-2009.03_orig/board/altera/dk1s10/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/dk1s10/CVS/Root 2009-03-25 15:24:02.260140600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries u-boot-2009.03/board/altera/ep1c20/CVS/Entries
--- u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1c20/CVS/Entries 2009-03-25 15:57:11.356457500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep1c20.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries.Extra u-boot-2009.03/board/altera/ep1c20/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1c20/CVS/Entries.Extra 2009-03-25 15:57:11.356457500 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ep1c20.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries.Extra.Old u-boot-2009.03/board/altera/ep1c20/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1c20/CVS/Entries.Extra.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ep1c20.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries.Old u-boot-2009.03/board/altera/ep1c20/CVS/Entries.Old
--- u-boot-2009.03_orig/board/altera/ep1c20/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1c20/CVS/Entries.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ep1c20.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/ep1c20/CVS/Repository u-boot-2009.03/board/altera/ep1c20/CVS/Repository
--- u-boot-2009.03_orig/board/altera/ep1c20/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1c20/CVS/Repository 2009-03-25 15:24:02.494512600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/altera/ep1c20
diff -Naur u-boot-2009.03_orig/board/altera/ep1c20/CVS/Root u-boot-2009.03/board/altera/ep1c20/CVS/Root
--- u-boot-2009.03_orig/board/altera/ep1c20/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1c20/CVS/Root 2009-03-25 15:24:02.494512600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries u-boot-2009.03/board/altera/ep1s10/CVS/Entries
--- u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s10/CVS/Entries 2009-03-25 15:57:11.418957100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep1s10.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries.Extra u-boot-2009.03/board/altera/ep1s10/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s10/CVS/Entries.Extra 2009-03-25 15:57:11.418957100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ep1s10.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries.Extra.Old u-boot-2009.03/board/altera/ep1s10/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s10/CVS/Entries.Extra.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ep1s10.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries.Old u-boot-2009.03/board/altera/ep1s10/CVS/Entries.Old
--- u-boot-2009.03_orig/board/altera/ep1s10/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s10/CVS/Entries.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ep1s10.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/ep1s10/CVS/Repository u-boot-2009.03/board/altera/ep1s10/CVS/Repository
--- u-boot-2009.03_orig/board/altera/ep1s10/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s10/CVS/Repository 2009-03-25 15:24:02.666385400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/altera/ep1s10
diff -Naur u-boot-2009.03_orig/board/altera/ep1s10/CVS/Root u-boot-2009.03/board/altera/ep1s10/CVS/Root
--- u-boot-2009.03_orig/board/altera/ep1s10/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s10/CVS/Root 2009-03-25 15:24:02.666385400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries u-boot-2009.03/board/altera/ep1s40/CVS/Entries
--- u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s40/CVS/Entries 2009-03-25 15:57:11.497081600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep1s40.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries.Extra u-boot-2009.03/board/altera/ep1s40/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s40/CVS/Entries.Extra 2009-03-25 15:57:11.497081600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ep1s40.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries.Extra.Old u-boot-2009.03/board/altera/ep1s40/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s40/CVS/Entries.Extra.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ep1s40.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries.Old u-boot-2009.03/board/altera/ep1s40/CVS/Entries.Old
--- u-boot-2009.03_orig/board/altera/ep1s40/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s40/CVS/Entries.Old 2009-03-25 15:24:02.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ep1s40.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/altera/ep1s40/CVS/Repository u-boot-2009.03/board/altera/ep1s40/CVS/Repository
--- u-boot-2009.03_orig/board/altera/ep1s40/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s40/CVS/Repository 2009-03-25 15:24:02.760134200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/altera/ep1s40
diff -Naur u-boot-2009.03_orig/board/altera/ep1s40/CVS/Root u-boot-2009.03/board/altera/ep1s40/CVS/Root
--- u-boot-2009.03_orig/board/altera/ep1s40/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/altera/ep1s40/CVS/Root 2009-03-25 15:24:02.760134200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/CVS/Entries u-boot-2009.03/board/amcc/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/CVS/Entries 2009-03-25 15:24:05.572598200 -0700
@@ -0,0 +1,18 @@
+D/acadia////
+D/bamboo////
+D/bubinga////
+D/canyonlands////
+D/common////
+D/ebony////
+D/katmai////
+D/kilauea////
+D/luan////
+D/makalu////
+D/ocotea////
+D/redwood////
+D/sequoia////
+D/taihu////
+D/taishan////
+D/walnut////
+D/yosemite////
+D/yucca////
diff -Naur u-boot-2009.03_orig/board/amcc/CVS/Entries.Extra u-boot-2009.03/board/amcc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/CVS/Entries.Extra 2009-03-25 15:24:05.572598200 -0700
@@ -0,0 +1,18 @@
+D/acadia////
+D/bamboo////
+D/bubinga////
+D/canyonlands////
+D/common////
+D/ebony////
+D/katmai////
+D/kilauea////
+D/luan////
+D/makalu////
+D/ocotea////
+D/redwood////
+D/sequoia////
+D/taihu////
+D/taishan////
+D/walnut////
+D/yosemite////
+D/yucca////
diff -Naur u-boot-2009.03_orig/board/amcc/CVS/Repository u-boot-2009.03/board/amcc/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/CVS/Repository 2009-03-25 15:24:02.900757400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc
diff -Naur u-boot-2009.03_orig/board/amcc/CVS/Root u-boot-2009.03/board/amcc/CVS/Root
--- u-boot-2009.03_orig/board/amcc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/CVS/Root 2009-03-25 15:24:02.900757400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries u-boot-2009.03/board/amcc/acadia/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/acadia/CVS/Entries 2009-03-25 15:57:11.590831000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/acadia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_acadia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pll.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-nand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries.Extra u-boot-2009.03/board/amcc/acadia/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/acadia/CVS/Entries.Extra 2009-03-25 15:57:11.590831000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019687/
+/acadia.c///1238019687/
+/cmd_acadia.c///1238019687/
+/config.mk///1238019687/
+/memory.c///1238019687/
+/pll.c///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/acadia/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/acadia/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019687/
+/acadia.c///1238019687/
+/cmd_acadia.c///1238019687/
+/config.mk///1238019687/
+/memory.c///1238019687/
+/pll.c///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries.Old u-boot-2009.03/board/amcc/acadia/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/acadia/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/acadia/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/acadia.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/cmd_acadia.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/memory.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/pll.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot-nand.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/acadia/CVS/Repository u-boot-2009.03/board/amcc/acadia/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/acadia/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/acadia/CVS/Repository 2009-03-25 15:24:02.916382200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/acadia
diff -Naur u-boot-2009.03_orig/board/amcc/acadia/CVS/Root u-boot-2009.03/board/amcc/acadia/CVS/Root
--- u-boot-2009.03_orig/board/amcc/acadia/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/acadia/CVS/Root 2009-03-25 15:24:02.916382200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries u-boot-2009.03/board/amcc/bamboo/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bamboo/CVS/Entries 2009-03-25 15:57:11.668955500 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bamboo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bamboo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-nand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries.Extra u-boot-2009.03/board/amcc/bamboo/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bamboo/CVS/Entries.Extra 2009-03-25 15:57:11.668955500 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019687/
+/bamboo.c///1238019687/
+/bamboo.h///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/bamboo/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bamboo/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019687/
+/bamboo.c///1238019687/
+/bamboo.h///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries.Old u-boot-2009.03/board/amcc/bamboo/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/bamboo/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bamboo/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/bamboo.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/bamboo.h/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot-nand.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/bamboo/CVS/Repository u-boot-2009.03/board/amcc/bamboo/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/bamboo/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bamboo/CVS/Repository 2009-03-25 15:24:03.041380600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/bamboo
diff -Naur u-boot-2009.03_orig/board/amcc/bamboo/CVS/Root u-boot-2009.03/board/amcc/bamboo/CVS/Root
--- u-boot-2009.03_orig/board/amcc/bamboo/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bamboo/CVS/Root 2009-03-25 15:24:03.041380600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries u-boot-2009.03/board/amcc/bubinga/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bubinga/CVS/Entries 2009-03-25 15:57:11.747080000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bubinga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries.Extra u-boot-2009.03/board/amcc/bubinga/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bubinga/CVS/Entries.Extra 2009-03-25 15:57:11.747080000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019687/
+/bubinga.c///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/bubinga/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bubinga/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019687/
+/bubinga.c///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries.Old u-boot-2009.03/board/amcc/bubinga/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/bubinga/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bubinga/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/bubinga.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/bubinga/CVS/Repository u-boot-2009.03/board/amcc/bubinga/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/bubinga/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bubinga/CVS/Repository 2009-03-25 15:24:03.197628600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/bubinga
diff -Naur u-boot-2009.03_orig/board/amcc/bubinga/CVS/Root u-boot-2009.03/board/amcc/bubinga/CVS/Root
--- u-boot-2009.03_orig/board/amcc/bubinga/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/bubinga/CVS/Root 2009-03-25 15:24:03.197628600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries u-boot-2009.03/board/amcc/canyonlands/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/canyonlands/CVS/Entries 2009-03-25 15:57:11.809579600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootstrap.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canyonlands.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-nand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries.Extra u-boot-2009.03/board/amcc/canyonlands/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/canyonlands/CVS/Entries.Extra 2009-03-25 15:57:11.809579600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/bootstrap.c///1238019687/
+/canyonlands.c///1238019687/
+/config.mk///1238019687/
+/init.S///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/canyonlands/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/canyonlands/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/bootstrap.c///1238019687/
+/canyonlands.c///1238019687/
+/config.mk///1238019687/
+/init.S///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries.Old u-boot-2009.03/board/amcc/canyonlands/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/canyonlands/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/bootstrap.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/canyonlands.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot-nand.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Repository u-boot-2009.03/board/amcc/canyonlands/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/canyonlands/CVS/Repository 2009-03-25 15:24:03.322627000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/canyonlands
diff -Naur u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Root u-boot-2009.03/board/amcc/canyonlands/CVS/Root
--- u-boot-2009.03_orig/board/amcc/canyonlands/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/canyonlands/CVS/Root 2009-03-25 15:24:03.307002200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/common/CVS/Entries u-boot-2009.03/board/amcc/common/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/common/CVS/Entries 2009-03-25 15:57:11.872079200 -0700
@@ -0,0 +1,2 @@
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/common/CVS/Entries.Extra u-boot-2009.03/board/amcc/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/common/CVS/Entries.Extra 2009-03-25 15:57:11.872079200 -0700
@@ -0,0 +1 @@
+/flash.c///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/common/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/common/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1 @@
+/flash.c///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/common/CVS/Entries.Old u-boot-2009.03/board/amcc/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/common/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,2 @@
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/common/CVS/Repository u-boot-2009.03/board/amcc/common/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/common/CVS/Repository 2009-03-25 15:24:03.478875000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/common
diff -Naur u-boot-2009.03_orig/board/amcc/common/CVS/Root u-boot-2009.03/board/amcc/common/CVS/Root
--- u-boot-2009.03_orig/board/amcc/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/common/CVS/Root 2009-03-25 15:24:03.478875000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries u-boot-2009.03/board/amcc/ebony/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ebony/CVS/Entries 2009-03-25 15:57:11.934578800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebony.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries.Extra u-boot-2009.03/board/amcc/ebony/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ebony/CVS/Entries.Extra 2009-03-25 15:57:11.934578800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ebony.c///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/ebony/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ebony/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/ebony.c///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries.Old u-boot-2009.03/board/amcc/ebony/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/ebony/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ebony/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ebony.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/ebony/CVS/Repository u-boot-2009.03/board/amcc/ebony/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/ebony/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ebony/CVS/Repository 2009-03-25 15:24:03.572623800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/ebony
diff -Naur u-boot-2009.03_orig/board/amcc/ebony/CVS/Root u-boot-2009.03/board/amcc/ebony/CVS/Root
--- u-boot-2009.03_orig/board/amcc/ebony/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ebony/CVS/Root 2009-03-25 15:24:03.556999000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries u-boot-2009.03/board/amcc/katmai/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/katmai/CVS/Entries 2009-03-25 15:57:11.997078400 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_katmai.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/katmai.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries.Extra u-boot-2009.03/board/amcc/katmai/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/katmai/CVS/Entries.Extra 2009-03-25 15:57:11.997078400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/cmd_katmai.c///1238019687/
+/config.mk///1238019687/
+/init.S///1238019687/
+/katmai.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/katmai/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/katmai/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/cmd_katmai.c///1238019687/
+/config.mk///1238019687/
+/init.S///1238019687/
+/katmai.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries.Old u-boot-2009.03/board/amcc/katmai/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/katmai/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/katmai/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/cmd_katmai.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/katmai.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/katmai/CVS/Repository u-boot-2009.03/board/amcc/katmai/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/katmai/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/katmai/CVS/Repository 2009-03-25 15:24:03.697622200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/katmai
diff -Naur u-boot-2009.03_orig/board/amcc/katmai/CVS/Root u-boot-2009.03/board/amcc/katmai/CVS/Root
--- u-boot-2009.03_orig/board/amcc/katmai/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/katmai/CVS/Root 2009-03-25 15:24:03.681997400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries u-boot-2009.03/board/amcc/kilauea/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/kilauea/CVS/Entries 2009-03-25 15:57:12.090827800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pll.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kilauea.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-nand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries.Extra u-boot-2009.03/board/amcc/kilauea/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/kilauea/CVS/Entries.Extra 2009-03-25 15:57:12.090827800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/cmd_pll.c///1238019687/
+/config.mk///1238019687/
+/kilauea.c///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/kilauea/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/kilauea/CVS/Entries.Extra.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/cmd_pll.c///1238019687/
+/config.mk///1238019687/
+/kilauea.c///1238019687/
+/u-boot-nand.lds///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries.Old u-boot-2009.03/board/amcc/kilauea/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/kilauea/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/kilauea/CVS/Entries.Old 2009-03-25 15:24:03.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/cmd_pll.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/kilauea.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot-nand.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/kilauea/CVS/Repository u-boot-2009.03/board/amcc/kilauea/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/kilauea/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/kilauea/CVS/Repository 2009-03-25 15:24:03.806995800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/kilauea
diff -Naur u-boot-2009.03_orig/board/amcc/kilauea/CVS/Root u-boot-2009.03/board/amcc/kilauea/CVS/Root
--- u-boot-2009.03_orig/board/amcc/kilauea/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/kilauea/CVS/Root 2009-03-25 15:24:03.806995800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/luan/CVS/Entries u-boot-2009.03/board/amcc/luan/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/luan/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/luan/CVS/Entries 2009-03-25 15:57:12.168952300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/epld.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/luan.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/luan/CVS/Entries.Extra u-boot-2009.03/board/amcc/luan/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/luan/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/luan/CVS/Entries.Extra 2009-03-25 15:57:12.184577200 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/epld.h///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/luan.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/luan/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/luan/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/luan/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/luan/CVS/Entries.Extra.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/epld.h///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/luan.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/luan/CVS/Entries.Old u-boot-2009.03/board/amcc/luan/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/luan/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/luan/CVS/Entries.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/epld.h/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/luan.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/luan/CVS/Repository u-boot-2009.03/board/amcc/luan/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/luan/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/luan/CVS/Repository 2009-03-25 15:24:03.947619000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/luan
diff -Naur u-boot-2009.03_orig/board/amcc/luan/CVS/Root u-boot-2009.03/board/amcc/luan/CVS/Root
--- u-boot-2009.03_orig/board/amcc/luan/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/luan/CVS/Root 2009-03-25 15:24:03.947619000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries u-boot-2009.03/board/amcc/makalu/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/makalu/CVS/Entries 2009-03-25 15:57:12.262701700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pll.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/makalu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries.Extra u-boot-2009.03/board/amcc/makalu/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/makalu/CVS/Entries.Extra 2009-03-25 15:57:12.262701700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/cmd_pll.c///1238019687/
+/config.mk///1238019687/
+/init.S///1238019687/
+/makalu.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/makalu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/makalu/CVS/Entries.Extra.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019687/
+/cmd_pll.c///1238019687/
+/config.mk///1238019687/
+/init.S///1238019687/
+/makalu.c///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries.Old u-boot-2009.03/board/amcc/makalu/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/makalu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/makalu/CVS/Entries.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/cmd_pll.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/makalu.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/makalu/CVS/Repository u-boot-2009.03/board/amcc/makalu/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/makalu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/makalu/CVS/Repository 2009-03-25 15:24:04.103867000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/makalu
diff -Naur u-boot-2009.03_orig/board/amcc/makalu/CVS/Root u-boot-2009.03/board/amcc/makalu/CVS/Root
--- u-boot-2009.03_orig/board/amcc/makalu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/makalu/CVS/Root 2009-03-25 15:24:04.103867000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries u-boot-2009.03/board/amcc/ocotea/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ocotea/CVS/Entries 2009-03-25 15:57:12.356451100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ocotea.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ocotea.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries.Extra u-boot-2009.03/board/amcc/ocotea/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ocotea/CVS/Entries.Extra 2009-03-25 15:57:12.356451100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/ocotea.c///1238019687/
+/ocotea.h///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/ocotea/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ocotea/CVS/Entries.Extra.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019687/
+/config.mk///1238019687/
+/flash.c///1238019687/
+/init.S///1238019687/
+/ocotea.c///1238019687/
+/ocotea.h///1238019687/
+/u-boot.lds///1238019687/
diff -Naur u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries.Old u-boot-2009.03/board/amcc/ocotea/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/ocotea/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ocotea/CVS/Entries.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ocotea.c/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/ocotea.h/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:27 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/ocotea/CVS/Repository u-boot-2009.03/board/amcc/ocotea/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/ocotea/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ocotea/CVS/Repository 2009-03-25 15:24:04.228865400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/ocotea
diff -Naur u-boot-2009.03_orig/board/amcc/ocotea/CVS/Root u-boot-2009.03/board/amcc/ocotea/CVS/Root
--- u-boot-2009.03_orig/board/amcc/ocotea/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/ocotea/CVS/Root 2009-03-25 15:24:04.228865400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries u-boot-2009.03/board/amcc/redwood/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/redwood/CVS/Entries 2009-03-25 15:57:12.434575600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/redwood.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/redwood.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries.Extra u-boot-2009.03/board/amcc/redwood/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/redwood/CVS/Entries.Extra 2009-03-25 15:57:12.450200500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019688/
+/config.mk///1238019687/
+/init.S///1238019687/
+/redwood.c///1238019688/
+/redwood.h///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/redwood/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/redwood/CVS/Entries.Extra.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019688/
+/config.mk///1238019687/
+/init.S///1238019687/
+/redwood.c///1238019688/
+/redwood.h///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries.Old u-boot-2009.03/board/amcc/redwood/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/redwood/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/redwood/CVS/Entries.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:27 2009//
+/redwood.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/redwood.h/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/redwood/CVS/Repository u-boot-2009.03/board/amcc/redwood/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/redwood/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/redwood/CVS/Repository 2009-03-25 15:24:04.556986200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/redwood
diff -Naur u-boot-2009.03_orig/board/amcc/redwood/CVS/Root u-boot-2009.03/board/amcc/redwood/CVS/Root
--- u-boot-2009.03_orig/board/amcc/redwood/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/redwood/CVS/Root 2009-03-25 15:24:04.556986200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries u-boot-2009.03/board/amcc/sequoia/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/sequoia/CVS/Entries 2009-03-25 15:57:12.512700100 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_sequoia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sequoia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-nand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries.Extra u-boot-2009.03/board/amcc/sequoia/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/sequoia/CVS/Entries.Extra 2009-03-25 15:57:12.512700100 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/cmd_sequoia.c///1238019688/
+/config.mk///1238019688/
+/init.S///1238019688/
+/sdram.c///1238019688/
+/sequoia.c///1238019688/
+/u-boot-nand.lds///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/sequoia/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/sequoia/CVS/Entries.Extra.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/cmd_sequoia.c///1238019688/
+/config.mk///1238019688/
+/init.S///1238019688/
+/sdram.c///1238019688/
+/sequoia.c///1238019688/
+/u-boot-nand.lds///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries.Old u-boot-2009.03/board/amcc/sequoia/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/sequoia/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/sequoia/CVS/Entries.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/cmd_sequoia.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/sequoia.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot-nand.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/sequoia/CVS/Repository u-boot-2009.03/board/amcc/sequoia/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/sequoia/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/sequoia/CVS/Repository 2009-03-25 15:24:04.681984600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/sequoia
diff -Naur u-boot-2009.03_orig/board/amcc/sequoia/CVS/Root u-boot-2009.03/board/amcc/sequoia/CVS/Root
--- u-boot-2009.03_orig/board/amcc/sequoia/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/sequoia/CVS/Root 2009-03-25 15:24:04.681984600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries u-boot-2009.03/board/amcc/taihu/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taihu/CVS/Entries 2009-03-25 15:57:12.590824600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/taihu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries.Extra u-boot-2009.03/board/amcc/taihu/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taihu/CVS/Entries.Extra 2009-03-25 15:57:12.590824600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/lcd.c///1238019688/
+/taihu.c///1238019688/
+/u-boot.lds///1238019688/
+/update.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/taihu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taihu/CVS/Entries.Extra.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/lcd.c///1238019688/
+/taihu.c///1238019688/
+/u-boot.lds///1238019688/
+/update.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries.Old u-boot-2009.03/board/amcc/taihu/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/taihu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taihu/CVS/Entries.Old 2009-03-25 15:24:04.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/lcd.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/taihu.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/update.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/taihu/CVS/Repository u-boot-2009.03/board/amcc/taihu/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/taihu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taihu/CVS/Repository 2009-03-25 15:24:04.838232600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/taihu
diff -Naur u-boot-2009.03_orig/board/amcc/taihu/CVS/Root u-boot-2009.03/board/amcc/taihu/CVS/Root
--- u-boot-2009.03_orig/board/amcc/taihu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taihu/CVS/Root 2009-03-25 15:24:04.838232600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries u-boot-2009.03/board/amcc/taishan/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taishan/CVS/Entries 2009-03-25 15:57:12.668949100 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/showinfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/taishan.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries.Extra u-boot-2009.03/board/amcc/taishan/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taishan/CVS/Entries.Extra 2009-03-25 15:57:12.668949100 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/init.S///1238019688/
+/lcd.c///1238019688/
+/showinfo.c///1238019688/
+/taishan.c///1238019688/
+/u-boot.lds///1238019688/
+/update.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/taishan/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taishan/CVS/Entries.Extra.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/init.S///1238019688/
+/lcd.c///1238019688/
+/showinfo.c///1238019688/
+/taishan.c///1238019688/
+/u-boot.lds///1238019688/
+/update.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries.Old u-boot-2009.03/board/amcc/taishan/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/taishan/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taishan/CVS/Entries.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/lcd.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/showinfo.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/taishan.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/update.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/taishan/CVS/Repository u-boot-2009.03/board/amcc/taishan/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/taishan/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taishan/CVS/Repository 2009-03-25 15:24:04.978855800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/taishan
diff -Naur u-boot-2009.03_orig/board/amcc/taishan/CVS/Root u-boot-2009.03/board/amcc/taishan/CVS/Root
--- u-boot-2009.03_orig/board/amcc/taishan/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/taishan/CVS/Root 2009-03-25 15:24:04.978855800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries u-boot-2009.03/board/amcc/walnut/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/walnut/CVS/Entries 2009-03-25 15:57:12.731448700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/walnut.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries.Extra u-boot-2009.03/board/amcc/walnut/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/walnut/CVS/Entries.Extra 2009-03-25 15:57:12.731448700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/u-boot.lds///1238019688/
+/walnut.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/walnut/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/walnut/CVS/Entries.Extra.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/u-boot.lds///1238019688/
+/walnut.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries.Old u-boot-2009.03/board/amcc/walnut/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/walnut/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/walnut/CVS/Entries.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/walnut.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/walnut/CVS/Repository u-boot-2009.03/board/amcc/walnut/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/walnut/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/walnut/CVS/Repository 2009-03-25 15:24:05.135103800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/walnut
diff -Naur u-boot-2009.03_orig/board/amcc/walnut/CVS/Root u-boot-2009.03/board/amcc/walnut/CVS/Root
--- u-boot-2009.03_orig/board/amcc/walnut/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/walnut/CVS/Root 2009-03-25 15:24:05.119479000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries u-boot-2009.03/board/amcc/yosemite/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yosemite/CVS/Entries 2009-03-25 15:57:12.793948300 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yosemite.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries.Extra u-boot-2009.03/board/amcc/yosemite/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yosemite/CVS/Entries.Extra 2009-03-25 15:57:12.793948300 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/init.S///1238019688/
+/u-boot.lds///1238019688/
+/yosemite.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/yosemite/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yosemite/CVS/Entries.Extra.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/init.S///1238019688/
+/u-boot.lds///1238019688/
+/yosemite.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries.Old u-boot-2009.03/board/amcc/yosemite/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/yosemite/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yosemite/CVS/Entries.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/yosemite.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/yosemite/CVS/Repository u-boot-2009.03/board/amcc/yosemite/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/yosemite/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yosemite/CVS/Repository 2009-03-25 15:24:05.228852600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/yosemite
diff -Naur u-boot-2009.03_orig/board/amcc/yosemite/CVS/Root u-boot-2009.03/board/amcc/yosemite/CVS/Root
--- u-boot-2009.03_orig/board/amcc/yosemite/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yosemite/CVS/Root 2009-03-25 15:24:05.228852600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries u-boot-2009.03/board/amcc/yucca/CVS/Entries
--- u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yucca/CVS/Entries 2009-03-25 15:57:12.872072800 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_yucca.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yucca.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yucca.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries.Extra u-boot-2009.03/board/amcc/yucca/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yucca/CVS/Entries.Extra 2009-03-25 15:57:12.872072800 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/cmd_yucca.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/init.S///1238019688/
+/u-boot.lds///1238019688/
+/yucca.c///1238019688/
+/yucca.h///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries.Extra.Old u-boot-2009.03/board/amcc/yucca/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yucca/CVS/Entries.Extra.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/cmd_yucca.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/init.S///1238019688/
+/u-boot.lds///1238019688/
+/yucca.c///1238019688/
+/yucca.h///1238019688/
diff -Naur u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries.Old u-boot-2009.03/board/amcc/yucca/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amcc/yucca/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yucca/CVS/Entries.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/cmd_yucca.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/yucca.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/yucca.h/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amcc/yucca/CVS/Repository u-boot-2009.03/board/amcc/yucca/CVS/Repository
--- u-boot-2009.03_orig/board/amcc/yucca/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yucca/CVS/Repository 2009-03-25 15:24:05.338226200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amcc/yucca
diff -Naur u-boot-2009.03_orig/board/amcc/yucca/CVS/Root u-boot-2009.03/board/amcc/yucca/CVS/Root
--- u-boot-2009.03_orig/board/amcc/yucca/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amcc/yucca/CVS/Root 2009-03-25 15:24:05.322601400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amirix/CVS/Entries u-boot-2009.03/board/amirix/CVS/Entries
--- u-boot-2009.03_orig/board/amirix/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/CVS/Entries 2009-03-25 15:24:05.806970200 -0700
@@ -0,0 +1 @@
+D/ap1000////
diff -Naur u-boot-2009.03_orig/board/amirix/CVS/Entries.Extra u-boot-2009.03/board/amirix/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amirix/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/CVS/Entries.Extra 2009-03-25 15:24:05.806970200 -0700
@@ -0,0 +1 @@
+D/ap1000////
diff -Naur u-boot-2009.03_orig/board/amirix/CVS/Repository u-boot-2009.03/board/amirix/CVS/Repository
--- u-boot-2009.03_orig/board/amirix/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/CVS/Repository 2009-03-25 15:24:05.619472600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amirix
diff -Naur u-boot-2009.03_orig/board/amirix/CVS/Root u-boot-2009.03/board/amirix/CVS/Root
--- u-boot-2009.03_orig/board/amirix/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/CVS/Root 2009-03-25 15:24:05.619472600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries u-boot-2009.03/board/amirix/ap1000/CVS/Entries
--- u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/ap1000/CVS/Entries 2009-03-25 15:57:12.965822200 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ap1000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ap1000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/powerspan.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/powerspan.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries.Extra u-boot-2009.03/board/amirix/ap1000/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/ap1000/CVS/Entries.Extra 2009-03-25 15:57:12.981447100 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019688/
+/ap1000.c///1238019688/
+/ap1000.h///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/init.S///1238019688/
+/pci.c///1238019688/
+/powerspan.c///1238019688/
+/powerspan.h///1238019688/
+/serial.c///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries.Extra.Old u-boot-2009.03/board/amirix/ap1000/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/ap1000/CVS/Entries.Extra.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019688/
+/ap1000.c///1238019688/
+/ap1000.h///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/init.S///1238019688/
+/pci.c///1238019688/
+/powerspan.c///1238019688/
+/powerspan.h///1238019688/
+/serial.c///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries.Old u-boot-2009.03/board/amirix/ap1000/CVS/Entries.Old
--- u-boot-2009.03_orig/board/amirix/ap1000/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/ap1000/CVS/Entries.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/ap1000.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/ap1000.h/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/powerspan.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/powerspan.h/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/amirix/ap1000/CVS/Repository u-boot-2009.03/board/amirix/ap1000/CVS/Repository
--- u-boot-2009.03_orig/board/amirix/ap1000/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/ap1000/CVS/Repository 2009-03-25 15:24:05.650722200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/amirix/ap1000
diff -Naur u-boot-2009.03_orig/board/amirix/ap1000/CVS/Root u-boot-2009.03/board/amirix/ap1000/CVS/Root
--- u-boot-2009.03_orig/board/amirix/ap1000/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/amirix/ap1000/CVS/Root 2009-03-25 15:24:05.635097400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/apollon/CVS/Entries u-boot-2009.03/board/apollon/CVS/Entries
--- u-boot-2009.03_orig/board/apollon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/apollon/CVS/Entries 2009-03-25 15:57:13.122071200 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/apollon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys_info.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/apollon/CVS/Entries.Extra u-boot-2009.03/board/apollon/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/apollon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/apollon/CVS/Entries.Extra 2009-03-25 15:57:13.122071200 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/apollon.c///1238019688/
+/config.mk///1238019688/
+/lowlevel_init.S///1238019688/
+/mem.c///1238019688/
+/mem.h///1238019688/
+/sys_info.c///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/apollon/CVS/Entries.Extra.Old u-boot-2009.03/board/apollon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/apollon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/apollon/CVS/Entries.Extra.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/apollon.c///1238019688/
+/config.mk///1238019688/
+/lowlevel_init.S///1238019688/
+/mem.c///1238019688/
+/mem.h///1238019688/
+/sys_info.c///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/apollon/CVS/Entries.Old u-boot-2009.03/board/apollon/CVS/Entries.Old
--- u-boot-2009.03_orig/board/apollon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/apollon/CVS/Entries.Old 2009-03-25 15:24:05.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/apollon.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/mem.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/mem.h/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/sys_info.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/apollon/CVS/Repository u-boot-2009.03/board/apollon/CVS/Repository
--- u-boot-2009.03_orig/board/apollon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/apollon/CVS/Repository 2009-03-25 15:24:05.853844600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/apollon
diff -Naur u-boot-2009.03_orig/board/apollon/CVS/Root u-boot-2009.03/board/apollon/CVS/Root
--- u-boot-2009.03_orig/board/apollon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/apollon/CVS/Root 2009-03-25 15:24:05.853844600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/armadillo/CVS/Entries u-boot-2009.03/board/armadillo/CVS/Entries
--- u-boot-2009.03_orig/board/armadillo/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armadillo/CVS/Entries 2009-03-25 15:57:13.200195700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/armadillo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armadillo/CVS/Entries.Extra u-boot-2009.03/board/armadillo/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/armadillo/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armadillo/CVS/Entries.Extra 2009-03-25 15:57:13.200195700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019688/
+/armadillo.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/lowlevel_init.S///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/armadillo/CVS/Entries.Extra.Old u-boot-2009.03/board/armadillo/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/armadillo/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armadillo/CVS/Entries.Extra.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019688/
+/armadillo.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/lowlevel_init.S///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/armadillo/CVS/Entries.Old u-boot-2009.03/board/armadillo/CVS/Entries.Old
--- u-boot-2009.03_orig/board/armadillo/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armadillo/CVS/Entries.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/armadillo.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armadillo/CVS/Repository u-boot-2009.03/board/armadillo/CVS/Repository
--- u-boot-2009.03_orig/board/armadillo/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armadillo/CVS/Repository 2009-03-25 15:24:05.994467800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/armadillo
diff -Naur u-boot-2009.03_orig/board/armadillo/CVS/Root u-boot-2009.03/board/armadillo/CVS/Root
--- u-boot-2009.03_orig/board/armadillo/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armadillo/CVS/Root 2009-03-25 15:24:05.994467800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/armltd/CVS/Entries u-boot-2009.03/board/armltd/CVS/Entries
--- u-boot-2009.03_orig/board/armltd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/CVS/Entries 2009-03-25 15:57:13.512693700 -0700
@@ -0,0 +1,4 @@
+D/integratorap////
+D/integratorcp////
+D/versatile////
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/board/armltd/CVS/Entries.Extra u-boot-2009.03/board/armltd/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/armltd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/CVS/Entries.Extra 2009-03-25 15:57:13.512693700 -0700
@@ -0,0 +1,4 @@
+D/integratorap////
+D/integratorcp////
+D/versatile////
+/.gitignore///1238019688/
diff -Naur u-boot-2009.03_orig/board/armltd/CVS/Entries.Extra.Old u-boot-2009.03/board/armltd/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/armltd/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/CVS/Entries.Extra.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,4 @@
+/.gitignore///1238019688/
+D/integratorap////
+D/integratorcp////
+D/versatile////
diff -Naur u-boot-2009.03_orig/board/armltd/CVS/Entries.Old u-boot-2009.03/board/armltd/CVS/Entries.Old
--- u-boot-2009.03_orig/board/armltd/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/CVS/Entries.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,4 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D/integratorap////
+D/integratorcp////
+D/versatile////
diff -Naur u-boot-2009.03_orig/board/armltd/CVS/Repository u-boot-2009.03/board/armltd/CVS/Repository
--- u-boot-2009.03_orig/board/armltd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/CVS/Repository 2009-03-25 15:24:06.103841400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/armltd
diff -Naur u-boot-2009.03_orig/board/armltd/CVS/Root u-boot-2009.03/board/armltd/CVS/Root
--- u-boot-2009.03_orig/board/armltd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/CVS/Root 2009-03-25 15:24:06.103841400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries u-boot-2009.03/board/armltd/integratorap/CVS/Entries
--- u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorap/CVS/Entries 2009-03-25 15:57:13.293945100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/integratorap.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/split_by_variant.sh/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.template/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries.Extra u-boot-2009.03/board/armltd/integratorap/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorap/CVS/Entries.Extra 2009-03-25 15:57:13.293945100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/integratorap.c///1238019688/
+/lowlevel_init.S///1238019688/
+/split_by_variant.sh///1238019688/
+/u-boot.lds.template///1238019688/
diff -Naur u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries.Extra.Old u-boot-2009.03/board/armltd/integratorap/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorap/CVS/Entries.Extra.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/integratorap.c///1238019688/
+/lowlevel_init.S///1238019688/
+/split_by_variant.sh///1238019688/
+/u-boot.lds.template///1238019688/
diff -Naur u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries.Old u-boot-2009.03/board/armltd/integratorap/CVS/Entries.Old
--- u-boot-2009.03_orig/board/armltd/integratorap/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorap/CVS/Entries.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/integratorap.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/split_by_variant.sh/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds.template/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armltd/integratorap/CVS/Repository u-boot-2009.03/board/armltd/integratorap/CVS/Repository
--- u-boot-2009.03_orig/board/armltd/integratorap/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorap/CVS/Repository 2009-03-25 15:24:06.135091000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/armltd/integratorap
diff -Naur u-boot-2009.03_orig/board/armltd/integratorap/CVS/Root u-boot-2009.03/board/armltd/integratorap/CVS/Root
--- u-boot-2009.03_orig/board/armltd/integratorap/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorap/CVS/Root 2009-03-25 15:24:06.135091000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries u-boot-2009.03/board/armltd/integratorcp/CVS/Entries
--- u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorcp/CVS/Entries 2009-03-25 15:57:13.372069600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/integratorcp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/split_by_variant.sh/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.template/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries.Extra u-boot-2009.03/board/armltd/integratorcp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorcp/CVS/Entries.Extra 2009-03-25 15:57:13.372069600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/integratorcp.c///1238019688/
+/lowlevel_init.S///1238019688/
+/split_by_variant.sh///1238019688/
+/u-boot.lds.template///1238019688/
diff -Naur u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries.Extra.Old u-boot-2009.03/board/armltd/integratorcp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorcp/CVS/Entries.Extra.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/integratorcp.c///1238019688/
+/lowlevel_init.S///1238019688/
+/split_by_variant.sh///1238019688/
+/u-boot.lds.template///1238019688/
diff -Naur u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries.Old u-boot-2009.03/board/armltd/integratorcp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorcp/CVS/Entries.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/integratorcp.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/split_by_variant.sh/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds.template/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Repository u-boot-2009.03/board/armltd/integratorcp/CVS/Repository
--- u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorcp/CVS/Repository 2009-03-25 15:24:06.275714200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/armltd/integratorcp
diff -Naur u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Root u-boot-2009.03/board/armltd/integratorcp/CVS/Root
--- u-boot-2009.03_orig/board/armltd/integratorcp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/integratorcp/CVS/Root 2009-03-25 15:24:06.275714200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries u-boot-2009.03/board/armltd/versatile/CVS/Entries
--- u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/versatile/CVS/Entries 2009-03-25 15:57:13.450194100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/split_by_variant.sh/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/versatile.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries.Extra u-boot-2009.03/board/armltd/versatile/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/versatile/CVS/Entries.Extra 2009-03-25 15:57:13.450194100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/lowlevel_init.S///1238019688/
+/split_by_variant.sh///1238019688/
+/u-boot.lds///1238019688/
+/versatile.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries.Extra.Old u-boot-2009.03/board/armltd/versatile/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/versatile/CVS/Entries.Extra.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/lowlevel_init.S///1238019688/
+/split_by_variant.sh///1238019688/
+/u-boot.lds///1238019688/
+/versatile.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries.Old u-boot-2009.03/board/armltd/versatile/CVS/Entries.Old
--- u-boot-2009.03_orig/board/armltd/versatile/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/versatile/CVS/Entries.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/split_by_variant.sh/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/versatile.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/armltd/versatile/CVS/Repository u-boot-2009.03/board/armltd/versatile/CVS/Repository
--- u-boot-2009.03_orig/board/armltd/versatile/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/versatile/CVS/Repository 2009-03-25 15:24:06.603835000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/armltd/versatile
diff -Naur u-boot-2009.03_orig/board/armltd/versatile/CVS/Root u-boot-2009.03/board/armltd/versatile/CVS/Root
--- u-boot-2009.03_orig/board/armltd/versatile/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/armltd/versatile/CVS/Root 2009-03-25 15:24:06.603835000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/assabet/CVS/Entries u-boot-2009.03/board/assabet/CVS/Entries
--- u-boot-2009.03_orig/board/assabet/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/assabet/CVS/Entries 2009-03-25 15:57:13.575193300 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/assabet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/setup.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/assabet/CVS/Entries.Extra u-boot-2009.03/board/assabet/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/assabet/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/assabet/CVS/Entries.Extra 2009-03-25 15:57:13.575193300 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/assabet.c///1238019688/
+/config.mk///1238019688/
+/setup.S///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/assabet/CVS/Entries.Extra.Old u-boot-2009.03/board/assabet/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/assabet/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/assabet/CVS/Entries.Extra.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/assabet.c///1238019688/
+/config.mk///1238019688/
+/setup.S///1238019688/
+/u-boot.lds///1238019688/
diff -Naur u-boot-2009.03_orig/board/assabet/CVS/Entries.Old u-boot-2009.03/board/assabet/CVS/Entries.Old
--- u-boot-2009.03_orig/board/assabet/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/assabet/CVS/Entries.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/assabet.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/setup.S/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/assabet/CVS/Repository u-boot-2009.03/board/assabet/CVS/Repository
--- u-boot-2009.03_orig/board/assabet/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/assabet/CVS/Repository 2009-03-25 15:24:06.775707800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/assabet
diff -Naur u-boot-2009.03_orig/board/assabet/CVS/Root u-boot-2009.03/board/assabet/CVS/Root
--- u-boot-2009.03_orig/board/assabet/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/assabet/CVS/Root 2009-03-25 15:24:06.775707800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atc/CVS/Entries u-boot-2009.03/board/atc/CVS/Entries
--- u-boot-2009.03_orig/board/atc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atc/CVS/Entries 2009-03-25 15:57:13.637692900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ti113x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atc/CVS/Entries.Extra u-boot-2009.03/board/atc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atc/CVS/Entries.Extra 2009-03-25 15:57:13.637692900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/atc.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/ti113x.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/atc/CVS/Entries.Extra.Old u-boot-2009.03/board/atc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atc/CVS/Entries.Extra.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019688/
+/atc.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/ti113x.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/atc/CVS/Entries.Old u-boot-2009.03/board/atc/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atc/CVS/Entries.Old 2009-03-25 15:24:06.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/atc.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/ti113x.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atc/CVS/Repository u-boot-2009.03/board/atc/CVS/Repository
--- u-boot-2009.03_orig/board/atc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atc/CVS/Repository 2009-03-25 15:24:06.869456600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atc
diff -Naur u-boot-2009.03_orig/board/atc/CVS/Root u-boot-2009.03/board/atc/CVS/Root
--- u-boot-2009.03_orig/board/atc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atc/CVS/Root 2009-03-25 15:24:06.869456600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/CVS/Entries u-boot-2009.03/board/atmel/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/CVS/Entries 2009-03-25 15:24:08.166315000 -0700
@@ -0,0 +1,8 @@
+D/at91cap9adk////
+D/at91rm9200dk////
+D/at91sam9260ek////
+D/at91sam9261ek////
+D/at91sam9263ek////
+D/at91sam9rlek////
+D/atngw100////
+D/atstk1000////
diff -Naur u-boot-2009.03_orig/board/atmel/CVS/Entries.Extra u-boot-2009.03/board/atmel/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/CVS/Entries.Extra 2009-03-25 15:24:08.166315000 -0700
@@ -0,0 +1,8 @@
+D/at91cap9adk////
+D/at91rm9200dk////
+D/at91sam9260ek////
+D/at91sam9261ek////
+D/at91sam9263ek////
+D/at91sam9rlek////
+D/atngw100////
+D/atstk1000////
diff -Naur u-boot-2009.03_orig/board/atmel/CVS/Repository u-boot-2009.03/board/atmel/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/CVS/Repository 2009-03-25 15:24:06.978830200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel
diff -Naur u-boot-2009.03_orig/board/atmel/CVS/Root u-boot-2009.03/board/atmel/CVS/Root
--- u-boot-2009.03_orig/board/atmel/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/CVS/Root 2009-03-25 15:24:06.978830200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries 2009-03-25 15:57:13.715817400 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91cap9adk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/partition.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries.Extra u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries.Extra 2009-03-25 15:57:13.715817400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019688/
+/at91cap9adk.c///1238019688/
+/config.mk///1238019688/
+/led.c///1238019688/
+/nand.c///1238019688/
+/partition.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries.Extra.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019688/
+/at91cap9adk.c///1238019688/
+/config.mk///1238019688/
+/led.c///1238019688/
+/nand.c///1238019688/
+/partition.c///1238019688/
diff -Naur u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries.Old u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91cap9adk/CVS/Entries.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/at91cap9adk.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/led.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/partition.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Repository u-boot-2009.03/board/atmel/at91cap9adk/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91cap9adk/CVS/Repository 2009-03-25 15:24:07.010079800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/at91cap9adk
diff -Naur u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Root u-boot-2009.03/board/atmel/at91cap9adk/CVS/Root
--- u-boot-2009.03_orig/board/atmel/at91cap9adk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91cap9adk/CVS/Root 2009-03-25 15:24:07.010079800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries 2009-03-25 15:57:13.793941900 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91rm9200dk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mux.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/partition.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries.Extra u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries.Extra 2009-03-25 15:57:13.793941900 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/at91rm9200dk.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/led.c///1238019688/
+/mux.c///1238019688/
+/partition.c///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries.Extra.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019688/
+/at91rm9200dk.c///1238019688/
+/config.mk///1238019688/
+/flash.c///1238019688/
+/led.c///1238019688/
+/mux.c///1238019688/
+/partition.c///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries.Old u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Entries.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/at91rm9200dk.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/led.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/mux.c/1.1.1.1/Wed Mar 25 22:21:28 2009//
+/partition.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Repository u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Repository 2009-03-25 15:24:07.135078200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/at91rm9200dk
diff -Naur u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Root u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Root
--- u-boot-2009.03_orig/board/atmel/at91rm9200dk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91rm9200dk/CVS/Root 2009-03-25 15:24:07.119453400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries 2009-03-25 15:57:13.872066400 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9260ek.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/partition.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries.Extra u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries.Extra 2009-03-25 15:57:13.872066400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9260ek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries.Extra.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9260ek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries.Old u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Entries.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/at91sam9260ek.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/led.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/partition.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Repository u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Repository 2009-03-25 15:24:07.275701400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/at91sam9260ek
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Root u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Root
--- u-boot-2009.03_orig/board/atmel/at91sam9260ek/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9260ek/CVS/Root 2009-03-25 15:24:07.275701400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries 2009-03-25 15:57:13.950190900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9261ek.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/partition.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries.Extra u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries.Extra 2009-03-25 15:57:13.950190900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9261ek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries.Extra.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9261ek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries.Old u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Entries.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/at91sam9261ek.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/led.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/partition.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Repository u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Repository 2009-03-25 15:24:07.556947800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/at91sam9261ek
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Root u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Root
--- u-boot-2009.03_orig/board/atmel/at91sam9261ek/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9261ek/CVS/Root 2009-03-25 15:24:07.556947800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries 2009-03-25 15:57:14.028315400 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9263ek.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/partition.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries.Extra u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries.Extra 2009-03-25 15:57:14.028315400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9263ek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries.Extra.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9263ek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries.Old u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Entries.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/at91sam9263ek.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/led.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/partition.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Repository u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Repository 2009-03-25 15:24:07.713195800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/at91sam9263ek
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Root u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Root
--- u-boot-2009.03_orig/board/atmel/at91sam9263ek/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9263ek/CVS/Root 2009-03-25 15:24:07.697571000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries 2009-03-25 15:57:14.106439900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9rlek.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/partition.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries.Extra u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries.Extra 2009-03-25 15:57:14.122064800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9rlek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries.Extra.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019689/
+/at91sam9rlek.c///1238019689/
+/config.mk///1238019689/
+/led.c///1238019689/
+/nand.c///1238019689/
+/partition.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries.Old u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Entries.Old 2009-03-25 15:24:07.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/at91sam9rlek.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/led.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/partition.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Repository u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Repository 2009-03-25 15:24:07.838194200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/at91sam9rlek
diff -Naur u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Root u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Root
--- u-boot-2009.03_orig/board/atmel/at91sam9rlek/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/at91sam9rlek/CVS/Root 2009-03-25 15:24:07.838194200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries u-boot-2009.03/board/atmel/atngw100/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atngw100/CVS/Entries 2009-03-25 15:57:14.184564400 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atngw100.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries.Extra u-boot-2009.03/board/atmel/atngw100/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atngw100/CVS/Entries.Extra 2009-03-25 15:57:14.184564400 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019689/
+/atngw100.c///1238019689/
+/config.mk///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/atngw100/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atngw100/CVS/Entries.Extra.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019689/
+/atngw100.c///1238019689/
+/config.mk///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries.Old u-boot-2009.03/board/atmel/atngw100/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/atngw100/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atngw100/CVS/Entries.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/atngw100.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/atngw100/CVS/Repository u-boot-2009.03/board/atmel/atngw100/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/atngw100/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atngw100/CVS/Repository 2009-03-25 15:24:07.963192600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/atngw100
diff -Naur u-boot-2009.03_orig/board/atmel/atngw100/CVS/Root u-boot-2009.03/board/atmel/atngw100/CVS/Root
--- u-boot-2009.03_orig/board/atmel/atngw100/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atngw100/CVS/Root 2009-03-25 15:24:07.963192600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries u-boot-2009.03/board/atmel/atstk1000/CVS/Entries
--- u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atstk1000/CVS/Entries 2009-03-25 15:57:14.247064000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries.Extra u-boot-2009.03/board/atmel/atstk1000/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atstk1000/CVS/Entries.Extra 2009-03-25 15:57:14.247064000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019689/
+/atstk1000.c///1238019689/
+/config.mk///1238019689/
+/flash.c///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries.Extra.Old u-boot-2009.03/board/atmel/atstk1000/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atstk1000/CVS/Entries.Extra.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019689/
+/atstk1000.c///1238019689/
+/config.mk///1238019689/
+/flash.c///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries.Old u-boot-2009.03/board/atmel/atstk1000/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atstk1000/CVS/Entries.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/atstk1000.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Repository u-boot-2009.03/board/atmel/atstk1000/CVS/Repository
--- u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atstk1000/CVS/Repository 2009-03-25 15:24:08.056941400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atmel/atstk1000
diff -Naur u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Root u-boot-2009.03/board/atmel/atstk1000/CVS/Root
--- u-boot-2009.03_orig/board/atmel/atstk1000/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atmel/atstk1000/CVS/Root 2009-03-25 15:24:08.056941400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/atum8548/CVS/Entries u-boot-2009.03/board/atum8548/CVS/Entries
--- u-boot-2009.03_orig/board/atum8548/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atum8548/CVS/Entries 2009-03-25 15:57:14.325188500 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atum8548.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atum8548/CVS/Entries.Extra u-boot-2009.03/board/atum8548/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/atum8548/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atum8548/CVS/Entries.Extra 2009-03-25 15:57:14.325188500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019689/
+/atum8548.c///1238019689/
+/config.mk///1238019689/
+/ddr.c///1238019689/
+/law.c///1238019689/
+/tlb.c///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atum8548/CVS/Entries.Extra.Old u-boot-2009.03/board/atum8548/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/atum8548/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atum8548/CVS/Entries.Extra.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019689/
+/atum8548.c///1238019689/
+/config.mk///1238019689/
+/ddr.c///1238019689/
+/law.c///1238019689/
+/tlb.c///1238019689/
+/u-boot.lds///1238019689/
diff -Naur u-boot-2009.03_orig/board/atum8548/CVS/Entries.Old u-boot-2009.03/board/atum8548/CVS/Entries.Old
--- u-boot-2009.03_orig/board/atum8548/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atum8548/CVS/Entries.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/atum8548.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/atum8548/CVS/Repository u-boot-2009.03/board/atum8548/CVS/Repository
--- u-boot-2009.03_orig/board/atum8548/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atum8548/CVS/Repository 2009-03-25 15:24:08.213189400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/atum8548
diff -Naur u-boot-2009.03_orig/board/atum8548/CVS/Root u-boot-2009.03/board/atum8548/CVS/Root
--- u-boot-2009.03_orig/board/atum8548/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/atum8548/CVS/Root 2009-03-25 15:24:08.213189400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/avnet/CVS/Entries u-boot-2009.03/board/avnet/CVS/Entries
--- u-boot-2009.03_orig/board/avnet/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/CVS/Entries 2009-03-25 15:24:08.728807800 -0700
@@ -0,0 +1,2 @@
+D/fx12mm////
+D/v5fx30teval////
diff -Naur u-boot-2009.03_orig/board/avnet/CVS/Entries.Extra u-boot-2009.03/board/avnet/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/avnet/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/CVS/Entries.Extra 2009-03-25 15:24:08.728807800 -0700
@@ -0,0 +1,2 @@
+D/fx12mm////
+D/v5fx30teval////
diff -Naur u-boot-2009.03_orig/board/avnet/CVS/Repository u-boot-2009.03/board/avnet/CVS/Repository
--- u-boot-2009.03_orig/board/avnet/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/CVS/Repository 2009-03-25 15:24:08.338187800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/avnet
diff -Naur u-boot-2009.03_orig/board/avnet/CVS/Root u-boot-2009.03/board/avnet/CVS/Root
--- u-boot-2009.03_orig/board/avnet/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/CVS/Root 2009-03-25 15:24:08.338187800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries u-boot-2009.03/board/avnet/fx12mm/CVS/Entries
--- u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/fx12mm/CVS/Entries 2009-03-25 15:57:14.387688100 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fx12mm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xparameters.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries.Extra u-boot-2009.03/board/avnet/fx12mm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/fx12mm/CVS/Entries.Extra 2009-03-25 15:57:14.403313000 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/config.mk///1238019689/
+/fx12mm.c///1238019689/
+/xparameters.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries.Extra.Old u-boot-2009.03/board/avnet/fx12mm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/fx12mm/CVS/Entries.Extra.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/config.mk///1238019689/
+/fx12mm.c///1238019689/
+/xparameters.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries.Old u-boot-2009.03/board/avnet/fx12mm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/fx12mm/CVS/Entries.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/fx12mm.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/xparameters.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Repository u-boot-2009.03/board/avnet/fx12mm/CVS/Repository
--- u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/fx12mm/CVS/Repository 2009-03-25 15:24:08.369437400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/avnet/fx12mm
diff -Naur u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Root u-boot-2009.03/board/avnet/fx12mm/CVS/Root
--- u-boot-2009.03_orig/board/avnet/fx12mm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/fx12mm/CVS/Root 2009-03-25 15:24:08.353812600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries
--- u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries 2009-03-25 15:57:14.450187700 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v5fx30teval.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xparameters.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries.Extra u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries.Extra 2009-03-25 15:57:14.465812600 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/config.mk///1238019689/
+/v5fx30teval.c///1238019689/
+/xparameters.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries.Extra.Old u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries.Extra.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/config.mk///1238019689/
+/v5fx30teval.c///1238019689/
+/xparameters.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries.Old u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries.Old
--- u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/v5fx30teval/CVS/Entries.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/v5fx30teval.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/xparameters.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Repository u-boot-2009.03/board/avnet/v5fx30teval/CVS/Repository
--- u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/v5fx30teval/CVS/Repository 2009-03-25 15:24:08.619434200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/avnet/v5fx30teval
diff -Naur u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Root u-boot-2009.03/board/avnet/v5fx30teval/CVS/Root
--- u-boot-2009.03_orig/board/avnet/v5fx30teval/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/avnet/v5fx30teval/CVS/Root 2009-03-25 15:24:08.619434200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/barco/CVS/Entries u-boot-2009.03/board/barco/CVS/Entries
--- u-boot-2009.03_orig/board/barco/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/barco/CVS/Entries 2009-03-31 14:43:04.230651200 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/early_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/barco.c/1.1.1.1/Tue Mar 31 21:43:04 2009//T1.1.1.1
+/flash.c/1.1.1.1/Tue Mar 31 21:43:04 2009//T1.1.1.1
+/barco_svc.h/1.1.1.1/Tue Mar 31 21:43:04 2009//T1.1.1.1
+/speed.h/1.1.1.1/Tue Mar 31 21:43:04 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/barco/CVS/Entries.Extra u-boot-2009.03/board/barco/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/barco/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/barco/CVS/Entries.Extra 2009-03-31 14:43:04.230651200 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019689/
+/README///1238019689/
+/config.mk///1238019689/
+/early_init.S///1238019689/
+/barco.c///1238019689/
+/flash.c///1238019689/
+/barco_svc.h///1238019689/
+/speed.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/barco/CVS/Entries.Extra.Old u-boot-2009.03/board/barco/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/barco/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/barco/CVS/Entries.Extra.Old 2009-03-25 17:51:36.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019689/
+/README///1238019689/
+/config.mk///1238019689/
+/early_init.S///1238019689/
+/barco.c///1238028695/
+/barco_svc.h///1238028696/
+/flash.c///1238028696/
+/speed.h///1238028696/
diff -Naur u-boot-2009.03_orig/board/barco/CVS/Entries.Old u-boot-2009.03/board/barco/CVS/Entries.Old
--- u-boot-2009.03_orig/board/barco/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/barco/CVS/Entries.Old 2009-03-25 17:51:36.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/early_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/barco.c/1.2/Thu Mar 26 00:51:35 2009//
+/barco_svc.h/1.2/Thu Mar 26 00:51:36 2009//
+/flash.c/1.2/Thu Mar 26 00:51:36 2009//
+/speed.h/1.2/Thu Mar 26 00:51:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/barco/CVS/Repository u-boot-2009.03/board/barco/CVS/Repository
--- u-boot-2009.03_orig/board/barco/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/barco/CVS/Repository 2009-03-25 15:24:08.775682200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/barco
diff -Naur u-boot-2009.03_orig/board/barco/CVS/Root u-boot-2009.03/board/barco/CVS/Root
--- u-boot-2009.03_orig/board/barco/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/barco/CVS/Root 2009-03-25 15:24:08.775682200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/barco/barco.c u-boot-2009.03/board/barco/barco.c
--- u-boot-2009.03_orig/board/barco/barco.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/barco/barco.c 2009-03-31 14:43:04.011904000 -0700
@@ -1,363 +1,366 @@
-/********************************************************************
- *
- * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
- *
- * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/barco.c,v $
- * $Revision: 1.4 $
- * $Author: mleeman $
- * $Date: 2005/03/02 16:40:20 $
- *
- * Last ChangeLog Entry
- * $Log: barco.c,v $
- * Revision 1.4 2005/03/02 16:40:20 mleeman
- * remove empty labels (3.4 complains)
- *
- * Revision 1.3 2005/02/21 12:48:58 mleeman
- * update of copyright years (feedback wd)
- *
- * Revision 1.2 2005/02/21 10:10:53 mleeman
- * - split up switch statement to a function call (Linux kernel coding guidelines)
- * ( feedback wd)
- *
- * Revision 1.1 2005/02/14 09:31:07 mleeman
- * renaming of files
- *
- * Revision 1.1 2005/02/14 09:23:46 mleeman
- * - moved 'barcohydra' directory to a more generic barco; since we will be
- * supporting and adding multiple boards
- *
- * Revision 1.3 2005/02/10 13:57:32 mleeman
- * fixed flash corruption: I should exit from the moment I find the correct value
- *
- * Revision 1.2 2005/02/09 12:56:23 mleeman
- * add generic header to track changes in sources
- *
- *
- *******************************************************************/
-
-/*
- * (C) Copyright 2004
- * Marc Leeman <marc.leeman@barco.com>
- *
- * 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
- */
-
-#include <common.h>
-#include <mpc824x.h>
-#include <pci.h>
-#include <malloc.h>
-#include <command.h>
-
-#include "config.h"
-#include "barco_svc.h"
-
-#define TRY_WORKING (3)
-#define BOOT_DEFAULT (2)
-#define BOOT_WORKING (1)
-
-int checkboard (void)
-{
- /*TODO: Check processor type */
-
- puts ( "Board: Streaming Video Card for Hydra systems "
-#ifdef CONFIG_MPC8240
- "8240"
-#endif
-#ifdef CONFIG_MPC8245
- "8245"
-#endif
- " Unity ##Test not implemented yet##\n");
- return 0;
-}
-
-phys_size_t initdram (int board_type)
-{
- long size;
- long new_bank0_end;
- long mear1;
- long emear1;
-
- size = get_ram_size (CONFIG_SYS_SDRAM_BASE, CONFIG_SYS_MAX_RAM_SIZE);
-
- new_bank0_end = size - 1;
- mear1 = mpc824x_mpc107_getreg (MEAR1);
- emear1 = mpc824x_mpc107_getreg (EMEAR1);
- mear1 = (mear1 & 0xFFFFFF00) |
- ((new_bank0_end & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT);
- emear1 = (emear1 & 0xFFFFFF00) |
- ((new_bank0_end & MICR_ADDR_MASK) >> MICR_EADDR_SHIFT);
- mpc824x_mpc107_setreg (MEAR1, mear1);
- mpc824x_mpc107_setreg (EMEAR1, emear1);
-
- return (size);
-}
-
-/*
- * Initialize PCI Devices, report devices found.
- */
-#ifndef CONFIG_PCI_PNP
-static struct pci_config_table pci_barcohydra_config_table[] = {
- { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x0f, PCI_ANY_ID,
- pci_cfgfunc_config_device, { PCI_ENET0_IOADDR,
- PCI_ENET0_MEMADDR,
- PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
- { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x10, PCI_ANY_ID,
- pci_cfgfunc_config_device, { PCI_ENET1_IOADDR,
- PCI_ENET1_MEMADDR,
- PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
- { }
-};
-#endif
-
-struct pci_controller hose = {
-#ifndef CONFIG_PCI_PNP
- config_table: pci_barcohydra_config_table,
-#endif
-};
-
-void pci_init_board (void)
-{
- pci_mpc824x_init (&hose);
-}
-
-int write_flash (char *addr, char value)
-{
- char *adr = (char *)0xFF800000;
- int cnt = 0;
- char status,oldstatus;
-
- *(adr+0x55) = 0xAA; udelay (1);
- *(adr+0xAA) = 0x55; udelay (1);
- *(adr+0x55) = 0xA0; udelay (1);
- *addr = value;
-
- status = *addr;
- do {
- oldstatus = status;
- status = *addr;
-
- if ((oldstatus & 0x40) == (status & 0x40)) {
- return 4;
- }
- cnt++;
- if (cnt > 10000) {
- return 2;
- }
- } while ( (status & 0x20) == 0 );
-
- oldstatus = *addr;
- status = *addr;
-
- if ((oldstatus & 0x40) == (status & 0x40)) {
- return 0;
- } else {
- *(adr+0x55) = 0xF0;
- return 1;
- }
-}
-
-unsigned update_flash (unsigned char *buf)
-{
- switch ((*buf) & 0x3) {
- case TRY_WORKING:
- printf ("found 3 and converted it to 2\n");
- write_flash ((char *)buf, (*buf) & 0xFE);
- *((unsigned char *)0xFF800000) = 0xF0;
- udelay (100);
- printf ("buf [%#010x] %#010x\n", (unsigned)buf, (*buf));
- /* XXX - fall through??? */
- case BOOT_WORKING :
- return BOOT_WORKING;
- }
- return BOOT_DEFAULT;
-}
-
-unsigned scan_flash (void)
-{
- char section[] = "kernel";
- int cfgFileLen = (CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH >> 1);
- int sectionPtr = 0;
- int foundItem = 0; /* 0: None, 1: section found, 2: "=" found */
- int bufPtr;
- unsigned char *buf;
-
- buf = (unsigned char*)(CONFIG_SYS_FLASH_RANGE_BASE + CONFIG_SYS_FLASH_RANGE_SIZE \
- - CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH);
- for (bufPtr = 0; bufPtr < cfgFileLen; ++bufPtr) {
- if ((buf[bufPtr]==0xFF) && (*(int*)(buf+bufPtr)==0xFFFFFFFF)) {
- return BOOT_DEFAULT;
- }
- /* This is the scanning loop, we try to find a particular
- * quoted value
- */
- switch (foundItem) {
- case 0:
- if ((section[sectionPtr] == 0)) {
- ++foundItem;
- } else if (buf[bufPtr] == section[sectionPtr]) {
- ++sectionPtr;
- } else {
- sectionPtr = 0;
- }
- break;
- case 1:
- ++foundItem;
- break;
- case 2:
- ++foundItem;
- break;
- case 3:
- default:
- return update_flash (&buf[bufPtr - 1]);
- }
- }
-
- printf ("Failed to read %s\n",section);
- return BOOT_DEFAULT;
-}
-
-TSBootInfo* find_boot_info (void)
-{
- unsigned bootimage = scan_flash ();
- TSBootInfo* info = (TSBootInfo*)malloc (sizeof(TSBootInfo));
-
- switch (bootimage) {
- case TRY_WORKING:
- info->address = CONFIG_SYS_WORKING_KERNEL_ADDRESS;
- break;
- case BOOT_WORKING :
- info->address = CONFIG_SYS_WORKING_KERNEL_ADDRESS;
- break;
- case BOOT_DEFAULT:
- default:
- info->address= CONFIG_SYS_DEFAULT_KERNEL_ADDRESS;
-
- }
- info->size = *((unsigned int *)(info->address ));
-
- return info;
-}
-
-void barcobcd_boot (void)
-{
- TSBootInfo* start;
- char *bootm_args[2];
- char *buf;
- int cnt;
- extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
-
- buf = (char *)(0x00800000);
- /* make certain there are enough chars to print the command line here!
- */
- bootm_args[0] = (char *)malloc (16*sizeof(char));
- bootm_args[1] = (char *)malloc (16*sizeof(char));
-
- start = find_boot_info ();
-
- printf ("Booting kernel at address %#10x with size %#10x\n",
- start->address, start->size);
-
- /* give length of the kernel image to bootm */
- sprintf (bootm_args[0],"%x",start->size);
- /* give address of the kernel image to bootm */
- sprintf (bootm_args[1],"%x",(unsigned)buf);
-
- printf ("flash address: %#10x\n",start->address+8);
- printf ("buf address: %#10x\n",(unsigned)buf);
-
- /* aha, we reserve 8 bytes here... */
- for (cnt = 0; cnt < start->size ; cnt++) {
- buf[cnt] = ((char *)start->address)[cnt+8];
- }
-
- /* initialise RAM memory */
- *((unsigned int *)0xFEC00000) = 0x00141A98;
- do_bootm (NULL,0,2,bootm_args);
-}
-
-int barcobcd_boot_image (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
-#if 0
- if (argc > 1) {
- cmd_usage(cmdtp);
- return 1;
- }
-#endif
- barcobcd_boot ();
-
- return 0;
-}
-
-/* Currently, boot_working and boot_default are the same command. This is
- * left in here to see what we'll do in the future */
-
-U_BOOT_CMD (
- try_working, 1, 1, barcobcd_boot_image,
- "check flash value and boot the appropriate image",
- "\n"
- );
-
-U_BOOT_CMD (
- boot_working, 1, 1, barcobcd_boot_image,
- "check flash value and boot the appropriate image",
- "\n"
- );
-
-U_BOOT_CMD (
- boot_default, 1, 1, barcobcd_boot_image,
- "check flash value and boot the appropriate image",
- "\n"
- );
-/*
- * We are not using serial communication, so just provide empty functions
- */
-int serial_init (void)
-{
- return 0;
-}
-void serial_setbrg (void)
-{
- return;
-}
-void serial_putc (const char c)
-{
- return;
-}
-void serial_puts (const char *c)
-{
- return;
-}
-void serial_addr (unsigned int i)
-{
- return;
-}
-int serial_getc (void)
-{
- return 0;
-}
-int serial_tstc (void)
-{
- return 0;
-}
-
-unsigned long post_word_load (void)
-{
- return 0l;
-}
-void post_word_store (unsigned long val)
-{
- return;
-}
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: C:/qaz/__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/board/barco/barco.c,v $
+ * $Revision: 1.1.1.1 $
+ * $Author: kenagy $
+ * $Date: 2009/03/25 22:21:29 $
+ *
+ * Last ChangeLog Entry
+ * $Log: barco.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:21:29 kenagy
+ * no message
+ *
+ * Revision 1.4 2005/03/02 16:40:20 mleeman
+ * remove empty labels (3.4 complains)
+ *
+ * Revision 1.3 2005/02/21 12:48:58 mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.2 2005/02/21 10:10:53 mleeman
+ * - split up switch statement to a function call (Linux kernel coding guidelines)
+ * ( feedback wd)
+ *
+ * Revision 1.1 2005/02/14 09:31:07 mleeman
+ * renaming of files
+ *
+ * Revision 1.1 2005/02/14 09:23:46 mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ * supporting and adding multiple boards
+ *
+ * Revision 1.3 2005/02/10 13:57:32 mleeman
+ * fixed flash corruption: I should exit from the moment I find the correct value
+ *
+ * Revision 1.2 2005/02/09 12:56:23 mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (C) Copyright 2004
+ * Marc Leeman <marc.leeman@barco.com>
+ *
+ * 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
+ */
+
+#include <common.h>
+#include <mpc824x.h>
+#include <pci.h>
+#include <malloc.h>
+#include <command.h>
+
+#include "config.h"
+#include "barco_svc.h"
+
+#define TRY_WORKING (3)
+#define BOOT_DEFAULT (2)
+#define BOOT_WORKING (1)
+
+int checkboard (void)
+{
+ /*TODO: Check processor type */
+
+ puts ( "Board: Streaming Video Card for Hydra systems "
+#ifdef CONFIG_MPC8240
+ "8240"
+#endif
+#ifdef CONFIG_MPC8245
+ "8245"
+#endif
+ " Unity ##Test not implemented yet##\n");
+ return 0;
+}
+
+phys_size_t initdram (int board_type)
+{
+ long size;
+ long new_bank0_end;
+ long mear1;
+ long emear1;
+
+ size = get_ram_size (CONFIG_SYS_SDRAM_BASE, CONFIG_SYS_MAX_RAM_SIZE);
+
+ new_bank0_end = size - 1;
+ mear1 = mpc824x_mpc107_getreg (MEAR1);
+ emear1 = mpc824x_mpc107_getreg (EMEAR1);
+ mear1 = (mear1 & 0xFFFFFF00) |
+ ((new_bank0_end & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT);
+ emear1 = (emear1 & 0xFFFFFF00) |
+ ((new_bank0_end & MICR_ADDR_MASK) >> MICR_EADDR_SHIFT);
+ mpc824x_mpc107_setreg (MEAR1, mear1);
+ mpc824x_mpc107_setreg (EMEAR1, emear1);
+
+ return (size);
+}
+
+/*
+ * Initialize PCI Devices, report devices found.
+ */
+#ifndef CONFIG_PCI_PNP
+static struct pci_config_table pci_barcohydra_config_table[] = {
+ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x0f, PCI_ANY_ID,
+ pci_cfgfunc_config_device, { PCI_ENET0_IOADDR,
+ PCI_ENET0_MEMADDR,
+ PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
+ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x10, PCI_ANY_ID,
+ pci_cfgfunc_config_device, { PCI_ENET1_IOADDR,
+ PCI_ENET1_MEMADDR,
+ PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
+ { }
+};
+#endif
+
+struct pci_controller hose = {
+#ifndef CONFIG_PCI_PNP
+ config_table: pci_barcohydra_config_table,
+#endif
+};
+
+void pci_init_board (void)
+{
+ pci_mpc824x_init (&hose);
+}
+
+int write_flash (char *addr, char value)
+{
+ char *adr = (char *)0xFF800000;
+ int cnt = 0;
+ char status,oldstatus;
+
+ *(adr+0x55) = 0xAA; udelay (1);
+ *(adr+0xAA) = 0x55; udelay (1);
+ *(adr+0x55) = 0xA0; udelay (1);
+ *addr = value;
+
+ status = *addr;
+ do {
+ oldstatus = status;
+ status = *addr;
+
+ if ((oldstatus & 0x40) == (status & 0x40)) {
+ return 4;
+ }
+ cnt++;
+ if (cnt > 10000) {
+ return 2;
+ }
+ } while ( (status & 0x20) == 0 );
+
+ oldstatus = *addr;
+ status = *addr;
+
+ if ((oldstatus & 0x40) == (status & 0x40)) {
+ return 0;
+ } else {
+ *(adr+0x55) = 0xF0;
+ return 1;
+ }
+}
+
+unsigned update_flash (unsigned char *buf)
+{
+ switch ((*buf) & 0x3) {
+ case TRY_WORKING:
+ printf ("found 3 and converted it to 2\n");
+ write_flash ((char *)buf, (*buf) & 0xFE);
+ *((unsigned char *)0xFF800000) = 0xF0;
+ udelay (100);
+ printf ("buf [%#010x] %#010x\n", (unsigned)buf, (*buf));
+ /* XXX - fall through??? */
+ case BOOT_WORKING :
+ return BOOT_WORKING;
+ }
+ return BOOT_DEFAULT;
+}
+
+unsigned scan_flash (void)
+{
+ char section[] = "kernel";
+ int cfgFileLen = (CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH >> 1);
+ int sectionPtr = 0;
+ int foundItem = 0; /* 0: None, 1: section found, 2: "=" found */
+ int bufPtr;
+ unsigned char *buf;
+
+ buf = (unsigned char*)(CONFIG_SYS_FLASH_RANGE_BASE + CONFIG_SYS_FLASH_RANGE_SIZE \
+ - CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH);
+ for (bufPtr = 0; bufPtr < cfgFileLen; ++bufPtr) {
+ if ((buf[bufPtr]==0xFF) && (*(int*)(buf+bufPtr)==0xFFFFFFFF)) {
+ return BOOT_DEFAULT;
+ }
+ /* This is the scanning loop, we try to find a particular
+ * quoted value
+ */
+ switch (foundItem) {
+ case 0:
+ if ((section[sectionPtr] == 0)) {
+ ++foundItem;
+ } else if (buf[bufPtr] == section[sectionPtr]) {
+ ++sectionPtr;
+ } else {
+ sectionPtr = 0;
+ }
+ break;
+ case 1:
+ ++foundItem;
+ break;
+ case 2:
+ ++foundItem;
+ break;
+ case 3:
+ default:
+ return update_flash (&buf[bufPtr - 1]);
+ }
+ }
+
+ printf ("Failed to read %s\n",section);
+ return BOOT_DEFAULT;
+}
+
+TSBootInfo* find_boot_info (void)
+{
+ unsigned bootimage = scan_flash ();
+ TSBootInfo* info = (TSBootInfo*)malloc (sizeof(TSBootInfo));
+
+ switch (bootimage) {
+ case TRY_WORKING:
+ info->address = CONFIG_SYS_WORKING_KERNEL_ADDRESS;
+ break;
+ case BOOT_WORKING :
+ info->address = CONFIG_SYS_WORKING_KERNEL_ADDRESS;
+ break;
+ case BOOT_DEFAULT:
+ default:
+ info->address= CONFIG_SYS_DEFAULT_KERNEL_ADDRESS;
+
+ }
+ info->size = *((unsigned int *)(info->address ));
+
+ return info;
+}
+
+void barcobcd_boot (void)
+{
+ TSBootInfo* start;
+ char *bootm_args[2];
+ char *buf;
+ int cnt;
+ extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
+
+ buf = (char *)(0x00800000);
+ /* make certain there are enough chars to print the command line here!
+ */
+ bootm_args[0] = (char *)malloc (16*sizeof(char));
+ bootm_args[1] = (char *)malloc (16*sizeof(char));
+
+ start = find_boot_info ();
+
+ printf ("Booting kernel at address %#10x with size %#10x\n",
+ start->address, start->size);
+
+ /* give length of the kernel image to bootm */
+ sprintf (bootm_args[0],"%x",start->size);
+ /* give address of the kernel image to bootm */
+ sprintf (bootm_args[1],"%x",(unsigned)buf);
+
+ printf ("flash address: %#10x\n",start->address+8);
+ printf ("buf address: %#10x\n",(unsigned)buf);
+
+ /* aha, we reserve 8 bytes here... */
+ for (cnt = 0; cnt < start->size ; cnt++) {
+ buf[cnt] = ((char *)start->address)[cnt+8];
+ }
+
+ /* initialise RAM memory */
+ *((unsigned int *)0xFEC00000) = 0x00141A98;
+ do_bootm (NULL,0,2,bootm_args);
+}
+
+int barcobcd_boot_image (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+#if 0
+ if (argc > 1) {
+ cmd_usage(cmdtp);
+ return 1;
+ }
+#endif
+ barcobcd_boot ();
+
+ return 0;
+}
+
+/* Currently, boot_working and boot_default are the same command. This is
+ * left in here to see what we'll do in the future */
+
+U_BOOT_CMD (
+ try_working, 1, 1, barcobcd_boot_image,
+ "check flash value and boot the appropriate image",
+ "\n"
+ );
+
+U_BOOT_CMD (
+ boot_working, 1, 1, barcobcd_boot_image,
+ "check flash value and boot the appropriate image",
+ "\n"
+ );
+
+U_BOOT_CMD (
+ boot_default, 1, 1, barcobcd_boot_image,
+ "check flash value and boot the appropriate image",
+ "\n"
+ );
+/*
+ * We are not using serial communication, so just provide empty functions
+ */
+int serial_init (void)
+{
+ return 0;
+}
+void serial_setbrg (void)
+{
+ return;
+}
+void serial_putc (const char c)
+{
+ return;
+}
+void serial_puts (const char *c)
+{
+ return;
+}
+void serial_addr (unsigned int i)
+{
+ return;
+}
+int serial_getc (void)
+{
+ return 0;
+}
+int serial_tstc (void)
+{
+ return 0;
+}
+
+unsigned long post_word_load (void)
+{
+ return 0l;
+}
+void post_word_store (unsigned long val)
+{
+ return;
+}
diff -Naur u-boot-2009.03_orig/board/barco/barco_svc.h u-boot-2009.03/board/barco/barco_svc.h
--- u-boot-2009.03_orig/board/barco/barco_svc.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/barco/barco_svc.h 2009-03-31 14:43:04.199401600 -0700
@@ -1,68 +1,71 @@
-/********************************************************************
- *
- * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
- *
- * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/barco_svc.h,v $
- * $Revision: 1.2 $
- * $Author: mleeman $
- * $Date: 2005/02/21 12:48:58 $
- *
- * Last ChangeLog Entry
- * $Log: barco_svc.h,v $
- * Revision 1.2 2005/02/21 12:48:58 mleeman
- * update of copyright years (feedback wd)
- *
- * Revision 1.1 2005/02/14 09:31:07 mleeman
- * renaming of files
- *
- * Revision 1.1 2005/02/14 09:23:46 mleeman
- * - moved 'barcohydra' directory to a more generic barco; since we will be
- * supporting and adding multiple boards
- *
- * Revision 1.1 2005/02/08 15:40:19 mleeman
- * modified and added platform files
- *
- * Revision 1.2 2005/01/25 08:05:04 mleeman
- * more cleanup of the code
- *
- * Revision 1.1 2004/07/20 08:49:55 mleeman
- * Working version of the default and nfs kernel booting.
- *
- *
- *******************************************************************/
-
-#ifndef _LOCAL_BARCOHYDRA_H_
-#define _LOCAL_BARCOHYDRA_H_
-
-#include <flash.h>
-#include <asm/io.h>
-
-/* Defines for the barcohydra board */
-#ifndef CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH
-#define CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH (0x10000)
-#endif
-
-#ifndef CONFIG_SYS_DEFAULT_KERNEL_ADDRESS
-#define CONFIG_SYS_DEFAULT_KERNEL_ADDRESS (CONFIG_SYS_FLASH_BASE + 0x30000)
-#endif
-
-#ifndef CONFIG_SYS_WORKING_KERNEL_ADDRESS
-#define CONFIG_SYS_WORKING_KERNEL_ADDRESS (0xFFE00000)
-#endif
-
-
-typedef struct SBootInfo {
- unsigned int address;
- unsigned int size;
- unsigned char state;
-}TSBootInfo;
-
-/* barcohydra.c */
-int checkboard(void);
-phys_size_t initdram(int board_type);
-void pci_init_board(void);
-void check_flash(void);
-int write_flash(char *addr, char value);
-TSBootInfo* find_boot_info(void);
-void final_boot(void);
-#endif
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: C:/qaz/__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/board/barco/barco_svc.h,v $
+ * $Revision: 1.1.1.1 $
+ * $Author: kenagy $
+ * $Date: 2009/03/25 22:21:29 $
+ *
+ * Last ChangeLog Entry
+ * $Log: barco_svc.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:21:29 kenagy
+ * no message
+ *
+ * Revision 1.2 2005/02/21 12:48:58 mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.1 2005/02/14 09:31:07 mleeman
+ * renaming of files
+ *
+ * Revision 1.1 2005/02/14 09:23:46 mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ * supporting and adding multiple boards
+ *
+ * Revision 1.1 2005/02/08 15:40:19 mleeman
+ * modified and added platform files
+ *
+ * Revision 1.2 2005/01/25 08:05:04 mleeman
+ * more cleanup of the code
+ *
+ * Revision 1.1 2004/07/20 08:49:55 mleeman
+ * Working version of the default and nfs kernel booting.
+ *
+ *
+ *******************************************************************/
+
+#ifndef _LOCAL_BARCOHYDRA_H_
+#define _LOCAL_BARCOHYDRA_H_
+
+#include <flash.h>
+#include <asm/io.h>
+
+/* Defines for the barcohydra board */
+#ifndef CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH
+#define CONFIG_SYS_FLASH_ERASE_SECTOR_LENGTH (0x10000)
+#endif
+
+#ifndef CONFIG_SYS_DEFAULT_KERNEL_ADDRESS
+#define CONFIG_SYS_DEFAULT_KERNEL_ADDRESS (CONFIG_SYS_FLASH_BASE + 0x30000)
+#endif
+
+#ifndef CONFIG_SYS_WORKING_KERNEL_ADDRESS
+#define CONFIG_SYS_WORKING_KERNEL_ADDRESS (0xFFE00000)
+#endif
+
+
+typedef struct SBootInfo {
+ unsigned int address;
+ unsigned int size;
+ unsigned char state;
+}TSBootInfo;
+
+/* barcohydra.c */
+int checkboard(void);
+phys_size_t initdram(int board_type);
+void pci_init_board(void);
+void check_flash(void);
+int write_flash(char *addr, char value);
+TSBootInfo* find_boot_info(void);
+void final_boot(void);
+#endif
diff -Naur u-boot-2009.03_orig/board/barco/flash.c u-boot-2009.03/board/barco/flash.c
--- u-boot-2009.03_orig/board/barco/flash.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/barco/flash.c 2009-03-31 14:43:04.168152000 -0700
@@ -1,611 +1,614 @@
-/********************************************************************
- *
- * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
- *
- * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/flash.c,v $
- * $Revision: 1.3 $
- * $Author: mleeman $
- * $Date: 2005/02/21 12:48:58 $
- *
- * Last ChangeLog Entry
- * $Log: flash.c,v $
- * Revision 1.3 2005/02/21 12:48:58 mleeman
- * update of copyright years (feedback wd)
- *
- * Revision 1.2 2005/02/21 11:04:04 mleeman
- * remove dead code and Coding style (feedback wd)
- *
- * Revision 1.1 2005/02/14 09:23:46 mleeman
- * - moved 'barcohydra' directory to a more generic barco; since we will be
- * supporting and adding multiple boards
- *
- * Revision 1.2 2005/02/09 12:56:23 mleeman
- * add generic header to track changes in sources
- *
- *
- *******************************************************************/
-
-/*
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- */
-
-#include <common.h>
-#include <mpc824x.h>
-#include <asm/processor.h>
-#include <flash.h>
-
-#define ROM_CS0_START 0xFF800000
-#define ROM_CS1_START 0xFF000000
-
-flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips */
-
-#if defined(CONFIG_ENV_IS_IN_FLASH)
-# ifndef CONFIG_ENV_ADDR
-# define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
-# endif
-# ifndef CONFIG_ENV_SIZE
-# define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
-# endif
-# ifndef CONFIG_ENV_SECT_SIZE
-# define CONFIG_ENV_SECT_SIZE CONFIG_ENV_SIZE
-# endif
-#endif
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-static int write_word (flash_info_t *info, ulong dest, ulong data);
-
-/*flash command address offsets*/
-
-#define ADDR0 (0xAAA)
-#define ADDR1 (0x555)
-#define ADDR3 (0x001)
-
-#define FLASH_WORD_SIZE unsigned char
-
-/*-----------------------------------------------------------------------
- */
-
-static unsigned long flash_id(unsigned char mfct, unsigned char chip) __attribute__ ((const));
-
-typedef struct{
- FLASH_WORD_SIZE extval;
- unsigned short intval;
-} map_entry;
-
-static unsigned long flash_id(unsigned char mfct, unsigned char chip)
-{
- static const map_entry mfct_map[] = {
- {(FLASH_WORD_SIZE) AMD_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_AMD >> 16)},
- {(FLASH_WORD_SIZE) FUJ_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_FUJ >> 16)},
- {(FLASH_WORD_SIZE) STM_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_STM >> 16)},
- {(FLASH_WORD_SIZE) MT_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_MT >> 16)},
- {(FLASH_WORD_SIZE) INTEL_MANUFACT,(unsigned short) ((unsigned long) FLASH_MAN_INTEL >> 16)},
- {(FLASH_WORD_SIZE) INTEL_ALT_MANU,(unsigned short) ((unsigned long) FLASH_MAN_INTEL >> 16)}
- };
-
- static const map_entry chip_map[] = {
- {AMD_ID_F040B, FLASH_AM040},
- {AMD_ID_F033C, FLASH_AM033},
- {AMD_ID_F065D, FLASH_AM065},
- {ATM_ID_LV040, FLASH_AT040},
- {(FLASH_WORD_SIZE) STM_ID_x800AB, FLASH_STM800AB}
- };
-
- const map_entry *p;
- unsigned long result = FLASH_UNKNOWN;
-
- /* find chip id */
- for(p = &chip_map[0]; p < &chip_map[sizeof chip_map / sizeof chip_map[0]]; p++){
- if(p->extval == chip){
- result = FLASH_VENDMASK | p->intval;
- break;
- }
- }
-
- /* find vendor id */
- for(p = &mfct_map[0]; p < &mfct_map[sizeof mfct_map / sizeof mfct_map[0]]; p++){
- if(p->extval == mfct){
- result &= ~FLASH_VENDMASK;
- result |= (unsigned long) p->intval << 16;
- break;
- }
- }
-
- return result;
-}
-
-
-unsigned long flash_init(void)
-{
- unsigned long i;
- unsigned char j;
- static const ulong flash_banks[] = CONFIG_SYS_FLASH_BANKS;
-
- /* Init: no FLASHes known */
- for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++){
- flash_info_t * const pflinfo = &flash_info[i];
- pflinfo->flash_id = FLASH_UNKNOWN;
- pflinfo->size = 0;
- pflinfo->sector_count = 0;
- }
-
- /* Enable writes to Hydra/Argus flash */
- {
- register unsigned int temp;
- CONFIG_READ_WORD(PICR1,temp);
- temp |= PICR1_FLASH_WR_EN;
- CONFIG_WRITE_WORD(PICR1,temp);
- }
-
- for(i = 0; i < sizeof flash_banks / sizeof flash_banks[0]; i++){
- flash_info_t * const pflinfo = &flash_info[i];
- const unsigned long base_address = flash_banks[i];
- volatile FLASH_WORD_SIZE * const flash = (FLASH_WORD_SIZE *) base_address;
-
- /* write autoselect sequence */
- flash[0x5555] = 0xaa;
- flash[0x2aaa] = 0x55;
- flash[0x5555] = 0x90;
- __asm__ __volatile__("sync");
-
- pflinfo->flash_id = flash_id(flash[0x0], flash[0x1]);
-
- switch(pflinfo->flash_id & FLASH_TYPEMASK){
- case FLASH_AM033:
- pflinfo->size = 0x00200000;
- pflinfo->sector_count = 64;
- for(j = 0; j < 64; j++){
- pflinfo->start[j] = base_address + 0x00010000 * j;
- pflinfo->protect[j] = flash[(j << 16) | 0x2];
- }
- break;
- case FLASH_AM065:
- pflinfo->size = 0x00800000;
- pflinfo->sector_count =128;
- for(j = 0; j < 128; j++){
- pflinfo->start[j] = base_address + 0x00010000 * j;
- pflinfo->protect[j] = flash[(j << 16) | 0x2];
- }
- break;
- case FLASH_AT040:
- pflinfo->size = 0x00080000;
- pflinfo->sector_count = 2;
- pflinfo->start[0] = base_address ;
- pflinfo->start[1] = base_address + 0x00004000;
- pflinfo->protect[0] = ((flash[0x02] & 0X01)==0) ? 0X02 : 0X01;
- pflinfo->protect[1] = 0X02;
- break;
- case FLASH_AM040:
- pflinfo->size = 0x00080000;
- pflinfo->sector_count = 8;
- for(j = 0; j < 8; j++){
- pflinfo->start[j] = base_address + 0x00010000 * j;
- pflinfo->protect[j] = flash[(j << 16) | 0x2];
- }
- break;
- case FLASH_STM800AB:
- pflinfo->size = 0x00100000;
- pflinfo->sector_count = 19;
- pflinfo->start[0] = base_address;
- pflinfo->start[1] = base_address + 0x4000;
- pflinfo->start[2] = base_address + 0x6000;
- pflinfo->start[3] = base_address + 0x8000;
- for(j = 1; j < 16; j++){
- pflinfo->start[j+3] = base_address + 0x00010000 * j;
- }
- break;
- }
- /* Protect monitor and environment sectors */
-#if CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE
- flash_protect(FLAG_PROTECT_SET,
- CONFIG_SYS_MONITOR_BASE,
- CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1,
- &flash_info[0]);
-#endif
-
-#if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_ENV_ADDR)
- flash_protect(FLAG_PROTECT_SET,
- CONFIG_ENV_ADDR,
- CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1,
- &flash_info[0]);
-#endif
-
- /* reset device to read mode */
- flash[0x0000] = 0xf0;
- __asm__ __volatile__("sync");
- }
-
- return flash_info[0].size + flash_info[1].size;
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info(flash_info_t *info)
-{
- static const char unk[] = "Unknown";
- const char *mfct = unk, *type = unk;
- unsigned int i;
-
- if(info->flash_id != FLASH_UNKNOWN){
- switch(info->flash_id & FLASH_VENDMASK){
- case FLASH_MAN_ATM:
- mfct = "Atmel";
- break;
- case FLASH_MAN_AMD:
- mfct = "AMD";
- break;
- case FLASH_MAN_FUJ:
- mfct = "FUJITSU";
- break;
- case FLASH_MAN_STM:
- mfct = "STM";
- break;
- case FLASH_MAN_SST:
- mfct = "SST";
- break;
- case FLASH_MAN_BM:
- mfct = "Bright Microelectonics";
- break;
- case FLASH_MAN_INTEL:
- mfct = "Intel";
- break;
- }
-
- switch(info->flash_id & FLASH_TYPEMASK){
- case FLASH_AT040:
- type = "AT49LV040 (512K * 8, uniform sector size)";
- break;
- case FLASH_AM033:
- type = "AM29F033C (4 Mbit * 8, uniform sector size)";
- break;
- case FLASH_AM040:
- type = "AM29F040B (512K * 8, uniform sector size)";
- break;
- case FLASH_AM065:
- type = "AM29F0465D ( 8 MBit * 8, uniform sector size) or part of AM29F652D( 16 MB)";
- break;
- case FLASH_AM400B:
- type = "AM29LV400B (4 Mbit, bottom boot sect)";
- break;
- case FLASH_AM400T:
- type = "AM29LV400T (4 Mbit, top boot sector)";
- break;
- case FLASH_AM800B:
- type = "AM29LV800B (8 Mbit, bottom boot sect)";
- break;
- case FLASH_AM800T:
- type = "AM29LV800T (8 Mbit, top boot sector)";
- break;
- case FLASH_AM160T:
- type = "AM29LV160T (16 Mbit, top boot sector)";
- break;
- case FLASH_AM320B:
- type = "AM29LV320B (32 Mbit, bottom boot sect)";
- break;
- case FLASH_AM320T:
- type = "AM29LV320T (32 Mbit, top boot sector)";
- break;
- case FLASH_STM800AB:
- type = "M29W800AB (8 Mbit, bottom boot sect)";
- break;
- case FLASH_SST800A:
- type = "SST39LF/VF800 (8 Mbit, uniform sector size)";
- break;
- case FLASH_SST160A:
- type = "SST39LF/VF160 (16 Mbit, uniform sector size)";
- break;
- }
- }
-
- printf(
- "\n Brand: %s Type: %s\n"
- " Size: %lu KB in %d Sectors\n",
- mfct,
- type,
- info->size >> 10,
- info->sector_count
- );
-
- printf (" Sector Start Addresses:");
-
- for (i = 0; i < info->sector_count; i++){
- unsigned long size;
- unsigned int erased;
- unsigned long * flash = (unsigned long *) info->start[i];
-
- /*
- * Check if whole sector is erased
- */
- size =
- (i != (info->sector_count - 1)) ?
- (info->start[i + 1] - info->start[i]) >> 2 :
- (info->start[0] + info->size - info->start[i]) >> 2;
-
- for(
- flash = (unsigned long *) info->start[i], erased = 1;
- (flash != (unsigned long *) info->start[i] + size) && erased;
- flash++
- ){
- erased = *flash == ~0x0UL;
- }
-
- printf(
- "%s %08lX %s %s",
- (i % 5) ? "" : "\n ",
- info->start[i],
- erased ? "E" : " ",
- info->protect[i] ? "RO" : " "
- );
- }
-
- puts("\n");
- return;
-}
-
-int flash_erase(flash_info_t *info, int s_first, int s_last)
-{
- volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *)(info->start[0]);
- int flag, prot, sect, l_sect;
- ulong start, now, last;
- unsigned char sh8b;
-
- if ((s_first < 0) || (s_first > s_last)) {
- if (info->flash_id == FLASH_UNKNOWN) {
- printf ("- missing\n");
- } else {
- printf ("- no sectors to erase\n");
- }
- return 1;
- }
-
- if ((info->flash_id == FLASH_UNKNOWN) ||
- (info->flash_id > (FLASH_MAN_STM | FLASH_AMD_COMP))) {
- printf ("Can't erase unknown flash type - aborted\n");
- return 1;
- }
-
- prot = 0;
- for (sect=s_first; sect<=s_last; ++sect) {
- if (info->protect[sect]) {
- prot++;
- }
- }
-
- if (prot) {
- printf ("- Warning: %d protected sectors will not be erased!\n",
- prot);
- } else {
- printf ("\n");
- }
-
- l_sect = -1;
-
- /* Check the ROM CS */
- if ((info->start[0] >= ROM_CS1_START) && (info->start[0] < ROM_CS0_START)){
- sh8b = 3;
- }
- else{
- sh8b = 0;
- }
-
- /* Disable interrupts which might cause a timeout here */
- flag = disable_interrupts();
-
- addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
- addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
- addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00800080;
- addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
- addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
-
- /* Start erase on unprotected sectors */
- for (sect = s_first; sect<=s_last; sect++) {
- if (info->protect[sect] == 0) { /* not protected */
- addr = (FLASH_WORD_SIZE *)(info->start[0] + (
- (info->start[sect] - info->start[0]) << sh8b));
- if (info->flash_id & FLASH_MAN_SST){
- addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
- addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
- addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00800080;
- addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
- addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
- addr[0] = (FLASH_WORD_SIZE)0x00500050; /* block erase */
- udelay(30000); /* wait 30 ms */
- }
- else
- addr[0] = (FLASH_WORD_SIZE)0x00300030; /* sector erase */
- l_sect = sect;
- }
- }
-
- /* re-enable interrupts if necessary */
- if (flag){
- enable_interrupts();
- }
-
- /* wait at least 80us - let's wait 1 ms */
- udelay (1000);
-
- /*
- * We wait for the last triggered sector
- */
- if (l_sect < 0){
- goto DONE;
- }
-
- start = get_timer (0);
- last = start;
- addr = (FLASH_WORD_SIZE *)(info->start[0] + (
- (info->start[l_sect] - info->start[0]) << sh8b));
- while ((addr[0] & (FLASH_WORD_SIZE)0x00800080) != (FLASH_WORD_SIZE)0x00800080) {
- if ((now = get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
- printf ("Timeout\n");
- return 1;
- }
- /* show that we're waiting */
- if ((now - last) > 1000) { /* every second */
- serial_putc ('.');
- last = now;
- }
- }
-
-DONE:
- /* reset to read mode */
- addr = (FLASH_WORD_SIZE *)info->start[0];
- addr[0] = (FLASH_WORD_SIZE)0x00F000F0; /* reset bank */
-
- printf (" done\n");
- return 0;
-}
-
-/*-----------------------------------------------------------------------
- * Copy memory to flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
-{
- ulong cp, wp, data;
- int i, l, rc;
-
- wp = (addr & ~3); /* get lower word aligned address */
-
- /*
- * handle unaligned start bytes
- */
- if ((l = addr - wp) != 0) {
- data = 0;
- for (i=0, cp=wp; i<l; ++i, ++cp) {
- data = (data << 8) | (*(uchar *)cp);
- }
- for (; i<4 && cnt>0; ++i) {
- data = (data << 8) | *src++;
- --cnt;
- ++cp;
- }
- for (; cnt==0 && i<4; ++i, ++cp) {
- data = (data << 8) | (*(uchar *)cp);
- }
-
- if ((rc = write_word(info, wp, data)) != 0) {
- return (rc);
- }
- wp += 4;
- }
-
- /*
- * handle word aligned part
- */
- while (cnt >= 4) {
- data = 0;
- for (i=0; i<4; ++i) {
- data = (data << 8) | *src++;
- }
- if ((rc = write_word(info, wp, data)) != 0) {
- return (rc);
- }
- wp += 4;
- cnt -= 4;
- }
-
- if (cnt == 0) {
- return (0);
- }
-
- /*
- * handle unaligned tail bytes
- */
- data = 0;
- for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {
- data = (data << 8) | *src++;
- --cnt;
- }
- for (; i<4; ++i, ++cp) {
- data = (data << 8) | (*(uchar *)cp);
- }
-
- return (write_word(info, wp, data));
-}
-
-/*-----------------------------------------------------------------------
- * Write a word to Flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-static int write_word (flash_info_t *info, ulong dest, ulong data)
-{
- volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)info->start[0];
- volatile FLASH_WORD_SIZE *dest2;
- volatile FLASH_WORD_SIZE *data2 = (FLASH_WORD_SIZE *)&data;
- ulong start;
- int flag;
- int i;
- unsigned char sh8b;
-
- /* Check the ROM CS */
- if ((info->start[0] >= ROM_CS1_START) && (info->start[0] < ROM_CS0_START)){
- sh8b = 3;
- }
- else{
- sh8b = 0;
- }
-
- dest2 = (FLASH_WORD_SIZE *)(((dest - info->start[0]) << sh8b) +
- info->start[0]);
-
- /* Check if Flash is (sufficiently) erased */
- if ((*dest2 & (FLASH_WORD_SIZE)data) != (FLASH_WORD_SIZE)data) {
- return (2);
- }
- /* Disable interrupts which might cause a timeout here */
- flag = disable_interrupts();
-
- for (i=0; i<4/sizeof(FLASH_WORD_SIZE); i++){
- addr2[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
- addr2[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
- addr2[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00A000A0;
-
- dest2[i << sh8b] = data2[i];
-
- /* re-enable interrupts if necessary */
- if (flag){
- enable_interrupts();
- }
-
- /* data polling for D7 */
- start = get_timer (0);
- while ((dest2[i << sh8b] & (FLASH_WORD_SIZE)0x00800080) !=
- (data2[i] & (FLASH_WORD_SIZE)0x00800080)) {
- if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
- return (1);
- }
- }
- }
-
- return (0);
-}
-
-/*----------------------------------------------------------------------- */
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: C:/qaz/__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/board/barco/flash.c,v $
+ * $Revision: 1.1.1.1 $
+ * $Author: kenagy $
+ * $Date: 2009/03/25 22:21:29 $
+ *
+ * Last ChangeLog Entry
+ * $Log: flash.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:21:29 kenagy
+ * no message
+ *
+ * Revision 1.3 2005/02/21 12:48:58 mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.2 2005/02/21 11:04:04 mleeman
+ * remove dead code and Coding style (feedback wd)
+ *
+ * Revision 1.1 2005/02/14 09:23:46 mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ * supporting and adding multiple boards
+ *
+ * Revision 1.2 2005/02/09 12:56:23 mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+#include <mpc824x.h>
+#include <asm/processor.h>
+#include <flash.h>
+
+#define ROM_CS0_START 0xFF800000
+#define ROM_CS1_START 0xFF000000
+
+flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips */
+
+#if defined(CONFIG_ENV_IS_IN_FLASH)
+# ifndef CONFIG_ENV_ADDR
+# define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
+# endif
+# ifndef CONFIG_ENV_SIZE
+# define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
+# endif
+# ifndef CONFIG_ENV_SECT_SIZE
+# define CONFIG_ENV_SECT_SIZE CONFIG_ENV_SIZE
+# endif
+#endif
+
+/*-----------------------------------------------------------------------
+ * Functions
+ */
+static int write_word (flash_info_t *info, ulong dest, ulong data);
+
+/*flash command address offsets*/
+
+#define ADDR0 (0xAAA)
+#define ADDR1 (0x555)
+#define ADDR3 (0x001)
+
+#define FLASH_WORD_SIZE unsigned char
+
+/*-----------------------------------------------------------------------
+ */
+
+static unsigned long flash_id(unsigned char mfct, unsigned char chip) __attribute__ ((const));
+
+typedef struct{
+ FLASH_WORD_SIZE extval;
+ unsigned short intval;
+} map_entry;
+
+static unsigned long flash_id(unsigned char mfct, unsigned char chip)
+{
+ static const map_entry mfct_map[] = {
+ {(FLASH_WORD_SIZE) AMD_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_AMD >> 16)},
+ {(FLASH_WORD_SIZE) FUJ_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_FUJ >> 16)},
+ {(FLASH_WORD_SIZE) STM_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_STM >> 16)},
+ {(FLASH_WORD_SIZE) MT_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_MT >> 16)},
+ {(FLASH_WORD_SIZE) INTEL_MANUFACT,(unsigned short) ((unsigned long) FLASH_MAN_INTEL >> 16)},
+ {(FLASH_WORD_SIZE) INTEL_ALT_MANU,(unsigned short) ((unsigned long) FLASH_MAN_INTEL >> 16)}
+ };
+
+ static const map_entry chip_map[] = {
+ {AMD_ID_F040B, FLASH_AM040},
+ {AMD_ID_F033C, FLASH_AM033},
+ {AMD_ID_F065D, FLASH_AM065},
+ {ATM_ID_LV040, FLASH_AT040},
+ {(FLASH_WORD_SIZE) STM_ID_x800AB, FLASH_STM800AB}
+ };
+
+ const map_entry *p;
+ unsigned long result = FLASH_UNKNOWN;
+
+ /* find chip id */
+ for(p = &chip_map[0]; p < &chip_map[sizeof chip_map / sizeof chip_map[0]]; p++){
+ if(p->extval == chip){
+ result = FLASH_VENDMASK | p->intval;
+ break;
+ }
+ }
+
+ /* find vendor id */
+ for(p = &mfct_map[0]; p < &mfct_map[sizeof mfct_map / sizeof mfct_map[0]]; p++){
+ if(p->extval == mfct){
+ result &= ~FLASH_VENDMASK;
+ result |= (unsigned long) p->intval << 16;
+ break;
+ }
+ }
+
+ return result;
+}
+
+
+unsigned long flash_init(void)
+{
+ unsigned long i;
+ unsigned char j;
+ static const ulong flash_banks[] = CONFIG_SYS_FLASH_BANKS;
+
+ /* Init: no FLASHes known */
+ for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++){
+ flash_info_t * const pflinfo = &flash_info[i];
+ pflinfo->flash_id = FLASH_UNKNOWN;
+ pflinfo->size = 0;
+ pflinfo->sector_count = 0;
+ }
+
+ /* Enable writes to Hydra/Argus flash */
+ {
+ register unsigned int temp;
+ CONFIG_READ_WORD(PICR1,temp);
+ temp |= PICR1_FLASH_WR_EN;
+ CONFIG_WRITE_WORD(PICR1,temp);
+ }
+
+ for(i = 0; i < sizeof flash_banks / sizeof flash_banks[0]; i++){
+ flash_info_t * const pflinfo = &flash_info[i];
+ const unsigned long base_address = flash_banks[i];
+ volatile FLASH_WORD_SIZE * const flash = (FLASH_WORD_SIZE *) base_address;
+
+ /* write autoselect sequence */
+ flash[0x5555] = 0xaa;
+ flash[0x2aaa] = 0x55;
+ flash[0x5555] = 0x90;
+ __asm__ __volatile__("sync");
+
+ pflinfo->flash_id = flash_id(flash[0x0], flash[0x1]);
+
+ switch(pflinfo->flash_id & FLASH_TYPEMASK){
+ case FLASH_AM033:
+ pflinfo->size = 0x00200000;
+ pflinfo->sector_count = 64;
+ for(j = 0; j < 64; j++){
+ pflinfo->start[j] = base_address + 0x00010000 * j;
+ pflinfo->protect[j] = flash[(j << 16) | 0x2];
+ }
+ break;
+ case FLASH_AM065:
+ pflinfo->size = 0x00800000;
+ pflinfo->sector_count =128;
+ for(j = 0; j < 128; j++){
+ pflinfo->start[j] = base_address + 0x00010000 * j;
+ pflinfo->protect[j] = flash[(j << 16) | 0x2];
+ }
+ break;
+ case FLASH_AT040:
+ pflinfo->size = 0x00080000;
+ pflinfo->sector_count = 2;
+ pflinfo->start[0] = base_address ;
+ pflinfo->start[1] = base_address + 0x00004000;
+ pflinfo->protect[0] = ((flash[0x02] & 0X01)==0) ? 0X02 : 0X01;
+ pflinfo->protect[1] = 0X02;
+ break;
+ case FLASH_AM040:
+ pflinfo->size = 0x00080000;
+ pflinfo->sector_count = 8;
+ for(j = 0; j < 8; j++){
+ pflinfo->start[j] = base_address + 0x00010000 * j;
+ pflinfo->protect[j] = flash[(j << 16) | 0x2];
+ }
+ break;
+ case FLASH_STM800AB:
+ pflinfo->size = 0x00100000;
+ pflinfo->sector_count = 19;
+ pflinfo->start[0] = base_address;
+ pflinfo->start[1] = base_address + 0x4000;
+ pflinfo->start[2] = base_address + 0x6000;
+ pflinfo->start[3] = base_address + 0x8000;
+ for(j = 1; j < 16; j++){
+ pflinfo->start[j+3] = base_address + 0x00010000 * j;
+ }
+ break;
+ }
+ /* Protect monitor and environment sectors */
+#if CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE
+ flash_protect(FLAG_PROTECT_SET,
+ CONFIG_SYS_MONITOR_BASE,
+ CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1,
+ &flash_info[0]);
+#endif
+
+#if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_ENV_ADDR)
+ flash_protect(FLAG_PROTECT_SET,
+ CONFIG_ENV_ADDR,
+ CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1,
+ &flash_info[0]);
+#endif
+
+ /* reset device to read mode */
+ flash[0x0000] = 0xf0;
+ __asm__ __volatile__("sync");
+ }
+
+ return flash_info[0].size + flash_info[1].size;
+}
+
+/*-----------------------------------------------------------------------
+ */
+void flash_print_info(flash_info_t *info)
+{
+ static const char unk[] = "Unknown";
+ const char *mfct = unk, *type = unk;
+ unsigned int i;
+
+ if(info->flash_id != FLASH_UNKNOWN){
+ switch(info->flash_id & FLASH_VENDMASK){
+ case FLASH_MAN_ATM:
+ mfct = "Atmel";
+ break;
+ case FLASH_MAN_AMD:
+ mfct = "AMD";
+ break;
+ case FLASH_MAN_FUJ:
+ mfct = "FUJITSU";
+ break;
+ case FLASH_MAN_STM:
+ mfct = "STM";
+ break;
+ case FLASH_MAN_SST:
+ mfct = "SST";
+ break;
+ case FLASH_MAN_BM:
+ mfct = "Bright Microelectonics";
+ break;
+ case FLASH_MAN_INTEL:
+ mfct = "Intel";
+ break;
+ }
+
+ switch(info->flash_id & FLASH_TYPEMASK){
+ case FLASH_AT040:
+ type = "AT49LV040 (512K * 8, uniform sector size)";
+ break;
+ case FLASH_AM033:
+ type = "AM29F033C (4 Mbit * 8, uniform sector size)";
+ break;
+ case FLASH_AM040:
+ type = "AM29F040B (512K * 8, uniform sector size)";
+ break;
+ case FLASH_AM065:
+ type = "AM29F0465D ( 8 MBit * 8, uniform sector size) or part of AM29F652D( 16 MB)";
+ break;
+ case FLASH_AM400B:
+ type = "AM29LV400B (4 Mbit, bottom boot sect)";
+ break;
+ case FLASH_AM400T:
+ type = "AM29LV400T (4 Mbit, top boot sector)";
+ break;
+ case FLASH_AM800B:
+ type = "AM29LV800B (8 Mbit, bottom boot sect)";
+ break;
+ case FLASH_AM800T:
+ type = "AM29LV800T (8 Mbit, top boot sector)";
+ break;
+ case FLASH_AM160T:
+ type = "AM29LV160T (16 Mbit, top boot sector)";
+ break;
+ case FLASH_AM320B:
+ type = "AM29LV320B (32 Mbit, bottom boot sect)";
+ break;
+ case FLASH_AM320T:
+ type = "AM29LV320T (32 Mbit, top boot sector)";
+ break;
+ case FLASH_STM800AB:
+ type = "M29W800AB (8 Mbit, bottom boot sect)";
+ break;
+ case FLASH_SST800A:
+ type = "SST39LF/VF800 (8 Mbit, uniform sector size)";
+ break;
+ case FLASH_SST160A:
+ type = "SST39LF/VF160 (16 Mbit, uniform sector size)";
+ break;
+ }
+ }
+
+ printf(
+ "\n Brand: %s Type: %s\n"
+ " Size: %lu KB in %d Sectors\n",
+ mfct,
+ type,
+ info->size >> 10,
+ info->sector_count
+ );
+
+ printf (" Sector Start Addresses:");
+
+ for (i = 0; i < info->sector_count; i++){
+ unsigned long size;
+ unsigned int erased;
+ unsigned long * flash = (unsigned long *) info->start[i];
+
+ /*
+ * Check if whole sector is erased
+ */
+ size =
+ (i != (info->sector_count - 1)) ?
+ (info->start[i + 1] - info->start[i]) >> 2 :
+ (info->start[0] + info->size - info->start[i]) >> 2;
+
+ for(
+ flash = (unsigned long *) info->start[i], erased = 1;
+ (flash != (unsigned long *) info->start[i] + size) && erased;
+ flash++
+ ){
+ erased = *flash == ~0x0UL;
+ }
+
+ printf(
+ "%s %08lX %s %s",
+ (i % 5) ? "" : "\n ",
+ info->start[i],
+ erased ? "E" : " ",
+ info->protect[i] ? "RO" : " "
+ );
+ }
+
+ puts("\n");
+ return;
+}
+
+int flash_erase(flash_info_t *info, int s_first, int s_last)
+{
+ volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *)(info->start[0]);
+ int flag, prot, sect, l_sect;
+ ulong start, now, last;
+ unsigned char sh8b;
+
+ if ((s_first < 0) || (s_first > s_last)) {
+ if (info->flash_id == FLASH_UNKNOWN) {
+ printf ("- missing\n");
+ } else {
+ printf ("- no sectors to erase\n");
+ }
+ return 1;
+ }
+
+ if ((info->flash_id == FLASH_UNKNOWN) ||
+ (info->flash_id > (FLASH_MAN_STM | FLASH_AMD_COMP))) {
+ printf ("Can't erase unknown flash type - aborted\n");
+ return 1;
+ }
+
+ prot = 0;
+ for (sect=s_first; sect<=s_last; ++sect) {
+ if (info->protect[sect]) {
+ prot++;
+ }
+ }
+
+ if (prot) {
+ printf ("- Warning: %d protected sectors will not be erased!\n",
+ prot);
+ } else {
+ printf ("\n");
+ }
+
+ l_sect = -1;
+
+ /* Check the ROM CS */
+ if ((info->start[0] >= ROM_CS1_START) && (info->start[0] < ROM_CS0_START)){
+ sh8b = 3;
+ }
+ else{
+ sh8b = 0;
+ }
+
+ /* Disable interrupts which might cause a timeout here */
+ flag = disable_interrupts();
+
+ addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+ addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+ addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00800080;
+ addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+ addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+
+ /* Start erase on unprotected sectors */
+ for (sect = s_first; sect<=s_last; sect++) {
+ if (info->protect[sect] == 0) { /* not protected */
+ addr = (FLASH_WORD_SIZE *)(info->start[0] + (
+ (info->start[sect] - info->start[0]) << sh8b));
+ if (info->flash_id & FLASH_MAN_SST){
+ addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+ addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+ addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00800080;
+ addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+ addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+ addr[0] = (FLASH_WORD_SIZE)0x00500050; /* block erase */
+ udelay(30000); /* wait 30 ms */
+ }
+ else
+ addr[0] = (FLASH_WORD_SIZE)0x00300030; /* sector erase */
+ l_sect = sect;
+ }
+ }
+
+ /* re-enable interrupts if necessary */
+ if (flag){
+ enable_interrupts();
+ }
+
+ /* wait at least 80us - let's wait 1 ms */
+ udelay (1000);
+
+ /*
+ * We wait for the last triggered sector
+ */
+ if (l_sect < 0){
+ goto DONE;
+ }
+
+ start = get_timer (0);
+ last = start;
+ addr = (FLASH_WORD_SIZE *)(info->start[0] + (
+ (info->start[l_sect] - info->start[0]) << sh8b));
+ while ((addr[0] & (FLASH_WORD_SIZE)0x00800080) != (FLASH_WORD_SIZE)0x00800080) {
+ if ((now = get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
+ printf ("Timeout\n");
+ return 1;
+ }
+ /* show that we're waiting */
+ if ((now - last) > 1000) { /* every second */
+ serial_putc ('.');
+ last = now;
+ }
+ }
+
+DONE:
+ /* reset to read mode */
+ addr = (FLASH_WORD_SIZE *)info->start[0];
+ addr[0] = (FLASH_WORD_SIZE)0x00F000F0; /* reset bank */
+
+ printf (" done\n");
+ return 0;
+}
+
+/*-----------------------------------------------------------------------
+ * Copy memory to flash, returns:
+ * 0 - OK
+ * 1 - write timeout
+ * 2 - Flash not erased
+ */
+
+int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
+{
+ ulong cp, wp, data;
+ int i, l, rc;
+
+ wp = (addr & ~3); /* get lower word aligned address */
+
+ /*
+ * handle unaligned start bytes
+ */
+ if ((l = addr - wp) != 0) {
+ data = 0;
+ for (i=0, cp=wp; i<l; ++i, ++cp) {
+ data = (data << 8) | (*(uchar *)cp);
+ }
+ for (; i<4 && cnt>0; ++i) {
+ data = (data << 8) | *src++;
+ --cnt;
+ ++cp;
+ }
+ for (; cnt==0 && i<4; ++i, ++cp) {
+ data = (data << 8) | (*(uchar *)cp);
+ }
+
+ if ((rc = write_word(info, wp, data)) != 0) {
+ return (rc);
+ }
+ wp += 4;
+ }
+
+ /*
+ * handle word aligned part
+ */
+ while (cnt >= 4) {
+ data = 0;
+ for (i=0; i<4; ++i) {
+ data = (data << 8) | *src++;
+ }
+ if ((rc = write_word(info, wp, data)) != 0) {
+ return (rc);
+ }
+ wp += 4;
+ cnt -= 4;
+ }
+
+ if (cnt == 0) {
+ return (0);
+ }
+
+ /*
+ * handle unaligned tail bytes
+ */
+ data = 0;
+ for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {
+ data = (data << 8) | *src++;
+ --cnt;
+ }
+ for (; i<4; ++i, ++cp) {
+ data = (data << 8) | (*(uchar *)cp);
+ }
+
+ return (write_word(info, wp, data));
+}
+
+/*-----------------------------------------------------------------------
+ * Write a word to Flash, returns:
+ * 0 - OK
+ * 1 - write timeout
+ * 2 - Flash not erased
+ */
+static int write_word (flash_info_t *info, ulong dest, ulong data)
+{
+ volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)info->start[0];
+ volatile FLASH_WORD_SIZE *dest2;
+ volatile FLASH_WORD_SIZE *data2 = (FLASH_WORD_SIZE *)&data;
+ ulong start;
+ int flag;
+ int i;
+ unsigned char sh8b;
+
+ /* Check the ROM CS */
+ if ((info->start[0] >= ROM_CS1_START) && (info->start[0] < ROM_CS0_START)){
+ sh8b = 3;
+ }
+ else{
+ sh8b = 0;
+ }
+
+ dest2 = (FLASH_WORD_SIZE *)(((dest - info->start[0]) << sh8b) +
+ info->start[0]);
+
+ /* Check if Flash is (sufficiently) erased */
+ if ((*dest2 & (FLASH_WORD_SIZE)data) != (FLASH_WORD_SIZE)data) {
+ return (2);
+ }
+ /* Disable interrupts which might cause a timeout here */
+ flag = disable_interrupts();
+
+ for (i=0; i<4/sizeof(FLASH_WORD_SIZE); i++){
+ addr2[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+ addr2[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+ addr2[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00A000A0;
+
+ dest2[i << sh8b] = data2[i];
+
+ /* re-enable interrupts if necessary */
+ if (flag){
+ enable_interrupts();
+ }
+
+ /* data polling for D7 */
+ start = get_timer (0);
+ while ((dest2[i << sh8b] & (FLASH_WORD_SIZE)0x00800080) !=
+ (data2[i] & (FLASH_WORD_SIZE)0x00800080)) {
+ if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
+ return (1);
+ }
+ }
+ }
+
+ return (0);
+}
+
+/*----------------------------------------------------------------------- */
diff -Naur u-boot-2009.03_orig/board/barco/speed.h u-boot-2009.03/board/barco/speed.h
--- u-boot-2009.03_orig/board/barco/speed.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/barco/speed.h 2009-03-31 14:43:04.215026400 -0700
@@ -1,78 +1,81 @@
-/********************************************************************
- *
- * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
- *
- * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/speed.h,v $
- * $Revision: 1.2 $
- * $Author: mleeman $
- * $Date: 2005/02/21 12:48:58 $
- *
- * Last ChangeLog Entry
- * $Log: speed.h,v $
- * Revision 1.2 2005/02/21 12:48:58 mleeman
- * update of copyright years (feedback wd)
- *
- * Revision 1.1 2005/02/14 09:23:46 mleeman
- * - moved 'barcohydra' directory to a more generic barco; since we will be
- * supporting and adding multiple boards
- *
- * Revision 1.2 2005/02/09 12:56:23 mleeman
- * add generic header to track changes in sources
- *
- *
- *******************************************************************/
-
-/*
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- */
-
-/*-----------------------------------------------------------------------
- * Timer value for timer 2, ICLK = 10
- *
- * SPEED_FCOUNT2 = GCLK / (16 * (TIMER_TMR_PS + 1))
- * SPEED_TMR3_PS = (GCLK / (16 * SPEED_FCOUNT3)) - 1
- *
- * SPEED_FCOUNT2 timer 2 counting frequency
- * GCLK CPU clock
- * SPEED_TMR2_PS prescaler
- */
-#define SPEED_TMR2_PS (250 - 1) /* divide by 250 */
-
-/*-----------------------------------------------------------------------
- * Timer value for PIT
- *
- * PIT_TIME = SPEED_PITC / PITRTCLK
- * PITRTCLK = 8192
- */
-#define SPEED_PITC (82 << 16) /* start counting from 82 */
-
-/*
- * The new value for PTA is calculated from
- *
- * PTA = (gclk * Trefresh) / (2 ^ (2 * DFBRG) * PTP * NCS)
- *
- * gclk CPU clock (not bus clock !)
- * Trefresh Refresh cycle * 4 (four word bursts used)
- * DFBRG For normal mode (no clock reduction) always 0
- * PTP Prescaler (already adjusted for no. of banks and 4K / 8K refresh)
- * NCS Number of SDRAM banks (chip selects) on this UPM.
- */
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: C:/qaz/__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/board/barco/speed.h,v $
+ * $Revision: 1.1.1.1 $
+ * $Author: kenagy $
+ * $Date: 2009/03/25 22:21:29 $
+ *
+ * Last ChangeLog Entry
+ * $Log: speed.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:21:29 kenagy
+ * no message
+ *
+ * Revision 1.2 2005/02/21 12:48:58 mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.1 2005/02/14 09:23:46 mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ * supporting and adding multiple boards
+ *
+ * Revision 1.2 2005/02/09 12:56:23 mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+/*-----------------------------------------------------------------------
+ * Timer value for timer 2, ICLK = 10
+ *
+ * SPEED_FCOUNT2 = GCLK / (16 * (TIMER_TMR_PS + 1))
+ * SPEED_TMR3_PS = (GCLK / (16 * SPEED_FCOUNT3)) - 1
+ *
+ * SPEED_FCOUNT2 timer 2 counting frequency
+ * GCLK CPU clock
+ * SPEED_TMR2_PS prescaler
+ */
+#define SPEED_TMR2_PS (250 - 1) /* divide by 250 */
+
+/*-----------------------------------------------------------------------
+ * Timer value for PIT
+ *
+ * PIT_TIME = SPEED_PITC / PITRTCLK
+ * PITRTCLK = 8192
+ */
+#define SPEED_PITC (82 << 16) /* start counting from 82 */
+
+/*
+ * The new value for PTA is calculated from
+ *
+ * PTA = (gclk * Trefresh) / (2 ^ (2 * DFBRG) * PTP * NCS)
+ *
+ * gclk CPU clock (not bus clock !)
+ * Trefresh Refresh cycle * 4 (four word bursts used)
+ * DFBRG For normal mode (no clock reduction) always 0
+ * PTP Prescaler (already adjusted for no. of banks and 4K / 8K refresh)
+ * NCS Number of SDRAM banks (chip selects) on this UPM.
+ */
diff -Naur u-boot-2009.03_orig/board/bc3450/CVS/Entries u-boot-2009.03/board/bc3450/CVS/Entries
--- u-boot-2009.03_orig/board/bc3450/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bc3450/CVS/Entries 2009-03-25 15:57:14.606436700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bc3450.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bc3450.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bc3450/CVS/Entries.Extra u-boot-2009.03/board/bc3450/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/bc3450/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bc3450/CVS/Entries.Extra 2009-03-25 15:57:14.622061600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019689/
+/bc3450.c///1238019689/
+/cmd_bc3450.c///1238019689/
+/config.mk///1238019689/
+/mt48lc16m16a2-75.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/bc3450/CVS/Entries.Extra.Old u-boot-2009.03/board/bc3450/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/bc3450/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bc3450/CVS/Entries.Extra.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019689/
+/bc3450.c///1238019689/
+/cmd_bc3450.c///1238019689/
+/config.mk///1238019689/
+/mt48lc16m16a2-75.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/bc3450/CVS/Entries.Old u-boot-2009.03/board/bc3450/CVS/Entries.Old
--- u-boot-2009.03_orig/board/bc3450/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bc3450/CVS/Entries.Old 2009-03-25 15:24:08.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bc3450.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/cmd_bc3450.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bc3450/CVS/Repository u-boot-2009.03/board/bc3450/CVS/Repository
--- u-boot-2009.03_orig/board/bc3450/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bc3450/CVS/Repository 2009-03-25 15:24:08.916305400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/bc3450
diff -Naur u-boot-2009.03_orig/board/bc3450/CVS/Root u-boot-2009.03/board/bc3450/CVS/Root
--- u-boot-2009.03_orig/board/bc3450/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bc3450/CVS/Root 2009-03-25 15:24:08.916305400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries u-boot-2009.03/board/bf533-ezkit/CVS/Entries
--- u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-ezkit/CVS/Entries 2009-03-25 15:57:14.700186100 -0700
@@ -0,0 +1,9 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf533-ezkit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash-defines.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/psd4256.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries.Extra u-boot-2009.03/board/bf533-ezkit/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-ezkit/CVS/Entries.Extra 2009-03-25 15:57:14.715811000 -0700
@@ -0,0 +1,8 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf533-ezkit.c///1238019689/
+/config.mk///1238019689/
+/flash-defines.h///1238019689/
+/flash.c///1238019689/
+/psd4256.h///1238019689/
+/u-boot.lds.S///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries.Extra.Old u-boot-2009.03/board/bf533-ezkit/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-ezkit/CVS/Entries.Extra.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,8 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf533-ezkit.c///1238019689/
+/config.mk///1238019689/
+/flash-defines.h///1238019689/
+/flash.c///1238019689/
+/psd4256.h///1238019689/
+/u-boot.lds.S///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries.Old u-boot-2009.03/board/bf533-ezkit/CVS/Entries.Old
--- u-boot-2009.03_orig/board/bf533-ezkit/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-ezkit/CVS/Entries.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,9 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bf533-ezkit.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/flash-defines.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/psd4256.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds.S/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf533-ezkit/CVS/Repository u-boot-2009.03/board/bf533-ezkit/CVS/Repository
--- u-boot-2009.03_orig/board/bf533-ezkit/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-ezkit/CVS/Repository 2009-03-25 15:24:09.041303800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/bf533-ezkit
diff -Naur u-boot-2009.03_orig/board/bf533-ezkit/CVS/Root u-boot-2009.03/board/bf533-ezkit/CVS/Root
--- u-boot-2009.03_orig/board/bf533-ezkit/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-ezkit/CVS/Root 2009-03-25 15:24:09.041303800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries u-boot-2009.03/board/bf533-stamp/CVS/Entries
--- u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-stamp/CVS/Entries 2009-03-25 15:57:14.793935500 -0700
@@ -0,0 +1,10 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf533-stamp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf533-stamp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries.Extra u-boot-2009.03/board/bf533-stamp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-stamp/CVS/Entries.Extra 2009-03-25 15:57:14.793935500 -0700
@@ -0,0 +1,9 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf533-stamp.c///1238019689/
+/bf533-stamp.h///1238019689/
+/config.mk///1238019689/
+/spi_flash.c///1238019689/
+/u-boot.lds.S///1238019689/
+/video.c///1238019689/
+/video.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries.Extra.Old u-boot-2009.03/board/bf533-stamp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-stamp/CVS/Entries.Extra.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,9 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf533-stamp.c///1238019689/
+/bf533-stamp.h///1238019689/
+/config.mk///1238019689/
+/spi_flash.c///1238019689/
+/u-boot.lds.S///1238019689/
+/video.c///1238019689/
+/video.h///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries.Old u-boot-2009.03/board/bf533-stamp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/bf533-stamp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-stamp/CVS/Entries.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,10 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bf533-stamp.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bf533-stamp.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/spi_flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds.S/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/video.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/video.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf533-stamp/CVS/Repository u-boot-2009.03/board/bf533-stamp/CVS/Repository
--- u-boot-2009.03_orig/board/bf533-stamp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-stamp/CVS/Repository 2009-03-25 15:24:09.181927000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/bf533-stamp
diff -Naur u-boot-2009.03_orig/board/bf533-stamp/CVS/Root u-boot-2009.03/board/bf533-stamp/CVS/Root
--- u-boot-2009.03_orig/board/bf533-stamp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf533-stamp/CVS/Root 2009-03-25 15:24:09.166302200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries u-boot-2009.03/board/bf537-stamp/CVS/Entries
--- u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf537-stamp/CVS/Entries 2009-03-25 15:57:14.887684900 -0700
@@ -0,0 +1,10 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf537-stamp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bf537led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post-memory.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries.Extra u-boot-2009.03/board/bf537-stamp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf537-stamp/CVS/Entries.Extra 2009-03-25 15:57:14.887684900 -0700
@@ -0,0 +1,9 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf537-stamp.c///1238019689/
+/cmd_bf537led.c///1238019689/
+/config.mk///1238019689/
+/nand.c///1238019689/
+/post-memory.c///1238019689/
+/spi_flash.c///1238019689/
+/u-boot.lds.S///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries.Extra.Old u-boot-2009.03/board/bf537-stamp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf537-stamp/CVS/Entries.Extra.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,9 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf537-stamp.c///1238019689/
+/cmd_bf537led.c///1238019689/
+/config.mk///1238019689/
+/nand.c///1238019689/
+/post-memory.c///1238019689/
+/spi_flash.c///1238019689/
+/u-boot.lds.S///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries.Old u-boot-2009.03/board/bf537-stamp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/bf537-stamp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf537-stamp/CVS/Entries.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,10 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bf537-stamp.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/cmd_bf537led.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/post-memory.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/spi_flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds.S/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf537-stamp/CVS/Repository u-boot-2009.03/board/bf537-stamp/CVS/Repository
--- u-boot-2009.03_orig/board/bf537-stamp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf537-stamp/CVS/Repository 2009-03-25 15:24:09.338175000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/bf537-stamp
diff -Naur u-boot-2009.03_orig/board/bf537-stamp/CVS/Root u-boot-2009.03/board/bf537-stamp/CVS/Root
--- u-boot-2009.03_orig/board/bf537-stamp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf537-stamp/CVS/Root 2009-03-25 15:24:09.338175000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries u-boot-2009.03/board/bf561-ezkit/CVS/Entries
--- u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf561-ezkit/CVS/Entries 2009-03-25 15:57:14.950184500 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf561-ezkit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries.Extra u-boot-2009.03/board/bf561-ezkit/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf561-ezkit/CVS/Entries.Extra 2009-03-25 15:57:14.950184500 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf561-ezkit.c///1238019689/
+/config.mk///1238019689/
+/u-boot.lds.S///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries.Extra.Old u-boot-2009.03/board/bf561-ezkit/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf561-ezkit/CVS/Entries.Extra.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019689/
+/Makefile///1238019689/
+/bf561-ezkit.c///1238019689/
+/config.mk///1238019689/
+/u-boot.lds.S///1238019689/
diff -Naur u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries.Old u-boot-2009.03/board/bf561-ezkit/CVS/Entries.Old
--- u-boot-2009.03_orig/board/bf561-ezkit/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf561-ezkit/CVS/Entries.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bf561-ezkit.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds.S/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bf561-ezkit/CVS/Repository u-boot-2009.03/board/bf561-ezkit/CVS/Repository
--- u-boot-2009.03_orig/board/bf561-ezkit/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf561-ezkit/CVS/Repository 2009-03-25 15:24:09.619421400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/bf561-ezkit
diff -Naur u-boot-2009.03_orig/board/bf561-ezkit/CVS/Root u-boot-2009.03/board/bf561-ezkit/CVS/Root
--- u-boot-2009.03_orig/board/bf561-ezkit/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bf561-ezkit/CVS/Root 2009-03-25 15:24:09.619421400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/bmw/CVS/Entries u-boot-2009.03/board/bmw/CVS/Entries
--- u-boot-2009.03_orig/board/bmw/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bmw/CVS/Entries 2009-03-25 15:57:15.028309000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bmw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bmw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/early_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m48t59y.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m48t59y.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bmw/CVS/Entries.Extra u-boot-2009.03/board/bmw/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/bmw/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bmw/CVS/Entries.Extra 2009-03-25 15:57:15.028309000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019689/
+/README///1238019689/
+/bmw.c///1238019689/
+/bmw.h///1238019689/
+/config.mk///1238019689/
+/early_init.S///1238019689/
+/flash.c///1238019689/
+/m48t59y.c///1238019689/
+/m48t59y.h///1238019689/
+/ns16550.c///1238019689/
+/ns16550.h///1238019689/
+/serial.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/bmw/CVS/Entries.Extra.Old u-boot-2009.03/board/bmw/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/bmw/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bmw/CVS/Entries.Extra.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019689/
+/README///1238019689/
+/bmw.c///1238019689/
+/bmw.h///1238019689/
+/config.mk///1238019689/
+/early_init.S///1238019689/
+/flash.c///1238019689/
+/m48t59y.c///1238019689/
+/m48t59y.h///1238019689/
+/ns16550.c///1238019689/
+/ns16550.h///1238019689/
+/serial.c///1238019689/
diff -Naur u-boot-2009.03_orig/board/bmw/CVS/Entries.Old u-boot-2009.03/board/bmw/CVS/Entries.Old
--- u-boot-2009.03_orig/board/bmw/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bmw/CVS/Entries.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bmw.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/bmw.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/early_init.S/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/m48t59y.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/m48t59y.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/ns16550.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/ns16550.h/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/bmw/CVS/Repository u-boot-2009.03/board/bmw/CVS/Repository
--- u-boot-2009.03_orig/board/bmw/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bmw/CVS/Repository 2009-03-25 15:24:09.744419800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/bmw
diff -Naur u-boot-2009.03_orig/board/bmw/CVS/Root u-boot-2009.03/board/bmw/CVS/Root
--- u-boot-2009.03_orig/board/bmw/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/bmw/CVS/Root 2009-03-25 15:24:09.744419800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/c2mon/CVS/Entries u-boot-2009.03/board/c2mon/CVS/Entries
--- u-boot-2009.03_orig/board/c2mon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/c2mon/CVS/Entries 2009-03-25 15:57:15.122058400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/c2mon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/c2mon/CVS/Entries.Extra u-boot-2009.03/board/c2mon/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/c2mon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/c2mon/CVS/Entries.Extra 2009-03-25 15:57:15.137683300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019689/
+/c2mon.c///1238019689/
+/config.mk///1238019689/
+/flash.c///1238019689/
+/pcmcia.c///1238019689/
+/u-boot.lds///1238019689/
+/u-boot.lds.debug///1238019689/
diff -Naur u-boot-2009.03_orig/board/c2mon/CVS/Entries.Extra.Old u-boot-2009.03/board/c2mon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/c2mon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/c2mon/CVS/Entries.Extra.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019689/
+/c2mon.c///1238019689/
+/config.mk///1238019689/
+/flash.c///1238019689/
+/pcmcia.c///1238019689/
+/u-boot.lds///1238019689/
+/u-boot.lds.debug///1238019689/
diff -Naur u-boot-2009.03_orig/board/c2mon/CVS/Entries.Old u-boot-2009.03/board/c2mon/CVS/Entries.Old
--- u-boot-2009.03_orig/board/c2mon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/c2mon/CVS/Entries.Old 2009-03-25 15:24:09.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/c2mon.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:29 2009//
+D
diff -Naur u-boot-2009.03_orig/board/c2mon/CVS/Repository u-boot-2009.03/board/c2mon/CVS/Repository
--- u-boot-2009.03_orig/board/c2mon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/c2mon/CVS/Repository 2009-03-25 15:24:09.916292600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/c2mon
diff -Naur u-boot-2009.03_orig/board/c2mon/CVS/Root u-boot-2009.03/board/c2mon/CVS/Root
--- u-boot-2009.03_orig/board/c2mon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/c2mon/CVS/Root 2009-03-25 15:24:09.916292600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/canmb/CVS/Entries u-boot-2009.03/board/canmb/CVS/Entries
--- u-boot-2009.03_orig/board/canmb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/canmb/CVS/Entries 2009-03-25 15:57:15.184558000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canmb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m32s2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/canmb/CVS/Entries.Extra u-boot-2009.03/board/canmb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/canmb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/canmb/CVS/Entries.Extra 2009-03-25 15:57:15.184558000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019690/
+/canmb.c///1238019689/
+/config.mk///1238019689/
+/mt48lc16m32s2-75.h///1238019690/
diff -Naur u-boot-2009.03_orig/board/canmb/CVS/Entries.Extra.Old u-boot-2009.03/board/canmb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/canmb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/canmb/CVS/Entries.Extra.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019690/
+/canmb.c///1238019689/
+/config.mk///1238019689/
+/mt48lc16m32s2-75.h///1238019690/
diff -Naur u-boot-2009.03_orig/board/canmb/CVS/Entries.Old u-boot-2009.03/board/canmb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/canmb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/canmb/CVS/Entries.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/canmb.c/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:29 2009//
+/mt48lc16m32s2-75.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/canmb/CVS/Repository u-boot-2009.03/board/canmb/CVS/Repository
--- u-boot-2009.03_orig/board/canmb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/canmb/CVS/Repository 2009-03-25 15:24:10.041291000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/canmb
diff -Naur u-boot-2009.03_orig/board/canmb/CVS/Root u-boot-2009.03/board/canmb/CVS/Root
--- u-boot-2009.03_orig/board/canmb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/canmb/CVS/Root 2009-03-25 15:24:10.041291000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cerf250/CVS/Entries u-boot-2009.03/board/cerf250/CVS/Entries
--- u-boot-2009.03_orig/board/cerf250/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cerf250/CVS/Entries 2009-03-25 15:57:15.309557200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cerf250.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cerf250/CVS/Entries.Extra u-boot-2009.03/board/cerf250/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cerf250/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cerf250/CVS/Entries.Extra 2009-03-25 15:57:15.309557200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/cerf250.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/lowlevel_init.S///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cerf250/CVS/Entries.Extra.Old u-boot-2009.03/board/cerf250/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cerf250/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cerf250/CVS/Entries.Extra.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/cerf250.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/lowlevel_init.S///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cerf250/CVS/Entries.Old u-boot-2009.03/board/cerf250/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cerf250/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cerf250/CVS/Entries.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cerf250.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cerf250/CVS/Repository u-boot-2009.03/board/cerf250/CVS/Repository
--- u-boot-2009.03_orig/board/cerf250/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cerf250/CVS/Repository 2009-03-25 15:24:10.135039800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cerf250
diff -Naur u-boot-2009.03_orig/board/cerf250/CVS/Root u-boot-2009.03/board/cerf250/CVS/Root
--- u-boot-2009.03_orig/board/cerf250/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cerf250/CVS/Root 2009-03-25 15:24:10.135039800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cm4008/CVS/Entries u-boot-2009.03/board/cm4008/CVS/Entries
--- u-boot-2009.03_orig/board/cm4008/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm4008/CVS/Entries 2009-03-25 15:57:15.372056800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm4008.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cm4008/CVS/Entries.Extra u-boot-2009.03/board/cm4008/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cm4008/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm4008/CVS/Entries.Extra 2009-03-25 15:57:15.387681700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/cm4008.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cm4008/CVS/Entries.Extra.Old u-boot-2009.03/board/cm4008/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cm4008/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm4008/CVS/Entries.Extra.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/cm4008.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cm4008/CVS/Entries.Old u-boot-2009.03/board/cm4008/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cm4008/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm4008/CVS/Entries.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cm4008.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cm4008/CVS/Repository u-boot-2009.03/board/cm4008/CVS/Repository
--- u-boot-2009.03_orig/board/cm4008/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm4008/CVS/Repository 2009-03-25 15:24:10.244413400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cm4008
diff -Naur u-boot-2009.03_orig/board/cm4008/CVS/Root u-boot-2009.03/board/cm4008/CVS/Root
--- u-boot-2009.03_orig/board/cm4008/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm4008/CVS/Root 2009-03-25 15:24:10.244413400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cm41xx/CVS/Entries u-boot-2009.03/board/cm41xx/CVS/Entries
--- u-boot-2009.03_orig/board/cm41xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm41xx/CVS/Entries 2009-03-25 15:57:15.465806200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm41xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cm41xx/CVS/Entries.Extra u-boot-2009.03/board/cm41xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cm41xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm41xx/CVS/Entries.Extra 2009-03-25 15:57:15.465806200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/cm41xx.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cm41xx/CVS/Entries.Extra.Old u-boot-2009.03/board/cm41xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cm41xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm41xx/CVS/Entries.Extra.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/cm41xx.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cm41xx/CVS/Entries.Old u-boot-2009.03/board/cm41xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cm41xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm41xx/CVS/Entries.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cm41xx.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cm41xx/CVS/Repository u-boot-2009.03/board/cm41xx/CVS/Repository
--- u-boot-2009.03_orig/board/cm41xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm41xx/CVS/Repository 2009-03-25 15:24:10.369411800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cm41xx
diff -Naur u-boot-2009.03_orig/board/cm41xx/CVS/Root u-boot-2009.03/board/cm41xx/CVS/Root
--- u-boot-2009.03_orig/board/cm41xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm41xx/CVS/Root 2009-03-25 15:24:10.369411800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cm5200/CVS/Entries u-boot-2009.03/board/cm5200/CVS/Entries
--- u-boot-2009.03_orig/board/cm5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm5200/CVS/Entries 2009-03-25 15:57:15.543930700 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_cm5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fwupdate.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fwupdate.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cm5200/CVS/Entries.Extra u-boot-2009.03/board/cm5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cm5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm5200/CVS/Entries.Extra 2009-03-25 15:57:15.543930700 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019690/
+/cm5200.c///1238019690/
+/cm5200.h///1238019690/
+/cmd_cm5200.c///1238019690/
+/config.mk///1238019690/
+/fwupdate.c///1238019690/
+/fwupdate.h///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cm5200/CVS/Entries.Extra.Old u-boot-2009.03/board/cm5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cm5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm5200/CVS/Entries.Extra.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019690/
+/cm5200.c///1238019690/
+/cm5200.h///1238019690/
+/cmd_cm5200.c///1238019690/
+/config.mk///1238019690/
+/fwupdate.c///1238019690/
+/fwupdate.h///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cm5200/CVS/Entries.Old u-boot-2009.03/board/cm5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cm5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm5200/CVS/Entries.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cm5200.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cm5200.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cmd_cm5200.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/fwupdate.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/fwupdate.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cm5200/CVS/Repository u-boot-2009.03/board/cm5200/CVS/Repository
--- u-boot-2009.03_orig/board/cm5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm5200/CVS/Repository 2009-03-25 15:24:10.635033400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cm5200
diff -Naur u-boot-2009.03_orig/board/cm5200/CVS/Root u-boot-2009.03/board/cm5200/CVS/Root
--- u-boot-2009.03_orig/board/cm5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cm5200/CVS/Root 2009-03-25 15:24:10.635033400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries u-boot-2009.03/board/cmc_pu2/CVS/Entries
--- u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmc_pu2/CVS/Entries 2009-03-25 15:57:15.622055200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmc_pu2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/load_sernum_ethaddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries.Extra u-boot-2009.03/board/cmc_pu2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmc_pu2/CVS/Entries.Extra 2009-03-25 15:57:15.637680100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/cmc_pu2.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/load_sernum_ethaddr.c///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries.Extra.Old u-boot-2009.03/board/cmc_pu2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmc_pu2/CVS/Entries.Extra.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/cmc_pu2.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/load_sernum_ethaddr.c///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries.Old u-boot-2009.03/board/cmc_pu2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cmc_pu2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmc_pu2/CVS/Entries.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cmc_pu2.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/load_sernum_ethaddr.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cmc_pu2/CVS/Repository u-boot-2009.03/board/cmc_pu2/CVS/Repository
--- u-boot-2009.03_orig/board/cmc_pu2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmc_pu2/CVS/Repository 2009-03-25 15:24:10.775656600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cmc_pu2
diff -Naur u-boot-2009.03_orig/board/cmc_pu2/CVS/Root u-boot-2009.03/board/cmc_pu2/CVS/Root
--- u-boot-2009.03_orig/board/cmc_pu2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmc_pu2/CVS/Root 2009-03-25 15:24:10.775656600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cmi/CVS/Entries u-boot-2009.03/board/cmi/CVS/Entries
--- u-boot-2009.03_orig/board/cmi/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmi/CVS/Entries 2009-03-25 15:57:15.700179700 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cmi/CVS/Entries.Extra u-boot-2009.03/board/cmi/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cmi/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmi/CVS/Entries.Extra 2009-03-25 15:57:15.700179700 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019690/
+/cmi.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cmi/CVS/Entries.Extra.Old u-boot-2009.03/board/cmi/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cmi/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmi/CVS/Entries.Extra.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019690/
+/cmi.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cmi/CVS/Entries.Old u-boot-2009.03/board/cmi/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cmi/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmi/CVS/Entries.Old 2009-03-25 15:24:10.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cmi.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cmi/CVS/Repository u-boot-2009.03/board/cmi/CVS/Repository
--- u-boot-2009.03_orig/board/cmi/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmi/CVS/Repository 2009-03-25 15:24:10.900655000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cmi
diff -Naur u-boot-2009.03_orig/board/cmi/CVS/Root u-boot-2009.03/board/cmi/CVS/Root
--- u-boot-2009.03_orig/board/cmi/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cmi/CVS/Root 2009-03-25 15:24:10.900655000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cobra5272/CVS/Entries u-boot-2009.03/board/cobra5272/CVS/Entries
--- u-boot-2009.03_orig/board/cobra5272/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/CVS/Entries 2009-03-25 15:57:15.840803800 -0700
@@ -0,0 +1,6 @@
+D/bdm////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cobra5272.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/board/cobra5272/CVS/Entries.Extra u-boot-2009.03/board/cobra5272/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cobra5272/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/CVS/Entries.Extra 2009-03-25 15:57:15.840803800 -0700
@@ -0,0 +1,6 @@
+D/bdm////
+/Makefile///1238019690/
+/cobra5272.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cobra5272/CVS/Entries.Extra.Old u-boot-2009.03/board/cobra5272/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cobra5272/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/CVS/Entries.Extra.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/cobra5272.c///1238019690/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/u-boot.lds///1238019690/
+D/bdm////
diff -Naur u-boot-2009.03_orig/board/cobra5272/CVS/Entries.Old u-boot-2009.03/board/cobra5272/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cobra5272/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/CVS/Entries.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cobra5272.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D/bdm////
diff -Naur u-boot-2009.03_orig/board/cobra5272/CVS/Repository u-boot-2009.03/board/cobra5272/CVS/Repository
--- u-boot-2009.03_orig/board/cobra5272/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/CVS/Repository 2009-03-25 15:24:10.994403800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cobra5272
diff -Naur u-boot-2009.03_orig/board/cobra5272/CVS/Root u-boot-2009.03/board/cobra5272/CVS/Root
--- u-boot-2009.03_orig/board/cobra5272/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/CVS/Root 2009-03-25 15:24:10.994403800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries u-boot-2009.03/board/cobra5272/bdm/CVS/Entries
--- u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/bdm/CVS/Entries 2009-03-25 15:57:15.793929100 -0700
@@ -0,0 +1,5 @@
+/cobra5272_uboot.gdb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gdbinit.reset/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/load-cobra_uboot/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reset/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries.Extra u-boot-2009.03/board/cobra5272/bdm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/bdm/CVS/Entries.Extra 2009-03-25 15:57:15.793929100 -0700
@@ -0,0 +1,4 @@
+/cobra5272_uboot.gdb///1238019690/
+/gdbinit.reset///1238019690/
+/load-cobra_uboot///1238019690/
+/reset///1238019690/
diff -Naur u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries.Extra.Old u-boot-2009.03/board/cobra5272/bdm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/bdm/CVS/Entries.Extra.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,4 @@
+/cobra5272_uboot.gdb///1238019690/
+/gdbinit.reset///1238019690/
+/load-cobra_uboot///1238019690/
+/reset///1238019690/
diff -Naur u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries.Old u-boot-2009.03/board/cobra5272/bdm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/bdm/CVS/Entries.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,5 @@
+/cobra5272_uboot.gdb/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/gdbinit.reset/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/load-cobra_uboot/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/reset/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Repository u-boot-2009.03/board/cobra5272/bdm/CVS/Repository
--- u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/bdm/CVS/Repository 2009-03-25 15:24:11.072527800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cobra5272/bdm
diff -Naur u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Root u-boot-2009.03/board/cobra5272/bdm/CVS/Root
--- u-boot-2009.03_orig/board/cobra5272/bdm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cobra5272/bdm/CVS/Root 2009-03-25 15:24:11.072527800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cogent/CVS/Entries u-boot-2009.03/board/cogent/CVS/Entries
--- u-boot-2009.03_orig/board/cogent/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cogent/CVS/Entries 2009-03-25 15:57:15.965803000 -0700
@@ -0,0 +1,25 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.cma286/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dipsw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dipsw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kbm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kbm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/par.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/par.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cogent/CVS/Entries.Extra u-boot-2009.03/board/cogent/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cogent/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cogent/CVS/Entries.Extra 2009-03-25 15:57:15.965803000 -0700
@@ -0,0 +1,24 @@
+/Makefile///1238019690/
+/README///1238019690/
+/README.cma286///1238019690/
+/config.mk///1238019690/
+/dipsw.c///1238019690/
+/dipsw.h///1238019690/
+/flash.c///1238019690/
+/flash.h///1238019690/
+/kbm.c///1238019690/
+/kbm.h///1238019690/
+/lcd.c///1238019690/
+/lcd.h///1238019690/
+/mb.c///1238019690/
+/mb.h///1238019690/
+/par.c///1238019690/
+/par.h///1238019690/
+/pci.c///1238019690/
+/pci.h///1238019690/
+/rtc.c///1238019690/
+/rtc.h///1238019690/
+/serial.c///1238019690/
+/serial.h///1238019690/
+/u-boot.lds///1238019690/
+/u-boot.lds.debug///1238019690/
diff -Naur u-boot-2009.03_orig/board/cogent/CVS/Entries.Extra.Old u-boot-2009.03/board/cogent/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cogent/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cogent/CVS/Entries.Extra.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,24 @@
+/Makefile///1238019690/
+/README///1238019690/
+/README.cma286///1238019690/
+/config.mk///1238019690/
+/dipsw.c///1238019690/
+/dipsw.h///1238019690/
+/flash.c///1238019690/
+/flash.h///1238019690/
+/kbm.c///1238019690/
+/kbm.h///1238019690/
+/lcd.c///1238019690/
+/lcd.h///1238019690/
+/mb.c///1238019690/
+/mb.h///1238019690/
+/par.c///1238019690/
+/par.h///1238019690/
+/pci.c///1238019690/
+/pci.h///1238019690/
+/rtc.c///1238019690/
+/rtc.h///1238019690/
+/serial.c///1238019690/
+/serial.h///1238019690/
+/u-boot.lds///1238019690/
+/u-boot.lds.debug///1238019690/
diff -Naur u-boot-2009.03_orig/board/cogent/CVS/Entries.Old u-boot-2009.03/board/cogent/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cogent/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cogent/CVS/Entries.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,25 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/README.cma286/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/dipsw.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/dipsw.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/kbm.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/kbm.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/lcd.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/lcd.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/mb.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/mb.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/par.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/par.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/pci.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/rtc.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/rtc.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/serial.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cogent/CVS/Repository u-boot-2009.03/board/cogent/CVS/Repository
--- u-boot-2009.03_orig/board/cogent/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cogent/CVS/Repository 2009-03-25 15:24:11.213151000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cogent
diff -Naur u-boot-2009.03_orig/board/cogent/CVS/Root u-boot-2009.03/board/cogent/CVS/Root
--- u-boot-2009.03_orig/board/cogent/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cogent/CVS/Root 2009-03-25 15:24:11.213151000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cpc45/CVS/Entries u-boot-2009.03/board/cpc45/CVS/Entries
--- u-boot-2009.03_orig/board/cpc45/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpc45/CVS/Entries 2009-03-25 15:57:16.043927500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpc45.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pd67290.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/plx9030.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cpc45/CVS/Entries.Extra u-boot-2009.03/board/cpc45/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cpc45/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpc45/CVS/Entries.Extra 2009-03-25 15:57:16.043927500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cpc45.c///1238019690/
+/flash.c///1238019690/
+/pd67290.c///1238019690/
+/plx9030.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cpc45/CVS/Entries.Extra.Old u-boot-2009.03/board/cpc45/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cpc45/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpc45/CVS/Entries.Extra.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cpc45.c///1238019690/
+/flash.c///1238019690/
+/pd67290.c///1238019690/
+/plx9030.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cpc45/CVS/Entries.Old u-boot-2009.03/board/cpc45/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cpc45/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpc45/CVS/Entries.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cpc45.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/pd67290.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/plx9030.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cpc45/CVS/Repository u-boot-2009.03/board/cpc45/CVS/Repository
--- u-boot-2009.03_orig/board/cpc45/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpc45/CVS/Repository 2009-03-25 15:24:11.603771000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cpc45
diff -Naur u-boot-2009.03_orig/board/cpc45/CVS/Root u-boot-2009.03/board/cpc45/CVS/Root
--- u-boot-2009.03_orig/board/cpc45/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpc45/CVS/Root 2009-03-25 15:24:11.603771000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cpu86/CVS/Entries u-boot-2009.03/board/cpu86/CVS/Entries
--- u-boot-2009.03_orig/board/cpu86/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu86/CVS/Entries 2009-03-25 15:57:16.122052000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu86.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu86.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cpu86/CVS/Entries.Extra u-boot-2009.03/board/cpu86/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cpu86/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu86/CVS/Entries.Extra 2009-03-25 15:57:16.122052000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cpu86.c///1238019690/
+/cpu86.h///1238019690/
+/flash.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cpu86/CVS/Entries.Extra.Old u-boot-2009.03/board/cpu86/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cpu86/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu86/CVS/Entries.Extra.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cpu86.c///1238019690/
+/cpu86.h///1238019690/
+/flash.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cpu86/CVS/Entries.Old u-boot-2009.03/board/cpu86/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cpu86/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu86/CVS/Entries.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cpu86.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cpu86.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cpu86/CVS/Repository u-boot-2009.03/board/cpu86/CVS/Repository
--- u-boot-2009.03_orig/board/cpu86/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu86/CVS/Repository 2009-03-25 15:24:11.728769400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cpu86
diff -Naur u-boot-2009.03_orig/board/cpu86/CVS/Root u-boot-2009.03/board/cpu86/CVS/Root
--- u-boot-2009.03_orig/board/cpu86/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu86/CVS/Root 2009-03-25 15:24:11.728769400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cpu87/CVS/Entries u-boot-2009.03/board/cpu87/CVS/Entries
--- u-boot-2009.03_orig/board/cpu87/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu87/CVS/Entries 2009-03-25 15:57:16.215801400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu87.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu87.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cpu87/CVS/Entries.Extra u-boot-2009.03/board/cpu87/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cpu87/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu87/CVS/Entries.Extra 2009-03-25 15:57:16.215801400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cpu87.c///1238019690/
+/cpu87.h///1238019690/
+/flash.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cpu87/CVS/Entries.Extra.Old u-boot-2009.03/board/cpu87/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cpu87/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu87/CVS/Entries.Extra.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cpu87.c///1238019690/
+/cpu87.h///1238019690/
+/flash.c///1238019690/
diff -Naur u-boot-2009.03_orig/board/cpu87/CVS/Entries.Old u-boot-2009.03/board/cpu87/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cpu87/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu87/CVS/Entries.Old 2009-03-25 15:24:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cpu87.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cpu87.h/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cpu87/CVS/Repository u-boot-2009.03/board/cpu87/CVS/Repository
--- u-boot-2009.03_orig/board/cpu87/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu87/CVS/Repository 2009-03-25 15:24:11.853767800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cpu87
diff -Naur u-boot-2009.03_orig/board/cpu87/CVS/Root u-boot-2009.03/board/cpu87/CVS/Root
--- u-boot-2009.03_orig/board/cpu87/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cpu87/CVS/Root 2009-03-25 15:24:11.838143000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cradle/CVS/Entries u-boot-2009.03/board/cradle/CVS/Entries
--- u-boot-2009.03_orig/board/cradle/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cradle/CVS/Entries 2009-03-25 15:57:16.293925900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cradle.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cradle/CVS/Entries.Extra u-boot-2009.03/board/cradle/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cradle/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cradle/CVS/Entries.Extra 2009-03-25 15:57:16.293925900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cradle.c///1238019690/
+/flash.c///1238019690/
+/lowlevel_init.S///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cradle/CVS/Entries.Extra.Old u-boot-2009.03/board/cradle/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cradle/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cradle/CVS/Entries.Extra.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019690/
+/config.mk///1238019690/
+/cradle.c///1238019690/
+/flash.c///1238019690/
+/lowlevel_init.S///1238019690/
+/u-boot.lds///1238019690/
diff -Naur u-boot-2009.03_orig/board/cradle/CVS/Entries.Old u-boot-2009.03/board/cradle/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cradle/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cradle/CVS/Entries.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/cradle.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:30 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cradle/CVS/Repository u-boot-2009.03/board/cradle/CVS/Repository
--- u-boot-2009.03_orig/board/cradle/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cradle/CVS/Repository 2009-03-25 15:24:11.963141400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cradle
diff -Naur u-boot-2009.03_orig/board/cradle/CVS/Root u-boot-2009.03/board/cradle/CVS/Root
--- u-boot-2009.03_orig/board/cradle/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cradle/CVS/Root 2009-03-25 15:24:11.963141400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cray/CVS/Entries u-boot-2009.03/board/cray/CVS/Entries
--- u-boot-2009.03_orig/board/cray/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/CVS/Entries 2009-03-25 15:24:12.260012600 -0700
@@ -0,0 +1 @@
+D/L1////
diff -Naur u-boot-2009.03_orig/board/cray/CVS/Entries.Extra u-boot-2009.03/board/cray/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cray/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/CVS/Entries.Extra 2009-03-25 15:24:12.260012600 -0700
@@ -0,0 +1 @@
+D/L1////
diff -Naur u-boot-2009.03_orig/board/cray/CVS/Repository u-boot-2009.03/board/cray/CVS/Repository
--- u-boot-2009.03_orig/board/cray/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/CVS/Repository 2009-03-25 15:24:12.088139800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cray
diff -Naur u-boot-2009.03_orig/board/cray/CVS/Root u-boot-2009.03/board/cray/CVS/Root
--- u-boot-2009.03_orig/board/cray/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/CVS/Root 2009-03-25 15:24:12.088139800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cray/L1/CVS/Entries u-boot-2009.03/board/cray/L1/CVS/Entries
--- u-boot-2009.03_orig/board/cray/L1/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/L1/CVS/Entries 2009-03-31 14:44:12.807898400 -0700
@@ -0,0 +1,12 @@
+/L1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/L1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/patchme/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/x2c.awk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootscript.hush/1.1.1.1/Tue Mar 31 21:44:12 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/cray/L1/CVS/Entries.Extra u-boot-2009.03/board/cray/L1/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cray/L1/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/L1/CVS/Entries.Extra 2009-03-31 14:44:12.807898400 -0700
@@ -0,0 +1,11 @@
+/L1.c///1238019690/
+/L1.h///1238019691/
+/Makefile///1238019691/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/init.S///1238019690/
+/patchme///1238019691/
+/u-boot.lds///1238019691/
+/u-boot.lds.debug///1238019691/
+/x2c.awk///1238019691/
+/bootscript.hush///1238019690/
diff -Naur u-boot-2009.03_orig/board/cray/L1/CVS/Entries.Extra.Old u-boot-2009.03/board/cray/L1/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cray/L1/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/L1/CVS/Entries.Extra.Old 2009-03-25 17:51:36.000000000 -0700
@@ -0,0 +1,11 @@
+/L1.c///1238019690/
+/L1.h///1238019691/
+/Makefile///1238019691/
+/config.mk///1238019690/
+/flash.c///1238019690/
+/init.S///1238019690/
+/patchme///1238019691/
+/u-boot.lds///1238019691/
+/u-boot.lds.debug///1238019691/
+/x2c.awk///1238019691/
+/bootscript.hush///1238028696/
diff -Naur u-boot-2009.03_orig/board/cray/L1/CVS/Entries.Old u-boot-2009.03/board/cray/L1/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cray/L1/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/L1/CVS/Entries.Old 2009-03-25 17:51:36.000000000 -0700
@@ -0,0 +1,12 @@
+/L1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/L1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/patchme/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/x2c.awk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootscript.hush/1.2/Thu Mar 26 00:51:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cray/L1/CVS/Repository u-boot-2009.03/board/cray/L1/CVS/Repository
--- u-boot-2009.03_orig/board/cray/L1/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/L1/CVS/Repository 2009-03-25 15:24:12.103764600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cray/L1
diff -Naur u-boot-2009.03_orig/board/cray/L1/CVS/Root u-boot-2009.03/board/cray/L1/CVS/Root
--- u-boot-2009.03_orig/board/cray/L1/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cray/L1/CVS/Root 2009-03-25 15:24:12.103764600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cray/L1/bootscript.hush u-boot-2009.03/board/cray/L1/bootscript.hush
--- u-boot-2009.03_orig/board/cray/L1/bootscript.hush 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/cray/L1/bootscript.hush 2009-03-31 14:44:12.667275200 -0700
@@ -1,117 +1,117 @@
-# $Header$
-# hush bootscript for PPCBOOT on L1
-# note: all #s are in hex, do _NOT_ prefix it with 0x
-
-flash_rfs=ffc00000
-flash_krl=fff00000
-tftp_addr=100000
-tftp2_addr=1000000
-
-if printenv booted
-then
- echo already booted before
-else
- echo first boot in environment, create and save settings
- setenv booted OK
- saveenv
-fi
-
-setenv autoload no
-# clear out stale env stuff, so we get fresh from dhcp.
-for setting in initrd fromflash kernel rootfs rootpath
-do
-setenv $setting
-done
-
-dhcp
-
-# if host provides us with a different bootscript, us it.
-if printenv bootscript
- then
- tftp $tftp_addr $bootcript
- if imi $tftp_addr
- then
- autoscript $tftp_addr
- fi
-fi
-
-# default base kernel arguments.
-setenv bootargs $xbootargs devfs=mount ip=$ipaddr:$serverip:$gatewayip:$netmask:L1:eth0:off wdt=120
-
-# Have a kernel in flash?
-if imi $flash_krl
-then
- echo ok kernel to boot from $flash_krl
- setenv kernel $flash_krl
-else
- echo no kernel to boot from $flash_krl, need tftp
-fi
-
-# Have a rootfs in flash?
-echo test for SQUASHfs at $flash_rfs
-
-if imi $flash_rfs
-then
- echo appears to be a good initrd image at base of flash OK
- setenv rootfs $flash_rfs
-else
- echo no image at base of flash, need nfsroot or initrd
-fi
-
-# I boot from flash if told to and I can.
-if printenv fromflash && printenv kernel && printenv rootfs
-then
- echo booting entirely from flash
- setenv bootargs root=/dev/ram0 rw $bootargs
- bootm $kernel $rootfs
- echo oh no failed so I try some other stuff
-fi
-
-# TFTP down a kernel
-if printenv bootfile
-then
- tftp $tftp_addr $bootfile
- setenv kernel $tftp_addr
- echo I will boot the TFTP kernel
-else
- if printenv kernel
- then
- echo no bootfile specified, will use one from flash
- else
- setenv bootfile /opt/crayx1/craymcu/l1/flash/linux.image
- echo OH NO! we have no bootfile,nor flash kernel! try default: $bootfile
- tftp $tftp_addr $bootfile
- setenv kernel $tftp_addr
- fi
-fi
-
-# the rootfs.
-if printenv rootpath
-then
- echo rootpath is $rootpath
- if printenv initrd
- then
- echo initrd is also specified, so use $initrd
- tftp $tftp2_addr $initrd
- setenv bootargs root=/dev/ram0 rw cwsroot=$serverip:$rootpath $bootargs
- bootm $kernel $tftp2_addr
- else
- echo initrd is not specified, so use NFSROOT $rootpat
- setenv bootargs root=/dev/nfs ro nfsroot=$serverip:$rootpath $bootargs
- bootm $kernel
- fi
-else
- echo we have no rootpath check for one in flash
- if printenv rootfs
- then
- echo I will use the one in flash
- setenv bootargs root=/dev/mtdblock/0 ro rootfstype=squashfs $bootargs
- bootm $kernel
- else
- setenv rootpath /export/crayl1
- echo OH NO! we have no rootpath,nor flash kernel! try default: $rootpath
- setenv bootargs root=/dev/mtdblock/0 ro rootfstype=squashfs $bootargs
- bootm $kernel
- fi
-fi
-reset
+# $Header: C:\qaz\__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/board/cray/L1/bootscript.hush,v 1.1.1.1 2009/03/25 22:21:30 kenagy Exp $
+# hush bootscript for PPCBOOT on L1
+# note: all #s are in hex, do _NOT_ prefix it with 0x
+
+flash_rfs=ffc00000
+flash_krl=fff00000
+tftp_addr=100000
+tftp2_addr=1000000
+
+if printenv booted
+then
+ echo already booted before
+else
+ echo first boot in environment, create and save settings
+ setenv booted OK
+ saveenv
+fi
+
+setenv autoload no
+# clear out stale env stuff, so we get fresh from dhcp.
+for setting in initrd fromflash kernel rootfs rootpath
+do
+setenv $setting
+done
+
+dhcp
+
+# if host provides us with a different bootscript, us it.
+if printenv bootscript
+ then
+ tftp $tftp_addr $bootcript
+ if imi $tftp_addr
+ then
+ autoscript $tftp_addr
+ fi
+fi
+
+# default base kernel arguments.
+setenv bootargs $xbootargs devfs=mount ip=$ipaddr:$serverip:$gatewayip:$netmask:L1:eth0:off wdt=120
+
+# Have a kernel in flash?
+if imi $flash_krl
+then
+ echo ok kernel to boot from $flash_krl
+ setenv kernel $flash_krl
+else
+ echo no kernel to boot from $flash_krl, need tftp
+fi
+
+# Have a rootfs in flash?
+echo test for SQUASHfs at $flash_rfs
+
+if imi $flash_rfs
+then
+ echo appears to be a good initrd image at base of flash OK
+ setenv rootfs $flash_rfs
+else
+ echo no image at base of flash, need nfsroot or initrd
+fi
+
+# I boot from flash if told to and I can.
+if printenv fromflash && printenv kernel && printenv rootfs
+then
+ echo booting entirely from flash
+ setenv bootargs root=/dev/ram0 rw $bootargs
+ bootm $kernel $rootfs
+ echo oh no failed so I try some other stuff
+fi
+
+# TFTP down a kernel
+if printenv bootfile
+then
+ tftp $tftp_addr $bootfile
+ setenv kernel $tftp_addr
+ echo I will boot the TFTP kernel
+else
+ if printenv kernel
+ then
+ echo no bootfile specified, will use one from flash
+ else
+ setenv bootfile /opt/crayx1/craymcu/l1/flash/linux.image
+ echo OH NO! we have no bootfile,nor flash kernel! try default: $bootfile
+ tftp $tftp_addr $bootfile
+ setenv kernel $tftp_addr
+ fi
+fi
+
+# the rootfs.
+if printenv rootpath
+then
+ echo rootpath is $rootpath
+ if printenv initrd
+ then
+ echo initrd is also specified, so use $initrd
+ tftp $tftp2_addr $initrd
+ setenv bootargs root=/dev/ram0 rw cwsroot=$serverip:$rootpath $bootargs
+ bootm $kernel $tftp2_addr
+ else
+ echo initrd is not specified, so use NFSROOT $rootpat
+ setenv bootargs root=/dev/nfs ro nfsroot=$serverip:$rootpath $bootargs
+ bootm $kernel
+ fi
+else
+ echo we have no rootpath check for one in flash
+ if printenv rootfs
+ then
+ echo I will use the one in flash
+ setenv bootargs root=/dev/mtdblock/0 ro rootfstype=squashfs $bootargs
+ bootm $kernel
+ else
+ setenv rootpath /export/crayl1
+ echo OH NO! we have no rootpath,nor flash kernel! try default: $rootpath
+ setenv bootargs root=/dev/mtdblock/0 ro rootfstype=squashfs $bootargs
+ bootm $kernel
+ fi
+fi
+reset
diff -Naur u-boot-2009.03_orig/board/csb226/CVS/Entries u-boot-2009.03/board/csb226/CVS/Entries
--- u-boot-2009.03_orig/board/csb226/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb226/CVS/Entries 2009-03-25 15:57:16.497049600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb226.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb226/CVS/Entries.Extra u-boot-2009.03/board/csb226/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/csb226/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb226/CVS/Entries.Extra 2009-03-25 15:57:16.497049600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb226.c///1238019691/
+/flash.c///1238019691/
+/lowlevel_init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb226/CVS/Entries.Extra.Old u-boot-2009.03/board/csb226/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/csb226/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb226/CVS/Entries.Extra.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb226.c///1238019691/
+/flash.c///1238019691/
+/lowlevel_init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb226/CVS/Entries.Old u-boot-2009.03/board/csb226/CVS/Entries.Old
--- u-boot-2009.03_orig/board/csb226/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb226/CVS/Entries.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/csb226.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb226/CVS/Repository u-boot-2009.03/board/csb226/CVS/Repository
--- u-boot-2009.03_orig/board/csb226/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb226/CVS/Repository 2009-03-25 15:24:12.306887000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/csb226
diff -Naur u-boot-2009.03_orig/board/csb226/CVS/Root u-boot-2009.03/board/csb226/CVS/Root
--- u-boot-2009.03_orig/board/csb226/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb226/CVS/Root 2009-03-25 15:24:12.291262200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/csb272/CVS/Entries u-boot-2009.03/board/csb272/CVS/Entries
--- u-boot-2009.03_orig/board/csb272/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb272/CVS/Entries 2009-03-25 15:57:16.575174100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb272.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb272/CVS/Entries.Extra u-boot-2009.03/board/csb272/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/csb272/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb272/CVS/Entries.Extra 2009-03-25 15:57:16.575174100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb272.c///1238019691/
+/init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb272/CVS/Entries.Extra.Old u-boot-2009.03/board/csb272/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/csb272/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb272/CVS/Entries.Extra.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb272.c///1238019691/
+/init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb272/CVS/Entries.Old u-boot-2009.03/board/csb272/CVS/Entries.Old
--- u-boot-2009.03_orig/board/csb272/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb272/CVS/Entries.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/csb272.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb272/CVS/Repository u-boot-2009.03/board/csb272/CVS/Repository
--- u-boot-2009.03_orig/board/csb272/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb272/CVS/Repository 2009-03-25 15:24:12.588133400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/csb272
diff -Naur u-boot-2009.03_orig/board/csb272/CVS/Root u-boot-2009.03/board/csb272/CVS/Root
--- u-boot-2009.03_orig/board/csb272/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb272/CVS/Root 2009-03-25 15:24:12.572508600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/csb472/CVS/Entries u-boot-2009.03/board/csb472/CVS/Entries
--- u-boot-2009.03_orig/board/csb472/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb472/CVS/Entries 2009-03-25 15:57:16.637673700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb472.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb472/CVS/Entries.Extra u-boot-2009.03/board/csb472/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/csb472/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb472/CVS/Entries.Extra 2009-03-25 15:57:16.653298600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb472.c///1238019691/
+/init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb472/CVS/Entries.Extra.Old u-boot-2009.03/board/csb472/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/csb472/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb472/CVS/Entries.Extra.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb472.c///1238019691/
+/init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb472/CVS/Entries.Old u-boot-2009.03/board/csb472/CVS/Entries.Old
--- u-boot-2009.03_orig/board/csb472/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb472/CVS/Entries.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/csb472.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb472/CVS/Repository u-boot-2009.03/board/csb472/CVS/Repository
--- u-boot-2009.03_orig/board/csb472/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb472/CVS/Repository 2009-03-25 15:24:12.697507000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/csb472
diff -Naur u-boot-2009.03_orig/board/csb472/CVS/Root u-boot-2009.03/board/csb472/CVS/Root
--- u-boot-2009.03_orig/board/csb472/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb472/CVS/Root 2009-03-25 15:24:12.697507000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/csb637/CVS/Entries u-boot-2009.03/board/csb637/CVS/Entries
--- u-boot-2009.03_orig/board/csb637/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb637/CVS/Entries 2009-03-25 15:57:16.715798200 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb637.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb637/CVS/Entries.Extra u-boot-2009.03/board/csb637/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/csb637/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb637/CVS/Entries.Extra 2009-03-25 15:57:16.715798200 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb637.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb637/CVS/Entries.Extra.Old u-boot-2009.03/board/csb637/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/csb637/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb637/CVS/Entries.Extra.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/csb637.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/csb637/CVS/Entries.Old u-boot-2009.03/board/csb637/CVS/Entries.Old
--- u-boot-2009.03_orig/board/csb637/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb637/CVS/Entries.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/csb637.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/csb637/CVS/Repository u-boot-2009.03/board/csb637/CVS/Repository
--- u-boot-2009.03_orig/board/csb637/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb637/CVS/Repository 2009-03-25 15:24:12.791255800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/csb637
diff -Naur u-boot-2009.03_orig/board/csb637/CVS/Root u-boot-2009.03/board/csb637/CVS/Root
--- u-boot-2009.03_orig/board/csb637/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/csb637/CVS/Root 2009-03-25 15:24:12.791255800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/cu824/CVS/Entries u-boot-2009.03/board/cu824/CVS/Entries
--- u-boot-2009.03_orig/board/cu824/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cu824/CVS/Entries 2009-03-25 15:57:16.778297800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cu824.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cu824/CVS/Entries.Extra u-boot-2009.03/board/cu824/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/cu824/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cu824/CVS/Entries.Extra 2009-03-25 15:57:16.793922700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/README///1238019691/
+/config.mk///1238019691/
+/cu824.c///1238019691/
+/flash.c///1238019691/
diff -Naur u-boot-2009.03_orig/board/cu824/CVS/Entries.Extra.Old u-boot-2009.03/board/cu824/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/cu824/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cu824/CVS/Entries.Extra.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/README///1238019691/
+/config.mk///1238019691/
+/cu824.c///1238019691/
+/flash.c///1238019691/
diff -Naur u-boot-2009.03_orig/board/cu824/CVS/Entries.Old u-boot-2009.03/board/cu824/CVS/Entries.Old
--- u-boot-2009.03_orig/board/cu824/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cu824/CVS/Entries.Old 2009-03-25 15:24:12.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/cu824.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/cu824/CVS/Repository u-boot-2009.03/board/cu824/CVS/Repository
--- u-boot-2009.03_orig/board/cu824/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cu824/CVS/Repository 2009-03-25 15:24:12.885004600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/cu824
diff -Naur u-boot-2009.03_orig/board/cu824/CVS/Root u-boot-2009.03/board/cu824/CVS/Root
--- u-boot-2009.03_orig/board/cu824/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/cu824/CVS/Root 2009-03-25 15:24:12.885004600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/dave/B2/CVS/Entries u-boot-2009.03/board/dave/B2/CVS/Entries
--- u-boot-2009.03_orig/board/dave/B2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/B2/CVS/Entries 2009-03-25 15:57:16.856422300 -0700
@@ -0,0 +1,7 @@
+/B2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dave/B2/CVS/Entries.Extra u-boot-2009.03/board/dave/B2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/dave/B2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/B2/CVS/Entries.Extra 2009-03-25 15:57:16.856422300 -0700
@@ -0,0 +1,6 @@
+/B2.c///1238019691/
+/Makefile///1238019691/
+/config.mk///1238019691/
+/flash.c///1238019691/
+/lowlevel_init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/dave/B2/CVS/Entries.Extra.Old u-boot-2009.03/board/dave/B2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/dave/B2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/B2/CVS/Entries.Extra.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,6 @@
+/B2.c///1238019691/
+/Makefile///1238019691/
+/config.mk///1238019691/
+/flash.c///1238019691/
+/lowlevel_init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/dave/B2/CVS/Entries.Old u-boot-2009.03/board/dave/B2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/dave/B2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/B2/CVS/Entries.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,7 @@
+/B2.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dave/B2/CVS/Repository u-boot-2009.03/board/dave/B2/CVS/Repository
--- u-boot-2009.03_orig/board/dave/B2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/B2/CVS/Repository 2009-03-25 15:24:13.025627800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/dave/B2
diff -Naur u-boot-2009.03_orig/board/dave/B2/CVS/Root u-boot-2009.03/board/dave/B2/CVS/Root
--- u-boot-2009.03_orig/board/dave/B2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/B2/CVS/Root 2009-03-25 15:24:13.025627800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/dave/CVS/Entries u-boot-2009.03/board/dave/CVS/Entries
--- u-boot-2009.03_orig/board/dave/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/CVS/Entries 2009-03-25 15:24:13.572495800 -0700
@@ -0,0 +1,3 @@
+D/B2////
+D/PPChameleonEVB////
+D/common////
diff -Naur u-boot-2009.03_orig/board/dave/CVS/Entries.Extra u-boot-2009.03/board/dave/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/dave/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/CVS/Entries.Extra 2009-03-25 15:24:13.572495800 -0700
@@ -0,0 +1,3 @@
+D/B2////
+D/PPChameleonEVB////
+D/common////
diff -Naur u-boot-2009.03_orig/board/dave/CVS/Repository u-boot-2009.03/board/dave/CVS/Repository
--- u-boot-2009.03_orig/board/dave/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/CVS/Repository 2009-03-25 15:24:13.010003000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/dave
diff -Naur u-boot-2009.03_orig/board/dave/CVS/Root u-boot-2009.03/board/dave/CVS/Root
--- u-boot-2009.03_orig/board/dave/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/CVS/Root 2009-03-25 15:24:12.994378200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries
--- u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries 2009-03-25 15:57:16.934546800 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PPChameleonEVB.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries.Extra u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries.Extra 2009-03-25 15:57:16.934546800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019691/
+/PPChameleonEVB.c///1238019691/
+/config.mk///1238019691/
+/flash.c///1238019691/
+/fpgadata.c///1238019691/
+/nand.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries.Extra.Old u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries.Extra.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019691/
+/PPChameleonEVB.c///1238019691/
+/config.mk///1238019691/
+/flash.c///1238019691/
+/fpgadata.c///1238019691/
+/nand.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries.Old u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries.Old
--- u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Entries.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/PPChameleonEVB.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Repository u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Repository
--- u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Repository 2009-03-25 15:24:13.150626200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/dave/PPChameleonEVB
diff -Naur u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Root u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Root
--- u-boot-2009.03_orig/board/dave/PPChameleonEVB/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/PPChameleonEVB/CVS/Root 2009-03-25 15:24:13.150626200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/dave/common/CVS/Entries u-boot-2009.03/board/dave/common/CVS/Entries
--- u-boot-2009.03_orig/board/dave/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/common/CVS/Entries 2009-03-25 15:57:16.981421500 -0700
@@ -0,0 +1,4 @@
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dave/common/CVS/Entries.Extra u-boot-2009.03/board/dave/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/dave/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/common/CVS/Entries.Extra 2009-03-25 15:57:16.981421500 -0700
@@ -0,0 +1,3 @@
+/flash.c///1238019691/
+/fpga.c///1238019691/
+/pci.c///1238019691/
diff -Naur u-boot-2009.03_orig/board/dave/common/CVS/Entries.Extra.Old u-boot-2009.03/board/dave/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/dave/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/common/CVS/Entries.Extra.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,3 @@
+/flash.c///1238019691/
+/fpga.c///1238019691/
+/pci.c///1238019691/
diff -Naur u-boot-2009.03_orig/board/dave/common/CVS/Entries.Old u-boot-2009.03/board/dave/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/dave/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/common/CVS/Entries.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,4 @@
+/flash.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dave/common/CVS/Repository u-boot-2009.03/board/dave/common/CVS/Repository
--- u-boot-2009.03_orig/board/dave/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/common/CVS/Repository 2009-03-25 15:24:13.291249400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/dave/common
diff -Naur u-boot-2009.03_orig/board/dave/common/CVS/Root u-boot-2009.03/board/dave/common/CVS/Root
--- u-boot-2009.03_orig/board/dave/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dave/common/CVS/Root 2009-03-25 15:24:13.291249400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davedenx/CVS/Entries u-boot-2009.03/board/davedenx/CVS/Entries
--- u-boot-2009.03_orig/board/davedenx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/CVS/Entries 2009-03-25 15:24:13.900616600 -0700
@@ -0,0 +1 @@
+D/qong////
diff -Naur u-boot-2009.03_orig/board/davedenx/CVS/Entries.Extra u-boot-2009.03/board/davedenx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davedenx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/CVS/Entries.Extra 2009-03-25 15:24:13.900616600 -0700
@@ -0,0 +1 @@
+D/qong////
diff -Naur u-boot-2009.03_orig/board/davedenx/CVS/Repository u-boot-2009.03/board/davedenx/CVS/Repository
--- u-boot-2009.03_orig/board/davedenx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/CVS/Repository 2009-03-25 15:24:13.759993400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davedenx
diff -Naur u-boot-2009.03_orig/board/davedenx/CVS/Root u-boot-2009.03/board/davedenx/CVS/Root
--- u-boot-2009.03_orig/board/davedenx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/CVS/Root 2009-03-25 15:24:13.759993400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries u-boot-2009.03/board/davedenx/qong/CVS/Entries
--- u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/qong/CVS/Entries 2009-03-25 15:57:17.090795800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qong.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qong_fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries.Extra u-boot-2009.03/board/davedenx/qong/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/qong/CVS/Entries.Extra 2009-03-25 15:57:17.090795800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/lowlevel_init.S///1238019691/
+/qong.c///1238019691/
+/qong_fpga.h///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries.Extra.Old u-boot-2009.03/board/davedenx/qong/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/qong/CVS/Entries.Extra.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/lowlevel_init.S///1238019691/
+/qong.c///1238019691/
+/qong_fpga.h///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries.Old u-boot-2009.03/board/davedenx/qong/CVS/Entries.Old
--- u-boot-2009.03_orig/board/davedenx/qong/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/qong/CVS/Entries.Old 2009-03-25 15:24:13.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/qong.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/qong_fpga.h/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davedenx/qong/CVS/Repository u-boot-2009.03/board/davedenx/qong/CVS/Repository
--- u-boot-2009.03_orig/board/davedenx/qong/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/qong/CVS/Repository 2009-03-25 15:24:13.791243000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davedenx/qong
diff -Naur u-boot-2009.03_orig/board/davedenx/qong/CVS/Root u-boot-2009.03/board/davedenx/qong/CVS/Root
--- u-boot-2009.03_orig/board/davedenx/qong/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davedenx/qong/CVS/Root 2009-03-25 15:24:13.775618200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davinci/CVS/Entries u-boot-2009.03/board/davinci/CVS/Entries
--- u-boot-2009.03_orig/board/davinci/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/CVS/Entries 2009-03-25 15:24:14.822479800 -0700
@@ -0,0 +1,5 @@
+D/common////
+D/dvevm////
+D/schmoogie////
+D/sffsdr////
+D/sonata////
diff -Naur u-boot-2009.03_orig/board/davinci/CVS/Entries.Extra u-boot-2009.03/board/davinci/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davinci/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/CVS/Entries.Extra 2009-03-25 15:24:14.822479800 -0700
@@ -0,0 +1,5 @@
+D/common////
+D/dvevm////
+D/schmoogie////
+D/sffsdr////
+D/sonata////
diff -Naur u-boot-2009.03_orig/board/davinci/CVS/Repository u-boot-2009.03/board/davinci/CVS/Repository
--- u-boot-2009.03_orig/board/davinci/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/CVS/Repository 2009-03-25 15:24:13.931866200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davinci
diff -Naur u-boot-2009.03_orig/board/davinci/CVS/Root u-boot-2009.03/board/davinci/CVS/Root
--- u-boot-2009.03_orig/board/davinci/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/CVS/Root 2009-03-25 15:24:13.931866200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davinci/common/CVS/Entries u-boot-2009.03/board/davinci/common/CVS/Entries
--- u-boot-2009.03_orig/board/davinci/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/common/CVS/Entries 2009-03-25 15:57:17.184545200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/psc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/psc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/common/CVS/Entries.Extra u-boot-2009.03/board/davinci/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davinci/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/common/CVS/Entries.Extra 2009-03-25 15:57:17.200170100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/misc.c///1238019691/
+/misc.h///1238019691/
+/psc.c///1238019691/
+/psc.h///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/common/CVS/Entries.Extra.Old u-boot-2009.03/board/davinci/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/davinci/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/common/CVS/Entries.Extra.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/misc.c///1238019691/
+/misc.h///1238019691/
+/psc.c///1238019691/
+/psc.h///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/common/CVS/Entries.Old u-boot-2009.03/board/davinci/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/davinci/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/common/CVS/Entries.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/misc.h/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/psc.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/psc.h/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/common/CVS/Repository u-boot-2009.03/board/davinci/common/CVS/Repository
--- u-boot-2009.03_orig/board/davinci/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/common/CVS/Repository 2009-03-25 15:24:13.963115800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davinci/common
diff -Naur u-boot-2009.03_orig/board/davinci/common/CVS/Root u-boot-2009.03/board/davinci/common/CVS/Root
--- u-boot-2009.03_orig/board/davinci/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/common/CVS/Root 2009-03-25 15:24:13.963115800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries u-boot-2009.03/board/davinci/dvevm/CVS/Entries
--- u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/dvevm/CVS/Entries 2009-03-25 15:57:17.278294600 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dvevm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries.Extra u-boot-2009.03/board/davinci/dvevm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/dvevm/CVS/Entries.Extra 2009-03-25 15:57:17.278294600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/dvevm.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries.Extra.Old u-boot-2009.03/board/davinci/dvevm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/dvevm/CVS/Entries.Extra.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/dvevm.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries.Old u-boot-2009.03/board/davinci/dvevm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/davinci/dvevm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/dvevm/CVS/Entries.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/board_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/dvevm.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/dvevm/CVS/Repository u-boot-2009.03/board/davinci/dvevm/CVS/Repository
--- u-boot-2009.03_orig/board/davinci/dvevm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/dvevm/CVS/Repository 2009-03-25 15:24:14.056864600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davinci/dvevm
diff -Naur u-boot-2009.03_orig/board/davinci/dvevm/CVS/Root u-boot-2009.03/board/davinci/dvevm/CVS/Root
--- u-boot-2009.03_orig/board/davinci/dvevm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/dvevm/CVS/Root 2009-03-25 15:24:14.056864600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries u-boot-2009.03/board/davinci/schmoogie/CVS/Entries
--- u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/schmoogie/CVS/Entries 2009-03-25 15:57:17.340794200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/schmoogie.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries.Extra u-boot-2009.03/board/davinci/schmoogie/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/schmoogie/CVS/Entries.Extra 2009-03-25 15:57:17.340794200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/schmoogie.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries.Extra.Old u-boot-2009.03/board/davinci/schmoogie/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/schmoogie/CVS/Entries.Extra.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/schmoogie.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries.Old u-boot-2009.03/board/davinci/schmoogie/CVS/Entries.Old
--- u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/schmoogie/CVS/Entries.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/board_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/schmoogie.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Repository u-boot-2009.03/board/davinci/schmoogie/CVS/Repository
--- u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/schmoogie/CVS/Repository 2009-03-25 15:24:14.166238200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davinci/schmoogie
diff -Naur u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Root u-boot-2009.03/board/davinci/schmoogie/CVS/Root
--- u-boot-2009.03_orig/board/davinci/schmoogie/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/schmoogie/CVS/Root 2009-03-25 15:24:14.166238200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries u-boot-2009.03/board/davinci/sffsdr/CVS/Entries
--- u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sffsdr/CVS/Entries 2009-03-25 15:57:17.434543600 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sffsdr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries.Extra u-boot-2009.03/board/davinci/sffsdr/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sffsdr/CVS/Entries.Extra 2009-03-25 15:57:17.434543600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/sffsdr.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries.Extra.Old u-boot-2009.03/board/davinci/sffsdr/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sffsdr/CVS/Entries.Extra.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/sffsdr.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries.Old u-boot-2009.03/board/davinci/sffsdr/CVS/Entries.Old
--- u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sffsdr/CVS/Entries.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/board_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/sffsdr.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Repository u-boot-2009.03/board/davinci/sffsdr/CVS/Repository
--- u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sffsdr/CVS/Repository 2009-03-25 15:24:14.291236600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davinci/sffsdr
diff -Naur u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Root u-boot-2009.03/board/davinci/sffsdr/CVS/Root
--- u-boot-2009.03_orig/board/davinci/sffsdr/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sffsdr/CVS/Root 2009-03-25 15:24:14.291236600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries u-boot-2009.03/board/davinci/sonata/CVS/Entries
--- u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sonata/CVS/Entries 2009-03-25 15:57:17.497043200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sonata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries.Extra u-boot-2009.03/board/davinci/sonata/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sonata/CVS/Entries.Extra 2009-03-25 15:57:17.497043200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/sonata.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries.Extra.Old u-boot-2009.03/board/davinci/sonata/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sonata/CVS/Entries.Extra.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019691/
+/board_init.S///1238019691/
+/config.mk///1238019691/
+/sonata.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries.Old u-boot-2009.03/board/davinci/sonata/CVS/Entries.Old
--- u-boot-2009.03_orig/board/davinci/sonata/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sonata/CVS/Entries.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/board_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/sonata.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/davinci/sonata/CVS/Repository u-boot-2009.03/board/davinci/sonata/CVS/Repository
--- u-boot-2009.03_orig/board/davinci/sonata/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sonata/CVS/Repository 2009-03-25 15:24:14.681856600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/davinci/sonata
diff -Naur u-boot-2009.03_orig/board/davinci/sonata/CVS/Root u-boot-2009.03/board/davinci/sonata/CVS/Root
--- u-boot-2009.03_orig/board/davinci/sonata/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/davinci/sonata/CVS/Root 2009-03-25 15:24:14.666231800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/dbau1x00/CVS/Entries u-boot-2009.03/board/dbau1x00/CVS/Entries
--- u-boot-2009.03_orig/board/dbau1x00/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dbau1x00/CVS/Entries 2009-03-25 15:57:17.575167700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dbau1x00.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dbau1x00/CVS/Entries.Extra u-boot-2009.03/board/dbau1x00/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/dbau1x00/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dbau1x00/CVS/Entries.Extra 2009-03-25 15:57:17.590792600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019691/
+/README///1238019691/
+/config.mk///1238019691/
+/dbau1x00.c///1238019691/
+/flash.c///1238019691/
+/lowlevel_init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/dbau1x00/CVS/Entries.Extra.Old u-boot-2009.03/board/dbau1x00/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/dbau1x00/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dbau1x00/CVS/Entries.Extra.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019691/
+/README///1238019691/
+/config.mk///1238019691/
+/dbau1x00.c///1238019691/
+/flash.c///1238019691/
+/lowlevel_init.S///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/dbau1x00/CVS/Entries.Old u-boot-2009.03/board/dbau1x00/CVS/Entries.Old
--- u-boot-2009.03_orig/board/dbau1x00/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dbau1x00/CVS/Entries.Old 2009-03-25 15:24:14.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/dbau1x00.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dbau1x00/CVS/Repository u-boot-2009.03/board/dbau1x00/CVS/Repository
--- u-boot-2009.03_orig/board/dbau1x00/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dbau1x00/CVS/Repository 2009-03-25 15:24:14.853729400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/dbau1x00
diff -Naur u-boot-2009.03_orig/board/dbau1x00/CVS/Root u-boot-2009.03/board/dbau1x00/CVS/Root
--- u-boot-2009.03_orig/board/dbau1x00/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dbau1x00/CVS/Root 2009-03-25 15:24:14.853729400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/delta/CVS/Entries u-boot-2009.03/board/delta/CVS/Entries
--- u-boot-2009.03_orig/board/delta/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/delta/CVS/Entries 2009-03-25 15:57:17.653292200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/delta.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/delta/CVS/Entries.Extra u-boot-2009.03/board/delta/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/delta/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/delta/CVS/Entries.Extra 2009-03-25 15:57:17.653292200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/delta.c///1238019691/
+/lowlevel_init.S///1238019691/
+/nand.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/delta/CVS/Entries.Extra.Old u-boot-2009.03/board/delta/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/delta/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/delta/CVS/Entries.Extra.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019691/
+/config.mk///1238019691/
+/delta.c///1238019691/
+/lowlevel_init.S///1238019691/
+/nand.c///1238019691/
+/u-boot.lds///1238019691/
diff -Naur u-boot-2009.03_orig/board/delta/CVS/Entries.Old u-boot-2009.03/board/delta/CVS/Entries.Old
--- u-boot-2009.03_orig/board/delta/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/delta/CVS/Entries.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/delta.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:31 2009//
+D
diff -Naur u-boot-2009.03_orig/board/delta/CVS/Repository u-boot-2009.03/board/delta/CVS/Repository
--- u-boot-2009.03_orig/board/delta/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/delta/CVS/Repository 2009-03-25 15:24:14.994352600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/delta
diff -Naur u-boot-2009.03_orig/board/delta/CVS/Root u-boot-2009.03/board/delta/CVS/Root
--- u-boot-2009.03_orig/board/delta/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/delta/CVS/Root 2009-03-25 15:24:14.994352600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/dnp1110/CVS/Entries u-boot-2009.03/board/dnp1110/CVS/Entries
--- u-boot-2009.03_orig/board/dnp1110/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dnp1110/CVS/Entries 2009-03-25 15:57:17.715791800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dnp1110.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dnp1110/CVS/Entries.Extra u-boot-2009.03/board/dnp1110/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/dnp1110/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dnp1110/CVS/Entries.Extra 2009-03-25 15:57:17.715791800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019691/
+/dnp1110.c///1238019692/
+/flash.c///1238019692/
+/lowlevel_init.S///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/dnp1110/CVS/Entries.Extra.Old u-boot-2009.03/board/dnp1110/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/dnp1110/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dnp1110/CVS/Entries.Extra.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019691/
+/dnp1110.c///1238019692/
+/flash.c///1238019692/
+/lowlevel_init.S///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/dnp1110/CVS/Entries.Old u-boot-2009.03/board/dnp1110/CVS/Entries.Old
--- u-boot-2009.03_orig/board/dnp1110/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dnp1110/CVS/Entries.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:31 2009//
+/dnp1110.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/dnp1110/CVS/Repository u-boot-2009.03/board/dnp1110/CVS/Repository
--- u-boot-2009.03_orig/board/dnp1110/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dnp1110/CVS/Repository 2009-03-25 15:24:15.119351000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/dnp1110
diff -Naur u-boot-2009.03_orig/board/dnp1110/CVS/Root u-boot-2009.03/board/dnp1110/CVS/Root
--- u-boot-2009.03_orig/board/dnp1110/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/dnp1110/CVS/Root 2009-03-25 15:24:15.119351000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/eNET/CVS/Entries u-boot-2009.03/board/eNET/CVS/Entries
--- u-boot-2009.03_orig/board/eNET/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eNET/CVS/Entries 2009-03-25 15:57:17.793916300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eNET.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eNET_start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eNET_start16.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eNET/CVS/Entries.Extra u-boot-2009.03/board/eNET/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/eNET/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eNET/CVS/Entries.Extra 2009-03-25 15:57:17.793916300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/eNET.c///1238019692/
+/eNET_start.S///1238019692/
+/eNET_start16.S///1238019692/
+/hardware.h///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eNET/CVS/Entries.Extra.Old u-boot-2009.03/board/eNET/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/eNET/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eNET/CVS/Entries.Extra.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/eNET.c///1238019692/
+/eNET_start.S///1238019692/
+/eNET_start16.S///1238019692/
+/hardware.h///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eNET/CVS/Entries.Old u-boot-2009.03/board/eNET/CVS/Entries.Old
--- u-boot-2009.03_orig/board/eNET/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eNET/CVS/Entries.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/eNET.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/eNET_start.S/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/eNET_start16.S/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/hardware.h/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eNET/CVS/Repository u-boot-2009.03/board/eNET/CVS/Repository
--- u-boot-2009.03_orig/board/eNET/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eNET/CVS/Repository 2009-03-25 15:24:15.322473400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/eNET
diff -Naur u-boot-2009.03_orig/board/eNET/CVS/Root u-boot-2009.03/board/eNET/CVS/Root
--- u-boot-2009.03_orig/board/eNET/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eNET/CVS/Root 2009-03-25 15:24:15.322473400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/eXalion/CVS/Entries u-boot-2009.03/board/eXalion/CVS/Entries
--- u-boot-2009.03_orig/board/eXalion/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eXalion/CVS/Entries 2009-03-25 15:57:17.856415900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eXalion.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eXalion.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/piix_pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eXalion/CVS/Entries.Extra u-boot-2009.03/board/eXalion/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/eXalion/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eXalion/CVS/Entries.Extra 2009-03-25 15:57:17.856415900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/eXalion.c///1238019695/
+/eXalion.h///1238019695/
+/piix_pci.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/eXalion/CVS/Entries.Extra.Old u-boot-2009.03/board/eXalion/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/eXalion/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eXalion/CVS/Entries.Extra.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/eXalion.c///1238019695/
+/eXalion.h///1238019695/
+/piix_pci.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/eXalion/CVS/Entries.Old u-boot-2009.03/board/eXalion/CVS/Entries.Old
--- u-boot-2009.03_orig/board/eXalion/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eXalion/CVS/Entries.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/eXalion.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/eXalion.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/piix_pci.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eXalion/CVS/Repository u-boot-2009.03/board/eXalion/CVS/Repository
--- u-boot-2009.03_orig/board/eXalion/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eXalion/CVS/Repository 2009-03-25 15:24:15.634969400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/eXalion
diff -Naur u-boot-2009.03_orig/board/eXalion/CVS/Root u-boot-2009.03/board/eXalion/CVS/Root
--- u-boot-2009.03_orig/board/eXalion/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eXalion/CVS/Root 2009-03-25 15:24:15.634969400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/earthlcd/CVS/Entries u-boot-2009.03/board/earthlcd/CVS/Entries
--- u-boot-2009.03_orig/board/earthlcd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/CVS/Entries 2009-03-25 15:24:15.869341400 -0700
@@ -0,0 +1 @@
+D/favr-32-ezkit////
diff -Naur u-boot-2009.03_orig/board/earthlcd/CVS/Entries.Extra u-boot-2009.03/board/earthlcd/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/earthlcd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/CVS/Entries.Extra 2009-03-25 15:24:15.869341400 -0700
@@ -0,0 +1 @@
+D/favr-32-ezkit////
diff -Naur u-boot-2009.03_orig/board/earthlcd/CVS/Repository u-boot-2009.03/board/earthlcd/CVS/Repository
--- u-boot-2009.03_orig/board/earthlcd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/CVS/Repository 2009-03-25 15:24:15.744343000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/earthlcd
diff -Naur u-boot-2009.03_orig/board/earthlcd/CVS/Root u-boot-2009.03/board/earthlcd/CVS/Root
--- u-boot-2009.03_orig/board/earthlcd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/CVS/Root 2009-03-25 15:24:15.744343000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries
--- u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries 2009-03-25 15:57:17.934540400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/favr-32-ezkit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra 2009-03-25 15:57:17.934540400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/favr-32-ezkit.c///1238019692/
+/flash.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra.Old u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries.Extra.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/favr-32-ezkit.c///1238019692/
+/flash.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries.Old u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries.Old
--- u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Entries.Old 2009-03-25 15:24:15.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/favr-32-ezkit.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Repository u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Repository
--- u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Repository 2009-03-25 15:24:15.775592600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/earthlcd/favr-32-ezkit
diff -Naur u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Root u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Root
--- u-boot-2009.03_orig/board/earthlcd/favr-32-ezkit/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/earthlcd/favr-32-ezkit/CVS/Root 2009-03-25 15:24:15.759967800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/eltec/CVS/Entries u-boot-2009.03/board/eltec/CVS/Entries
--- u-boot-2009.03_orig/board/eltec/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/CVS/Entries 2009-03-25 15:24:16.572457400 -0700
@@ -0,0 +1,3 @@
+D/bab7xx////
+D/elppc////
+D/mhpc////
diff -Naur u-boot-2009.03_orig/board/eltec/CVS/Entries.Extra u-boot-2009.03/board/eltec/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/eltec/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/CVS/Entries.Extra 2009-03-25 15:24:16.588082200 -0700
@@ -0,0 +1,3 @@
+D/bab7xx////
+D/elppc////
+D/mhpc////
diff -Naur u-boot-2009.03_orig/board/eltec/CVS/Repository u-boot-2009.03/board/eltec/CVS/Repository
--- u-boot-2009.03_orig/board/eltec/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/CVS/Repository 2009-03-25 15:24:15.900591000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/eltec
diff -Naur u-boot-2009.03_orig/board/eltec/CVS/Root u-boot-2009.03/board/eltec/CVS/Root
--- u-boot-2009.03_orig/board/eltec/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/CVS/Root 2009-03-25 15:24:15.900591000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries u-boot-2009.03/board/eltec/bab7xx/CVS/Entries
--- u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/bab7xx/CVS/Entries 2009-03-25 15:57:18.043914700 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asm_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bab7xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dc_srom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/el_srom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/l2cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/srom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries.Extra u-boot-2009.03/board/eltec/bab7xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/bab7xx/CVS/Entries.Extra 2009-03-25 15:57:18.043914700 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019692/
+/asm_init.S///1238019692/
+/bab7xx.c///1238019692/
+/config.mk///1238019692/
+/dc_srom.c///1238019692/
+/el_srom.c///1238019692/
+/flash.c///1238019692/
+/l2cache.c///1238019692/
+/misc.c///1238019692/
+/pci.c///1238019692/
+/srom.h///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries.Extra.Old u-boot-2009.03/board/eltec/bab7xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/bab7xx/CVS/Entries.Extra.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019692/
+/asm_init.S///1238019692/
+/bab7xx.c///1238019692/
+/config.mk///1238019692/
+/dc_srom.c///1238019692/
+/el_srom.c///1238019692/
+/flash.c///1238019692/
+/l2cache.c///1238019692/
+/misc.c///1238019692/
+/pci.c///1238019692/
+/srom.h///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries.Old u-boot-2009.03/board/eltec/bab7xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/bab7xx/CVS/Entries.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/asm_init.S/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/bab7xx.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/dc_srom.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/el_srom.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/l2cache.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/srom.h/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Repository u-boot-2009.03/board/eltec/bab7xx/CVS/Repository
--- u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/bab7xx/CVS/Repository 2009-03-25 15:24:15.931840600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/eltec/bab7xx
diff -Naur u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Root u-boot-2009.03/board/eltec/bab7xx/CVS/Root
--- u-boot-2009.03_orig/board/eltec/bab7xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/bab7xx/CVS/Root 2009-03-25 15:24:15.916215800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries u-boot-2009.03/board/eltec/elppc/CVS/Entries
--- u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/elppc/CVS/Entries 2009-03-25 15:57:18.200163700 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asm_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eepro100_srom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/elppc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc107_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/srom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries.Extra u-boot-2009.03/board/eltec/elppc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/elppc/CVS/Entries.Extra 2009-03-25 15:57:18.200163700 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019692/
+/asm_init.S///1238019692/
+/config.mk///1238019692/
+/eepro100_srom.c///1238019692/
+/elppc.c///1238019692/
+/flash.c///1238019692/
+/misc.c///1238019692/
+/mpc107_i2c.c///1238019692/
+/pci.c///1238019692/
+/srom.h///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries.Extra.Old u-boot-2009.03/board/eltec/elppc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/elppc/CVS/Entries.Extra.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019692/
+/asm_init.S///1238019692/
+/config.mk///1238019692/
+/eepro100_srom.c///1238019692/
+/elppc.c///1238019692/
+/flash.c///1238019692/
+/misc.c///1238019692/
+/mpc107_i2c.c///1238019692/
+/pci.c///1238019692/
+/srom.h///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries.Old u-boot-2009.03/board/eltec/elppc/CVS/Entries.Old
--- u-boot-2009.03_orig/board/eltec/elppc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/elppc/CVS/Entries.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/asm_init.S/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/eepro100_srom.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/elppc.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/mpc107_i2c.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/srom.h/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eltec/elppc/CVS/Repository u-boot-2009.03/board/eltec/elppc/CVS/Repository
--- u-boot-2009.03_orig/board/eltec/elppc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/elppc/CVS/Repository 2009-03-25 15:24:16.103713400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/eltec/elppc
diff -Naur u-boot-2009.03_orig/board/eltec/elppc/CVS/Root u-boot-2009.03/board/eltec/elppc/CVS/Root
--- u-boot-2009.03_orig/board/eltec/elppc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/elppc/CVS/Root 2009-03-25 15:24:16.103713400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries u-boot-2009.03/board/eltec/mhpc/CVS/Entries
--- u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/mhpc/CVS/Entries 2009-03-25 15:57:18.278288200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mhpc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries.Extra u-boot-2009.03/board/eltec/mhpc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/mhpc/CVS/Entries.Extra 2009-03-25 15:57:18.278288200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/flash.c///1238019692/
+/mhpc.c///1238019692/
+/u-boot.lds///1238019692/
+/u-boot.lds.debug///1238019692/
diff -Naur u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries.Extra.Old u-boot-2009.03/board/eltec/mhpc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/mhpc/CVS/Entries.Extra.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/flash.c///1238019692/
+/mhpc.c///1238019692/
+/u-boot.lds///1238019692/
+/u-boot.lds.debug///1238019692/
diff -Naur u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries.Old u-boot-2009.03/board/eltec/mhpc/CVS/Entries.Old
--- u-boot-2009.03_orig/board/eltec/mhpc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/mhpc/CVS/Entries.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/mhpc.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eltec/mhpc/CVS/Repository u-boot-2009.03/board/eltec/mhpc/CVS/Repository
--- u-boot-2009.03_orig/board/eltec/mhpc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/mhpc/CVS/Repository 2009-03-25 15:24:16.275586200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/eltec/mhpc
diff -Naur u-boot-2009.03_orig/board/eltec/mhpc/CVS/Root u-boot-2009.03/board/eltec/mhpc/CVS/Root
--- u-boot-2009.03_orig/board/eltec/mhpc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eltec/mhpc/CVS/Root 2009-03-25 15:24:16.275586200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/emk/CVS/Entries u-boot-2009.03/board/emk/CVS/Entries
--- u-boot-2009.03_orig/board/emk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/CVS/Entries 2009-03-25 15:24:17.041201400 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/top5200////
+D/top860////
diff -Naur u-boot-2009.03_orig/board/emk/CVS/Entries.Extra u-boot-2009.03/board/emk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/emk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/CVS/Entries.Extra 2009-03-25 15:24:17.041201400 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/top5200////
+D/top860////
diff -Naur u-boot-2009.03_orig/board/emk/CVS/Repository u-boot-2009.03/board/emk/CVS/Repository
--- u-boot-2009.03_orig/board/emk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/CVS/Repository 2009-03-25 15:24:16.713080600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/emk
diff -Naur u-boot-2009.03_orig/board/emk/CVS/Root u-boot-2009.03/board/emk/CVS/Root
--- u-boot-2009.03_orig/board/emk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/CVS/Root 2009-03-25 15:24:16.713080600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/emk/common/CVS/Entries u-boot-2009.03/board/emk/common/CVS/Entries
--- u-boot-2009.03_orig/board/emk/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/common/CVS/Entries 2009-03-25 15:57:18.340787800 -0700
@@ -0,0 +1,4 @@
+/am79c874.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vpd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/emk/common/CVS/Entries.Extra u-boot-2009.03/board/emk/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/emk/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/common/CVS/Entries.Extra 2009-03-25 15:57:18.356412700 -0700
@@ -0,0 +1,3 @@
+/am79c874.c///1238019692/
+/flash.c///1238019692/
+/vpd.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/emk/common/CVS/Entries.Extra.Old u-boot-2009.03/board/emk/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/emk/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/common/CVS/Entries.Extra.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,3 @@
+/am79c874.c///1238019692/
+/flash.c///1238019692/
+/vpd.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/emk/common/CVS/Entries.Old u-boot-2009.03/board/emk/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/emk/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/common/CVS/Entries.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,4 @@
+/am79c874.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/vpd.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/emk/common/CVS/Repository u-boot-2009.03/board/emk/common/CVS/Repository
--- u-boot-2009.03_orig/board/emk/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/common/CVS/Repository 2009-03-25 15:24:16.744330200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/emk/common
diff -Naur u-boot-2009.03_orig/board/emk/common/CVS/Root u-boot-2009.03/board/emk/common/CVS/Root
--- u-boot-2009.03_orig/board/emk/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/common/CVS/Root 2009-03-25 15:24:16.744330200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/emk/top5200/CVS/Entries u-boot-2009.03/board/emk/top5200/CVS/Entries
--- u-boot-2009.03_orig/board/emk/top5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top5200/CVS/Entries 2009-03-25 15:57:18.403287400 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/top5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/emk/top5200/CVS/Entries.Extra u-boot-2009.03/board/emk/top5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/emk/top5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top5200/CVS/Entries.Extra 2009-03-25 15:57:18.418912300 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/top5200.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/emk/top5200/CVS/Entries.Extra.Old u-boot-2009.03/board/emk/top5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/emk/top5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top5200/CVS/Entries.Extra.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/top5200.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/emk/top5200/CVS/Entries.Old u-boot-2009.03/board/emk/top5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/emk/top5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top5200/CVS/Entries.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/top5200.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/emk/top5200/CVS/Repository u-boot-2009.03/board/emk/top5200/CVS/Repository
--- u-boot-2009.03_orig/board/emk/top5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top5200/CVS/Repository 2009-03-25 15:24:16.822454200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/emk/top5200
diff -Naur u-boot-2009.03_orig/board/emk/top5200/CVS/Root u-boot-2009.03/board/emk/top5200/CVS/Root
--- u-boot-2009.03_orig/board/emk/top5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top5200/CVS/Root 2009-03-25 15:24:16.822454200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/emk/top860/CVS/Entries u-boot-2009.03/board/emk/top860/CVS/Entries
--- u-boot-2009.03_orig/board/emk/top860/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top860/CVS/Entries 2009-03-25 15:57:18.465787000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/top860.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/emk/top860/CVS/Entries.Extra u-boot-2009.03/board/emk/top860/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/emk/top860/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top860/CVS/Entries.Extra 2009-03-25 15:57:18.465787000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/top860.c///1238019692/
+/u-boot.lds///1238019692/
+/u-boot.lds.debug///1238019692/
diff -Naur u-boot-2009.03_orig/board/emk/top860/CVS/Entries.Extra.Old u-boot-2009.03/board/emk/top860/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/emk/top860/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top860/CVS/Entries.Extra.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/top860.c///1238019692/
+/u-boot.lds///1238019692/
+/u-boot.lds.debug///1238019692/
diff -Naur u-boot-2009.03_orig/board/emk/top860/CVS/Entries.Old u-boot-2009.03/board/emk/top860/CVS/Entries.Old
--- u-boot-2009.03_orig/board/emk/top860/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top860/CVS/Entries.Old 2009-03-25 15:24:16.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/top860.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/emk/top860/CVS/Repository u-boot-2009.03/board/emk/top860/CVS/Repository
--- u-boot-2009.03_orig/board/emk/top860/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top860/CVS/Repository 2009-03-25 15:24:16.916203000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/emk/top860
diff -Naur u-boot-2009.03_orig/board/emk/top860/CVS/Root u-boot-2009.03/board/emk/top860/CVS/Root
--- u-boot-2009.03_orig/board/emk/top860/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/emk/top860/CVS/Root 2009-03-25 15:24:16.916203000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ep7312/CVS/Entries u-boot-2009.03/board/ep7312/CVS/Entries
--- u-boot-2009.03_orig/board/ep7312/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep7312/CVS/Entries 2009-03-25 15:57:18.528286600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep7312.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep7312/CVS/Entries.Extra u-boot-2009.03/board/ep7312/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ep7312/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep7312/CVS/Entries.Extra 2009-03-25 15:57:18.543911500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep7312.c///1238019692/
+/flash.c///1238019692/
+/lowlevel_init.S///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep7312/CVS/Entries.Extra.Old u-boot-2009.03/board/ep7312/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ep7312/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep7312/CVS/Entries.Extra.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep7312.c///1238019692/
+/flash.c///1238019692/
+/lowlevel_init.S///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep7312/CVS/Entries.Old u-boot-2009.03/board/ep7312/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ep7312/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep7312/CVS/Entries.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/ep7312.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep7312/CVS/Repository u-boot-2009.03/board/ep7312/CVS/Repository
--- u-boot-2009.03_orig/board/ep7312/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep7312/CVS/Repository 2009-03-25 15:24:17.088075800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ep7312
diff -Naur u-boot-2009.03_orig/board/ep7312/CVS/Root u-boot-2009.03/board/ep7312/CVS/Root
--- u-boot-2009.03_orig/board/ep7312/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep7312/CVS/Root 2009-03-25 15:24:17.088075800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ep8248/CVS/Entries u-boot-2009.03/board/ep8248/CVS/Entries
--- u-boot-2009.03_orig/board/ep8248/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8248/CVS/Entries 2009-03-25 15:57:18.590786200 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep8248.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep8248/CVS/Entries.Extra u-boot-2009.03/board/ep8248/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ep8248/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8248/CVS/Entries.Extra 2009-03-25 15:57:18.590786200 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep8248.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep8248/CVS/Entries.Extra.Old u-boot-2009.03/board/ep8248/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ep8248/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8248/CVS/Entries.Extra.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep8248.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep8248/CVS/Entries.Old u-boot-2009.03/board/ep8248/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ep8248/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8248/CVS/Entries.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/ep8248.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep8248/CVS/Repository u-boot-2009.03/board/ep8248/CVS/Repository
--- u-boot-2009.03_orig/board/ep8248/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8248/CVS/Repository 2009-03-25 15:24:17.213074200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ep8248
diff -Naur u-boot-2009.03_orig/board/ep8248/CVS/Root u-boot-2009.03/board/ep8248/CVS/Root
--- u-boot-2009.03_orig/board/ep8248/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8248/CVS/Root 2009-03-25 15:24:17.213074200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ep8260/CVS/Entries u-boot-2009.03/board/ep8260/CVS/Entries
--- u-boot-2009.03_orig/board/ep8260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8260/CVS/Entries 2009-03-25 15:57:18.668910700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep8260.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mii_phy.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep8260/CVS/Entries.Extra u-boot-2009.03/board/ep8260/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ep8260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8260/CVS/Entries.Extra 2009-03-25 15:57:18.668910700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep8260.c///1238019692/
+/ep8260.h///1238019692/
+/flash.c///1238019692/
+/mii_phy.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep8260/CVS/Entries.Extra.Old u-boot-2009.03/board/ep8260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ep8260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8260/CVS/Entries.Extra.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep8260.c///1238019692/
+/ep8260.h///1238019692/
+/flash.c///1238019692/
+/mii_phy.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep8260/CVS/Entries.Old u-boot-2009.03/board/ep8260/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ep8260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8260/CVS/Entries.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/ep8260.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/ep8260.h/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/mii_phy.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep8260/CVS/Repository u-boot-2009.03/board/ep8260/CVS/Repository
--- u-boot-2009.03_orig/board/ep8260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8260/CVS/Repository 2009-03-25 15:24:17.306823000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ep8260
diff -Naur u-boot-2009.03_orig/board/ep8260/CVS/Root u-boot-2009.03/board/ep8260/CVS/Root
--- u-boot-2009.03_orig/board/ep8260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep8260/CVS/Root 2009-03-25 15:24:17.306823000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ep82xxm/CVS/Entries u-boot-2009.03/board/ep82xxm/CVS/Entries
--- u-boot-2009.03_orig/board/ep82xxm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep82xxm/CVS/Entries 2009-03-25 15:57:18.731410300 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep82xxm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep82xxm/CVS/Entries.Extra u-boot-2009.03/board/ep82xxm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ep82xxm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep82xxm/CVS/Entries.Extra 2009-03-25 15:57:18.747035200 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep82xxm.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep82xxm/CVS/Entries.Extra.Old u-boot-2009.03/board/ep82xxm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ep82xxm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep82xxm/CVS/Entries.Extra.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep82xxm.c///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep82xxm/CVS/Entries.Old u-boot-2009.03/board/ep82xxm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ep82xxm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep82xxm/CVS/Entries.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/ep82xxm.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep82xxm/CVS/Repository u-boot-2009.03/board/ep82xxm/CVS/Repository
--- u-boot-2009.03_orig/board/ep82xxm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep82xxm/CVS/Repository 2009-03-25 15:24:17.603694200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ep82xxm
diff -Naur u-boot-2009.03_orig/board/ep82xxm/CVS/Root u-boot-2009.03/board/ep82xxm/CVS/Root
--- u-boot-2009.03_orig/board/ep82xxm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep82xxm/CVS/Root 2009-03-25 15:24:17.603694200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ep88x/CVS/Entries u-boot-2009.03/board/ep88x/CVS/Entries
--- u-boot-2009.03_orig/board/ep88x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep88x/CVS/Entries 2009-03-25 15:57:18.809534800 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep88x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep88x/CVS/Entries.Extra u-boot-2009.03/board/ep88x/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ep88x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep88x/CVS/Entries.Extra 2009-03-25 15:57:18.809534800 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep88x.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep88x/CVS/Entries.Extra.Old u-boot-2009.03/board/ep88x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ep88x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep88x/CVS/Entries.Extra.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/ep88x.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/ep88x/CVS/Entries.Old u-boot-2009.03/board/ep88x/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ep88x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep88x/CVS/Entries.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/ep88x.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ep88x/CVS/Repository u-boot-2009.03/board/ep88x/CVS/Repository
--- u-boot-2009.03_orig/board/ep88x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep88x/CVS/Repository 2009-03-25 15:24:17.681818200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ep88x
diff -Naur u-boot-2009.03_orig/board/ep88x/CVS/Root u-boot-2009.03/board/ep88x/CVS/Root
--- u-boot-2009.03_orig/board/ep88x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ep88x/CVS/Root 2009-03-25 15:24:17.681818200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/eric/CVS/Entries u-boot-2009.03/board/eric/CVS/Entries
--- u-boot-2009.03_orig/board/eric/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eric/CVS/Entries 2009-03-25 15:57:18.887659300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eric.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eric.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eric/CVS/Entries.Extra u-boot-2009.03/board/eric/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/eric/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eric/CVS/Entries.Extra 2009-03-25 15:57:18.887659300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/eric.c///1238019692/
+/eric.h///1238019692/
+/flash.c///1238019692/
+/init.S///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eric/CVS/Entries.Extra.Old u-boot-2009.03/board/eric/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/eric/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eric/CVS/Entries.Extra.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019692/
+/config.mk///1238019692/
+/eric.c///1238019692/
+/eric.h///1238019692/
+/flash.c///1238019692/
+/init.S///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/eric/CVS/Entries.Old u-boot-2009.03/board/eric/CVS/Entries.Old
--- u-boot-2009.03_orig/board/eric/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eric/CVS/Entries.Old 2009-03-25 15:24:17.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/eric.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/eric.h/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/eric/CVS/Repository u-boot-2009.03/board/eric/CVS/Repository
--- u-boot-2009.03_orig/board/eric/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eric/CVS/Repository 2009-03-25 15:24:17.775567000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/eric
diff -Naur u-boot-2009.03_orig/board/eric/CVS/Root u-boot-2009.03/board/eric/CVS/Root
--- u-boot-2009.03_orig/board/eric/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/eric/CVS/Root 2009-03-25 15:24:17.775567000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/CVS/Entries u-boot-2009.03/board/esd/CVS/Entries
--- u-boot-2009.03_orig/board/esd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/CVS/Entries 2009-03-25 15:24:23.025499800 -0700
@@ -0,0 +1,29 @@
+D/adciop////
+D/apc405////
+D/ar405////
+D/ash405////
+D/canbt////
+D/cms700////
+D/common////
+D/cpci2dp////
+D/cpci405////
+D/cpci5200////
+D/cpci750////
+D/cpciiser4////
+D/dasa_sim////
+D/dp405////
+D/du405////
+D/du440////
+D/hh405////
+D/hub405////
+D/mecp5200////
+D/ocrtc////
+D/pci405////
+D/pf5200////
+D/plu405////
+D/pmc405////
+D/pmc440////
+D/tasreg////
+D/voh405////
+D/vom405////
+D/wuh405////
diff -Naur u-boot-2009.03_orig/board/esd/CVS/Entries.Extra u-boot-2009.03/board/esd/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/CVS/Entries.Extra 2009-03-25 15:24:23.025499800 -0700
@@ -0,0 +1,29 @@
+D/adciop////
+D/apc405////
+D/ar405////
+D/ash405////
+D/canbt////
+D/cms700////
+D/common////
+D/cpci2dp////
+D/cpci405////
+D/cpci5200////
+D/cpci750////
+D/cpciiser4////
+D/dasa_sim////
+D/dp405////
+D/du405////
+D/du440////
+D/hh405////
+D/hub405////
+D/mecp5200////
+D/ocrtc////
+D/pci405////
+D/pf5200////
+D/plu405////
+D/pmc405////
+D/pmc440////
+D/tasreg////
+D/voh405////
+D/vom405////
+D/wuh405////
diff -Naur u-boot-2009.03_orig/board/esd/CVS/Repository u-boot-2009.03/board/esd/CVS/Repository
--- u-boot-2009.03_orig/board/esd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/CVS/Repository 2009-03-25 15:24:17.931815000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd
diff -Naur u-boot-2009.03_orig/board/esd/CVS/Root u-boot-2009.03/board/esd/CVS/Root
--- u-boot-2009.03_orig/board/esd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/CVS/Root 2009-03-25 15:24:17.931815000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/adciop/CVS/Entries u-boot-2009.03/board/esd/adciop/CVS/Entries
--- u-boot-2009.03_orig/board/esd/adciop/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/adciop/CVS/Entries 2009-03-25 15:57:18.981408700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/adciop.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/adciop.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/adciop/CVS/Entries.Extra u-boot-2009.03/board/esd/adciop/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/adciop/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/adciop/CVS/Entries.Extra 2009-03-25 15:57:18.981408700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/adciop.c///1238019692/
+/adciop.h///1238019692/
+/config.mk///1238019692/
+/flash.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/esd/adciop/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/adciop/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/adciop/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/adciop/CVS/Entries.Extra.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/adciop.c///1238019692/
+/adciop.h///1238019692/
+/config.mk///1238019692/
+/flash.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/esd/adciop/CVS/Entries.Old u-boot-2009.03/board/esd/adciop/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/adciop/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/adciop/CVS/Entries.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/adciop.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/adciop.h/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/adciop/CVS/Repository u-boot-2009.03/board/esd/adciop/CVS/Repository
--- u-boot-2009.03_orig/board/esd/adciop/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/adciop/CVS/Repository 2009-03-25 15:24:17.947439800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/adciop
diff -Naur u-boot-2009.03_orig/board/esd/adciop/CVS/Root u-boot-2009.03/board/esd/adciop/CVS/Root
--- u-boot-2009.03_orig/board/esd/adciop/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/adciop/CVS/Root 2009-03-25 15:24:17.947439800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/apc405/CVS/Entries u-boot-2009.03/board/esd/apc405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/apc405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/apc405/CVS/Entries 2009-03-25 15:57:19.059533200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/apc405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logo_640_480_24bpp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/apc405/CVS/Entries.Extra u-boot-2009.03/board/esd/apc405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/apc405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/apc405/CVS/Entries.Extra 2009-03-25 15:57:19.059533200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/apc405.c///1238019692/
+/config.mk///1238019692/
+/fpgadata.c///1238019692/
+/logo_640_480_24bpp.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/esd/apc405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/apc405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/apc405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/apc405/CVS/Entries.Extra.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019692/
+/apc405.c///1238019692/
+/config.mk///1238019692/
+/fpgadata.c///1238019692/
+/logo_640_480_24bpp.c///1238019692/
+/u-boot.lds///1238019692/
diff -Naur u-boot-2009.03_orig/board/esd/apc405/CVS/Entries.Old u-boot-2009.03/board/esd/apc405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/apc405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/apc405/CVS/Entries.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/apc405.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/logo_640_480_24bpp.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:32 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/apc405/CVS/Repository u-boot-2009.03/board/esd/apc405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/apc405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/apc405/CVS/Repository 2009-03-25 15:24:18.072438200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/apc405
diff -Naur u-boot-2009.03_orig/board/esd/apc405/CVS/Root u-boot-2009.03/board/esd/apc405/CVS/Root
--- u-boot-2009.03_orig/board/esd/apc405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/apc405/CVS/Root 2009-03-25 15:24:18.072438200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/ar405/CVS/Entries u-boot-2009.03/board/esd/ar405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/ar405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ar405/CVS/Entries 2009-03-25 15:57:19.153282600 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ar405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ar405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata_xl30.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/ar405/CVS/Entries.Extra u-boot-2009.03/board/esd/ar405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/ar405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ar405/CVS/Entries.Extra 2009-03-25 15:57:19.153282600 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019693/
+/ar405.c///1238019692/
+/ar405.h///1238019692/
+/config.mk///1238019692/
+/flash.c///1238019692/
+/fpgadata.c///1238019692/
+/fpgadata_xl30.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/ar405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/ar405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/ar405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ar405/CVS/Entries.Extra.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019693/
+/ar405.c///1238019692/
+/ar405.h///1238019692/
+/config.mk///1238019692/
+/flash.c///1238019692/
+/fpgadata.c///1238019692/
+/fpgadata_xl30.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/ar405/CVS/Entries.Old u-boot-2009.03/board/esd/ar405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/ar405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ar405/CVS/Entries.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/ar405.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/ar405.h/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:32 2009//
+/fpgadata_xl30.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/ar405/CVS/Repository u-boot-2009.03/board/esd/ar405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/ar405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ar405/CVS/Repository 2009-03-25 15:24:18.213061400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/ar405
diff -Naur u-boot-2009.03_orig/board/esd/ar405/CVS/Root u-boot-2009.03/board/esd/ar405/CVS/Root
--- u-boot-2009.03_orig/board/esd/ar405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ar405/CVS/Root 2009-03-25 15:24:18.213061400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/ash405/CVS/Entries u-boot-2009.03/board/esd/ash405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/ash405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ash405/CVS/Entries 2009-03-25 15:57:19.247032000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ash405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/ash405/CVS/Entries.Extra u-boot-2009.03/board/esd/ash405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/ash405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ash405/CVS/Entries.Extra 2009-03-25 15:57:19.247032000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019693/
+/ash405.c///1238019693/
+/config.mk///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/ash405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/ash405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/ash405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ash405/CVS/Entries.Extra.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019693/
+/ash405.c///1238019693/
+/config.mk///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/ash405/CVS/Entries.Old u-boot-2009.03/board/esd/ash405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/ash405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ash405/CVS/Entries.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/ash405.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/ash405/CVS/Repository u-boot-2009.03/board/esd/ash405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/ash405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ash405/CVS/Repository 2009-03-25 15:24:18.384934200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/ash405
diff -Naur u-boot-2009.03_orig/board/esd/ash405/CVS/Root u-boot-2009.03/board/esd/ash405/CVS/Root
--- u-boot-2009.03_orig/board/esd/ash405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ash405/CVS/Root 2009-03-25 15:24:18.384934200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/canbt/CVS/Entries u-boot-2009.03/board/esd/canbt/CVS/Entries
--- u-boot-2009.03_orig/board/esd/canbt/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/canbt/CVS/Entries 2009-03-25 15:57:19.309531600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canbt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canbt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/canbt/CVS/Entries.Extra u-boot-2009.03/board/esd/canbt/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/canbt/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/canbt/CVS/Entries.Extra 2009-03-25 15:57:19.325156500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019693/
+/canbt.c///1238019693/
+/canbt.h///1238019693/
+/config.mk///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/canbt/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/canbt/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/canbt/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/canbt/CVS/Entries.Extra.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019693/
+/canbt.c///1238019693/
+/canbt.h///1238019693/
+/config.mk///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/canbt/CVS/Entries.Old u-boot-2009.03/board/esd/canbt/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/canbt/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/canbt/CVS/Entries.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/canbt.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/canbt.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/canbt/CVS/Repository u-boot-2009.03/board/esd/canbt/CVS/Repository
--- u-boot-2009.03_orig/board/esd/canbt/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/canbt/CVS/Repository 2009-03-25 15:24:18.681805400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/canbt
diff -Naur u-boot-2009.03_orig/board/esd/canbt/CVS/Root u-boot-2009.03/board/esd/canbt/CVS/Root
--- u-boot-2009.03_orig/board/esd/canbt/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/canbt/CVS/Root 2009-03-25 15:24:18.681805400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/cms700/CVS/Entries u-boot-2009.03/board/esd/cms700/CVS/Entries
--- u-boot-2009.03_orig/board/esd/cms700/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cms700/CVS/Entries 2009-03-25 15:57:19.387656100 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cms700.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cms700/CVS/Entries.Extra u-boot-2009.03/board/esd/cms700/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/cms700/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cms700/CVS/Entries.Extra 2009-03-25 15:57:19.387656100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019693/
+/cms700.c///1238019693/
+/config.mk///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cms700/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/cms700/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/cms700/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cms700/CVS/Entries.Extra.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019693/
+/cms700.c///1238019693/
+/config.mk///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cms700/CVS/Entries.Old u-boot-2009.03/board/esd/cms700/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/cms700/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cms700/CVS/Entries.Old 2009-03-25 15:24:18.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cms700.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cms700/CVS/Repository u-boot-2009.03/board/esd/cms700/CVS/Repository
--- u-boot-2009.03_orig/board/esd/cms700/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cms700/CVS/Repository 2009-03-25 15:24:18.822428600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/cms700
diff -Naur u-boot-2009.03_orig/board/esd/cms700/CVS/Root u-boot-2009.03/board/esd/cms700/CVS/Root
--- u-boot-2009.03_orig/board/esd/cms700/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cms700/CVS/Root 2009-03-25 15:24:18.822428600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/common/CVS/Entries u-boot-2009.03/board/esd/common/CVS/Entries
--- u-boot-2009.03_orig/board/esd/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/CVS/Entries 2009-03-25 15:57:19.575154900 -0700
@@ -0,0 +1,18 @@
+D/xilinx_jtag////
+/auto_update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/auto_update.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_loadpci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/esd405ep_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13505_640_480_16bpp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13704_320_240_4bpp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13705_320_240_8bpp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13806_1024_768_8bpp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13806_320_240_4bpp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13806_640_480_16bpp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13806_640_480_8bpp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/board/esd/common/CVS/Entries.Extra u-boot-2009.03/board/esd/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/CVS/Entries.Extra 2009-03-25 15:57:19.590779800 -0700
@@ -0,0 +1,18 @@
+D/xilinx_jtag////
+/auto_update.c///1238019693/
+/auto_update.h///1238019693/
+/cmd_loadpci.c///1238019693/
+/esd405ep_nand.c///1238019693/
+/flash.c///1238019693/
+/fpga.c///1238019693/
+/lcd.c///1238019693/
+/lcd.h///1238019693/
+/misc.c///1238019693/
+/pci.c///1238019693/
+/s1d13505_640_480_16bpp.h///1238019693/
+/s1d13704_320_240_4bpp.h///1238019693/
+/s1d13705_320_240_8bpp.h///1238019693/
+/s1d13806_1024_768_8bpp.h///1238019693/
+/s1d13806_320_240_4bpp.h///1238019693/
+/s1d13806_640_480_16bpp.h///1238019693/
+/s1d13806_640_480_8bpp.h///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/common/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/CVS/Entries.Extra.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,18 @@
+/auto_update.c///1238019693/
+/auto_update.h///1238019693/
+/cmd_loadpci.c///1238019693/
+/esd405ep_nand.c///1238019693/
+/flash.c///1238019693/
+/fpga.c///1238019693/
+/lcd.c///1238019693/
+/lcd.h///1238019693/
+/misc.c///1238019693/
+/pci.c///1238019693/
+/s1d13505_640_480_16bpp.h///1238019693/
+/s1d13704_320_240_4bpp.h///1238019693/
+/s1d13705_320_240_8bpp.h///1238019693/
+/s1d13806_1024_768_8bpp.h///1238019693/
+/s1d13806_320_240_4bpp.h///1238019693/
+/s1d13806_640_480_16bpp.h///1238019693/
+/s1d13806_640_480_8bpp.h///1238019693/
+D/xilinx_jtag////
diff -Naur u-boot-2009.03_orig/board/esd/common/CVS/Entries.Old u-boot-2009.03/board/esd/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/CVS/Entries.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,18 @@
+/auto_update.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/auto_update.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cmd_loadpci.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/esd405ep_nand.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/lcd.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/lcd.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/s1d13505_640_480_16bpp.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/s1d13704_320_240_4bpp.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/s1d13705_320_240_8bpp.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/s1d13806_1024_768_8bpp.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/s1d13806_320_240_4bpp.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/s1d13806_640_480_16bpp.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/s1d13806_640_480_8bpp.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D/xilinx_jtag////
diff -Naur u-boot-2009.03_orig/board/esd/common/CVS/Repository u-boot-2009.03/board/esd/common/CVS/Repository
--- u-boot-2009.03_orig/board/esd/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/CVS/Repository 2009-03-25 15:24:18.947427000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/common
diff -Naur u-boot-2009.03_orig/board/esd/common/CVS/Root u-boot-2009.03/board/esd/common/CVS/Root
--- u-boot-2009.03_orig/board/esd/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/CVS/Root 2009-03-25 15:24:18.947427000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries
--- u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries 2009-03-25 15:57:19.528280200 -0700
@@ -0,0 +1,7 @@
+/lenval.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lenval.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/micro.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/micro.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ports.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries.Extra u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries.Extra 2009-03-25 15:57:19.528280200 -0700
@@ -0,0 +1,6 @@
+/lenval.c///1238019693/
+/lenval.h///1238019693/
+/micro.c///1238019693/
+/micro.h///1238019693/
+/ports.c///1238019693/
+/ports.h///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries.Extra.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,6 @@
+/lenval.c///1238019693/
+/lenval.h///1238019693/
+/micro.c///1238019693/
+/micro.h///1238019693/
+/ports.c///1238019693/
+/ports.h///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries.Old u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Entries.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,7 @@
+/lenval.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/lenval.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/micro.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/micro.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/ports.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/ports.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Repository u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Repository
--- u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Repository 2009-03-25 15:24:19.119299800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/common/xilinx_jtag
diff -Naur u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Root u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Root
--- u-boot-2009.03_orig/board/esd/common/xilinx_jtag/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/common/xilinx_jtag/CVS/Root 2009-03-25 15:24:19.119299800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries u-boot-2009.03/board/esd/cpci2dp/CVS/Entries
--- u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci2dp/CVS/Entries 2009-03-25 15:57:19.668904300 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpci2dp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries.Extra u-boot-2009.03/board/esd/cpci2dp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci2dp/CVS/Entries.Extra 2009-03-25 15:57:19.668904300 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci2dp.c///1238019693/
+/flash.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/cpci2dp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci2dp/CVS/Entries.Extra.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci2dp.c///1238019693/
+/flash.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries.Old u-boot-2009.03/board/esd/cpci2dp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci2dp/CVS/Entries.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cpci2dp.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Repository u-boot-2009.03/board/esd/cpci2dp/CVS/Repository
--- u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci2dp/CVS/Repository 2009-03-25 15:24:19.322422200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/cpci2dp
diff -Naur u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Root u-boot-2009.03/board/esd/cpci2dp/CVS/Root
--- u-boot-2009.03_orig/board/esd/cpci2dp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci2dp/CVS/Root 2009-03-25 15:24:19.322422200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries u-boot-2009.03/board/esd/cpci405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci405/CVS/Entries 2009-03-25 15:57:19.762653700 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpci405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata_cpci405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata_cpci4052.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata_cpci405ab.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries.Extra u-boot-2009.03/board/esd/cpci405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci405/CVS/Entries.Extra 2009-03-25 15:57:19.762653700 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci405.c///1238019693/
+/flash.c///1238019693/
+/fpgadata_cpci405.c///1238019693/
+/fpgadata_cpci4052.c///1238019693/
+/fpgadata_cpci405ab.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/cpci405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci405/CVS/Entries.Extra.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci405.c///1238019693/
+/flash.c///1238019693/
+/fpgadata_cpci405.c///1238019693/
+/fpgadata_cpci4052.c///1238019693/
+/fpgadata_cpci405ab.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries.Old u-boot-2009.03/board/esd/cpci405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/cpci405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci405/CVS/Entries.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cpci405.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata_cpci405.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata_cpci4052.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata_cpci405ab.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci405/CVS/Repository u-boot-2009.03/board/esd/cpci405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/cpci405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci405/CVS/Repository 2009-03-25 15:24:19.572419000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/cpci405
diff -Naur u-boot-2009.03_orig/board/esd/cpci405/CVS/Root u-boot-2009.03/board/esd/cpci405/CVS/Root
--- u-boot-2009.03_orig/board/esd/cpci405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci405/CVS/Root 2009-03-25 15:24:19.572419000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries u-boot-2009.03/board/esd/cpci5200/CVS/Entries
--- u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci5200/CVS/Entries 2009-03-25 15:57:19.840778200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpci5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v16m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/strataflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries.Extra u-boot-2009.03/board/esd/cpci5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci5200/CVS/Entries.Extra 2009-03-25 15:57:19.840778200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci5200.c///1238019693/
+/mt46v16m16-75.h///1238019693/
+/strataflash.c///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/cpci5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci5200/CVS/Entries.Extra.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci5200.c///1238019693/
+/mt46v16m16-75.h///1238019693/
+/strataflash.c///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries.Old u-boot-2009.03/board/esd/cpci5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/cpci5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci5200/CVS/Entries.Old 2009-03-25 15:24:19.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cpci5200.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/mt46v16m16-75.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/strataflash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci5200/CVS/Repository u-boot-2009.03/board/esd/cpci5200/CVS/Repository
--- u-boot-2009.03_orig/board/esd/cpci5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci5200/CVS/Repository 2009-03-25 15:24:19.744291800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/cpci5200
diff -Naur u-boot-2009.03_orig/board/esd/cpci5200/CVS/Root u-boot-2009.03/board/esd/cpci5200/CVS/Root
--- u-boot-2009.03_orig/board/esd/cpci5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci5200/CVS/Root 2009-03-25 15:24:19.728667000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries u-boot-2009.03/board/esd/cpci750/CVS/Entries
--- u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci750/CVS/Entries 2009-03-25 15:57:19.981402300 -0700
@@ -0,0 +1,21 @@
+/64360.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpci750.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ide.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries.Extra u-boot-2009.03/board/esd/cpci750/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci750/CVS/Entries.Extra 2009-03-25 15:57:19.981402300 -0700
@@ -0,0 +1,20 @@
+/64360.h///1238019693/
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci750.c///1238019693/
+/eth.h///1238019693/
+/i2c.c///1238019693/
+/i2c.h///1238019693/
+/ide.c///1238019693/
+/local.h///1238019693/
+/misc.S///1238019693/
+/mpsc.c///1238019693/
+/mpsc.h///1238019693/
+/mv_eth.c///1238019693/
+/mv_eth.h///1238019693/
+/mv_regs.h///1238019693/
+/pci.c///1238019693/
+/sdram_init.c///1238019693/
+/serial.c///1238019693/
+/serial.h///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/cpci750/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci750/CVS/Entries.Extra.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,20 @@
+/64360.h///1238019693/
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpci750.c///1238019693/
+/eth.h///1238019693/
+/i2c.c///1238019693/
+/i2c.h///1238019693/
+/ide.c///1238019693/
+/local.h///1238019693/
+/misc.S///1238019693/
+/mpsc.c///1238019693/
+/mpsc.h///1238019693/
+/mv_eth.c///1238019693/
+/mv_eth.h///1238019693/
+/mv_regs.h///1238019693/
+/pci.c///1238019693/
+/sdram_init.c///1238019693/
+/serial.c///1238019693/
+/serial.h///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries.Old u-boot-2009.03/board/esd/cpci750/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/cpci750/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci750/CVS/Entries.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,21 @@
+/64360.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cpci750.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/eth.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/i2c.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/ide.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/local.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/misc.S/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/mpsc.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/mpsc.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/mv_eth.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/mv_eth.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/mv_regs.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/sdram_init.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/serial.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpci750/CVS/Repository u-boot-2009.03/board/esd/cpci750/CVS/Repository
--- u-boot-2009.03_orig/board/esd/cpci750/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci750/CVS/Repository 2009-03-25 15:24:19.853665400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/cpci750
diff -Naur u-boot-2009.03_orig/board/esd/cpci750/CVS/Root u-boot-2009.03/board/esd/cpci750/CVS/Root
--- u-boot-2009.03_orig/board/esd/cpci750/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpci750/CVS/Root 2009-03-25 15:24:19.853665400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries u-boot-2009.03/board/esd/cpciiser4/CVS/Entries
--- u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpciiser4/CVS/Entries 2009-03-25 15:57:20.106401500 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpciiser4.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpciiser4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries.Extra u-boot-2009.03/board/esd/cpciiser4/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpciiser4/CVS/Entries.Extra 2009-03-25 15:57:20.106401500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpciiser4.c///1238019693/
+/cpciiser4.h///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/cpciiser4/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpciiser4/CVS/Entries.Extra.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019693/
+/config.mk///1238019693/
+/cpciiser4.c///1238019693/
+/cpciiser4.h///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019693/
diff -Naur u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries.Old u-boot-2009.03/board/esd/cpciiser4/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpciiser4/CVS/Entries.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cpciiser4.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cpciiser4.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:33 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Repository u-boot-2009.03/board/esd/cpciiser4/CVS/Repository
--- u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpciiser4/CVS/Repository 2009-03-25 15:24:20.119287000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/cpciiser4
diff -Naur u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Root u-boot-2009.03/board/esd/cpciiser4/CVS/Root
--- u-boot-2009.03_orig/board/esd/cpciiser4/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/cpciiser4/CVS/Root 2009-03-25 15:24:20.119287000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries u-boot-2009.03/board/esd/dasa_sim/CVS/Entries
--- u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dasa_sim/CVS/Entries 2009-03-25 15:57:20.184526000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_dasa_sim.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dasa_sim.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dasa_sim.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries.Extra u-boot-2009.03/board/esd/dasa_sim/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dasa_sim/CVS/Entries.Extra 2009-03-25 15:57:20.184526000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019693/
+/cmd_dasa_sim.c///1238019693/
+/config.mk///1238019693/
+/dasa_sim.c///1238019693/
+/dasa_sim.h///1238019693/
+/eeprom.c///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/dasa_sim/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dasa_sim/CVS/Entries.Extra.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019693/
+/cmd_dasa_sim.c///1238019693/
+/config.mk///1238019693/
+/dasa_sim.c///1238019693/
+/dasa_sim.h///1238019693/
+/eeprom.c///1238019693/
+/flash.c///1238019693/
+/fpgadata.c///1238019693/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries.Old u-boot-2009.03/board/esd/dasa_sim/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dasa_sim/CVS/Entries.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/cmd_dasa_sim.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/dasa_sim.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/dasa_sim.h/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/eeprom.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:33 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Repository u-boot-2009.03/board/esd/dasa_sim/CVS/Repository
--- u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dasa_sim/CVS/Repository 2009-03-25 15:24:20.259910200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/dasa_sim
diff -Naur u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Root u-boot-2009.03/board/esd/dasa_sim/CVS/Root
--- u-boot-2009.03_orig/board/esd/dasa_sim/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dasa_sim/CVS/Root 2009-03-25 15:24:20.259910200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/dp405/CVS/Entries u-boot-2009.03/board/esd/dp405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/dp405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dp405/CVS/Entries 2009-03-25 15:57:20.262650500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dp405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/dp405/CVS/Entries.Extra u-boot-2009.03/board/esd/dp405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/dp405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dp405/CVS/Entries.Extra 2009-03-25 15:57:20.262650500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/dp405.c///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/dp405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/dp405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/dp405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dp405/CVS/Entries.Extra.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/dp405.c///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/dp405/CVS/Entries.Old u-boot-2009.03/board/esd/dp405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/dp405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dp405/CVS/Entries.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/dp405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/dp405/CVS/Repository u-boot-2009.03/board/esd/dp405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/dp405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dp405/CVS/Repository 2009-03-25 15:24:20.525531800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/dp405
diff -Naur u-boot-2009.03_orig/board/esd/dp405/CVS/Root u-boot-2009.03/board/esd/dp405/CVS/Root
--- u-boot-2009.03_orig/board/esd/dp405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/dp405/CVS/Root 2009-03-25 15:24:20.525531800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/du405/CVS/Entries u-boot-2009.03/board/esd/du405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/du405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du405/CVS/Entries 2009-03-25 15:57:20.340775000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/du405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/du405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/du405/CVS/Entries.Extra u-boot-2009.03/board/esd/du405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/du405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du405/CVS/Entries.Extra 2009-03-25 15:57:20.340775000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/du405.c///1238019694/
+/du405.h///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/du405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/du405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/du405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du405/CVS/Entries.Extra.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/du405.c///1238019694/
+/du405.h///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/du405/CVS/Entries.Old u-boot-2009.03/board/esd/du405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/du405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du405/CVS/Entries.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/du405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/du405.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/du405/CVS/Repository u-boot-2009.03/board/esd/du405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/du405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du405/CVS/Repository 2009-03-25 15:24:20.650530200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/du405
diff -Naur u-boot-2009.03_orig/board/esd/du405/CVS/Root u-boot-2009.03/board/esd/du405/CVS/Root
--- u-boot-2009.03_orig/board/esd/du405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du405/CVS/Root 2009-03-25 15:24:20.650530200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/du440/CVS/Entries u-boot-2009.03/board/esd/du440/CVS/Entries
--- u-boot-2009.03_orig/board/esd/du440/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du440/CVS/Entries 2009-03-25 15:57:20.418899500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/du440.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/du440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/du440/CVS/Entries.Extra u-boot-2009.03/board/esd/du440/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/du440/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du440/CVS/Entries.Extra 2009-03-25 15:57:20.418899500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/du440.c///1238019694/
+/du440.h///1238019694/
+/init.S///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/du440/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/du440/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/du440/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du440/CVS/Entries.Extra.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/du440.c///1238019694/
+/du440.h///1238019694/
+/init.S///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/du440/CVS/Entries.Old u-boot-2009.03/board/esd/du440/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/du440/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du440/CVS/Entries.Old 2009-03-25 15:24:20.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/du440.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/du440.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/du440/CVS/Repository u-boot-2009.03/board/esd/du440/CVS/Repository
--- u-boot-2009.03_orig/board/esd/du440/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du440/CVS/Repository 2009-03-25 15:24:20.759903800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/du440
diff -Naur u-boot-2009.03_orig/board/esd/du440/CVS/Root u-boot-2009.03/board/esd/du440/CVS/Root
--- u-boot-2009.03_orig/board/esd/du440/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/du440/CVS/Root 2009-03-25 15:24:20.759903800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/hh405/CVS/Entries u-boot-2009.03/board/esd/hh405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/hh405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hh405/CVS/Entries 2009-03-25 15:57:20.543898700 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hh405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logo_1024_768_8bpp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logo_320_240_4bpp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logo_320_240_8bpp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logo_640_480_24bpp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/hh405/CVS/Entries.Extra u-boot-2009.03/board/esd/hh405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/hh405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hh405/CVS/Entries.Extra 2009-03-25 15:57:20.543898700 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/hh405.c///1238019694/
+/logo_1024_768_8bpp.c///1238019694/
+/logo_320_240_4bpp.c///1238019694/
+/logo_320_240_8bpp.c///1238019694/
+/logo_640_480_24bpp.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/hh405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/hh405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/hh405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hh405/CVS/Entries.Extra.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/hh405.c///1238019694/
+/logo_1024_768_8bpp.c///1238019694/
+/logo_320_240_4bpp.c///1238019694/
+/logo_320_240_8bpp.c///1238019694/
+/logo_640_480_24bpp.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/hh405/CVS/Entries.Old u-boot-2009.03/board/esd/hh405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/hh405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hh405/CVS/Entries.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/hh405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/logo_1024_768_8bpp.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/logo_320_240_4bpp.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/logo_320_240_8bpp.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/logo_640_480_24bpp.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/hh405/CVS/Repository u-boot-2009.03/board/esd/hh405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/hh405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hh405/CVS/Repository 2009-03-25 15:24:20.884902200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/hh405
diff -Naur u-boot-2009.03_orig/board/esd/hh405/CVS/Root u-boot-2009.03/board/esd/hh405/CVS/Root
--- u-boot-2009.03_orig/board/esd/hh405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hh405/CVS/Root 2009-03-25 15:24:20.884902200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/hub405/CVS/Entries u-boot-2009.03/board/esd/hub405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/hub405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hub405/CVS/Entries 2009-03-25 15:57:20.622023200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hub405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/hub405/CVS/Entries.Extra u-boot-2009.03/board/esd/hub405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/hub405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hub405/CVS/Entries.Extra 2009-03-25 15:57:20.622023200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/hub405.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/hub405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/hub405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/hub405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hub405/CVS/Entries.Extra.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/hub405.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/hub405/CVS/Entries.Old u-boot-2009.03/board/esd/hub405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/hub405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hub405/CVS/Entries.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/hub405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/hub405/CVS/Repository u-boot-2009.03/board/esd/hub405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/hub405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hub405/CVS/Repository 2009-03-25 15:24:21.103649400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/hub405
diff -Naur u-boot-2009.03_orig/board/esd/hub405/CVS/Root u-boot-2009.03/board/esd/hub405/CVS/Root
--- u-boot-2009.03_orig/board/esd/hub405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/hub405/CVS/Root 2009-03-25 15:24:21.088024600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries u-boot-2009.03/board/esd/mecp5200/CVS/Entries
--- u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/mecp5200/CVS/Entries 2009-03-25 15:57:20.684522800 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mecp5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v16m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries.Extra u-boot-2009.03/board/esd/mecp5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/mecp5200/CVS/Entries.Extra 2009-03-25 15:57:20.700147700 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/mecp5200.c///1238019694/
+/mt46v16m16-75.h///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/mecp5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/mecp5200/CVS/Entries.Extra.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/mecp5200.c///1238019694/
+/mt46v16m16-75.h///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries.Old u-boot-2009.03/board/esd/mecp5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/mecp5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/mecp5200/CVS/Entries.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/mecp5200.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/mt46v16m16-75.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/mecp5200/CVS/Repository u-boot-2009.03/board/esd/mecp5200/CVS/Repository
--- u-boot-2009.03_orig/board/esd/mecp5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/mecp5200/CVS/Repository 2009-03-25 15:24:21.213023000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/mecp5200
diff -Naur u-boot-2009.03_orig/board/esd/mecp5200/CVS/Root u-boot-2009.03/board/esd/mecp5200/CVS/Root
--- u-boot-2009.03_orig/board/esd/mecp5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/mecp5200/CVS/Root 2009-03-25 15:24:21.197398200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries u-boot-2009.03/board/esd/ocrtc/CVS/Entries
--- u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ocrtc/CVS/Entries 2009-03-25 15:57:20.778272200 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ocrtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ocrtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ocrtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries.Extra u-boot-2009.03/board/esd/ocrtc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ocrtc/CVS/Entries.Extra 2009-03-25 15:57:20.778272200 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019694/
+/cmd_ocrtc.c///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/ocrtc.c///1238019694/
+/ocrtc.h///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/ocrtc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ocrtc/CVS/Entries.Extra.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019694/
+/cmd_ocrtc.c///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/ocrtc.c///1238019694/
+/ocrtc.h///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries.Old u-boot-2009.03/board/esd/ocrtc/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/ocrtc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ocrtc/CVS/Entries.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/cmd_ocrtc.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/ocrtc.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/ocrtc.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/ocrtc/CVS/Repository u-boot-2009.03/board/esd/ocrtc/CVS/Repository
--- u-boot-2009.03_orig/board/esd/ocrtc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ocrtc/CVS/Repository 2009-03-25 15:24:21.306771800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/ocrtc
diff -Naur u-boot-2009.03_orig/board/esd/ocrtc/CVS/Root u-boot-2009.03/board/esd/ocrtc/CVS/Root
--- u-boot-2009.03_orig/board/esd/ocrtc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/ocrtc/CVS/Root 2009-03-25 15:24:21.306771800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/pci405/CVS/Entries u-boot-2009.03/board/esd/pci405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/pci405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pci405/CVS/Entries 2009-03-25 15:57:20.872021600 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pci405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/writeibm.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pci405/CVS/Entries.Extra u-boot-2009.03/board/esd/pci405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/pci405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pci405/CVS/Entries.Extra 2009-03-25 15:57:20.872021600 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019694/
+/cmd_pci405.c///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/pci405.c///1238019694/
+/pci405.h///1238019694/
+/u-boot.lds///1238019694/
+/writeibm.S///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pci405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/pci405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/pci405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pci405/CVS/Entries.Extra.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019694/
+/cmd_pci405.c///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/pci405.c///1238019694/
+/pci405.h///1238019694/
+/u-boot.lds///1238019694/
+/writeibm.S///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pci405/CVS/Entries.Old u-boot-2009.03/board/esd/pci405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/pci405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pci405/CVS/Entries.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/cmd_pci405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/pci405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/pci405.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/writeibm.S/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pci405/CVS/Repository u-boot-2009.03/board/esd/pci405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/pci405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pci405/CVS/Repository 2009-03-25 15:24:21.556768600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/pci405
diff -Naur u-boot-2009.03_orig/board/esd/pci405/CVS/Root u-boot-2009.03/board/esd/pci405/CVS/Root
--- u-boot-2009.03_orig/board/esd/pci405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pci405/CVS/Root 2009-03-25 15:24:21.556768600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries u-boot-2009.03/board/esd/pf5200/CVS/Entries
--- u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pf5200/CVS/Entries 2009-03-25 15:57:20.934521200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v16m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pf5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries.Extra u-boot-2009.03/board/esd/pf5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pf5200/CVS/Entries.Extra 2009-03-25 15:57:20.934521200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/mt46v16m16-75.h///1238019694/
+/pf5200.c///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/pf5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pf5200/CVS/Entries.Extra.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/mt46v16m16-75.h///1238019694/
+/pf5200.c///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries.Old u-boot-2009.03/board/esd/pf5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/pf5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pf5200/CVS/Entries.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/mt46v16m16-75.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/pf5200.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pf5200/CVS/Repository u-boot-2009.03/board/esd/pf5200/CVS/Repository
--- u-boot-2009.03_orig/board/esd/pf5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pf5200/CVS/Repository 2009-03-25 15:24:21.728641400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/pf5200
diff -Naur u-boot-2009.03_orig/board/esd/pf5200/CVS/Root u-boot-2009.03/board/esd/pf5200/CVS/Root
--- u-boot-2009.03_orig/board/esd/pf5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pf5200/CVS/Root 2009-03-25 15:24:21.713016600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/plu405/CVS/Entries u-boot-2009.03/board/esd/plu405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/plu405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/plu405/CVS/Entries 2009-03-25 15:57:21.012645700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/plu405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/plu405/CVS/Entries.Extra u-boot-2009.03/board/esd/plu405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/plu405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/plu405/CVS/Entries.Extra 2009-03-25 15:57:21.028270600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/plu405.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/plu405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/plu405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/plu405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/plu405/CVS/Entries.Extra.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/plu405.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/plu405/CVS/Entries.Old u-boot-2009.03/board/esd/plu405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/plu405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/plu405/CVS/Entries.Old 2009-03-25 15:24:21.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/plu405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/plu405/CVS/Repository u-boot-2009.03/board/esd/plu405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/plu405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/plu405/CVS/Repository 2009-03-25 15:24:21.838015000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/plu405
diff -Naur u-boot-2009.03_orig/board/esd/plu405/CVS/Root u-boot-2009.03/board/esd/plu405/CVS/Root
--- u-boot-2009.03_orig/board/esd/plu405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/plu405/CVS/Root 2009-03-25 15:24:21.838015000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries u-boot-2009.03/board/esd/pmc405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc405/CVS/Entries 2009-03-25 15:57:21.137644900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pmc405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries.Extra u-boot-2009.03/board/esd/pmc405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc405/CVS/Entries.Extra 2009-03-25 15:57:21.153269800 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/fpgadata.c///1238019694/
+/pmc405.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/pmc405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc405/CVS/Entries.Extra.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019694/
+/config.mk///1238019694/
+/fpgadata.c///1238019694/
+/pmc405.c///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries.Old u-boot-2009.03/board/esd/pmc405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/pmc405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc405/CVS/Entries.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/pmc405.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pmc405/CVS/Repository u-boot-2009.03/board/esd/pmc405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/pmc405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc405/CVS/Repository 2009-03-25 15:24:21.978638200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/pmc405
diff -Naur u-boot-2009.03_orig/board/esd/pmc405/CVS/Root u-boot-2009.03/board/esd/pmc405/CVS/Root
--- u-boot-2009.03_orig/board/esd/pmc405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc405/CVS/Root 2009-03-25 15:24:21.978638200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries u-boot-2009.03/board/esd/pmc440/CVS/Entries
--- u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc440/CVS/Entries 2009-03-25 15:57:21.247019200 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pmc440.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pmc440.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pmc440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-nand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries.Extra u-boot-2009.03/board/esd/pmc440/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc440/CVS/Entries.Extra 2009-03-25 15:57:21.247019200 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019694/
+/cmd_pmc440.c///1238019694/
+/config.mk///1238019694/
+/fpga.c///1238019694/
+/fpga.h///1238019694/
+/init.S///1238019694/
+/pmc440.c///1238019694/
+/pmc440.h///1238019694/
+/sdram.c///1238019694/
+/u-boot-nand.lds///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/pmc440/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc440/CVS/Entries.Extra.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019694/
+/cmd_pmc440.c///1238019694/
+/config.mk///1238019694/
+/fpga.c///1238019694/
+/fpga.h///1238019694/
+/init.S///1238019694/
+/pmc440.c///1238019694/
+/pmc440.h///1238019694/
+/sdram.c///1238019694/
+/u-boot-nand.lds///1238019694/
+/u-boot.lds///1238019694/
diff -Naur u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries.Old u-boot-2009.03/board/esd/pmc440/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/pmc440/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc440/CVS/Entries.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/cmd_pmc440.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpga.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/pmc440.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/pmc440.h/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot-nand.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:34 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/pmc440/CVS/Repository u-boot-2009.03/board/esd/pmc440/CVS/Repository
--- u-boot-2009.03_orig/board/esd/pmc440/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc440/CVS/Repository 2009-03-25 15:24:22.088011800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/pmc440
diff -Naur u-boot-2009.03_orig/board/esd/pmc440/CVS/Root u-boot-2009.03/board/esd/pmc440/CVS/Root
--- u-boot-2009.03_orig/board/esd/pmc440/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/pmc440/CVS/Root 2009-03-25 15:24:22.072387000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries u-boot-2009.03/board/esd/tasreg/CVS/Entries
--- u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/tasreg/CVS/Entries 2009-03-25 15:57:21.340768600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tasreg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries.Extra u-boot-2009.03/board/esd/tasreg/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/tasreg/CVS/Entries.Extra 2009-03-25 15:57:21.356393500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/tasreg.c///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/tasreg/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/tasreg/CVS/Entries.Extra.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019694/
+/flash.c///1238019694/
+/fpgadata.c///1238019694/
+/tasreg.c///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries.Old u-boot-2009.03/board/esd/tasreg/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/tasreg/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/tasreg/CVS/Entries.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:34 2009//
+/tasreg.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/tasreg/CVS/Repository u-boot-2009.03/board/esd/tasreg/CVS/Repository
--- u-boot-2009.03_orig/board/esd/tasreg/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/tasreg/CVS/Repository 2009-03-25 15:24:22.259884600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/tasreg
diff -Naur u-boot-2009.03_orig/board/esd/tasreg/CVS/Root u-boot-2009.03/board/esd/tasreg/CVS/Root
--- u-boot-2009.03_orig/board/esd/tasreg/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/tasreg/CVS/Root 2009-03-25 15:24:22.244259800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/voh405/CVS/Entries u-boot-2009.03/board/esd/voh405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/voh405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/voh405/CVS/Entries 2009-03-25 15:57:21.465767800 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logo_320_240_4bpp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logo_640_480_24bpp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/voh405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/voh405/CVS/Entries.Extra u-boot-2009.03/board/esd/voh405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/voh405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/voh405/CVS/Entries.Extra 2009-03-25 15:57:21.465767800 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/flash.c///1238019695/
+/fpgadata.c///1238019695/
+/logo_320_240_4bpp.c///1238019695/
+/logo_640_480_24bpp.c///1238019695/
+/u-boot.lds///1238019695/
+/voh405.c///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/voh405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/voh405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/voh405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/voh405/CVS/Entries.Extra.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/flash.c///1238019695/
+/fpgadata.c///1238019695/
+/logo_320_240_4bpp.c///1238019695/
+/logo_640_480_24bpp.c///1238019695/
+/u-boot.lds///1238019695/
+/voh405.c///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/voh405/CVS/Entries.Old u-boot-2009.03/board/esd/voh405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/voh405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/voh405/CVS/Entries.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/logo_320_240_4bpp.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/logo_640_480_24bpp.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/voh405.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/voh405/CVS/Repository u-boot-2009.03/board/esd/voh405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/voh405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/voh405/CVS/Repository 2009-03-25 15:24:22.603630200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/voh405
diff -Naur u-boot-2009.03_orig/board/esd/voh405/CVS/Root u-boot-2009.03/board/esd/voh405/CVS/Root
--- u-boot-2009.03_orig/board/esd/voh405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/voh405/CVS/Root 2009-03-25 15:24:22.588005400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/vom405/CVS/Entries u-boot-2009.03/board/esd/vom405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/vom405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/vom405/CVS/Entries 2009-03-25 15:57:21.559517200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vom405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/vom405/CVS/Entries.Extra u-boot-2009.03/board/esd/vom405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/vom405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/vom405/CVS/Entries.Extra 2009-03-25 15:57:21.575142100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/flash.c///1238019695/
+/fpgadata.c///1238019695/
+/u-boot.lds///1238019695/
+/vom405.c///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/vom405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/vom405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/vom405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/vom405/CVS/Entries.Extra.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/flash.c///1238019695/
+/fpgadata.c///1238019695/
+/u-boot.lds///1238019695/
+/vom405.c///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/vom405/CVS/Entries.Old u-boot-2009.03/board/esd/vom405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/vom405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/vom405/CVS/Entries.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/vom405.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/vom405/CVS/Repository u-boot-2009.03/board/esd/vom405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/vom405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/vom405/CVS/Repository 2009-03-25 15:24:22.791127800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/vom405
diff -Naur u-boot-2009.03_orig/board/esd/vom405/CVS/Root u-boot-2009.03/board/esd/vom405/CVS/Root
--- u-boot-2009.03_orig/board/esd/vom405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/vom405/CVS/Root 2009-03-25 15:24:22.791127800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries u-boot-2009.03/board/esd/wuh405/CVS/Entries
--- u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/wuh405/CVS/Entries 2009-03-25 15:57:21.668891500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/wuh405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries.Extra u-boot-2009.03/board/esd/wuh405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/wuh405/CVS/Entries.Extra 2009-03-25 15:57:21.668891500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/flash.c///1238019695/
+/fpgadata.c///1238019695/
+/u-boot.lds///1238019695/
+/wuh405.c///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries.Extra.Old u-boot-2009.03/board/esd/wuh405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/wuh405/CVS/Entries.Extra.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/flash.c///1238019695/
+/fpgadata.c///1238019695/
+/u-boot.lds///1238019695/
+/wuh405.c///1238019695/
diff -Naur u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries.Old u-boot-2009.03/board/esd/wuh405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esd/wuh405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/wuh405/CVS/Entries.Old 2009-03-25 15:24:22.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/wuh405.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esd/wuh405/CVS/Repository u-boot-2009.03/board/esd/wuh405/CVS/Repository
--- u-boot-2009.03_orig/board/esd/wuh405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/wuh405/CVS/Repository 2009-03-25 15:24:22.916126200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esd/wuh405
diff -Naur u-boot-2009.03_orig/board/esd/wuh405/CVS/Root u-boot-2009.03/board/esd/wuh405/CVS/Root
--- u-boot-2009.03_orig/board/esd/wuh405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esd/wuh405/CVS/Root 2009-03-25 15:24:22.900501400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/esteem192e/CVS/Entries u-boot-2009.03/board/esteem192e/CVS/Entries
--- u-boot-2009.03_orig/board/esteem192e/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esteem192e/CVS/Entries 2009-03-25 15:57:21.762640900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/esteem192e.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esteem192e/CVS/Entries.Extra u-boot-2009.03/board/esteem192e/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/esteem192e/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esteem192e/CVS/Entries.Extra 2009-03-25 15:57:21.762640900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/esteem192e.c///1238019695/
+/flash.c///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/esteem192e/CVS/Entries.Extra.Old u-boot-2009.03/board/esteem192e/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/esteem192e/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esteem192e/CVS/Entries.Extra.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/esteem192e.c///1238019695/
+/flash.c///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/esteem192e/CVS/Entries.Old u-boot-2009.03/board/esteem192e/CVS/Entries.Old
--- u-boot-2009.03_orig/board/esteem192e/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esteem192e/CVS/Entries.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/esteem192e.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/esteem192e/CVS/Repository u-boot-2009.03/board/esteem192e/CVS/Repository
--- u-boot-2009.03_orig/board/esteem192e/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esteem192e/CVS/Repository 2009-03-25 15:24:23.072374200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/esteem192e
diff -Naur u-boot-2009.03_orig/board/esteem192e/CVS/Root u-boot-2009.03/board/esteem192e/CVS/Root
--- u-boot-2009.03_orig/board/esteem192e/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/esteem192e/CVS/Root 2009-03-25 15:24:23.072374200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/etin/CVS/Entries u-boot-2009.03/board/etin/CVS/Entries
--- u-boot-2009.03_orig/board/etin/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/CVS/Entries 2009-03-25 15:24:23.541118200 -0700
@@ -0,0 +1,2 @@
+D/debris////
+D/kvme080////
diff -Naur u-boot-2009.03_orig/board/etin/CVS/Entries.Extra u-boot-2009.03/board/etin/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/etin/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/CVS/Entries.Extra 2009-03-25 15:24:23.541118200 -0700
@@ -0,0 +1,2 @@
+D/debris////
+D/kvme080////
diff -Naur u-boot-2009.03_orig/board/etin/CVS/Repository u-boot-2009.03/board/etin/CVS/Repository
--- u-boot-2009.03_orig/board/etin/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/CVS/Repository 2009-03-25 15:24:23.181747800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/etin
diff -Naur u-boot-2009.03_orig/board/etin/CVS/Root u-boot-2009.03/board/etin/CVS/Root
--- u-boot-2009.03_orig/board/etin/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/CVS/Root 2009-03-25 15:24:23.181747800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/etin/debris/CVS/Entries u-boot-2009.03/board/etin/debris/CVS/Entries
--- u-boot-2009.03_orig/board/etin/debris/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/debris/CVS/Entries 2009-03-25 15:57:21.872015200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/debris.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/phantom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/etin/debris/CVS/Entries.Extra u-boot-2009.03/board/etin/debris/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/etin/debris/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/debris/CVS/Entries.Extra 2009-03-25 15:57:21.872015200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/debris.c///1238019695/
+/flash.c///1238019695/
+/phantom.c///1238019695/
+/speed.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/etin/debris/CVS/Entries.Extra.Old u-boot-2009.03/board/etin/debris/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/etin/debris/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/debris/CVS/Entries.Extra.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/debris.c///1238019695/
+/flash.c///1238019695/
+/phantom.c///1238019695/
+/speed.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/etin/debris/CVS/Entries.Old u-boot-2009.03/board/etin/debris/CVS/Entries.Old
--- u-boot-2009.03_orig/board/etin/debris/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/debris/CVS/Entries.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/debris.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/phantom.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/speed.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/etin/debris/CVS/Repository u-boot-2009.03/board/etin/debris/CVS/Repository
--- u-boot-2009.03_orig/board/etin/debris/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/debris/CVS/Repository 2009-03-25 15:24:23.212997400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/etin/debris
diff -Naur u-boot-2009.03_orig/board/etin/debris/CVS/Root u-boot-2009.03/board/etin/debris/CVS/Root
--- u-boot-2009.03_orig/board/etin/debris/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/debris/CVS/Root 2009-03-25 15:24:23.212997400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries u-boot-2009.03/board/etin/kvme080/CVS/Entries
--- u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/kvme080/CVS/Entries 2009-03-25 15:57:21.965764600 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kvme080.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/multiverse.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/multiverse.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries.Extra u-boot-2009.03/board/etin/kvme080/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/kvme080/CVS/Entries.Extra 2009-03-25 15:57:21.965764600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/kvme080.c///1238019695/
+/multiverse.c///1238019695/
+/multiverse.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries.Extra.Old u-boot-2009.03/board/etin/kvme080/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/kvme080/CVS/Entries.Extra.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/kvme080.c///1238019695/
+/multiverse.c///1238019695/
+/multiverse.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries.Old u-boot-2009.03/board/etin/kvme080/CVS/Entries.Old
--- u-boot-2009.03_orig/board/etin/kvme080/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/kvme080/CVS/Entries.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/kvme080.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/multiverse.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/multiverse.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/etin/kvme080/CVS/Repository u-boot-2009.03/board/etin/kvme080/CVS/Repository
--- u-boot-2009.03_orig/board/etin/kvme080/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/kvme080/CVS/Repository 2009-03-25 15:24:23.337995800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/etin/kvme080
diff -Naur u-boot-2009.03_orig/board/etin/kvme080/CVS/Root u-boot-2009.03/board/etin/kvme080/CVS/Root
--- u-boot-2009.03_orig/board/etin/kvme080/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etin/kvme080/CVS/Root 2009-03-25 15:24:23.337995800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/etx094/CVS/Entries u-boot-2009.03/board/etx094/CVS/Entries
--- u-boot-2009.03_orig/board/etx094/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etx094/CVS/Entries 2009-03-25 15:57:22.059514000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/etx094.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/etx094/CVS/Entries.Extra u-boot-2009.03/board/etx094/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/etx094/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etx094/CVS/Entries.Extra 2009-03-25 15:57:22.059514000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/etx094.c///1238019695/
+/flash.c///1238019695/
+/u-boot.lds///1238019695/
+/u-boot.lds.debug///1238019695/
diff -Naur u-boot-2009.03_orig/board/etx094/CVS/Entries.Extra.Old u-boot-2009.03/board/etx094/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/etx094/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etx094/CVS/Entries.Extra.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/etx094.c///1238019695/
+/flash.c///1238019695/
+/u-boot.lds///1238019695/
+/u-boot.lds.debug///1238019695/
diff -Naur u-boot-2009.03_orig/board/etx094/CVS/Entries.Old u-boot-2009.03/board/etx094/CVS/Entries.Old
--- u-boot-2009.03_orig/board/etx094/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etx094/CVS/Entries.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/etx094.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/etx094/CVS/Repository u-boot-2009.03/board/etx094/CVS/Repository
--- u-boot-2009.03_orig/board/etx094/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etx094/CVS/Repository 2009-03-25 15:24:23.587992600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/etx094
diff -Naur u-boot-2009.03_orig/board/etx094/CVS/Root u-boot-2009.03/board/etx094/CVS/Root
--- u-boot-2009.03_orig/board/etx094/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/etx094/CVS/Root 2009-03-25 15:24:23.572367800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/evb4510/CVS/Entries u-boot-2009.03/board/evb4510/CVS/Entries
--- u-boot-2009.03_orig/board/evb4510/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb4510/CVS/Entries 2009-03-25 15:57:22.215763000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/evb4510.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/evb4510/CVS/Entries.Extra u-boot-2009.03/board/evb4510/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/evb4510/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb4510/CVS/Entries.Extra 2009-03-25 15:57:22.215763000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/evb4510.c///1238019695/
+/flash.c///1238019695/
+/lowlevel_init.S///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/evb4510/CVS/Entries.Extra.Old u-boot-2009.03/board/evb4510/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/evb4510/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb4510/CVS/Entries.Extra.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/evb4510.c///1238019695/
+/flash.c///1238019695/
+/lowlevel_init.S///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/evb4510/CVS/Entries.Old u-boot-2009.03/board/evb4510/CVS/Entries.Old
--- u-boot-2009.03_orig/board/evb4510/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb4510/CVS/Entries.Old 2009-03-25 15:24:23.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/evb4510.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/evb4510/CVS/Repository u-boot-2009.03/board/evb4510/CVS/Repository
--- u-boot-2009.03_orig/board/evb4510/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb4510/CVS/Repository 2009-03-25 15:24:23.697366200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/evb4510
diff -Naur u-boot-2009.03_orig/board/evb4510/CVS/Root u-boot-2009.03/board/evb4510/CVS/Root
--- u-boot-2009.03_orig/board/evb4510/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb4510/CVS/Root 2009-03-25 15:24:23.697366200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/evb64260/CVS/Entries u-boot-2009.03/board/evb64260/CVS/Entries
--- u-boot-2009.03_orig/board/evb64260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb64260/CVS/Entries 2009-03-25 15:57:22.450136500 -0700
@@ -0,0 +1,30 @@
+/64260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootseq.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ecctest.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth_addrtbl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth_addrtbl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/evb64260.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intel_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intel_flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zuma_pbb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zuma_pbb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zuma_pbb_mbox.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zuma_pbb_mbox.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/evb64260/CVS/Entries.Extra u-boot-2009.03/board/evb64260/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/evb64260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb64260/CVS/Entries.Extra 2009-03-25 15:57:22.450136500 -0700
@@ -0,0 +1,29 @@
+/64260.h///1238019695/
+/Makefile///1238019695/
+/bootseq.txt///1238019695/
+/config.mk///1238019695/
+/ecctest.c///1238019695/
+/eth.c///1238019695/
+/eth.h///1238019695/
+/eth_addrtbl.c///1238019695/
+/eth_addrtbl.h///1238019695/
+/evb64260.c///1238019695/
+/flash.c///1238019695/
+/i2c.c///1238019695/
+/i2c.h///1238019695/
+/intel_flash.c///1238019695/
+/intel_flash.h///1238019695/
+/local.h///1238019695/
+/memory.c///1238019695/
+/misc.S///1238019695/
+/mpsc.c///1238019695/
+/mpsc.h///1238019695/
+/pci.c///1238019695/
+/sdram_init.c///1238019695/
+/serial.c///1238019695/
+/serial.h///1238019695/
+/u-boot.lds///1238019695/
+/zuma_pbb.c///1238019695/
+/zuma_pbb.h///1238019695/
+/zuma_pbb_mbox.c///1238019695/
+/zuma_pbb_mbox.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/evb64260/CVS/Entries.Extra.Old u-boot-2009.03/board/evb64260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/evb64260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb64260/CVS/Entries.Extra.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,29 @@
+/64260.h///1238019695/
+/Makefile///1238019695/
+/bootseq.txt///1238019695/
+/config.mk///1238019695/
+/ecctest.c///1238019695/
+/eth.c///1238019695/
+/eth.h///1238019695/
+/eth_addrtbl.c///1238019695/
+/eth_addrtbl.h///1238019695/
+/evb64260.c///1238019695/
+/flash.c///1238019695/
+/i2c.c///1238019695/
+/i2c.h///1238019695/
+/intel_flash.c///1238019695/
+/intel_flash.h///1238019695/
+/local.h///1238019695/
+/memory.c///1238019695/
+/misc.S///1238019695/
+/mpsc.c///1238019695/
+/mpsc.h///1238019695/
+/pci.c///1238019695/
+/sdram_init.c///1238019695/
+/serial.c///1238019695/
+/serial.h///1238019695/
+/u-boot.lds///1238019695/
+/zuma_pbb.c///1238019695/
+/zuma_pbb.h///1238019695/
+/zuma_pbb_mbox.c///1238019695/
+/zuma_pbb_mbox.h///1238019695/
diff -Naur u-boot-2009.03_orig/board/evb64260/CVS/Entries.Old u-boot-2009.03/board/evb64260/CVS/Entries.Old
--- u-boot-2009.03_orig/board/evb64260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb64260/CVS/Entries.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,30 @@
+/64260.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/bootseq.txt/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/ecctest.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/eth.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/eth.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/eth_addrtbl.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/eth_addrtbl.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/evb64260.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/i2c.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/intel_flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/intel_flash.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/local.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/memory.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/misc.S/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/mpsc.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/mpsc.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/sdram_init.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/serial.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/zuma_pbb.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/zuma_pbb.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/zuma_pbb_mbox.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/zuma_pbb_mbox.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/evb64260/CVS/Repository u-boot-2009.03/board/evb64260/CVS/Repository
--- u-boot-2009.03_orig/board/evb64260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb64260/CVS/Repository 2009-03-25 15:24:23.837989400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/evb64260
diff -Naur u-boot-2009.03_orig/board/evb64260/CVS/Root u-boot-2009.03/board/evb64260/CVS/Root
--- u-boot-2009.03_orig/board/evb64260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/evb64260/CVS/Root 2009-03-25 15:24:23.837989400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/exbitgen/CVS/Entries u-boot-2009.03/board/exbitgen/CVS/Entries
--- u-boot-2009.03_orig/board/exbitgen/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/exbitgen/CVS/Entries 2009-03-25 15:57:22.543885900 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exbitgen.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exbitgen.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/exbitgen/CVS/Entries.Extra u-boot-2009.03/board/exbitgen/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/exbitgen/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/exbitgen/CVS/Entries.Extra 2009-03-25 15:57:22.543885900 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/exbitgen.c///1238019695/
+/exbitgen.h///1238019695/
+/flash.c///1238019695/
+/init.S///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/exbitgen/CVS/Entries.Extra.Old u-boot-2009.03/board/exbitgen/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/exbitgen/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/exbitgen/CVS/Entries.Extra.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/exbitgen.c///1238019695/
+/exbitgen.h///1238019695/
+/flash.c///1238019695/
+/init.S///1238019695/
+/u-boot.lds///1238019695/
diff -Naur u-boot-2009.03_orig/board/exbitgen/CVS/Entries.Old u-boot-2009.03/board/exbitgen/CVS/Entries.Old
--- u-boot-2009.03_orig/board/exbitgen/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/exbitgen/CVS/Entries.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/exbitgen.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/exbitgen.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/exbitgen/CVS/Repository u-boot-2009.03/board/exbitgen/CVS/Repository
--- u-boot-2009.03_orig/board/exbitgen/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/exbitgen/CVS/Repository 2009-03-25 15:24:24.150485400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/exbitgen
diff -Naur u-boot-2009.03_orig/board/exbitgen/CVS/Root u-boot-2009.03/board/exbitgen/CVS/Root
--- u-boot-2009.03_orig/board/exbitgen/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/exbitgen/CVS/Root 2009-03-25 15:24:24.150485400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/fads/CVS/Entries u-boot-2009.03/board/fads/CVS/Entries
--- u-boot-2009.03_orig/board/fads/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/fads/CVS/Entries 2009-03-25 15:57:22.653260200 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fads.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fads.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lamp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/fads/CVS/Entries.Extra u-boot-2009.03/board/fads/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/fads/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/fads/CVS/Entries.Extra 2009-03-25 15:57:22.668885100 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/fads.c///1238019695/
+/fads.h///1238019695/
+/flash.c///1238019695/
+/lamp.c///1238019695/
+/pcmcia.c///1238019695/
+/u-boot.lds///1238019695/
+/u-boot.lds.debug///1238019695/
diff -Naur u-boot-2009.03_orig/board/fads/CVS/Entries.Extra.Old u-boot-2009.03/board/fads/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/fads/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/fads/CVS/Entries.Extra.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019695/
+/config.mk///1238019695/
+/fads.c///1238019695/
+/fads.h///1238019695/
+/flash.c///1238019695/
+/lamp.c///1238019695/
+/pcmcia.c///1238019695/
+/u-boot.lds///1238019695/
+/u-boot.lds.debug///1238019695/
diff -Naur u-boot-2009.03_orig/board/fads/CVS/Entries.Old u-boot-2009.03/board/fads/CVS/Entries.Old
--- u-boot-2009.03_orig/board/fads/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/fads/CVS/Entries.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/fads.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/fads.h/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/lamp.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:35 2009//
+D
diff -Naur u-boot-2009.03_orig/board/fads/CVS/Repository u-boot-2009.03/board/fads/CVS/Repository
--- u-boot-2009.03_orig/board/fads/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/fads/CVS/Repository 2009-03-25 15:24:24.291108600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/fads
diff -Naur u-boot-2009.03_orig/board/fads/CVS/Root u-boot-2009.03/board/fads/CVS/Root
--- u-boot-2009.03_orig/board/fads/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/fads/CVS/Root 2009-03-25 15:24:24.291108600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/flagadm/CVS/Entries u-boot-2009.03/board/flagadm/CVS/Entries
--- u-boot-2009.03_orig/board/flagadm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/flagadm/CVS/Entries 2009-03-25 15:57:22.762634500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flagadm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/flagadm/CVS/Entries.Extra u-boot-2009.03/board/flagadm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/flagadm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/flagadm/CVS/Entries.Extra 2009-03-25 15:57:22.762634500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019696/
+/config.mk///1238019695/
+/flagadm.c///1238019695/
+/flash.c///1238019696/
+/u-boot.lds///1238019696/
+/u-boot.lds.debug///1238019696/
diff -Naur u-boot-2009.03_orig/board/flagadm/CVS/Entries.Extra.Old u-boot-2009.03/board/flagadm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/flagadm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/flagadm/CVS/Entries.Extra.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019696/
+/config.mk///1238019695/
+/flagadm.c///1238019695/
+/flash.c///1238019696/
+/u-boot.lds///1238019696/
+/u-boot.lds.debug///1238019696/
diff -Naur u-boot-2009.03_orig/board/flagadm/CVS/Entries.Old u-boot-2009.03/board/flagadm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/flagadm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/flagadm/CVS/Entries.Old 2009-03-25 15:24:24.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flagadm.c/1.1.1.1/Wed Mar 25 22:21:35 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/flagadm/CVS/Repository u-boot-2009.03/board/flagadm/CVS/Repository
--- u-boot-2009.03_orig/board/flagadm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/flagadm/CVS/Repository 2009-03-25 15:24:24.712978200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/flagadm
diff -Naur u-boot-2009.03_orig/board/flagadm/CVS/Root u-boot-2009.03/board/flagadm/CVS/Root
--- u-boot-2009.03_orig/board/flagadm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/flagadm/CVS/Root 2009-03-25 15:24:24.712978200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/CVS/Entries u-boot-2009.03/board/freescale/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/CVS/Entries 2009-03-25 15:24:31.228519800 -0700
@@ -0,0 +1,42 @@
+D/common////
+D/m52277evb////
+D/m5235evb////
+D/m5249evb////
+D/m5253demo////
+D/m5253evbe////
+D/m5271evb////
+D/m5272c3////
+D/m5275evb////
+D/m5282evb////
+D/m53017evb////
+D/m5329evb////
+D/m5373evb////
+D/m54451evb////
+D/m54455evb////
+D/m547xevb////
+D/m548xevb////
+D/mpc7448hpc2////
+D/mpc8260ads////
+D/mpc8266ads////
+D/mpc8313erdb////
+D/mpc8315erdb////
+D/mpc8323erdb////
+D/mpc832xemds////
+D/mpc8349emds////
+D/mpc8349itx////
+D/mpc8360emds////
+D/mpc8360erdk////
+D/mpc837xemds////
+D/mpc837xerdb////
+D/mpc8536ds////
+D/mpc8540ads////
+D/mpc8541cds////
+D/mpc8544ds////
+D/mpc8548cds////
+D/mpc8555cds////
+D/mpc8560ads////
+D/mpc8568mds////
+D/mpc8572ds////
+D/mpc8610hpcd////
+D/mpc8641hpcn////
+D/mx31ads////
diff -Naur u-boot-2009.03_orig/board/freescale/CVS/Entries.Extra u-boot-2009.03/board/freescale/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/CVS/Entries.Extra 2009-03-25 15:24:31.228519800 -0700
@@ -0,0 +1,42 @@
+D/common////
+D/m52277evb////
+D/m5235evb////
+D/m5249evb////
+D/m5253demo////
+D/m5253evbe////
+D/m5271evb////
+D/m5272c3////
+D/m5275evb////
+D/m5282evb////
+D/m53017evb////
+D/m5329evb////
+D/m5373evb////
+D/m54451evb////
+D/m54455evb////
+D/m547xevb////
+D/m548xevb////
+D/mpc7448hpc2////
+D/mpc8260ads////
+D/mpc8266ads////
+D/mpc8313erdb////
+D/mpc8315erdb////
+D/mpc8323erdb////
+D/mpc832xemds////
+D/mpc8349emds////
+D/mpc8349itx////
+D/mpc8360emds////
+D/mpc8360erdk////
+D/mpc837xemds////
+D/mpc837xerdb////
+D/mpc8536ds////
+D/mpc8540ads////
+D/mpc8541cds////
+D/mpc8544ds////
+D/mpc8548cds////
+D/mpc8555cds////
+D/mpc8560ads////
+D/mpc8568mds////
+D/mpc8572ds////
+D/mpc8610hpcd////
+D/mpc8641hpcn////
+D/mx31ads////
diff -Naur u-boot-2009.03_orig/board/freescale/CVS/Repository u-boot-2009.03/board/freescale/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/CVS/Repository 2009-03-25 15:24:24.837976600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale
diff -Naur u-boot-2009.03_orig/board/freescale/CVS/Root u-boot-2009.03/board/freescale/CVS/Root
--- u-boot-2009.03_orig/board/freescale/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/CVS/Root 2009-03-25 15:24:24.837976600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/common/CVS/Entries u-boot-2009.03/board/freescale/common/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/common/CVS/Entries 2009-03-25 15:57:22.950133300 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cadmus.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cadmus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cds_pci_ft.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cds_via.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_diu_fb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_diu_fb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_logo_bmp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pixis.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pixis.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pq-mds-pib.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pq-mds-pib.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sgmii_riser.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sgmii_riser.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/via.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/common/CVS/Entries.Extra u-boot-2009.03/board/freescale/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/common/CVS/Entries.Extra 2009-03-25 15:57:22.950133300 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019696/
+/cadmus.c///1238019696/
+/cadmus.h///1238019696/
+/cds_pci_ft.c///1238019696/
+/cds_via.c///1238019696/
+/eeprom.h///1238019696/
+/fsl_diu_fb.c///1238019696/
+/fsl_diu_fb.h///1238019696/
+/fsl_logo_bmp.c///1238019696/
+/pixis.c///1238019696/
+/pixis.h///1238019696/
+/pq-mds-pib.c///1238019696/
+/pq-mds-pib.h///1238019696/
+/sgmii_riser.c///1238019696/
+/sgmii_riser.h///1238019696/
+/sys_eeprom.c///1238019696/
+/via.h///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/common/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/common/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019696/
+/cadmus.c///1238019696/
+/cadmus.h///1238019696/
+/cds_pci_ft.c///1238019696/
+/cds_via.c///1238019696/
+/eeprom.h///1238019696/
+/fsl_diu_fb.c///1238019696/
+/fsl_diu_fb.h///1238019696/
+/fsl_logo_bmp.c///1238019696/
+/pixis.c///1238019696/
+/pixis.h///1238019696/
+/pq-mds-pib.c///1238019696/
+/pq-mds-pib.h///1238019696/
+/sgmii_riser.c///1238019696/
+/sgmii_riser.h///1238019696/
+/sys_eeprom.c///1238019696/
+/via.h///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/common/CVS/Entries.Old u-boot-2009.03/board/freescale/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/common/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/cadmus.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/cadmus.h/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/cds_pci_ft.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/cds_via.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/eeprom.h/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/fsl_diu_fb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/fsl_diu_fb.h/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/fsl_logo_bmp.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/pixis.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/pixis.h/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/pq-mds-pib.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/pq-mds-pib.h/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/sgmii_riser.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/sgmii_riser.h/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/sys_eeprom.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/via.h/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/common/CVS/Repository u-boot-2009.03/board/freescale/common/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/common/CVS/Repository 2009-03-25 15:24:24.869226200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/common
diff -Naur u-boot-2009.03_orig/board/freescale/common/CVS/Root u-boot-2009.03/board/freescale/common/CVS/Root
--- u-boot-2009.03_orig/board/freescale/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/common/CVS/Root 2009-03-25 15:24:24.869226200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries u-boot-2009.03/board/freescale/m52277evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m52277evb/CVS/Entries 2009-03-25 15:57:23.028257800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m52277evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.spa/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.stm/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m52277evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m52277evb/CVS/Entries.Extra 2009-03-25 15:57:23.043882700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m52277evb.c///1238019696/
+/u-boot.spa///1238019696/
+/u-boot.stm///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m52277evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m52277evb/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m52277evb.c///1238019696/
+/u-boot.spa///1238019696/
+/u-boot.stm///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m52277evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m52277evb/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m52277evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.spa/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.stm/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Repository u-boot-2009.03/board/freescale/m52277evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m52277evb/CVS/Repository 2009-03-25 15:24:25.072348600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m52277evb
diff -Naur u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Root u-boot-2009.03/board/freescale/m52277evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m52277evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m52277evb/CVS/Root 2009-03-25 15:24:25.072348600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries u-boot-2009.03/board/freescale/m5235evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5235evb/CVS/Entries 2009-03-25 15:57:23.168881900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5235evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.16/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5235evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5235evb/CVS/Entries.Extra 2009-03-25 15:57:23.168881900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5235evb.c///1238019696/
+/u-boot.16///1238019696/
+/u-boot.32///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5235evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5235evb/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5235evb.c///1238019696/
+/u-boot.16///1238019696/
+/u-boot.32///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m5235evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5235evb/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5235evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.16/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.32/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Repository u-boot-2009.03/board/freescale/m5235evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5235evb/CVS/Repository 2009-03-25 15:24:25.181722200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5235evb
diff -Naur u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Root u-boot-2009.03/board/freescale/m5235evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5235evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5235evb/CVS/Root 2009-03-25 15:24:25.181722200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries u-boot-2009.03/board/freescale/m5249evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5249evb/CVS/Entries 2009-03-25 15:57:23.247006400 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5249evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5249evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5249evb/CVS/Entries.Extra 2009-03-25 15:57:23.247006400 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5249evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5249evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5249evb/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5249evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m5249evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5249evb/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5249evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Repository u-boot-2009.03/board/freescale/m5249evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5249evb/CVS/Repository 2009-03-25 15:24:25.291095800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5249evb
diff -Naur u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Root u-boot-2009.03/board/freescale/m5249evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5249evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5249evb/CVS/Root 2009-03-25 15:24:25.291095800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries u-boot-2009.03/board/freescale/m5253demo/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253demo/CVS/Entries 2009-03-25 15:57:23.325130900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5253demo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5253demo/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253demo/CVS/Entries.Extra 2009-03-25 15:57:23.325130900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/flash.c///1238019696/
+/m5253demo.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5253demo/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253demo/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/flash.c///1238019696/
+/m5253demo.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries.Old u-boot-2009.03/board/freescale/m5253demo/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253demo/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5253demo.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Repository u-boot-2009.03/board/freescale/m5253demo/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253demo/CVS/Repository 2009-03-25 15:24:25.556717400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5253demo
diff -Naur u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Root u-boot-2009.03/board/freescale/m5253demo/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5253demo/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253demo/CVS/Root 2009-03-25 15:24:25.556717400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries 2009-03-25 15:57:23.387630500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5253evbe.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries.Extra 2009-03-25 15:57:23.387630500 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5253evbe.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5253evbe.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries.Old u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253evbe/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5253evbe.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Repository u-boot-2009.03/board/freescale/m5253evbe/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253evbe/CVS/Repository 2009-03-25 15:24:25.712965400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5253evbe
diff -Naur u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Root u-boot-2009.03/board/freescale/m5253evbe/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5253evbe/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5253evbe/CVS/Root 2009-03-25 15:24:25.697340600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries u-boot-2009.03/board/freescale/m5271evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5271evb/CVS/Entries 2009-03-25 15:57:23.465755000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5271evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5271evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5271evb/CVS/Entries.Extra 2009-03-25 15:57:23.465755000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5271evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5271evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5271evb/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5271evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m5271evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5271evb/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5271evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Repository u-boot-2009.03/board/freescale/m5271evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5271evb/CVS/Repository 2009-03-25 15:24:25.806714200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5271evb
diff -Naur u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Root u-boot-2009.03/board/freescale/m5271evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5271evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5271evb/CVS/Root 2009-03-25 15:24:25.806714200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries u-boot-2009.03/board/freescale/m5272c3/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5272c3/CVS/Entries 2009-03-25 15:57:23.543879500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5272c3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5272c3/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5272c3/CVS/Entries.Extra 2009-03-25 15:57:23.543879500 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5272c3.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5272c3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5272c3/CVS/Entries.Extra.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5272c3.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries.Old u-boot-2009.03/board/freescale/m5272c3/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5272c3/CVS/Entries.Old 2009-03-25 15:24:25.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5272c3.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Repository u-boot-2009.03/board/freescale/m5272c3/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5272c3/CVS/Repository 2009-03-25 15:24:25.916087800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5272c3
diff -Naur u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Root u-boot-2009.03/board/freescale/m5272c3/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5272c3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5272c3/CVS/Root 2009-03-25 15:24:25.900463000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries u-boot-2009.03/board/freescale/m5275evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5275evb/CVS/Entries 2009-03-25 15:57:23.622004000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5275evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5275evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5275evb/CVS/Entries.Extra 2009-03-25 15:57:23.622004000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5275evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5275evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5275evb/CVS/Entries.Extra.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5275evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m5275evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5275evb/CVS/Entries.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5275evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Repository u-boot-2009.03/board/freescale/m5275evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5275evb/CVS/Repository 2009-03-25 15:24:26.009836600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5275evb
diff -Naur u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Root u-boot-2009.03/board/freescale/m5275evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5275evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5275evb/CVS/Root 2009-03-25 15:24:26.009836600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries u-boot-2009.03/board/freescale/m5282evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5282evb/CVS/Entries 2009-03-25 15:57:23.700128500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5282evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5282evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5282evb/CVS/Entries.Extra 2009-03-25 15:57:23.700128500 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5282evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5282evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5282evb/CVS/Entries.Extra.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5282evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m5282evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5282evb/CVS/Entries.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5282evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Repository u-boot-2009.03/board/freescale/m5282evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5282evb/CVS/Repository 2009-03-25 15:24:26.103585400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5282evb
diff -Naur u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Root u-boot-2009.03/board/freescale/m5282evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5282evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5282evb/CVS/Root 2009-03-25 15:24:26.103585400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries u-boot-2009.03/board/freescale/m53017evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m53017evb/CVS/Entries 2009-03-25 15:57:23.793877900 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m53017evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m53017evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m53017evb/CVS/Entries.Extra 2009-03-25 15:57:23.793877900 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m53017evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m53017evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m53017evb/CVS/Entries.Extra.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m53017evb.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m53017evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m53017evb/CVS/Entries.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m53017evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Repository u-boot-2009.03/board/freescale/m53017evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m53017evb/CVS/Repository 2009-03-25 15:24:26.181709400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m53017evb
diff -Naur u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Root u-boot-2009.03/board/freescale/m53017evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m53017evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m53017evb/CVS/Root 2009-03-25 15:24:26.181709400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries u-boot-2009.03/board/freescale/m5329evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5329evb/CVS/Entries 2009-03-25 15:57:23.872002400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5329evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5329evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5329evb/CVS/Entries.Extra 2009-03-25 15:57:23.872002400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5329evb.c///1238019696/
+/nand.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5329evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5329evb/CVS/Entries.Extra.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5329evb.c///1238019696/
+/nand.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m5329evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5329evb/CVS/Entries.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5329evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Repository u-boot-2009.03/board/freescale/m5329evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5329evb/CVS/Repository 2009-03-25 15:24:26.291083000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5329evb
diff -Naur u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Root u-boot-2009.03/board/freescale/m5329evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5329evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5329evb/CVS/Root 2009-03-25 15:24:26.291083000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries u-boot-2009.03/board/freescale/m5373evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5373evb/CVS/Entries 2009-03-25 15:57:23.965751800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5373evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m5373evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5373evb/CVS/Entries.Extra 2009-03-25 15:57:23.965751800 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5373evb.c///1238019696/
+/nand.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m5373evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5373evb/CVS/Entries.Extra.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m5373evb.c///1238019696/
+/nand.c///1238019696/
+/u-boot.lds///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m5373evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5373evb/CVS/Entries.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m5373evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Repository u-boot-2009.03/board/freescale/m5373evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5373evb/CVS/Repository 2009-03-25 15:24:26.634828600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m5373evb
diff -Naur u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Root u-boot-2009.03/board/freescale/m5373evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m5373evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m5373evb/CVS/Root 2009-03-25 15:24:26.634828600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries u-boot-2009.03/board/freescale/m54451evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54451evb/CVS/Entries 2009-03-25 15:57:24.043876300 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m54451evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.spa/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.stm/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m54451evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54451evb/CVS/Entries.Extra 2009-03-25 15:57:24.043876300 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m54451evb.c///1238019696/
+/u-boot.spa///1238019696/
+/u-boot.stm///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m54451evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54451evb/CVS/Entries.Extra.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m54451evb.c///1238019696/
+/u-boot.spa///1238019696/
+/u-boot.stm///1238019696/
diff -Naur u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m54451evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54451evb/CVS/Entries.Old 2009-03-25 15:24:26.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m54451evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.spa/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.stm/1.1.1.1/Wed Mar 25 22:21:36 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Repository u-boot-2009.03/board/freescale/m54451evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54451evb/CVS/Repository 2009-03-25 15:24:26.884825400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m54451evb
diff -Naur u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Root u-boot-2009.03/board/freescale/m54451evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m54451evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54451evb/CVS/Root 2009-03-25 15:24:26.884825400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries u-boot-2009.03/board/freescale/m54455evb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54455evb/CVS/Entries 2009-03-25 15:57:24.200125300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m54455evb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.atm/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.int/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.stm/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m54455evb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54455evb/CVS/Entries.Extra 2009-03-25 15:57:24.200125300 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m54455evb.c///1238019696/
+/u-boot.atm///1238019696/
+/u-boot.int///1238019696/
+/u-boot.stm///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m54455evb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54455evb/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019696/
+/config.mk///1238019696/
+/m54455evb.c///1238019696/
+/u-boot.atm///1238019696/
+/u-boot.int///1238019696/
+/u-boot.stm///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries.Old u-boot-2009.03/board/freescale/m54455evb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54455evb/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/m54455evb.c/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.atm/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.int/1.1.1.1/Wed Mar 25 22:21:36 2009//
+/u-boot.stm/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Repository u-boot-2009.03/board/freescale/m54455evb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54455evb/CVS/Repository 2009-03-25 15:24:27.041073400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m54455evb
diff -Naur u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Root u-boot-2009.03/board/freescale/m54455evb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m54455evb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m54455evb/CVS/Root 2009-03-25 15:24:27.041073400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries u-boot-2009.03/board/freescale/m547xevb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m547xevb/CVS/Entries 2009-03-25 15:57:24.278249800 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m547xevb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m547xevb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m547xevb/CVS/Entries.Extra 2009-03-25 15:57:24.278249800 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/m547xevb.c///1238019697/
+/u-boot.lds///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m547xevb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m547xevb/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/m547xevb.c///1238019697/
+/u-boot.lds///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries.Old u-boot-2009.03/board/freescale/m547xevb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m547xevb/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/m547xevb.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Repository u-boot-2009.03/board/freescale/m547xevb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m547xevb/CVS/Repository 2009-03-25 15:24:27.166071800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m547xevb
diff -Naur u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Root u-boot-2009.03/board/freescale/m547xevb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m547xevb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m547xevb/CVS/Root 2009-03-25 15:24:27.166071800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries u-boot-2009.03/board/freescale/m548xevb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m548xevb/CVS/Entries 2009-03-25 15:57:24.356374300 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m548xevb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries.Extra u-boot-2009.03/board/freescale/m548xevb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m548xevb/CVS/Entries.Extra 2009-03-25 15:57:24.356374300 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/m548xevb.c///1238019697/
+/u-boot.lds///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/m548xevb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m548xevb/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/m548xevb.c///1238019697/
+/u-boot.lds///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries.Old u-boot-2009.03/board/freescale/m548xevb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m548xevb/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/m548xevb.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Repository u-boot-2009.03/board/freescale/m548xevb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m548xevb/CVS/Repository 2009-03-25 15:24:27.259820600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/m548xevb
diff -Naur u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Root u-boot-2009.03/board/freescale/m548xevb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/m548xevb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/m548xevb/CVS/Root 2009-03-25 15:24:27.244195800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries 2009-03-25 15:57:24.450123700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asm_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc7448hpc2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsi108_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries.Extra 2009-03-25 15:57:24.450123700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019697/
+/asm_init.S///1238019697/
+/config.mk///1238019697/
+/mpc7448hpc2.c///1238019697/
+/tsi108_init.c///1238019697/
+/u-boot.lds///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019697/
+/asm_init.S///1238019697/
+/config.mk///1238019697/
+/mpc7448hpc2.c///1238019697/
+/tsi108_init.c///1238019697/
+/u-boot.lds///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/asm_init.S/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc7448hpc2.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/tsi108_init.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Repository u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Repository 2009-03-25 15:24:27.353569400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc7448hpc2
diff -Naur u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Root u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc7448hpc2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc7448hpc2/CVS/Root 2009-03-25 15:24:27.353569400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries 2009-03-25 15:57:24.543873100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8260ads.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries.Extra 2009-03-25 15:57:24.543873100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/flash.c///1238019697/
+/mpc8260ads.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/flash.c///1238019697/
+/mpc8260ads.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8260ads/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8260ads.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Repository u-boot-2009.03/board/freescale/mpc8260ads/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8260ads/CVS/Repository 2009-03-25 15:24:27.619191000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8260ads
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Root u-boot-2009.03/board/freescale/mpc8260ads/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8260ads/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8260ads/CVS/Root 2009-03-25 15:24:27.619191000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries 2009-03-25 15:57:24.621997600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8266ads.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries.Extra 2009-03-25 15:57:24.621997600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/flash.c///1238019697/
+/mpc8266ads.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/flash.c///1238019697/
+/mpc8266ads.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8266ads/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8266ads.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Repository u-boot-2009.03/board/freescale/mpc8266ads/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8266ads/CVS/Repository 2009-03-25 15:24:27.728564600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8266ads
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Root u-boot-2009.03/board/freescale/mpc8266ads/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8266ads/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8266ads/CVS/Root 2009-03-25 15:24:27.728564600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries 2009-03-25 15:57:24.700122100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8313erdb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries.Extra 2009-03-25 15:57:24.700122100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8313erdb.c///1238019697/
+/sdram.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8313erdb.c///1238019697/
+/sdram.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8313erdb.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Repository u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Repository 2009-03-25 15:24:27.837938200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8313erdb
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Root u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8313erdb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8313erdb/CVS/Root 2009-03-25 15:24:27.822313400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries 2009-03-25 15:57:24.778246600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8315erdb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries.Extra 2009-03-25 15:57:24.778246600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8315erdb.c///1238019697/
+/sdram.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries.Extra.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8315erdb.c///1238019697/
+/sdram.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Entries.Old 2009-03-25 15:24:27.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8315erdb.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Repository u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Repository 2009-03-25 15:24:27.931687000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8315erdb
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Root u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8315erdb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8315erdb/CVS/Root 2009-03-25 15:24:27.931687000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries 2009-03-25 15:57:24.840746200 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8323erdb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries.Extra 2009-03-25 15:57:24.840746200 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8323erdb.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries.Extra.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8323erdb.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Entries.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8323erdb.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Repository u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Repository 2009-03-25 15:24:28.025435800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8323erdb
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Root u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8323erdb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8323erdb/CVS/Root 2009-03-25 15:24:28.025435800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries 2009-03-25 15:57:24.918870700 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc832xemds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries.Extra 2009-03-25 15:57:24.918870700 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc832xemds.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries.Extra.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc832xemds.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc832xemds/CVS/Entries.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc832xemds.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Repository u-boot-2009.03/board/freescale/mpc832xemds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc832xemds/CVS/Repository 2009-03-25 15:24:28.119184600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc832xemds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Root u-boot-2009.03/board/freescale/mpc832xemds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc832xemds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc832xemds/CVS/Root 2009-03-25 15:24:28.119184600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries 2009-03-25 15:57:24.996995200 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8349emds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries.Extra 2009-03-25 15:57:24.996995200 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8349emds.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries.Extra.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8349emds.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349emds/CVS/Entries.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8349emds.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Repository u-boot-2009.03/board/freescale/mpc8349emds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349emds/CVS/Repository 2009-03-25 15:24:28.244183000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8349emds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Root u-boot-2009.03/board/freescale/mpc8349emds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8349emds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349emds/CVS/Root 2009-03-25 15:24:28.244183000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries 2009-03-25 15:57:25.106369500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8349itx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries.Extra 2009-03-25 15:57:25.106369500 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8349itx.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries.Extra.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8349itx.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349itx/CVS/Entries.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8349itx.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Repository u-boot-2009.03/board/freescale/mpc8349itx/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349itx/CVS/Repository 2009-03-25 15:24:28.353556600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8349itx
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Root u-boot-2009.03/board/freescale/mpc8349itx/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8349itx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8349itx/CVS/Root 2009-03-25 15:24:28.353556600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries 2009-03-25 15:57:25.184494000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8360emds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries.Extra 2009-03-25 15:57:25.184494000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8360emds.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries.Extra.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8360emds.c///1238019697/
+/pci.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360emds/CVS/Entries.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8360emds.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Repository u-boot-2009.03/board/freescale/mpc8360emds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360emds/CVS/Repository 2009-03-25 15:24:28.712927000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8360emds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Root u-boot-2009.03/board/freescale/mpc8360emds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8360emds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360emds/CVS/Root 2009-03-25 15:24:28.712927000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries 2009-03-25 15:57:25.262618500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8360erdk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries.Extra 2009-03-25 15:57:25.278243400 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8360erdk.c///1238019697/
+/nand.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries.Extra.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc8360erdk.c///1238019697/
+/nand.c///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Entries.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc8360erdk.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Repository u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Repository 2009-03-25 15:24:28.806675800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8360erdk
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Root u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8360erdk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8360erdk/CVS/Root 2009-03-25 15:24:28.806675800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries 2009-03-25 15:57:25.356367900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc837xemds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries.Extra 2009-03-25 15:57:25.371992800 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc837xemds.c///1238019697/
+/pci.c///1238019697/
+/pci.h///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries.Extra.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019697/
+/config.mk///1238019697/
+/mpc837xemds.c///1238019697/
+/pci.c///1238019697/
+/pci.h///1238019697/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xemds/CVS/Entries.Old 2009-03-25 15:24:28.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/mpc837xemds.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:37 2009//
+/pci.h/1.1.1.1/Wed Mar 25 22:21:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Repository u-boot-2009.03/board/freescale/mpc837xemds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xemds/CVS/Repository 2009-03-25 15:24:28.931674200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc837xemds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Root u-boot-2009.03/board/freescale/mpc837xemds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc837xemds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xemds/CVS/Root 2009-03-25 15:24:28.916049400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries 2009-03-25 15:57:25.450117300 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc837xerdb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries.Extra 2009-03-25 15:57:25.450117300 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/mpc837xerdb.c///1238019698/
+/pci.c///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries.Extra.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/mpc837xerdb.c///1238019698/
+/pci.c///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Entries.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc837xerdb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Repository u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Repository 2009-03-25 15:24:29.041047800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc837xerdb
diff -Naur u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Root u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc837xerdb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc837xerdb/CVS/Root 2009-03-25 15:24:29.041047800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries 2009-03-25 15:57:25.543866700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8536ds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries.Extra 2009-03-25 15:57:25.543866700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8536ds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries.Extra.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8536ds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8536ds/CVS/Entries.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8536ds.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Repository u-boot-2009.03/board/freescale/mpc8536ds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8536ds/CVS/Repository 2009-03-25 15:24:29.150421400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8536ds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Root u-boot-2009.03/board/freescale/mpc8536ds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8536ds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8536ds/CVS/Root 2009-03-25 15:24:29.150421400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries 2009-03-25 15:57:25.653241000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8540ads.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries.Extra 2009-03-25 15:57:25.653241000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8540ads.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries.Extra.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8540ads.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8540ads/CVS/Entries.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8540ads.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Repository u-boot-2009.03/board/freescale/mpc8540ads/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8540ads/CVS/Repository 2009-03-25 15:24:29.275419800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8540ads
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Root u-boot-2009.03/board/freescale/mpc8540ads/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8540ads/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8540ads/CVS/Root 2009-03-25 15:24:29.275419800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries 2009-03-25 15:57:25.746990400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8541cds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries.Extra 2009-03-25 15:57:25.762615300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8541cds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries.Extra.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8541cds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8541cds/CVS/Entries.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8541cds.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Repository u-boot-2009.03/board/freescale/mpc8541cds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8541cds/CVS/Repository 2009-03-25 15:24:29.681664600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8541cds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Root u-boot-2009.03/board/freescale/mpc8541cds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8541cds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8541cds/CVS/Root 2009-03-25 15:24:29.681664600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries 2009-03-25 15:57:25.840739800 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8544ds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries.Extra 2009-03-25 15:57:25.840739800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8544ds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries.Extra.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8544ds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8544ds/CVS/Entries.Old 2009-03-25 15:24:29.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8544ds.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Repository u-boot-2009.03/board/freescale/mpc8544ds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8544ds/CVS/Repository 2009-03-25 15:24:29.822287800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8544ds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Root u-boot-2009.03/board/freescale/mpc8544ds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8544ds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8544ds/CVS/Root 2009-03-25 15:24:29.822287800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries 2009-03-25 15:57:25.934489200 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8548cds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries.Extra 2009-03-25 15:57:25.934489200 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8548cds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries.Extra.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8548cds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8548cds/CVS/Entries.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8548cds.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Repository u-boot-2009.03/board/freescale/mpc8548cds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8548cds/CVS/Repository 2009-03-25 15:24:29.962911000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8548cds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Root u-boot-2009.03/board/freescale/mpc8548cds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8548cds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8548cds/CVS/Root 2009-03-25 15:24:29.962911000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries 2009-03-25 15:57:26.028238600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8555cds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries.Extra 2009-03-25 15:57:26.028238600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8555cds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries.Extra.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8555cds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8555cds/CVS/Entries.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8555cds.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Repository u-boot-2009.03/board/freescale/mpc8555cds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8555cds/CVS/Repository 2009-03-25 15:24:30.087909400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8555cds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Root u-boot-2009.03/board/freescale/mpc8555cds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8555cds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8555cds/CVS/Root 2009-03-25 15:24:30.087909400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries 2009-03-25 15:57:26.168862700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8560ads.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries.Extra 2009-03-25 15:57:26.168862700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8560ads.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries.Extra.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8560ads.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8560ads/CVS/Entries.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8560ads.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Repository u-boot-2009.03/board/freescale/mpc8560ads/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8560ads/CVS/Repository 2009-03-25 15:24:30.228532600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8560ads
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Root u-boot-2009.03/board/freescale/mpc8560ads/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8560ads/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8560ads/CVS/Root 2009-03-25 15:24:30.228532600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries 2009-03-25 15:57:26.278237000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcsr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcsr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8568mds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries.Extra 2009-03-25 15:57:26.293861900 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019698/
+/bcsr.c///1238019698/
+/bcsr.h///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8568mds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries.Extra.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019698/
+/bcsr.c///1238019698/
+/bcsr.h///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8568mds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8568mds/CVS/Entries.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/bcsr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/bcsr.h/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8568mds.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Repository u-boot-2009.03/board/freescale/mpc8568mds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8568mds/CVS/Repository 2009-03-25 15:24:30.369155800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8568mds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Root u-boot-2009.03/board/freescale/mpc8568mds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8568mds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8568mds/CVS/Root 2009-03-25 15:24:30.353531000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries 2009-03-25 15:57:26.403236200 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8572ds.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries.Extra 2009-03-25 15:57:26.403236200 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8572ds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries.Extra.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8572ds.c///1238019698/
+/tlb.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8572ds/CVS/Entries.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8572ds.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Repository u-boot-2009.03/board/freescale/mpc8572ds/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8572ds/CVS/Repository 2009-03-25 15:24:30.697276600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8572ds
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Root u-boot-2009.03/board/freescale/mpc8572ds/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8572ds/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8572ds/CVS/Root 2009-03-25 15:24:30.697276600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries 2009-03-25 15:57:26.496985600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8610hpcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8610hpcd_diu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries.Extra 2009-03-25 15:57:26.496985600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8610hpcd.c///1238019698/
+/mpc8610hpcd_diu.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries.Extra.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8610hpcd.c///1238019698/
+/mpc8610hpcd_diu.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Entries.Old 2009-03-25 15:24:30.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8610hpcd.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8610hpcd_diu.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Repository u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Repository 2009-03-25 15:24:30.853524600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8610hpcd
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Root u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8610hpcd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8610hpcd/CVS/Root 2009-03-25 15:24:30.853524600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries 2009-03-25 15:57:26.590735000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8641hpcn.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries.Extra u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries.Extra 2009-03-25 15:57:26.590735000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8641hpcn.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries.Extra.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/ddr.c///1238019698/
+/law.c///1238019698/
+/mpc8641hpcn.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries.Old u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Entries.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mpc8641hpcn.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Repository u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Repository 2009-03-25 15:24:30.994147800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mpc8641hpcn
diff -Naur u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Root u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mpc8641hpcn/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mpc8641hpcn/CVS/Root 2009-03-25 15:24:30.994147800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries u-boot-2009.03/board/freescale/mx31ads/CVS/Entries
--- u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mx31ads/CVS/Entries 2009-03-25 15:57:26.684484400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx31ads.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries.Extra u-boot-2009.03/board/freescale/mx31ads/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mx31ads/CVS/Entries.Extra 2009-03-25 15:57:26.684484400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/lowlevel_init.S///1238019698/
+/mx31ads.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries.Extra.Old u-boot-2009.03/board/freescale/mx31ads/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mx31ads/CVS/Entries.Extra.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/lowlevel_init.S///1238019698/
+/mx31ads.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries.Old u-boot-2009.03/board/freescale/mx31ads/CVS/Entries.Old
--- u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mx31ads/CVS/Entries.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/mx31ads.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Repository u-boot-2009.03/board/freescale/mx31ads/CVS/Repository
--- u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mx31ads/CVS/Repository 2009-03-25 15:24:31.119146200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/freescale/mx31ads
diff -Naur u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Root u-boot-2009.03/board/freescale/mx31ads/CVS/Root
--- u-boot-2009.03_orig/board/freescale/mx31ads/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/freescale/mx31ads/CVS/Root 2009-03-25 15:24:31.119146200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/funkwerk/CVS/Entries u-boot-2009.03/board/funkwerk/CVS/Entries
--- u-boot-2009.03_orig/board/funkwerk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/CVS/Entries 2009-03-25 15:24:31.634764600 -0700
@@ -0,0 +1 @@
+D/vovpn-gw////
diff -Naur u-boot-2009.03_orig/board/funkwerk/CVS/Entries.Extra u-boot-2009.03/board/funkwerk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/funkwerk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/CVS/Entries.Extra 2009-03-25 15:24:31.634764600 -0700
@@ -0,0 +1 @@
+D/vovpn-gw////
diff -Naur u-boot-2009.03_orig/board/funkwerk/CVS/Repository u-boot-2009.03/board/funkwerk/CVS/Repository
--- u-boot-2009.03_orig/board/funkwerk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/CVS/Repository 2009-03-25 15:24:31.275394200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/funkwerk
diff -Naur u-boot-2009.03_orig/board/funkwerk/CVS/Root u-boot-2009.03/board/funkwerk/CVS/Root
--- u-boot-2009.03_orig/board/funkwerk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/CVS/Root 2009-03-25 15:24:31.259769400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries
--- u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries 2009-03-25 15:57:26.793858700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m88e6060.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m88e6060.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vovpn-gw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries.Extra u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries.Extra 2009-03-25 15:57:26.793858700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/flash.c///1238019698/
+/m88e6060.c///1238019698/
+/m88e6060.h///1238019698/
+/vovpn-gw.c///1238019698/
diff -Naur u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries.Extra.Old u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries.Extra.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/flash.c///1238019698/
+/m88e6060.c///1238019698/
+/m88e6060.h///1238019698/
+/vovpn-gw.c///1238019698/
diff -Naur u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries.Old u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries.Old
--- u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Entries.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/m88e6060.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/m88e6060.h/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/vovpn-gw.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Repository u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Repository
--- u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Repository 2009-03-25 15:24:31.291019000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/funkwerk/vovpn-gw
diff -Naur u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Root u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Root
--- u-boot-2009.03_orig/board/funkwerk/vovpn-gw/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/funkwerk/vovpn-gw/CVS/Root 2009-03-25 15:24:31.291019000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/g2000/CVS/Entries u-boot-2009.03/board/g2000/CVS/Entries
--- u-boot-2009.03_orig/board/g2000/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/g2000/CVS/Entries 2009-03-25 15:57:26.871983200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/g2000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/strataflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/g2000/CVS/Entries.Extra u-boot-2009.03/board/g2000/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/g2000/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/g2000/CVS/Entries.Extra 2009-03-25 15:57:26.887608100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/g2000.c///1238019698/
+/strataflash.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/g2000/CVS/Entries.Extra.Old u-boot-2009.03/board/g2000/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/g2000/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/g2000/CVS/Entries.Extra.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/g2000.c///1238019698/
+/strataflash.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/g2000/CVS/Entries.Old u-boot-2009.03/board/g2000/CVS/Entries.Old
--- u-boot-2009.03_orig/board/g2000/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/g2000/CVS/Entries.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/g2000.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/strataflash.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/g2000/CVS/Repository u-boot-2009.03/board/g2000/CVS/Repository
--- u-boot-2009.03_orig/board/g2000/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/g2000/CVS/Repository 2009-03-25 15:24:31.728513400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/g2000
diff -Naur u-boot-2009.03_orig/board/g2000/CVS/Root u-boot-2009.03/board/g2000/CVS/Root
--- u-boot-2009.03_orig/board/g2000/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/g2000/CVS/Root 2009-03-25 15:24:31.728513400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gaisler/CVS/Entries u-boot-2009.03/board/gaisler/CVS/Entries
--- u-boot-2009.03_orig/board/gaisler/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/CVS/Entries 2009-03-25 15:24:32.556627800 -0700
@@ -0,0 +1,5 @@
+D/gr_cpci_ax2000////
+D/gr_ep2s60////
+D/gr_xc3s_1500////
+D/grsim////
+D/grsim_leon2////
diff -Naur u-boot-2009.03_orig/board/gaisler/CVS/Entries.Extra u-boot-2009.03/board/gaisler/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gaisler/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/CVS/Entries.Extra 2009-03-25 15:24:32.572252600 -0700
@@ -0,0 +1,5 @@
+D/gr_cpci_ax2000////
+D/gr_ep2s60////
+D/gr_xc3s_1500////
+D/grsim////
+D/grsim_leon2////
diff -Naur u-boot-2009.03_orig/board/gaisler/CVS/Repository u-boot-2009.03/board/gaisler/CVS/Repository
--- u-boot-2009.03_orig/board/gaisler/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/CVS/Repository 2009-03-25 15:24:31.837887000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gaisler
diff -Naur u-boot-2009.03_orig/board/gaisler/CVS/Root u-boot-2009.03/board/gaisler/CVS/Root
--- u-boot-2009.03_orig/board/gaisler/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/CVS/Root 2009-03-25 15:24:31.837887000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries
--- u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries 2009-03-25 15:57:26.965732600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_cpci_ax2000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra 2009-03-25 15:57:26.965732600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gr_cpci_ax2000.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra.Old u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries.Extra.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gr_cpci_ax2000.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries.Old u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Entries.Old 2009-03-25 15:24:31.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gr_cpci_ax2000.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Repository u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Repository
--- u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Repository 2009-03-25 15:24:31.869136600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gaisler/gr_cpci_ax2000
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Root u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Root
--- u-boot-2009.03_orig/board/gaisler/gr_cpci_ax2000/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_cpci_ax2000/CVS/Root 2009-03-25 15:24:31.869136600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries
--- u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries 2009-03-25 15:57:27.028232200 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_ep2s60.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries.Extra u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries.Extra 2009-03-25 15:57:27.028232200 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gr_ep2s60.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries.Extra.Old u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries.Extra.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gr_ep2s60.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries.Old u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Entries.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gr_ep2s60.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Repository u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Repository
--- u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Repository 2009-03-25 15:24:31.978510200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gaisler/gr_ep2s60
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Root u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Root
--- u-boot-2009.03_orig/board/gaisler/gr_ep2s60/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_ep2s60/CVS/Root 2009-03-25 15:24:31.962885400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries
--- u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries 2009-03-25 15:57:27.246980800 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_xc3s_1500.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra 2009-03-25 15:57:27.246980800 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gr_xc3s_1500.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra.Old u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries.Extra.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gr_xc3s_1500.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries.Old u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Entries.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gr_xc3s_1500.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Repository u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Repository
--- u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Repository 2009-03-25 15:24:32.072259000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gaisler/gr_xc3s_1500
diff -Naur u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Root u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Root
--- u-boot-2009.03_orig/board/gaisler/gr_xc3s_1500/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/gr_xc3s_1500/CVS/Root 2009-03-25 15:24:32.072259000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries u-boot-2009.03/board/gaisler/grsim/CVS/Entries
--- u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim/CVS/Entries 2009-03-25 15:57:27.418854700 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/grsim.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries.Extra u-boot-2009.03/board/gaisler/grsim/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim/CVS/Entries.Extra 2009-03-25 15:57:27.418854700 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/grsim.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries.Extra.Old u-boot-2009.03/board/gaisler/grsim/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim/CVS/Entries.Extra.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/grsim.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries.Old u-boot-2009.03/board/gaisler/grsim/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gaisler/grsim/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim/CVS/Entries.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/grsim.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim/CVS/Repository u-boot-2009.03/board/gaisler/grsim/CVS/Repository
--- u-boot-2009.03_orig/board/gaisler/grsim/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim/CVS/Repository 2009-03-25 15:24:32.197257400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gaisler/grsim
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim/CVS/Root u-boot-2009.03/board/gaisler/grsim/CVS/Root
--- u-boot-2009.03_orig/board/gaisler/grsim/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim/CVS/Root 2009-03-25 15:24:32.197257400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries
--- u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries 2009-03-25 15:57:27.512604100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/grsim_leon2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries.Extra u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries.Extra 2009-03-25 15:57:27.512604100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/grsim_leon2.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries.Extra.Old u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries.Extra.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019698/
+/config.mk///1238019698/
+/grsim_leon2.c///1238019698/
+/u-boot.lds///1238019698/
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries.Old u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Entries.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/grsim_leon2.c/1.1.1.1/Wed Mar 25 22:21:38 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Repository u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Repository
--- u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Repository 2009-03-25 15:24:32.306631000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gaisler/grsim_leon2
diff -Naur u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Root u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Root
--- u-boot-2009.03_orig/board/gaisler/grsim_leon2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gaisler/grsim_leon2/CVS/Root 2009-03-25 15:24:32.306631000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gcplus/CVS/Entries u-boot-2009.03/board/gcplus/CVS/Entries
--- u-boot-2009.03_orig/board/gcplus/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gcplus/CVS/Entries 2009-03-25 15:57:27.606353500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gcplus.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gcplus/CVS/Entries.Extra u-boot-2009.03/board/gcplus/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gcplus/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gcplus/CVS/Entries.Extra 2009-03-25 15:57:27.606353500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/gcplus.c///1238019699/
+/lowlevel_init.S///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gcplus/CVS/Entries.Extra.Old u-boot-2009.03/board/gcplus/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gcplus/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gcplus/CVS/Entries.Extra.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/gcplus.c///1238019699/
+/lowlevel_init.S///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gcplus/CVS/Entries.Old u-boot-2009.03/board/gcplus/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gcplus/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gcplus/CVS/Entries.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gcplus.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gcplus/CVS/Repository u-boot-2009.03/board/gcplus/CVS/Repository
--- u-boot-2009.03_orig/board/gcplus/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gcplus/CVS/Repository 2009-03-25 15:24:32.634751800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gcplus
diff -Naur u-boot-2009.03_orig/board/gcplus/CVS/Root u-boot-2009.03/board/gcplus/CVS/Root
--- u-boot-2009.03_orig/board/gcplus/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gcplus/CVS/Root 2009-03-25 15:24:32.634751800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gdsys/CVS/Entries u-boot-2009.03/board/gdsys/CVS/Entries
--- u-boot-2009.03_orig/board/gdsys/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/CVS/Entries 2009-03-25 15:24:32.994122200 -0700
@@ -0,0 +1,2 @@
+D/gdppc440etx////
+D/neo////
diff -Naur u-boot-2009.03_orig/board/gdsys/CVS/Entries.Extra u-boot-2009.03/board/gdsys/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gdsys/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/CVS/Entries.Extra 2009-03-25 15:24:32.994122200 -0700
@@ -0,0 +1,2 @@
+D/gdppc440etx////
+D/neo////
diff -Naur u-boot-2009.03_orig/board/gdsys/CVS/Repository u-boot-2009.03/board/gdsys/CVS/Repository
--- u-boot-2009.03_orig/board/gdsys/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/CVS/Repository 2009-03-25 15:24:32.759750200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gdsys
diff -Naur u-boot-2009.03_orig/board/gdsys/CVS/Root u-boot-2009.03/board/gdsys/CVS/Root
--- u-boot-2009.03_orig/board/gdsys/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/CVS/Root 2009-03-25 15:24:32.759750200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries
--- u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries 2009-03-25 15:57:27.700102900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gdppc440etx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries.Extra u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries.Extra 2009-03-25 15:57:27.700102900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gdppc440etx.c///1238019699/
+/init.S///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries.Extra.Old u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries.Extra.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/gdppc440etx.c///1238019699/
+/init.S///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries.Old u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Entries.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gdppc440etx.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Repository u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Repository
--- u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Repository 2009-03-25 15:24:32.790999800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gdsys/gdppc440etx
diff -Naur u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Root u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Root
--- u-boot-2009.03_orig/board/gdsys/gdppc440etx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/gdppc440etx/CVS/Root 2009-03-25 15:24:32.790999800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries u-boot-2009.03/board/gdsys/neo/CVS/Entries
--- u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/neo/CVS/Entries 2009-03-25 15:57:27.793852300 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/neo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries.Extra u-boot-2009.03/board/gdsys/neo/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/neo/CVS/Entries.Extra 2009-03-25 15:57:27.793852300 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/neo.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries.Extra.Old u-boot-2009.03/board/gdsys/neo/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/neo/CVS/Entries.Extra.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/neo.c///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries.Old u-boot-2009.03/board/gdsys/neo/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gdsys/neo/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/neo/CVS/Entries.Old 2009-03-25 15:24:32.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/neo.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gdsys/neo/CVS/Repository u-boot-2009.03/board/gdsys/neo/CVS/Repository
--- u-boot-2009.03_orig/board/gdsys/neo/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/neo/CVS/Repository 2009-03-25 15:24:32.915998200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gdsys/neo
diff -Naur u-boot-2009.03_orig/board/gdsys/neo/CVS/Root u-boot-2009.03/board/gdsys/neo/CVS/Root
--- u-boot-2009.03_orig/board/gdsys/neo/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gdsys/neo/CVS/Root 2009-03-25 15:24:32.900373400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gen860t/CVS/Entries u-boot-2009.03/board/gen860t/CVS/Entries
--- u-boot-2009.03_orig/board/gen860t/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gen860t/CVS/Entries 2009-03-25 15:57:27.950101300 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/beeper.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/beeper.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gen860t.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ioport.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ioport.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-flashenv.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gen860t/CVS/Entries.Extra u-boot-2009.03/board/gen860t/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gen860t/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gen860t/CVS/Entries.Extra 2009-03-25 15:57:27.950101300 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019699/
+/README///1238019699/
+/beeper.c///1238019699/
+/beeper.h///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/fpga.c///1238019699/
+/fpga.h///1238019699/
+/gen860t.c///1238019699/
+/ioport.c///1238019699/
+/ioport.h///1238019699/
+/u-boot-flashenv.lds///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gen860t/CVS/Entries.Extra.Old u-boot-2009.03/board/gen860t/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gen860t/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gen860t/CVS/Entries.Extra.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019699/
+/README///1238019699/
+/beeper.c///1238019699/
+/beeper.h///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/fpga.c///1238019699/
+/fpga.h///1238019699/
+/gen860t.c///1238019699/
+/ioport.c///1238019699/
+/ioport.h///1238019699/
+/u-boot-flashenv.lds///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gen860t/CVS/Entries.Old u-boot-2009.03/board/gen860t/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gen860t/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gen860t/CVS/Entries.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/beeper.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/beeper.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/fpga.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gen860t.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/ioport.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/ioport.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot-flashenv.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gen860t/CVS/Repository u-boot-2009.03/board/gen860t/CVS/Repository
--- u-boot-2009.03_orig/board/gen860t/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gen860t/CVS/Repository 2009-03-25 15:24:33.025371800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gen860t
diff -Naur u-boot-2009.03_orig/board/gen860t/CVS/Root u-boot-2009.03/board/gen860t/CVS/Root
--- u-boot-2009.03_orig/board/gen860t/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gen860t/CVS/Root 2009-03-25 15:24:33.025371800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/genietv/CVS/Entries u-boot-2009.03/board/genietv/CVS/Entries
--- u-boot-2009.03_orig/board/genietv/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/genietv/CVS/Entries 2009-03-25 15:57:28.043850700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/genietv.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/genietv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/genietv/CVS/Entries.Extra u-boot-2009.03/board/genietv/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/genietv/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/genietv/CVS/Entries.Extra 2009-03-25 15:57:28.059475600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/genietv.c///1238019699/
+/genietv.h///1238019699/
+/u-boot.lds///1238019699/
+/u-boot.lds.debug///1238019699/
diff -Naur u-boot-2009.03_orig/board/genietv/CVS/Entries.Extra.Old u-boot-2009.03/board/genietv/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/genietv/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/genietv/CVS/Entries.Extra.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/genietv.c///1238019699/
+/genietv.h///1238019699/
+/u-boot.lds///1238019699/
+/u-boot.lds.debug///1238019699/
diff -Naur u-boot-2009.03_orig/board/genietv/CVS/Entries.Old u-boot-2009.03/board/genietv/CVS/Entries.Old
--- u-boot-2009.03_orig/board/genietv/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/genietv/CVS/Entries.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/genietv.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/genietv.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/genietv/CVS/Repository u-boot-2009.03/board/genietv/CVS/Repository
--- u-boot-2009.03_orig/board/genietv/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/genietv/CVS/Repository 2009-03-25 15:24:33.228494200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/genietv
diff -Naur u-boot-2009.03_orig/board/genietv/CVS/Root u-boot-2009.03/board/genietv/CVS/Root
--- u-boot-2009.03_orig/board/genietv/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/genietv/CVS/Root 2009-03-25 15:24:33.228494200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gth/CVS/Entries u-boot-2009.03/board/gth/CVS/Entries
--- u-boot-2009.03_orig/board/gth/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth/CVS/Entries 2009-03-31 14:45:13.947740800 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_access.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_access.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_dev.h/1.1.1.1/Tue Mar 31 21:45:13 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/gth/CVS/Entries.Extra u-boot-2009.03/board/gth/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gth/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth/CVS/Entries.Extra 2009-03-31 14:45:13.947740800 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019699/
+/README///1238019699/
+/config.mk///1238019699/
+/ee_access.c///1238019699/
+/ee_access.h///1238019699/
+/flash.c///1238019699/
+/gth.c///1238019699/
+/pcmcia.c///1238019699/
+/u-boot.lds///1238019699/
+/ee_dev.h///1238019699/
diff -Naur u-boot-2009.03_orig/board/gth/CVS/Entries.Extra.Old u-boot-2009.03/board/gth/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gth/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth/CVS/Entries.Extra.Old 2009-03-25 17:51:37.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019699/
+/README///1238019699/
+/config.mk///1238019699/
+/ee_access.c///1238019699/
+/ee_access.h///1238019699/
+/flash.c///1238019699/
+/gth.c///1238019699/
+/pcmcia.c///1238019699/
+/u-boot.lds///1238019699/
+/ee_dev.h///1238028697/
diff -Naur u-boot-2009.03_orig/board/gth/CVS/Entries.Old u-boot-2009.03/board/gth/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gth/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth/CVS/Entries.Old 2009-03-25 17:51:37.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_access.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_access.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_dev.h/1.2/Thu Mar 26 00:51:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gth/CVS/Repository u-boot-2009.03/board/gth/CVS/Repository
--- u-boot-2009.03_orig/board/gth/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth/CVS/Repository 2009-03-25 15:24:33.353492600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gth
diff -Naur u-boot-2009.03_orig/board/gth/CVS/Root u-boot-2009.03/board/gth/CVS/Root
--- u-boot-2009.03_orig/board/gth/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth/CVS/Root 2009-03-25 15:24:33.353492600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gth/ee_dev.h u-boot-2009.03/board/gth/ee_dev.h
--- u-boot-2009.03_orig/board/gth/ee_dev.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/gth/ee_dev.h 2009-03-31 14:45:13.791492800 -0700
@@ -1,85 +1,85 @@
-/* By Thomas.Lange@Corelatus.com 001025
- $Revision: 1.6 $
-
- Definitions for EEPROM/VOLT METER DS2438
- Copyright (C) 2000-2001 Corelatus AB */
-
-#ifndef INCeedevh
-#define INCeedevh
-
-#define E_DEBUG(fmt,args...) if( Debug ) printk(KERN_DEBUG"EE: " fmt, ##args)
-
-#define PORT_B_PAR ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbpar
-#define PORT_B_ODR ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbodr
-#define PORT_B_DIR ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdir
-#define PORT_B_DAT ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdat
-
-#define SET_PORT_B_INPUT(Mask) PORT_B_DIR &= ~(Mask)
-#define SET_PORT_B_OUTPUT(Mask) PORT_B_DIR |= Mask
-
-#define WRITE_PORT_B(Mask,Value) { \
- if (Value) PORT_B_DAT |= Mask; \
- else PORT_B_DAT &= ~(Mask); \
- }
-#define WRITE_PORT(Value) WRITE_PORT_B(PB_EEPROM,Value)
-
-#define READ_PORT (PORT_B_DAT&PB_EEPROM)
-
-/* 64 bytes chip */
-#define EE_CHIP_SIZE 64
-
-/* We use this resistor for measuring the current drain on 3.3V */
-#define CURRENT_RESISTOR 0.022
-
-/* microsecs
- Pull line down at least this long for reset pulse */
-#define RESET_LOW_TIME 490
-
-/* Read presence pulse after we release reset pulse */
-#define PRESENCE_TIMEOUT 100
-#define PRESENCE_LOW_TIME 200
-
-#define WRITE_0_LOW 80
-#define WRITE_1_LOW 2
-#define TOTAL_WRITE_LOW 80
-
-#define READ_LOW 2
-#define READ_TIMEOUT 10
-#define TOTAL_READ_LOW 80
-
-/*** Rom function commands ***/
-#define READ_ROM 0x33
-#define MATCH_ROM 0x55
-#define SKIP_ROM 0xCC
-#define SEARCH_ROM 0xF0
-
-
-/*** Memory_command_function ***/
-#define WRITE_SCRATCHPAD 0x4E
-#define READ_SCRATCHPAD 0xBE
-#define COPY_SCRATCHPAD 0x48
-#define RECALL_MEMORY 0xB8
-#define CONVERT_TEMP 0x44
-#define CONVERT_VOLTAGE 0xB4
-
-/* Chip is divided in 8 pages, 8 bytes each */
-
-#define EE_PAGE_SIZE 8
-
-/* All chip data we want are in page 0 */
-
-/* Bytes in page 0 */
-#define EE_P0_STATUS 0
-#define EE_P0_TEMP_LSB 1
-#define EE_P0_TEMP_MSB 2
-#define EE_P0_VOLT_LSB 3
-#define EE_P0_VOLT_MSB 4
-#define EE_P0_CURRENT_LSB 5
-#define EE_P0_CURRENT_MSB 6
-
-
-/* 40 byte user data is located at page 3-7 */
-#define EE_USER_PAGE_0 3
-#define USER_PAGES 5
-
-#endif /* INCeedevh */
+/* By Thomas.Lange@Corelatus.com 001025
+ $Revision: 1.1.1.1 $
+
+ Definitions for EEPROM/VOLT METER DS2438
+ Copyright (C) 2000-2001 Corelatus AB */
+
+#ifndef INCeedevh
+#define INCeedevh
+
+#define E_DEBUG(fmt,args...) if( Debug ) printk(KERN_DEBUG"EE: " fmt, ##args)
+
+#define PORT_B_PAR ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbpar
+#define PORT_B_ODR ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbodr
+#define PORT_B_DIR ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdir
+#define PORT_B_DAT ((volatile immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdat
+
+#define SET_PORT_B_INPUT(Mask) PORT_B_DIR &= ~(Mask)
+#define SET_PORT_B_OUTPUT(Mask) PORT_B_DIR |= Mask
+
+#define WRITE_PORT_B(Mask,Value) { \
+ if (Value) PORT_B_DAT |= Mask; \
+ else PORT_B_DAT &= ~(Mask); \
+ }
+#define WRITE_PORT(Value) WRITE_PORT_B(PB_EEPROM,Value)
+
+#define READ_PORT (PORT_B_DAT&PB_EEPROM)
+
+/* 64 bytes chip */
+#define EE_CHIP_SIZE 64
+
+/* We use this resistor for measuring the current drain on 3.3V */
+#define CURRENT_RESISTOR 0.022
+
+/* microsecs
+ Pull line down at least this long for reset pulse */
+#define RESET_LOW_TIME 490
+
+/* Read presence pulse after we release reset pulse */
+#define PRESENCE_TIMEOUT 100
+#define PRESENCE_LOW_TIME 200
+
+#define WRITE_0_LOW 80
+#define WRITE_1_LOW 2
+#define TOTAL_WRITE_LOW 80
+
+#define READ_LOW 2
+#define READ_TIMEOUT 10
+#define TOTAL_READ_LOW 80
+
+/*** Rom function commands ***/
+#define READ_ROM 0x33
+#define MATCH_ROM 0x55
+#define SKIP_ROM 0xCC
+#define SEARCH_ROM 0xF0
+
+
+/*** Memory_command_function ***/
+#define WRITE_SCRATCHPAD 0x4E
+#define READ_SCRATCHPAD 0xBE
+#define COPY_SCRATCHPAD 0x48
+#define RECALL_MEMORY 0xB8
+#define CONVERT_TEMP 0x44
+#define CONVERT_VOLTAGE 0xB4
+
+/* Chip is divided in 8 pages, 8 bytes each */
+
+#define EE_PAGE_SIZE 8
+
+/* All chip data we want are in page 0 */
+
+/* Bytes in page 0 */
+#define EE_P0_STATUS 0
+#define EE_P0_TEMP_LSB 1
+#define EE_P0_TEMP_MSB 2
+#define EE_P0_VOLT_LSB 3
+#define EE_P0_VOLT_MSB 4
+#define EE_P0_CURRENT_LSB 5
+#define EE_P0_CURRENT_MSB 6
+
+
+/* 40 byte user data is located at page 3-7 */
+#define EE_USER_PAGE_0 3
+#define USER_PAGES 5
+
+#endif /* INCeedevh */
diff -Naur u-boot-2009.03_orig/board/gth2/CVS/Entries u-boot-2009.03/board/gth2/CVS/Entries
--- u-boot-2009.03_orig/board/gth2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth2/CVS/Entries 2009-03-25 15:57:28.325098900 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_access.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_access.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ee_dev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gth2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gth2/CVS/Entries.Extra u-boot-2009.03/board/gth2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gth2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth2/CVS/Entries.Extra 2009-03-25 15:57:28.325098900 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/ee_access.c///1238019699/
+/ee_access.h///1238019699/
+/ee_dev.h///1238019699/
+/flash.c///1238019699/
+/gth2.c///1238019699/
+/lowlevel_init.S///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gth2/CVS/Entries.Extra.Old u-boot-2009.03/board/gth2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gth2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth2/CVS/Entries.Extra.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/ee_access.c///1238019699/
+/ee_access.h///1238019699/
+/ee_dev.h///1238019699/
+/flash.c///1238019699/
+/gth2.c///1238019699/
+/lowlevel_init.S///1238019699/
+/u-boot.lds///1238019699/
diff -Naur u-boot-2009.03_orig/board/gth2/CVS/Entries.Old u-boot-2009.03/board/gth2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gth2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth2/CVS/Entries.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/ee_access.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/ee_access.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/ee_dev.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gth2.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gth2/CVS/Repository u-boot-2009.03/board/gth2/CVS/Repository
--- u-boot-2009.03_orig/board/gth2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth2/CVS/Repository 2009-03-25 15:24:33.572239800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gth2
diff -Naur u-boot-2009.03_orig/board/gth2/CVS/Root u-boot-2009.03/board/gth2/CVS/Root
--- u-boot-2009.03_orig/board/gth2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gth2/CVS/Root 2009-03-25 15:24:33.572239800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/gw8260/CVS/Entries u-boot-2009.03/board/gw8260/CVS/Entries
--- u-boot-2009.03_orig/board/gw8260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gw8260/CVS/Entries 2009-03-25 15:57:28.403223400 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gw8260.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gw8260/CVS/Entries.Extra u-boot-2009.03/board/gw8260/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/gw8260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gw8260/CVS/Entries.Extra 2009-03-25 15:57:28.403223400 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/gw8260.c///1238019699/
diff -Naur u-boot-2009.03_orig/board/gw8260/CVS/Entries.Extra.Old u-boot-2009.03/board/gw8260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/gw8260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gw8260/CVS/Entries.Extra.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/gw8260.c///1238019699/
diff -Naur u-boot-2009.03_orig/board/gw8260/CVS/Entries.Old u-boot-2009.03/board/gw8260/CVS/Entries.Old
--- u-boot-2009.03_orig/board/gw8260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gw8260/CVS/Entries.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/gw8260.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/gw8260/CVS/Repository u-boot-2009.03/board/gw8260/CVS/Repository
--- u-boot-2009.03_orig/board/gw8260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gw8260/CVS/Repository 2009-03-25 15:24:33.728487800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/gw8260
diff -Naur u-boot-2009.03_orig/board/gw8260/CVS/Root u-boot-2009.03/board/gw8260/CVS/Root
--- u-boot-2009.03_orig/board/gw8260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/gw8260/CVS/Root 2009-03-25 15:24:33.728487800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/hermes/CVS/Entries u-boot-2009.03/board/hermes/CVS/Entries
--- u-boot-2009.03_orig/board/hermes/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hermes/CVS/Entries 2009-03-25 15:57:28.481347900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hermes.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hermes/CVS/Entries.Extra u-boot-2009.03/board/hermes/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/hermes/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hermes/CVS/Entries.Extra 2009-03-25 15:57:28.496972800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/hermes.c///1238019699/
+/u-boot.lds///1238019699/
+/u-boot.lds.debug///1238019699/
diff -Naur u-boot-2009.03_orig/board/hermes/CVS/Entries.Extra.Old u-boot-2009.03/board/hermes/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/hermes/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hermes/CVS/Entries.Extra.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/hermes.c///1238019699/
+/u-boot.lds///1238019699/
+/u-boot.lds.debug///1238019699/
diff -Naur u-boot-2009.03_orig/board/hermes/CVS/Entries.Old u-boot-2009.03/board/hermes/CVS/Entries.Old
--- u-boot-2009.03_orig/board/hermes/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hermes/CVS/Entries.Old 2009-03-25 15:24:33.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/hermes.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hermes/CVS/Repository u-boot-2009.03/board/hermes/CVS/Repository
--- u-boot-2009.03_orig/board/hermes/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hermes/CVS/Repository 2009-03-25 15:24:33.837861400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/hermes
diff -Naur u-boot-2009.03_orig/board/hermes/CVS/Root u-boot-2009.03/board/hermes/CVS/Root
--- u-boot-2009.03_orig/board/hermes/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hermes/CVS/Root 2009-03-25 15:24:33.822236600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries u-boot-2009.03/board/hidden_dragon/CVS/Entries
--- u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hidden_dragon/CVS/Entries 2009-03-25 15:57:28.575097300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/early_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hidden_dragon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries.Extra u-boot-2009.03/board/hidden_dragon/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hidden_dragon/CVS/Entries.Extra 2009-03-25 15:57:28.575097300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019699/
+/README///1238019699/
+/config.mk///1238019699/
+/early_init.S///1238019699/
+/flash.c///1238019699/
+/hidden_dragon.c///1238019699/
+/speed.h///1238019699/
diff -Naur u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries.Extra.Old u-boot-2009.03/board/hidden_dragon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hidden_dragon/CVS/Entries.Extra.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019699/
+/README///1238019699/
+/config.mk///1238019699/
+/early_init.S///1238019699/
+/flash.c///1238019699/
+/hidden_dragon.c///1238019699/
+/speed.h///1238019699/
diff -Naur u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries.Old u-boot-2009.03/board/hidden_dragon/CVS/Entries.Old
--- u-boot-2009.03_orig/board/hidden_dragon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hidden_dragon/CVS/Entries.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/early_init.S/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/hidden_dragon.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/speed.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hidden_dragon/CVS/Repository u-boot-2009.03/board/hidden_dragon/CVS/Repository
--- u-boot-2009.03_orig/board/hidden_dragon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hidden_dragon/CVS/Repository 2009-03-25 15:24:33.962859800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/hidden_dragon
diff -Naur u-boot-2009.03_orig/board/hidden_dragon/CVS/Root u-boot-2009.03/board/hidden_dragon/CVS/Root
--- u-boot-2009.03_orig/board/hidden_dragon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hidden_dragon/CVS/Root 2009-03-25 15:24:33.962859800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/hmi1001/CVS/Entries u-boot-2009.03/board/hmi1001/CVS/Entries
--- u-boot-2009.03_orig/board/hmi1001/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hmi1001/CVS/Entries 2009-03-25 15:57:28.668846700 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hmi1001.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hmi1001/CVS/Entries.Extra u-boot-2009.03/board/hmi1001/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/hmi1001/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hmi1001/CVS/Entries.Extra 2009-03-25 15:57:28.668846700 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/hmi1001.c///1238019699/
diff -Naur u-boot-2009.03_orig/board/hmi1001/CVS/Entries.Extra.Old u-boot-2009.03/board/hmi1001/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/hmi1001/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hmi1001/CVS/Entries.Extra.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/hmi1001.c///1238019699/
diff -Naur u-boot-2009.03_orig/board/hmi1001/CVS/Entries.Old u-boot-2009.03/board/hmi1001/CVS/Entries.Old
--- u-boot-2009.03_orig/board/hmi1001/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hmi1001/CVS/Entries.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/hmi1001.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hmi1001/CVS/Repository u-boot-2009.03/board/hmi1001/CVS/Repository
--- u-boot-2009.03_orig/board/hmi1001/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hmi1001/CVS/Repository 2009-03-25 15:24:34.087858200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/hmi1001
diff -Naur u-boot-2009.03_orig/board/hmi1001/CVS/Root u-boot-2009.03/board/hmi1001/CVS/Root
--- u-boot-2009.03_orig/board/hmi1001/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hmi1001/CVS/Root 2009-03-25 15:24:34.087858200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/hymod/CVS/Entries u-boot-2009.03/board/hymod/CVS/Entries
--- u-boot-2009.03_orig/board/hymod/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hymod/CVS/Entries 2009-03-25 15:57:28.825095700 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bsp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fetch.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_env/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hymod.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hymod.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/input.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hymod/CVS/Entries.Extra u-boot-2009.03/board/hymod/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/hymod/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hymod/CVS/Entries.Extra 2009-03-25 15:57:28.825095700 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019699/
+/bsp.c///1238019699/
+/config.mk///1238019699/
+/eeprom.c///1238019699/
+/env.c///1238019699/
+/fetch.c///1238019699/
+/flash.c///1238019699/
+/flash.h///1238019699/
+/global_env///1238019699/
+/hymod.c///1238019699/
+/hymod.h///1238019699/
+/input.c///1238019699/
+/u-boot.lds///1238019699/
+/u-boot.lds.debug///1238019699/
diff -Naur u-boot-2009.03_orig/board/hymod/CVS/Entries.Extra.Old u-boot-2009.03/board/hymod/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/hymod/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hymod/CVS/Entries.Extra.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019699/
+/bsp.c///1238019699/
+/config.mk///1238019699/
+/eeprom.c///1238019699/
+/env.c///1238019699/
+/fetch.c///1238019699/
+/flash.c///1238019699/
+/flash.h///1238019699/
+/global_env///1238019699/
+/hymod.c///1238019699/
+/hymod.h///1238019699/
+/input.c///1238019699/
+/u-boot.lds///1238019699/
+/u-boot.lds.debug///1238019699/
diff -Naur u-boot-2009.03_orig/board/hymod/CVS/Entries.Old u-boot-2009.03/board/hymod/CVS/Entries.Old
--- u-boot-2009.03_orig/board/hymod/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hymod/CVS/Entries.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/bsp.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/eeprom.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/env.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/fetch.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/global_env/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/hymod.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/hymod.h/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/input.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:39 2009//
+D
diff -Naur u-boot-2009.03_orig/board/hymod/CVS/Repository u-boot-2009.03/board/hymod/CVS/Repository
--- u-boot-2009.03_orig/board/hymod/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hymod/CVS/Repository 2009-03-25 15:24:34.181607000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/hymod
diff -Naur u-boot-2009.03_orig/board/hymod/CVS/Root u-boot-2009.03/board/hymod/CVS/Root
--- u-boot-2009.03_orig/board/hymod/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/hymod/CVS/Root 2009-03-25 15:24:34.181607000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/icecube/CVS/Entries u-boot-2009.03/board/icecube/CVS/Entries
--- u-boot-2009.03_orig/board/icecube/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icecube/CVS/Entries 2009-03-25 15:57:28.965719800 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/icecube.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v16m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v32m16.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/icecube/CVS/Entries.Extra u-boot-2009.03/board/icecube/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/icecube/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icecube/CVS/Entries.Extra 2009-03-25 15:57:28.965719800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/icecube.c///1238019699/
+/mt46v16m16-75.h///1238019700/
+/mt46v32m16.h///1238019700/
+/mt48lc16m16a2-75.h///1238019700/
diff -Naur u-boot-2009.03_orig/board/icecube/CVS/Entries.Extra.Old u-boot-2009.03/board/icecube/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/icecube/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icecube/CVS/Entries.Extra.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019699/
+/config.mk///1238019699/
+/flash.c///1238019699/
+/icecube.c///1238019699/
+/mt46v16m16-75.h///1238019700/
+/mt46v32m16.h///1238019700/
+/mt48lc16m16a2-75.h///1238019700/
diff -Naur u-boot-2009.03_orig/board/icecube/CVS/Entries.Old u-boot-2009.03/board/icecube/CVS/Entries.Old
--- u-boot-2009.03_orig/board/icecube/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icecube/CVS/Entries.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/icecube.c/1.1.1.1/Wed Mar 25 22:21:39 2009//
+/mt46v16m16-75.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/mt46v32m16.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/icecube/CVS/Repository u-boot-2009.03/board/icecube/CVS/Repository
--- u-boot-2009.03_orig/board/icecube/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icecube/CVS/Repository 2009-03-25 15:24:34.603476600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/icecube
diff -Naur u-boot-2009.03_orig/board/icecube/CVS/Root u-boot-2009.03/board/icecube/CVS/Root
--- u-boot-2009.03_orig/board/icecube/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icecube/CVS/Root 2009-03-25 15:24:34.587851800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/icu862/CVS/Entries u-boot-2009.03/board/icu862/CVS/Entries
--- u-boot-2009.03_orig/board/icu862/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icu862/CVS/Entries 2009-03-25 15:57:29.075094100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/icu862.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/icu862/CVS/Entries.Extra u-boot-2009.03/board/icu862/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/icu862/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icu862/CVS/Entries.Extra 2009-03-25 15:57:29.075094100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/icu862.c///1238019700/
+/pcmcia.c///1238019700/
+/u-boot.lds///1238019700/
+/u-boot.lds.debug///1238019700/
diff -Naur u-boot-2009.03_orig/board/icu862/CVS/Entries.Extra.Old u-boot-2009.03/board/icu862/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/icu862/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icu862/CVS/Entries.Extra.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/icu862.c///1238019700/
+/pcmcia.c///1238019700/
+/u-boot.lds///1238019700/
+/u-boot.lds.debug///1238019700/
diff -Naur u-boot-2009.03_orig/board/icu862/CVS/Entries.Old u-boot-2009.03/board/icu862/CVS/Entries.Old
--- u-boot-2009.03_orig/board/icu862/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icu862/CVS/Entries.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/icu862.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/icu862/CVS/Repository u-boot-2009.03/board/icu862/CVS/Repository
--- u-boot-2009.03_orig/board/icu862/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icu862/CVS/Repository 2009-03-25 15:24:34.790974200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/icu862
diff -Naur u-boot-2009.03_orig/board/icu862/CVS/Root u-boot-2009.03/board/icu862/CVS/Root
--- u-boot-2009.03_orig/board/icu862/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/icu862/CVS/Root 2009-03-25 15:24:34.790974200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/idmr/CVS/Entries u-boot-2009.03/board/idmr/CVS/Entries
--- u-boot-2009.03_orig/board/idmr/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/idmr/CVS/Entries 2009-03-25 15:57:29.246968000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/idmr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/idmr/CVS/Entries.Extra u-boot-2009.03/board/idmr/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/idmr/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/idmr/CVS/Entries.Extra 2009-03-25 15:57:29.246968000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/idmr.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/idmr/CVS/Entries.Extra.Old u-boot-2009.03/board/idmr/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/idmr/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/idmr/CVS/Entries.Extra.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/idmr.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/idmr/CVS/Entries.Old u-boot-2009.03/board/idmr/CVS/Entries.Old
--- u-boot-2009.03_orig/board/idmr/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/idmr/CVS/Entries.Old 2009-03-25 15:24:34.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/idmr.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/idmr/CVS/Repository u-boot-2009.03/board/idmr/CVS/Repository
--- u-boot-2009.03_orig/board/idmr/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/idmr/CVS/Repository 2009-03-25 15:24:34.931597400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/idmr
diff -Naur u-boot-2009.03_orig/board/idmr/CVS/Root u-boot-2009.03/board/idmr/CVS/Root
--- u-boot-2009.03_orig/board/idmr/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/idmr/CVS/Root 2009-03-25 15:24:34.915972600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ids8247/CVS/Entries u-boot-2009.03/board/ids8247/CVS/Entries
--- u-boot-2009.03_orig/board/ids8247/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ids8247/CVS/Entries 2009-03-25 15:57:29.325092500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ids8247.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ids8247/CVS/Entries.Extra u-boot-2009.03/board/ids8247/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ids8247/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ids8247/CVS/Entries.Extra 2009-03-25 15:57:29.325092500 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ids8247.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/ids8247/CVS/Entries.Extra.Old u-boot-2009.03/board/ids8247/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ids8247/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ids8247/CVS/Entries.Extra.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ids8247.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/ids8247/CVS/Entries.Old u-boot-2009.03/board/ids8247/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ids8247/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ids8247/CVS/Entries.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/ids8247.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ids8247/CVS/Repository u-boot-2009.03/board/ids8247/CVS/Repository
--- u-boot-2009.03_orig/board/ids8247/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ids8247/CVS/Repository 2009-03-25 15:24:35.040971000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ids8247
diff -Naur u-boot-2009.03_orig/board/ids8247/CVS/Root u-boot-2009.03/board/ids8247/CVS/Root
--- u-boot-2009.03_orig/board/ids8247/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ids8247/CVS/Root 2009-03-25 15:24:35.040971000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/impa7/CVS/Entries u-boot-2009.03/board/impa7/CVS/Entries
--- u-boot-2009.03_orig/board/impa7/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/impa7/CVS/Entries 2009-03-25 15:57:29.403217000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/impa7.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/impa7/CVS/Entries.Extra u-boot-2009.03/board/impa7/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/impa7/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/impa7/CVS/Entries.Extra 2009-03-25 15:57:29.403217000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/impa7.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/impa7/CVS/Entries.Extra.Old u-boot-2009.03/board/impa7/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/impa7/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/impa7/CVS/Entries.Extra.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/impa7.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/impa7/CVS/Entries.Old u-boot-2009.03/board/impa7/CVS/Entries.Old
--- u-boot-2009.03_orig/board/impa7/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/impa7/CVS/Entries.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/impa7.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/impa7/CVS/Repository u-boot-2009.03/board/impa7/CVS/Repository
--- u-boot-2009.03_orig/board/impa7/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/impa7/CVS/Repository 2009-03-25 15:24:35.150344600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/impa7
diff -Naur u-boot-2009.03_orig/board/impa7/CVS/Root u-boot-2009.03/board/impa7/CVS/Root
--- u-boot-2009.03_orig/board/impa7/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/impa7/CVS/Root 2009-03-25 15:24:35.134719800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries u-boot-2009.03/board/imx31_litekit/CVS/Entries
--- u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_litekit/CVS/Entries 2009-03-25 15:57:29.481341500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/imx31_litekit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries.Extra u-boot-2009.03/board/imx31_litekit/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_litekit/CVS/Entries.Extra 2009-03-25 15:57:29.496966400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/imx31_litekit.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries.Extra.Old u-boot-2009.03/board/imx31_litekit/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_litekit/CVS/Entries.Extra.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/imx31_litekit.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries.Old u-boot-2009.03/board/imx31_litekit/CVS/Entries.Old
--- u-boot-2009.03_orig/board/imx31_litekit/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_litekit/CVS/Entries.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/imx31_litekit.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/imx31_litekit/CVS/Repository u-boot-2009.03/board/imx31_litekit/CVS/Repository
--- u-boot-2009.03_orig/board/imx31_litekit/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_litekit/CVS/Repository 2009-03-25 15:24:35.275343000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/imx31_litekit
diff -Naur u-boot-2009.03_orig/board/imx31_litekit/CVS/Root u-boot-2009.03/board/imx31_litekit/CVS/Root
--- u-boot-2009.03_orig/board/imx31_litekit/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_litekit/CVS/Root 2009-03-25 15:24:35.259718200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries u-boot-2009.03/board/imx31_phycore/CVS/Entries
--- u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_phycore/CVS/Entries 2009-03-25 15:57:29.575090900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/imx31_phycore.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries.Extra u-boot-2009.03/board/imx31_phycore/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_phycore/CVS/Entries.Extra 2009-03-25 15:57:29.575090900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/imx31_phycore.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries.Extra.Old u-boot-2009.03/board/imx31_phycore/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_phycore/CVS/Entries.Extra.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/imx31_phycore.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries.Old u-boot-2009.03/board/imx31_phycore/CVS/Entries.Old
--- u-boot-2009.03_orig/board/imx31_phycore/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_phycore/CVS/Entries.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/imx31_phycore.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/imx31_phycore/CVS/Repository u-boot-2009.03/board/imx31_phycore/CVS/Repository
--- u-boot-2009.03_orig/board/imx31_phycore/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_phycore/CVS/Repository 2009-03-25 15:24:35.431591000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/imx31_phycore
diff -Naur u-boot-2009.03_orig/board/imx31_phycore/CVS/Root u-boot-2009.03/board/imx31_phycore/CVS/Root
--- u-boot-2009.03_orig/board/imx31_phycore/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/imx31_phycore/CVS/Root 2009-03-25 15:24:35.400341400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/incaip/CVS/Entries u-boot-2009.03/board/incaip/CVS/Entries
--- u-boot-2009.03_orig/board/incaip/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/incaip/CVS/Entries 2009-03-25 15:57:29.668840300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/incaip.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/incaip/CVS/Entries.Extra u-boot-2009.03/board/incaip/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/incaip/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/incaip/CVS/Entries.Extra 2009-03-25 15:57:29.668840300 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/incaip.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/incaip/CVS/Entries.Extra.Old u-boot-2009.03/board/incaip/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/incaip/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/incaip/CVS/Entries.Extra.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/incaip.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/incaip/CVS/Entries.Old u-boot-2009.03/board/incaip/CVS/Entries.Old
--- u-boot-2009.03_orig/board/incaip/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/incaip/CVS/Entries.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/incaip.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/incaip/CVS/Repository u-boot-2009.03/board/incaip/CVS/Repository
--- u-boot-2009.03_orig/board/incaip/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/incaip/CVS/Repository 2009-03-25 15:24:35.603463800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/incaip
diff -Naur u-boot-2009.03_orig/board/incaip/CVS/Root u-boot-2009.03/board/incaip/CVS/Root
--- u-boot-2009.03_orig/board/incaip/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/incaip/CVS/Root 2009-03-25 15:24:35.603463800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/inka4x0/CVS/Entries u-boot-2009.03/board/inka4x0/CVS/Entries
--- u-boot-2009.03_orig/board/inka4x0/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/inka4x0/CVS/Entries 2009-03-25 15:57:29.778214600 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hyb25d512160bf-5.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inka4x0.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/k4h511638c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v16m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v32m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/inka4x0/CVS/Entries.Extra u-boot-2009.03/board/inka4x0/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/inka4x0/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/inka4x0/CVS/Entries.Extra 2009-03-25 15:57:29.778214600 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/hyb25d512160bf-5.h///1238019700/
+/inka4x0.c///1238019700/
+/k4h511638c.h///1238019700/
+/mt46v16m16-75.h///1238019700/
+/mt46v32m16-75.h///1238019700/
+/mt48lc16m16a2-75.h///1238019700/
diff -Naur u-boot-2009.03_orig/board/inka4x0/CVS/Entries.Extra.Old u-boot-2009.03/board/inka4x0/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/inka4x0/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/inka4x0/CVS/Entries.Extra.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/hyb25d512160bf-5.h///1238019700/
+/inka4x0.c///1238019700/
+/k4h511638c.h///1238019700/
+/mt46v16m16-75.h///1238019700/
+/mt46v32m16-75.h///1238019700/
+/mt48lc16m16a2-75.h///1238019700/
diff -Naur u-boot-2009.03_orig/board/inka4x0/CVS/Entries.Old u-boot-2009.03/board/inka4x0/CVS/Entries.Old
--- u-boot-2009.03_orig/board/inka4x0/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/inka4x0/CVS/Entries.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/hyb25d512160bf-5.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/inka4x0.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/k4h511638c.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/mt46v16m16-75.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/mt46v32m16-75.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/inka4x0/CVS/Repository u-boot-2009.03/board/inka4x0/CVS/Repository
--- u-boot-2009.03_orig/board/inka4x0/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/inka4x0/CVS/Repository 2009-03-25 15:24:35.728462200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/inka4x0
diff -Naur u-boot-2009.03_orig/board/inka4x0/CVS/Root u-boot-2009.03/board/inka4x0/CVS/Root
--- u-boot-2009.03_orig/board/inka4x0/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/inka4x0/CVS/Root 2009-03-25 15:24:35.728462200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/innokom/CVS/Entries u-boot-2009.03/board/innokom/CVS/Entries
--- u-boot-2009.03_orig/board/innokom/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/innokom/CVS/Entries 2009-03-25 15:57:29.871964000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/innokom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/innokom/CVS/Entries.Extra u-boot-2009.03/board/innokom/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/innokom/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/innokom/CVS/Entries.Extra 2009-03-25 15:57:29.871964000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/innokom.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/innokom/CVS/Entries.Extra.Old u-boot-2009.03/board/innokom/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/innokom/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/innokom/CVS/Entries.Extra.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/innokom.c///1238019700/
+/lowlevel_init.S///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/innokom/CVS/Entries.Old u-boot-2009.03/board/innokom/CVS/Entries.Old
--- u-boot-2009.03_orig/board/innokom/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/innokom/CVS/Entries.Old 2009-03-25 15:24:35.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/innokom.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/innokom/CVS/Repository u-boot-2009.03/board/innokom/CVS/Repository
--- u-boot-2009.03_orig/board/innokom/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/innokom/CVS/Repository 2009-03-25 15:24:35.884710200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/innokom
diff -Naur u-boot-2009.03_orig/board/innokom/CVS/Root u-boot-2009.03/board/innokom/CVS/Root
--- u-boot-2009.03_orig/board/innokom/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/innokom/CVS/Root 2009-03-25 15:24:35.884710200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ip860/CVS/Entries u-boot-2009.03/board/ip860/CVS/Entries
--- u-boot-2009.03_orig/board/ip860/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ip860/CVS/Entries 2009-03-25 15:57:29.965713400 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ip860.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ip860/CVS/Entries.Extra u-boot-2009.03/board/ip860/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ip860/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ip860/CVS/Entries.Extra 2009-03-25 15:57:29.965713400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ip860.c///1238019700/
+/u-boot.lds///1238019700/
+/u-boot.lds.debug///1238019700/
diff -Naur u-boot-2009.03_orig/board/ip860/CVS/Entries.Extra.Old u-boot-2009.03/board/ip860/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ip860/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ip860/CVS/Entries.Extra.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ip860.c///1238019700/
+/u-boot.lds///1238019700/
+/u-boot.lds.debug///1238019700/
diff -Naur u-boot-2009.03_orig/board/ip860/CVS/Entries.Old u-boot-2009.03/board/ip860/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ip860/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ip860/CVS/Entries.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/ip860.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ip860/CVS/Repository u-boot-2009.03/board/ip860/CVS/Repository
--- u-boot-2009.03_orig/board/ip860/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ip860/CVS/Repository 2009-03-25 15:24:36.009708600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ip860
diff -Naur u-boot-2009.03_orig/board/ip860/CVS/Root u-boot-2009.03/board/ip860/CVS/Root
--- u-boot-2009.03_orig/board/ip860/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ip860/CVS/Root 2009-03-25 15:24:36.009708600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/iphase4539/CVS/Entries u-boot-2009.03/board/iphase4539/CVS/Entries
--- u-boot-2009.03_orig/board/iphase4539/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/iphase4539/CVS/Entries 2009-03-25 15:57:30.059462800 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iphase4539.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/iphase4539/CVS/Entries.Extra u-boot-2009.03/board/iphase4539/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/iphase4539/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/iphase4539/CVS/Entries.Extra 2009-03-25 15:57:30.059462800 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/iphase4539.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/iphase4539/CVS/Entries.Extra.Old u-boot-2009.03/board/iphase4539/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/iphase4539/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/iphase4539/CVS/Entries.Extra.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/iphase4539.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/iphase4539/CVS/Entries.Old u-boot-2009.03/board/iphase4539/CVS/Entries.Old
--- u-boot-2009.03_orig/board/iphase4539/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/iphase4539/CVS/Entries.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/iphase4539.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/iphase4539/CVS/Repository u-boot-2009.03/board/iphase4539/CVS/Repository
--- u-boot-2009.03_orig/board/iphase4539/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/iphase4539/CVS/Repository 2009-03-25 15:24:36.150331800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/iphase4539
diff -Naur u-boot-2009.03_orig/board/iphase4539/CVS/Root u-boot-2009.03/board/iphase4539/CVS/Root
--- u-boot-2009.03_orig/board/iphase4539/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/iphase4539/CVS/Root 2009-03-25 15:24:36.150331800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ispan/CVS/Entries u-boot-2009.03/board/ispan/CVS/Entries
--- u-boot-2009.03_orig/board/ispan/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ispan/CVS/Entries 2009-03-25 15:57:30.184462000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ispan.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ispan/CVS/Entries.Extra u-boot-2009.03/board/ispan/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ispan/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ispan/CVS/Entries.Extra 2009-03-25 15:57:30.184462000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/ispan.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/ispan/CVS/Entries.Extra.Old u-boot-2009.03/board/ispan/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ispan/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ispan/CVS/Entries.Extra.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/ispan.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/ispan/CVS/Entries.Old u-boot-2009.03/board/ispan/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ispan/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ispan/CVS/Entries.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/ispan.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ispan/CVS/Repository u-boot-2009.03/board/ispan/CVS/Repository
--- u-boot-2009.03_orig/board/ispan/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ispan/CVS/Repository 2009-03-25 15:24:36.259705400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ispan
diff -Naur u-boot-2009.03_orig/board/ispan/CVS/Root u-boot-2009.03/board/ispan/CVS/Root
--- u-boot-2009.03_orig/board/ispan/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ispan/CVS/Root 2009-03-25 15:24:36.259705400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ivm/CVS/Entries u-boot-2009.03/board/ivm/CVS/Entries
--- u-boot-2009.03_orig/board/ivm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ivm/CVS/Entries 2009-03-25 15:57:30.278211400 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ivm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ivm/CVS/Entries.Extra u-boot-2009.03/board/ivm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ivm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ivm/CVS/Entries.Extra 2009-03-25 15:57:30.278211400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ivm.c///1238019700/
+/u-boot.lds///1238019700/
+/u-boot.lds.debug///1238019700/
diff -Naur u-boot-2009.03_orig/board/ivm/CVS/Entries.Extra.Old u-boot-2009.03/board/ivm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ivm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ivm/CVS/Entries.Extra.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ivm.c///1238019700/
+/u-boot.lds///1238019700/
+/u-boot.lds.debug///1238019700/
diff -Naur u-boot-2009.03_orig/board/ivm/CVS/Entries.Old u-boot-2009.03/board/ivm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ivm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ivm/CVS/Entries.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/ivm.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ivm/CVS/Repository u-boot-2009.03/board/ivm/CVS/Repository
--- u-boot-2009.03_orig/board/ivm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ivm/CVS/Repository 2009-03-25 15:24:36.384703800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ivm
diff -Naur u-boot-2009.03_orig/board/ivm/CVS/Root u-boot-2009.03/board/ivm/CVS/Root
--- u-boot-2009.03_orig/board/ivm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ivm/CVS/Root 2009-03-25 15:24:36.384703800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ixdp425/CVS/Entries u-boot-2009.03/board/ixdp425/CVS/Entries
--- u-boot-2009.03_orig/board/ixdp425/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ixdp425/CVS/Entries 2009-03-25 15:57:30.356335900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ixdp425.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ixdp425/CVS/Entries.Extra u-boot-2009.03/board/ixdp425/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ixdp425/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ixdp425/CVS/Entries.Extra 2009-03-25 15:57:30.356335900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ixdp425.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/ixdp425/CVS/Entries.Extra.Old u-boot-2009.03/board/ixdp425/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ixdp425/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ixdp425/CVS/Entries.Extra.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/ixdp425.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/ixdp425/CVS/Entries.Old u-boot-2009.03/board/ixdp425/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ixdp425/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ixdp425/CVS/Entries.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/ixdp425.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ixdp425/CVS/Repository u-boot-2009.03/board/ixdp425/CVS/Repository
--- u-boot-2009.03_orig/board/ixdp425/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ixdp425/CVS/Repository 2009-03-25 15:24:36.587826200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ixdp425
diff -Naur u-boot-2009.03_orig/board/ixdp425/CVS/Root u-boot-2009.03/board/ixdp425/CVS/Root
--- u-boot-2009.03_orig/board/ixdp425/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ixdp425/CVS/Root 2009-03-25 15:24:36.587826200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/jse/CVS/Entries u-boot-2009.03/board/jse/CVS/Entries
--- u-boot-2009.03_orig/board/jse/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jse/CVS/Entries 2009-03-31 14:46:36.415435200 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jse.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jse_priv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/host_bridge.c/1.1.1.1/Tue Mar 31 21:46:36 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/jse/CVS/Entries.Extra u-boot-2009.03/board/jse/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/jse/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jse/CVS/Entries.Extra 2009-03-31 14:46:36.415435200 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019700/
+/README.txt///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/init.S///1238019700/
+/jse.c///1238019700/
+/jse_priv.h///1238019700/
+/sdram.c///1238019700/
+/u-boot.lds///1238019700/
+/host_bridge.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/jse/CVS/Entries.Extra.Old u-boot-2009.03/board/jse/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/jse/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jse/CVS/Entries.Extra.Old 2009-03-25 17:51:37.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019700/
+/README.txt///1238019700/
+/config.mk///1238019700/
+/flash.c///1238019700/
+/init.S///1238019700/
+/jse.c///1238019700/
+/jse_priv.h///1238019700/
+/sdram.c///1238019700/
+/u-boot.lds///1238019700/
+/host_bridge.c///1238028697/
diff -Naur u-boot-2009.03_orig/board/jse/CVS/Entries.Old u-boot-2009.03/board/jse/CVS/Entries.Old
--- u-boot-2009.03_orig/board/jse/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jse/CVS/Entries.Old 2009-03-25 17:51:37.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jse.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jse_priv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/host_bridge.c/1.2/Thu Mar 26 00:51:37 2009//
+D
diff -Naur u-boot-2009.03_orig/board/jse/CVS/Repository u-boot-2009.03/board/jse/CVS/Repository
--- u-boot-2009.03_orig/board/jse/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jse/CVS/Repository 2009-03-25 15:24:36.697199800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/jse
diff -Naur u-boot-2009.03_orig/board/jse/CVS/Root u-boot-2009.03/board/jse/CVS/Root
--- u-boot-2009.03_orig/board/jse/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jse/CVS/Root 2009-03-25 15:24:36.681575000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/jse/host_bridge.c u-boot-2009.03/board/jse/host_bridge.c
--- u-boot-2009.03_orig/board/jse/host_bridge.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/jse/host_bridge.c 2009-03-31 14:46:36.259187200 -0700
@@ -1,90 +1,90 @@
-/*
- * Copyright (c) 2004 Picture Elements, Inc.
- * Stephen Williams (steve@icarus.com)
- *
- * This source code is free software; you can redistribute it
- * and/or modify it in source code form 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
- */
-#ident "$Id:$"
-
-# include <common.h>
-# include <pci.h>
-# include "jse_priv.h"
-
-/*
- * The JSE board has an Intel 21555 non-transparent bridge for
- * communication with the host. We need to render it harmless on the
- * JSE side, but leave it alone on the host (primary) side. Normally,
- * this will all be done before the host BIOS can gain access to the
- * board, due to the Primary Access Lockout bit.
- *
- * The host_bridge_init function is called as a late initialization
- * function, after most of the board is set up, including a PCI scan.
- */
-
-void host_bridge_init (void)
-{
- /* The bridge chip is at a fixed location. */
- pci_dev_t dev = PCI_BDF (0, 10, 0);
-
- /* Set PCI Class code --
- The primary side sees this class code at 0x08 in the
- primary config space. This must be something other then a
- bridge, or MS Windows starts doing weird stuff to me. */
- pci_write_config_dword (dev, 0x48, 0x04800000);
-
- /* Set subsystem ID --
- The primary side sees this value at 0x2c. We set it here so
- that the host can tell what sort of device this is:
- We are a Picture Elements [0x12c5] JSE [0x008a]. */
- pci_write_config_dword (dev, 0x6c, 0x008a12c5);
-
- /* Downstream (Primary-to-Secondary) BARs are set up mostly
- off. We need only the Memory-0 Bar so that the host can get
- at the CSR region to set up tables and the lot. */
-
- /* Downstream Memory 0 setup (4K for CSR) */
- pci_write_config_dword (dev, 0xac, 0xfffff000);
- /* Downstream Memory 1 setup (off) */
- pci_write_config_dword (dev, 0xb0, 0x00000000);
- /* Downstream Memory 2 setup (off) */
- pci_write_config_dword (dev, 0xb4, 0x00000000);
- /* Downstream Memory 3 setup (off) */
- pci_write_config_dword (dev, 0xb8, 0x00000000);
-
- /* Upstream (Secondary-to-Primary) BARs are used to get at
- host memory from the JSE card. Create two regions: a small
- one to manage individual word reads/writes, and a larger
- one for doing bulk frame moves. */
-
- /* Upstream Memory 0 Setup -- (BAR2) 4K non-prefetchable */
- pci_write_config_dword (dev, 0xc4, 0xfffff000);
- /* Upstream Memory 1 setup -- (BAR3) 4K non-prefetchable */
- pci_write_config_dword (dev, 0xc8, 0xfffff000);
-
- /* Upstream Memory 2 (BAR4) uses page translation, and is set
- up in CCR1. Configure for 4K pages. */
-
- /* Set CCR1,0 reigsters. This clears the Primary PCI Lockout
- bit as well, so we are done configuring after this
- point. Therefore, this must be the last step.
-
- CC1[15:12]= 0 (disable I2O message unit)
- CC1[11:8] = 0x5 (4K page size)
- CC0[11] = 1 (Secondary Clock Disable: disable clock)
- CC0[10] = 0 (Primary Access Lockout: allow primary access)
- */
- pci_write_config_dword (dev, 0xcc, 0x05000800);
-}
+/*
+ * Copyright (c) 2004 Picture Elements, Inc.
+ * Stephen Williams (steve@icarus.com)
+ *
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form 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
+ */
+#ident "$Id: host_bridge.c,v 1.1.1.1 2009/03/25 22:21:40 kenagy Exp $"
+
+# include <common.h>
+# include <pci.h>
+# include "jse_priv.h"
+
+/*
+ * The JSE board has an Intel 21555 non-transparent bridge for
+ * communication with the host. We need to render it harmless on the
+ * JSE side, but leave it alone on the host (primary) side. Normally,
+ * this will all be done before the host BIOS can gain access to the
+ * board, due to the Primary Access Lockout bit.
+ *
+ * The host_bridge_init function is called as a late initialization
+ * function, after most of the board is set up, including a PCI scan.
+ */
+
+void host_bridge_init (void)
+{
+ /* The bridge chip is at a fixed location. */
+ pci_dev_t dev = PCI_BDF (0, 10, 0);
+
+ /* Set PCI Class code --
+ The primary side sees this class code at 0x08 in the
+ primary config space. This must be something other then a
+ bridge, or MS Windows starts doing weird stuff to me. */
+ pci_write_config_dword (dev, 0x48, 0x04800000);
+
+ /* Set subsystem ID --
+ The primary side sees this value at 0x2c. We set it here so
+ that the host can tell what sort of device this is:
+ We are a Picture Elements [0x12c5] JSE [0x008a]. */
+ pci_write_config_dword (dev, 0x6c, 0x008a12c5);
+
+ /* Downstream (Primary-to-Secondary) BARs are set up mostly
+ off. We need only the Memory-0 Bar so that the host can get
+ at the CSR region to set up tables and the lot. */
+
+ /* Downstream Memory 0 setup (4K for CSR) */
+ pci_write_config_dword (dev, 0xac, 0xfffff000);
+ /* Downstream Memory 1 setup (off) */
+ pci_write_config_dword (dev, 0xb0, 0x00000000);
+ /* Downstream Memory 2 setup (off) */
+ pci_write_config_dword (dev, 0xb4, 0x00000000);
+ /* Downstream Memory 3 setup (off) */
+ pci_write_config_dword (dev, 0xb8, 0x00000000);
+
+ /* Upstream (Secondary-to-Primary) BARs are used to get at
+ host memory from the JSE card. Create two regions: a small
+ one to manage individual word reads/writes, and a larger
+ one for doing bulk frame moves. */
+
+ /* Upstream Memory 0 Setup -- (BAR2) 4K non-prefetchable */
+ pci_write_config_dword (dev, 0xc4, 0xfffff000);
+ /* Upstream Memory 1 setup -- (BAR3) 4K non-prefetchable */
+ pci_write_config_dword (dev, 0xc8, 0xfffff000);
+
+ /* Upstream Memory 2 (BAR4) uses page translation, and is set
+ up in CCR1. Configure for 4K pages. */
+
+ /* Set CCR1,0 reigsters. This clears the Primary PCI Lockout
+ bit as well, so we are done configuring after this
+ point. Therefore, this must be the last step.
+
+ CC1[15:12]= 0 (disable I2O message unit)
+ CC1[11:8] = 0x5 (4K page size)
+ CC0[11] = 1 (Secondary Clock Disable: disable clock)
+ CC0[10] = 0 (Primary Access Lockout: allow primary access)
+ */
+ pci_write_config_dword (dev, 0xcc, 0x05000800);
+}
diff -Naur u-boot-2009.03_orig/board/jupiter/CVS/Entries u-boot-2009.03/board/jupiter/CVS/Entries
--- u-boot-2009.03_orig/board/jupiter/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jupiter/CVS/Entries 2009-03-25 15:57:30.528209800 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jupiter.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/jupiter/CVS/Entries.Extra u-boot-2009.03/board/jupiter/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/jupiter/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jupiter/CVS/Entries.Extra 2009-03-25 15:57:30.528209800 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/jupiter.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/jupiter/CVS/Entries.Extra.Old u-boot-2009.03/board/jupiter/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/jupiter/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jupiter/CVS/Entries.Extra.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/jupiter.c///1238019700/
diff -Naur u-boot-2009.03_orig/board/jupiter/CVS/Entries.Old u-boot-2009.03/board/jupiter/CVS/Entries.Old
--- u-boot-2009.03_orig/board/jupiter/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jupiter/CVS/Entries.Old 2009-03-25 15:24:36.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/jupiter.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/jupiter/CVS/Repository u-boot-2009.03/board/jupiter/CVS/Repository
--- u-boot-2009.03_orig/board/jupiter/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jupiter/CVS/Repository 2009-03-25 15:24:36.869072600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/jupiter
diff -Naur u-boot-2009.03_orig/board/jupiter/CVS/Root u-boot-2009.03/board/jupiter/CVS/Root
--- u-boot-2009.03_orig/board/jupiter/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/jupiter/CVS/Root 2009-03-25 15:24:36.869072600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/kb9202/CVS/Entries u-boot-2009.03/board/kb9202/CVS/Entries
--- u-boot-2009.03_orig/board/kb9202/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kb9202/CVS/Entries 2009-03-25 15:57:30.606334300 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kb9202.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kb9202/CVS/Entries.Extra u-boot-2009.03/board/kb9202/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/kb9202/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kb9202/CVS/Entries.Extra 2009-03-25 15:57:30.606334300 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/kb9202.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/kb9202/CVS/Entries.Extra.Old u-boot-2009.03/board/kb9202/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/kb9202/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kb9202/CVS/Entries.Extra.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/kb9202.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/kb9202/CVS/Entries.Old u-boot-2009.03/board/kb9202/CVS/Entries.Old
--- u-boot-2009.03_orig/board/kb9202/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kb9202/CVS/Entries.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/kb9202.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kb9202/CVS/Repository u-boot-2009.03/board/kb9202/CVS/Repository
--- u-boot-2009.03_orig/board/kb9202/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kb9202/CVS/Repository 2009-03-25 15:24:36.962821400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/kb9202
diff -Naur u-boot-2009.03_orig/board/kb9202/CVS/Root u-boot-2009.03/board/kb9202/CVS/Root
--- u-boot-2009.03_orig/board/kb9202/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kb9202/CVS/Root 2009-03-25 15:24:36.962821400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/keymile/CVS/Entries u-boot-2009.03/board/keymile/CVS/Entries
--- u-boot-2009.03_orig/board/keymile/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/CVS/Entries 2009-03-25 15:24:37.712811800 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/km8xx////
+D/kmeter1////
+D/mgcoge////
diff -Naur u-boot-2009.03_orig/board/keymile/CVS/Entries.Extra u-boot-2009.03/board/keymile/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/keymile/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/CVS/Entries.Extra 2009-03-25 15:24:37.712811800 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/km8xx////
+D/kmeter1////
+D/mgcoge////
diff -Naur u-boot-2009.03_orig/board/keymile/CVS/Repository u-boot-2009.03/board/keymile/CVS/Repository
--- u-boot-2009.03_orig/board/keymile/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/CVS/Repository 2009-03-25 15:24:37.072195000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/keymile
diff -Naur u-boot-2009.03_orig/board/keymile/CVS/Root u-boot-2009.03/board/keymile/CVS/Root
--- u-boot-2009.03_orig/board/keymile/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/CVS/Root 2009-03-25 15:24:37.072195000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/keymile/common/CVS/Entries u-boot-2009.03/board/keymile/common/CVS/Entries
--- u-boot-2009.03_orig/board/keymile/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/common/CVS/Entries 2009-03-25 15:57:30.700083700 -0700
@@ -0,0 +1,5 @@
+/common.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/keymile_hdlc_enet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/keymile_hdlc_enet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/common/CVS/Entries.Extra u-boot-2009.03/board/keymile/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/keymile/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/common/CVS/Entries.Extra 2009-03-25 15:57:30.700083700 -0700
@@ -0,0 +1,4 @@
+/common.c///1238019700/
+/common.h///1238019700/
+/keymile_hdlc_enet.c///1238019700/
+/keymile_hdlc_enet.h///1238019700/
diff -Naur u-boot-2009.03_orig/board/keymile/common/CVS/Entries.Extra.Old u-boot-2009.03/board/keymile/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/keymile/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/common/CVS/Entries.Extra.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,4 @@
+/common.c///1238019700/
+/common.h///1238019700/
+/keymile_hdlc_enet.c///1238019700/
+/keymile_hdlc_enet.h///1238019700/
diff -Naur u-boot-2009.03_orig/board/keymile/common/CVS/Entries.Old u-boot-2009.03/board/keymile/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/keymile/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/common/CVS/Entries.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,5 @@
+/common.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/common.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/keymile_hdlc_enet.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/keymile_hdlc_enet.h/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/common/CVS/Repository u-boot-2009.03/board/keymile/common/CVS/Repository
--- u-boot-2009.03_orig/board/keymile/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/common/CVS/Repository 2009-03-25 15:24:37.087819800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/keymile/common
diff -Naur u-boot-2009.03_orig/board/keymile/common/CVS/Root u-boot-2009.03/board/keymile/common/CVS/Root
--- u-boot-2009.03_orig/board/keymile/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/common/CVS/Root 2009-03-25 15:24:37.087819800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries u-boot-2009.03/board/keymile/km8xx/CVS/Entries
--- u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/km8xx/CVS/Entries 2009-03-25 15:57:30.793833100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/km8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/km8xx_hdlc_enet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries.Extra u-boot-2009.03/board/keymile/km8xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/km8xx/CVS/Entries.Extra 2009-03-25 15:57:30.793833100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/km8xx.c///1238019700/
+/km8xx_hdlc_enet.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries.Extra.Old u-boot-2009.03/board/keymile/km8xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/km8xx/CVS/Entries.Extra.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019700/
+/config.mk///1238019700/
+/km8xx.c///1238019700/
+/km8xx_hdlc_enet.c///1238019700/
+/u-boot.lds///1238019700/
diff -Naur u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries.Old u-boot-2009.03/board/keymile/km8xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/keymile/km8xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/km8xx/CVS/Entries.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/km8xx.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/km8xx_hdlc_enet.c/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/km8xx/CVS/Repository u-boot-2009.03/board/keymile/km8xx/CVS/Repository
--- u-boot-2009.03_orig/board/keymile/km8xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/km8xx/CVS/Repository 2009-03-25 15:24:37.181568600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/keymile/km8xx
diff -Naur u-boot-2009.03_orig/board/keymile/km8xx/CVS/Root u-boot-2009.03/board/keymile/km8xx/CVS/Root
--- u-boot-2009.03_orig/board/keymile/km8xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/km8xx/CVS/Root 2009-03-25 15:24:37.181568600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries u-boot-2009.03/board/keymile/kmeter1/CVS/Entries
--- u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/kmeter1/CVS/Entries 2009-03-25 15:57:30.871957600 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kmeter1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries.Extra u-boot-2009.03/board/keymile/kmeter1/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/kmeter1/CVS/Entries.Extra 2009-03-25 15:57:30.887582500 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019701/
+/config.mk///1238019700/
+/kmeter1.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries.Extra.Old u-boot-2009.03/board/keymile/kmeter1/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/kmeter1/CVS/Entries.Extra.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019701/
+/config.mk///1238019700/
+/kmeter1.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries.Old u-boot-2009.03/board/keymile/kmeter1/CVS/Entries.Old
--- u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/kmeter1/CVS/Entries.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:40 2009//
+/kmeter1.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Repository u-boot-2009.03/board/keymile/kmeter1/CVS/Repository
--- u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/kmeter1/CVS/Repository 2009-03-25 15:24:37.306567000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/keymile/kmeter1
diff -Naur u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Root u-boot-2009.03/board/keymile/kmeter1/CVS/Root
--- u-boot-2009.03_orig/board/keymile/kmeter1/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/kmeter1/CVS/Root 2009-03-25 15:24:37.306567000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries u-boot-2009.03/board/keymile/mgcoge/CVS/Entries
--- u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/mgcoge/CVS/Entries 2009-03-25 15:57:30.965707000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mgcoge.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mgcoge_hdlc_enet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries.Extra u-boot-2009.03/board/keymile/mgcoge/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/mgcoge/CVS/Entries.Extra 2009-03-25 15:57:30.965707000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/mgcoge.c///1238019701/
+/mgcoge_hdlc_enet.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries.Extra.Old u-boot-2009.03/board/keymile/mgcoge/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/mgcoge/CVS/Entries.Extra.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/mgcoge.c///1238019701/
+/mgcoge_hdlc_enet.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries.Old u-boot-2009.03/board/keymile/mgcoge/CVS/Entries.Old
--- u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/mgcoge/CVS/Entries.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/mgcoge.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/mgcoge_hdlc_enet.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Repository u-boot-2009.03/board/keymile/mgcoge/CVS/Repository
--- u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/mgcoge/CVS/Repository 2009-03-25 15:24:37.587813400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/keymile/mgcoge
diff -Naur u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Root u-boot-2009.03/board/keymile/mgcoge/CVS/Root
--- u-boot-2009.03_orig/board/keymile/mgcoge/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/keymile/mgcoge/CVS/Root 2009-03-25 15:24:37.587813400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/korat/CVS/Entries u-boot-2009.03/board/korat/CVS/Entries
--- u-boot-2009.03_orig/board/korat/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/korat/CVS/Entries 2009-03-25 15:57:31.075081300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/korat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-F7FC.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/korat/CVS/Entries.Extra u-boot-2009.03/board/korat/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/korat/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/korat/CVS/Entries.Extra 2009-03-25 15:57:31.075081300 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/init.S///1238019701/
+/korat.c///1238019701/
+/u-boot-F7FC.lds///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/korat/CVS/Entries.Extra.Old u-boot-2009.03/board/korat/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/korat/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/korat/CVS/Entries.Extra.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/init.S///1238019701/
+/korat.c///1238019701/
+/u-boot-F7FC.lds///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/korat/CVS/Entries.Old u-boot-2009.03/board/korat/CVS/Entries.Old
--- u-boot-2009.03_orig/board/korat/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/korat/CVS/Entries.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/korat.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot-F7FC.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/korat/CVS/Repository u-boot-2009.03/board/korat/CVS/Repository
--- u-boot-2009.03_orig/board/korat/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/korat/CVS/Repository 2009-03-25 15:24:37.759686200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/korat
diff -Naur u-boot-2009.03_orig/board/korat/CVS/Root u-boot-2009.03/board/korat/CVS/Root
--- u-boot-2009.03_orig/board/korat/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/korat/CVS/Root 2009-03-25 15:24:37.759686200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/kup/CVS/Entries u-boot-2009.03/board/kup/CVS/Entries
--- u-boot-2009.03_orig/board/kup/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/CVS/Entries 2009-03-25 15:57:31.465703800 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/kup4k////
+D/kup4x////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/board/kup/CVS/Entries.Extra u-boot-2009.03/board/kup/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/kup/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/CVS/Entries.Extra 2009-03-25 15:57:31.465703800 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/kup4k////
+D/kup4x////
+/Makefile///1238019701/
diff -Naur u-boot-2009.03_orig/board/kup/CVS/Entries.Extra.Old u-boot-2009.03/board/kup/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/kup/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019701/
+D/common////
+D/kup4k////
+D/kup4x////
diff -Naur u-boot-2009.03_orig/board/kup/CVS/Entries.Old u-boot-2009.03/board/kup/CVS/Entries.Old
--- u-boot-2009.03_orig/board/kup/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D/common////
+D/kup4k////
+D/kup4x////
diff -Naur u-boot-2009.03_orig/board/kup/CVS/Repository u-boot-2009.03/board/kup/CVS/Repository
--- u-boot-2009.03_orig/board/kup/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/CVS/Repository 2009-03-25 15:24:37.900309400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/kup
diff -Naur u-boot-2009.03_orig/board/kup/CVS/Root u-boot-2009.03/board/kup/CVS/Root
--- u-boot-2009.03_orig/board/kup/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/CVS/Root 2009-03-25 15:24:37.900309400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/kup/common/CVS/Entries u-boot-2009.03/board/kup/common/CVS/Entries
--- u-boot-2009.03_orig/board/kup/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/common/CVS/Entries 2009-03-25 15:57:31.246955200 -0700
@@ -0,0 +1,6 @@
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kup.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kup.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/load_sernum_ethaddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kup/common/CVS/Entries.Extra u-boot-2009.03/board/kup/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/kup/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/common/CVS/Entries.Extra 2009-03-25 15:57:31.246955200 -0700
@@ -0,0 +1,5 @@
+/flash.c///1238019701/
+/kup.c///1238019701/
+/kup.h///1238019701/
+/load_sernum_ethaddr.c///1238019701/
+/pcmcia.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/kup/common/CVS/Entries.Extra.Old u-boot-2009.03/board/kup/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/kup/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/common/CVS/Entries.Extra.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,5 @@
+/flash.c///1238019701/
+/kup.c///1238019701/
+/kup.h///1238019701/
+/load_sernum_ethaddr.c///1238019701/
+/pcmcia.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/kup/common/CVS/Entries.Old u-boot-2009.03/board/kup/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/kup/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/common/CVS/Entries.Old 2009-03-25 15:24:37.000000000 -0700
@@ -0,0 +1,6 @@
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/kup.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/kup.h/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/load_sernum_ethaddr.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kup/common/CVS/Repository u-boot-2009.03/board/kup/common/CVS/Repository
--- u-boot-2009.03_orig/board/kup/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/common/CVS/Repository 2009-03-25 15:24:37.931559000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/kup/common
diff -Naur u-boot-2009.03_orig/board/kup/common/CVS/Root u-boot-2009.03/board/kup/common/CVS/Root
--- u-boot-2009.03_orig/board/kup/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/common/CVS/Root 2009-03-25 15:24:37.931559000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries u-boot-2009.03/board/kup/kup4k/CVS/Entries
--- u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4k/CVS/Entries 2009-03-25 15:57:31.340704600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kup4k.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s1d13706.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries.Extra u-boot-2009.03/board/kup/kup4k/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4k/CVS/Entries.Extra 2009-03-25 15:57:31.340704600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/kup4k.c///1238019701/
+/s1d13706.h///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries.Extra.Old u-boot-2009.03/board/kup/kup4k/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4k/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/kup4k.c///1238019701/
+/s1d13706.h///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries.Old u-boot-2009.03/board/kup/kup4k/CVS/Entries.Old
--- u-boot-2009.03_orig/board/kup/kup4k/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4k/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/kup4k.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/s1d13706.h/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kup/kup4k/CVS/Repository u-boot-2009.03/board/kup/kup4k/CVS/Repository
--- u-boot-2009.03_orig/board/kup/kup4k/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4k/CVS/Repository 2009-03-25 15:24:38.040932600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/kup/kup4k
diff -Naur u-boot-2009.03_orig/board/kup/kup4k/CVS/Root u-boot-2009.03/board/kup/kup4k/CVS/Root
--- u-boot-2009.03_orig/board/kup/kup4k/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4k/CVS/Root 2009-03-25 15:24:38.040932600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries u-boot-2009.03/board/kup/kup4x/CVS/Entries
--- u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4x/CVS/Entries 2009-03-25 15:57:31.418829100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kup4x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries.Extra u-boot-2009.03/board/kup/kup4x/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4x/CVS/Entries.Extra 2009-03-25 15:57:31.418829100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/kup4x.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries.Extra.Old u-boot-2009.03/board/kup/kup4x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4x/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/kup4x.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries.Old u-boot-2009.03/board/kup/kup4x/CVS/Entries.Old
--- u-boot-2009.03_orig/board/kup/kup4x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4x/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/kup4x.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/kup/kup4x/CVS/Repository u-boot-2009.03/board/kup/kup4x/CVS/Repository
--- u-boot-2009.03_orig/board/kup/kup4x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4x/CVS/Repository 2009-03-25 15:24:38.181555800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/kup/kup4x
diff -Naur u-boot-2009.03_orig/board/kup/kup4x/CVS/Root u-boot-2009.03/board/kup/kup4x/CVS/Root
--- u-boot-2009.03_orig/board/kup/kup4x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/kup/kup4x/CVS/Root 2009-03-25 15:24:38.165931000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/lantec/CVS/Entries u-boot-2009.03/board/lantec/CVS/Entries
--- u-boot-2009.03_orig/board/lantec/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lantec/CVS/Entries 2009-03-25 15:57:31.543828300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lantec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lantec/CVS/Entries.Extra u-boot-2009.03/board/lantec/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/lantec/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lantec/CVS/Entries.Extra 2009-03-25 15:57:31.543828300 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lantec.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/lantec/CVS/Entries.Extra.Old u-boot-2009.03/board/lantec/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/lantec/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lantec/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lantec.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/lantec/CVS/Entries.Old u-boot-2009.03/board/lantec/CVS/Entries.Old
--- u-boot-2009.03_orig/board/lantec/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lantec/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lantec.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lantec/CVS/Repository u-boot-2009.03/board/lantec/CVS/Repository
--- u-boot-2009.03_orig/board/lantec/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lantec/CVS/Repository 2009-03-25 15:24:38.322179000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/lantec
diff -Naur u-boot-2009.03_orig/board/lantec/CVS/Root u-boot-2009.03/board/lantec/CVS/Root
--- u-boot-2009.03_orig/board/lantec/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lantec/CVS/Root 2009-03-25 15:24:38.322179000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/lart/CVS/Entries u-boot-2009.03/board/lart/CVS/Entries
--- u-boot-2009.03_orig/board/lart/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lart/CVS/Entries 2009-03-25 15:57:31.637577700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flashasm.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lart/CVS/Entries.Extra u-boot-2009.03/board/lart/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/lart/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lart/CVS/Entries.Extra 2009-03-25 15:57:31.637577700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/flashasm.S///1238019701/
+/lart.c///1238019701/
+/lowlevel_init.S///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lart/CVS/Entries.Extra.Old u-boot-2009.03/board/lart/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/lart/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lart/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/flashasm.S///1238019701/
+/lart.c///1238019701/
+/lowlevel_init.S///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lart/CVS/Entries.Old u-boot-2009.03/board/lart/CVS/Entries.Old
--- u-boot-2009.03_orig/board/lart/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lart/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flashasm.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lart.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lart/CVS/Repository u-boot-2009.03/board/lart/CVS/Repository
--- u-boot-2009.03_orig/board/lart/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lart/CVS/Repository 2009-03-25 15:24:38.525301400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/lart
diff -Naur u-boot-2009.03_orig/board/lart/CVS/Root u-boot-2009.03/board/lart/CVS/Root
--- u-boot-2009.03_orig/board/lart/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lart/CVS/Root 2009-03-25 15:24:38.525301400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/linkstation/CVS/Entries u-boot-2009.03/board/linkstation/CVS/Entries
--- u-boot-2009.03_orig/board/linkstation/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/linkstation/CVS/Entries 2009-03-25 15:57:31.746952000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/avr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hwctl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ide.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/linkstation.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/linkstation/CVS/Entries.Extra u-boot-2009.03/board/linkstation/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/linkstation/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/linkstation/CVS/Entries.Extra 2009-03-25 15:57:31.746952000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/avr.c///1238019701/
+/config.mk///1238019701/
+/hwctl.c///1238019701/
+/ide.c///1238019701/
+/linkstation.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/linkstation/CVS/Entries.Extra.Old u-boot-2009.03/board/linkstation/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/linkstation/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/linkstation/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/avr.c///1238019701/
+/config.mk///1238019701/
+/hwctl.c///1238019701/
+/ide.c///1238019701/
+/linkstation.c///1238019701/
diff -Naur u-boot-2009.03_orig/board/linkstation/CVS/Entries.Old u-boot-2009.03/board/linkstation/CVS/Entries.Old
--- u-boot-2009.03_orig/board/linkstation/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/linkstation/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/avr.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/hwctl.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/ide.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/linkstation.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/linkstation/CVS/Repository u-boot-2009.03/board/linkstation/CVS/Repository
--- u-boot-2009.03_orig/board/linkstation/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/linkstation/CVS/Repository 2009-03-25 15:24:38.665924600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/linkstation
diff -Naur u-boot-2009.03_orig/board/linkstation/CVS/Root u-boot-2009.03/board/linkstation/CVS/Root
--- u-boot-2009.03_orig/board/linkstation/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/linkstation/CVS/Root 2009-03-25 15:24:38.665924600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/logodl/CVS/Entries u-boot-2009.03/board/logodl/CVS/Entries
--- u-boot-2009.03_orig/board/logodl/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/logodl/CVS/Entries 2009-03-25 15:57:31.825076500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logodl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/logodl/CVS/Entries.Extra u-boot-2009.03/board/logodl/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/logodl/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/logodl/CVS/Entries.Extra 2009-03-25 15:57:31.840701400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/logodl.c///1238019701/
+/lowlevel_init.S///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/logodl/CVS/Entries.Extra.Old u-boot-2009.03/board/logodl/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/logodl/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/logodl/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/logodl.c///1238019701/
+/lowlevel_init.S///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/logodl/CVS/Entries.Old u-boot-2009.03/board/logodl/CVS/Entries.Old
--- u-boot-2009.03_orig/board/logodl/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/logodl/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/logodl.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/logodl/CVS/Repository u-boot-2009.03/board/logodl/CVS/Repository
--- u-boot-2009.03_orig/board/logodl/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/logodl/CVS/Repository 2009-03-25 15:24:38.790923000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/logodl
diff -Naur u-boot-2009.03_orig/board/logodl/CVS/Root u-boot-2009.03/board/logodl/CVS/Root
--- u-boot-2009.03_orig/board/logodl/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/logodl/CVS/Root 2009-03-25 15:24:38.790923000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries u-boot-2009.03/board/lpc2292sodimm/CVS/Entries
--- u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpc2292sodimm/CVS/Entries 2009-03-25 15:57:31.918825900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpc2292sodimm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries.Extra u-boot-2009.03/board/lpc2292sodimm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpc2292sodimm/CVS/Entries.Extra 2009-03-25 15:57:31.934450800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lowlevel_init.S///1238019701/
+/lpc2292sodimm.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries.Extra.Old u-boot-2009.03/board/lpc2292sodimm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpc2292sodimm/CVS/Entries.Extra.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lowlevel_init.S///1238019701/
+/lpc2292sodimm.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries.Old u-boot-2009.03/board/lpc2292sodimm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpc2292sodimm/CVS/Entries.Old 2009-03-25 15:24:38.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lpc2292sodimm.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Repository u-boot-2009.03/board/lpc2292sodimm/CVS/Repository
--- u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpc2292sodimm/CVS/Repository 2009-03-25 15:24:38.915921400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/lpc2292sodimm
diff -Naur u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Root u-boot-2009.03/board/lpc2292sodimm/CVS/Root
--- u-boot-2009.03_orig/board/lpc2292sodimm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpc2292sodimm/CVS/Root 2009-03-25 15:24:38.915921400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries u-boot-2009.03/board/lpd7a40x/CVS/Entries
--- u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpd7a40x/CVS/Entries 2009-03-25 15:57:32.028200200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a40x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries.Extra u-boot-2009.03/board/lpd7a40x/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpd7a40x/CVS/Entries.Extra 2009-03-25 15:57:32.028200200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lowlevel_init.S///1238019701/
+/lpd7a40x.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries.Extra.Old u-boot-2009.03/board/lpd7a40x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpd7a40x/CVS/Entries.Extra.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lowlevel_init.S///1238019701/
+/lpd7a40x.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries.Old u-boot-2009.03/board/lpd7a40x/CVS/Entries.Old
--- u-boot-2009.03_orig/board/lpd7a40x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpd7a40x/CVS/Entries.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lpd7a40x.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lpd7a40x/CVS/Repository u-boot-2009.03/board/lpd7a40x/CVS/Repository
--- u-boot-2009.03_orig/board/lpd7a40x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpd7a40x/CVS/Repository 2009-03-25 15:24:39.040919800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/lpd7a40x
diff -Naur u-boot-2009.03_orig/board/lpd7a40x/CVS/Root u-boot-2009.03/board/lpd7a40x/CVS/Root
--- u-boot-2009.03_orig/board/lpd7a40x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lpd7a40x/CVS/Root 2009-03-25 15:24:39.025295000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/lubbock/CVS/Entries u-boot-2009.03/board/lubbock/CVS/Entries
--- u-boot-2009.03_orig/board/lubbock/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lubbock/CVS/Entries 2009-03-25 15:57:32.184449200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lubbock.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lubbock/CVS/Entries.Extra u-boot-2009.03/board/lubbock/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/lubbock/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lubbock/CVS/Entries.Extra 2009-03-25 15:57:32.184449200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lowlevel_init.S///1238019701/
+/lubbock.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lubbock/CVS/Entries.Extra.Old u-boot-2009.03/board/lubbock/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/lubbock/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lubbock/CVS/Entries.Extra.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lowlevel_init.S///1238019701/
+/lubbock.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lubbock/CVS/Entries.Old u-boot-2009.03/board/lubbock/CVS/Entries.Old
--- u-boot-2009.03_orig/board/lubbock/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lubbock/CVS/Entries.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lubbock.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lubbock/CVS/Repository u-boot-2009.03/board/lubbock/CVS/Repository
--- u-boot-2009.03_orig/board/lubbock/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lubbock/CVS/Repository 2009-03-25 15:24:39.165918200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/lubbock
diff -Naur u-boot-2009.03_orig/board/lubbock/CVS/Root u-boot-2009.03/board/lubbock/CVS/Root
--- u-boot-2009.03_orig/board/lubbock/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lubbock/CVS/Root 2009-03-25 15:24:39.165918200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/lwmon/CVS/Entries u-boot-2009.03/board/lwmon/CVS/Entries
--- u-boot-2009.03_orig/board/lwmon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon/CVS/Entries 2009-03-25 15:57:32.293823500 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.keybd/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lwmon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lwmon/CVS/Entries.Extra u-boot-2009.03/board/lwmon/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/lwmon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon/CVS/Entries.Extra 2009-03-25 15:57:32.293823500 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019701/
+/README.keybd///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lwmon.c///1238019701/
+/pcmcia.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/lwmon/CVS/Entries.Extra.Old u-boot-2009.03/board/lwmon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/lwmon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon/CVS/Entries.Extra.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019701/
+/README.keybd///1238019701/
+/config.mk///1238019701/
+/flash.c///1238019701/
+/lwmon.c///1238019701/
+/pcmcia.c///1238019701/
+/u-boot.lds///1238019701/
+/u-boot.lds.debug///1238019701/
diff -Naur u-boot-2009.03_orig/board/lwmon/CVS/Entries.Old u-boot-2009.03/board/lwmon/CVS/Entries.Old
--- u-boot-2009.03_orig/board/lwmon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon/CVS/Entries.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/README.keybd/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lwmon.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lwmon/CVS/Repository u-boot-2009.03/board/lwmon/CVS/Repository
--- u-boot-2009.03_orig/board/lwmon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon/CVS/Repository 2009-03-25 15:24:39.290916600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/lwmon
diff -Naur u-boot-2009.03_orig/board/lwmon/CVS/Root u-boot-2009.03/board/lwmon/CVS/Root
--- u-boot-2009.03_orig/board/lwmon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon/CVS/Root 2009-03-25 15:24:39.290916600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/lwmon5/CVS/Entries u-boot-2009.03/board/lwmon5/CVS/Entries
--- u-boot-2009.03_orig/board/lwmon5/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon5/CVS/Entries 2009-03-25 15:57:32.387572900 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kbd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lwmon5.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lwmon5/CVS/Entries.Extra u-boot-2009.03/board/lwmon5/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/lwmon5/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon5/CVS/Entries.Extra 2009-03-25 15:57:32.387572900 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/init.S///1238019701/
+/kbd.c///1238019701/
+/lwmon5.c///1238019701/
+/sdram.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lwmon5/CVS/Entries.Extra.Old u-boot-2009.03/board/lwmon5/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/lwmon5/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon5/CVS/Entries.Extra.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/init.S///1238019701/
+/kbd.c///1238019701/
+/lwmon5.c///1238019701/
+/sdram.c///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/lwmon5/CVS/Entries.Old u-boot-2009.03/board/lwmon5/CVS/Entries.Old
--- u-boot-2009.03_orig/board/lwmon5/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon5/CVS/Entries.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/kbd.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/lwmon5.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/lwmon5/CVS/Repository u-boot-2009.03/board/lwmon5/CVS/Repository
--- u-boot-2009.03_orig/board/lwmon5/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon5/CVS/Repository 2009-03-25 15:24:39.540913400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/lwmon5
diff -Naur u-boot-2009.03_orig/board/lwmon5/CVS/Root u-boot-2009.03/board/lwmon5/CVS/Root
--- u-boot-2009.03_orig/board/lwmon5/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/lwmon5/CVS/Root 2009-03-25 15:24:39.525288600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/m501sk/CVS/Entries u-boot-2009.03/board/m501sk/CVS/Entries
--- u-boot-2009.03_orig/board/m501sk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/m501sk/CVS/Entries 2009-03-25 15:57:32.481322300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m501sk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m501sk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/m501sk/CVS/Entries.Extra u-boot-2009.03/board/m501sk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/m501sk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/m501sk/CVS/Entries.Extra 2009-03-25 15:57:32.481322300 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/eeprom.c///1238019701/
+/m501sk.c///1238019701/
+/m501sk.h///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/m501sk/CVS/Entries.Extra.Old u-boot-2009.03/board/m501sk/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/m501sk/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/m501sk/CVS/Entries.Extra.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019701/
+/config.mk///1238019701/
+/eeprom.c///1238019701/
+/m501sk.c///1238019701/
+/m501sk.h///1238019701/
+/u-boot.lds///1238019701/
diff -Naur u-boot-2009.03_orig/board/m501sk/CVS/Entries.Old u-boot-2009.03/board/m501sk/CVS/Entries.Old
--- u-boot-2009.03_orig/board/m501sk/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/m501sk/CVS/Entries.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/eeprom.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/m501sk.c/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/m501sk.h/1.1.1.1/Wed Mar 25 22:21:41 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/m501sk/CVS/Repository u-boot-2009.03/board/m501sk/CVS/Repository
--- u-boot-2009.03_orig/board/m501sk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/m501sk/CVS/Repository 2009-03-25 15:24:39.697161400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/m501sk
diff -Naur u-boot-2009.03_orig/board/m501sk/CVS/Root u-boot-2009.03/board/m501sk/CVS/Root
--- u-boot-2009.03_orig/board/m501sk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/m501sk/CVS/Root 2009-03-25 15:24:39.681536600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/matrix_vision/CVS/Entries u-boot-2009.03/board/matrix_vision/CVS/Entries
--- u-boot-2009.03_orig/board/matrix_vision/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/CVS/Entries 2009-03-25 15:24:40.134655800 -0700
@@ -0,0 +1,2 @@
+D/mvbc_p////
+D/mvblm7////
diff -Naur u-boot-2009.03_orig/board/matrix_vision/CVS/Entries.Extra u-boot-2009.03/board/matrix_vision/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/matrix_vision/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/CVS/Entries.Extra 2009-03-25 15:24:40.134655800 -0700
@@ -0,0 +1,2 @@
+D/mvbc_p////
+D/mvblm7////
diff -Naur u-boot-2009.03_orig/board/matrix_vision/CVS/Repository u-boot-2009.03/board/matrix_vision/CVS/Repository
--- u-boot-2009.03_orig/board/matrix_vision/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/CVS/Repository 2009-03-25 15:24:39.822159800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/matrix_vision
diff -Naur u-boot-2009.03_orig/board/matrix_vision/CVS/Root u-boot-2009.03/board/matrix_vision/CVS/Root
--- u-boot-2009.03_orig/board/matrix_vision/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/CVS/Root 2009-03-25 15:24:39.806535000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries
--- u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries 2009-03-25 15:57:32.590696600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mvbc_p.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mvbc_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mvbc_p_autoscript/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries.Extra u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries.Extra 2009-03-25 15:57:32.590696600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019702/
+/config.mk///1238019702/
+/fpga.c///1238019702/
+/fpga.h///1238019702/
+/mvbc_p.c///1238019702/
+/mvbc_p.h///1238019702/
+/mvbc_p_autoscript///1238019702/
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries.Extra.Old u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries.Extra.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019702/
+/config.mk///1238019702/
+/fpga.c///1238019702/
+/fpga.h///1238019702/
+/mvbc_p.c///1238019702/
+/mvbc_p.h///1238019702/
+/mvbc_p_autoscript///1238019702/
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries.Old u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries.Old
--- u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Entries.Old 2009-03-25 15:24:39.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/fpga.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mvbc_p.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mvbc_p.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mvbc_p_autoscript/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Repository u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Repository
--- u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Repository 2009-03-25 15:24:39.853409400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/matrix_vision/mvbc_p
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Root u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Root
--- u-boot-2009.03_orig/board/matrix_vision/mvbc_p/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvbc_p/CVS/Root 2009-03-25 15:24:39.837784600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries
--- u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries 2009-03-25 15:57:32.684446000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mvblm7.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mvblm7.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mvblm7_autoscript/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries.Extra u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries.Extra 2009-03-25 15:57:32.700070900 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019702/
+/config.mk///1238019702/
+/fpga.c///1238019702/
+/fpga.h///1238019702/
+/mvblm7.c///1238019702/
+/mvblm7.h///1238019702/
+/mvblm7_autoscript///1238019702/
+/pci.c///1238019702/
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries.Extra.Old u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries.Extra.Old 2009-03-25 15:24:40.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019702/
+/config.mk///1238019702/
+/fpga.c///1238019702/
+/fpga.h///1238019702/
+/mvblm7.c///1238019702/
+/mvblm7.h///1238019702/
+/mvblm7_autoscript///1238019702/
+/pci.c///1238019702/
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries.Old u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries.Old
--- u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Entries.Old 2009-03-25 15:24:40.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/fpga.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mvblm7.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mvblm7.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mvblm7_autoscript/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+D
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Repository u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Repository
--- u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Repository 2009-03-25 15:24:39.978407800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/matrix_vision/mvblm7
diff -Naur u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Root u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Root
--- u-boot-2009.03_orig/board/matrix_vision/mvblm7/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/matrix_vision/mvblm7/CVS/Root 2009-03-25 15:24:39.978407800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mbx8xx/CVS/Entries u-boot-2009.03/board/mbx8xx/CVS/Entries
--- u-boot-2009.03_orig/board/mbx8xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mbx8xx/CVS/Entries 2009-03-25 15:57:32.825070100 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dimm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mbx8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vpd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vpd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mbx8xx/CVS/Entries.Extra u-boot-2009.03/board/mbx8xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mbx8xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mbx8xx/CVS/Entries.Extra 2009-03-25 15:57:32.825070100 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019702/
+/config.mk///1238019702/
+/csr.h///1238019702/
+/dimm.h///1238019702/
+/flash.c///1238019702/
+/mbx8xx.c///1238019703/
+/pcmcia.c///1238019703/
+/u-boot.lds///1238019703/
+/u-boot.lds.debug///1238019703/
+/vpd.c///1238019703/
+/vpd.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/mbx8xx/CVS/Entries.Extra.Old u-boot-2009.03/board/mbx8xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mbx8xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mbx8xx/CVS/Entries.Extra.Old 2009-03-25 15:24:40.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019702/
+/config.mk///1238019702/
+/csr.h///1238019702/
+/dimm.h///1238019702/
+/flash.c///1238019702/
+/mbx8xx.c///1238019703/
+/pcmcia.c///1238019703/
+/u-boot.lds///1238019703/
+/u-boot.lds.debug///1238019703/
+/vpd.c///1238019703/
+/vpd.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/mbx8xx/CVS/Entries.Old u-boot-2009.03/board/mbx8xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mbx8xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mbx8xx/CVS/Entries.Old 2009-03-25 15:24:40.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/csr.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/dimm.h/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:42 2009//
+/mbx8xx.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/vpd.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/vpd.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mbx8xx/CVS/Repository u-boot-2009.03/board/mbx8xx/CVS/Repository
--- u-boot-2009.03_orig/board/mbx8xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mbx8xx/CVS/Repository 2009-03-25 15:24:40.197155000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mbx8xx
diff -Naur u-boot-2009.03_orig/board/mbx8xx/CVS/Root u-boot-2009.03/board/mbx8xx/CVS/Root
--- u-boot-2009.03_orig/board/mbx8xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mbx8xx/CVS/Root 2009-03-25 15:24:40.181530200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mcc200/CVS/Entries u-boot-2009.03/board/mcc200/CVS/Entries
--- u-boot-2009.03_orig/board/mcc200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mcc200/CVS/Entries 2009-03-25 15:57:32.950069300 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/auto_update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcc200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v16m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m32s2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc8m32b2-6-7.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mcc200/CVS/Entries.Extra u-boot-2009.03/board/mcc200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mcc200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mcc200/CVS/Entries.Extra 2009-03-25 15:57:32.950069300 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019703/
+/auto_update.c///1238019703/
+/config.mk///1238019703/
+/lcd.c///1238019703/
+/mcc200.c///1238019703/
+/mt46v16m16-75.h///1238019703/
+/mt48lc16m16a2-75.h///1238019703/
+/mt48lc16m32s2-75.h///1238019703/
+/mt48lc8m32b2-6-7.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/mcc200/CVS/Entries.Extra.Old u-boot-2009.03/board/mcc200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mcc200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mcc200/CVS/Entries.Extra.Old 2009-03-25 15:24:40.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019703/
+/auto_update.c///1238019703/
+/config.mk///1238019703/
+/lcd.c///1238019703/
+/mcc200.c///1238019703/
+/mt46v16m16-75.h///1238019703/
+/mt48lc16m16a2-75.h///1238019703/
+/mt48lc16m32s2-75.h///1238019703/
+/mt48lc8m32b2-6-7.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/mcc200/CVS/Entries.Old u-boot-2009.03/board/mcc200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mcc200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mcc200/CVS/Entries.Old 2009-03-25 15:24:40.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/auto_update.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/lcd.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mcc200.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mt46v16m16-75.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mt48lc16m32s2-75.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mt48lc8m32b2-6-7.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mcc200/CVS/Repository u-boot-2009.03/board/mcc200/CVS/Repository
--- u-boot-2009.03_orig/board/mcc200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mcc200/CVS/Repository 2009-03-25 15:24:40.353403000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mcc200
diff -Naur u-boot-2009.03_orig/board/mcc200/CVS/Root u-boot-2009.03/board/mcc200/CVS/Root
--- u-boot-2009.03_orig/board/mcc200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mcc200/CVS/Root 2009-03-25 15:24:40.353403000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/micronas/CVS/Entries u-boot-2009.03/board/micronas/CVS/Entries
--- u-boot-2009.03_orig/board/micronas/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/CVS/Entries 2009-03-25 15:24:41.306515800 -0700
@@ -0,0 +1 @@
+D/vct////
diff -Naur u-boot-2009.03_orig/board/micronas/CVS/Entries.Extra u-boot-2009.03/board/micronas/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/micronas/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/CVS/Entries.Extra 2009-03-25 15:24:41.306515800 -0700
@@ -0,0 +1 @@
+D/vct////
diff -Naur u-boot-2009.03_orig/board/micronas/CVS/Repository u-boot-2009.03/board/micronas/CVS/Repository
--- u-boot-2009.03_orig/board/micronas/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/CVS/Repository 2009-03-25 15:24:40.712773400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/micronas
diff -Naur u-boot-2009.03_orig/board/micronas/CVS/Root u-boot-2009.03/board/micronas/CVS/Root
--- u-boot-2009.03_orig/board/micronas/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/CVS/Root 2009-03-25 15:24:40.697148600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/micronas/vct/CVS/Entries u-boot-2009.03/board/micronas/vct/CVS/Entries
--- u-boot-2009.03_orig/board/micronas/vct/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/CVS/Entries 2009-03-25 15:57:33.387566500 -0700
@@ -0,0 +1,22 @@
+D/vcth////
+D/vcth2////
+D/vctv////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dcgu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dcgu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebi_nor_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebi_onenand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebi_smc911x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ehci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gpio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/top.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vct.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vct.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/board/micronas/vct/CVS/Entries.Extra u-boot-2009.03/board/micronas/vct/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/micronas/vct/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/CVS/Entries.Extra 2009-03-25 15:57:33.387566500 -0700
@@ -0,0 +1,22 @@
+D/vcth////
+D/vcth2////
+D/vctv////
+/Makefile///1238019703/
+/bcu.h///1238019703/
+/config.mk///1238019703/
+/dcgu.c///1238019703/
+/dcgu.h///1238019703/
+/ebi.c///1238019703/
+/ebi.h///1238019703/
+/ebi_nor_flash.c///1238019703/
+/ebi_onenand.c///1238019703/
+/ebi_smc911x.c///1238019703/
+/ehci.c///1238019703/
+/gpio.c///1238019703/
+/scc.c///1238019703/
+/scc.h///1238019703/
+/smc_eeprom.c///1238019703/
+/top.c///1238019703/
+/u-boot.lds///1238019703/
+/vct.c///1238019703/
+/vct.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/micronas/vct/CVS/Entries.Extra.Old u-boot-2009.03/board/micronas/vct/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/micronas/vct/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/CVS/Entries.Extra.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,22 @@
+/Makefile///1238019703/
+/bcu.h///1238019703/
+/config.mk///1238019703/
+/dcgu.c///1238019703/
+/dcgu.h///1238019703/
+/ebi.c///1238019703/
+/ebi.h///1238019703/
+/ebi_nor_flash.c///1238019703/
+/ebi_onenand.c///1238019703/
+/ebi_smc911x.c///1238019703/
+/ehci.c///1238019703/
+/gpio.c///1238019703/
+/scc.c///1238019703/
+/scc.h///1238019703/
+/smc_eeprom.c///1238019703/
+/top.c///1238019703/
+/u-boot.lds///1238019703/
+/vct.c///1238019703/
+/vct.h///1238019703/
+D/vcth////
+D/vcth2////
+D/vctv////
diff -Naur u-boot-2009.03_orig/board/micronas/vct/CVS/Entries.Old u-boot-2009.03/board/micronas/vct/CVS/Entries.Old
--- u-boot-2009.03_orig/board/micronas/vct/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/CVS/Entries.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,22 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/bcu.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/dcgu.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/dcgu.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/ebi.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/ebi.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/ebi_nor_flash.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/ebi_onenand.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/ebi_smc911x.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/ehci.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/gpio.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/scc.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/scc.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/smc_eeprom.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/top.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/vct.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/vct.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D/vcth////
+D/vcth2////
+D/vctv////
diff -Naur u-boot-2009.03_orig/board/micronas/vct/CVS/Repository u-boot-2009.03/board/micronas/vct/CVS/Repository
--- u-boot-2009.03_orig/board/micronas/vct/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/CVS/Repository 2009-03-25 15:24:40.728398200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/micronas/vct
diff -Naur u-boot-2009.03_orig/board/micronas/vct/CVS/Root u-boot-2009.03/board/micronas/vct/CVS/Root
--- u-boot-2009.03_orig/board/micronas/vct/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/CVS/Root 2009-03-25 15:24:40.728398200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries
--- u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries 2009-03-25 15:57:33.200067700 -0700
@@ -0,0 +1,8 @@
+/reg_dcgu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_ebi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_fwsram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_gpio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_scc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_usbh.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_wdt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries.Extra u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries.Extra 2009-03-25 15:57:33.200067700 -0700
@@ -0,0 +1,7 @@
+/reg_dcgu.h///1238019703/
+/reg_ebi.h///1238019703/
+/reg_fwsram.h///1238019703/
+/reg_gpio.h///1238019703/
+/reg_scc.h///1238019703/
+/reg_usbh.h///1238019703/
+/reg_wdt.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries.Extra.Old u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries.Extra.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,7 @@
+/reg_dcgu.h///1238019703/
+/reg_ebi.h///1238019703/
+/reg_fwsram.h///1238019703/
+/reg_gpio.h///1238019703/
+/reg_scc.h///1238019703/
+/reg_usbh.h///1238019703/
+/reg_wdt.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries.Old u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries.Old
--- u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth/CVS/Entries.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,8 @@
+/reg_dcgu.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_ebi.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_fwsram.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_gpio.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_scc.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_usbh.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_wdt.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Repository u-boot-2009.03/board/micronas/vct/vcth/CVS/Repository
--- u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth/CVS/Repository 2009-03-25 15:24:40.947145400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/micronas/vct/vcth
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Root u-boot-2009.03/board/micronas/vct/vcth/CVS/Root
--- u-boot-2009.03_orig/board/micronas/vct/vcth/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth/CVS/Root 2009-03-25 15:24:40.947145400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries
--- u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries 2009-03-25 15:57:33.262567300 -0700
@@ -0,0 +1,2 @@
+/reg_ebi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries.Extra u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries.Extra 2009-03-25 15:57:33.262567300 -0700
@@ -0,0 +1 @@
+/reg_ebi.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries.Extra.Old u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries.Extra.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1 @@
+/reg_ebi.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries.Old u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth2/CVS/Entries.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,2 @@
+/reg_ebi.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Repository u-boot-2009.03/board/micronas/vct/vcth2/CVS/Repository
--- u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth2/CVS/Repository 2009-03-25 15:24:41.087768600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/micronas/vct/vcth2
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Root u-boot-2009.03/board/micronas/vct/vcth2/CVS/Root
--- u-boot-2009.03_orig/board/micronas/vct/vcth2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vcth2/CVS/Root 2009-03-25 15:24:41.087768600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries
--- u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries 2009-03-25 15:57:33.340691800 -0700
@@ -0,0 +1,5 @@
+/reg_dcgu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_ebi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_gpio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg_wdt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries.Extra u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries.Extra 2009-03-25 15:57:33.340691800 -0700
@@ -0,0 +1,4 @@
+/reg_dcgu.h///1238019703/
+/reg_ebi.h///1238019703/
+/reg_gpio.h///1238019703/
+/reg_wdt.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries.Extra.Old u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries.Extra.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,4 @@
+/reg_dcgu.h///1238019703/
+/reg_ebi.h///1238019703/
+/reg_gpio.h///1238019703/
+/reg_wdt.h///1238019703/
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries.Old u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries.Old
--- u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vctv/CVS/Entries.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,5 @@
+/reg_dcgu.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_ebi.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_gpio.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/reg_wdt.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Repository u-boot-2009.03/board/micronas/vct/vctv/CVS/Repository
--- u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vctv/CVS/Repository 2009-03-25 15:24:41.165892600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/micronas/vct/vctv
diff -Naur u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Root u-boot-2009.03/board/micronas/vct/vctv/CVS/Root
--- u-boot-2009.03_orig/board/micronas/vct/vctv/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/micronas/vct/vctv/CVS/Root 2009-03-25 15:24:41.165892600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mimc/CVS/Entries u-boot-2009.03/board/mimc/CVS/Entries
--- u-boot-2009.03_orig/board/mimc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/CVS/Entries 2009-03-25 15:24:41.603387000 -0700
@@ -0,0 +1 @@
+D/mimc200////
diff -Naur u-boot-2009.03_orig/board/mimc/CVS/Entries.Extra u-boot-2009.03/board/mimc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mimc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/CVS/Entries.Extra 2009-03-25 15:24:41.603387000 -0700
@@ -0,0 +1 @@
+D/mimc200////
diff -Naur u-boot-2009.03_orig/board/mimc/CVS/Repository u-boot-2009.03/board/mimc/CVS/Repository
--- u-boot-2009.03_orig/board/mimc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/CVS/Repository 2009-03-25 15:24:41.337765400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mimc
diff -Naur u-boot-2009.03_orig/board/mimc/CVS/Root u-boot-2009.03/board/mimc/CVS/Root
--- u-boot-2009.03_orig/board/mimc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/CVS/Root 2009-03-25 15:24:41.337765400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries u-boot-2009.03/board/mimc/mimc200/CVS/Entries
--- u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/mimc200/CVS/Entries 2009-03-25 15:57:33.481315900 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mimc200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries.Extra u-boot-2009.03/board/mimc/mimc200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/mimc200/CVS/Entries.Extra 2009-03-25 15:57:33.481315900 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/mimc200.c///1238019703/
+/u-boot.lds///1238019703/
diff -Naur u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries.Extra.Old u-boot-2009.03/board/mimc/mimc200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/mimc200/CVS/Entries.Extra.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/mimc200.c///1238019703/
+/u-boot.lds///1238019703/
diff -Naur u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries.Old u-boot-2009.03/board/mimc/mimc200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mimc/mimc200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/mimc200/CVS/Entries.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mimc200.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mimc/mimc200/CVS/Repository u-boot-2009.03/board/mimc/mimc200/CVS/Repository
--- u-boot-2009.03_orig/board/mimc/mimc200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/mimc200/CVS/Repository 2009-03-25 15:24:41.415889400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mimc/mimc200
diff -Naur u-boot-2009.03_orig/board/mimc/mimc200/CVS/Root u-boot-2009.03/board/mimc/mimc200/CVS/Root
--- u-boot-2009.03_orig/board/mimc/mimc200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mimc/mimc200/CVS/Root 2009-03-25 15:24:41.415889400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/miromico/CVS/Entries u-boot-2009.03/board/miromico/CVS/Entries
--- u-boot-2009.03_orig/board/miromico/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/CVS/Entries 2009-03-25 15:24:41.790884600 -0700
@@ -0,0 +1 @@
+D/hammerhead////
diff -Naur u-boot-2009.03_orig/board/miromico/CVS/Entries.Extra u-boot-2009.03/board/miromico/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/miromico/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/CVS/Entries.Extra 2009-03-25 15:24:41.790884600 -0700
@@ -0,0 +1 @@
+D/hammerhead////
diff -Naur u-boot-2009.03_orig/board/miromico/CVS/Repository u-boot-2009.03/board/miromico/CVS/Repository
--- u-boot-2009.03_orig/board/miromico/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/CVS/Repository 2009-03-25 15:24:41.650261400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/miromico
diff -Naur u-boot-2009.03_orig/board/miromico/CVS/Root u-boot-2009.03/board/miromico/CVS/Root
--- u-boot-2009.03_orig/board/miromico/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/CVS/Root 2009-03-25 15:24:41.650261400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries u-boot-2009.03/board/miromico/hammerhead/CVS/Entries
--- u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/hammerhead/CVS/Entries 2009-03-25 15:57:33.559440400 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hammerhead.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries.Extra u-boot-2009.03/board/miromico/hammerhead/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/hammerhead/CVS/Entries.Extra 2009-03-25 15:57:33.575065300 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/hammerhead.c///1238019703/
+/u-boot.lds///1238019703/
diff -Naur u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries.Extra.Old u-boot-2009.03/board/miromico/hammerhead/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/hammerhead/CVS/Entries.Extra.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/hammerhead.c///1238019703/
+/u-boot.lds///1238019703/
diff -Naur u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries.Old u-boot-2009.03/board/miromico/hammerhead/CVS/Entries.Old
--- u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/hammerhead/CVS/Entries.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/hammerhead.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Repository u-boot-2009.03/board/miromico/hammerhead/CVS/Repository
--- u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/hammerhead/CVS/Repository 2009-03-25 15:24:41.681511000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/miromico/hammerhead
diff -Naur u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Root u-boot-2009.03/board/miromico/hammerhead/CVS/Root
--- u-boot-2009.03_orig/board/miromico/hammerhead/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/miromico/hammerhead/CVS/Root 2009-03-25 15:24:41.665886200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ml2/CVS/Entries u-boot-2009.03/board/ml2/CVS/Entries
--- u-boot-2009.03_orig/board/ml2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ml2/CVS/Entries 2009-03-25 15:57:33.653189800 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ml2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ml2/CVS/Entries.Extra u-boot-2009.03/board/ml2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ml2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ml2/CVS/Entries.Extra 2009-03-25 15:57:33.653189800 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/flash.c///1238019703/
+/init.S///1238019703/
+/ml2.c///1238019703/
+/serial.c///1238019703/
+/u-boot.lds///1238019703/
+/u-boot.lds.debug///1238019703/
diff -Naur u-boot-2009.03_orig/board/ml2/CVS/Entries.Extra.Old u-boot-2009.03/board/ml2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ml2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ml2/CVS/Entries.Extra.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/flash.c///1238019703/
+/init.S///1238019703/
+/ml2.c///1238019703/
+/serial.c///1238019703/
+/u-boot.lds///1238019703/
+/u-boot.lds.debug///1238019703/
diff -Naur u-boot-2009.03_orig/board/ml2/CVS/Entries.Old u-boot-2009.03/board/ml2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ml2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ml2/CVS/Entries.Old 2009-03-25 15:24:41.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/ml2.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ml2/CVS/Repository u-boot-2009.03/board/ml2/CVS/Repository
--- u-boot-2009.03_orig/board/ml2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ml2/CVS/Repository 2009-03-25 15:24:41.837759000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ml2
diff -Naur u-boot-2009.03_orig/board/ml2/CVS/Root u-boot-2009.03/board/ml2/CVS/Root
--- u-boot-2009.03_orig/board/ml2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ml2/CVS/Root 2009-03-25 15:24:41.822134200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/modnet50/CVS/Entries u-boot-2009.03/board/modnet50/CVS/Entries
--- u-boot-2009.03_orig/board/modnet50/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/modnet50/CVS/Entries 2009-03-25 15:57:33.762564100 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/modnet50.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/modnet50/CVS/Entries.Extra u-boot-2009.03/board/modnet50/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/modnet50/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/modnet50/CVS/Entries.Extra 2009-03-25 15:57:33.762564100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/flash.c///1238019703/
+/lowlevel_init.S///1238019703/
+/modnet50.c///1238019703/
+/u-boot.lds///1238019703/
diff -Naur u-boot-2009.03_orig/board/modnet50/CVS/Entries.Extra.Old u-boot-2009.03/board/modnet50/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/modnet50/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/modnet50/CVS/Entries.Extra.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/flash.c///1238019703/
+/lowlevel_init.S///1238019703/
+/modnet50.c///1238019703/
+/u-boot.lds///1238019703/
diff -Naur u-boot-2009.03_orig/board/modnet50/CVS/Entries.Old u-boot-2009.03/board/modnet50/CVS/Entries.Old
--- u-boot-2009.03_orig/board/modnet50/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/modnet50/CVS/Entries.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/modnet50.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/modnet50/CVS/Repository u-boot-2009.03/board/modnet50/CVS/Repository
--- u-boot-2009.03_orig/board/modnet50/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/modnet50/CVS/Repository 2009-03-25 15:24:41.962757400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/modnet50
diff -Naur u-boot-2009.03_orig/board/modnet50/CVS/Root u-boot-2009.03/board/modnet50/CVS/Root
--- u-boot-2009.03_orig/board/modnet50/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/modnet50/CVS/Root 2009-03-25 15:24:41.962757400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/motionpro/CVS/Entries u-boot-2009.03/board/motionpro/CVS/Entries
--- u-boot-2009.03_orig/board/motionpro/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/motionpro/CVS/Entries 2009-03-25 15:57:33.840688600 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/motionpro.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/motionpro/CVS/Entries.Extra u-boot-2009.03/board/motionpro/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/motionpro/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/motionpro/CVS/Entries.Extra 2009-03-25 15:57:33.840688600 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/motionpro.c///1238019703/
diff -Naur u-boot-2009.03_orig/board/motionpro/CVS/Entries.Extra.Old u-boot-2009.03/board/motionpro/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/motionpro/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/motionpro/CVS/Entries.Extra.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019703/
+/config.mk///1238019703/
+/motionpro.c///1238019703/
diff -Naur u-boot-2009.03_orig/board/motionpro/CVS/Entries.Old u-boot-2009.03/board/motionpro/CVS/Entries.Old
--- u-boot-2009.03_orig/board/motionpro/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/motionpro/CVS/Entries.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/motionpro.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/motionpro/CVS/Repository u-boot-2009.03/board/motionpro/CVS/Repository
--- u-boot-2009.03_orig/board/motionpro/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/motionpro/CVS/Repository 2009-03-25 15:24:42.087755800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/motionpro
diff -Naur u-boot-2009.03_orig/board/motionpro/CVS/Root u-boot-2009.03/board/motionpro/CVS/Root
--- u-boot-2009.03_orig/board/motionpro/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/motionpro/CVS/Root 2009-03-25 15:24:42.087755800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mousse/CVS/Entries u-boot-2009.03/board/mousse/CVS/Entries
--- u-boot-2009.03_orig/board/mousse/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mousse/CVS/Entries 2009-03-25 15:57:33.996937600 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m48t59y.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m48t59y.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mousse.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mousse.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.ram/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.rom/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mousse/CVS/Entries.Extra u-boot-2009.03/board/mousse/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mousse/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mousse/CVS/Entries.Extra 2009-03-25 15:57:33.996937600 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019703/
+/README///1238019703/
+/config.mk///1238019703/
+/flash.c///1238019703/
+/flash.h///1238019703/
+/m48t59y.c///1238019703/
+/m48t59y.h///1238019703/
+/mousse.c///1238019703/
+/mousse.h///1238019703/
+/pci.c///1238019703/
+/u-boot.lds///1238019703/
+/u-boot.lds.ram///1238019703/
+/u-boot.lds.rom///1238019703/
diff -Naur u-boot-2009.03_orig/board/mousse/CVS/Entries.Extra.Old u-boot-2009.03/board/mousse/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mousse/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mousse/CVS/Entries.Extra.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019703/
+/README///1238019703/
+/config.mk///1238019703/
+/flash.c///1238019703/
+/flash.h///1238019703/
+/m48t59y.c///1238019703/
+/m48t59y.h///1238019703/
+/mousse.c///1238019703/
+/mousse.h///1238019703/
+/pci.c///1238019703/
+/u-boot.lds///1238019703/
+/u-boot.lds.ram///1238019703/
+/u-boot.lds.rom///1238019703/
diff -Naur u-boot-2009.03_orig/board/mousse/CVS/Entries.Old u-boot-2009.03/board/mousse/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mousse/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mousse/CVS/Entries.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/flash.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/m48t59y.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/m48t59y.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mousse.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/mousse.h/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds.ram/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/u-boot.lds.rom/1.1.1.1/Wed Mar 25 22:21:43 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mousse/CVS/Repository u-boot-2009.03/board/mousse/CVS/Repository
--- u-boot-2009.03_orig/board/mousse/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mousse/CVS/Repository 2009-03-25 15:24:42.165879800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mousse
diff -Naur u-boot-2009.03_orig/board/mousse/CVS/Root u-boot-2009.03/board/mousse/CVS/Root
--- u-boot-2009.03_orig/board/mousse/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mousse/CVS/Root 2009-03-25 15:24:42.165879800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mp2usb/CVS/Entries u-boot-2009.03/board/mp2usb/CVS/Entries
--- u-boot-2009.03_orig/board/mp2usb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mp2usb/CVS/Entries 2009-03-25 15:57:34.137561700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mp2usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mp2usb/CVS/Entries.Extra u-boot-2009.03/board/mp2usb/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mp2usb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mp2usb/CVS/Entries.Extra 2009-03-25 15:57:34.137561700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019703/
+/flash.c///1238019704/
+/mp2usb.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mp2usb/CVS/Entries.Extra.Old u-boot-2009.03/board/mp2usb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mp2usb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mp2usb/CVS/Entries.Extra.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019703/
+/flash.c///1238019704/
+/mp2usb.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mp2usb/CVS/Entries.Old u-boot-2009.03/board/mp2usb/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mp2usb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mp2usb/CVS/Entries.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:43 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/mp2usb.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mp2usb/CVS/Repository u-boot-2009.03/board/mp2usb/CVS/Repository
--- u-boot-2009.03_orig/board/mp2usb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mp2usb/CVS/Repository 2009-03-25 15:24:42.384627000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mp2usb
diff -Naur u-boot-2009.03_orig/board/mp2usb/CVS/Root u-boot-2009.03/board/mp2usb/CVS/Root
--- u-boot-2009.03_orig/board/mp2usb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mp2usb/CVS/Root 2009-03-25 15:24:42.384627000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries u-boot-2009.03/board/mpc8540eval/CVS/Entries
--- u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpc8540eval/CVS/Entries 2009-03-25 15:57:34.278185800 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8540eval.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries.Extra u-boot-2009.03/board/mpc8540eval/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpc8540eval/CVS/Entries.Extra 2009-03-25 15:57:34.278185800 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/ddr.c///1238019704/
+/flash.c///1238019704/
+/law.c///1238019704/
+/mpc8540eval.c///1238019704/
+/tlb.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries.Extra.Old u-boot-2009.03/board/mpc8540eval/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpc8540eval/CVS/Entries.Extra.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/ddr.c///1238019704/
+/flash.c///1238019704/
+/law.c///1238019704/
+/mpc8540eval.c///1238019704/
+/tlb.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries.Old u-boot-2009.03/board/mpc8540eval/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mpc8540eval/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpc8540eval/CVS/Entries.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/mpc8540eval.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpc8540eval/CVS/Repository u-boot-2009.03/board/mpc8540eval/CVS/Repository
--- u-boot-2009.03_orig/board/mpc8540eval/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpc8540eval/CVS/Repository 2009-03-25 15:24:42.603374200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpc8540eval
diff -Naur u-boot-2009.03_orig/board/mpc8540eval/CVS/Root u-boot-2009.03/board/mpc8540eval/CVS/Root
--- u-boot-2009.03_orig/board/mpc8540eval/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpc8540eval/CVS/Root 2009-03-25 15:24:42.603374200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpl/CVS/Entries u-boot-2009.03/board/mpl/CVS/Entries
--- u-boot-2009.03_orig/board/mpl/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/CVS/Entries 2009-03-25 15:24:43.790859000 -0700
@@ -0,0 +1,5 @@
+D/common////
+D/mip405////
+D/pati////
+D/pip405////
+D/vcma9////
diff -Naur u-boot-2009.03_orig/board/mpl/CVS/Entries.Extra u-boot-2009.03/board/mpl/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpl/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/CVS/Entries.Extra 2009-03-25 15:24:43.790859000 -0700
@@ -0,0 +1,5 @@
+D/common////
+D/mip405////
+D/pati////
+D/pip405////
+D/vcma9////
diff -Naur u-boot-2009.03_orig/board/mpl/CVS/Repository u-boot-2009.03/board/mpl/CVS/Repository
--- u-boot-2009.03_orig/board/mpl/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/CVS/Repository 2009-03-25 15:24:42.743997400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpl
diff -Naur u-boot-2009.03_orig/board/mpl/CVS/Root u-boot-2009.03/board/mpl/CVS/Root
--- u-boot-2009.03_orig/board/mpl/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/CVS/Root 2009-03-25 15:24:42.743997400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpl/common/CVS/Entries u-boot-2009.03/board/mpl/common/CVS/Entries
--- u-boot-2009.03_orig/board/mpl/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/common/CVS/Entries 2009-03-25 15:57:34.434434800 -0700
@@ -0,0 +1,14 @@
+/common_util.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/common_util.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/isa.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/isa.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kbd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kbd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memtst.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_parts.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/piix4_pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_uhci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_uhci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/common/CVS/Entries.Extra u-boot-2009.03/board/mpl/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpl/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/common/CVS/Entries.Extra 2009-03-25 15:57:34.434434800 -0700
@@ -0,0 +1,13 @@
+/common_util.c///1238019704/
+/common_util.h///1238019704/
+/flash.c///1238019704/
+/isa.c///1238019704/
+/isa.h///1238019704/
+/kbd.c///1238019704/
+/kbd.h///1238019704/
+/memtst.c///1238019704/
+/pci.c///1238019704/
+/pci_parts.h///1238019704/
+/piix4_pci.h///1238019704/
+/usb_uhci.c///1238019704/
+/usb_uhci.h///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/common/CVS/Entries.Extra.Old u-boot-2009.03/board/mpl/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mpl/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/common/CVS/Entries.Extra.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,13 @@
+/common_util.c///1238019704/
+/common_util.h///1238019704/
+/flash.c///1238019704/
+/isa.c///1238019704/
+/isa.h///1238019704/
+/kbd.c///1238019704/
+/kbd.h///1238019704/
+/memtst.c///1238019704/
+/pci.c///1238019704/
+/pci_parts.h///1238019704/
+/piix4_pci.h///1238019704/
+/usb_uhci.c///1238019704/
+/usb_uhci.h///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/common/CVS/Entries.Old u-boot-2009.03/board/mpl/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mpl/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/common/CVS/Entries.Old 2009-03-25 15:24:42.000000000 -0700
@@ -0,0 +1,14 @@
+/common_util.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/common_util.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/isa.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/isa.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/kbd.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/kbd.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/memtst.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/pci_parts.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/piix4_pci.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/usb_uhci.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/usb_uhci.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/common/CVS/Repository u-boot-2009.03/board/mpl/common/CVS/Repository
--- u-boot-2009.03_orig/board/mpl/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/common/CVS/Repository 2009-03-25 15:24:42.775247000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpl/common
diff -Naur u-boot-2009.03_orig/board/mpl/common/CVS/Root u-boot-2009.03/board/mpl/common/CVS/Root
--- u-boot-2009.03_orig/board/mpl/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/common/CVS/Root 2009-03-25 15:24:42.759622200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries u-boot-2009.03/board/mpl/mip405/CVS/Entries
--- u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/mip405/CVS/Entries 2009-03-25 15:57:34.543809100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mip405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mip405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mip405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries.Extra u-boot-2009.03/board/mpl/mip405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/mip405/CVS/Entries.Extra 2009-03-25 15:57:34.543809100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019704/
+/cmd_mip405.c///1238019704/
+/config.mk///1238019704/
+/init.S///1238019704/
+/mip405.c///1238019704/
+/mip405.h///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries.Extra.Old u-boot-2009.03/board/mpl/mip405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/mip405/CVS/Entries.Extra.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019704/
+/cmd_mip405.c///1238019704/
+/config.mk///1238019704/
+/init.S///1238019704/
+/mip405.c///1238019704/
+/mip405.h///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries.Old u-boot-2009.03/board/mpl/mip405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mpl/mip405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/mip405/CVS/Entries.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/cmd_mip405.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/mip405.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/mip405.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/mip405/CVS/Repository u-boot-2009.03/board/mpl/mip405/CVS/Repository
--- u-boot-2009.03_orig/board/mpl/mip405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/mip405/CVS/Repository 2009-03-25 15:24:42.962744600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpl/mip405
diff -Naur u-boot-2009.03_orig/board/mpl/mip405/CVS/Root u-boot-2009.03/board/mpl/mip405/CVS/Root
--- u-boot-2009.03_orig/board/mpl/mip405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/mip405/CVS/Root 2009-03-25 15:24:42.962744600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpl/pati/CVS/Entries u-boot-2009.03/board/mpl/pati/CVS/Entries
--- u-boot-2009.03_orig/board/mpl/pati/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pati/CVS/Entries 2009-03-25 15:57:34.653183400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pati.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pati.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pati.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_eeprom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/plx9056.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/pati/CVS/Entries.Extra u-boot-2009.03/board/mpl/pati/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpl/pati/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pati/CVS/Entries.Extra 2009-03-25 15:57:34.668808300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019704/
+/cmd_pati.c///1238019704/
+/config.mk///1238019704/
+/pati.c///1238019704/
+/pati.h///1238019704/
+/pci_eeprom.h///1238019704/
+/plx9056.h///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/pati/CVS/Entries.Extra.Old u-boot-2009.03/board/mpl/pati/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mpl/pati/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pati/CVS/Entries.Extra.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019704/
+/cmd_pati.c///1238019704/
+/config.mk///1238019704/
+/pati.c///1238019704/
+/pati.h///1238019704/
+/pci_eeprom.h///1238019704/
+/plx9056.h///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/pati/CVS/Entries.Old u-boot-2009.03/board/mpl/pati/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mpl/pati/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pati/CVS/Entries.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/cmd_pati.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/pati.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/pati.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/pci_eeprom.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/plx9056.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/pati/CVS/Repository u-boot-2009.03/board/mpl/pati/CVS/Repository
--- u-boot-2009.03_orig/board/mpl/pati/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pati/CVS/Repository 2009-03-25 15:24:43.103367800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpl/pati
diff -Naur u-boot-2009.03_orig/board/mpl/pati/CVS/Root u-boot-2009.03/board/mpl/pati/CVS/Root
--- u-boot-2009.03_orig/board/mpl/pati/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pati/CVS/Root 2009-03-25 15:24:43.103367800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries u-boot-2009.03/board/mpl/pip405/CVS/Entries
--- u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pip405/CVS/Entries 2009-03-25 15:57:34.778182600 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pip405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pip405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pip405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries.Extra u-boot-2009.03/board/mpl/pip405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pip405/CVS/Entries.Extra 2009-03-25 15:57:34.778182600 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019704/
+/cmd_pip405.c///1238019704/
+/config.mk///1238019704/
+/init.S///1238019704/
+/pip405.c///1238019704/
+/pip405.h///1238019704/
+/u-boot.lds///1238019704/
+/u-boot.lds.debug///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries.Extra.Old u-boot-2009.03/board/mpl/pip405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pip405/CVS/Entries.Extra.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019704/
+/cmd_pip405.c///1238019704/
+/config.mk///1238019704/
+/init.S///1238019704/
+/pip405.c///1238019704/
+/pip405.h///1238019704/
+/u-boot.lds///1238019704/
+/u-boot.lds.debug///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries.Old u-boot-2009.03/board/mpl/pip405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mpl/pip405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pip405/CVS/Entries.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/cmd_pip405.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/pip405.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/pip405.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/pip405/CVS/Repository u-boot-2009.03/board/mpl/pip405/CVS/Repository
--- u-boot-2009.03_orig/board/mpl/pip405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pip405/CVS/Repository 2009-03-25 15:24:43.259615800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpl/pip405
diff -Naur u-boot-2009.03_orig/board/mpl/pip405/CVS/Root u-boot-2009.03/board/mpl/pip405/CVS/Root
--- u-boot-2009.03_orig/board/mpl/pip405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/pip405/CVS/Root 2009-03-25 15:24:43.259615800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries u-boot-2009.03/board/mpl/vcma9/CVS/Entries
--- u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/vcma9/CVS/Entries 2009-03-25 15:57:34.887556900 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_vcma9.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vcma9.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vcma9.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries.Extra u-boot-2009.03/board/mpl/vcma9/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/vcma9/CVS/Entries.Extra 2009-03-25 15:57:34.887556900 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019704/
+/cmd_vcma9.c///1238019704/
+/config.mk///1238019704/
+/flash.c///1238019704/
+/lowlevel_init.S///1238019704/
+/u-boot.lds///1238019704/
+/vcma9.c///1238019704/
+/vcma9.h///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries.Extra.Old u-boot-2009.03/board/mpl/vcma9/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/vcma9/CVS/Entries.Extra.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019704/
+/cmd_vcma9.c///1238019704/
+/config.mk///1238019704/
+/flash.c///1238019704/
+/lowlevel_init.S///1238019704/
+/u-boot.lds///1238019704/
+/vcma9.c///1238019704/
+/vcma9.h///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries.Old u-boot-2009.03/board/mpl/vcma9/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mpl/vcma9/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/vcma9/CVS/Entries.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/cmd_vcma9.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/vcma9.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/vcma9.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpl/vcma9/CVS/Repository u-boot-2009.03/board/mpl/vcma9/CVS/Repository
--- u-boot-2009.03_orig/board/mpl/vcma9/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/vcma9/CVS/Repository 2009-03-25 15:24:43.665860600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpl/vcma9
diff -Naur u-boot-2009.03_orig/board/mpl/vcma9/CVS/Root u-boot-2009.03/board/mpl/vcma9/CVS/Root
--- u-boot-2009.03_orig/board/mpl/vcma9/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpl/vcma9/CVS/Root 2009-03-25 15:24:43.650235800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mpr2/CVS/Entries u-boot-2009.03/board/mpr2/CVS/Entries
--- u-boot-2009.03_orig/board/mpr2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpr2/CVS/Entries 2009-03-25 15:57:34.981306300 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpr2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpr2/CVS/Entries.Extra u-boot-2009.03/board/mpr2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mpr2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpr2/CVS/Entries.Extra 2009-03-25 15:57:34.981306300 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/mpr2.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpr2/CVS/Entries.Extra.Old u-boot-2009.03/board/mpr2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mpr2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpr2/CVS/Entries.Extra.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/mpr2.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/mpr2/CVS/Entries.Old u-boot-2009.03/board/mpr2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mpr2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpr2/CVS/Entries.Old 2009-03-25 15:24:43.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/mpr2.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mpr2/CVS/Repository u-boot-2009.03/board/mpr2/CVS/Repository
--- u-boot-2009.03_orig/board/mpr2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpr2/CVS/Repository 2009-03-25 15:24:43.837733400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mpr2
diff -Naur u-boot-2009.03_orig/board/mpr2/CVS/Root u-boot-2009.03/board/mpr2/CVS/Root
--- u-boot-2009.03_orig/board/mpr2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mpr2/CVS/Root 2009-03-25 15:24:43.822108600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ms7720se/CVS/Entries u-boot-2009.03/board/ms7720se/CVS/Entries
--- u-boot-2009.03_orig/board/ms7720se/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7720se/CVS/Entries 2009-03-25 15:57:35.106305500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7720se.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ms7720se/CVS/Entries.Extra u-boot-2009.03/board/ms7720se/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ms7720se/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7720se/CVS/Entries.Extra 2009-03-25 15:57:35.106305500 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/ms7720se.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/ms7720se/CVS/Entries.Extra.Old u-boot-2009.03/board/ms7720se/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ms7720se/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7720se/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/ms7720se.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/ms7720se/CVS/Entries.Old u-boot-2009.03/board/ms7720se/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ms7720se/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7720se/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/ms7720se.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ms7720se/CVS/Repository u-boot-2009.03/board/ms7720se/CVS/Repository
--- u-boot-2009.03_orig/board/ms7720se/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7720se/CVS/Repository 2009-03-25 15:24:43.947107000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ms7720se
diff -Naur u-boot-2009.03_orig/board/ms7720se/CVS/Root u-boot-2009.03/board/ms7720se/CVS/Root
--- u-boot-2009.03_orig/board/ms7720se/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7720se/CVS/Root 2009-03-25 15:24:43.947107000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ms7722se/CVS/Entries u-boot-2009.03/board/ms7722se/CVS/Entries
--- u-boot-2009.03_orig/board/ms7722se/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7722se/CVS/Entries 2009-03-25 15:57:35.262554500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7722se.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ms7722se/CVS/Entries.Extra u-boot-2009.03/board/ms7722se/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ms7722se/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7722se/CVS/Entries.Extra 2009-03-25 15:57:35.262554500 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/ms7722se.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/ms7722se/CVS/Entries.Extra.Old u-boot-2009.03/board/ms7722se/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ms7722se/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7722se/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/ms7722se.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/ms7722se/CVS/Entries.Old u-boot-2009.03/board/ms7722se/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ms7722se/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7722se/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/ms7722se.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ms7722se/CVS/Repository u-boot-2009.03/board/ms7722se/CVS/Repository
--- u-boot-2009.03_orig/board/ms7722se/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7722se/CVS/Repository 2009-03-25 15:24:44.056480600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ms7722se
diff -Naur u-boot-2009.03_orig/board/ms7722se/CVS/Root u-boot-2009.03/board/ms7722se/CVS/Root
--- u-boot-2009.03_orig/board/ms7722se/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7722se/CVS/Root 2009-03-25 15:24:44.056480600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ms7750se/CVS/Entries u-boot-2009.03/board/ms7750se/CVS/Entries
--- u-boot-2009.03_orig/board/ms7750se/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7750se/CVS/Entries 2009-03-25 15:57:35.340679000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7750se.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ms7750se/CVS/Entries.Extra u-boot-2009.03/board/ms7750se/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ms7750se/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7750se/CVS/Entries.Extra 2009-03-25 15:57:35.340679000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/ms7750se.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/ms7750se/CVS/Entries.Extra.Old u-boot-2009.03/board/ms7750se/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ms7750se/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7750se/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/lowlevel_init.S///1238019704/
+/ms7750se.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/ms7750se/CVS/Entries.Old u-boot-2009.03/board/ms7750se/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ms7750se/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7750se/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/ms7750se.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ms7750se/CVS/Repository u-boot-2009.03/board/ms7750se/CVS/Repository
--- u-boot-2009.03_orig/board/ms7750se/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7750se/CVS/Repository 2009-03-25 15:24:44.181479000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ms7750se
diff -Naur u-boot-2009.03_orig/board/ms7750se/CVS/Root u-boot-2009.03/board/ms7750se/CVS/Root
--- u-boot-2009.03_orig/board/ms7750se/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ms7750se/CVS/Root 2009-03-25 15:24:44.165854200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/muas3001/CVS/Entries u-boot-2009.03/board/muas3001/CVS/Entries
--- u-boot-2009.03_orig/board/muas3001/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/muas3001/CVS/Entries 2009-03-25 15:57:35.403178600 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/muas3001.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/muas3001/CVS/Entries.Extra u-boot-2009.03/board/muas3001/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/muas3001/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/muas3001/CVS/Entries.Extra 2009-03-25 15:57:35.403178600 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/muas3001.c///1238019704/
diff -Naur u-boot-2009.03_orig/board/muas3001/CVS/Entries.Extra.Old u-boot-2009.03/board/muas3001/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/muas3001/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/muas3001/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/muas3001.c///1238019704/
diff -Naur u-boot-2009.03_orig/board/muas3001/CVS/Entries.Old u-boot-2009.03/board/muas3001/CVS/Entries.Old
--- u-boot-2009.03_orig/board/muas3001/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/muas3001/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/muas3001.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/muas3001/CVS/Repository u-boot-2009.03/board/muas3001/CVS/Repository
--- u-boot-2009.03_orig/board/muas3001/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/muas3001/CVS/Repository 2009-03-25 15:24:44.290852600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/muas3001
diff -Naur u-boot-2009.03_orig/board/muas3001/CVS/Root u-boot-2009.03/board/muas3001/CVS/Root
--- u-boot-2009.03_orig/board/muas3001/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/muas3001/CVS/Root 2009-03-25 15:24:44.290852600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mucmc52/CVS/Entries u-boot-2009.03/board/mucmc52/CVS/Entries
--- u-boot-2009.03_orig/board/mucmc52/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mucmc52/CVS/Entries 2009-03-25 15:57:35.465678200 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mucmc52.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mucmc52/CVS/Entries.Extra u-boot-2009.03/board/mucmc52/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mucmc52/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mucmc52/CVS/Entries.Extra 2009-03-25 15:57:35.465678200 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/mucmc52.c///1238019704/
diff -Naur u-boot-2009.03_orig/board/mucmc52/CVS/Entries.Extra.Old u-boot-2009.03/board/mucmc52/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mucmc52/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mucmc52/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/mucmc52.c///1238019704/
diff -Naur u-boot-2009.03_orig/board/mucmc52/CVS/Entries.Old u-boot-2009.03/board/mucmc52/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mucmc52/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mucmc52/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/mucmc52.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mucmc52/CVS/Repository u-boot-2009.03/board/mucmc52/CVS/Repository
--- u-boot-2009.03_orig/board/mucmc52/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mucmc52/CVS/Repository 2009-03-25 15:24:44.493975000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mucmc52
diff -Naur u-boot-2009.03_orig/board/mucmc52/CVS/Root u-boot-2009.03/board/mucmc52/CVS/Root
--- u-boot-2009.03_orig/board/mucmc52/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mucmc52/CVS/Root 2009-03-25 15:24:44.447100600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/munices/CVS/Entries u-boot-2009.03/board/munices/CVS/Entries
--- u-boot-2009.03_orig/board/munices/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/munices/CVS/Entries 2009-03-25 15:57:35.543802700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/munices.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/munices/CVS/Entries.Extra u-boot-2009.03/board/munices/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/munices/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/munices/CVS/Entries.Extra 2009-03-25 15:57:35.543802700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/mt48lc16m16a2-75.h///1238019704/
+/munices.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/munices/CVS/Entries.Extra.Old u-boot-2009.03/board/munices/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/munices/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/munices/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019704/
+/config.mk///1238019704/
+/mt48lc16m16a2-75.h///1238019704/
+/munices.c///1238019704/
+/u-boot.lds///1238019704/
diff -Naur u-boot-2009.03_orig/board/munices/CVS/Entries.Old u-boot-2009.03/board/munices/CVS/Entries.Old
--- u-boot-2009.03_orig/board/munices/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/munices/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/munices.c/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:44 2009//
+D
diff -Naur u-boot-2009.03_orig/board/munices/CVS/Repository u-boot-2009.03/board/munices/CVS/Repository
--- u-boot-2009.03_orig/board/munices/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/munices/CVS/Repository 2009-03-25 15:24:44.603348600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/munices
diff -Naur u-boot-2009.03_orig/board/munices/CVS/Root u-boot-2009.03/board/munices/CVS/Root
--- u-boot-2009.03_orig/board/munices/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/munices/CVS/Root 2009-03-25 15:24:44.603348600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/musenki/CVS/Entries u-boot-2009.03/board/musenki/CVS/Entries
--- u-boot-2009.03_orig/board/musenki/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/musenki/CVS/Entries 2009-03-25 15:57:35.621927200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/musenki.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/musenki/CVS/Entries.Extra u-boot-2009.03/board/musenki/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/musenki/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/musenki/CVS/Entries.Extra 2009-03-25 15:57:35.621927200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019705/
+/README///1238019705/
+/config.mk///1238019704/
+/flash.c///1238019705/
+/musenki.c///1238019705/
diff -Naur u-boot-2009.03_orig/board/musenki/CVS/Entries.Extra.Old u-boot-2009.03/board/musenki/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/musenki/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/musenki/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019705/
+/README///1238019705/
+/config.mk///1238019704/
+/flash.c///1238019705/
+/musenki.c///1238019705/
diff -Naur u-boot-2009.03_orig/board/musenki/CVS/Entries.Old u-boot-2009.03/board/musenki/CVS/Entries.Old
--- u-boot-2009.03_orig/board/musenki/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/musenki/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:44 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/musenki.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/musenki/CVS/Repository u-boot-2009.03/board/musenki/CVS/Repository
--- u-boot-2009.03_orig/board/musenki/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/musenki/CVS/Repository 2009-03-25 15:24:44.728347000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/musenki
diff -Naur u-boot-2009.03_orig/board/musenki/CVS/Root u-boot-2009.03/board/musenki/CVS/Root
--- u-boot-2009.03_orig/board/musenki/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/musenki/CVS/Root 2009-03-25 15:24:44.728347000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mvblue/CVS/Entries u-boot-2009.03/board/mvblue/CVS/Entries
--- u-boot-2009.03_orig/board/mvblue/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mvblue/CVS/Entries 2009-03-25 15:57:35.715676600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mvblue.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mvblue/CVS/Entries.Extra u-boot-2009.03/board/mvblue/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mvblue/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mvblue/CVS/Entries.Extra 2009-03-25 15:57:35.715676600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/mvblue.c///1238019705/
diff -Naur u-boot-2009.03_orig/board/mvblue/CVS/Entries.Extra.Old u-boot-2009.03/board/mvblue/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mvblue/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mvblue/CVS/Entries.Extra.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/mvblue.c///1238019705/
diff -Naur u-boot-2009.03_orig/board/mvblue/CVS/Entries.Old u-boot-2009.03/board/mvblue/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mvblue/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mvblue/CVS/Entries.Old 2009-03-25 15:24:44.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/mvblue.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mvblue/CVS/Repository u-boot-2009.03/board/mvblue/CVS/Repository
--- u-boot-2009.03_orig/board/mvblue/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mvblue/CVS/Repository 2009-03-25 15:24:44.853345400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mvblue
diff -Naur u-boot-2009.03_orig/board/mvblue/CVS/Root u-boot-2009.03/board/mvblue/CVS/Root
--- u-boot-2009.03_orig/board/mvblue/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mvblue/CVS/Root 2009-03-25 15:24:44.837720600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mx1ads/CVS/Entries u-boot-2009.03/board/mx1ads/CVS/Entries
--- u-boot-2009.03_orig/board/mx1ads/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1ads/CVS/Entries 2009-03-25 15:57:35.825050900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx1ads.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/syncflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mx1ads/CVS/Entries.Extra u-boot-2009.03/board/mx1ads/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mx1ads/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1ads/CVS/Entries.Extra 2009-03-25 15:57:35.825050900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/lowlevel_init.S///1238019705/
+/mx1ads.c///1238019705/
+/syncflash.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/mx1ads/CVS/Entries.Extra.Old u-boot-2009.03/board/mx1ads/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mx1ads/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1ads/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/lowlevel_init.S///1238019705/
+/mx1ads.c///1238019705/
+/syncflash.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/mx1ads/CVS/Entries.Old u-boot-2009.03/board/mx1ads/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mx1ads/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1ads/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/mx1ads.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/syncflash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mx1ads/CVS/Repository u-boot-2009.03/board/mx1ads/CVS/Repository
--- u-boot-2009.03_orig/board/mx1ads/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1ads/CVS/Repository 2009-03-25 15:24:44.947094200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mx1ads
diff -Naur u-boot-2009.03_orig/board/mx1ads/CVS/Root u-boot-2009.03/board/mx1ads/CVS/Root
--- u-boot-2009.03_orig/board/mx1ads/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1ads/CVS/Root 2009-03-25 15:24:44.947094200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/mx1fs2/CVS/Entries u-boot-2009.03/board/mx1fs2/CVS/Entries
--- u-boot-2009.03_orig/board/mx1fs2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1fs2/CVS/Entries 2009-03-25 15:57:35.918800300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intel.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx1fs2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mx1fs2/CVS/Entries.Extra u-boot-2009.03/board/mx1fs2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/mx1fs2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1fs2/CVS/Entries.Extra 2009-03-25 15:57:35.934425200 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/intel.h///1238019705/
+/lowlevel_init.S///1238019705/
+/mx1fs2.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/mx1fs2/CVS/Entries.Extra.Old u-boot-2009.03/board/mx1fs2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/mx1fs2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1fs2/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/intel.h///1238019705/
+/lowlevel_init.S///1238019705/
+/mx1fs2.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/mx1fs2/CVS/Entries.Old u-boot-2009.03/board/mx1fs2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/mx1fs2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1fs2/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/intel.h/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/mx1fs2.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/mx1fs2/CVS/Repository u-boot-2009.03/board/mx1fs2/CVS/Repository
--- u-boot-2009.03_orig/board/mx1fs2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1fs2/CVS/Repository 2009-03-25 15:24:45.087717400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/mx1fs2
diff -Naur u-boot-2009.03_orig/board/mx1fs2/CVS/Root u-boot-2009.03/board/mx1fs2/CVS/Root
--- u-boot-2009.03_orig/board/mx1fs2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/mx1fs2/CVS/Root 2009-03-25 15:24:45.087717400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/nc650/CVS/Entries u-boot-2009.03/board/nc650/CVS/Entries
--- u-boot-2009.03_orig/board/nc650/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nc650/CVS/Entries 2009-03-25 15:57:36.012549700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nc650.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/nc650/CVS/Entries.Extra u-boot-2009.03/board/nc650/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/nc650/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nc650/CVS/Entries.Extra 2009-03-25 15:57:36.012549700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/nand.c///1238019705/
+/nc650.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/nc650/CVS/Entries.Extra.Old u-boot-2009.03/board/nc650/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/nc650/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nc650/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/nand.c///1238019705/
+/nc650.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/nc650/CVS/Entries.Old u-boot-2009.03/board/nc650/CVS/Entries.Old
--- u-boot-2009.03_orig/board/nc650/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nc650/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/nc650.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/nc650/CVS/Repository u-boot-2009.03/board/nc650/CVS/Repository
--- u-boot-2009.03_orig/board/nc650/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nc650/CVS/Repository 2009-03-25 15:24:45.228340600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/nc650
diff -Naur u-boot-2009.03_orig/board/nc650/CVS/Root u-boot-2009.03/board/nc650/CVS/Root
--- u-boot-2009.03_orig/board/nc650/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nc650/CVS/Root 2009-03-25 15:24:45.228340600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netphone/CVS/Entries u-boot-2009.03/board/netphone/CVS/Entries
--- u-boot-2009.03_orig/board/netphone/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netphone/CVS/Entries 2009-03-25 15:57:36.293797900 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netphone.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/phone_console.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netphone/CVS/Entries.Extra u-boot-2009.03/board/netphone/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netphone/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netphone/CVS/Entries.Extra 2009-03-25 15:57:36.293797900 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/netphone.c///1238019705/
+/phone_console.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netphone/CVS/Entries.Extra.Old u-boot-2009.03/board/netphone/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netphone/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netphone/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/netphone.c///1238019705/
+/phone_console.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netphone/CVS/Entries.Old u-boot-2009.03/board/netphone/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netphone/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netphone/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/netphone.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/phone_console.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netphone/CVS/Repository u-boot-2009.03/board/netphone/CVS/Repository
--- u-boot-2009.03_orig/board/netphone/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netphone/CVS/Repository 2009-03-25 15:24:45.368963800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netphone
diff -Naur u-boot-2009.03_orig/board/netphone/CVS/Root u-boot-2009.03/board/netphone/CVS/Root
--- u-boot-2009.03_orig/board/netphone/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netphone/CVS/Root 2009-03-25 15:24:45.368963800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netstal/CVS/Entries u-boot-2009.03/board/netstal/CVS/Entries
--- u-boot-2009.03_orig/board/netstal/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/CVS/Entries 2009-03-25 15:24:46.040830200 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/hcu4////
+D/hcu5////
+D/mcu25////
diff -Naur u-boot-2009.03_orig/board/netstal/CVS/Entries.Extra u-boot-2009.03/board/netstal/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netstal/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/CVS/Entries.Extra 2009-03-25 15:24:46.040830200 -0700
@@ -0,0 +1,4 @@
+D/common////
+D/hcu4////
+D/hcu5////
+D/mcu25////
diff -Naur u-boot-2009.03_orig/board/netstal/CVS/Repository u-boot-2009.03/board/netstal/CVS/Repository
--- u-boot-2009.03_orig/board/netstal/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/CVS/Repository 2009-03-25 15:24:45.572086200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netstal
diff -Naur u-boot-2009.03_orig/board/netstal/CVS/Root u-boot-2009.03/board/netstal/CVS/Root
--- u-boot-2009.03_orig/board/netstal/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/CVS/Root 2009-03-25 15:24:45.572086200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netstal/common/CVS/Entries u-boot-2009.03/board/netstal/common/CVS/Entries
--- u-boot-2009.03_orig/board/netstal/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/common/CVS/Entries 2009-03-25 15:57:36.403172200 -0700
@@ -0,0 +1,4 @@
+/fixed_sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nm_bsp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/common/CVS/Entries.Extra u-boot-2009.03/board/netstal/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netstal/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/common/CVS/Entries.Extra 2009-03-25 15:57:36.403172200 -0700
@@ -0,0 +1,3 @@
+/fixed_sdram.c///1238019705/
+/nm.h///1238019705/
+/nm_bsp.c///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/common/CVS/Entries.Extra.Old u-boot-2009.03/board/netstal/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netstal/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/common/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,3 @@
+/fixed_sdram.c///1238019705/
+/nm.h///1238019705/
+/nm_bsp.c///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/common/CVS/Entries.Old u-boot-2009.03/board/netstal/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netstal/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/common/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,4 @@
+/fixed_sdram.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/nm.h/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/nm_bsp.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/common/CVS/Repository u-boot-2009.03/board/netstal/common/CVS/Repository
--- u-boot-2009.03_orig/board/netstal/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/common/CVS/Repository 2009-03-25 15:24:45.587711000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netstal/common
diff -Naur u-boot-2009.03_orig/board/netstal/common/CVS/Root u-boot-2009.03/board/netstal/common/CVS/Root
--- u-boot-2009.03_orig/board/netstal/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/common/CVS/Root 2009-03-25 15:24:45.587711000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries u-boot-2009.03/board/netstal/hcu4/CVS/Entries
--- u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu4/CVS/Entries 2009-03-25 15:57:36.496921600 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hcu4.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries.Extra u-boot-2009.03/board/netstal/hcu4/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu4/CVS/Entries.Extra 2009-03-25 15:57:36.496921600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019705/
+/README.txt///1238019705/
+/config.mk///1238019705/
+/hcu4.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries.Extra.Old u-boot-2009.03/board/netstal/hcu4/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu4/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019705/
+/README.txt///1238019705/
+/config.mk///1238019705/
+/hcu4.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries.Old u-boot-2009.03/board/netstal/hcu4/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netstal/hcu4/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu4/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/README.txt/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/hcu4.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/hcu4/CVS/Repository u-boot-2009.03/board/netstal/hcu4/CVS/Repository
--- u-boot-2009.03_orig/board/netstal/hcu4/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu4/CVS/Repository 2009-03-25 15:24:45.712709400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netstal/hcu4
diff -Naur u-boot-2009.03_orig/board/netstal/hcu4/CVS/Root u-boot-2009.03/board/netstal/hcu4/CVS/Root
--- u-boot-2009.03_orig/board/netstal/hcu4/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu4/CVS/Root 2009-03-25 15:24:45.697084600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries u-boot-2009.03/board/netstal/hcu5/CVS/Entries
--- u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu5/CVS/Entries 2009-03-25 15:57:36.590671000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hcu5.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries.Extra u-boot-2009.03/board/netstal/hcu5/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu5/CVS/Entries.Extra 2009-03-25 15:57:36.590671000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/README.txt///1238019705/
+/config.mk///1238019705/
+/hcu5.c///1238019705/
+/init.S///1238019705/
+/sdram.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries.Extra.Old u-boot-2009.03/board/netstal/hcu5/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu5/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/README.txt///1238019705/
+/config.mk///1238019705/
+/hcu5.c///1238019705/
+/init.S///1238019705/
+/sdram.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries.Old u-boot-2009.03/board/netstal/hcu5/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netstal/hcu5/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu5/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/README.txt/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/hcu5.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/hcu5/CVS/Repository u-boot-2009.03/board/netstal/hcu5/CVS/Repository
--- u-boot-2009.03_orig/board/netstal/hcu5/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu5/CVS/Repository 2009-03-25 15:24:45.822083000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netstal/hcu5
diff -Naur u-boot-2009.03_orig/board/netstal/hcu5/CVS/Root u-boot-2009.03/board/netstal/hcu5/CVS/Root
--- u-boot-2009.03_orig/board/netstal/hcu5/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/hcu5/CVS/Root 2009-03-25 15:24:45.806458200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries u-boot-2009.03/board/netstal/mcu25/CVS/Entries
--- u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/mcu25/CVS/Entries 2009-03-25 15:57:36.668795500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcu25.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries.Extra u-boot-2009.03/board/netstal/mcu25/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/mcu25/CVS/Entries.Extra 2009-03-25 15:57:36.668795500 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019705/
+/README.txt///1238019705/
+/config.mk///1238019705/
+/mcu25.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries.Extra.Old u-boot-2009.03/board/netstal/mcu25/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/mcu25/CVS/Entries.Extra.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019705/
+/README.txt///1238019705/
+/config.mk///1238019705/
+/mcu25.c///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries.Old u-boot-2009.03/board/netstal/mcu25/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netstal/mcu25/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/mcu25/CVS/Entries.Old 2009-03-25 15:24:45.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/README.txt/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/mcu25.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstal/mcu25/CVS/Repository u-boot-2009.03/board/netstal/mcu25/CVS/Repository
--- u-boot-2009.03_orig/board/netstal/mcu25/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/mcu25/CVS/Repository 2009-03-25 15:24:45.947081400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netstal/mcu25
diff -Naur u-boot-2009.03_orig/board/netstal/mcu25/CVS/Root u-boot-2009.03/board/netstal/mcu25/CVS/Root
--- u-boot-2009.03_orig/board/netstal/mcu25/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstal/mcu25/CVS/Root 2009-03-25 15:24:45.947081400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netstar/CVS/Entries u-boot-2009.03/board/netstar/CVS/Entries
--- u-boot-2009.03_orig/board/netstar/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstar/CVS/Entries 2009-03-25 15:57:36.809419600 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crcek.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crcek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crcit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom_start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netstar.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/setup.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstar/CVS/Entries.Extra u-boot-2009.03/board/netstar/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netstar/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstar/CVS/Entries.Extra 2009-03-25 15:57:36.809419600 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/crcek.S///1238019705/
+/crcek.h///1238019705/
+/crcit.c///1238019705/
+/eeprom.c///1238019705/
+/eeprom.lds///1238019705/
+/eeprom_start.S///1238019705/
+/flash.c///1238019705/
+/nand.c///1238019705/
+/netstar.c///1238019705/
+/setup.S///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstar/CVS/Entries.Extra.Old u-boot-2009.03/board/netstar/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netstar/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstar/CVS/Entries.Extra.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/crcek.S///1238019705/
+/crcek.h///1238019705/
+/crcit.c///1238019705/
+/eeprom.c///1238019705/
+/eeprom.lds///1238019705/
+/eeprom_start.S///1238019705/
+/flash.c///1238019705/
+/nand.c///1238019705/
+/netstar.c///1238019705/
+/setup.S///1238019705/
+/u-boot.lds///1238019705/
diff -Naur u-boot-2009.03_orig/board/netstar/CVS/Entries.Old u-boot-2009.03/board/netstar/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netstar/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstar/CVS/Entries.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/crcek.S/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/crcek.h/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/crcit.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/eeprom.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/eeprom.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/eeprom_start.S/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/netstar.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/setup.S/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netstar/CVS/Repository u-boot-2009.03/board/netstar/CVS/Repository
--- u-boot-2009.03_orig/board/netstar/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstar/CVS/Repository 2009-03-25 15:24:46.087704600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netstar
diff -Naur u-boot-2009.03_orig/board/netstar/CVS/Root u-boot-2009.03/board/netstar/CVS/Root
--- u-boot-2009.03_orig/board/netstar/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netstar/CVS/Root 2009-03-25 15:24:46.072079800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netta/CVS/Entries u-boot-2009.03/board/netta/CVS/Entries
--- u-boot-2009.03_orig/board/netta/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta/CVS/Entries 2009-03-25 15:57:36.934418800 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/codec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dsp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netta.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netta/CVS/Entries.Extra u-boot-2009.03/board/netta/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netta/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta/CVS/Entries.Extra 2009-03-25 15:57:36.934418800 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019705/
+/codec.c///1238019705/
+/config.mk///1238019705/
+/dsp.c///1238019705/
+/flash.c///1238019705/
+/netta.c///1238019705/
+/pcmcia.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netta/CVS/Entries.Extra.Old u-boot-2009.03/board/netta/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netta/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta/CVS/Entries.Extra.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019705/
+/codec.c///1238019705/
+/config.mk///1238019705/
+/dsp.c///1238019705/
+/flash.c///1238019705/
+/netta.c///1238019705/
+/pcmcia.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netta/CVS/Entries.Old u-boot-2009.03/board/netta/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netta/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta/CVS/Entries.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/codec.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/dsp.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/netta.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netta/CVS/Repository u-boot-2009.03/board/netta/CVS/Repository
--- u-boot-2009.03_orig/board/netta/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta/CVS/Repository 2009-03-25 15:24:46.259577400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netta
diff -Naur u-boot-2009.03_orig/board/netta/CVS/Root u-boot-2009.03/board/netta/CVS/Root
--- u-boot-2009.03_orig/board/netta/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta/CVS/Root 2009-03-25 15:24:46.259577400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netta2/CVS/Entries u-boot-2009.03/board/netta2/CVS/Entries
--- u-boot-2009.03_orig/board/netta2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta2/CVS/Entries 2009-03-25 15:57:37.028168200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netta2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netta2/CVS/Entries.Extra u-boot-2009.03/board/netta2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netta2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta2/CVS/Entries.Extra 2009-03-25 15:57:37.043793100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/netta2.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netta2/CVS/Entries.Extra.Old u-boot-2009.03/board/netta2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netta2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta2/CVS/Entries.Extra.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/netta2.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netta2/CVS/Entries.Old u-boot-2009.03/board/netta2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netta2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta2/CVS/Entries.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/netta2.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netta2/CVS/Repository u-boot-2009.03/board/netta2/CVS/Repository
--- u-boot-2009.03_orig/board/netta2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta2/CVS/Repository 2009-03-25 15:24:46.650197400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netta2
diff -Naur u-boot-2009.03_orig/board/netta2/CVS/Root u-boot-2009.03/board/netta2/CVS/Root
--- u-boot-2009.03_orig/board/netta2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netta2/CVS/Root 2009-03-25 15:24:46.634572600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/netvia/CVS/Entries u-boot-2009.03/board/netvia/CVS/Entries
--- u-boot-2009.03_orig/board/netvia/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netvia/CVS/Entries 2009-03-25 15:57:37.184417200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netvia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netvia/CVS/Entries.Extra u-boot-2009.03/board/netvia/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/netvia/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netvia/CVS/Entries.Extra 2009-03-25 15:57:37.184417200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/netvia.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netvia/CVS/Entries.Extra.Old u-boot-2009.03/board/netvia/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/netvia/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netvia/CVS/Entries.Extra.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/netvia.c///1238019705/
+/u-boot.lds///1238019705/
+/u-boot.lds.debug///1238019705/
diff -Naur u-boot-2009.03_orig/board/netvia/CVS/Entries.Old u-boot-2009.03/board/netvia/CVS/Entries.Old
--- u-boot-2009.03_orig/board/netvia/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netvia/CVS/Entries.Old 2009-03-25 15:24:46.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/netvia.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:45 2009//
+D
diff -Naur u-boot-2009.03_orig/board/netvia/CVS/Repository u-boot-2009.03/board/netvia/CVS/Repository
--- u-boot-2009.03_orig/board/netvia/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netvia/CVS/Repository 2009-03-25 15:24:46.759571000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/netvia
diff -Naur u-boot-2009.03_orig/board/netvia/CVS/Root u-boot-2009.03/board/netvia/CVS/Root
--- u-boot-2009.03_orig/board/netvia/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/netvia/CVS/Root 2009-03-25 15:24:46.759571000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ns9750dev/CVS/Entries u-boot-2009.03/board/ns9750dev/CVS/Entries
--- u-boot-2009.03_orig/board/ns9750dev/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ns9750dev/CVS/Entries 2009-03-31 14:47:06.680672800 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns9750dev.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Tue Mar 31 21:47:06 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/ns9750dev/CVS/Entries.Extra u-boot-2009.03/board/ns9750dev/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ns9750dev/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ns9750dev/CVS/Entries.Extra 2009-03-31 14:47:06.680672800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/lowlevel_init.S///1238019705/
+/ns9750dev.c///1238019705/
+/u-boot.lds///1238019705/
+/led.c///1238019705/
diff -Naur u-boot-2009.03_orig/board/ns9750dev/CVS/Entries.Extra.Old u-boot-2009.03/board/ns9750dev/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ns9750dev/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ns9750dev/CVS/Entries.Extra.Old 2009-03-25 17:51:38.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019705/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/lowlevel_init.S///1238019705/
+/ns9750dev.c///1238019705/
+/u-boot.lds///1238019705/
+/led.c///1238028698/
diff -Naur u-boot-2009.03_orig/board/ns9750dev/CVS/Entries.Old u-boot-2009.03/board/ns9750dev/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ns9750dev/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ns9750dev/CVS/Entries.Old 2009-03-25 17:51:38.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns9750dev.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.2/Thu Mar 26 00:51:38 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ns9750dev/CVS/Repository u-boot-2009.03/board/ns9750dev/CVS/Repository
--- u-boot-2009.03_orig/board/ns9750dev/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ns9750dev/CVS/Repository 2009-03-25 15:24:46.884569400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ns9750dev
diff -Naur u-boot-2009.03_orig/board/ns9750dev/CVS/Root u-boot-2009.03/board/ns9750dev/CVS/Root
--- u-boot-2009.03_orig/board/ns9750dev/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ns9750dev/CVS/Root 2009-03-25 15:24:46.884569400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ns9750dev/led.c u-boot-2009.03/board/ns9750dev/led.c
--- u-boot-2009.03_orig/board/ns9750dev/led.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/ns9750dev/led.c 2009-03-31 14:47:06.540049600 -0700
@@ -1,46 +1,46 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: led.c,v 1.1 2004/02/16 10:37:20 mpietrek Exp $
- * @Author: Markus Pietrek
- * @Descr: Defines helper functions for toggeling LEDs
- * @Usage:
- * @References: [1]
- *
- * 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
- *
- ***********************************************************************/
-
-#ifdef CONFIG_STATUS_LED
-
-#include <ns9750_bbus.h>
-
-static inline void __led_init( led_id_t mask, int state )
-{
- XXXX;
-}
-
-static inline void __led_toggle( led_id_t mask )
-{
-}
-
-static inline void __led_set( led_id_t mask, int state )
-{
-}
-
-#endif /* CONFIG_STATUS_LED */
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: led.c,v 1.1.1.1 2009/03/25 22:21:45 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @Descr: Defines helper functions for toggeling LEDs
+ * @Usage:
+ * @References: [1]
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#ifdef CONFIG_STATUS_LED
+
+#include <ns9750_bbus.h>
+
+static inline void __led_init( led_id_t mask, int state )
+{
+ XXXX;
+}
+
+static inline void __led_toggle( led_id_t mask )
+{
+}
+
+static inline void __led_set( led_id_t mask, int state )
+{
+}
+
+#endif /* CONFIG_STATUS_LED */
diff -Naur u-boot-2009.03_orig/board/nx823/CVS/Entries u-boot-2009.03/board/nx823/CVS/Entries
--- u-boot-2009.03_orig/board/nx823/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nx823/CVS/Entries 2009-03-25 15:57:37.387540900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nx823.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/nx823/CVS/Entries.Extra u-boot-2009.03/board/nx823/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/nx823/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nx823/CVS/Entries.Extra 2009-03-25 15:57:37.387540900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/nx823.c///1238019706/
+/u-boot.lds///1238019706/
+/u-boot.lds.debug///1238019706/
diff -Naur u-boot-2009.03_orig/board/nx823/CVS/Entries.Extra.Old u-boot-2009.03/board/nx823/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/nx823/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nx823/CVS/Entries.Extra.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019705/
+/flash.c///1238019705/
+/nx823.c///1238019706/
+/u-boot.lds///1238019706/
+/u-boot.lds.debug///1238019706/
diff -Naur u-boot-2009.03_orig/board/nx823/CVS/Entries.Old u-boot-2009.03/board/nx823/CVS/Entries.Old
--- u-boot-2009.03_orig/board/nx823/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nx823/CVS/Entries.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:45 2009//
+/nx823.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/nx823/CVS/Repository u-boot-2009.03/board/nx823/CVS/Repository
--- u-boot-2009.03_orig/board/nx823/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nx823/CVS/Repository 2009-03-25 15:24:47.040817400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/nx823
diff -Naur u-boot-2009.03_orig/board/nx823/CVS/Root u-boot-2009.03/board/nx823/CVS/Root
--- u-boot-2009.03_orig/board/nx823/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/nx823/CVS/Root 2009-03-25 15:24:47.040817400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/o2dnt/CVS/Entries u-boot-2009.03/board/o2dnt/CVS/Entries
--- u-boot-2009.03_orig/board/o2dnt/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/o2dnt/CVS/Entries 2009-03-25 15:57:37.481290300 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/o2dnt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/o2dnt/CVS/Entries.Extra u-boot-2009.03/board/o2dnt/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/o2dnt/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/o2dnt/CVS/Entries.Extra 2009-03-25 15:57:37.481290300 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/o2dnt.c///1238019706/
diff -Naur u-boot-2009.03_orig/board/o2dnt/CVS/Entries.Extra.Old u-boot-2009.03/board/o2dnt/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/o2dnt/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/o2dnt/CVS/Entries.Extra.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/o2dnt.c///1238019706/
diff -Naur u-boot-2009.03_orig/board/o2dnt/CVS/Entries.Old u-boot-2009.03/board/o2dnt/CVS/Entries.Old
--- u-boot-2009.03_orig/board/o2dnt/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/o2dnt/CVS/Entries.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/o2dnt.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/o2dnt/CVS/Repository u-boot-2009.03/board/o2dnt/CVS/Repository
--- u-boot-2009.03_orig/board/o2dnt/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/o2dnt/CVS/Repository 2009-03-25 15:24:47.165815800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/o2dnt
diff -Naur u-boot-2009.03_orig/board/o2dnt/CVS/Root u-boot-2009.03/board/o2dnt/CVS/Root
--- u-boot-2009.03_orig/board/o2dnt/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/o2dnt/CVS/Root 2009-03-25 15:24:47.165815800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap1510inn/CVS/Entries u-boot-2009.03/board/omap1510inn/CVS/Entries
--- u-boot-2009.03_orig/board/omap1510inn/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1510inn/CVS/Entries 2009-03-25 15:57:37.559414800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1510innovator.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap1510inn/CVS/Entries.Extra u-boot-2009.03/board/omap1510inn/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap1510inn/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1510inn/CVS/Entries.Extra 2009-03-25 15:57:37.559414800 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/lowlevel_init.S///1238019706/
+/omap1510innovator.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap1510inn/CVS/Entries.Extra.Old u-boot-2009.03/board/omap1510inn/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap1510inn/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1510inn/CVS/Entries.Extra.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/lowlevel_init.S///1238019706/
+/omap1510innovator.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap1510inn/CVS/Entries.Old u-boot-2009.03/board/omap1510inn/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap1510inn/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1510inn/CVS/Entries.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/omap1510innovator.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap1510inn/CVS/Repository u-boot-2009.03/board/omap1510inn/CVS/Repository
--- u-boot-2009.03_orig/board/omap1510inn/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1510inn/CVS/Repository 2009-03-25 15:24:47.275189400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap1510inn
diff -Naur u-boot-2009.03_orig/board/omap1510inn/CVS/Root u-boot-2009.03/board/omap1510inn/CVS/Root
--- u-boot-2009.03_orig/board/omap1510inn/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1510inn/CVS/Root 2009-03-25 15:24:47.275189400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap1610inn/CVS/Entries u-boot-2009.03/board/omap1610inn/CVS/Entries
--- u-boot-2009.03_orig/board/omap1610inn/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1610inn/CVS/Entries 2009-03-25 15:57:37.653164200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1610innovator.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap1610inn/CVS/Entries.Extra u-boot-2009.03/board/omap1610inn/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap1610inn/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1610inn/CVS/Entries.Extra 2009-03-25 15:57:37.653164200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019706/
+/omap1610innovator.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap1610inn/CVS/Entries.Extra.Old u-boot-2009.03/board/omap1610inn/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap1610inn/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1610inn/CVS/Entries.Extra.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019706/
+/omap1610innovator.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap1610inn/CVS/Entries.Old u-boot-2009.03/board/omap1610inn/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap1610inn/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1610inn/CVS/Entries.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/omap1610innovator.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap1610inn/CVS/Repository u-boot-2009.03/board/omap1610inn/CVS/Repository
--- u-boot-2009.03_orig/board/omap1610inn/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1610inn/CVS/Repository 2009-03-25 15:24:47.603310200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap1610inn
diff -Naur u-boot-2009.03_orig/board/omap1610inn/CVS/Root u-boot-2009.03/board/omap1610inn/CVS/Root
--- u-boot-2009.03_orig/board/omap1610inn/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap1610inn/CVS/Root 2009-03-25 15:24:47.587685400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap2420h4/CVS/Entries u-boot-2009.03/board/omap2420h4/CVS/Entries
--- u-boot-2009.03_orig/board/omap2420h4/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap2420h4/CVS/Entries 2009-03-25 15:57:37.762538500 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap2420h4.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys_info.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap2420h4/CVS/Entries.Extra u-boot-2009.03/board/omap2420h4/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap2420h4/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap2420h4/CVS/Entries.Extra 2009-03-25 15:57:37.762538500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/lowlevel_init.S///1238019706/
+/mem.c///1238019706/
+/omap2420h4.c///1238019706/
+/sys_info.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap2420h4/CVS/Entries.Extra.Old u-boot-2009.03/board/omap2420h4/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap2420h4/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap2420h4/CVS/Entries.Extra.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/lowlevel_init.S///1238019706/
+/mem.c///1238019706/
+/omap2420h4.c///1238019706/
+/sys_info.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap2420h4/CVS/Entries.Old u-boot-2009.03/board/omap2420h4/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap2420h4/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap2420h4/CVS/Entries.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/mem.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/omap2420h4.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/sys_info.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap2420h4/CVS/Repository u-boot-2009.03/board/omap2420h4/CVS/Repository
--- u-boot-2009.03_orig/board/omap2420h4/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap2420h4/CVS/Repository 2009-03-25 15:24:47.759558200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap2420h4
diff -Naur u-boot-2009.03_orig/board/omap2420h4/CVS/Root u-boot-2009.03/board/omap2420h4/CVS/Root
--- u-boot-2009.03_orig/board/omap2420h4/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap2420h4/CVS/Root 2009-03-25 15:24:47.759558200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap3/CVS/Entries u-boot-2009.03/board/omap3/CVS/Entries
--- u-boot-2009.03_orig/board/omap3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/CVS/Entries 2009-03-25 15:24:48.728295800 -0700
@@ -0,0 +1,6 @@
+D/beagle////
+D/common////
+D/evm////
+D/overo////
+D/pandora////
+D/zoom1////
diff -Naur u-boot-2009.03_orig/board/omap3/CVS/Entries.Extra u-boot-2009.03/board/omap3/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/CVS/Entries.Extra 2009-03-25 15:24:48.743920600 -0700
@@ -0,0 +1,6 @@
+D/beagle////
+D/common////
+D/evm////
+D/overo////
+D/pandora////
+D/zoom1////
diff -Naur u-boot-2009.03_orig/board/omap3/CVS/Repository u-boot-2009.03/board/omap3/CVS/Repository
--- u-boot-2009.03_orig/board/omap3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/CVS/Repository 2009-03-25 15:24:47.900181400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap3
diff -Naur u-boot-2009.03_orig/board/omap3/CVS/Root u-boot-2009.03/board/omap3/CVS/Root
--- u-boot-2009.03_orig/board/omap3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/CVS/Root 2009-03-25 15:24:47.900181400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries u-boot-2009.03/board/omap3/beagle/CVS/Entries
--- u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/beagle/CVS/Entries 2009-03-25 15:57:37.856287900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/beagle.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/beagle.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries.Extra u-boot-2009.03/board/omap3/beagle/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/beagle/CVS/Entries.Extra 2009-03-25 15:57:37.856287900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/beagle.c///1238019706/
+/beagle.h///1238019706/
+/config.mk///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries.Extra.Old u-boot-2009.03/board/omap3/beagle/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/beagle/CVS/Entries.Extra.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/beagle.c///1238019706/
+/beagle.h///1238019706/
+/config.mk///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries.Old u-boot-2009.03/board/omap3/beagle/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap3/beagle/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/beagle/CVS/Entries.Old 2009-03-25 15:24:47.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/beagle.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/beagle.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/beagle/CVS/Repository u-boot-2009.03/board/omap3/beagle/CVS/Repository
--- u-boot-2009.03_orig/board/omap3/beagle/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/beagle/CVS/Repository 2009-03-25 15:24:47.931431000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap3/beagle
diff -Naur u-boot-2009.03_orig/board/omap3/beagle/CVS/Root u-boot-2009.03/board/omap3/beagle/CVS/Root
--- u-boot-2009.03_orig/board/omap3/beagle/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/beagle/CVS/Root 2009-03-25 15:24:47.931431000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap3/common/CVS/Entries u-boot-2009.03/board/omap3/common/CVS/Entries
--- u-boot-2009.03_orig/board/omap3/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/common/CVS/Entries 2009-03-25 15:57:37.934412400 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/power.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/common/CVS/Entries.Extra u-boot-2009.03/board/omap3/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap3/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/common/CVS/Entries.Extra 2009-03-25 15:57:37.934412400 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019706/
+/power.c///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/common/CVS/Entries.Extra.Old u-boot-2009.03/board/omap3/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap3/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/common/CVS/Entries.Extra.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019706/
+/power.c///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/common/CVS/Entries.Old u-boot-2009.03/board/omap3/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap3/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/common/CVS/Entries.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/power.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/common/CVS/Repository u-boot-2009.03/board/omap3/common/CVS/Repository
--- u-boot-2009.03_orig/board/omap3/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/common/CVS/Repository 2009-03-25 15:24:48.056429400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap3/common
diff -Naur u-boot-2009.03_orig/board/omap3/common/CVS/Root u-boot-2009.03/board/omap3/common/CVS/Root
--- u-boot-2009.03_orig/board/omap3/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/common/CVS/Root 2009-03-25 15:24:48.040804600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap3/evm/CVS/Entries u-boot-2009.03/board/omap3/evm/CVS/Entries
--- u-boot-2009.03_orig/board/omap3/evm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/evm/CVS/Entries 2009-03-25 15:57:38.028161800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/evm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/evm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/evm/CVS/Entries.Extra u-boot-2009.03/board/omap3/evm/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap3/evm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/evm/CVS/Entries.Extra 2009-03-25 15:57:38.028161800 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/evm.c///1238019706/
+/evm.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/evm/CVS/Entries.Extra.Old u-boot-2009.03/board/omap3/evm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap3/evm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/evm/CVS/Entries.Extra.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/evm.c///1238019706/
+/evm.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/evm/CVS/Entries.Old u-boot-2009.03/board/omap3/evm/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap3/evm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/evm/CVS/Entries.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/evm.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/evm.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/evm/CVS/Repository u-boot-2009.03/board/omap3/evm/CVS/Repository
--- u-boot-2009.03_orig/board/omap3/evm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/evm/CVS/Repository 2009-03-25 15:24:48.150178200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap3/evm
diff -Naur u-boot-2009.03_orig/board/omap3/evm/CVS/Root u-boot-2009.03/board/omap3/evm/CVS/Root
--- u-boot-2009.03_orig/board/omap3/evm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/evm/CVS/Root 2009-03-25 15:24:48.134553400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap3/overo/CVS/Entries u-boot-2009.03/board/omap3/overo/CVS/Entries
--- u-boot-2009.03_orig/board/omap3/overo/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/overo/CVS/Entries 2009-03-25 15:57:38.184410800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/overo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/overo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/overo/CVS/Entries.Extra u-boot-2009.03/board/omap3/overo/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap3/overo/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/overo/CVS/Entries.Extra 2009-03-25 15:57:38.184410800 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/overo.c///1238019706/
+/overo.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/overo/CVS/Entries.Extra.Old u-boot-2009.03/board/omap3/overo/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap3/overo/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/overo/CVS/Entries.Extra.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/overo.c///1238019706/
+/overo.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/overo/CVS/Entries.Old u-boot-2009.03/board/omap3/overo/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap3/overo/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/overo/CVS/Entries.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/overo.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/overo.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/overo/CVS/Repository u-boot-2009.03/board/omap3/overo/CVS/Repository
--- u-boot-2009.03_orig/board/omap3/overo/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/overo/CVS/Repository 2009-03-25 15:24:48.243927000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap3/overo
diff -Naur u-boot-2009.03_orig/board/omap3/overo/CVS/Root u-boot-2009.03/board/omap3/overo/CVS/Root
--- u-boot-2009.03_orig/board/omap3/overo/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/overo/CVS/Root 2009-03-25 15:24:48.243927000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries u-boot-2009.03/board/omap3/pandora/CVS/Entries
--- u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/pandora/CVS/Entries 2009-03-25 15:57:38.262535300 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pandora.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pandora.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries.Extra u-boot-2009.03/board/omap3/pandora/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/pandora/CVS/Entries.Extra 2009-03-25 15:57:38.278160200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/pandora.c///1238019706/
+/pandora.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries.Extra.Old u-boot-2009.03/board/omap3/pandora/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/pandora/CVS/Entries.Extra.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/pandora.c///1238019706/
+/pandora.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries.Old u-boot-2009.03/board/omap3/pandora/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap3/pandora/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/pandora/CVS/Entries.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pandora.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pandora.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/pandora/CVS/Repository u-boot-2009.03/board/omap3/pandora/CVS/Repository
--- u-boot-2009.03_orig/board/omap3/pandora/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/pandora/CVS/Repository 2009-03-25 15:24:48.353300600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap3/pandora
diff -Naur u-boot-2009.03_orig/board/omap3/pandora/CVS/Root u-boot-2009.03/board/omap3/pandora/CVS/Root
--- u-boot-2009.03_orig/board/omap3/pandora/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/pandora/CVS/Root 2009-03-25 15:24:48.353300600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries u-boot-2009.03/board/omap3/zoom1/CVS/Entries
--- u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/zoom1/CVS/Entries 2009-03-25 15:57:38.356284700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zoom1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zoom1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries.Extra u-boot-2009.03/board/omap3/zoom1/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/zoom1/CVS/Entries.Extra 2009-03-25 15:57:38.356284700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/u-boot.lds///1238019706/
+/zoom1.c///1238019706/
+/zoom1.h///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries.Extra.Old u-boot-2009.03/board/omap3/zoom1/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/zoom1/CVS/Entries.Extra.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/u-boot.lds///1238019706/
+/zoom1.c///1238019706/
+/zoom1.h///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries.Old u-boot-2009.03/board/omap3/zoom1/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap3/zoom1/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/zoom1/CVS/Entries.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/zoom1.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/zoom1.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap3/zoom1/CVS/Repository u-boot-2009.03/board/omap3/zoom1/CVS/Repository
--- u-boot-2009.03_orig/board/omap3/zoom1/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/zoom1/CVS/Repository 2009-03-25 15:24:48.634547000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap3/zoom1
diff -Naur u-boot-2009.03_orig/board/omap3/zoom1/CVS/Root u-boot-2009.03/board/omap3/zoom1/CVS/Root
--- u-boot-2009.03_orig/board/omap3/zoom1/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap3/zoom1/CVS/Root 2009-03-25 15:24:48.634547000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap5912osk/CVS/Entries u-boot-2009.03/board/omap5912osk/CVS/Entries
--- u-boot-2009.03_orig/board/omap5912osk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap5912osk/CVS/Entries 2009-03-25 15:57:38.450034100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap5912osk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap5912osk/CVS/Entries.Extra u-boot-2009.03/board/omap5912osk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap5912osk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap5912osk/CVS/Entries.Extra 2009-03-25 15:57:38.450034100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/lowlevel_init.S///1238019706/
+/omap5912osk.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap5912osk/CVS/Entries.Extra.Old u-boot-2009.03/board/omap5912osk/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap5912osk/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap5912osk/CVS/Entries.Extra.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/lowlevel_init.S///1238019706/
+/omap5912osk.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap5912osk/CVS/Entries.Old u-boot-2009.03/board/omap5912osk/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap5912osk/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap5912osk/CVS/Entries.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/omap5912osk.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap5912osk/CVS/Repository u-boot-2009.03/board/omap5912osk/CVS/Repository
--- u-boot-2009.03_orig/board/omap5912osk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap5912osk/CVS/Repository 2009-03-25 15:24:48.775170200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap5912osk
diff -Naur u-boot-2009.03_orig/board/omap5912osk/CVS/Root u-boot-2009.03/board/omap5912osk/CVS/Root
--- u-boot-2009.03_orig/board/omap5912osk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap5912osk/CVS/Root 2009-03-25 15:24:48.775170200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/omap730p2/CVS/Entries u-boot-2009.03/board/omap730p2/CVS/Entries
--- u-boot-2009.03_orig/board/omap730p2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap730p2/CVS/Entries 2009-03-25 15:57:38.559408400 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap730p2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap730p2/CVS/Entries.Extra u-boot-2009.03/board/omap730p2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/omap730p2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap730p2/CVS/Entries.Extra 2009-03-25 15:57:38.559408400 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019706/
+/omap730p2.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap730p2/CVS/Entries.Extra.Old u-boot-2009.03/board/omap730p2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/omap730p2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap730p2/CVS/Entries.Extra.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019706/
+/omap730p2.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/omap730p2/CVS/Entries.Old u-boot-2009.03/board/omap730p2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/omap730p2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap730p2/CVS/Entries.Old 2009-03-25 15:24:48.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/omap730p2.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/omap730p2/CVS/Repository u-boot-2009.03/board/omap730p2/CVS/Repository
--- u-boot-2009.03_orig/board/omap730p2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap730p2/CVS/Repository 2009-03-25 15:24:48.900168600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/omap730p2
diff -Naur u-boot-2009.03_orig/board/omap730p2/CVS/Root u-boot-2009.03/board/omap730p2/CVS/Root
--- u-boot-2009.03_orig/board/omap730p2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/omap730p2/CVS/Root 2009-03-25 15:24:48.900168600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/oxc/CVS/Entries u-boot-2009.03/board/oxc/CVS/Entries
--- u-boot-2009.03_orig/board/oxc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/oxc/CVS/Entries 2009-03-25 15:57:38.637532900 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/oxc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/oxc/CVS/Entries.Extra u-boot-2009.03/board/oxc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/oxc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/oxc/CVS/Entries.Extra 2009-03-25 15:57:38.637532900 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/oxc.c///1238019706/
diff -Naur u-boot-2009.03_orig/board/oxc/CVS/Entries.Extra.Old u-boot-2009.03/board/oxc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/oxc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/oxc/CVS/Entries.Extra.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/oxc.c///1238019706/
diff -Naur u-boot-2009.03_orig/board/oxc/CVS/Entries.Old u-boot-2009.03/board/oxc/CVS/Entries.Old
--- u-boot-2009.03_orig/board/oxc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/oxc/CVS/Entries.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/oxc.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/oxc/CVS/Repository u-boot-2009.03/board/oxc/CVS/Repository
--- u-boot-2009.03_orig/board/oxc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/oxc/CVS/Repository 2009-03-25 15:24:49.040791800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/oxc
diff -Naur u-boot-2009.03_orig/board/oxc/CVS/Root u-boot-2009.03/board/oxc/CVS/Root
--- u-boot-2009.03_orig/board/oxc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/oxc/CVS/Root 2009-03-25 15:24:49.025167000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pb1x00/CVS/Entries u-boot-2009.03/board/pb1x00/CVS/Entries
--- u-boot-2009.03_orig/board/pb1x00/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pb1x00/CVS/Entries 2009-03-25 15:57:38.731282300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pb1x00.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pb1x00/CVS/Entries.Extra u-boot-2009.03/board/pb1x00/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pb1x00/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pb1x00/CVS/Entries.Extra 2009-03-25 15:57:38.731282300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019706/
+/README///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019706/
+/pb1x00.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/pb1x00/CVS/Entries.Extra.Old u-boot-2009.03/board/pb1x00/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pb1x00/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pb1x00/CVS/Entries.Extra.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019706/
+/README///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019706/
+/pb1x00.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/pb1x00/CVS/Entries.Old u-boot-2009.03/board/pb1x00/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pb1x00/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pb1x00/CVS/Entries.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pb1x00.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pb1x00/CVS/Repository u-boot-2009.03/board/pb1x00/CVS/Repository
--- u-boot-2009.03_orig/board/pb1x00/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pb1x00/CVS/Repository 2009-03-25 15:24:49.134540600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pb1x00
diff -Naur u-boot-2009.03_orig/board/pb1x00/CVS/Root u-boot-2009.03/board/pb1x00/CVS/Root
--- u-boot-2009.03_orig/board/pb1x00/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pb1x00/CVS/Root 2009-03-25 15:24:49.134540600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pcippc2/CVS/Entries u-boot-2009.03/board/pcippc2/CVS/Entries
--- u-boot-2009.03_orig/board/pcippc2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcippc2/CVS/Entries 2009-03-25 15:57:38.887531300 -0700
@@ -0,0 +1,21 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpc710.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpc710_init_ram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpc710_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpc710_pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga_serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga_serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcippc2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcippc2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcippc2_fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcippc2_fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sconsole.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sconsole.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pcippc2/CVS/Entries.Extra u-boot-2009.03/board/pcippc2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pcippc2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcippc2/CVS/Entries.Extra 2009-03-25 15:57:38.887531300 -0700
@@ -0,0 +1,20 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/cpc710.h///1238019706/
+/cpc710_init_ram.c///1238019706/
+/cpc710_pci.c///1238019706/
+/cpc710_pci.h///1238019706/
+/flash.c///1238019706/
+/fpga_serial.c///1238019706/
+/fpga_serial.h///1238019706/
+/hardware.h///1238019706/
+/i2c.c///1238019706/
+/i2c.h///1238019706/
+/ns16550.h///1238019706/
+/pcippc2.c///1238019706/
+/pcippc2.h///1238019706/
+/pcippc2_fpga.c///1238019706/
+/pcippc2_fpga.h///1238019706/
+/sconsole.c///1238019706/
+/sconsole.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/pcippc2/CVS/Entries.Extra.Old u-boot-2009.03/board/pcippc2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pcippc2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcippc2/CVS/Entries.Extra.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,20 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/cpc710.h///1238019706/
+/cpc710_init_ram.c///1238019706/
+/cpc710_pci.c///1238019706/
+/cpc710_pci.h///1238019706/
+/flash.c///1238019706/
+/fpga_serial.c///1238019706/
+/fpga_serial.h///1238019706/
+/hardware.h///1238019706/
+/i2c.c///1238019706/
+/i2c.h///1238019706/
+/ns16550.h///1238019706/
+/pcippc2.c///1238019706/
+/pcippc2.h///1238019706/
+/pcippc2_fpga.c///1238019706/
+/pcippc2_fpga.h///1238019706/
+/sconsole.c///1238019706/
+/sconsole.h///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/pcippc2/CVS/Entries.Old u-boot-2009.03/board/pcippc2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pcippc2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcippc2/CVS/Entries.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,21 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/cpc710.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/cpc710_init_ram.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/cpc710_pci.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/cpc710_pci.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/fpga_serial.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/fpga_serial.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/hardware.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/i2c.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/ns16550.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pcippc2.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pcippc2.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pcippc2_fpga.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pcippc2_fpga.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/sconsole.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/sconsole.h/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pcippc2/CVS/Repository u-boot-2009.03/board/pcippc2/CVS/Repository
--- u-boot-2009.03_orig/board/pcippc2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcippc2/CVS/Repository 2009-03-25 15:24:49.259539000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pcippc2
diff -Naur u-boot-2009.03_orig/board/pcippc2/CVS/Root u-boot-2009.03/board/pcippc2/CVS/Root
--- u-boot-2009.03_orig/board/pcippc2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcippc2/CVS/Root 2009-03-25 15:24:49.259539000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pcs440ep/CVS/Entries u-boot-2009.03/board/pcs440ep/CVS/Entries
--- u-boot-2009.03_orig/board/pcs440ep/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcs440ep/CVS/Entries 2009-03-25 15:57:38.996905600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcs440ep.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pcs440ep/CVS/Entries.Extra u-boot-2009.03/board/pcs440ep/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pcs440ep/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcs440ep/CVS/Entries.Extra 2009-03-25 15:57:38.996905600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/init.S///1238019706/
+/pcs440ep.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/pcs440ep/CVS/Entries.Extra.Old u-boot-2009.03/board/pcs440ep/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pcs440ep/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcs440ep/CVS/Entries.Extra.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019706/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/init.S///1238019706/
+/pcs440ep.c///1238019706/
+/u-boot.lds///1238019706/
diff -Naur u-boot-2009.03_orig/board/pcs440ep/CVS/Entries.Old u-boot-2009.03/board/pcs440ep/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pcs440ep/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcs440ep/CVS/Entries.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/pcs440ep.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:46 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pcs440ep/CVS/Repository u-boot-2009.03/board/pcs440ep/CVS/Repository
--- u-boot-2009.03_orig/board/pcs440ep/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcs440ep/CVS/Repository 2009-03-25 15:24:49.587659800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pcs440ep
diff -Naur u-boot-2009.03_orig/board/pcs440ep/CVS/Root u-boot-2009.03/board/pcs440ep/CVS/Root
--- u-boot-2009.03_orig/board/pcs440ep/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pcs440ep/CVS/Root 2009-03-25 15:24:49.587659800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pleb2/CVS/Entries u-boot-2009.03/board/pleb2/CVS/Entries
--- u-boot-2009.03_orig/board/pleb2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pleb2/CVS/Entries 2009-03-25 15:57:39.121904800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pleb2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pleb2/CVS/Entries.Extra u-boot-2009.03/board/pleb2/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pleb2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pleb2/CVS/Entries.Extra 2009-03-25 15:57:39.121904800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019707/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019707/
+/pleb2.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/pleb2/CVS/Entries.Extra.Old u-boot-2009.03/board/pleb2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pleb2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pleb2/CVS/Entries.Extra.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019707/
+/config.mk///1238019706/
+/flash.c///1238019706/
+/lowlevel_init.S///1238019707/
+/pleb2.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/pleb2/CVS/Entries.Old u-boot-2009.03/board/pleb2/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pleb2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pleb2/CVS/Entries.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:46 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pleb2.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pleb2/CVS/Repository u-boot-2009.03/board/pleb2/CVS/Repository
--- u-boot-2009.03_orig/board/pleb2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pleb2/CVS/Repository 2009-03-25 15:24:49.728283000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pleb2
diff -Naur u-boot-2009.03_orig/board/pleb2/CVS/Root u-boot-2009.03/board/pleb2/CVS/Root
--- u-boot-2009.03_orig/board/pleb2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pleb2/CVS/Root 2009-03-25 15:24:49.712658200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pm520/CVS/Entries u-boot-2009.03/board/pm520/CVS/Entries
--- u-boot-2009.03_orig/board/pm520/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm520/CVS/Entries 2009-03-25 15:57:39.215654200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt46v16m16-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pm520.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm520/CVS/Entries.Extra u-boot-2009.03/board/pm520/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pm520/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm520/CVS/Entries.Extra 2009-03-25 15:57:39.231279100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/mt46v16m16-75.h///1238019707/
+/mt48lc16m16a2-75.h///1238019707/
+/pm520.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm520/CVS/Entries.Extra.Old u-boot-2009.03/board/pm520/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pm520/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm520/CVS/Entries.Extra.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/mt46v16m16-75.h///1238019707/
+/mt48lc16m16a2-75.h///1238019707/
+/pm520.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm520/CVS/Entries.Old u-boot-2009.03/board/pm520/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pm520/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm520/CVS/Entries.Old 2009-03-25 15:24:49.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/mt46v16m16-75.h/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pm520.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm520/CVS/Repository u-boot-2009.03/board/pm520/CVS/Repository
--- u-boot-2009.03_orig/board/pm520/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm520/CVS/Repository 2009-03-25 15:24:49.853281400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pm520
diff -Naur u-boot-2009.03_orig/board/pm520/CVS/Root u-boot-2009.03/board/pm520/CVS/Root
--- u-boot-2009.03_orig/board/pm520/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm520/CVS/Root 2009-03-25 15:24:49.853281400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pm826/CVS/Entries u-boot-2009.03/board/pm826/CVS/Entries
--- u-boot-2009.03_orig/board/pm826/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm826/CVS/Entries 2009-03-25 15:57:39.309403600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pm826.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm826/CVS/Entries.Extra u-boot-2009.03/board/pm826/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pm826/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm826/CVS/Entries.Extra 2009-03-25 15:57:39.309403600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/pm826.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm826/CVS/Entries.Extra.Old u-boot-2009.03/board/pm826/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pm826/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm826/CVS/Entries.Extra.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/pm826.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm826/CVS/Entries.Old u-boot-2009.03/board/pm826/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pm826/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm826/CVS/Entries.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pm826.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm826/CVS/Repository u-boot-2009.03/board/pm826/CVS/Repository
--- u-boot-2009.03_orig/board/pm826/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm826/CVS/Repository 2009-03-25 15:24:49.978279800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pm826
diff -Naur u-boot-2009.03_orig/board/pm826/CVS/Root u-boot-2009.03/board/pm826/CVS/Root
--- u-boot-2009.03_orig/board/pm826/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm826/CVS/Root 2009-03-25 15:24:49.978279800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pm828/CVS/Entries u-boot-2009.03/board/pm828/CVS/Entries
--- u-boot-2009.03_orig/board/pm828/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm828/CVS/Entries 2009-03-25 15:57:39.387528100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pm828.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm828/CVS/Entries.Extra u-boot-2009.03/board/pm828/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pm828/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm828/CVS/Entries.Extra 2009-03-25 15:57:39.403153000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/pm828.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm828/CVS/Entries.Extra.Old u-boot-2009.03/board/pm828/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pm828/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm828/CVS/Entries.Extra.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/pm828.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm828/CVS/Entries.Old u-boot-2009.03/board/pm828/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pm828/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm828/CVS/Entries.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pm828.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm828/CVS/Repository u-boot-2009.03/board/pm828/CVS/Repository
--- u-boot-2009.03_orig/board/pm828/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm828/CVS/Repository 2009-03-25 15:24:50.072028600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pm828
diff -Naur u-boot-2009.03_orig/board/pm828/CVS/Root u-boot-2009.03/board/pm828/CVS/Root
--- u-boot-2009.03_orig/board/pm828/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm828/CVS/Root 2009-03-25 15:24:50.072028600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pm854/CVS/Entries u-boot-2009.03/board/pm854/CVS/Entries
--- u-boot-2009.03_orig/board/pm854/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm854/CVS/Entries 2009-03-25 15:57:39.481277500 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pm854.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm854/CVS/Entries.Extra u-boot-2009.03/board/pm854/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pm854/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm854/CVS/Entries.Extra 2009-03-25 15:57:39.481277500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/ddr.c///1238019707/
+/law.c///1238019707/
+/pm854.c///1238019707/
+/tlb.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm854/CVS/Entries.Extra.Old u-boot-2009.03/board/pm854/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pm854/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm854/CVS/Entries.Extra.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/ddr.c///1238019707/
+/law.c///1238019707/
+/pm854.c///1238019707/
+/tlb.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm854/CVS/Entries.Old u-boot-2009.03/board/pm854/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pm854/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm854/CVS/Entries.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pm854.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm854/CVS/Repository u-boot-2009.03/board/pm854/CVS/Repository
--- u-boot-2009.03_orig/board/pm854/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm854/CVS/Repository 2009-03-25 15:24:50.181402200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pm854
diff -Naur u-boot-2009.03_orig/board/pm854/CVS/Root u-boot-2009.03/board/pm854/CVS/Root
--- u-boot-2009.03_orig/board/pm854/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm854/CVS/Root 2009-03-25 15:24:50.165777400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pm856/CVS/Entries u-boot-2009.03/board/pm856/CVS/Entries
--- u-boot-2009.03_orig/board/pm856/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm856/CVS/Entries 2009-03-25 15:57:39.590651800 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pm856.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm856/CVS/Entries.Extra u-boot-2009.03/board/pm856/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pm856/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm856/CVS/Entries.Extra 2009-03-25 15:57:39.590651800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/ddr.c///1238019707/
+/law.c///1238019707/
+/pm856.c///1238019707/
+/tlb.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm856/CVS/Entries.Extra.Old u-boot-2009.03/board/pm856/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pm856/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm856/CVS/Entries.Extra.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/ddr.c///1238019707/
+/law.c///1238019707/
+/pm856.c///1238019707/
+/tlb.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/pm856/CVS/Entries.Old u-boot-2009.03/board/pm856/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pm856/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm856/CVS/Entries.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pm856.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pm856/CVS/Repository u-boot-2009.03/board/pm856/CVS/Repository
--- u-boot-2009.03_orig/board/pm856/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm856/CVS/Repository 2009-03-25 15:24:50.322025400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pm856
diff -Naur u-boot-2009.03_orig/board/pm856/CVS/Root u-boot-2009.03/board/pm856/CVS/Root
--- u-boot-2009.03_orig/board/pm856/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pm856/CVS/Root 2009-03-25 15:24:50.322025400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pn62/CVS/Entries u-boot-2009.03/board/pn62/CVS/Entries
--- u-boot-2009.03_orig/board/pn62/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pn62/CVS/Entries 2009-03-25 15:57:39.668776300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pn62.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pn62.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pn62.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pn62/CVS/Entries.Extra u-boot-2009.03/board/pn62/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pn62/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pn62/CVS/Entries.Extra 2009-03-25 15:57:39.684401200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019707/
+/cmd_pn62.c///1238019707/
+/config.mk///1238019707/
+/misc.c///1238019707/
+/pn62.c///1238019707/
+/pn62.h///1238019707/
diff -Naur u-boot-2009.03_orig/board/pn62/CVS/Entries.Extra.Old u-boot-2009.03/board/pn62/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pn62/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pn62/CVS/Entries.Extra.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019707/
+/cmd_pn62.c///1238019707/
+/config.mk///1238019707/
+/misc.c///1238019707/
+/pn62.c///1238019707/
+/pn62.h///1238019707/
diff -Naur u-boot-2009.03_orig/board/pn62/CVS/Entries.Old u-boot-2009.03/board/pn62/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pn62/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pn62/CVS/Entries.Old 2009-03-25 15:24:50.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/cmd_pn62.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pn62.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pn62.h/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pn62/CVS/Repository u-boot-2009.03/board/pn62/CVS/Repository
--- u-boot-2009.03_orig/board/pn62/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pn62/CVS/Repository 2009-03-25 15:24:50.697020600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pn62
diff -Naur u-boot-2009.03_orig/board/pn62/CVS/Root u-boot-2009.03/board/pn62/CVS/Root
--- u-boot-2009.03_orig/board/pn62/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pn62/CVS/Root 2009-03-25 15:24:50.697020600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries u-boot-2009.03/board/ppmc7xx/CVS/Entries
--- u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc7xx/CVS/Entries 2009-03-25 15:57:39.762525700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppmc7xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries.Extra u-boot-2009.03/board/ppmc7xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc7xx/CVS/Entries.Extra 2009-03-25 15:57:39.762525700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/init.S///1238019707/
+/pci.c///1238019707/
+/ppmc7xx.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries.Extra.Old u-boot-2009.03/board/ppmc7xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc7xx/CVS/Entries.Extra.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/flash.c///1238019707/
+/init.S///1238019707/
+/pci.c///1238019707/
+/ppmc7xx.c///1238019707/
+/u-boot.lds///1238019707/
diff -Naur u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries.Old u-boot-2009.03/board/ppmc7xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ppmc7xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc7xx/CVS/Entries.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/ppmc7xx.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ppmc7xx/CVS/Repository u-boot-2009.03/board/ppmc7xx/CVS/Repository
--- u-boot-2009.03_orig/board/ppmc7xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc7xx/CVS/Repository 2009-03-25 15:24:51.072015800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ppmc7xx
diff -Naur u-boot-2009.03_orig/board/ppmc7xx/CVS/Root u-boot-2009.03/board/ppmc7xx/CVS/Root
--- u-boot-2009.03_orig/board/ppmc7xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc7xx/CVS/Root 2009-03-25 15:24:51.056391000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ppmc8260/CVS/Entries u-boot-2009.03/board/ppmc8260/CVS/Entries
--- u-boot-2009.03_orig/board/ppmc8260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc8260/CVS/Entries 2009-03-25 15:57:39.856275100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppmc8260.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/strataflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ppmc8260/CVS/Entries.Extra u-boot-2009.03/board/ppmc8260/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ppmc8260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc8260/CVS/Entries.Extra 2009-03-25 15:57:39.856275100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/ppmc8260.c///1238019707/
+/strataflash.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/ppmc8260/CVS/Entries.Extra.Old u-boot-2009.03/board/ppmc8260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ppmc8260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc8260/CVS/Entries.Extra.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019707/
+/config.mk///1238019707/
+/ppmc8260.c///1238019707/
+/strataflash.c///1238019707/
diff -Naur u-boot-2009.03_orig/board/ppmc8260/CVS/Entries.Old u-boot-2009.03/board/ppmc8260/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ppmc8260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc8260/CVS/Entries.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/ppmc8260.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+/strataflash.c/1.1.1.1/Wed Mar 25 22:21:47 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ppmc8260/CVS/Repository u-boot-2009.03/board/ppmc8260/CVS/Repository
--- u-boot-2009.03_orig/board/ppmc8260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc8260/CVS/Repository 2009-03-25 15:24:51.212639000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ppmc8260
diff -Naur u-boot-2009.03_orig/board/ppmc8260/CVS/Root u-boot-2009.03/board/ppmc8260/CVS/Root
--- u-boot-2009.03_orig/board/ppmc8260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ppmc8260/CVS/Root 2009-03-25 15:24:51.212639000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/prodrive/CVS/Entries u-boot-2009.03/board/prodrive/CVS/Entries
--- u-boot-2009.03_orig/board/prodrive/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/CVS/Entries 2009-03-25 15:24:53.009491000 -0700
@@ -0,0 +1,5 @@
+D/alpr////
+D/common////
+D/p3mx////
+D/p3p440////
+D/pdnb3////
diff -Naur u-boot-2009.03_orig/board/prodrive/CVS/Entries.Extra u-boot-2009.03/board/prodrive/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/prodrive/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/CVS/Entries.Extra 2009-03-25 15:24:53.009491000 -0700
@@ -0,0 +1,5 @@
+D/alpr////
+D/common////
+D/p3mx////
+D/p3p440////
+D/pdnb3////
diff -Naur u-boot-2009.03_orig/board/prodrive/CVS/Repository u-boot-2009.03/board/prodrive/CVS/Repository
--- u-boot-2009.03_orig/board/prodrive/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/CVS/Repository 2009-03-25 15:24:51.322012600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/prodrive
diff -Naur u-boot-2009.03_orig/board/prodrive/CVS/Root u-boot-2009.03/board/prodrive/CVS/Root
--- u-boot-2009.03_orig/board/prodrive/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/CVS/Root 2009-03-25 15:24:51.322012600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries u-boot-2009.03/board/prodrive/alpr/CVS/Entries
--- u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/alpr/CVS/Entries 2009-03-25 15:57:39.950024500 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/alpr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries.Extra u-boot-2009.03/board/prodrive/alpr/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/alpr/CVS/Entries.Extra 2009-03-25 15:57:39.950024500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019708/
+/alpr.c///1238019708/
+/config.mk///1238019708/
+/fpga.c///1238019708/
+/init.S///1238019708/
+/nand.c///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries.Extra.Old u-boot-2009.03/board/prodrive/alpr/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/alpr/CVS/Entries.Extra.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019708/
+/alpr.c///1238019708/
+/config.mk///1238019708/
+/fpga.c///1238019708/
+/init.S///1238019708/
+/nand.c///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries.Old u-boot-2009.03/board/prodrive/alpr/CVS/Entries.Old
--- u-boot-2009.03_orig/board/prodrive/alpr/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/alpr/CVS/Entries.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/alpr.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:48 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/alpr/CVS/Repository u-boot-2009.03/board/prodrive/alpr/CVS/Repository
--- u-boot-2009.03_orig/board/prodrive/alpr/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/alpr/CVS/Repository 2009-03-25 15:24:51.337637400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/prodrive/alpr
diff -Naur u-boot-2009.03_orig/board/prodrive/alpr/CVS/Root u-boot-2009.03/board/prodrive/alpr/CVS/Root
--- u-boot-2009.03_orig/board/prodrive/alpr/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/alpr/CVS/Root 2009-03-25 15:24:51.337637400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/prodrive/common/CVS/Entries u-boot-2009.03/board/prodrive/common/CVS/Entries
--- u-boot-2009.03_orig/board/prodrive/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/common/CVS/Entries 2009-03-25 15:57:40.012524100 -0700
@@ -0,0 +1,3 @@
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/common/CVS/Entries.Extra u-boot-2009.03/board/prodrive/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/prodrive/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/common/CVS/Entries.Extra 2009-03-25 15:57:40.012524100 -0700
@@ -0,0 +1,2 @@
+/flash.c///1238019708/
+/fpga.c///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/common/CVS/Entries.Extra.Old u-boot-2009.03/board/prodrive/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/prodrive/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/common/CVS/Entries.Extra.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,2 @@
+/flash.c///1238019708/
+/fpga.c///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/common/CVS/Entries.Old u-boot-2009.03/board/prodrive/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/prodrive/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/common/CVS/Entries.Old 2009-03-25 15:24:51.000000000 -0700
@@ -0,0 +1,3 @@
+/flash.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/common/CVS/Repository u-boot-2009.03/board/prodrive/common/CVS/Repository
--- u-boot-2009.03_orig/board/prodrive/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/common/CVS/Repository 2009-03-25 15:24:51.728257400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/prodrive/common
diff -Naur u-boot-2009.03_orig/board/prodrive/common/CVS/Root u-boot-2009.03/board/prodrive/common/CVS/Root
--- u-boot-2009.03_orig/board/prodrive/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/common/CVS/Root 2009-03-25 15:24:51.728257400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries u-boot-2009.03/board/prodrive/p3mx/CVS/Entries
--- u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3mx/CVS/Entries 2009-03-25 15:57:40.278147400 -0700
@@ -0,0 +1,19 @@
+/64460.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpsc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mv_regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3mx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3mx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_error_no.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries.Extra u-boot-2009.03/board/prodrive/p3mx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3mx/CVS/Entries.Extra 2009-03-25 15:57:40.278147400 -0700
@@ -0,0 +1,18 @@
+/64460.h///1238019708/
+/Makefile///1238019708/
+/config.mk///1238019708/
+/eth.h///1238019708/
+/misc.S///1238019708/
+/mpsc.c///1238019708/
+/mpsc.h///1238019708/
+/mv_eth.c///1238019708/
+/mv_eth.h///1238019708/
+/mv_regs.h///1238019708/
+/p3mx.c///1238019708/
+/p3mx.h///1238019708/
+/pci.c///1238019708/
+/ppc_error_no.h///1238019708/
+/sdram_init.c///1238019708/
+/serial.c///1238019708/
+/serial.h///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries.Extra.Old u-boot-2009.03/board/prodrive/p3mx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3mx/CVS/Entries.Extra.Old 2009-03-25 15:24:52.000000000 -0700
@@ -0,0 +1,18 @@
+/64460.h///1238019708/
+/Makefile///1238019708/
+/config.mk///1238019708/
+/eth.h///1238019708/
+/misc.S///1238019708/
+/mpsc.c///1238019708/
+/mpsc.h///1238019708/
+/mv_eth.c///1238019708/
+/mv_eth.h///1238019708/
+/mv_regs.h///1238019708/
+/p3mx.c///1238019708/
+/p3mx.h///1238019708/
+/pci.c///1238019708/
+/ppc_error_no.h///1238019708/
+/sdram_init.c///1238019708/
+/serial.c///1238019708/
+/serial.h///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries.Old u-boot-2009.03/board/prodrive/p3mx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3mx/CVS/Entries.Old 2009-03-25 15:24:52.000000000 -0700
@@ -0,0 +1,19 @@
+/64460.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/eth.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/misc.S/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/mpsc.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/mpsc.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/mv_eth.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/mv_eth.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/mv_regs.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/p3mx.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/p3mx.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/ppc_error_no.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/sdram_init.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/serial.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:48 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Repository u-boot-2009.03/board/prodrive/p3mx/CVS/Repository
--- u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3mx/CVS/Repository 2009-03-25 15:24:52.025128600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/prodrive/p3mx
diff -Naur u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Root u-boot-2009.03/board/prodrive/p3mx/CVS/Root
--- u-boot-2009.03_orig/board/prodrive/p3mx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3mx/CVS/Root 2009-03-25 15:24:52.025128600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries u-boot-2009.03/board/prodrive/p3p440/CVS/Entries
--- u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3p440/CVS/Entries 2009-03-25 15:57:40.371896800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3p440.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3p440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries.Extra u-boot-2009.03/board/prodrive/p3p440/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3p440/CVS/Entries.Extra 2009-03-25 15:57:40.387521700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019708/
+/config.mk///1238019708/
+/init.S///1238019708/
+/p3p440.c///1238019708/
+/p3p440.h///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries.Extra.Old u-boot-2009.03/board/prodrive/p3p440/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3p440/CVS/Entries.Extra.Old 2009-03-25 15:24:52.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019708/
+/config.mk///1238019708/
+/init.S///1238019708/
+/p3p440.c///1238019708/
+/p3p440.h///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries.Old u-boot-2009.03/board/prodrive/p3p440/CVS/Entries.Old
--- u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3p440/CVS/Entries.Old 2009-03-25 15:24:52.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/p3p440.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/p3p440.h/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:48 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Repository u-boot-2009.03/board/prodrive/p3p440/CVS/Repository
--- u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3p440/CVS/Repository 2009-03-25 15:24:52.337624600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/prodrive/p3p440
diff -Naur u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Root u-boot-2009.03/board/prodrive/p3p440/CVS/Root
--- u-boot-2009.03_orig/board/prodrive/p3p440/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/p3p440/CVS/Root 2009-03-25 15:24:52.337624600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries
--- u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries 2009-03-25 15:57:40.450021300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pdnb3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries.Extra u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries.Extra 2009-03-25 15:57:40.450021300 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019708/
+/config.mk///1238019708/
+/flash.c///1238019708/
+/nand.c///1238019708/
+/pdnb3.c///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries.Extra.Old u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries.Extra.Old 2009-03-25 15:24:52.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019708/
+/config.mk///1238019708/
+/flash.c///1238019708/
+/nand.c///1238019708/
+/pdnb3.c///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries.Old u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries.Old
--- u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/pdnb3/CVS/Entries.Old 2009-03-25 15:24:52.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/pdnb3.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:48 2009//
+D
diff -Naur u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Repository u-boot-2009.03/board/prodrive/pdnb3/CVS/Repository
--- u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/pdnb3/CVS/Repository 2009-03-25 15:24:52.650120600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/prodrive/pdnb3
diff -Naur u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Root u-boot-2009.03/board/prodrive/pdnb3/CVS/Root
--- u-boot-2009.03_orig/board/prodrive/pdnb3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/prodrive/pdnb3/CVS/Root 2009-03-25 15:24:52.650120600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/psyent/CVS/Entries u-boot-2009.03/board/psyent/CVS/Entries
--- u-boot-2009.03_orig/board/psyent/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/CVS/Entries 2009-03-25 15:24:53.478235000 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/pci5441////
+D/pk1c20////
diff -Naur u-boot-2009.03_orig/board/psyent/CVS/Entries.Extra u-boot-2009.03/board/psyent/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/psyent/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/CVS/Entries.Extra 2009-03-25 15:24:53.478235000 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/pci5441////
+D/pk1c20////
diff -Naur u-boot-2009.03_orig/board/psyent/CVS/Repository u-boot-2009.03/board/psyent/CVS/Repository
--- u-boot-2009.03_orig/board/psyent/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/CVS/Repository 2009-03-25 15:24:53.118864600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/psyent
diff -Naur u-boot-2009.03_orig/board/psyent/CVS/Root u-boot-2009.03/board/psyent/CVS/Root
--- u-boot-2009.03_orig/board/psyent/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/CVS/Root 2009-03-25 15:24:53.118864600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/psyent/common/CVS/Entries u-boot-2009.03/board/psyent/common/CVS/Entries
--- u-boot-2009.03_orig/board/psyent/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/common/CVS/Entries 2009-03-25 15:57:40.512520900 -0700
@@ -0,0 +1,2 @@
+/AMDLV065D.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/psyent/common/CVS/Entries.Extra u-boot-2009.03/board/psyent/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/psyent/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/common/CVS/Entries.Extra 2009-03-25 15:57:40.512520900 -0700
@@ -0,0 +1 @@
+/AMDLV065D.c///1238019708/
diff -Naur u-boot-2009.03_orig/board/psyent/common/CVS/Entries.Extra.Old u-boot-2009.03/board/psyent/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/psyent/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/common/CVS/Entries.Extra.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1 @@
+/AMDLV065D.c///1238019708/
diff -Naur u-boot-2009.03_orig/board/psyent/common/CVS/Entries.Old u-boot-2009.03/board/psyent/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/psyent/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/common/CVS/Entries.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,2 @@
+/AMDLV065D.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+D
diff -Naur u-boot-2009.03_orig/board/psyent/common/CVS/Repository u-boot-2009.03/board/psyent/common/CVS/Repository
--- u-boot-2009.03_orig/board/psyent/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/common/CVS/Repository 2009-03-25 15:24:53.150114200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/psyent/common
diff -Naur u-boot-2009.03_orig/board/psyent/common/CVS/Root u-boot-2009.03/board/psyent/common/CVS/Root
--- u-boot-2009.03_orig/board/psyent/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/common/CVS/Root 2009-03-25 15:24:53.150114200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries u-boot-2009.03/board/psyent/pci5441/CVS/Entries
--- u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pci5441/CVS/Entries 2009-03-25 15:57:40.575020500 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci5441.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries.Extra u-boot-2009.03/board/psyent/pci5441/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pci5441/CVS/Entries.Extra 2009-03-25 15:57:40.575020500 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019708/
+/config.mk///1238019708/
+/pci5441.c///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries.Extra.Old u-boot-2009.03/board/psyent/pci5441/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pci5441/CVS/Entries.Extra.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019708/
+/config.mk///1238019708/
+/pci5441.c///1238019708/
+/u-boot.lds///1238019708/
diff -Naur u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries.Old u-boot-2009.03/board/psyent/pci5441/CVS/Entries.Old
--- u-boot-2009.03_orig/board/psyent/pci5441/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pci5441/CVS/Entries.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/pci5441.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:48 2009//
+D
diff -Naur u-boot-2009.03_orig/board/psyent/pci5441/CVS/Repository u-boot-2009.03/board/psyent/pci5441/CVS/Repository
--- u-boot-2009.03_orig/board/psyent/pci5441/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pci5441/CVS/Repository 2009-03-25 15:24:53.228238200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/psyent/pci5441
diff -Naur u-boot-2009.03_orig/board/psyent/pci5441/CVS/Root u-boot-2009.03/board/psyent/pci5441/CVS/Root
--- u-boot-2009.03_orig/board/psyent/pci5441/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pci5441/CVS/Root 2009-03-25 15:24:53.212613400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries u-boot-2009.03/board/psyent/pk1c20/CVS/Entries
--- u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pk1c20/CVS/Entries 2009-03-25 15:57:40.637520100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pk1c20.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries.Extra u-boot-2009.03/board/psyent/pk1c20/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pk1c20/CVS/Entries.Extra 2009-03-25 15:57:40.637520100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019709/
+/config.mk///1238019708/
+/led.c///1238019708/
+/pk1c20.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries.Extra.Old u-boot-2009.03/board/psyent/pk1c20/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pk1c20/CVS/Entries.Extra.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019709/
+/config.mk///1238019708/
+/led.c///1238019708/
+/pk1c20.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries.Old u-boot-2009.03/board/psyent/pk1c20/CVS/Entries.Old
--- u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pk1c20/CVS/Entries.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/led.c/1.1.1.1/Wed Mar 25 22:21:48 2009//
+/pk1c20.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Repository u-boot-2009.03/board/psyent/pk1c20/CVS/Repository
--- u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pk1c20/CVS/Repository 2009-03-25 15:24:53.321987000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/psyent/pk1c20
diff -Naur u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Root u-boot-2009.03/board/psyent/pk1c20/CVS/Root
--- u-boot-2009.03_orig/board/psyent/pk1c20/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/psyent/pk1c20/CVS/Root 2009-03-25 15:24:53.321987000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/purple/CVS/Entries u-boot-2009.03/board/purple/CVS/Entries
--- u-boot-2009.03_orig/board/purple/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/purple/CVS/Entries 2009-03-25 15:57:40.715644600 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/purple.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sconsole.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sconsole.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/purple/CVS/Entries.Extra u-boot-2009.03/board/purple/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/purple/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/purple/CVS/Entries.Extra 2009-03-25 15:57:40.715644600 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/flash.c///1238019709/
+/lowlevel_init.S///1238019709/
+/purple.c///1238019709/
+/sconsole.c///1238019709/
+/sconsole.h///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/purple/CVS/Entries.Extra.Old u-boot-2009.03/board/purple/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/purple/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/purple/CVS/Entries.Extra.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/flash.c///1238019709/
+/lowlevel_init.S///1238019709/
+/purple.c///1238019709/
+/sconsole.c///1238019709/
+/sconsole.h///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/purple/CVS/Entries.Old u-boot-2009.03/board/purple/CVS/Entries.Old
--- u-boot-2009.03_orig/board/purple/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/purple/CVS/Entries.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/purple.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/sconsole.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/sconsole.h/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/purple/CVS/Repository u-boot-2009.03/board/purple/CVS/Repository
--- u-boot-2009.03_orig/board/purple/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/purple/CVS/Repository 2009-03-25 15:24:53.509484800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/purple
diff -Naur u-boot-2009.03_orig/board/purple/CVS/Root u-boot-2009.03/board/purple/CVS/Root
--- u-boot-2009.03_orig/board/purple/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/purple/CVS/Root 2009-03-25 15:24:53.509484800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries u-boot-2009.03/board/pxa255_idp/CVS/Entries
--- u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pxa255_idp/CVS/Entries 2009-03-25 15:57:40.793769100 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/idp_notes.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_idp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_reg_calcs.out/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_reg_calcs.py/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries.Extra u-boot-2009.03/board/pxa255_idp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pxa255_idp/CVS/Entries.Extra 2009-03-25 15:57:40.793769100 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019709/
+/README///1238019709/
+/config.mk///1238019709/
+/idp_notes.txt///1238019709/
+/lowlevel_init.S///1238019709/
+/pxa_idp.c///1238019709/
+/pxa_reg_calcs.out///1238019709/
+/pxa_reg_calcs.py///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries.Extra.Old u-boot-2009.03/board/pxa255_idp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pxa255_idp/CVS/Entries.Extra.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019709/
+/README///1238019709/
+/config.mk///1238019709/
+/idp_notes.txt///1238019709/
+/lowlevel_init.S///1238019709/
+/pxa_idp.c///1238019709/
+/pxa_reg_calcs.out///1238019709/
+/pxa_reg_calcs.py///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries.Old u-boot-2009.03/board/pxa255_idp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/pxa255_idp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pxa255_idp/CVS/Entries.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/idp_notes.txt/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/pxa_idp.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/pxa_reg_calcs.out/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/pxa_reg_calcs.py/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/pxa255_idp/CVS/Repository u-boot-2009.03/board/pxa255_idp/CVS/Repository
--- u-boot-2009.03_orig/board/pxa255_idp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pxa255_idp/CVS/Repository 2009-03-25 15:24:53.634484000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/pxa255_idp
diff -Naur u-boot-2009.03_orig/board/pxa255_idp/CVS/Root u-boot-2009.03/board/pxa255_idp/CVS/Root
--- u-boot-2009.03_orig/board/pxa255_idp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/pxa255_idp/CVS/Root 2009-03-25 15:24:53.634484000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/qaz/CVS/Entries u-boot-2009.03/board/qaz/CVS/Entries
--- u-boot-2009.03_orig/board/qaz/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/CVS/Entries 2009-03-25 17:49:17.483629900 -0700
@@ -0,0 +1,2 @@
+D/de1_or1k////
+D/Dev_Kit_060804////
diff -Naur u-boot-2009.03_orig/board/qaz/CVS/Entries.Extra u-boot-2009.03/board/qaz/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/qaz/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/CVS/Entries.Extra 2009-03-25 17:49:17.499254800 -0700
@@ -0,0 +1,2 @@
+D/de1_or1k////
+D/Dev_Kit_060804////
diff -Naur u-boot-2009.03_orig/board/qaz/CVS/Entries.Extra.Old u-boot-2009.03/board/qaz/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/qaz/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/CVS/Entries.Extra.Old 2009-03-25 17:49:14.000000000 -0700
@@ -0,0 +1 @@
+D/de1_or1k////
diff -Naur u-boot-2009.03_orig/board/qaz/CVS/Entries.Old u-boot-2009.03/board/qaz/CVS/Entries.Old
--- u-boot-2009.03_orig/board/qaz/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/CVS/Entries.Old 2009-03-25 17:49:14.000000000 -0700
@@ -0,0 +1 @@
+D/de1_or1k////
diff -Naur u-boot-2009.03_orig/board/qaz/CVS/Repository u-boot-2009.03/board/qaz/CVS/Repository
--- u-boot-2009.03_orig/board/qaz/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/CVS/Repository 2009-03-25 17:49:08.139939700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/qaz
diff -Naur u-boot-2009.03_orig/board/qaz/CVS/Root u-boot-2009.03/board/qaz/CVS/Root
--- u-boot-2009.03_orig/board/qaz/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/CVS/Root 2009-03-25 17:49:08.139939700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries 2009-03-25 17:51:39.467096200 -0700
@@ -0,0 +1,4 @@
+/Dev_Kit_060804.c/1.1/Tue Mar 24 20:34:53 2009//
+/Makefile/1.1/Tue Mar 24 20:34:53 2009//
+/u-boot.lds/1.1/Tue Mar 24 20:34:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries.Extra u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries.Extra 2009-03-25 17:51:39.467096200 -0700
@@ -0,0 +1,3 @@
+/Dev_Kit_060804.c///1238028698/
+/Makefile///1238028698/
+/u-boot.lds///1238028699/
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries.Extra.Old u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries.Extra.Old 2009-03-25 17:51:24.000000000 -0700
@@ -0,0 +1,3 @@
+/Dev_Kit_060804.c////
+/u-boot.lds////
+/Makefile////
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries.Old u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries.Old
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Entries.Old 2009-03-25 17:51:24.000000000 -0700
@@ -0,0 +1,4 @@
+/Dev_Kit_060804.c/0/Initial Dev_Kit_060804.c//
+/u-boot.lds/0/Initial u-boot.lds//
+/Makefile/0/Initial Makefile//
+D
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Repository u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Repository
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Repository 2009-03-25 17:49:17.483629900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/qaz/Dev_Kit_060804
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Root u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Root
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/CVS/Root 2009-03-25 17:49:17.483629900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/Dev_Kit_060804.c u-boot-2009.03/board/qaz/Dev_Kit_060804/Dev_Kit_060804.c
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/Dev_Kit_060804.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/Dev_Kit_060804.c 2009-03-24 13:34:53.471013000 -0700
@@ -0,0 +1,100 @@
+/*
+ * (C) Copyright ????
+ * XXX, XXX@XXX.org
+ *
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+#include <command.h>
+#include <malloc.h>
+
+
+DECLARE_GLOBAL_DATA_PTR;
+
+// extern unsigned int _data_start, _data_lma_start, _data_end;
+// extern unsigned int _bss_start, _bss_end;
+
+int board_early_init_f (void)
+{
+// memcpy( (void *)_data_start, (void *)_data_lma_start, (_data_end - _data_start) );
+
+// memset ( (void *)_bss_start, 0, ( _bss_end - _bss_start ) );
+
+ return 0;
+}
+
+
+/*
+ * Check Board Identity:
+ */
+int checkboard (void)
+{
+ char str[64];
+ int i = getenv_r ("serial#", str, sizeof(str));
+
+ puts ("Board: ");
+
+ if (i == -1) {
+ puts ("### No HW ID - assuming ???");
+ } else {
+ puts(str);
+ }
+
+ putc ('\n');
+
+ return 0;
+}
+
+
+
+/*
+ * post code for de1 board
+ */
+void set_de1_post( unsigned int post_code )
+{
+ gd->bd->post_code = post_code;
+
+ *((volatile unsigned int *)(0x5ffffffc)) = gd->bd->post_code;
+ *((volatile unsigned int *)(0x5ffffffc)) = 0xcea5e0ff;
+}
+
+
+void init_de1_post( void )
+{
+ gd->bd->post_code = 0;
+
+ *((volatile unsigned int *)(0x5ffffffc)) = gd->bd->post_code;
+ *((volatile unsigned int *)(0x5ffffffc)) = 0xcea5e0ff;
+}
+
+
+int de1_post_incr( void )
+{
+ gd->bd->post_code++;
+
+ *((volatile unsigned int *)(0x5ffffffc)) = gd->bd->post_code;
+ *((volatile unsigned int *)(0x5ffffffc)) = 0xcea5e0ff;
+
+ return(0);
+}
+
+
+
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/Makefile u-boot-2009.03/board/qaz/Dev_Kit_060804/Makefile
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/Makefile 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/Makefile 2009-03-24 13:34:53.471013000 -0700
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).a
+
+COBJS := Dev_Kit_060804.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff -Naur u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/u-boot.lds u-boot-2009.03/board/qaz/Dev_Kit_060804/u-boot.lds
--- u-boot-2009.03_orig/board/qaz/Dev_Kit_060804/u-boot.lds 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/Dev_Kit_060804/u-boot.lds 2009-03-24 13:34:53.455424000 -0700
@@ -0,0 +1,67 @@
+/* ------------------------------ */
+/* link script */
+/* ------------------------------ */
+
+MEMORY
+ {
+ boot_rom_1 : ORIGIN = 0x00000000, LENGTH = 0x00020000
+ mem_bank_3 : ORIGIN = 0x30000000, LENGTH = 0x00010000
+ }
+
+ENTRY(_start)
+
+SECTIONS
+{
+ .text ALIGN(0x4):
+ {
+ . = 0x100;
+ *(.vectors)
+ __text_start = .;
+ . = 0x2000;
+ *(.text)
+ __text_end = .;
+ } > boot_rom_1
+
+ .rodata ALIGN(0x4):
+ {
+ __rodata_start = .;
+ *(.rodata)
+ *(.rodata.*)
+ __rodata_end = .;
+ } > boot_rom_1
+
+ .u_boot_cmd ALIGN(0x4):
+ {
+ . = .;
+ ___u_boot_cmd_start = .;
+ *(.u_boot_cmd)
+ ___u_boot_cmd_end = .;
+ } > boot_rom_1
+
+ . = ALIGN(4);
+ __data_lma_start = .;
+ .data :
+ {
+ __data_start = .;
+ *(.data)
+ __data_end = .;
+ } > boot_rom_1
+
+ . = ALIGN(4);
+ .bss (NOLOAD):
+ {
+ __bss_start = .;
+ *(.bss)
+ __bss_end = .;
+ } > mem_bank_3
+
+ . = ALIGN(4);
+ .stack (NOLOAD) :
+ {
+ __stack_start = .;
+ *(.stack)
+ __stack_end = .;
+ } > mem_bank_3
+
+ __end = . ;
+}
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries
--- u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries 2009-03-25 17:51:39.779594200 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1/Tue Mar 24 20:34:53 2009//
+/de1_or1k.c/1.1/Tue Mar 24 20:34:53 2009//
+/u-boot.lds/1.1/Tue Mar 24 20:34:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries.Extra u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries.Extra 2009-03-25 17:51:39.779594200 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238028699/
+/de1_or1k.c///1238028699/
+/u-boot.lds///1238028699/
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries.Extra.Old u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries.Extra.Old 2009-03-25 17:51:24.000000000 -0700
@@ -0,0 +1,3 @@
+/de1_or1k.c////
+/u-boot.lds////
+/Makefile////
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries.Old u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries.Old
--- u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/CVS/Entries.Old 2009-03-25 17:51:24.000000000 -0700
@@ -0,0 +1,4 @@
+/de1_or1k.c/0/Initial de1_or1k.c//
+/u-boot.lds/0/Initial u-boot.lds//
+/Makefile/0/Initial Makefile//
+D
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Repository u-boot-2009.03/board/qaz/de1_or1k/CVS/Repository
--- u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/CVS/Repository 2009-03-25 17:49:14.030527000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/qaz/de1_or1k
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Root u-boot-2009.03/board/qaz/de1_or1k/CVS/Root
--- u-boot-2009.03_orig/board/qaz/de1_or1k/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/CVS/Root 2009-03-25 17:49:14.014902100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/Makefile u-boot-2009.03/board/qaz/de1_or1k/Makefile
--- u-boot-2009.03_orig/board/qaz/de1_or1k/Makefile 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/Makefile 2009-03-24 13:34:53.096877000 -0700
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).a
+
+COBJS := de1_or1k.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/de1_or1k.c u-boot-2009.03/board/qaz/de1_or1k/de1_or1k.c
--- u-boot-2009.03_orig/board/qaz/de1_or1k/de1_or1k.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/de1_or1k.c 2009-03-24 13:34:53.081288000 -0700
@@ -0,0 +1,100 @@
+/*
+ * (C) Copyright ????
+ * XXX, XXX@XXX.org
+ *
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+#include <command.h>
+#include <malloc.h>
+
+
+DECLARE_GLOBAL_DATA_PTR;
+
+// extern unsigned int _data_start, _data_lma_start, _data_end;
+// extern unsigned int _bss_start, _bss_end;
+
+int board_early_init_f (void)
+{
+// memcpy( (void *)_data_start, (void *)_data_lma_start, (_data_end - _data_start) );
+
+// memset ( (void *)_bss_start, 0, ( _bss_end - _bss_start ) );
+
+ return 0;
+}
+
+
+/*
+ * Check Board Identity:
+ */
+int checkboard (void)
+{
+ char str[64];
+ int i = getenv_r ("serial#", str, sizeof(str));
+
+ puts ("Board: ");
+
+ if (i == -1) {
+ puts ("### No HW ID - assuming DE1_OR1k");
+ } else {
+ puts(str);
+ }
+
+ putc ('\n');
+
+ return 0;
+}
+
+
+
+/*
+ * post code for de1 board
+ */
+void set_de1_post( unsigned int post_code )
+{
+ gd->bd->post_code = post_code;
+
+ *((volatile unsigned int *)(0x2ffffffc)) = gd->bd->post_code;
+ *((volatile unsigned int *)(0x2ffffffc)) = 0xcea5e0ff;
+}
+
+
+void init_de1_post( void )
+{
+ gd->bd->post_code = 0;
+
+ *((volatile unsigned int *)(0x2ffffffc)) = gd->bd->post_code;
+ *((volatile unsigned int *)(0x2ffffffc)) = 0xcea5e0ff;
+}
+
+
+int de1_post_incr( void )
+{
+ gd->bd->post_code++;
+
+ *((volatile unsigned int *)(0x2ffffffc)) = gd->bd->post_code;
+ *((volatile unsigned int *)(0x2ffffffc)) = 0xcea5e0ff;
+
+ return(0);
+}
+
+
+
diff -Naur u-boot-2009.03_orig/board/qaz/de1_or1k/u-boot.lds u-boot-2009.03/board/qaz/de1_or1k/u-boot.lds
--- u-boot-2009.03_orig/board/qaz/de1_or1k/u-boot.lds 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qaz/de1_or1k/u-boot.lds 2009-03-24 13:34:53.455424000 -0700
@@ -0,0 +1,67 @@
+/* ------------------------------ */
+/* link script */
+/* ------------------------------ */
+
+MEMORY
+ {
+ boot_rom_1 : ORIGIN = 0x00000000, LENGTH = 0x00020000
+ mem_bank_3 : ORIGIN = 0x30000000, LENGTH = 0x00010000
+ }
+
+ENTRY(_start)
+
+SECTIONS
+{
+ .text ALIGN(0x4):
+ {
+ . = 0x100;
+ *(.vectors)
+ __text_start = .;
+ . = 0x2000;
+ *(.text)
+ __text_end = .;
+ } > boot_rom_1
+
+ .rodata ALIGN(0x4):
+ {
+ __rodata_start = .;
+ *(.rodata)
+ *(.rodata.*)
+ __rodata_end = .;
+ } > boot_rom_1
+
+ .u_boot_cmd ALIGN(0x4):
+ {
+ . = .;
+ ___u_boot_cmd_start = .;
+ *(.u_boot_cmd)
+ ___u_boot_cmd_end = .;
+ } > boot_rom_1
+
+ . = ALIGN(4);
+ __data_lma_start = .;
+ .data :
+ {
+ __data_start = .;
+ *(.data)
+ __data_end = .;
+ } > boot_rom_1
+
+ . = ALIGN(4);
+ .bss (NOLOAD):
+ {
+ __bss_start = .;
+ *(.bss)
+ __bss_end = .;
+ } > mem_bank_3
+
+ . = ALIGN(4);
+ .stack (NOLOAD) :
+ {
+ __stack_start = .;
+ *(.stack)
+ __stack_end = .;
+ } > mem_bank_3
+
+ __end = . ;
+}
diff -Naur u-boot-2009.03_orig/board/qemu-mips/CVS/Entries u-boot-2009.03/board/qemu-mips/CVS/Entries
--- u-boot-2009.03_orig/board/qemu-mips/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qemu-mips/CVS/Entries 2009-03-25 15:57:40.871893600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qemu-mips.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/qemu-mips/CVS/Entries.Extra u-boot-2009.03/board/qemu-mips/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/qemu-mips/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qemu-mips/CVS/Entries.Extra 2009-03-25 15:57:40.871893600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/README///1238019709/
+/config.mk///1238019709/
+/lowlevel_init.S///1238019709/
+/qemu-mips.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/qemu-mips/CVS/Entries.Extra.Old u-boot-2009.03/board/qemu-mips/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/qemu-mips/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qemu-mips/CVS/Entries.Extra.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/README///1238019709/
+/config.mk///1238019709/
+/lowlevel_init.S///1238019709/
+/qemu-mips.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/qemu-mips/CVS/Entries.Old u-boot-2009.03/board/qemu-mips/CVS/Entries.Old
--- u-boot-2009.03_orig/board/qemu-mips/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qemu-mips/CVS/Entries.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/qemu-mips.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/qemu-mips/CVS/Repository u-boot-2009.03/board/qemu-mips/CVS/Repository
--- u-boot-2009.03_orig/board/qemu-mips/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qemu-mips/CVS/Repository 2009-03-25 15:24:53.790733000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/qemu-mips
diff -Naur u-boot-2009.03_orig/board/qemu-mips/CVS/Root u-boot-2009.03/board/qemu-mips/CVS/Root
--- u-boot-2009.03_orig/board/qemu-mips/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/qemu-mips/CVS/Root 2009-03-25 15:24:53.790733000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/quad100hd/CVS/Entries u-boot-2009.03/board/quad100hd/CVS/Entries
--- u-boot-2009.03_orig/board/quad100hd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quad100hd/CVS/Entries 2009-03-25 15:57:40.950018100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/quad100hd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/quad100hd/CVS/Entries.Extra u-boot-2009.03/board/quad100hd/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/quad100hd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quad100hd/CVS/Entries.Extra 2009-03-25 15:57:40.950018100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/nand.c///1238019709/
+/quad100hd.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/quad100hd/CVS/Entries.Extra.Old u-boot-2009.03/board/quad100hd/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/quad100hd/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quad100hd/CVS/Entries.Extra.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/nand.c///1238019709/
+/quad100hd.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/quad100hd/CVS/Entries.Old u-boot-2009.03/board/quad100hd/CVS/Entries.Old
--- u-boot-2009.03_orig/board/quad100hd/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quad100hd/CVS/Entries.Old 2009-03-25 15:24:53.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/quad100hd.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/quad100hd/CVS/Repository u-boot-2009.03/board/quad100hd/CVS/Repository
--- u-boot-2009.03_orig/board/quad100hd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quad100hd/CVS/Repository 2009-03-25 15:24:53.915732200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/quad100hd
diff -Naur u-boot-2009.03_orig/board/quad100hd/CVS/Root u-boot-2009.03/board/quad100hd/CVS/Root
--- u-boot-2009.03_orig/board/quad100hd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quad100hd/CVS/Root 2009-03-25 15:24:53.915732200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/quantum/CVS/Entries u-boot-2009.03/board/quantum/CVS/Entries
--- u-boot-2009.03_orig/board/quantum/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quantum/CVS/Entries 2009-03-25 15:57:41.028142600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/quantum.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/quantum/CVS/Entries.Extra u-boot-2009.03/board/quantum/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/quantum/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quantum/CVS/Entries.Extra 2009-03-25 15:57:41.028142600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/fpga.c///1238019709/
+/fpga.h///1238019709/
+/quantum.c///1238019709/
+/u-boot.lds///1238019709/
+/u-boot.lds.debug///1238019709/
diff -Naur u-boot-2009.03_orig/board/quantum/CVS/Entries.Extra.Old u-boot-2009.03/board/quantum/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/quantum/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quantum/CVS/Entries.Extra.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/fpga.c///1238019709/
+/fpga.h///1238019709/
+/quantum.c///1238019709/
+/u-boot.lds///1238019709/
+/u-boot.lds.debug///1238019709/
diff -Naur u-boot-2009.03_orig/board/quantum/CVS/Entries.Old u-boot-2009.03/board/quantum/CVS/Entries.Old
--- u-boot-2009.03_orig/board/quantum/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quantum/CVS/Entries.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/fpga.h/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/quantum.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/quantum/CVS/Repository u-boot-2009.03/board/quantum/CVS/Repository
--- u-boot-2009.03_orig/board/quantum/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quantum/CVS/Repository 2009-03-25 15:24:54.025106500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/quantum
diff -Naur u-boot-2009.03_orig/board/quantum/CVS/Root u-boot-2009.03/board/quantum/CVS/Root
--- u-boot-2009.03_orig/board/quantum/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/quantum/CVS/Root 2009-03-25 15:24:54.009481600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/r360mpi/CVS/Entries u-boot-2009.03/board/r360mpi/CVS/Entries
--- u-boot-2009.03_orig/board/r360mpi/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/r360mpi/CVS/Entries 2009-03-25 15:57:41.153141800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r360mpi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/r360mpi/CVS/Entries.Extra u-boot-2009.03/board/r360mpi/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/r360mpi/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/r360mpi/CVS/Entries.Extra 2009-03-25 15:57:41.153141800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/flash.c///1238019709/
+/pcmcia.c///1238019709/
+/r360mpi.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/r360mpi/CVS/Entries.Extra.Old u-boot-2009.03/board/r360mpi/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/r360mpi/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/r360mpi/CVS/Entries.Extra.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/flash.c///1238019709/
+/pcmcia.c///1238019709/
+/r360mpi.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/r360mpi/CVS/Entries.Old u-boot-2009.03/board/r360mpi/CVS/Entries.Old
--- u-boot-2009.03_orig/board/r360mpi/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/r360mpi/CVS/Entries.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/r360mpi.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/r360mpi/CVS/Repository u-boot-2009.03/board/r360mpi/CVS/Repository
--- u-boot-2009.03_orig/board/r360mpi/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/r360mpi/CVS/Repository 2009-03-25 15:24:54.150105700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/r360mpi
diff -Naur u-boot-2009.03_orig/board/r360mpi/CVS/Root u-boot-2009.03/board/r360mpi/CVS/Root
--- u-boot-2009.03_orig/board/r360mpi/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/r360mpi/CVS/Root 2009-03-25 15:24:54.150105700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/rattler/CVS/Entries u-boot-2009.03/board/rattler/CVS/Entries
--- u-boot-2009.03_orig/board/rattler/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rattler/CVS/Entries 2009-03-25 15:57:41.215641400 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rattler.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rattler/CVS/Entries.Extra u-boot-2009.03/board/rattler/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/rattler/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rattler/CVS/Entries.Extra 2009-03-25 15:57:41.215641400 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/rattler.c///1238019709/
diff -Naur u-boot-2009.03_orig/board/rattler/CVS/Entries.Extra.Old u-boot-2009.03/board/rattler/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/rattler/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rattler/CVS/Entries.Extra.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/rattler.c///1238019709/
diff -Naur u-boot-2009.03_orig/board/rattler/CVS/Entries.Old u-boot-2009.03/board/rattler/CVS/Entries.Old
--- u-boot-2009.03_orig/board/rattler/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rattler/CVS/Entries.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/rattler.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rattler/CVS/Repository u-boot-2009.03/board/rattler/CVS/Repository
--- u-boot-2009.03_orig/board/rattler/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rattler/CVS/Repository 2009-03-25 15:24:54.275104900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/rattler
diff -Naur u-boot-2009.03_orig/board/rattler/CVS/Root u-boot-2009.03/board/rattler/CVS/Root
--- u-boot-2009.03_orig/board/rattler/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rattler/CVS/Root 2009-03-25 15:24:54.259480000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/rbc823/CVS/Entries u-boot-2009.03/board/rbc823/CVS/Entries
--- u-boot-2009.03_orig/board/rbc823/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rbc823/CVS/Entries 2009-03-25 15:57:41.293765900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kbd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rbc823.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rbc823/CVS/Entries.Extra u-boot-2009.03/board/rbc823/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/rbc823/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rbc823/CVS/Entries.Extra 2009-03-25 15:57:41.293765900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/flash.c///1238019709/
+/kbd.c///1238019709/
+/rbc823.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/rbc823/CVS/Entries.Extra.Old u-boot-2009.03/board/rbc823/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/rbc823/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rbc823/CVS/Entries.Extra.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/config.mk///1238019709/
+/flash.c///1238019709/
+/kbd.c///1238019709/
+/rbc823.c///1238019709/
+/u-boot.lds///1238019709/
diff -Naur u-boot-2009.03_orig/board/rbc823/CVS/Entries.Old u-boot-2009.03/board/rbc823/CVS/Entries.Old
--- u-boot-2009.03_orig/board/rbc823/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rbc823/CVS/Entries.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/kbd.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/rbc823.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:49 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rbc823/CVS/Repository u-boot-2009.03/board/rbc823/CVS/Repository
--- u-boot-2009.03_orig/board/rbc823/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rbc823/CVS/Repository 2009-03-25 15:24:54.368854300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/rbc823
diff -Naur u-boot-2009.03_orig/board/rbc823/CVS/Root u-boot-2009.03/board/rbc823/CVS/Root
--- u-boot-2009.03_orig/board/rbc823/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rbc823/CVS/Root 2009-03-25 15:24:54.353229400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/CVS/Entries u-boot-2009.03/board/renesas/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/CVS/Entries 2009-03-25 15:24:55.540721800 -0700
@@ -0,0 +1,7 @@
+D/MigoR////
+D/ap325rxa////
+D/r2dplus////
+D/r7780mp////
+D/rsk7203////
+D/sh7763rdp////
+D/sh7785lcr////
diff -Naur u-boot-2009.03_orig/board/renesas/CVS/Entries.Extra u-boot-2009.03/board/renesas/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/CVS/Entries.Extra 2009-03-25 15:24:55.540721800 -0700
@@ -0,0 +1,7 @@
+D/MigoR////
+D/ap325rxa////
+D/r2dplus////
+D/r7780mp////
+D/rsk7203////
+D/sh7763rdp////
+D/sh7785lcr////
diff -Naur u-boot-2009.03_orig/board/renesas/CVS/Repository u-boot-2009.03/board/renesas/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/CVS/Repository 2009-03-25 15:24:54.618852700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas
diff -Naur u-boot-2009.03_orig/board/renesas/CVS/Root u-boot-2009.03/board/renesas/CVS/Root
--- u-boot-2009.03_orig/board/renesas/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/CVS/Root 2009-03-25 15:24:54.603227800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries u-boot-2009.03/board/renesas/MigoR/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/MigoR/CVS/Entries 2009-03-25 15:57:41.371890400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/migo_r.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries.Extra u-boot-2009.03/board/renesas/MigoR/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/MigoR/CVS/Entries.Extra 2009-03-25 15:57:41.387515300 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/migo_r.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries.Extra.Old u-boot-2009.03/board/renesas/MigoR/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/MigoR/CVS/Entries.Extra.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/migo_r.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries.Old u-boot-2009.03/board/renesas/MigoR/CVS/Entries.Old
--- u-boot-2009.03_orig/board/renesas/MigoR/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/MigoR/CVS/Entries.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/migo_r.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/MigoR/CVS/Repository u-boot-2009.03/board/renesas/MigoR/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/MigoR/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/MigoR/CVS/Repository 2009-03-25 15:24:54.634477600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas/MigoR
diff -Naur u-boot-2009.03_orig/board/renesas/MigoR/CVS/Root u-boot-2009.03/board/renesas/MigoR/CVS/Root
--- u-boot-2009.03_orig/board/renesas/MigoR/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/MigoR/CVS/Root 2009-03-25 15:24:54.634477600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries 2009-03-25 15:57:41.450014900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ap325rxa.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpld-ap325rxa.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries.Extra u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries.Extra 2009-03-25 15:57:41.450014900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/ap325rxa.c///1238019709/
+/config.mk///1238019709/
+/cpld-ap325rxa.c///1238019709/
+/lowlevel_init.S///1238019709/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries.Extra.Old u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries.Extra.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019709/
+/ap325rxa.c///1238019709/
+/config.mk///1238019709/
+/cpld-ap325rxa.c///1238019709/
+/lowlevel_init.S///1238019709/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries.Old u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries.Old
--- u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/ap325rxa/CVS/Entries.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/ap325rxa.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/cpld-ap325rxa.c/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:49 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Repository u-boot-2009.03/board/renesas/ap325rxa/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/ap325rxa/CVS/Repository 2009-03-25 15:24:54.743851900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas/ap325rxa
diff -Naur u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Root u-boot-2009.03/board/renesas/ap325rxa/CVS/Root
--- u-boot-2009.03_orig/board/renesas/ap325rxa/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/ap325rxa/CVS/Root 2009-03-25 15:24:54.743851900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries u-boot-2009.03/board/renesas/r2dplus/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r2dplus/CVS/Entries 2009-03-25 15:57:41.512514500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r2dplus.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries.Extra u-boot-2009.03/board/renesas/r2dplus/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r2dplus/CVS/Entries.Extra 2009-03-25 15:57:41.512514500 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/r2dplus.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries.Extra.Old u-boot-2009.03/board/renesas/r2dplus/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r2dplus/CVS/Entries.Extra.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/r2dplus.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries.Old u-boot-2009.03/board/renesas/r2dplus/CVS/Entries.Old
--- u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r2dplus/CVS/Entries.Old 2009-03-25 15:24:54.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/r2dplus.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Repository u-boot-2009.03/board/renesas/r2dplus/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r2dplus/CVS/Repository 2009-03-25 15:24:54.868851100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas/r2dplus
diff -Naur u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Root u-boot-2009.03/board/renesas/r2dplus/CVS/Root
--- u-boot-2009.03_orig/board/renesas/r2dplus/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r2dplus/CVS/Root 2009-03-25 15:24:54.868851100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries u-boot-2009.03/board/renesas/r7780mp/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r7780mp/CVS/Entries 2009-03-25 15:57:41.575014100 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r7780mp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r7780mp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries.Extra u-boot-2009.03/board/renesas/r7780mp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r7780mp/CVS/Entries.Extra 2009-03-25 15:57:41.575014100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/r7780mp.c///1238019710/
+/r7780mp.h///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries.Extra.Old u-boot-2009.03/board/renesas/r7780mp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r7780mp/CVS/Entries.Extra.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/r7780mp.c///1238019710/
+/r7780mp.h///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries.Old u-boot-2009.03/board/renesas/r7780mp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r7780mp/CVS/Entries.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/r7780mp.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/r7780mp.h/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Repository u-boot-2009.03/board/renesas/r7780mp/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r7780mp/CVS/Repository 2009-03-25 15:24:54.962600500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas/r7780mp
diff -Naur u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Root u-boot-2009.03/board/renesas/r7780mp/CVS/Root
--- u-boot-2009.03_orig/board/renesas/r7780mp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/r7780mp/CVS/Root 2009-03-25 15:24:54.962600500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries u-boot-2009.03/board/renesas/rsk7203/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/rsk7203/CVS/Entries 2009-03-25 15:57:41.637513700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rsk7203.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries.Extra u-boot-2009.03/board/renesas/rsk7203/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/rsk7203/CVS/Entries.Extra 2009-03-25 15:57:41.653138600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/rsk7203.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries.Extra.Old u-boot-2009.03/board/renesas/rsk7203/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/rsk7203/CVS/Entries.Extra.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/rsk7203.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries.Old u-boot-2009.03/board/renesas/rsk7203/CVS/Entries.Old
--- u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/rsk7203/CVS/Entries.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/rsk7203.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Repository u-boot-2009.03/board/renesas/rsk7203/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/rsk7203/CVS/Repository 2009-03-25 15:24:55.087599700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas/rsk7203
diff -Naur u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Root u-boot-2009.03/board/renesas/rsk7203/CVS/Root
--- u-boot-2009.03_orig/board/renesas/rsk7203/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/rsk7203/CVS/Root 2009-03-25 15:24:55.087599700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries 2009-03-25 15:57:41.715638200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh7763rdp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries.Extra u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries.Extra 2009-03-25 15:57:41.715638200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/sh7763rdp.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries.Extra.Old u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries.Extra.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/sh7763rdp.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries.Old u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7763rdp/CVS/Entries.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/sh7763rdp.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Repository u-boot-2009.03/board/renesas/sh7763rdp/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7763rdp/CVS/Repository 2009-03-25 15:24:55.212598900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas/sh7763rdp
diff -Naur u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Root u-boot-2009.03/board/renesas/sh7763rdp/CVS/Root
--- u-boot-2009.03_orig/board/renesas/sh7763rdp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7763rdp/CVS/Root 2009-03-25 15:24:55.196974000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries
--- u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries 2009-03-25 15:57:41.809387600 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8169.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8169_mac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/selfcheck.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh7785lcr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot_29bit/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot_32bit/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries.Extra u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries.Extra 2009-03-25 15:57:41.809387600 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/rtl8169.h///1238019710/
+/rtl8169_mac.c///1238019710/
+/selfcheck.c///1238019710/
+/sh7785lcr.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot_29bit///1238019710/
+/u-boot_32bit///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries.Extra.Old u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries.Extra.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/lowlevel_init.S///1238019710/
+/rtl8169.h///1238019710/
+/rtl8169_mac.c///1238019710/
+/selfcheck.c///1238019710/
+/sh7785lcr.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot_29bit///1238019710/
+/u-boot_32bit///1238019710/
diff -Naur u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries.Old u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries.Old
--- u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7785lcr/CVS/Entries.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/rtl8169.h/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/rtl8169_mac.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/selfcheck.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/sh7785lcr.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot_29bit/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot_32bit/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Repository u-boot-2009.03/board/renesas/sh7785lcr/CVS/Repository
--- u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7785lcr/CVS/Repository 2009-03-25 15:24:55.321973200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/renesas/sh7785lcr
diff -Naur u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Root u-boot-2009.03/board/renesas/sh7785lcr/CVS/Root
--- u-boot-2009.03_orig/board/renesas/sh7785lcr/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/renesas/sh7785lcr/CVS/Root 2009-03-25 15:24:55.321973200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/rmu/CVS/Entries u-boot-2009.03/board/rmu/CVS/Entries
--- u-boot-2009.03_orig/board/rmu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rmu/CVS/Entries 2009-03-25 15:57:41.903137000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rmu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rmu/CVS/Entries.Extra u-boot-2009.03/board/rmu/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/rmu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rmu/CVS/Entries.Extra 2009-03-25 15:57:41.903137000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/rmu.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/rmu/CVS/Entries.Extra.Old u-boot-2009.03/board/rmu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/rmu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rmu/CVS/Entries.Extra.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/rmu.c///1238019710/
+/u-boot.lds///1238019710/
+/u-boot.lds.debug///1238019710/
diff -Naur u-boot-2009.03_orig/board/rmu/CVS/Entries.Old u-boot-2009.03/board/rmu/CVS/Entries.Old
--- u-boot-2009.03_orig/board/rmu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rmu/CVS/Entries.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/rmu.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rmu/CVS/Repository u-boot-2009.03/board/rmu/CVS/Repository
--- u-boot-2009.03_orig/board/rmu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rmu/CVS/Repository 2009-03-25 15:24:55.587596500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/rmu
diff -Naur u-boot-2009.03_orig/board/rmu/CVS/Root u-boot-2009.03/board/rmu/CVS/Root
--- u-boot-2009.03_orig/board/rmu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rmu/CVS/Root 2009-03-25 15:24:55.587596500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/rpxsuper/CVS/Entries u-boot-2009.03/board/rpxsuper/CVS/Entries
--- u-boot-2009.03_orig/board/rpxsuper/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rpxsuper/CVS/Entries 2009-03-25 15:57:41.996886400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mii_phy.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/readme/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rpxsuper.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rpxsuper.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rpxsuper/CVS/Entries.Extra u-boot-2009.03/board/rpxsuper/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/rpxsuper/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rpxsuper/CVS/Entries.Extra 2009-03-25 15:57:41.996886400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/mii_phy.c///1238019710/
+/readme///1238019710/
+/rpxsuper.c///1238019710/
+/rpxsuper.h///1238019710/
diff -Naur u-boot-2009.03_orig/board/rpxsuper/CVS/Entries.Extra.Old u-boot-2009.03/board/rpxsuper/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/rpxsuper/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rpxsuper/CVS/Entries.Extra.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/mii_phy.c///1238019710/
+/readme///1238019710/
+/rpxsuper.c///1238019710/
+/rpxsuper.h///1238019710/
diff -Naur u-boot-2009.03_orig/board/rpxsuper/CVS/Entries.Old u-boot-2009.03/board/rpxsuper/CVS/Entries.Old
--- u-boot-2009.03_orig/board/rpxsuper/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rpxsuper/CVS/Entries.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/mii_phy.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/readme/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/rpxsuper.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/rpxsuper.h/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rpxsuper/CVS/Repository u-boot-2009.03/board/rpxsuper/CVS/Repository
--- u-boot-2009.03_orig/board/rpxsuper/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rpxsuper/CVS/Repository 2009-03-25 15:24:55.712595700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/rpxsuper
diff -Naur u-boot-2009.03_orig/board/rpxsuper/CVS/Root u-boot-2009.03/board/rpxsuper/CVS/Root
--- u-boot-2009.03_orig/board/rpxsuper/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rpxsuper/CVS/Root 2009-03-25 15:24:55.712595700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/rsdproto/CVS/Entries u-boot-2009.03/board/rsdproto/CVS/Entries
--- u-boot-2009.03_orig/board/rsdproto/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rsdproto/CVS/Entries 2009-03-25 15:57:42.121885600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash_asm.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rsdproto.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rsdproto/CVS/Entries.Extra u-boot-2009.03/board/rsdproto/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/rsdproto/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rsdproto/CVS/Entries.Extra 2009-03-25 15:57:42.121885600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/flash_asm.S///1238019710/
+/rsdproto.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/rsdproto/CVS/Entries.Extra.Old u-boot-2009.03/board/rsdproto/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/rsdproto/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rsdproto/CVS/Entries.Extra.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/flash_asm.S///1238019710/
+/rsdproto.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/rsdproto/CVS/Entries.Old u-boot-2009.03/board/rsdproto/CVS/Entries.Old
--- u-boot-2009.03_orig/board/rsdproto/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rsdproto/CVS/Entries.Old 2009-03-25 15:24:55.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash_asm.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/rsdproto.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/rsdproto/CVS/Repository u-boot-2009.03/board/rsdproto/CVS/Repository
--- u-boot-2009.03_orig/board/rsdproto/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rsdproto/CVS/Repository 2009-03-25 15:24:55.853219800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/rsdproto
diff -Naur u-boot-2009.03_orig/board/rsdproto/CVS/Root u-boot-2009.03/board/rsdproto/CVS/Root
--- u-boot-2009.03_orig/board/rsdproto/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/rsdproto/CVS/Root 2009-03-25 15:24:55.853219800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sacsng/CVS/Entries u-boot-2009.03/board/sacsng/CVS/Entries
--- u-boot-2009.03_orig/board/sacsng/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sacsng/CVS/Entries 2009-03-25 15:57:42.200010100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clkinit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clkinit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ioconfig.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sacsng.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sacsng/CVS/Entries.Extra u-boot-2009.03/board/sacsng/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sacsng/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sacsng/CVS/Entries.Extra 2009-03-25 15:57:42.200010100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/clkinit.c///1238019710/
+/clkinit.h///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/ioconfig.h///1238019710/
+/sacsng.c///1238019710/
diff -Naur u-boot-2009.03_orig/board/sacsng/CVS/Entries.Extra.Old u-boot-2009.03/board/sacsng/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sacsng/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sacsng/CVS/Entries.Extra.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019710/
+/clkinit.c///1238019710/
+/clkinit.h///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/ioconfig.h///1238019710/
+/sacsng.c///1238019710/
diff -Naur u-boot-2009.03_orig/board/sacsng/CVS/Entries.Old u-boot-2009.03/board/sacsng/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sacsng/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sacsng/CVS/Entries.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/clkinit.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/clkinit.h/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/ioconfig.h/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/sacsng.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sacsng/CVS/Repository u-boot-2009.03/board/sacsng/CVS/Repository
--- u-boot-2009.03_orig/board/sacsng/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sacsng/CVS/Repository 2009-03-25 15:24:55.993843900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sacsng
diff -Naur u-boot-2009.03_orig/board/sacsng/CVS/Root u-boot-2009.03/board/sacsng/CVS/Root
--- u-boot-2009.03_orig/board/sacsng/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sacsng/CVS/Root 2009-03-25 15:24:55.993843900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/samsung/CVS/Entries u-boot-2009.03/board/samsung/CVS/Entries
--- u-boot-2009.03_orig/board/samsung/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/CVS/Entries 2009-03-25 15:24:56.837588500 -0700
@@ -0,0 +1,3 @@
+D/smdk2400////
+D/smdk2410////
+D/smdk6400////
diff -Naur u-boot-2009.03_orig/board/samsung/CVS/Entries.Extra u-boot-2009.03/board/samsung/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/samsung/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/CVS/Entries.Extra 2009-03-25 15:24:56.837588500 -0700
@@ -0,0 +1,3 @@
+D/smdk2400////
+D/smdk2410////
+D/smdk6400////
diff -Naur u-boot-2009.03_orig/board/samsung/CVS/Repository u-boot-2009.03/board/samsung/CVS/Repository
--- u-boot-2009.03_orig/board/samsung/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/CVS/Repository 2009-03-25 15:24:56.134468000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/samsung
diff -Naur u-boot-2009.03_orig/board/samsung/CVS/Root u-boot-2009.03/board/samsung/CVS/Root
--- u-boot-2009.03_orig/board/samsung/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/CVS/Root 2009-03-25 15:24:56.134468000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries u-boot-2009.03/board/samsung/smdk2400/CVS/Entries
--- u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2400/CVS/Entries 2009-03-25 15:57:44.449995700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk2400.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries.Extra u-boot-2009.03/board/samsung/smdk2400/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2400/CVS/Entries.Extra 2009-03-25 15:57:44.465620600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/lowlevel_init.S///1238019710/
+/smdk2400.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries.Extra.Old u-boot-2009.03/board/samsung/smdk2400/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2400/CVS/Entries.Extra.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/lowlevel_init.S///1238019710/
+/smdk2400.c///1238019710/
+/u-boot.lds///1238019710/
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries.Old u-boot-2009.03/board/samsung/smdk2400/CVS/Entries.Old
--- u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2400/CVS/Entries.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/smdk2400.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:50 2009//
+D
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Repository u-boot-2009.03/board/samsung/smdk2400/CVS/Repository
--- u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2400/CVS/Repository 2009-03-25 15:24:56.165717800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/samsung/smdk2400
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Root u-boot-2009.03/board/samsung/smdk2400/CVS/Root
--- u-boot-2009.03_orig/board/samsung/smdk2400/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2400/CVS/Root 2009-03-25 15:24:56.165717800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries u-boot-2009.03/board/samsung/smdk2410/CVS/Entries
--- u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2410/CVS/Entries 2009-03-25 15:57:44.528120200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk2410.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries.Extra u-boot-2009.03/board/samsung/smdk2410/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2410/CVS/Entries.Extra 2009-03-25 15:57:44.528120200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/lowlevel_init.S///1238019710/
+/smdk2410.c///1238019710/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries.Extra.Old u-boot-2009.03/board/samsung/smdk2410/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2410/CVS/Entries.Extra.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019710/
+/config.mk///1238019710/
+/flash.c///1238019710/
+/lowlevel_init.S///1238019710/
+/smdk2410.c///1238019710/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries.Old u-boot-2009.03/board/samsung/smdk2410/CVS/Entries.Old
--- u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2410/CVS/Entries.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/smdk2410.c/1.1.1.1/Wed Mar 25 22:21:50 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Repository u-boot-2009.03/board/samsung/smdk2410/CVS/Repository
--- u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2410/CVS/Repository 2009-03-25 15:24:56.275092100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/samsung/smdk2410
diff -Naur u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Root u-boot-2009.03/board/samsung/smdk2410/CVS/Root
--- u-boot-2009.03_orig/board/samsung/smdk2410/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk2410/CVS/Root 2009-03-25 15:24:56.275092100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries u-boot-2009.03/board/samsung/smdk6400/CVS/Entries
--- u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk6400/CVS/Entries 2009-03-25 15:57:44.606244700 -0700
@@ -0,0 +1,7 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk6400.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-nand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries.Extra u-boot-2009.03/board/samsung/smdk6400/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk6400/CVS/Entries.Extra 2009-03-25 15:57:44.606244700 -0700
@@ -0,0 +1,6 @@
+/.gitignore///1238019711/
+/Makefile///1238019711/
+/config.mk///1238019711/
+/lowlevel_init.S///1238019711/
+/smdk6400.c///1238019711/
+/u-boot-nand.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries.Extra.Old u-boot-2009.03/board/samsung/smdk6400/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk6400/CVS/Entries.Extra.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,6 @@
+/.gitignore///1238019711/
+/Makefile///1238019711/
+/config.mk///1238019711/
+/lowlevel_init.S///1238019711/
+/smdk6400.c///1238019711/
+/u-boot-nand.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries.Old u-boot-2009.03/board/samsung/smdk6400/CVS/Entries.Old
--- u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk6400/CVS/Entries.Old 2009-03-25 15:24:56.000000000 -0700
@@ -0,0 +1,7 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/smdk6400.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot-nand.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Repository u-boot-2009.03/board/samsung/smdk6400/CVS/Repository
--- u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk6400/CVS/Repository 2009-03-25 15:24:56.618839900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/samsung/smdk6400
diff -Naur u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Root u-boot-2009.03/board/samsung/smdk6400/CVS/Root
--- u-boot-2009.03_orig/board/samsung/smdk6400/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/samsung/smdk6400/CVS/Root 2009-03-25 15:24:56.618839900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sandburst/CVS/Entries u-boot-2009.03/board/sandburst/CVS/Entries
--- u-boot-2009.03_orig/board/sandburst/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/CVS/Entries 2009-03-25 15:24:57.571958800 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/karef////
+D/metrobox////
diff -Naur u-boot-2009.03_orig/board/sandburst/CVS/Entries.Extra u-boot-2009.03/board/sandburst/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sandburst/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/CVS/Entries.Extra 2009-03-25 15:24:57.571958800 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/karef////
+D/metrobox////
diff -Naur u-boot-2009.03_orig/board/sandburst/CVS/Repository u-boot-2009.03/board/sandburst/CVS/Repository
--- u-boot-2009.03_orig/board/sandburst/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/CVS/Repository 2009-03-25 15:24:56.962587700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sandburst
diff -Naur u-boot-2009.03_orig/board/sandburst/CVS/Root u-boot-2009.03/board/sandburst/CVS/Root
--- u-boot-2009.03_orig/board/sandburst/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/CVS/Root 2009-03-25 15:24:56.931337900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sandburst/common/CVS/Entries u-boot-2009.03/board/sandburst/common/CVS/Entries
--- u-boot-2009.03_orig/board/sandburst/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/common/CVS/Entries 2009-03-25 15:57:44.684369200 -0700
@@ -0,0 +1,6 @@
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc440gx_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc440gx_i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sb_common.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sb_common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandburst/common/CVS/Entries.Extra u-boot-2009.03/board/sandburst/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sandburst/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/common/CVS/Entries.Extra 2009-03-25 15:57:44.684369200 -0700
@@ -0,0 +1,5 @@
+/flash.c///1238019711/
+/ppc440gx_i2c.c///1238019711/
+/ppc440gx_i2c.h///1238019711/
+/sb_common.c///1238019711/
+/sb_common.h///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandburst/common/CVS/Entries.Extra.Old u-boot-2009.03/board/sandburst/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sandburst/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/common/CVS/Entries.Extra.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,5 @@
+/flash.c///1238019711/
+/ppc440gx_i2c.c///1238019711/
+/ppc440gx_i2c.h///1238019711/
+/sb_common.c///1238019711/
+/sb_common.h///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandburst/common/CVS/Entries.Old u-boot-2009.03/board/sandburst/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sandburst/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/common/CVS/Entries.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,6 @@
+/flash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/ppc440gx_i2c.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/ppc440gx_i2c.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sb_common.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sb_common.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandburst/common/CVS/Repository u-boot-2009.03/board/sandburst/common/CVS/Repository
--- u-boot-2009.03_orig/board/sandburst/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/common/CVS/Repository 2009-03-25 15:24:56.993837500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sandburst/common
diff -Naur u-boot-2009.03_orig/board/sandburst/common/CVS/Root u-boot-2009.03/board/sandburst/common/CVS/Root
--- u-boot-2009.03_orig/board/sandburst/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/common/CVS/Root 2009-03-25 15:24:56.993837500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries u-boot-2009.03/board/sandburst/karef/CVS/Entries
--- u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/karef/CVS/Entries 2009-03-25 15:57:44.793743500 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hal_ka_of_auto.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hal_ka_sc_auto.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/karef.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/karef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/karef_version.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries.Extra u-boot-2009.03/board/sandburst/karef/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/karef/CVS/Entries.Extra 2009-03-25 15:57:44.793743500 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/hal_ka_of_auto.h///1238019711/
+/hal_ka_sc_auto.h///1238019711/
+/init.S///1238019711/
+/karef.c///1238019711/
+/karef.h///1238019711/
+/karef_version.h///1238019711/
+/u-boot.lds///1238019711/
+/u-boot.lds.debug///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries.Extra.Old u-boot-2009.03/board/sandburst/karef/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/karef/CVS/Entries.Extra.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/hal_ka_of_auto.h///1238019711/
+/hal_ka_sc_auto.h///1238019711/
+/init.S///1238019711/
+/karef.c///1238019711/
+/karef.h///1238019711/
+/karef_version.h///1238019711/
+/u-boot.lds///1238019711/
+/u-boot.lds.debug///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries.Old u-boot-2009.03/board/sandburst/karef/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sandburst/karef/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/karef/CVS/Entries.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/hal_ka_of_auto.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/hal_ka_sc_auto.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/karef.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/karef.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/karef_version.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandburst/karef/CVS/Repository u-boot-2009.03/board/sandburst/karef/CVS/Repository
--- u-boot-2009.03_orig/board/sandburst/karef/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/karef/CVS/Repository 2009-03-25 15:24:57.134461600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sandburst/karef
diff -Naur u-boot-2009.03_orig/board/sandburst/karef/CVS/Root u-boot-2009.03/board/sandburst/karef/CVS/Root
--- u-boot-2009.03_orig/board/sandburst/karef/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/karef/CVS/Root 2009-03-25 15:24:57.118836700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries u-boot-2009.03/board/sandburst/metrobox/CVS/Entries
--- u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/metrobox/CVS/Entries 2009-03-25 15:57:44.887492900 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hal_xc_auto.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/metrobox.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/metrobox.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/metrobox_version.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries.Extra u-boot-2009.03/board/sandburst/metrobox/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/metrobox/CVS/Entries.Extra 2009-03-25 15:57:44.887492900 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/hal_xc_auto.h///1238019711/
+/init.S///1238019711/
+/metrobox.c///1238019711/
+/metrobox.h///1238019711/
+/metrobox_version.h///1238019711/
+/u-boot.lds///1238019711/
+/u-boot.lds.debug///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries.Extra.Old u-boot-2009.03/board/sandburst/metrobox/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/metrobox/CVS/Entries.Extra.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/hal_xc_auto.h///1238019711/
+/init.S///1238019711/
+/metrobox.c///1238019711/
+/metrobox.h///1238019711/
+/metrobox_version.h///1238019711/
+/u-boot.lds///1238019711/
+/u-boot.lds.debug///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries.Old u-boot-2009.03/board/sandburst/metrobox/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/metrobox/CVS/Entries.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/hal_xc_auto.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/metrobox.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/metrobox.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/metrobox_version.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Repository u-boot-2009.03/board/sandburst/metrobox/CVS/Repository
--- u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/metrobox/CVS/Repository 2009-03-25 15:24:57.290710600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sandburst/metrobox
diff -Naur u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Root u-boot-2009.03/board/sandburst/metrobox/CVS/Root
--- u-boot-2009.03_orig/board/sandburst/metrobox/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandburst/metrobox/CVS/Root 2009-03-25 15:24:57.290710600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sandpoint/CVS/Entries u-boot-2009.03/board/sandpoint/CVS/Entries
--- u-boot-2009.03_orig/board/sandpoint/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandpoint/CVS/Entries 2009-03-25 15:57:44.981242300 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dinkdl/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/early_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sandpoint.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandpoint/CVS/Entries.Extra u-boot-2009.03/board/sandpoint/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sandpoint/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandpoint/CVS/Entries.Extra 2009-03-25 15:57:44.981242300 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019711/
+/README///1238019711/
+/config.mk///1238019711/
+/dinkdl///1238019711/
+/early_init.S///1238019711/
+/flash.c///1238019711/
+/sandpoint.c///1238019711/
+/speed.h///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandpoint/CVS/Entries.Extra.Old u-boot-2009.03/board/sandpoint/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sandpoint/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandpoint/CVS/Entries.Extra.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019711/
+/README///1238019711/
+/config.mk///1238019711/
+/dinkdl///1238019711/
+/early_init.S///1238019711/
+/flash.c///1238019711/
+/sandpoint.c///1238019711/
+/speed.h///1238019711/
diff -Naur u-boot-2009.03_orig/board/sandpoint/CVS/Entries.Old u-boot-2009.03/board/sandpoint/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sandpoint/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandpoint/CVS/Entries.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/dinkdl/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/early_init.S/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sandpoint.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/speed.h/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sandpoint/CVS/Repository u-boot-2009.03/board/sandpoint/CVS/Repository
--- u-boot-2009.03_orig/board/sandpoint/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandpoint/CVS/Repository 2009-03-25 15:24:57.618833500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sandpoint
diff -Naur u-boot-2009.03_orig/board/sandpoint/CVS/Root u-boot-2009.03/board/sandpoint/CVS/Root
--- u-boot-2009.03_orig/board/sandpoint/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sandpoint/CVS/Root 2009-03-25 15:24:57.618833500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc2410x/CVS/Entries u-boot-2009.03/board/sbc2410x/CVS/Entries
--- u-boot-2009.03_orig/board/sbc2410x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc2410x/CVS/Entries 2009-03-25 15:57:45.059366800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc2410x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc2410x/CVS/Entries.Extra u-boot-2009.03/board/sbc2410x/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc2410x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc2410x/CVS/Entries.Extra 2009-03-25 15:57:45.059366800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/lowlevel_init.S///1238019711/
+/sbc2410x.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc2410x/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc2410x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc2410x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc2410x/CVS/Entries.Extra.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/lowlevel_init.S///1238019711/
+/sbc2410x.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc2410x/CVS/Entries.Old u-boot-2009.03/board/sbc2410x/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc2410x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc2410x/CVS/Entries.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc2410x.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc2410x/CVS/Repository u-boot-2009.03/board/sbc2410x/CVS/Repository
--- u-boot-2009.03_orig/board/sbc2410x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc2410x/CVS/Repository 2009-03-25 15:24:57.759457600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc2410x
diff -Naur u-boot-2009.03_orig/board/sbc2410x/CVS/Root u-boot-2009.03/board/sbc2410x/CVS/Root
--- u-boot-2009.03_orig/board/sbc2410x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc2410x/CVS/Root 2009-03-25 15:24:57.759457600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc405/CVS/Entries u-boot-2009.03/board/sbc405/CVS/Entries
--- u-boot-2009.03_orig/board/sbc405/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc405/CVS/Entries 2009-03-25 15:57:45.121866400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/strataflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc405/CVS/Entries.Extra u-boot-2009.03/board/sbc405/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc405/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc405/CVS/Entries.Extra 2009-03-25 15:57:45.121866400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/sbc405.c///1238019711/
+/strataflash.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc405/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc405/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc405/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc405/CVS/Entries.Extra.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/sbc405.c///1238019711/
+/strataflash.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc405/CVS/Entries.Old u-boot-2009.03/board/sbc405/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc405/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc405/CVS/Entries.Old 2009-03-25 15:24:57.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc405.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/strataflash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc405/CVS/Repository u-boot-2009.03/board/sbc405/CVS/Repository
--- u-boot-2009.03_orig/board/sbc405/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc405/CVS/Repository 2009-03-25 15:24:57.884456800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc405
diff -Naur u-boot-2009.03_orig/board/sbc405/CVS/Root u-boot-2009.03/board/sbc405/CVS/Root
--- u-boot-2009.03_orig/board/sbc405/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc405/CVS/Root 2009-03-25 15:24:57.884456800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc8240/CVS/Entries u-boot-2009.03/board/sbc8240/CVS/Entries
--- u-boot-2009.03_orig/board/sbc8240/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8240/CVS/Entries 2009-03-25 15:57:45.184366000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8240.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8240/CVS/Entries.Extra u-boot-2009.03/board/sbc8240/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc8240/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8240/CVS/Entries.Extra 2009-03-25 15:57:45.199990900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019711/
+/README///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/sbc8240.c///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8240/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc8240/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc8240/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8240/CVS/Entries.Extra.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019711/
+/README///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/sbc8240.c///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8240/CVS/Entries.Old u-boot-2009.03/board/sbc8240/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc8240/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8240/CVS/Entries.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/README/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc8240.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8240/CVS/Repository u-boot-2009.03/board/sbc8240/CVS/Repository
--- u-boot-2009.03_orig/board/sbc8240/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8240/CVS/Repository 2009-03-25 15:24:58.009456000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc8240
diff -Naur u-boot-2009.03_orig/board/sbc8240/CVS/Root u-boot-2009.03/board/sbc8240/CVS/Root
--- u-boot-2009.03_orig/board/sbc8240/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8240/CVS/Root 2009-03-25 15:24:58.009456000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc8260/CVS/Entries u-boot-2009.03/board/sbc8260/CVS/Entries
--- u-boot-2009.03_orig/board/sbc8260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8260/CVS/Entries 2009-03-25 15:57:45.246865600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8260.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8260/CVS/Entries.Extra u-boot-2009.03/board/sbc8260/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc8260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8260/CVS/Entries.Extra 2009-03-25 15:57:45.246865600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/sbc8260.c///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8260/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc8260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc8260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8260/CVS/Entries.Extra.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/sbc8260.c///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8260/CVS/Entries.Old u-boot-2009.03/board/sbc8260/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc8260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8260/CVS/Entries.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc8260.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8260/CVS/Repository u-boot-2009.03/board/sbc8260/CVS/Repository
--- u-boot-2009.03_orig/board/sbc8260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8260/CVS/Repository 2009-03-25 15:24:58.118830300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc8260
diff -Naur u-boot-2009.03_orig/board/sbc8260/CVS/Root u-boot-2009.03/board/sbc8260/CVS/Root
--- u-boot-2009.03_orig/board/sbc8260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8260/CVS/Root 2009-03-25 15:24:58.118830300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc8349/CVS/Entries u-boot-2009.03/board/sbc8349/CVS/Entries
--- u-boot-2009.03_orig/board/sbc8349/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8349/CVS/Entries 2009-03-25 15:57:45.309365200 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8349.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8349/CVS/Entries.Extra u-boot-2009.03/board/sbc8349/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc8349/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8349/CVS/Entries.Extra 2009-03-25 15:57:45.309365200 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/pci.c///1238019711/
+/sbc8349.c///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8349/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc8349/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc8349/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8349/CVS/Entries.Extra.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/pci.c///1238019711/
+/sbc8349.c///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8349/CVS/Entries.Old u-boot-2009.03/board/sbc8349/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc8349/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8349/CVS/Entries.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc8349.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8349/CVS/Repository u-boot-2009.03/board/sbc8349/CVS/Repository
--- u-boot-2009.03_orig/board/sbc8349/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8349/CVS/Repository 2009-03-25 15:24:58.212579700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc8349
diff -Naur u-boot-2009.03_orig/board/sbc8349/CVS/Root u-boot-2009.03/board/sbc8349/CVS/Root
--- u-boot-2009.03_orig/board/sbc8349/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8349/CVS/Root 2009-03-25 15:24:58.212579700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc8548/CVS/Entries u-boot-2009.03/board/sbc8548/CVS/Entries
--- u-boot-2009.03_orig/board/sbc8548/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8548/CVS/Entries 2009-03-25 15:57:45.387489700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8548.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8548/CVS/Entries.Extra u-boot-2009.03/board/sbc8548/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc8548/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8548/CVS/Entries.Extra 2009-03-25 15:57:45.387489700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/ddr.c///1238019711/
+/law.c///1238019711/
+/sbc8548.c///1238019711/
+/tlb.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8548/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc8548/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc8548/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8548/CVS/Entries.Extra.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/ddr.c///1238019711/
+/law.c///1238019711/
+/sbc8548.c///1238019711/
+/tlb.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8548/CVS/Entries.Old u-boot-2009.03/board/sbc8548/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc8548/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8548/CVS/Entries.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc8548.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8548/CVS/Repository u-boot-2009.03/board/sbc8548/CVS/Repository
--- u-boot-2009.03_orig/board/sbc8548/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8548/CVS/Repository 2009-03-25 15:24:58.321954000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc8548
diff -Naur u-boot-2009.03_orig/board/sbc8548/CVS/Root u-boot-2009.03/board/sbc8548/CVS/Root
--- u-boot-2009.03_orig/board/sbc8548/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8548/CVS/Root 2009-03-25 15:24:58.321954000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc8560/CVS/Entries u-boot-2009.03/board/sbc8560/CVS/Entries
--- u-boot-2009.03_orig/board/sbc8560/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8560/CVS/Entries 2009-03-25 15:57:45.465614200 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8560.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8560/CVS/Entries.Extra u-boot-2009.03/board/sbc8560/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc8560/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8560/CVS/Entries.Extra 2009-03-25 15:57:45.481239100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/ddr.c///1238019711/
+/law.c///1238019711/
+/sbc8560.c///1238019711/
+/tlb.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8560/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc8560/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc8560/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8560/CVS/Entries.Extra.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/ddr.c///1238019711/
+/law.c///1238019711/
+/sbc8560.c///1238019711/
+/tlb.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8560/CVS/Entries.Old u-boot-2009.03/board/sbc8560/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc8560/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8560/CVS/Entries.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc8560.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8560/CVS/Repository u-boot-2009.03/board/sbc8560/CVS/Repository
--- u-boot-2009.03_orig/board/sbc8560/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8560/CVS/Repository 2009-03-25 15:24:58.525077700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc8560
diff -Naur u-boot-2009.03_orig/board/sbc8560/CVS/Root u-boot-2009.03/board/sbc8560/CVS/Root
--- u-boot-2009.03_orig/board/sbc8560/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8560/CVS/Root 2009-03-25 15:24:58.525077700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sbc8641d/CVS/Entries u-boot-2009.03/board/sbc8641d/CVS/Entries
--- u-boot-2009.03_orig/board/sbc8641d/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8641d/CVS/Entries 2009-03-25 15:57:45.543738700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8641d.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8641d/CVS/Entries.Extra u-boot-2009.03/board/sbc8641d/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sbc8641d/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8641d/CVS/Entries.Extra 2009-03-25 15:57:45.543738700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/ddr.c///1238019711/
+/law.c///1238019711/
+/sbc8641d.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8641d/CVS/Entries.Extra.Old u-boot-2009.03/board/sbc8641d/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sbc8641d/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8641d/CVS/Entries.Extra.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/ddr.c///1238019711/
+/law.c///1238019711/
+/sbc8641d.c///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sbc8641d/CVS/Entries.Old u-boot-2009.03/board/sbc8641d/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sbc8641d/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8641d/CVS/Entries.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sbc8641d.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sbc8641d/CVS/Repository u-boot-2009.03/board/sbc8641d/CVS/Repository
--- u-boot-2009.03_orig/board/sbc8641d/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8641d/CVS/Repository 2009-03-25 15:24:58.665701800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sbc8641d
diff -Naur u-boot-2009.03_orig/board/sbc8641d/CVS/Root u-boot-2009.03/board/sbc8641d/CVS/Root
--- u-boot-2009.03_orig/board/sbc8641d/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sbc8641d/CVS/Root 2009-03-25 15:24:58.665701800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sc3/CVS/Entries u-boot-2009.03/board/sc3/CVS/Entries
--- u-boot-2009.03_orig/board/sc3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc3/CVS/Entries 2009-03-31 14:47:44.055194400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3.c/1.1.1.1/Tue Mar 31 21:47:43 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/sc3/CVS/Entries.Extra u-boot-2009.03/board/sc3/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sc3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc3/CVS/Entries.Extra 2009-03-31 14:47:44.055194400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/init.S///1238019711/
+/sc3.h///1238019711/
+/sc3nand.c///1238019711/
+/u-boot.lds///1238019711/
+/sc3.c///1238019711/
diff -Naur u-boot-2009.03_orig/board/sc3/CVS/Entries.Extra.Old u-boot-2009.03/board/sc3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sc3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc3/CVS/Entries.Extra.Old 2009-03-25 17:51:40.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/init.S///1238019711/
+/sc3.h///1238019711/
+/sc3nand.c///1238019711/
+/u-boot.lds///1238019711/
+/sc3.c///1238028700/
diff -Naur u-boot-2009.03_orig/board/sc3/CVS/Entries.Old u-boot-2009.03/board/sc3/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sc3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc3/CVS/Entries.Old 2009-03-25 17:51:40.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3.c/1.2/Thu Mar 26 00:51:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sc3/CVS/Repository u-boot-2009.03/board/sc3/CVS/Repository
--- u-boot-2009.03_orig/board/sc3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc3/CVS/Repository 2009-03-25 15:24:58.790701000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sc3
diff -Naur u-boot-2009.03_orig/board/sc3/CVS/Root u-boot-2009.03/board/sc3/CVS/Root
--- u-boot-2009.03_orig/board/sc3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc3/CVS/Root 2009-03-25 15:24:58.775076100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sc3/sc3.c u-boot-2009.03/board/sc3/sc3.c
--- u-boot-2009.03_orig/board/sc3/sc3.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/sc3/sc3.c 2009-03-31 14:47:43.914571200 -0700
@@ -1,787 +1,790 @@
-/*
- * (C) Copyright 2007
- * Heiko Schocher, DENX Software Engineering, <hs@denx.de>.
- *
- * (C) Copyright 2003
- * Juergen Beisert, EuroDesign embedded technologies, info@eurodsn.de
- * Derived from walnut.c
- *
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- *
- * $Log:$
- */
-
-#include <common.h>
-#include <asm/processor.h>
-#include <asm/io.h>
-#include "sc3.h"
-#include <pci.h>
-#include <i2c.h>
-#include <malloc.h>
-#include <netdev.h>
-
-#undef writel
-#undef writeb
-#define writeb(b,addr) ((*(volatile u8 *) (addr)) = (b))
-#define writel(b,addr) ((*(volatile u32 *) (addr)) = (b))
-
-/* write only register to configure things in our CPLD */
-#define CPLD_CONTROL_1 0x79000102
-#define CPLD_VERSION 0x79000103
-
-#define IS_CAMERON ((*(unsigned char *)(CPLD_VERSION)== 0x32) ? 1 : 0)
-
-static struct pci_controller hose={0,};
-
-/************************************************************
- * Standard definition
- ************************************************************/
-
-/* CPC0_CR0 Function ISA bus
- - GPIO0
- - GPIO1 -> Output: NAND-Command Latch Enable
- - GPIO2 -> Output: NAND Address Latch Enable
- - GPIO3 -> IRQ input ISA-IRQ #5 (through CPLD)
- - GPIO4 -> Output: NAND-Chip Enable
- - GPIO5 -> IRQ input ISA-IRQ#7 (through CPLD)
- - GPIO6 -> IRQ input ISA-IRQ#9 (through CPLD)
- - GPIO7 -> IRQ input ISA-IRQ#10 (through CPLD)
- - GPIO8 -> IRQ input ISA-IRQ#11 (through CPLD)
- - GPIO9 -> IRQ input ISA-IRQ#12 (through CPLD)
- - GPIO10/CS1# -> CS1# NAND ISA-CS#0
- - GPIO11/CS2# -> CS2# ISA emulation ISA-CS#1
- - GPIO12/CS3# -> CS3# 2nd Flash-Bank ISA-CS#2 or ISA-CS#7
- - GPIO13/CS4# -> CS4# USB HC or ISA emulation ISA-CS#3
- - GPIO14/CS5# -> CS5# Boosted IDE access ISA-CS#4
- - GPIO15/CS6# -> CS6# ISA emulation ISA-CS#5
- - GPIO16/CS7# -> CS7# ISA emulation ISA-CS#6
- - GPIO17/IRQ0 -> GPIO, in, NAND-Ready/Busy# line ISA-IRQ#3
- - GPIO18/IRQ1 -> IRQ input ISA-IRQ#14
- - GPIO19/IRQ2 -> IRQ input or USB ISA-IRQ#4
- - GPIO20/IRQ3 -> IRQ input PCI-IRQ#D
- - GPIO21/IRQ4 -> IRQ input PCI-IRQ#C
- - GPIO22/IRQ5 -> IRQ input PCI-IRQ#B
- - GPIO23/IRQ6 -> IRQ input PCI-IRQ#A
- - GPIO24 -> if GPIO output: 0=JTAG CPLD activ, 1=JTAG CPLD inactiv
-*/
-/*
-| CPLD register: io-space at offset 0x102 (write only)
-| 0
-| 1
-| 2 0=CS#4 USB CS#, 1=ISA or GP bus
-| 3
-| 4
-| 5
-| 6 1=enable faster IDE access
-| 7
-*/
-#define USB_CHIP_ENABLE 0x04
-#define IDE_BOOSTING 0x40
-
-/* --------------- USB stuff ------------------------------------- */
-#ifdef CONFIG_ISP1161_PRESENT
-/**
- * initUsbHost- Initialize the Philips isp1161 HC part if present
- * @cpldConfig: Pointer to value in write only CPLD register
- *
- * Initialize the USB host controller if present and fills the
- * scratch register to inform the driver about used resources
- */
-
-static void initUsbHost (unsigned char *cpldConfig)
-{
- int i;
- unsigned long usbBase;
- /*
- * Read back where init.S has located the USB chip
- */
- mtdcr (0x012, 0x04);
- usbBase = mfdcr (0x013);
- if (!(usbBase & 0x18000)) /* enabled? */
- return;
- usbBase &= 0xFFF00000;
-
- /*
- * to test for the USB controller enable using of CS#4 and DMA 3 for USB access
- */
- writeb (*cpldConfig | USB_CHIP_ENABLE,CPLD_CONTROL_1);
-
- /*
- * first check: is the controller assembled?
- */
- hcWriteWord (usbBase, 0x5555, HcScratch);
- if (hcReadWord (usbBase, HcScratch) == 0x5555) {
- hcWriteWord (usbBase, 0xAAAA, HcScratch);
- if (hcReadWord (usbBase, HcScratch) == 0xAAAA) {
- if ((hcReadWord (usbBase, HcChipID) & 0xFF00) != 0x6100)
- return; /* this is not our controller */
- /*
- * try a software reset. This needs up to 10 seconds (see datasheet)
- */
- hcWriteDWord (usbBase, 0x00000001, HcCommandStatus);
- for (i = 1000; i > 0; i--) { /* loop up to 10 seconds */
- udelay (10);
- if (!(hcReadDWord (usbBase, HcCommandStatus) & 0x01))
- break;
- }
-
- if (!i)
- return; /* the controller doesn't responding. Broken? */
- /*
- * OK. USB controller is ready. Initialize it in such way the later driver
- * can us it (without any knowing about specific implementation)
- */
- hcWriteDWord (usbBase, 0x00000000, HcControl);
- /*
- * disable all interrupt sources. Because we
- * don't know where we come from (hard reset, cold start, soft reset...)
- */
- hcWriteDWord (usbBase, 0x8000007D, HcInterruptDisable);
- /*
- * our current setup hardware configuration
- * - every port power supply can switched indepently
- * - every port can signal overcurrent
- * - every port is "outside" and the devices are removeable
- */
- hcWriteDWord (usbBase, 0x32000902, HcRhDescriptorA);
- hcWriteDWord (usbBase, 0x00060000, HcRhDescriptorB);
- /*
- * don't forget to switch off power supply of each port
- * The later running driver can reenable them to find and use
- * the (maybe) connected devices.
- *
- */
- hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus1);
- hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus2);
- hcWriteWord (usbBase, 0x0428, HcHardwareConfiguration);
- hcWriteWord (usbBase, 0x0040, HcDMAConfiguration);
- hcWriteWord (usbBase, 0x0000, HcuPInterruptEnable);
- hcWriteWord (usbBase, 0xA000 | (0x03 << 8) | 27, HcScratch);
- /*
- * controller is present and usable
- */
- *cpldConfig |= USB_CHIP_ENABLE;
- }
- }
-}
-#endif
-
-#if defined(CONFIG_START_IDE)
-int board_start_ide(void)
-{
- if (IS_CAMERON) {
- puts ("no IDE on cameron board.\n");
- return 0;
- }
- return 1;
-}
-#endif
-
-static int sc3_cameron_init (void)
-{
- /* Set up the Memory Controller for the CAMERON version */
- mtebc (pb4ap, 0x01805940);
- mtebc (pb4cr, 0x7401a000);
- mtebc (pb5ap, 0x01805940);
- mtebc (pb5cr, 0x7401a000);
- mtebc (pb6ap, 0x0);
- mtebc (pb6cr, 0x0);
- mtebc (pb7ap, 0x0);
- mtebc (pb7cr, 0x0);
- return 0;
-}
-
-void sc3_read_eeprom (void)
-{
- uchar i2c_buffer[18];
-
- i2c_read (0x50, 0x03, 1, i2c_buffer, 9);
- i2c_buffer[9] = 0;
- setenv ("serial#", (char *)i2c_buffer);
-
- /* read mac-address from eeprom */
- i2c_read (0x50, 0x11, 1, i2c_buffer, 15);
- i2c_buffer[17] = 0;
- i2c_buffer[16] = i2c_buffer[14];
- i2c_buffer[15] = i2c_buffer[13];
- i2c_buffer[14] = ':';
- i2c_buffer[13] = i2c_buffer[12];
- i2c_buffer[12] = i2c_buffer[11];
- i2c_buffer[11] = ':';
- i2c_buffer[8] = ':';
- i2c_buffer[5] = ':';
- i2c_buffer[2] = ':';
- setenv ("ethaddr", (char *)i2c_buffer);
-}
-
-int board_early_init_f (void)
-{
- /* write only register to configure things in our CPLD */
- unsigned char cpldConfig_1=0x00;
-
-/*-------------------------------------------------------------------------+
-| Interrupt controller setup for the SolidCard III CPU card (plus Evaluation board).
-|
-| Note: IRQ 0 UART 0, active high; level sensitive
-| IRQ 1 UART 1, active high; level sensitive
-| IRQ 2 IIC, active high; level sensitive
-| IRQ 3 Ext. master, rising edge, edge sensitive
-| IRQ 4 PCI, active high; level sensitive
-| IRQ 5 DMA Channel 0, active high; level sensitive
-| IRQ 6 DMA Channel 1, active high; level sensitive
-| IRQ 7 DMA Channel 2, active high; level sensitive
-| IRQ 8 DMA Channel 3, active high; level sensitive
-| IRQ 9 Ethernet Wakeup, active high; level sensitive
-| IRQ 10 MAL System Error (SERR), active high; level sensitive
-| IRQ 11 MAL Tx End of Buffer, active high; level sensitive
-| IRQ 12 MAL Rx End of Buffer, active high; level sensitive
-| IRQ 13 MAL Tx Descriptor Error, active high; level sensitive
-| IRQ 14 MAL Rx Descriptor Error, active high; level sensitive
-| IRQ 15 Ethernet, active high; level sensitive
-| IRQ 16 External PCI SERR, active high; level sensitive
-| IRQ 17 ECC Correctable Error, active high; level sensitive
-| IRQ 18 PCI Power Management, active high; level sensitive
-|
-| IRQ 19 (EXT IRQ7 405GPr only)
-| IRQ 20 (EXT IRQ8 405GPr only)
-| IRQ 21 (EXT IRQ9 405GPr only)
-| IRQ 22 (EXT IRQ10 405GPr only)
-| IRQ 23 (EXT IRQ11 405GPr only)
-| IRQ 24 (EXT IRQ12 405GPr only)
-|
-| IRQ 25 (EXT IRQ 0) NAND-Flash R/B# (raising edge means flash is ready)
-| IRQ 26 (EXT IRQ 1) IDE0 interrupt (x86 = IRQ14). Active high (edge sensitive)
-| IRQ 27 (EXT IRQ 2) USB controller
-| IRQ 28 (EXT IRQ 3) INT D, VGA; active low; level sensitive
-| IRQ 29 (EXT IRQ 4) INT C, Ethernet; active low; level sensitive
-| IRQ 30 (EXT IRQ 5) INT B, PC104+ SLOT; active low; level sensitive
-| IRQ 31 (EXT IRQ 6) INT A, PC104+ SLOT; active low; level sensitive
-|
-| Direct Memory Access Controller Signal Polarities
-| DRQ0 active high (like ISA)
-| ACK0 active low (like ISA)
-| EOT0 active high (like ISA)
-| DRQ1 active high (like ISA)
-| ACK1 active low (like ISA)
-| EOT1 active high (like ISA)
-| DRQ2 active high (like ISA)
-| ACK2 active low (like ISA)
-| EOT2 active high (like ISA)
-| DRQ3 active high (like ISA)
-| ACK3 active low (like ISA)
-| EOT3 active high (like ISA)
-|
-+-------------------------------------------------------------------------*/
-
- writeb (cpldConfig_1, CPLD_CONTROL_1); /* disable everything in CPLD */
-
- mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
- mtdcr (uicer, 0x00000000); /* disable all ints */
- mtdcr (uiccr, 0x00000000); /* set all to be non-critical */
-
- if (IS_CAMERON) {
- sc3_cameron_init();
- mtdcr (0x0B6, 0x18000000);
- mtdcr (uicpr, 0xFFFFFFF0);
- mtdcr (uictr, 0x10001030);
- } else {
- mtdcr (0x0B6, 0x0000000);
- mtdcr (uicpr, 0xFFFFFFE0);
- mtdcr (uictr, 0x10000020);
- }
- mtdcr (uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority */
- mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
-
- /* setup other implementation specific details */
- mtdcr (ecr, 0x60606000);
-
- mtdcr (cntrl1, 0x000042C0);
-
- if (IS_CAMERON) {
- mtdcr (cntrl0, 0x01380000);
- /* Setup the GPIOs */
- writel (0x08008000, 0xEF600700); /* Output states */
- writel (0x00000000, 0xEF600718); /* Open Drain control */
- writel (0x68098000, 0xEF600704); /* Output control */
- } else {
- mtdcr (cntrl0,0x00080000);
- /* Setup the GPIOs */
- writel (0x08000000, 0xEF600700); /* Output states */
- writel (0x14000000, 0xEF600718); /* Open Drain control */
- writel (0x7C000000, 0xEF600704); /* Output control */
- }
-
- /* Code decompression disabled */
- mtdcr (kiar, kconf);
- mtdcr (kidr, 0x2B);
-
- /* CPC0_ER: enable sleep mode of (currently) unused components */
- /* CPC0_FR: force unused components into sleep mode */
- mtdcr (cpmer, 0x3F800000);
- mtdcr (cpmfr, 0x14000000);
-
- /* set PLB priority */
- mtdcr (0x87, 0x08000000);
-
- /* --------------- DMA stuff ------------------------------------- */
- mtdcr (0x126, 0x49200000);
-
-#ifndef IDE_USES_ISA_EMULATION
- cpldConfig_1 |= IDE_BOOSTING; /* enable faster IDE */
- /* cpldConfig |= 0x01; */ /* enable 8.33MHz output, if *not* present on your baseboard */
- writeb (cpldConfig_1, CPLD_CONTROL_1);
-#endif
-
-#ifdef CONFIG_ISP1161_PRESENT
- initUsbHost (&cpldConfig_1);
- writeb (cpldConfig_1, CPLD_CONTROL_1);
-#endif
- /* FIXME: for what must we do this */
- *(unsigned long *)0x79000080 = 0x0001;
- return(0);
-}
-
-int misc_init_r (void)
-{
- char *s1;
- int i, xilinx_val;
- volatile char *xilinx_adr;
- xilinx_adr = (char *)0x79000102;
-
- *xilinx_adr = 0x00;
-
-/* customer settings ***************************************** */
-/*
- s1 = getenv ("function");
- if (s1) {
- if (!strcmp (s1, "Rosho")) {
- printf ("function 'Rosho' activated\n");
- *xilinx_adr = 0x40;
- }
- else {
- printf (">>>>>>>>>> function %s not recognized\n",s1);
- }
- }
-*/
-
-/* individual settings ***************************************** */
- if ((s1 = getenv ("xilinx"))) {
- i=0;
- xilinx_val = 0;
- while (i < 3 && s1[i]) {
- if (s1[i] >= '0' && s1[i] <= '9')
- xilinx_val = (xilinx_val << 4) + s1[i] - '0';
- else
- if (s1[i] >= 'A' && s1[i] <= 'F')
- xilinx_val = (xilinx_val << 4) + s1[i] - 'A' + 10;
- else
- if (s1[i] >= 'a' && s1[i] <= 'f')
- xilinx_val = (xilinx_val << 4) + s1[i] - 'a' + 10;
- else {
- xilinx_val = -1;
- break;
- }
- i++;
- }
- if (xilinx_val >= 0 && xilinx_val <=255 && i < 3) {
- printf ("Xilinx: set to %s\n", s1);
- *xilinx_adr = (unsigned char) xilinx_val;
- } else
- printf ("Xilinx: rejected value %s\n", s1);
- }
- return 0;
-}
-
-/* -------------------------------------------------------------------------
- * printCSConfig
- *
- * Print some informations about chips select configurations
- * Only used while debugging.
- *
- * Params:
- * - No. of CS pin
- * - AP of this CS
- * - CR of this CS
- *
- * Returns
- * nothing
- ------------------------------------------------------------------------- */
-
-#ifdef SC3_DEBUGOUT
-static void printCSConfig(int reg,unsigned long ap,unsigned long cr)
-{
- const char *bsize[4] = {"8","16","32","?"};
- const unsigned char banks[8] = {1, 2, 4, 8, 16, 32, 64, 128};
- const char *bankaccess[4] = {"disabled", "RO", "WO", "RW"};
-
-#define CYCLE 30 /* time of one clock (based on 33MHz) */
-
- printf("\nCS#%d",reg);
- if (!(cr & 0x00018000))
- puts(" unused");
- else {
- if (((cr&0xFFF00000U) & ((banks[(cr & 0x000E0000) >> 17]-1) << 20)))
- puts(" Address is not multiple of bank size!");
-
- printf("\n -%s bit device",
- bsize[(cr & 0x00006000) >> 13]);
- printf(" at 0x%08lX", cr & 0xFFF00000U);
- printf(" size: %u MB", banks[(cr & 0x000E0000) >> 17]);
- printf(" rights: %s", bankaccess[(cr & 0x00018000) >> 15]);
- if (ap & 0x80000000) {
- printf("\n -Burst device (%luns/%luns)",
- (((ap & 0x7C000000) >> 26) + 1) * CYCLE,
- (((ap & 0x03800000) >> 23) + 1) * CYCLE);
- } else {
- printf("\n -Non burst device, active cycle %luns",
- (((ap & 0x7F800000) >> 23) + 1) * CYCLE);
- printf("\n -Address setup %luns",
- ((ap & 0xC0000) >> 18) * CYCLE);
- printf("\n -CS active to RD %luns/WR %luns",
- ((ap & 0x30000) >> 16) * CYCLE,
- ((ap & 0xC000) >> 14) * CYCLE);
- printf("\n -WR to CS inactive %luns",
- ((ap & 0x3000) >> 12) * CYCLE);
- printf("\n -Hold after access %luns",
- ((ap & 0xE00) >> 9) * CYCLE);
- printf("\n -Ready is %sabled",
- ap & 0x100 ? "en" : "dis");
- }
- }
-}
-#endif
-
-#ifdef SC3_DEBUGOUT
-
-static unsigned int ap[] = {pb0ap, pb1ap, pb2ap, pb3ap, pb4ap,
- pb5ap, pb6ap, pb7ap};
-static unsigned int cr[] = {pb0cr, pb1cr, pb2cr, pb3cr, pb4cr,
- pb5cr, pb6cr, pb7cr};
-
-static int show_reg (int nr)
-{
- unsigned long ul1, ul2;
-
- mtdcr (ebccfga, ap[nr]);
- ul1 = mfdcr (ebccfgd);
- mtdcr (ebccfga, cr[nr]);
- ul2 = mfdcr(ebccfgd);
- printCSConfig(nr, ul1, ul2);
- return 0;
-}
-#endif
-
-int checkboard (void)
-{
-#ifdef SC3_DEBUGOUT
- unsigned long ul1;
- int i;
-
- for (i = 0; i < 8; i++) {
- show_reg (i);
- }
-
- mtdcr (ebccfga, epcr);
- ul1 = mfdcr (ebccfgd);
-
- puts ("\nGeneral configuration:\n");
-
- if (ul1 & 0x80000000)
- printf(" -External Bus is always driven\n");
-
- if (ul1 & 0x400000)
- printf(" -CS signals are always driven\n");
-
- if (ul1 & 0x20000)
- printf(" -PowerDown after %lu clocks\n",
- (ul1 & 0x1F000) >> 7);
-
- switch (ul1 & 0xC0000)
- {
- case 0xC0000:
- printf(" -No external master present\n");
- break;
- case 0x00000:
- printf(" -8 bit external master present\n");
- break;
- case 0x40000:
- printf(" -16 bit external master present\n");
- break;
- case 0x80000:
- printf(" -32 bit external master present\n");
- break;
- }
-
- switch (ul1 & 0x300000)
- {
- case 0x300000:
- printf(" -Prefetch: Illegal setting!\n");
- break;
- case 0x000000:
- printf(" -1 doubleword prefetch\n");
- break;
- case 0x100000:
- printf(" -2 doublewords prefetch\n");
- break;
- case 0x200000:
- printf(" -4 doublewords prefetch\n");
- break;
- }
- putc ('\n');
-#endif
- printf("Board: SolidCard III %s %s version.\n",
- (IS_CAMERON ? "Cameron" : "Eurodesign"), CONFIG_SC3_VERSION);
- return 0;
-}
-
-static int printSDRAMConfig(char reg, unsigned long cr)
-{
- const int bisize[8]={4, 8, 16, 32, 64, 128, 256, 0};
-#ifdef SC3_DEBUGOUT
- const char *basize[8]=
- {"4", "8", "16", "32", "64", "128", "256", "Reserved"};
-
- printf("SDRAM bank %d",reg);
-
- if (!(cr & 0x01))
- puts(" disabled\n");
- else {
- printf(" at 0x%08lX, size %s MB",cr & 0xFFC00000,basize[(cr&0xE0000)>>17]);
- printf(" mode %lu\n",((cr & 0xE000)>>13)+1);
- }
-#endif
-
- if (cr & 0x01)
- return(bisize[(cr & 0xE0000) >> 17]);
-
- return 0;
-}
-
-#ifdef SC3_DEBUGOUT
-static unsigned int mbcf[] = {mem_mb0cf, mem_mb1cf, mem_mb2cf, mem_mb3cf};
-#endif
-
-phys_size_t initdram (int board_type)
-{
- unsigned int mems=0;
- unsigned long ul1;
-
-#ifdef SC3_DEBUGOUT
- unsigned long ul2;
- int i;
-
- puts("\nSDRAM configuration:\n");
-
- mtdcr (memcfga, mem_mcopt1);
- ul1 = mfdcr(memcfgd);
-
- if (!(ul1 & 0x80000000)) {
- puts(" Controller disabled\n");
- return 0;
- }
- for (i = 0; i < 4; i++) {
- mtdcr (memcfga, mbcf[i]);
- ul1 = mfdcr (memcfgd);
- mems += printSDRAMConfig (i, ul1);
- }
-
- mtdcr (memcfga, mem_sdtr1);
- ul1 = mfdcr(memcfgd);
-
- printf ("Timing:\n -CAS latency %lu\n", ((ul1 & 0x1800000) >> 23)+1);
- printf (" -Precharge %lu (PTA) \n", ((ul1 & 0xC0000) >> 18) + 1);
- printf (" -R/W to Precharge %lu (CTP)\n", ((ul1 & 0x30000) >> 16) + 1);
- printf (" -Leadoff %lu\n", ((ul1 & 0xC000) >> 14) + 1);
- printf (" -CAS to RAS %lu\n", ((ul1 & 0x1C) >> 2) + 4);
- printf (" -RAS to CAS %lu\n", ((ul1 & 0x3) + 1));
- puts ("Misc:\n");
- mtdcr (memcfga, mem_rtr);
- ul1 = mfdcr(memcfgd);
- printf (" -Refresh rate: %luns\n", (ul1 >> 16) * 7);
-
- mtdcr(memcfga,mem_pmit);
- ul2=mfdcr(memcfgd);
-
- mtdcr(memcfga,mem_mcopt1);
- ul1=mfdcr(memcfgd);
-
- if (ul1 & 0x20000000)
- printf(" -Power Down after: %luns\n",
- ((ul2 & 0xFFC00000) >> 22) * 7);
- else
- puts(" -Power Down disabled\n");
-
- if (ul1 & 0x40000000)
- printf(" -Self refresh feature active\n");
- else
- puts(" -Self refresh disabled\n");
-
- if (ul1 & 0x10000000)
- puts(" -ECC enabled\n");
- else
- puts(" -ECC disabled\n");
-
- if (ul1 & 0x8000000)
- puts(" -Using registered SDRAM\n");
-
- if (!(ul1 & 0x6000000))
- puts(" -Using 32 bit data width\n");
- else
- puts(" -Illegal data width!\n");
-
- if (ul1 & 0x400000)
- puts(" -ECC drivers inactive\n");
- else
- puts(" -ECC drivers active\n");
-
- if (ul1 & 0x200000)
- puts(" -Memory lines always active outputs\n");
- else
- puts(" -Memory lines only at write cycles active outputs\n");
-
- mtdcr (memcfga, mem_status);
- ul1 = mfdcr (memcfgd);
- if (ul1 & 0x80000000)
- puts(" -SDRAM Controller ready\n");
- else
- puts(" -SDRAM Controller not ready\n");
-
- if (ul1 & 0x4000000)
- puts(" -SDRAM in self refresh mode!\n");
-
- return (mems * 1024 * 1024);
-#else
- mtdcr (memcfga, mem_mb0cf);
- ul1 = mfdcr (memcfgd);
- mems = printSDRAMConfig (0, ul1);
-
- mtdcr (memcfga, mem_mb1cf);
- ul1 = mfdcr (memcfgd);
- mems += printSDRAMConfig (1, ul1);
-
- mtdcr (memcfga, mem_mb2cf);
- ul1 = mfdcr(memcfgd);
- mems += printSDRAMConfig (2, ul1);
-
- mtdcr (memcfga, mem_mb3cf);
- ul1 = mfdcr(memcfgd);
- mems += printSDRAMConfig (3, ul1);
-
- return (mems * 1024 * 1024);
-#endif
-}
-
-static void pci_solidcard3_fixup_irq (struct pci_controller *hose, pci_dev_t dev)
-{
-/*-------------------------------------------------------------------------+
- | ,-. ,-. ,-. ,-. ,-.
- | INTD# ----|B|-----|P|-. ,-|P|-. ,-| |-. ,-|G|
- | |R| |C| \ / |C| \ / |E| \ / |r|
- | INTC# ----|I|-----|1|-. `/---|1|-. `/---|t|-. `/---|a|
- | |D| |0| \/ |0| \/ |h| \/ |f|
- | INTB# ----|G|-----|4|-./`----|4|-./`----|e|-./`----|i|
- | |E| |+| /\ |+| /\ |r| /\ |k|
- | INTA# ----| |-----| |- `----| |- `----| |- `----| |
- | `-' `-' `-' `-' `-'
- | Slot 0 10 11 12 13
- | REQ# 0 1 2 *
- | GNT# 0 1 2 *
- +-------------------------------------------------------------------------*/
- unsigned char int_line = 0xff;
-
- switch (PCI_DEV(dev)) {
- case 10:
- int_line = 31; /* INT A */
- POST_OUT(0x42);
- break;
-
- case 11:
- int_line = 30; /* INT B */
- POST_OUT(0x43);
- break;
-
- case 12:
- int_line = 29; /* INT C */
- POST_OUT(0x44);
- break;
-
- case 13:
- int_line = 28; /* INT D */
- POST_OUT(0x45);
- break;
- }
- pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line);
-}
-
-extern void pci_405gp_init(struct pci_controller *hose);
-extern void pci_405gp_fixup_irq(struct pci_controller *hose, pci_dev_t dev);
-extern void pci_405gp_setup_bridge(struct pci_controller *hose, pci_dev_t dev,struct pci_config_table *entry);
-/*
- * The following table is used when there is a special need to setup a PCI device.
- * For every PCI device found in this table is called the given init function with given
- * parameters. So never let all IDs at PCI_ANY_ID. In this case any found device gets the same
- * parameters!
- *
-*/
-static struct pci_config_table pci_solidcard3_config_table[] =
-{
-/* Host to PCI Bridge device (405GP) */
- {
- vendor: 0x1014,
- device: 0x0156,
- class: PCI_CLASS_BRIDGE_HOST,
- bus: 0,
- dev: 0,
- func: 0,
- config_device: pci_405gp_setup_bridge
- },
- { }
-};
-
-/*-------------------------------------------------------------------------+
- | pci_init_board (Called from pci_init() in drivers/pci/pci.c)
- |
- | Init the PCI part of the SolidCard III
- |
- | Params:
- * - Pointer to current PCI hose
- * - Current Device
- *
- * Returns
- * nothing
- +-------------------------------------------------------------------------*/
-
-void pci_init_board(void)
-{
- POST_OUT(0x41);
-/*
- * we want the ptrs to RAM not flash (ie don't use init list)
- */
- hose.fixup_irq = pci_solidcard3_fixup_irq;
- hose.config_table = pci_solidcard3_config_table;
- pci_405gp_init(&hose);
-}
-
-int board_eth_init(bd_t *bis)
-{
- return pci_eth_init(bis);
-}
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, <hs@denx.de>.
+ *
+ * (C) Copyright 2003
+ * Juergen Beisert, EuroDesign embedded technologies, info@eurodsn.de
+ * Derived from walnut.c
+ *
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ *
+ * $Log: sc3.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:21:51 kenagy
+ * no message
+ *
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include "sc3.h"
+#include <pci.h>
+#include <i2c.h>
+#include <malloc.h>
+#include <netdev.h>
+
+#undef writel
+#undef writeb
+#define writeb(b,addr) ((*(volatile u8 *) (addr)) = (b))
+#define writel(b,addr) ((*(volatile u32 *) (addr)) = (b))
+
+/* write only register to configure things in our CPLD */
+#define CPLD_CONTROL_1 0x79000102
+#define CPLD_VERSION 0x79000103
+
+#define IS_CAMERON ((*(unsigned char *)(CPLD_VERSION)== 0x32) ? 1 : 0)
+
+static struct pci_controller hose={0,};
+
+/************************************************************
+ * Standard definition
+ ************************************************************/
+
+/* CPC0_CR0 Function ISA bus
+ - GPIO0
+ - GPIO1 -> Output: NAND-Command Latch Enable
+ - GPIO2 -> Output: NAND Address Latch Enable
+ - GPIO3 -> IRQ input ISA-IRQ #5 (through CPLD)
+ - GPIO4 -> Output: NAND-Chip Enable
+ - GPIO5 -> IRQ input ISA-IRQ#7 (through CPLD)
+ - GPIO6 -> IRQ input ISA-IRQ#9 (through CPLD)
+ - GPIO7 -> IRQ input ISA-IRQ#10 (through CPLD)
+ - GPIO8 -> IRQ input ISA-IRQ#11 (through CPLD)
+ - GPIO9 -> IRQ input ISA-IRQ#12 (through CPLD)
+ - GPIO10/CS1# -> CS1# NAND ISA-CS#0
+ - GPIO11/CS2# -> CS2# ISA emulation ISA-CS#1
+ - GPIO12/CS3# -> CS3# 2nd Flash-Bank ISA-CS#2 or ISA-CS#7
+ - GPIO13/CS4# -> CS4# USB HC or ISA emulation ISA-CS#3
+ - GPIO14/CS5# -> CS5# Boosted IDE access ISA-CS#4
+ - GPIO15/CS6# -> CS6# ISA emulation ISA-CS#5
+ - GPIO16/CS7# -> CS7# ISA emulation ISA-CS#6
+ - GPIO17/IRQ0 -> GPIO, in, NAND-Ready/Busy# line ISA-IRQ#3
+ - GPIO18/IRQ1 -> IRQ input ISA-IRQ#14
+ - GPIO19/IRQ2 -> IRQ input or USB ISA-IRQ#4
+ - GPIO20/IRQ3 -> IRQ input PCI-IRQ#D
+ - GPIO21/IRQ4 -> IRQ input PCI-IRQ#C
+ - GPIO22/IRQ5 -> IRQ input PCI-IRQ#B
+ - GPIO23/IRQ6 -> IRQ input PCI-IRQ#A
+ - GPIO24 -> if GPIO output: 0=JTAG CPLD activ, 1=JTAG CPLD inactiv
+*/
+/*
+| CPLD register: io-space at offset 0x102 (write only)
+| 0
+| 1
+| 2 0=CS#4 USB CS#, 1=ISA or GP bus
+| 3
+| 4
+| 5
+| 6 1=enable faster IDE access
+| 7
+*/
+#define USB_CHIP_ENABLE 0x04
+#define IDE_BOOSTING 0x40
+
+/* --------------- USB stuff ------------------------------------- */
+#ifdef CONFIG_ISP1161_PRESENT
+/**
+ * initUsbHost- Initialize the Philips isp1161 HC part if present
+ * @cpldConfig: Pointer to value in write only CPLD register
+ *
+ * Initialize the USB host controller if present and fills the
+ * scratch register to inform the driver about used resources
+ */
+
+static void initUsbHost (unsigned char *cpldConfig)
+{
+ int i;
+ unsigned long usbBase;
+ /*
+ * Read back where init.S has located the USB chip
+ */
+ mtdcr (0x012, 0x04);
+ usbBase = mfdcr (0x013);
+ if (!(usbBase & 0x18000)) /* enabled? */
+ return;
+ usbBase &= 0xFFF00000;
+
+ /*
+ * to test for the USB controller enable using of CS#4 and DMA 3 for USB access
+ */
+ writeb (*cpldConfig | USB_CHIP_ENABLE,CPLD_CONTROL_1);
+
+ /*
+ * first check: is the controller assembled?
+ */
+ hcWriteWord (usbBase, 0x5555, HcScratch);
+ if (hcReadWord (usbBase, HcScratch) == 0x5555) {
+ hcWriteWord (usbBase, 0xAAAA, HcScratch);
+ if (hcReadWord (usbBase, HcScratch) == 0xAAAA) {
+ if ((hcReadWord (usbBase, HcChipID) & 0xFF00) != 0x6100)
+ return; /* this is not our controller */
+ /*
+ * try a software reset. This needs up to 10 seconds (see datasheet)
+ */
+ hcWriteDWord (usbBase, 0x00000001, HcCommandStatus);
+ for (i = 1000; i > 0; i--) { /* loop up to 10 seconds */
+ udelay (10);
+ if (!(hcReadDWord (usbBase, HcCommandStatus) & 0x01))
+ break;
+ }
+
+ if (!i)
+ return; /* the controller doesn't responding. Broken? */
+ /*
+ * OK. USB controller is ready. Initialize it in such way the later driver
+ * can us it (without any knowing about specific implementation)
+ */
+ hcWriteDWord (usbBase, 0x00000000, HcControl);
+ /*
+ * disable all interrupt sources. Because we
+ * don't know where we come from (hard reset, cold start, soft reset...)
+ */
+ hcWriteDWord (usbBase, 0x8000007D, HcInterruptDisable);
+ /*
+ * our current setup hardware configuration
+ * - every port power supply can switched indepently
+ * - every port can signal overcurrent
+ * - every port is "outside" and the devices are removeable
+ */
+ hcWriteDWord (usbBase, 0x32000902, HcRhDescriptorA);
+ hcWriteDWord (usbBase, 0x00060000, HcRhDescriptorB);
+ /*
+ * don't forget to switch off power supply of each port
+ * The later running driver can reenable them to find and use
+ * the (maybe) connected devices.
+ *
+ */
+ hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus1);
+ hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus2);
+ hcWriteWord (usbBase, 0x0428, HcHardwareConfiguration);
+ hcWriteWord (usbBase, 0x0040, HcDMAConfiguration);
+ hcWriteWord (usbBase, 0x0000, HcuPInterruptEnable);
+ hcWriteWord (usbBase, 0xA000 | (0x03 << 8) | 27, HcScratch);
+ /*
+ * controller is present and usable
+ */
+ *cpldConfig |= USB_CHIP_ENABLE;
+ }
+ }
+}
+#endif
+
+#if defined(CONFIG_START_IDE)
+int board_start_ide(void)
+{
+ if (IS_CAMERON) {
+ puts ("no IDE on cameron board.\n");
+ return 0;
+ }
+ return 1;
+}
+#endif
+
+static int sc3_cameron_init (void)
+{
+ /* Set up the Memory Controller for the CAMERON version */
+ mtebc (pb4ap, 0x01805940);
+ mtebc (pb4cr, 0x7401a000);
+ mtebc (pb5ap, 0x01805940);
+ mtebc (pb5cr, 0x7401a000);
+ mtebc (pb6ap, 0x0);
+ mtebc (pb6cr, 0x0);
+ mtebc (pb7ap, 0x0);
+ mtebc (pb7cr, 0x0);
+ return 0;
+}
+
+void sc3_read_eeprom (void)
+{
+ uchar i2c_buffer[18];
+
+ i2c_read (0x50, 0x03, 1, i2c_buffer, 9);
+ i2c_buffer[9] = 0;
+ setenv ("serial#", (char *)i2c_buffer);
+
+ /* read mac-address from eeprom */
+ i2c_read (0x50, 0x11, 1, i2c_buffer, 15);
+ i2c_buffer[17] = 0;
+ i2c_buffer[16] = i2c_buffer[14];
+ i2c_buffer[15] = i2c_buffer[13];
+ i2c_buffer[14] = ':';
+ i2c_buffer[13] = i2c_buffer[12];
+ i2c_buffer[12] = i2c_buffer[11];
+ i2c_buffer[11] = ':';
+ i2c_buffer[8] = ':';
+ i2c_buffer[5] = ':';
+ i2c_buffer[2] = ':';
+ setenv ("ethaddr", (char *)i2c_buffer);
+}
+
+int board_early_init_f (void)
+{
+ /* write only register to configure things in our CPLD */
+ unsigned char cpldConfig_1=0x00;
+
+/*-------------------------------------------------------------------------+
+| Interrupt controller setup for the SolidCard III CPU card (plus Evaluation board).
+|
+| Note: IRQ 0 UART 0, active high; level sensitive
+| IRQ 1 UART 1, active high; level sensitive
+| IRQ 2 IIC, active high; level sensitive
+| IRQ 3 Ext. master, rising edge, edge sensitive
+| IRQ 4 PCI, active high; level sensitive
+| IRQ 5 DMA Channel 0, active high; level sensitive
+| IRQ 6 DMA Channel 1, active high; level sensitive
+| IRQ 7 DMA Channel 2, active high; level sensitive
+| IRQ 8 DMA Channel 3, active high; level sensitive
+| IRQ 9 Ethernet Wakeup, active high; level sensitive
+| IRQ 10 MAL System Error (SERR), active high; level sensitive
+| IRQ 11 MAL Tx End of Buffer, active high; level sensitive
+| IRQ 12 MAL Rx End of Buffer, active high; level sensitive
+| IRQ 13 MAL Tx Descriptor Error, active high; level sensitive
+| IRQ 14 MAL Rx Descriptor Error, active high; level sensitive
+| IRQ 15 Ethernet, active high; level sensitive
+| IRQ 16 External PCI SERR, active high; level sensitive
+| IRQ 17 ECC Correctable Error, active high; level sensitive
+| IRQ 18 PCI Power Management, active high; level sensitive
+|
+| IRQ 19 (EXT IRQ7 405GPr only)
+| IRQ 20 (EXT IRQ8 405GPr only)
+| IRQ 21 (EXT IRQ9 405GPr only)
+| IRQ 22 (EXT IRQ10 405GPr only)
+| IRQ 23 (EXT IRQ11 405GPr only)
+| IRQ 24 (EXT IRQ12 405GPr only)
+|
+| IRQ 25 (EXT IRQ 0) NAND-Flash R/B# (raising edge means flash is ready)
+| IRQ 26 (EXT IRQ 1) IDE0 interrupt (x86 = IRQ14). Active high (edge sensitive)
+| IRQ 27 (EXT IRQ 2) USB controller
+| IRQ 28 (EXT IRQ 3) INT D, VGA; active low; level sensitive
+| IRQ 29 (EXT IRQ 4) INT C, Ethernet; active low; level sensitive
+| IRQ 30 (EXT IRQ 5) INT B, PC104+ SLOT; active low; level sensitive
+| IRQ 31 (EXT IRQ 6) INT A, PC104+ SLOT; active low; level sensitive
+|
+| Direct Memory Access Controller Signal Polarities
+| DRQ0 active high (like ISA)
+| ACK0 active low (like ISA)
+| EOT0 active high (like ISA)
+| DRQ1 active high (like ISA)
+| ACK1 active low (like ISA)
+| EOT1 active high (like ISA)
+| DRQ2 active high (like ISA)
+| ACK2 active low (like ISA)
+| EOT2 active high (like ISA)
+| DRQ3 active high (like ISA)
+| ACK3 active low (like ISA)
+| EOT3 active high (like ISA)
+|
++-------------------------------------------------------------------------*/
+
+ writeb (cpldConfig_1, CPLD_CONTROL_1); /* disable everything in CPLD */
+
+ mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
+ mtdcr (uicer, 0x00000000); /* disable all ints */
+ mtdcr (uiccr, 0x00000000); /* set all to be non-critical */
+
+ if (IS_CAMERON) {
+ sc3_cameron_init();
+ mtdcr (0x0B6, 0x18000000);
+ mtdcr (uicpr, 0xFFFFFFF0);
+ mtdcr (uictr, 0x10001030);
+ } else {
+ mtdcr (0x0B6, 0x0000000);
+ mtdcr (uicpr, 0xFFFFFFE0);
+ mtdcr (uictr, 0x10000020);
+ }
+ mtdcr (uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority */
+ mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
+
+ /* setup other implementation specific details */
+ mtdcr (ecr, 0x60606000);
+
+ mtdcr (cntrl1, 0x000042C0);
+
+ if (IS_CAMERON) {
+ mtdcr (cntrl0, 0x01380000);
+ /* Setup the GPIOs */
+ writel (0x08008000, 0xEF600700); /* Output states */
+ writel (0x00000000, 0xEF600718); /* Open Drain control */
+ writel (0x68098000, 0xEF600704); /* Output control */
+ } else {
+ mtdcr (cntrl0,0x00080000);
+ /* Setup the GPIOs */
+ writel (0x08000000, 0xEF600700); /* Output states */
+ writel (0x14000000, 0xEF600718); /* Open Drain control */
+ writel (0x7C000000, 0xEF600704); /* Output control */
+ }
+
+ /* Code decompression disabled */
+ mtdcr (kiar, kconf);
+ mtdcr (kidr, 0x2B);
+
+ /* CPC0_ER: enable sleep mode of (currently) unused components */
+ /* CPC0_FR: force unused components into sleep mode */
+ mtdcr (cpmer, 0x3F800000);
+ mtdcr (cpmfr, 0x14000000);
+
+ /* set PLB priority */
+ mtdcr (0x87, 0x08000000);
+
+ /* --------------- DMA stuff ------------------------------------- */
+ mtdcr (0x126, 0x49200000);
+
+#ifndef IDE_USES_ISA_EMULATION
+ cpldConfig_1 |= IDE_BOOSTING; /* enable faster IDE */
+ /* cpldConfig |= 0x01; */ /* enable 8.33MHz output, if *not* present on your baseboard */
+ writeb (cpldConfig_1, CPLD_CONTROL_1);
+#endif
+
+#ifdef CONFIG_ISP1161_PRESENT
+ initUsbHost (&cpldConfig_1);
+ writeb (cpldConfig_1, CPLD_CONTROL_1);
+#endif
+ /* FIXME: for what must we do this */
+ *(unsigned long *)0x79000080 = 0x0001;
+ return(0);
+}
+
+int misc_init_r (void)
+{
+ char *s1;
+ int i, xilinx_val;
+ volatile char *xilinx_adr;
+ xilinx_adr = (char *)0x79000102;
+
+ *xilinx_adr = 0x00;
+
+/* customer settings ***************************************** */
+/*
+ s1 = getenv ("function");
+ if (s1) {
+ if (!strcmp (s1, "Rosho")) {
+ printf ("function 'Rosho' activated\n");
+ *xilinx_adr = 0x40;
+ }
+ else {
+ printf (">>>>>>>>>> function %s not recognized\n",s1);
+ }
+ }
+*/
+
+/* individual settings ***************************************** */
+ if ((s1 = getenv ("xilinx"))) {
+ i=0;
+ xilinx_val = 0;
+ while (i < 3 && s1[i]) {
+ if (s1[i] >= '0' && s1[i] <= '9')
+ xilinx_val = (xilinx_val << 4) + s1[i] - '0';
+ else
+ if (s1[i] >= 'A' && s1[i] <= 'F')
+ xilinx_val = (xilinx_val << 4) + s1[i] - 'A' + 10;
+ else
+ if (s1[i] >= 'a' && s1[i] <= 'f')
+ xilinx_val = (xilinx_val << 4) + s1[i] - 'a' + 10;
+ else {
+ xilinx_val = -1;
+ break;
+ }
+ i++;
+ }
+ if (xilinx_val >= 0 && xilinx_val <=255 && i < 3) {
+ printf ("Xilinx: set to %s\n", s1);
+ *xilinx_adr = (unsigned char) xilinx_val;
+ } else
+ printf ("Xilinx: rejected value %s\n", s1);
+ }
+ return 0;
+}
+
+/* -------------------------------------------------------------------------
+ * printCSConfig
+ *
+ * Print some informations about chips select configurations
+ * Only used while debugging.
+ *
+ * Params:
+ * - No. of CS pin
+ * - AP of this CS
+ * - CR of this CS
+ *
+ * Returns
+ * nothing
+ ------------------------------------------------------------------------- */
+
+#ifdef SC3_DEBUGOUT
+static void printCSConfig(int reg,unsigned long ap,unsigned long cr)
+{
+ const char *bsize[4] = {"8","16","32","?"};
+ const unsigned char banks[8] = {1, 2, 4, 8, 16, 32, 64, 128};
+ const char *bankaccess[4] = {"disabled", "RO", "WO", "RW"};
+
+#define CYCLE 30 /* time of one clock (based on 33MHz) */
+
+ printf("\nCS#%d",reg);
+ if (!(cr & 0x00018000))
+ puts(" unused");
+ else {
+ if (((cr&0xFFF00000U) & ((banks[(cr & 0x000E0000) >> 17]-1) << 20)))
+ puts(" Address is not multiple of bank size!");
+
+ printf("\n -%s bit device",
+ bsize[(cr & 0x00006000) >> 13]);
+ printf(" at 0x%08lX", cr & 0xFFF00000U);
+ printf(" size: %u MB", banks[(cr & 0x000E0000) >> 17]);
+ printf(" rights: %s", bankaccess[(cr & 0x00018000) >> 15]);
+ if (ap & 0x80000000) {
+ printf("\n -Burst device (%luns/%luns)",
+ (((ap & 0x7C000000) >> 26) + 1) * CYCLE,
+ (((ap & 0x03800000) >> 23) + 1) * CYCLE);
+ } else {
+ printf("\n -Non burst device, active cycle %luns",
+ (((ap & 0x7F800000) >> 23) + 1) * CYCLE);
+ printf("\n -Address setup %luns",
+ ((ap & 0xC0000) >> 18) * CYCLE);
+ printf("\n -CS active to RD %luns/WR %luns",
+ ((ap & 0x30000) >> 16) * CYCLE,
+ ((ap & 0xC000) >> 14) * CYCLE);
+ printf("\n -WR to CS inactive %luns",
+ ((ap & 0x3000) >> 12) * CYCLE);
+ printf("\n -Hold after access %luns",
+ ((ap & 0xE00) >> 9) * CYCLE);
+ printf("\n -Ready is %sabled",
+ ap & 0x100 ? "en" : "dis");
+ }
+ }
+}
+#endif
+
+#ifdef SC3_DEBUGOUT
+
+static unsigned int ap[] = {pb0ap, pb1ap, pb2ap, pb3ap, pb4ap,
+ pb5ap, pb6ap, pb7ap};
+static unsigned int cr[] = {pb0cr, pb1cr, pb2cr, pb3cr, pb4cr,
+ pb5cr, pb6cr, pb7cr};
+
+static int show_reg (int nr)
+{
+ unsigned long ul1, ul2;
+
+ mtdcr (ebccfga, ap[nr]);
+ ul1 = mfdcr (ebccfgd);
+ mtdcr (ebccfga, cr[nr]);
+ ul2 = mfdcr(ebccfgd);
+ printCSConfig(nr, ul1, ul2);
+ return 0;
+}
+#endif
+
+int checkboard (void)
+{
+#ifdef SC3_DEBUGOUT
+ unsigned long ul1;
+ int i;
+
+ for (i = 0; i < 8; i++) {
+ show_reg (i);
+ }
+
+ mtdcr (ebccfga, epcr);
+ ul1 = mfdcr (ebccfgd);
+
+ puts ("\nGeneral configuration:\n");
+
+ if (ul1 & 0x80000000)
+ printf(" -External Bus is always driven\n");
+
+ if (ul1 & 0x400000)
+ printf(" -CS signals are always driven\n");
+
+ if (ul1 & 0x20000)
+ printf(" -PowerDown after %lu clocks\n",
+ (ul1 & 0x1F000) >> 7);
+
+ switch (ul1 & 0xC0000)
+ {
+ case 0xC0000:
+ printf(" -No external master present\n");
+ break;
+ case 0x00000:
+ printf(" -8 bit external master present\n");
+ break;
+ case 0x40000:
+ printf(" -16 bit external master present\n");
+ break;
+ case 0x80000:
+ printf(" -32 bit external master present\n");
+ break;
+ }
+
+ switch (ul1 & 0x300000)
+ {
+ case 0x300000:
+ printf(" -Prefetch: Illegal setting!\n");
+ break;
+ case 0x000000:
+ printf(" -1 doubleword prefetch\n");
+ break;
+ case 0x100000:
+ printf(" -2 doublewords prefetch\n");
+ break;
+ case 0x200000:
+ printf(" -4 doublewords prefetch\n");
+ break;
+ }
+ putc ('\n');
+#endif
+ printf("Board: SolidCard III %s %s version.\n",
+ (IS_CAMERON ? "Cameron" : "Eurodesign"), CONFIG_SC3_VERSION);
+ return 0;
+}
+
+static int printSDRAMConfig(char reg, unsigned long cr)
+{
+ const int bisize[8]={4, 8, 16, 32, 64, 128, 256, 0};
+#ifdef SC3_DEBUGOUT
+ const char *basize[8]=
+ {"4", "8", "16", "32", "64", "128", "256", "Reserved"};
+
+ printf("SDRAM bank %d",reg);
+
+ if (!(cr & 0x01))
+ puts(" disabled\n");
+ else {
+ printf(" at 0x%08lX, size %s MB",cr & 0xFFC00000,basize[(cr&0xE0000)>>17]);
+ printf(" mode %lu\n",((cr & 0xE000)>>13)+1);
+ }
+#endif
+
+ if (cr & 0x01)
+ return(bisize[(cr & 0xE0000) >> 17]);
+
+ return 0;
+}
+
+#ifdef SC3_DEBUGOUT
+static unsigned int mbcf[] = {mem_mb0cf, mem_mb1cf, mem_mb2cf, mem_mb3cf};
+#endif
+
+phys_size_t initdram (int board_type)
+{
+ unsigned int mems=0;
+ unsigned long ul1;
+
+#ifdef SC3_DEBUGOUT
+ unsigned long ul2;
+ int i;
+
+ puts("\nSDRAM configuration:\n");
+
+ mtdcr (memcfga, mem_mcopt1);
+ ul1 = mfdcr(memcfgd);
+
+ if (!(ul1 & 0x80000000)) {
+ puts(" Controller disabled\n");
+ return 0;
+ }
+ for (i = 0; i < 4; i++) {
+ mtdcr (memcfga, mbcf[i]);
+ ul1 = mfdcr (memcfgd);
+ mems += printSDRAMConfig (i, ul1);
+ }
+
+ mtdcr (memcfga, mem_sdtr1);
+ ul1 = mfdcr(memcfgd);
+
+ printf ("Timing:\n -CAS latency %lu\n", ((ul1 & 0x1800000) >> 23)+1);
+ printf (" -Precharge %lu (PTA) \n", ((ul1 & 0xC0000) >> 18) + 1);
+ printf (" -R/W to Precharge %lu (CTP)\n", ((ul1 & 0x30000) >> 16) + 1);
+ printf (" -Leadoff %lu\n", ((ul1 & 0xC000) >> 14) + 1);
+ printf (" -CAS to RAS %lu\n", ((ul1 & 0x1C) >> 2) + 4);
+ printf (" -RAS to CAS %lu\n", ((ul1 & 0x3) + 1));
+ puts ("Misc:\n");
+ mtdcr (memcfga, mem_rtr);
+ ul1 = mfdcr(memcfgd);
+ printf (" -Refresh rate: %luns\n", (ul1 >> 16) * 7);
+
+ mtdcr(memcfga,mem_pmit);
+ ul2=mfdcr(memcfgd);
+
+ mtdcr(memcfga,mem_mcopt1);
+ ul1=mfdcr(memcfgd);
+
+ if (ul1 & 0x20000000)
+ printf(" -Power Down after: %luns\n",
+ ((ul2 & 0xFFC00000) >> 22) * 7);
+ else
+ puts(" -Power Down disabled\n");
+
+ if (ul1 & 0x40000000)
+ printf(" -Self refresh feature active\n");
+ else
+ puts(" -Self refresh disabled\n");
+
+ if (ul1 & 0x10000000)
+ puts(" -ECC enabled\n");
+ else
+ puts(" -ECC disabled\n");
+
+ if (ul1 & 0x8000000)
+ puts(" -Using registered SDRAM\n");
+
+ if (!(ul1 & 0x6000000))
+ puts(" -Using 32 bit data width\n");
+ else
+ puts(" -Illegal data width!\n");
+
+ if (ul1 & 0x400000)
+ puts(" -ECC drivers inactive\n");
+ else
+ puts(" -ECC drivers active\n");
+
+ if (ul1 & 0x200000)
+ puts(" -Memory lines always active outputs\n");
+ else
+ puts(" -Memory lines only at write cycles active outputs\n");
+
+ mtdcr (memcfga, mem_status);
+ ul1 = mfdcr (memcfgd);
+ if (ul1 & 0x80000000)
+ puts(" -SDRAM Controller ready\n");
+ else
+ puts(" -SDRAM Controller not ready\n");
+
+ if (ul1 & 0x4000000)
+ puts(" -SDRAM in self refresh mode!\n");
+
+ return (mems * 1024 * 1024);
+#else
+ mtdcr (memcfga, mem_mb0cf);
+ ul1 = mfdcr (memcfgd);
+ mems = printSDRAMConfig (0, ul1);
+
+ mtdcr (memcfga, mem_mb1cf);
+ ul1 = mfdcr (memcfgd);
+ mems += printSDRAMConfig (1, ul1);
+
+ mtdcr (memcfga, mem_mb2cf);
+ ul1 = mfdcr(memcfgd);
+ mems += printSDRAMConfig (2, ul1);
+
+ mtdcr (memcfga, mem_mb3cf);
+ ul1 = mfdcr(memcfgd);
+ mems += printSDRAMConfig (3, ul1);
+
+ return (mems * 1024 * 1024);
+#endif
+}
+
+static void pci_solidcard3_fixup_irq (struct pci_controller *hose, pci_dev_t dev)
+{
+/*-------------------------------------------------------------------------+
+ | ,-. ,-. ,-. ,-. ,-.
+ | INTD# ----|B|-----|P|-. ,-|P|-. ,-| |-. ,-|G|
+ | |R| |C| \ / |C| \ / |E| \ / |r|
+ | INTC# ----|I|-----|1|-. `/---|1|-. `/---|t|-. `/---|a|
+ | |D| |0| \/ |0| \/ |h| \/ |f|
+ | INTB# ----|G|-----|4|-./`----|4|-./`----|e|-./`----|i|
+ | |E| |+| /\ |+| /\ |r| /\ |k|
+ | INTA# ----| |-----| |- `----| |- `----| |- `----| |
+ | `-' `-' `-' `-' `-'
+ | Slot 0 10 11 12 13
+ | REQ# 0 1 2 *
+ | GNT# 0 1 2 *
+ +-------------------------------------------------------------------------*/
+ unsigned char int_line = 0xff;
+
+ switch (PCI_DEV(dev)) {
+ case 10:
+ int_line = 31; /* INT A */
+ POST_OUT(0x42);
+ break;
+
+ case 11:
+ int_line = 30; /* INT B */
+ POST_OUT(0x43);
+ break;
+
+ case 12:
+ int_line = 29; /* INT C */
+ POST_OUT(0x44);
+ break;
+
+ case 13:
+ int_line = 28; /* INT D */
+ POST_OUT(0x45);
+ break;
+ }
+ pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line);
+}
+
+extern void pci_405gp_init(struct pci_controller *hose);
+extern void pci_405gp_fixup_irq(struct pci_controller *hose, pci_dev_t dev);
+extern void pci_405gp_setup_bridge(struct pci_controller *hose, pci_dev_t dev,struct pci_config_table *entry);
+/*
+ * The following table is used when there is a special need to setup a PCI device.
+ * For every PCI device found in this table is called the given init function with given
+ * parameters. So never let all IDs at PCI_ANY_ID. In this case any found device gets the same
+ * parameters!
+ *
+*/
+static struct pci_config_table pci_solidcard3_config_table[] =
+{
+/* Host to PCI Bridge device (405GP) */
+ {
+ vendor: 0x1014,
+ device: 0x0156,
+ class: PCI_CLASS_BRIDGE_HOST,
+ bus: 0,
+ dev: 0,
+ func: 0,
+ config_device: pci_405gp_setup_bridge
+ },
+ { }
+};
+
+/*-------------------------------------------------------------------------+
+ | pci_init_board (Called from pci_init() in drivers/pci/pci.c)
+ |
+ | Init the PCI part of the SolidCard III
+ |
+ | Params:
+ * - Pointer to current PCI hose
+ * - Current Device
+ *
+ * Returns
+ * nothing
+ +-------------------------------------------------------------------------*/
+
+void pci_init_board(void)
+{
+ POST_OUT(0x41);
+/*
+ * we want the ptrs to RAM not flash (ie don't use init list)
+ */
+ hose.fixup_irq = pci_solidcard3_fixup_irq;
+ hose.config_table = pci_solidcard3_config_table;
+ pci_405gp_init(&hose);
+}
+
+int board_eth_init(bd_t *bis)
+{
+ return pci_eth_init(bis);
+}
diff -Naur u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries u-boot-2009.03/board/sc520_cdp/CVS/Entries
--- u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_cdp/CVS/Entries 2009-03-25 15:57:45.715612600 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash_old.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_cdp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_cdp_asm.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_cdp_asm16.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries.Extra u-boot-2009.03/board/sc520_cdp/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_cdp/CVS/Entries.Extra 2009-03-25 15:57:45.715612600 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/flash_old.c///1238019711/
+/sc520_cdp.c///1238019711/
+/sc520_cdp_asm.S///1238019711/
+/sc520_cdp_asm16.S///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries.Extra.Old u-boot-2009.03/board/sc520_cdp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_cdp/CVS/Entries.Extra.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/flash_old.c///1238019711/
+/sc520_cdp.c///1238019711/
+/sc520_cdp_asm.S///1238019711/
+/sc520_cdp_asm16.S///1238019711/
+/u-boot.lds///1238019711/
diff -Naur u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries.Old u-boot-2009.03/board/sc520_cdp/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sc520_cdp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_cdp/CVS/Entries.Old 2009-03-25 15:24:58.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/flash_old.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sc520_cdp.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sc520_cdp_asm.S/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sc520_cdp_asm16.S/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:51 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sc520_cdp/CVS/Repository u-boot-2009.03/board/sc520_cdp/CVS/Repository
--- u-boot-2009.03_orig/board/sc520_cdp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_cdp/CVS/Repository 2009-03-25 15:24:58.915700200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sc520_cdp
diff -Naur u-boot-2009.03_orig/board/sc520_cdp/CVS/Root u-boot-2009.03/board/sc520_cdp/CVS/Root
--- u-boot-2009.03_orig/board/sc520_cdp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_cdp/CVS/Root 2009-03-25 15:24:58.900075300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries u-boot-2009.03/board/sc520_spunk/CVS/Entries
--- u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_spunk/CVS/Entries 2009-03-25 15:57:45.809362000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_spunk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_spunk_asm.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_spunk_asm16.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries.Extra u-boot-2009.03/board/sc520_spunk/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_spunk/CVS/Entries.Extra 2009-03-25 15:57:45.809362000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/sc520_spunk.c///1238019711/
+/sc520_spunk_asm.S///1238019712/
+/sc520_spunk_asm16.S///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries.Extra.Old u-boot-2009.03/board/sc520_spunk/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_spunk/CVS/Entries.Extra.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019711/
+/config.mk///1238019711/
+/flash.c///1238019711/
+/sc520_spunk.c///1238019711/
+/sc520_spunk_asm.S///1238019712/
+/sc520_spunk_asm16.S///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries.Old u-boot-2009.03/board/sc520_spunk/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sc520_spunk/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_spunk/CVS/Entries.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sc520_spunk.c/1.1.1.1/Wed Mar 25 22:21:51 2009//
+/sc520_spunk_asm.S/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/sc520_spunk_asm16.S/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sc520_spunk/CVS/Repository u-boot-2009.03/board/sc520_spunk/CVS/Repository
--- u-boot-2009.03_orig/board/sc520_spunk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_spunk/CVS/Repository 2009-03-25 15:24:59.056324300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sc520_spunk
diff -Naur u-boot-2009.03_orig/board/sc520_spunk/CVS/Root u-boot-2009.03/board/sc520_spunk/CVS/Root
--- u-boot-2009.03_orig/board/sc520_spunk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sc520_spunk/CVS/Root 2009-03-25 15:24:59.056324300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/scb9328/CVS/Entries u-boot-2009.03/board/scb9328/CVS/Entries
--- u-boot-2009.03_orig/board/scb9328/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/scb9328/CVS/Entries 2009-03-25 15:57:45.903111400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intel.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scb9328.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/scb9328/CVS/Entries.Extra u-boot-2009.03/board/scb9328/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/scb9328/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/scb9328/CVS/Entries.Extra 2009-03-25 15:57:45.903111400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/intel.h///1238019712/
+/lowlevel_init.S///1238019712/
+/scb9328.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/scb9328/CVS/Entries.Extra.Old u-boot-2009.03/board/scb9328/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/scb9328/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/scb9328/CVS/Entries.Extra.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/intel.h///1238019712/
+/lowlevel_init.S///1238019712/
+/scb9328.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/scb9328/CVS/Entries.Old u-boot-2009.03/board/scb9328/CVS/Entries.Old
--- u-boot-2009.03_orig/board/scb9328/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/scb9328/CVS/Entries.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/intel.h/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/scb9328.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/scb9328/CVS/Repository u-boot-2009.03/board/scb9328/CVS/Repository
--- u-boot-2009.03_orig/board/scb9328/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/scb9328/CVS/Repository 2009-03-25 15:24:59.196948400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/scb9328
diff -Naur u-boot-2009.03_orig/board/scb9328/CVS/Root u-boot-2009.03/board/scb9328/CVS/Root
--- u-boot-2009.03_orig/board/scb9328/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/scb9328/CVS/Root 2009-03-25 15:24:59.196948400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/shannon/CVS/Entries u-boot-2009.03/board/shannon/CVS/Entries
--- u-boot-2009.03_orig/board/shannon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/shannon/CVS/Entries 2009-03-25 15:57:45.981235900 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inferno.header/1.1.1.1/Sat Mar 21 21:04:41 2009/-kb/
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/shannon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/shannon/CVS/Entries.Extra u-boot-2009.03/board/shannon/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/shannon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/shannon/CVS/Entries.Extra 2009-03-25 15:57:45.981235900 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/inferno.header///1238019712/
+/lowlevel_init.S///1238019712/
+/shannon.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/shannon/CVS/Entries.Extra.Old u-boot-2009.03/board/shannon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/shannon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/shannon/CVS/Entries.Extra.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/inferno.header///1238019712/
+/lowlevel_init.S///1238019712/
+/shannon.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/shannon/CVS/Entries.Old u-boot-2009.03/board/shannon/CVS/Entries.Old
--- u-boot-2009.03_orig/board/shannon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/shannon/CVS/Entries.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/inferno.header/1.1.1.1/Wed Mar 25 22:21:52 2009/-kb/
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/shannon.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/shannon/CVS/Repository u-boot-2009.03/board/shannon/CVS/Repository
--- u-boot-2009.03_orig/board/shannon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/shannon/CVS/Repository 2009-03-25 15:24:59.337572500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/shannon
diff -Naur u-boot-2009.03_orig/board/shannon/CVS/Root u-boot-2009.03/board/shannon/CVS/Root
--- u-boot-2009.03_orig/board/shannon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/shannon/CVS/Root 2009-03-25 15:24:59.337572500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sheldon/CVS/Entries u-boot-2009.03/board/sheldon/CVS/Entries
--- u-boot-2009.03_orig/board/sheldon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/CVS/Entries 2009-03-25 15:24:59.712570100 -0700
@@ -0,0 +1 @@
+D/simpc8313////
diff -Naur u-boot-2009.03_orig/board/sheldon/CVS/Entries.Extra u-boot-2009.03/board/sheldon/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sheldon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/CVS/Entries.Extra 2009-03-25 15:24:59.712570100 -0700
@@ -0,0 +1 @@
+D/simpc8313////
diff -Naur u-boot-2009.03_orig/board/sheldon/CVS/Repository u-boot-2009.03/board/sheldon/CVS/Repository
--- u-boot-2009.03_orig/board/sheldon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/CVS/Repository 2009-03-25 15:24:59.571946000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sheldon
diff -Naur u-boot-2009.03_orig/board/sheldon/CVS/Root u-boot-2009.03/board/sheldon/CVS/Root
--- u-boot-2009.03_orig/board/sheldon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/CVS/Root 2009-03-25 15:24:59.571946000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries
--- u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries 2009-03-25 15:57:46.059360400 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/simpc8313.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries.Extra u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries.Extra 2009-03-25 15:57:46.059360400 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/sdram.c///1238019712/
+/simpc8313.c///1238019712/
diff -Naur u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries.Extra.Old u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries.Extra.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/sdram.c///1238019712/
+/simpc8313.c///1238019712/
diff -Naur u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries.Old u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/simpc8313/CVS/Entries.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/simpc8313.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Repository u-boot-2009.03/board/sheldon/simpc8313/CVS/Repository
--- u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/simpc8313/CVS/Repository 2009-03-25 15:24:59.603195800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sheldon/simpc8313
diff -Naur u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Root u-boot-2009.03/board/sheldon/simpc8313/CVS/Root
--- u-boot-2009.03_orig/board/sheldon/simpc8313/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sheldon/simpc8313/CVS/Root 2009-03-25 15:24:59.603195800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries u-boot-2009.03/board/siemens/CCM/CVS/Entries
--- u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CCM/CVS/Entries 2009-03-25 15:57:46.137484900 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ccm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga_ccm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries.Extra u-boot-2009.03/board/siemens/CCM/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CCM/CVS/Entries.Extra 2009-03-25 15:57:46.137484900 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/ccm.c///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/fpga_ccm.c///1238019712/
+/u-boot.lds///1238019712/
+/u-boot.lds.debug///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries.Extra.Old u-boot-2009.03/board/siemens/CCM/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CCM/CVS/Entries.Extra.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/ccm.c///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/fpga_ccm.c///1238019712/
+/u-boot.lds///1238019712/
+/u-boot.lds.debug///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries.Old u-boot-2009.03/board/siemens/CCM/CVS/Entries.Old
--- u-boot-2009.03_orig/board/siemens/CCM/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CCM/CVS/Entries.Old 2009-03-25 15:24:59.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/ccm.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/fpga_ccm.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/CCM/CVS/Repository u-boot-2009.03/board/siemens/CCM/CVS/Repository
--- u-boot-2009.03_orig/board/siemens/CCM/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CCM/CVS/Repository 2009-03-25 15:24:59.790694600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/siemens/CCM
diff -Naur u-boot-2009.03_orig/board/siemens/CCM/CVS/Root u-boot-2009.03/board/siemens/CCM/CVS/Root
--- u-boot-2009.03_orig/board/siemens/CCM/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CCM/CVS/Root 2009-03-25 15:24:59.790694600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/siemens/CVS/Entries u-boot-2009.03/board/siemens/CVS/Entries
--- u-boot-2009.03_orig/board/siemens/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CVS/Entries 2009-03-25 15:25:00.775063300 -0700
@@ -0,0 +1,6 @@
+D/CCM////
+D/IAD210////
+D/SCM////
+D/SMN42////
+D/common////
+D/pcu_e////
diff -Naur u-boot-2009.03_orig/board/siemens/CVS/Entries.Extra u-boot-2009.03/board/siemens/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/siemens/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CVS/Entries.Extra 2009-03-25 15:25:00.775063300 -0700
@@ -0,0 +1,6 @@
+D/CCM////
+D/IAD210////
+D/SCM////
+D/SMN42////
+D/common////
+D/pcu_e////
diff -Naur u-boot-2009.03_orig/board/siemens/CVS/Repository u-boot-2009.03/board/siemens/CVS/Repository
--- u-boot-2009.03_orig/board/siemens/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CVS/Repository 2009-03-25 15:24:59.775069700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/siemens
diff -Naur u-boot-2009.03_orig/board/siemens/CVS/Root u-boot-2009.03/board/siemens/CVS/Root
--- u-boot-2009.03_orig/board/siemens/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/CVS/Root 2009-03-25 15:24:59.759444800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries u-boot-2009.03/board/siemens/IAD210/CVS/Entries
--- u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/IAD210/CVS/Entries 2009-03-25 15:57:46.215609400 -0700
@@ -0,0 +1,8 @@
+/IAD210.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries.Extra u-boot-2009.03/board/siemens/IAD210/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/IAD210/CVS/Entries.Extra 2009-03-25 15:57:46.215609400 -0700
@@ -0,0 +1,7 @@
+/IAD210.c///1238019712/
+/Makefile///1238019712/
+/atm.c///1238019712/
+/atm.h///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries.Extra.Old u-boot-2009.03/board/siemens/IAD210/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/IAD210/CVS/Entries.Extra.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,7 @@
+/IAD210.c///1238019712/
+/Makefile///1238019712/
+/atm.c///1238019712/
+/atm.h///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries.Old u-boot-2009.03/board/siemens/IAD210/CVS/Entries.Old
--- u-boot-2009.03_orig/board/siemens/IAD210/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/IAD210/CVS/Entries.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,8 @@
+/IAD210.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/atm.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/atm.h/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/IAD210/CVS/Repository u-boot-2009.03/board/siemens/IAD210/CVS/Repository
--- u-boot-2009.03_orig/board/siemens/IAD210/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/IAD210/CVS/Repository 2009-03-25 15:24:59.931318700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/siemens/IAD210
diff -Naur u-boot-2009.03_orig/board/siemens/IAD210/CVS/Root u-boot-2009.03/board/siemens/IAD210/CVS/Root
--- u-boot-2009.03_orig/board/siemens/IAD210/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/IAD210/CVS/Root 2009-03-25 15:24:59.915693800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries u-boot-2009.03/board/siemens/SCM/CVS/Entries
--- u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SCM/CVS/Entries 2009-03-25 15:57:46.293733900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga_scm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries.Extra u-boot-2009.03/board/siemens/SCM/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SCM/CVS/Entries.Extra 2009-03-25 15:57:46.293733900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/fpga_scm.c///1238019712/
+/scm.c///1238019712/
+/scm.h///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries.Extra.Old u-boot-2009.03/board/siemens/SCM/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SCM/CVS/Entries.Extra.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/fpga_scm.c///1238019712/
+/scm.c///1238019712/
+/scm.h///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries.Old u-boot-2009.03/board/siemens/SCM/CVS/Entries.Old
--- u-boot-2009.03_orig/board/siemens/SCM/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SCM/CVS/Entries.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/fpga_scm.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/scm.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/scm.h/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/SCM/CVS/Repository u-boot-2009.03/board/siemens/SCM/CVS/Repository
--- u-boot-2009.03_orig/board/siemens/SCM/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SCM/CVS/Repository 2009-03-25 15:25:00.071942800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/siemens/SCM
diff -Naur u-boot-2009.03_orig/board/siemens/SCM/CVS/Root u-boot-2009.03/board/siemens/SCM/CVS/Root
--- u-boot-2009.03_orig/board/siemens/SCM/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SCM/CVS/Root 2009-03-25 15:25:00.071942800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries u-boot-2009.03/board/siemens/SMN42/CVS/Entries
--- u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SMN42/CVS/Entries 2009-03-25 15:57:46.356233500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smn42.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries.Extra u-boot-2009.03/board/siemens/SMN42/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SMN42/CVS/Entries.Extra 2009-03-25 15:57:46.356233500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/lowlevel_init.S///1238019712/
+/smn42.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries.Extra.Old u-boot-2009.03/board/siemens/SMN42/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SMN42/CVS/Entries.Extra.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/lowlevel_init.S///1238019712/
+/smn42.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries.Old u-boot-2009.03/board/siemens/SMN42/CVS/Entries.Old
--- u-boot-2009.03_orig/board/siemens/SMN42/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SMN42/CVS/Entries.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/smn42.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/SMN42/CVS/Repository u-boot-2009.03/board/siemens/SMN42/CVS/Repository
--- u-boot-2009.03_orig/board/siemens/SMN42/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SMN42/CVS/Repository 2009-03-25 15:25:00.196942000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/siemens/SMN42
diff -Naur u-boot-2009.03_orig/board/siemens/SMN42/CVS/Root u-boot-2009.03/board/siemens/SMN42/CVS/Root
--- u-boot-2009.03_orig/board/siemens/SMN42/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/SMN42/CVS/Root 2009-03-25 15:25:00.196942000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/siemens/common/CVS/Entries u-boot-2009.03/board/siemens/common/CVS/Entries
--- u-boot-2009.03_orig/board/siemens/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/common/CVS/Entries 2009-03-25 15:57:46.434358000 -0700
@@ -0,0 +1,4 @@
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/common/CVS/Entries.Extra u-boot-2009.03/board/siemens/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/siemens/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/common/CVS/Entries.Extra 2009-03-25 15:57:46.434358000 -0700
@@ -0,0 +1,3 @@
+/README///1238019712/
+/fpga.c///1238019712/
+/fpga.h///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/common/CVS/Entries.Extra.Old u-boot-2009.03/board/siemens/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/siemens/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/common/CVS/Entries.Extra.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,3 @@
+/README///1238019712/
+/fpga.c///1238019712/
+/fpga.h///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/common/CVS/Entries.Old u-boot-2009.03/board/siemens/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/siemens/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/common/CVS/Entries.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,4 @@
+/README/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/fpga.h/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/common/CVS/Repository u-boot-2009.03/board/siemens/common/CVS/Repository
--- u-boot-2009.03_orig/board/siemens/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/common/CVS/Repository 2009-03-25 15:25:00.306316300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/siemens/common
diff -Naur u-boot-2009.03_orig/board/siemens/common/CVS/Root u-boot-2009.03/board/siemens/common/CVS/Root
--- u-boot-2009.03_orig/board/siemens/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/common/CVS/Root 2009-03-25 15:25:00.306316300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries u-boot-2009.03/board/siemens/pcu_e/CVS/Entries
--- u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/pcu_e/CVS/Entries 2009-03-25 15:57:46.512482500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcu_e.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries.Extra u-boot-2009.03/board/siemens/pcu_e/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/pcu_e/CVS/Entries.Extra 2009-03-25 15:57:46.512482500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/pcu_e.c///1238019712/
+/u-boot.lds///1238019712/
+/u-boot.lds.debug///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries.Extra.Old u-boot-2009.03/board/siemens/pcu_e/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/pcu_e/CVS/Entries.Extra.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/pcu_e.c///1238019712/
+/u-boot.lds///1238019712/
+/u-boot.lds.debug///1238019712/
diff -Naur u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries.Old u-boot-2009.03/board/siemens/pcu_e/CVS/Entries.Old
--- u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/pcu_e/CVS/Entries.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/pcu_e.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Repository u-boot-2009.03/board/siemens/pcu_e/CVS/Repository
--- u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/pcu_e/CVS/Repository 2009-03-25 15:25:00.634439200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/siemens/pcu_e
diff -Naur u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Root u-boot-2009.03/board/siemens/pcu_e/CVS/Root
--- u-boot-2009.03_orig/board/siemens/pcu_e/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/siemens/pcu_e/CVS/Root 2009-03-25 15:25:00.603189400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sixnet/CVS/Entries u-boot-2009.03/board/sixnet/CVS/Entries
--- u-boot-2009.03_orig/board/sixnet/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sixnet/CVS/Entries 2009-03-25 15:57:46.590607000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpgadata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sixnet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sixnet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sixnet/CVS/Entries.Extra u-boot-2009.03/board/sixnet/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sixnet/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sixnet/CVS/Entries.Extra 2009-03-25 15:57:46.590607000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/fpgadata.c///1238019712/
+/sixnet.c///1238019712/
+/sixnet.h///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/sixnet/CVS/Entries.Extra.Old u-boot-2009.03/board/sixnet/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sixnet/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sixnet/CVS/Entries.Extra.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/fpgadata.c///1238019712/
+/sixnet.c///1238019712/
+/sixnet.h///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/sixnet/CVS/Entries.Old u-boot-2009.03/board/sixnet/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sixnet/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sixnet/CVS/Entries.Old 2009-03-25 15:25:00.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/fpgadata.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/sixnet.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/sixnet.h/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sixnet/CVS/Repository u-boot-2009.03/board/sixnet/CVS/Repository
--- u-boot-2009.03_orig/board/sixnet/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sixnet/CVS/Repository 2009-03-25 15:25:00.821938000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sixnet
diff -Naur u-boot-2009.03_orig/board/sixnet/CVS/Root u-boot-2009.03/board/sixnet/CVS/Root
--- u-boot-2009.03_orig/board/sixnet/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sixnet/CVS/Root 2009-03-25 15:25:00.821938000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sl8245/CVS/Entries u-boot-2009.03/board/sl8245/CVS/Entries
--- u-boot-2009.03_orig/board/sl8245/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sl8245/CVS/Entries 2009-03-25 15:57:46.653106600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sl8245.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sl8245/CVS/Entries.Extra u-boot-2009.03/board/sl8245/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sl8245/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sl8245/CVS/Entries.Extra 2009-03-25 15:57:46.653106600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/sl8245.c///1238019712/
diff -Naur u-boot-2009.03_orig/board/sl8245/CVS/Entries.Extra.Old u-boot-2009.03/board/sl8245/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sl8245/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sl8245/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/sl8245.c///1238019712/
diff -Naur u-boot-2009.03_orig/board/sl8245/CVS/Entries.Old u-boot-2009.03/board/sl8245/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sl8245/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sl8245/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/sl8245.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sl8245/CVS/Repository u-boot-2009.03/board/sl8245/CVS/Repository
--- u-boot-2009.03_orig/board/sl8245/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sl8245/CVS/Repository 2009-03-25 15:25:00.962562100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sl8245
diff -Naur u-boot-2009.03_orig/board/sl8245/CVS/Root u-boot-2009.03/board/sl8245/CVS/Root
--- u-boot-2009.03_orig/board/sl8245/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sl8245/CVS/Root 2009-03-25 15:25:00.962562100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/snmc/CVS/Entries u-boot-2009.03/board/snmc/CVS/Entries
--- u-boot-2009.03_orig/board/snmc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/CVS/Entries 2009-03-25 15:25:01.275060100 -0700
@@ -0,0 +1,2 @@
+D/qs850////
+D/qs860t////
diff -Naur u-boot-2009.03_orig/board/snmc/CVS/Entries.Extra u-boot-2009.03/board/snmc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/snmc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/CVS/Entries.Extra 2009-03-25 15:25:01.275060100 -0700
@@ -0,0 +1,2 @@
+D/qs850////
+D/qs860t////
diff -Naur u-boot-2009.03_orig/board/snmc/CVS/Repository u-boot-2009.03/board/snmc/CVS/Repository
--- u-boot-2009.03_orig/board/snmc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/CVS/Repository 2009-03-25 15:25:01.056311500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/snmc
diff -Naur u-boot-2009.03_orig/board/snmc/CVS/Root u-boot-2009.03/board/snmc/CVS/Root
--- u-boot-2009.03_orig/board/snmc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/CVS/Root 2009-03-25 15:25:01.056311500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries u-boot-2009.03/board/snmc/qs850/CVS/Entries
--- u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs850/CVS/Entries 2009-03-25 15:57:46.746856000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qs850.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries.Extra u-boot-2009.03/board/snmc/qs850/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs850/CVS/Entries.Extra 2009-03-25 15:57:46.746856000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/qs850.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries.Extra.Old u-boot-2009.03/board/snmc/qs850/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs850/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/qs850.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries.Old u-boot-2009.03/board/snmc/qs850/CVS/Entries.Old
--- u-boot-2009.03_orig/board/snmc/qs850/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs850/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/qs850.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/snmc/qs850/CVS/Repository u-boot-2009.03/board/snmc/qs850/CVS/Repository
--- u-boot-2009.03_orig/board/snmc/qs850/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs850/CVS/Repository 2009-03-25 15:25:01.071936400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/snmc/qs850
diff -Naur u-boot-2009.03_orig/board/snmc/qs850/CVS/Root u-boot-2009.03/board/snmc/qs850/CVS/Root
--- u-boot-2009.03_orig/board/snmc/qs850/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs850/CVS/Root 2009-03-25 15:25:01.071936400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries u-boot-2009.03/board/snmc/qs860t/CVS/Entries
--- u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs860t/CVS/Entries 2009-03-25 15:57:46.824980500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qs860t.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries.Extra u-boot-2009.03/board/snmc/qs860t/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs860t/CVS/Entries.Extra 2009-03-25 15:57:46.824980500 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/qs860t.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries.Extra.Old u-boot-2009.03/board/snmc/qs860t/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs860t/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/flash.c///1238019712/
+/qs860t.c///1238019712/
+/u-boot.lds///1238019712/
diff -Naur u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries.Old u-boot-2009.03/board/snmc/qs860t/CVS/Entries.Old
--- u-boot-2009.03_orig/board/snmc/qs860t/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs860t/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/qs860t.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/snmc/qs860t/CVS/Repository u-boot-2009.03/board/snmc/qs860t/CVS/Repository
--- u-boot-2009.03_orig/board/snmc/qs860t/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs860t/CVS/Repository 2009-03-25 15:25:01.181310700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/snmc/qs860t
diff -Naur u-boot-2009.03_orig/board/snmc/qs860t/CVS/Root u-boot-2009.03/board/snmc/qs860t/CVS/Root
--- u-boot-2009.03_orig/board/snmc/qs860t/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/snmc/qs860t/CVS/Root 2009-03-25 15:25:01.181310700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/socrates/CVS/Entries u-boot-2009.03/board/socrates/CVS/Entries
--- u-boot-2009.03_orig/board/socrates/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/socrates/CVS/Entries 2009-03-25 15:57:46.918729900 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/socrates.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/upm_table.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/socrates/CVS/Entries.Extra u-boot-2009.03/board/socrates/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/socrates/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/socrates/CVS/Entries.Extra 2009-03-25 15:57:46.918729900 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/ddr.c///1238019712/
+/law.c///1238019712/
+/nand.c///1238019712/
+/sdram.c///1238019712/
+/socrates.c///1238019712/
+/tlb.c///1238019712/
+/u-boot.lds///1238019712/
+/upm_table.h///1238019712/
diff -Naur u-boot-2009.03_orig/board/socrates/CVS/Entries.Extra.Old u-boot-2009.03/board/socrates/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/socrates/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/socrates/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/ddr.c///1238019712/
+/law.c///1238019712/
+/nand.c///1238019712/
+/sdram.c///1238019712/
+/socrates.c///1238019712/
+/tlb.c///1238019712/
+/u-boot.lds///1238019712/
+/upm_table.h///1238019712/
diff -Naur u-boot-2009.03_orig/board/socrates/CVS/Entries.Old u-boot-2009.03/board/socrates/CVS/Entries.Old
--- u-boot-2009.03_orig/board/socrates/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/socrates/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/socrates.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/upm_table.h/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/socrates/CVS/Repository u-boot-2009.03/board/socrates/CVS/Repository
--- u-boot-2009.03_orig/board/socrates/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/socrates/CVS/Repository 2009-03-25 15:25:01.321934800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/socrates
diff -Naur u-boot-2009.03_orig/board/socrates/CVS/Root u-boot-2009.03/board/socrates/CVS/Root
--- u-boot-2009.03_orig/board/socrates/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/socrates/CVS/Root 2009-03-25 15:25:01.321934800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sorcery/CVS/Entries u-boot-2009.03/board/sorcery/CVS/Entries
--- u-boot-2009.03_orig/board/sorcery/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sorcery/CVS/Entries 2009-03-25 15:57:46.981229500 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sorcery.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sorcery/CVS/Entries.Extra u-boot-2009.03/board/sorcery/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sorcery/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sorcery/CVS/Entries.Extra 2009-03-25 15:57:46.981229500 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/sorcery.c///1238019712/
diff -Naur u-boot-2009.03_orig/board/sorcery/CVS/Entries.Extra.Old u-boot-2009.03/board/sorcery/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sorcery/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sorcery/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019712/
+/config.mk///1238019712/
+/sorcery.c///1238019712/
diff -Naur u-boot-2009.03_orig/board/sorcery/CVS/Entries.Old u-boot-2009.03/board/sorcery/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sorcery/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sorcery/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:52 2009//
+/sorcery.c/1.1.1.1/Wed Mar 25 22:21:52 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sorcery/CVS/Repository u-boot-2009.03/board/sorcery/CVS/Repository
--- u-boot-2009.03_orig/board/sorcery/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sorcery/CVS/Repository 2009-03-25 15:25:01.556308300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sorcery
diff -Naur u-boot-2009.03_orig/board/sorcery/CVS/Root u-boot-2009.03/board/sorcery/CVS/Root
--- u-boot-2009.03_orig/board/sorcery/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sorcery/CVS/Root 2009-03-25 15:25:01.556308300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/spc1920/CVS/Entries u-boot-2009.03/board/spc1920/CVS/Entries
--- u-boot-2009.03_orig/board/spc1920/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spc1920/CVS/Entries 2009-03-25 15:57:47.043729100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hpi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hpi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pld.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spc1920.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/spc1920/CVS/Entries.Extra u-boot-2009.03/board/spc1920/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/spc1920/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spc1920/CVS/Entries.Extra 2009-03-25 15:57:47.043729100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/hpi.c///1238019713/
+/hpi.h///1238019713/
+/pld.h///1238019713/
+/spc1920.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/spc1920/CVS/Entries.Extra.Old u-boot-2009.03/board/spc1920/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/spc1920/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spc1920/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/hpi.c///1238019713/
+/hpi.h///1238019713/
+/pld.h///1238019713/
+/spc1920.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/spc1920/CVS/Entries.Old u-boot-2009.03/board/spc1920/CVS/Entries.Old
--- u-boot-2009.03_orig/board/spc1920/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spc1920/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/hpi.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/hpi.h/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/pld.h/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/spc1920.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/spc1920/CVS/Repository u-boot-2009.03/board/spc1920/CVS/Repository
--- u-boot-2009.03_orig/board/spc1920/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spc1920/CVS/Repository 2009-03-25 15:25:01.650057700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/spc1920
diff -Naur u-boot-2009.03_orig/board/spc1920/CVS/Root u-boot-2009.03/board/spc1920/CVS/Root
--- u-boot-2009.03_orig/board/spc1920/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spc1920/CVS/Root 2009-03-25 15:25:01.650057700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/spd8xx/CVS/Entries u-boot-2009.03/board/spd8xx/CVS/Entries
--- u-boot-2009.03_orig/board/spd8xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spd8xx/CVS/Entries 2009-03-25 15:57:47.121853600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spd8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/spd8xx/CVS/Entries.Extra u-boot-2009.03/board/spd8xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/spd8xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spd8xx/CVS/Entries.Extra 2009-03-25 15:57:47.121853600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/spd8xx.c///1238019713/
+/u-boot.lds///1238019713/
+/u-boot.lds.debug///1238019713/
diff -Naur u-boot-2009.03_orig/board/spd8xx/CVS/Entries.Extra.Old u-boot-2009.03/board/spd8xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/spd8xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spd8xx/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/spd8xx.c///1238019713/
+/u-boot.lds///1238019713/
+/u-boot.lds.debug///1238019713/
diff -Naur u-boot-2009.03_orig/board/spd8xx/CVS/Entries.Old u-boot-2009.03/board/spd8xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/spd8xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spd8xx/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/spd8xx.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/spd8xx/CVS/Repository u-boot-2009.03/board/spd8xx/CVS/Repository
--- u-boot-2009.03_orig/board/spd8xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spd8xx/CVS/Repository 2009-03-25 15:25:01.775056900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/spd8xx
diff -Naur u-boot-2009.03_orig/board/spd8xx/CVS/Root u-boot-2009.03/board/spd8xx/CVS/Root
--- u-boot-2009.03_orig/board/spd8xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/spd8xx/CVS/Root 2009-03-25 15:25:01.775056900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ssv/CVS/Entries u-boot-2009.03/board/ssv/CVS/Entries
--- u-boot-2009.03_orig/board/ssv/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/CVS/Entries 2009-03-25 15:25:02.150054500 -0700
@@ -0,0 +1,2 @@
+D/adnpesc1////
+D/common////
diff -Naur u-boot-2009.03_orig/board/ssv/CVS/Entries.Extra u-boot-2009.03/board/ssv/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ssv/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/CVS/Entries.Extra 2009-03-25 15:25:02.165679400 -0700
@@ -0,0 +1,2 @@
+D/adnpesc1////
+D/common////
diff -Naur u-boot-2009.03_orig/board/ssv/CVS/Repository u-boot-2009.03/board/ssv/CVS/Repository
--- u-boot-2009.03_orig/board/ssv/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/CVS/Repository 2009-03-25 15:25:01.900056100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ssv
diff -Naur u-boot-2009.03_orig/board/ssv/CVS/Root u-boot-2009.03/board/ssv/CVS/Root
--- u-boot-2009.03_orig/board/ssv/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/CVS/Root 2009-03-25 15:25:01.900056100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries
--- u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries 2009-03-25 15:57:47.199978100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/adnpesc1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vectors.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries.Extra u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries.Extra 2009-03-25 15:57:47.199978100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/adnpesc1.c///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/misc.c///1238019713/
+/u-boot.lds///1238019713/
+/vectors.S///1238019713/
diff -Naur u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries.Extra.Old u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries.Extra.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/adnpesc1.c///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/misc.c///1238019713/
+/u-boot.lds///1238019713/
+/vectors.S///1238019713/
diff -Naur u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries.Old u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/adnpesc1/CVS/Entries.Old 2009-03-25 15:25:01.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/adnpesc1.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/vectors.S/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Repository u-boot-2009.03/board/ssv/adnpesc1/CVS/Repository
--- u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/adnpesc1/CVS/Repository 2009-03-25 15:25:01.915681000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ssv/adnpesc1
diff -Naur u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Root u-boot-2009.03/board/ssv/adnpesc1/CVS/Root
--- u-boot-2009.03_orig/board/ssv/adnpesc1/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/adnpesc1/CVS/Root 2009-03-25 15:25:01.915681000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/ssv/common/CVS/Entries u-boot-2009.03/board/ssv/common/CVS/Entries
--- u-boot-2009.03_orig/board/ssv/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/common/CVS/Entries 2009-03-25 15:57:47.278102600 -0700
@@ -0,0 +1,5 @@
+/cmd_sled.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/wd_pio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ssv/common/CVS/Entries.Extra u-boot-2009.03/board/ssv/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/ssv/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/common/CVS/Entries.Extra 2009-03-25 15:57:47.278102600 -0700
@@ -0,0 +1,4 @@
+/cmd_sled.c///1238019713/
+/flash.c///1238019713/
+/post.c///1238019713/
+/wd_pio.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/ssv/common/CVS/Entries.Extra.Old u-boot-2009.03/board/ssv/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/ssv/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/common/CVS/Entries.Extra.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,4 @@
+/cmd_sled.c///1238019713/
+/flash.c///1238019713/
+/post.c///1238019713/
+/wd_pio.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/ssv/common/CVS/Entries.Old u-boot-2009.03/board/ssv/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/ssv/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/common/CVS/Entries.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,5 @@
+/cmd_sled.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/post.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/wd_pio.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/ssv/common/CVS/Repository u-boot-2009.03/board/ssv/common/CVS/Repository
--- u-boot-2009.03_orig/board/ssv/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/common/CVS/Repository 2009-03-25 15:25:02.056305100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/ssv/common
diff -Naur u-boot-2009.03_orig/board/ssv/common/CVS/Root u-boot-2009.03/board/ssv/common/CVS/Root
--- u-boot-2009.03_orig/board/ssv/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/ssv/common/CVS/Root 2009-03-25 15:25:02.056305100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/st/CVS/Entries u-boot-2009.03/board/st/CVS/Entries
--- u-boot-2009.03_orig/board/st/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/CVS/Entries 2009-03-25 15:25:02.306303500 -0700
@@ -0,0 +1 @@
+D/nmdk8815////
diff -Naur u-boot-2009.03_orig/board/st/CVS/Entries.Extra u-boot-2009.03/board/st/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/st/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/CVS/Entries.Extra 2009-03-25 15:25:02.306303500 -0700
@@ -0,0 +1 @@
+D/nmdk8815////
diff -Naur u-boot-2009.03_orig/board/st/CVS/Repository u-boot-2009.03/board/st/CVS/Repository
--- u-boot-2009.03_orig/board/st/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/CVS/Repository 2009-03-25 15:25:02.196929200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/st
diff -Naur u-boot-2009.03_orig/board/st/CVS/Root u-boot-2009.03/board/st/CVS/Root
--- u-boot-2009.03_orig/board/st/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/CVS/Root 2009-03-25 15:25:02.196929200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries u-boot-2009.03/board/st/nmdk8815/CVS/Entries
--- u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/nmdk8815/CVS/Entries 2009-03-25 15:57:47.371852000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nmdk8815.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/platform.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries.Extra u-boot-2009.03/board/st/nmdk8815/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/nmdk8815/CVS/Entries.Extra 2009-03-25 15:57:47.371852000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/nmdk8815.c///1238019713/
+/platform.S///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries.Extra.Old u-boot-2009.03/board/st/nmdk8815/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/nmdk8815/CVS/Entries.Extra.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/nmdk8815.c///1238019713/
+/platform.S///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries.Old u-boot-2009.03/board/st/nmdk8815/CVS/Entries.Old
--- u-boot-2009.03_orig/board/st/nmdk8815/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/nmdk8815/CVS/Entries.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/nmdk8815.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/platform.S/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/st/nmdk8815/CVS/Repository u-boot-2009.03/board/st/nmdk8815/CVS/Repository
--- u-boot-2009.03_orig/board/st/nmdk8815/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/nmdk8815/CVS/Repository 2009-03-25 15:25:02.212554100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/st/nmdk8815
diff -Naur u-boot-2009.03_orig/board/st/nmdk8815/CVS/Root u-boot-2009.03/board/st/nmdk8815/CVS/Root
--- u-boot-2009.03_orig/board/st/nmdk8815/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/st/nmdk8815/CVS/Root 2009-03-25 15:25:02.212554100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/stxgp3/CVS/Entries u-boot-2009.03/board/stxgp3/CVS/Entries
--- u-boot-2009.03_orig/board/stxgp3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxgp3/CVS/Entries 2009-03-25 15:57:47.449976500 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxgp3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/stxgp3/CVS/Entries.Extra u-boot-2009.03/board/stxgp3/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/stxgp3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxgp3/CVS/Entries.Extra 2009-03-25 15:57:47.449976500 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/ddr.c///1238019713/
+/flash.c///1238019713/
+/law.c///1238019713/
+/stxgp3.c///1238019713/
+/tlb.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/stxgp3/CVS/Entries.Extra.Old u-boot-2009.03/board/stxgp3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/stxgp3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxgp3/CVS/Entries.Extra.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/ddr.c///1238019713/
+/flash.c///1238019713/
+/law.c///1238019713/
+/stxgp3.c///1238019713/
+/tlb.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/stxgp3/CVS/Entries.Old u-boot-2009.03/board/stxgp3/CVS/Entries.Old
--- u-boot-2009.03_orig/board/stxgp3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxgp3/CVS/Entries.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/stxgp3.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/stxgp3/CVS/Repository u-boot-2009.03/board/stxgp3/CVS/Repository
--- u-boot-2009.03_orig/board/stxgp3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxgp3/CVS/Repository 2009-03-25 15:25:02.353178200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/stxgp3
diff -Naur u-boot-2009.03_orig/board/stxgp3/CVS/Root u-boot-2009.03/board/stxgp3/CVS/Root
--- u-boot-2009.03_orig/board/stxgp3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxgp3/CVS/Root 2009-03-25 15:25:02.353178200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/stxssa/CVS/Entries u-boot-2009.03/board/stxssa/CVS/Entries
--- u-boot-2009.03_orig/board/stxssa/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxssa/CVS/Entries 2009-03-25 15:57:47.528101000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxssa.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/stxssa/CVS/Entries.Extra u-boot-2009.03/board/stxssa/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/stxssa/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxssa/CVS/Entries.Extra 2009-03-25 15:57:47.528101000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/ddr.c///1238019713/
+/law.c///1238019713/
+/stxssa.c///1238019713/
+/tlb.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/stxssa/CVS/Entries.Extra.Old u-boot-2009.03/board/stxssa/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/stxssa/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxssa/CVS/Entries.Extra.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/ddr.c///1238019713/
+/law.c///1238019713/
+/stxssa.c///1238019713/
+/tlb.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/stxssa/CVS/Entries.Old u-boot-2009.03/board/stxssa/CVS/Entries.Old
--- u-boot-2009.03_orig/board/stxssa/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxssa/CVS/Entries.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/stxssa.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/stxssa/CVS/Repository u-boot-2009.03/board/stxssa/CVS/Repository
--- u-boot-2009.03_orig/board/stxssa/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxssa/CVS/Repository 2009-03-25 15:25:02.556301900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/stxssa
diff -Naur u-boot-2009.03_orig/board/stxssa/CVS/Root u-boot-2009.03/board/stxssa/CVS/Root
--- u-boot-2009.03_orig/board/stxssa/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxssa/CVS/Root 2009-03-25 15:25:02.556301900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/stxxtc/CVS/Entries u-boot-2009.03/board/stxxtc/CVS/Entries
--- u-boot-2009.03_orig/board/stxxtc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxxtc/CVS/Entries 2009-03-25 15:57:47.606225500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxxtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/stxxtc/CVS/Entries.Extra u-boot-2009.03/board/stxxtc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/stxxtc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxxtc/CVS/Entries.Extra 2009-03-25 15:57:47.621850400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/stxxtc.c///1238019713/
+/u-boot.lds///1238019713/
+/u-boot.lds.debug///1238019713/
diff -Naur u-boot-2009.03_orig/board/stxxtc/CVS/Entries.Extra.Old u-boot-2009.03/board/stxxtc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/stxxtc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxxtc/CVS/Entries.Extra.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/stxxtc.c///1238019713/
+/u-boot.lds///1238019713/
+/u-boot.lds.debug///1238019713/
diff -Naur u-boot-2009.03_orig/board/stxxtc/CVS/Entries.Old u-boot-2009.03/board/stxxtc/CVS/Entries.Old
--- u-boot-2009.03_orig/board/stxxtc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxxtc/CVS/Entries.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/stxxtc.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/stxxtc/CVS/Repository u-boot-2009.03/board/stxxtc/CVS/Repository
--- u-boot-2009.03_orig/board/stxxtc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxxtc/CVS/Repository 2009-03-25 15:25:02.696926000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/stxxtc
diff -Naur u-boot-2009.03_orig/board/stxxtc/CVS/Root u-boot-2009.03/board/stxxtc/CVS/Root
--- u-boot-2009.03_orig/board/stxxtc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/stxxtc/CVS/Root 2009-03-25 15:25:02.696926000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries u-boot-2009.03/board/svm_sc8xx/CVS/Entries
--- u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/svm_sc8xx/CVS/Entries 2009-03-25 15:57:47.684350000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/svm_sc8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries.Extra u-boot-2009.03/board/svm_sc8xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/svm_sc8xx/CVS/Entries.Extra 2009-03-25 15:57:47.684350000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/svm_sc8xx.c///1238019713/
+/u-boot.lds///1238019713/
+/u-boot.lds.debug///1238019713/
diff -Naur u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries.Extra.Old u-boot-2009.03/board/svm_sc8xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/svm_sc8xx/CVS/Entries.Extra.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/svm_sc8xx.c///1238019713/
+/u-boot.lds///1238019713/
+/u-boot.lds.debug///1238019713/
diff -Naur u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries.Old u-boot-2009.03/board/svm_sc8xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/svm_sc8xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/svm_sc8xx/CVS/Entries.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/svm_sc8xx.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/svm_sc8xx/CVS/Repository u-boot-2009.03/board/svm_sc8xx/CVS/Repository
--- u-boot-2009.03_orig/board/svm_sc8xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/svm_sc8xx/CVS/Repository 2009-03-25 15:25:02.821925200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/svm_sc8xx
diff -Naur u-boot-2009.03_orig/board/svm_sc8xx/CVS/Root u-boot-2009.03/board/svm_sc8xx/CVS/Root
--- u-boot-2009.03_orig/board/svm_sc8xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/svm_sc8xx/CVS/Root 2009-03-25 15:25:02.821925200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/sx1/CVS/Entries u-boot-2009.03/board/sx1/CVS/Entries
--- u-boot-2009.03_orig/board/sx1/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sx1/CVS/Entries 2009-03-25 15:57:47.746849600 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sx1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sx1/CVS/Entries.Extra u-boot-2009.03/board/sx1/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/sx1/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sx1/CVS/Entries.Extra 2009-03-25 15:57:47.746849600 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/lowlevel_init.S///1238019713/
+/sx1.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/sx1/CVS/Entries.Extra.Old u-boot-2009.03/board/sx1/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/sx1/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sx1/CVS/Entries.Extra.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/lowlevel_init.S///1238019713/
+/sx1.c///1238019713/
+/u-boot.lds///1238019713/
diff -Naur u-boot-2009.03_orig/board/sx1/CVS/Entries.Old u-boot-2009.03/board/sx1/CVS/Entries.Old
--- u-boot-2009.03_orig/board/sx1/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sx1/CVS/Entries.Old 2009-03-25 15:25:02.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/sx1.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/sx1/CVS/Repository u-boot-2009.03/board/sx1/CVS/Repository
--- u-boot-2009.03_orig/board/sx1/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sx1/CVS/Repository 2009-03-25 15:25:02.931299500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/sx1
diff -Naur u-boot-2009.03_orig/board/sx1/CVS/Root u-boot-2009.03/board/sx1/CVS/Root
--- u-boot-2009.03_orig/board/sx1/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/sx1/CVS/Root 2009-03-25 15:25:02.931299500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tb0229/CVS/Entries u-boot-2009.03/board/tb0229/CVS/Entries
--- u-boot-2009.03_orig/board/tb0229/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tb0229/CVS/Entries 2009-03-25 15:57:47.824974100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tb0229.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vr4131-pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tb0229/CVS/Entries.Extra u-boot-2009.03/board/tb0229/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tb0229/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tb0229/CVS/Entries.Extra 2009-03-25 15:57:47.824974100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/lowlevel_init.S///1238019713/
+/tb0229.c///1238019713/
+/u-boot.lds///1238019713/
+/vr4131-pci.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tb0229/CVS/Entries.Extra.Old u-boot-2009.03/board/tb0229/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/tb0229/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tb0229/CVS/Entries.Extra.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/flash.c///1238019713/
+/lowlevel_init.S///1238019713/
+/tb0229.c///1238019713/
+/u-boot.lds///1238019713/
+/vr4131-pci.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tb0229/CVS/Entries.Old u-boot-2009.03/board/tb0229/CVS/Entries.Old
--- u-boot-2009.03_orig/board/tb0229/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tb0229/CVS/Entries.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tb0229.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/vr4131-pci.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tb0229/CVS/Repository u-boot-2009.03/board/tb0229/CVS/Repository
--- u-boot-2009.03_orig/board/tb0229/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tb0229/CVS/Repository 2009-03-25 15:25:03.040673800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tb0229
diff -Naur u-boot-2009.03_orig/board/tb0229/CVS/Root u-boot-2009.03/board/tb0229/CVS/Root
--- u-boot-2009.03_orig/board/tb0229/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tb0229/CVS/Root 2009-03-25 15:25:03.040673800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/total5200/CVS/Entries u-boot-2009.03/board/total5200/CVS/Entries
--- u-boot-2009.03_orig/board/total5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/total5200/CVS/Entries 2009-03-25 15:57:47.887473700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc32m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/total5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/total5200/CVS/Entries.Extra u-boot-2009.03/board/total5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/total5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/total5200/CVS/Entries.Extra 2009-03-25 15:57:47.887473700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/mt48lc16m16a2-75.h///1238019713/
+/mt48lc32m16a2-75.h///1238019713/
+/sdram.c///1238019713/
+/sdram.h///1238019713/
+/total5200.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/total5200/CVS/Entries.Extra.Old u-boot-2009.03/board/total5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/total5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/total5200/CVS/Entries.Extra.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/mt48lc16m16a2-75.h///1238019713/
+/mt48lc32m16a2-75.h///1238019713/
+/sdram.c///1238019713/
+/sdram.h///1238019713/
+/total5200.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/total5200/CVS/Entries.Old u-boot-2009.03/board/total5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/total5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/total5200/CVS/Entries.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/mt48lc32m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/sdram.h/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/total5200.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/total5200/CVS/Repository u-boot-2009.03/board/total5200/CVS/Repository
--- u-boot-2009.03_orig/board/total5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/total5200/CVS/Repository 2009-03-25 15:25:03.165673000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/total5200
diff -Naur u-boot-2009.03_orig/board/total5200/CVS/Root u-boot-2009.03/board/total5200/CVS/Root
--- u-boot-2009.03_orig/board/total5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/total5200/CVS/Root 2009-03-25 15:25:03.165673000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tqc/CVS/Entries u-boot-2009.03/board/tqc/CVS/Entries
--- u-boot-2009.03_orig/board/tqc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/CVS/Entries 2009-03-25 15:25:04.134416800 -0700
@@ -0,0 +1,6 @@
+D/tqm5200////
+D/tqm8260////
+D/tqm8272////
+D/tqm834x////
+D/tqm85xx////
+D/tqm8xx////
diff -Naur u-boot-2009.03_orig/board/tqc/CVS/Entries.Extra u-boot-2009.03/board/tqc/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tqc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/CVS/Entries.Extra 2009-03-25 15:25:04.134416800 -0700
@@ -0,0 +1,6 @@
+D/tqm5200////
+D/tqm8260////
+D/tqm8272////
+D/tqm834x////
+D/tqm85xx////
+D/tqm8xx////
diff -Naur u-boot-2009.03_orig/board/tqc/CVS/Repository u-boot-2009.03/board/tqc/CVS/Repository
--- u-boot-2009.03_orig/board/tqc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/CVS/Repository 2009-03-25 15:25:03.306297100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tqc
diff -Naur u-boot-2009.03_orig/board/tqc/CVS/Root u-boot-2009.03/board/tqc/CVS/Root
--- u-boot-2009.03_orig/board/tqc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/CVS/Root 2009-03-25 15:25:03.290672200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries u-boot-2009.03/board/tqc/tqm5200/CVS/Entries
--- u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm5200/CVS/Entries 2009-03-25 15:57:47.981223100 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cam5200_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_stk52xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_tb5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries.Extra u-boot-2009.03/board/tqc/tqm5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm5200/CVS/Entries.Extra 2009-03-25 15:57:47.981223100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/cam5200_flash.c///1238019713/
+/cmd_stk52xx.c///1238019713/
+/cmd_tb5200.c///1238019713/
+/config.mk///1238019713/
+/mt48lc16m16a2-75.h///1238019713/
+/tqm5200.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries.Extra.Old u-boot-2009.03/board/tqc/tqm5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm5200/CVS/Entries.Extra.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019713/
+/cam5200_flash.c///1238019713/
+/cmd_stk52xx.c///1238019713/
+/cmd_tb5200.c///1238019713/
+/config.mk///1238019713/
+/mt48lc16m16a2-75.h///1238019713/
+/tqm5200.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries.Old u-boot-2009.03/board/tqc/tqm5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm5200/CVS/Entries.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/cam5200_flash.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/cmd_stk52xx.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/cmd_tb5200.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/mt48lc16m16a2-75.h/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tqm5200.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Repository u-boot-2009.03/board/tqc/tqm5200/CVS/Repository
--- u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm5200/CVS/Repository 2009-03-25 15:25:03.321922000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tqc/tqm5200
diff -Naur u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Root u-boot-2009.03/board/tqc/tqm5200/CVS/Root
--- u-boot-2009.03_orig/board/tqc/tqm5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm5200/CVS/Root 2009-03-25 15:25:03.321922000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries u-boot-2009.03/board/tqc/tqm8260/CVS/Entries
--- u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8260/CVS/Entries 2009-03-25 15:57:48.043722700 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm8260.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries.Extra u-boot-2009.03/board/tqc/tqm8260/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8260/CVS/Entries.Extra 2009-03-25 15:57:48.043722700 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/tqm8260.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries.Extra.Old u-boot-2009.03/board/tqc/tqm8260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8260/CVS/Entries.Extra.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/tqm8260.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries.Old u-boot-2009.03/board/tqc/tqm8260/CVS/Entries.Old
--- u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8260/CVS/Entries.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tqm8260.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Repository u-boot-2009.03/board/tqc/tqm8260/CVS/Repository
--- u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8260/CVS/Repository 2009-03-25 15:25:03.540670600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tqc/tqm8260
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Root u-boot-2009.03/board/tqc/tqm8260/CVS/Root
--- u-boot-2009.03_orig/board/tqc/tqm8260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8260/CVS/Root 2009-03-25 15:25:03.540670600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries u-boot-2009.03/board/tqc/tqm8272/CVS/Entries
--- u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8272/CVS/Entries 2009-03-25 15:57:48.121847200 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm8272.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm8272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries.Extra u-boot-2009.03/board/tqc/tqm8272/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8272/CVS/Entries.Extra 2009-03-25 15:57:48.121847200 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/nand.c///1238019713/
+/tqm8272.c///1238019713/
+/tqm8272.h///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries.Extra.Old u-boot-2009.03/board/tqc/tqm8272/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8272/CVS/Entries.Extra.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/nand.c///1238019713/
+/tqm8272.c///1238019713/
+/tqm8272.h///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries.Old u-boot-2009.03/board/tqc/tqm8272/CVS/Entries.Old
--- u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8272/CVS/Entries.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tqm8272.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tqm8272.h/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Repository u-boot-2009.03/board/tqc/tqm8272/CVS/Repository
--- u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8272/CVS/Repository 2009-03-25 15:25:03.634420000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tqc/tqm8272
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Root u-boot-2009.03/board/tqc/tqm8272/CVS/Root
--- u-boot-2009.03_orig/board/tqc/tqm8272/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8272/CVS/Root 2009-03-25 15:25:03.634420000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries u-boot-2009.03/board/tqc/tqm834x/CVS/Entries
--- u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm834x/CVS/Entries 2009-03-25 15:57:48.199971700 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm834x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries.Extra u-boot-2009.03/board/tqc/tqm834x/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm834x/CVS/Entries.Extra 2009-03-25 15:57:48.215596600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/pci.c///1238019713/
+/tqm834x.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries.Extra.Old u-boot-2009.03/board/tqc/tqm834x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm834x/CVS/Entries.Extra.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019713/
+/config.mk///1238019713/
+/pci.c///1238019713/
+/tqm834x.c///1238019713/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries.Old u-boot-2009.03/board/tqc/tqm834x/CVS/Entries.Old
--- u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm834x/CVS/Entries.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/tqm834x.c/1.1.1.1/Wed Mar 25 22:21:53 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Repository u-boot-2009.03/board/tqc/tqm834x/CVS/Repository
--- u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm834x/CVS/Repository 2009-03-25 15:25:03.743794300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tqc/tqm834x
diff -Naur u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Root u-boot-2009.03/board/tqc/tqm834x/CVS/Root
--- u-boot-2009.03_orig/board/tqc/tqm834x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm834x/CVS/Root 2009-03-25 15:25:03.743794300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries
--- u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries 2009-03-25 15:57:48.293721100 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm85xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries.Extra u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries.Extra 2009-03-25 15:57:48.293721100 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019714/
+/config.mk///1238019713/
+/law.c///1238019714/
+/nand.c///1238019714/
+/sdram.c///1238019714/
+/tlb.c///1238019714/
+/tqm85xx.c///1238019714/
+/u-boot.lds///1238019714/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries.Extra.Old u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries.Extra.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019714/
+/config.mk///1238019713/
+/law.c///1238019714/
+/nand.c///1238019714/
+/sdram.c///1238019714/
+/tlb.c///1238019714/
+/tqm85xx.c///1238019714/
+/u-boot.lds///1238019714/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries.Old u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm85xx/CVS/Entries.Old 2009-03-25 15:25:03.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:53 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/tqm85xx.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Repository u-boot-2009.03/board/tqc/tqm85xx/CVS/Repository
--- u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm85xx/CVS/Repository 2009-03-25 15:25:03.853168600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tqc/tqm85xx
diff -Naur u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Root u-boot-2009.03/board/tqc/tqm85xx/CVS/Root
--- u-boot-2009.03_orig/board/tqc/tqm85xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm85xx/CVS/Root 2009-03-25 15:25:03.853168600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries
--- u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries 2009-03-25 15:57:48.371845600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/load_sernum_ethaddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries.Extra u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries.Extra 2009-03-25 15:57:48.371845600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/load_sernum_ethaddr.c///1238019714/
+/tqm8xx.c///1238019714/
+/u-boot.lds///1238019714/
+/u-boot.lds.debug///1238019714/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries.Extra.Old u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries.Extra.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/load_sernum_ethaddr.c///1238019714/
+/tqm8xx.c///1238019714/
+/u-boot.lds///1238019714/
+/u-boot.lds.debug///1238019714/
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries.Old u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries.Old
--- u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8xx/CVS/Entries.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/load_sernum_ethaddr.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/tqm8xx.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Repository u-boot-2009.03/board/tqc/tqm8xx/CVS/Repository
--- u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8xx/CVS/Repository 2009-03-25 15:25:03.993792700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/tqc/tqm8xx
diff -Naur u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Root u-boot-2009.03/board/tqc/tqm8xx/CVS/Root
--- u-boot-2009.03_orig/board/tqc/tqm8xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/tqc/tqm8xx/CVS/Root 2009-03-25 15:25:03.993792700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/trab/CVS/Entries u-boot-2009.03/board/trab/CVS/Entries
--- u-boot-2009.03_orig/board/trab/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trab/CVS/Entries 2009-03-25 15:57:48.481219900 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Pt1000_temp_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.kbd/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/auto_update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_trab.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rs485.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rs485.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/trab.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/trab_fkt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsc2000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsc2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vfd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/trab/CVS/Entries.Extra u-boot-2009.03/board/trab/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/trab/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trab/CVS/Entries.Extra 2009-03-25 15:57:48.496844800 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019714/
+/Pt1000_temp_data.h///1238019714/
+/README.kbd///1238019714/
+/auto_update.c///1238019714/
+/cmd_trab.c///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/lowlevel_init.S///1238019714/
+/memory.c///1238019714/
+/rs485.c///1238019714/
+/rs485.h///1238019714/
+/trab.c///1238019714/
+/trab_fkt.c///1238019714/
+/tsc2000.c///1238019714/
+/tsc2000.h///1238019714/
+/u-boot.lds///1238019714/
+/vfd.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/trab/CVS/Entries.Extra.Old u-boot-2009.03/board/trab/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/trab/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trab/CVS/Entries.Extra.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019714/
+/Pt1000_temp_data.h///1238019714/
+/README.kbd///1238019714/
+/auto_update.c///1238019714/
+/cmd_trab.c///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/lowlevel_init.S///1238019714/
+/memory.c///1238019714/
+/rs485.c///1238019714/
+/rs485.h///1238019714/
+/trab.c///1238019714/
+/trab_fkt.c///1238019714/
+/tsc2000.c///1238019714/
+/tsc2000.h///1238019714/
+/u-boot.lds///1238019714/
+/vfd.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/trab/CVS/Entries.Old u-boot-2009.03/board/trab/CVS/Entries.Old
--- u-boot-2009.03_orig/board/trab/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trab/CVS/Entries.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/Pt1000_temp_data.h/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/README.kbd/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/auto_update.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/cmd_trab.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/memory.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/rs485.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/rs485.h/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/trab.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/trab_fkt.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/tsc2000.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/tsc2000.h/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/vfd.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/trab/CVS/Repository u-boot-2009.03/board/trab/CVS/Repository
--- u-boot-2009.03_orig/board/trab/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trab/CVS/Repository 2009-03-25 15:25:04.181291500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/trab
diff -Naur u-boot-2009.03_orig/board/trab/CVS/Root u-boot-2009.03/board/trab/CVS/Root
--- u-boot-2009.03_orig/board/trab/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trab/CVS/Root 2009-03-25 15:25:04.181291500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/trizepsiv/CVS/Entries u-boot-2009.03/board/trizepsiv/CVS/Entries
--- u-boot-2009.03_orig/board/trizepsiv/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trizepsiv/CVS/Entries 2009-03-25 15:57:48.559344400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/conxs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxavoltage.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/trizepsiv/CVS/Entries.Extra u-boot-2009.03/board/trizepsiv/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/trizepsiv/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trizepsiv/CVS/Entries.Extra 2009-03-25 15:57:48.559344400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/conxs.c///1238019714/
+/eeprom.c///1238019714/
+/lowlevel_init.S///1238019714/
+/pxavoltage.S///1238019714/
+/u-boot.lds///1238019714/
diff -Naur u-boot-2009.03_orig/board/trizepsiv/CVS/Entries.Extra.Old u-boot-2009.03/board/trizepsiv/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/trizepsiv/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trizepsiv/CVS/Entries.Extra.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/conxs.c///1238019714/
+/eeprom.c///1238019714/
+/lowlevel_init.S///1238019714/
+/pxavoltage.S///1238019714/
+/u-boot.lds///1238019714/
diff -Naur u-boot-2009.03_orig/board/trizepsiv/CVS/Entries.Old u-boot-2009.03/board/trizepsiv/CVS/Entries.Old
--- u-boot-2009.03_orig/board/trizepsiv/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trizepsiv/CVS/Entries.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/conxs.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/eeprom.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/pxavoltage.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/trizepsiv/CVS/Repository u-boot-2009.03/board/trizepsiv/CVS/Repository
--- u-boot-2009.03_orig/board/trizepsiv/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trizepsiv/CVS/Repository 2009-03-25 15:25:04.650038500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/trizepsiv
diff -Naur u-boot-2009.03_orig/board/trizepsiv/CVS/Root u-boot-2009.03/board/trizepsiv/CVS/Root
--- u-boot-2009.03_orig/board/trizepsiv/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/trizepsiv/CVS/Root 2009-03-25 15:25:04.634413600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/uc100/CVS/Entries u-boot-2009.03/board/uc100/CVS/Entries
--- u-boot-2009.03_orig/board/uc100/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc100/CVS/Entries 2009-03-25 15:57:48.637468900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uc100.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/uc100/CVS/Entries.Extra u-boot-2009.03/board/uc100/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/uc100/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc100/CVS/Entries.Extra 2009-03-25 15:57:48.637468900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/pcmcia.c///1238019714/
+/u-boot.lds///1238019714/
+/u-boot.lds.debug///1238019714/
+/uc100.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/uc100/CVS/Entries.Extra.Old u-boot-2009.03/board/uc100/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/uc100/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc100/CVS/Entries.Extra.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/pcmcia.c///1238019714/
+/u-boot.lds///1238019714/
+/u-boot.lds.debug///1238019714/
+/uc100.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/uc100/CVS/Entries.Old u-boot-2009.03/board/uc100/CVS/Entries.Old
--- u-boot-2009.03_orig/board/uc100/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc100/CVS/Entries.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/pcmcia.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/uc100.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/uc100/CVS/Repository u-boot-2009.03/board/uc100/CVS/Repository
--- u-boot-2009.03_orig/board/uc100/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc100/CVS/Repository 2009-03-25 15:25:04.775037700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/uc100
diff -Naur u-boot-2009.03_orig/board/uc100/CVS/Root u-boot-2009.03/board/uc100/CVS/Root
--- u-boot-2009.03_orig/board/uc100/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc100/CVS/Root 2009-03-25 15:25:04.775037700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/uc101/CVS/Entries u-boot-2009.03/board/uc101/CVS/Entries
--- u-boot-2009.03_orig/board/uc101/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc101/CVS/Entries 2009-03-25 15:57:48.699968500 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uc101.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/uc101/CVS/Entries.Extra u-boot-2009.03/board/uc101/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/uc101/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc101/CVS/Entries.Extra 2009-03-25 15:57:48.699968500 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/uc101.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/uc101/CVS/Entries.Extra.Old u-boot-2009.03/board/uc101/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/uc101/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc101/CVS/Entries.Extra.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/uc101.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/uc101/CVS/Entries.Old u-boot-2009.03/board/uc101/CVS/Entries.Old
--- u-boot-2009.03_orig/board/uc101/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc101/CVS/Entries.Old 2009-03-25 15:25:04.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/uc101.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/uc101/CVS/Repository u-boot-2009.03/board/uc101/CVS/Repository
--- u-boot-2009.03_orig/board/uc101/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc101/CVS/Repository 2009-03-25 15:25:04.884412000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/uc101
diff -Naur u-boot-2009.03_orig/board/uc101/CVS/Root u-boot-2009.03/board/uc101/CVS/Root
--- u-boot-2009.03_orig/board/uc101/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/uc101/CVS/Root 2009-03-25 15:25:04.884412000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/utx8245/CVS/Entries u-boot-2009.03/board/utx8245/CVS/Entries
--- u-boot-2009.03_orig/board/utx8245/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/utx8245/CVS/Entries 2009-03-25 15:57:48.762468100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/utx8245.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/utx8245/CVS/Entries.Extra u-boot-2009.03/board/utx8245/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/utx8245/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/utx8245/CVS/Entries.Extra 2009-03-25 15:57:48.762468100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/utx8245.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/utx8245/CVS/Entries.Extra.Old u-boot-2009.03/board/utx8245/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/utx8245/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/utx8245/CVS/Entries.Extra.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/utx8245.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/utx8245/CVS/Entries.Old u-boot-2009.03/board/utx8245/CVS/Entries.Old
--- u-boot-2009.03_orig/board/utx8245/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/utx8245/CVS/Entries.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/utx8245.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/utx8245/CVS/Repository u-boot-2009.03/board/utx8245/CVS/Repository
--- u-boot-2009.03_orig/board/utx8245/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/utx8245/CVS/Repository 2009-03-25 15:25:04.978161400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/utx8245
diff -Naur u-boot-2009.03_orig/board/utx8245/CVS/Root u-boot-2009.03/board/utx8245/CVS/Root
--- u-boot-2009.03_orig/board/utx8245/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/utx8245/CVS/Root 2009-03-25 15:25:04.978161400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/v37/CVS/Entries u-boot-2009.03/board/v37/CVS/Entries
--- u-boot-2009.03_orig/board/v37/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v37/CVS/Entries 2009-03-25 15:57:48.824967700 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v37.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/v37/CVS/Entries.Extra u-boot-2009.03/board/v37/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/v37/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v37/CVS/Entries.Extra 2009-03-25 15:57:48.824967700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/u-boot.lds///1238019714/
+/v37.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/v37/CVS/Entries.Extra.Old u-boot-2009.03/board/v37/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/v37/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v37/CVS/Entries.Extra.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/u-boot.lds///1238019714/
+/v37.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/v37/CVS/Entries.Old u-boot-2009.03/board/v37/CVS/Entries.Old
--- u-boot-2009.03_orig/board/v37/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v37/CVS/Entries.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/v37.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/v37/CVS/Repository u-boot-2009.03/board/v37/CVS/Repository
--- u-boot-2009.03_orig/board/v37/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v37/CVS/Repository 2009-03-25 15:25:05.087535700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/v37
diff -Naur u-boot-2009.03_orig/board/v37/CVS/Root u-boot-2009.03/board/v37/CVS/Root
--- u-boot-2009.03_orig/board/v37/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v37/CVS/Root 2009-03-25 15:25:05.087535700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/v38b/CVS/Entries u-boot-2009.03/board/v38b/CVS/Entries
--- u-boot-2009.03_orig/board/v38b/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v38b/CVS/Entries 2009-03-25 15:57:48.918717100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ethaddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v38b.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/v38b/CVS/Entries.Extra u-boot-2009.03/board/v38b/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/v38b/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v38b/CVS/Entries.Extra 2009-03-25 15:57:48.918717100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/ethaddr.c///1238019714/
+/v38b.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/v38b/CVS/Entries.Extra.Old u-boot-2009.03/board/v38b/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/v38b/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v38b/CVS/Entries.Extra.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/ethaddr.c///1238019714/
+/v38b.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/v38b/CVS/Entries.Old u-boot-2009.03/board/v38b/CVS/Entries.Old
--- u-boot-2009.03_orig/board/v38b/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v38b/CVS/Entries.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/ethaddr.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/v38b.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/v38b/CVS/Repository u-boot-2009.03/board/v38b/CVS/Repository
--- u-boot-2009.03_orig/board/v38b/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v38b/CVS/Repository 2009-03-25 15:25:05.196910000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/v38b
diff -Naur u-boot-2009.03_orig/board/v38b/CVS/Root u-boot-2009.03/board/v38b/CVS/Root
--- u-boot-2009.03_orig/board/v38b/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/v38b/CVS/Root 2009-03-25 15:25:05.196910000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/voiceblue/CVS/Entries u-boot-2009.03/board/voiceblue/CVS/Entries
--- u-boot-2009.03_orig/board/voiceblue/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/voiceblue/CVS/Entries 2009-03-25 15:57:48.996841600 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eeprom_start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/setup.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/voiceblue.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/voiceblue/CVS/Entries.Extra u-boot-2009.03/board/voiceblue/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/voiceblue/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/voiceblue/CVS/Entries.Extra 2009-03-25 15:57:49.012466500 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/eeprom.c///1238019714/
+/eeprom.lds///1238019714/
+/eeprom_start.S///1238019714/
+/setup.S///1238019714/
+/u-boot.lds///1238019714/
+/voiceblue.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/voiceblue/CVS/Entries.Extra.Old u-boot-2009.03/board/voiceblue/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/voiceblue/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/voiceblue/CVS/Entries.Extra.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/eeprom.c///1238019714/
+/eeprom.lds///1238019714/
+/eeprom_start.S///1238019714/
+/setup.S///1238019714/
+/u-boot.lds///1238019714/
+/voiceblue.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/voiceblue/CVS/Entries.Old u-boot-2009.03/board/voiceblue/CVS/Entries.Old
--- u-boot-2009.03_orig/board/voiceblue/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/voiceblue/CVS/Entries.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/eeprom.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/eeprom.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/eeprom_start.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/setup.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/voiceblue.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/voiceblue/CVS/Repository u-boot-2009.03/board/voiceblue/CVS/Repository
--- u-boot-2009.03_orig/board/voiceblue/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/voiceblue/CVS/Repository 2009-03-25 15:25:05.290659400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/voiceblue
diff -Naur u-boot-2009.03_orig/board/voiceblue/CVS/Root u-boot-2009.03/board/voiceblue/CVS/Root
--- u-boot-2009.03_orig/board/voiceblue/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/voiceblue/CVS/Root 2009-03-25 15:25:05.290659400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/w7o/CVS/Entries u-boot-2009.03/board/w7o/CVS/Entries
--- u-boot-2009.03_orig/board/w7o/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/w7o/CVS/Entries 2009-03-25 15:57:49.106215900 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_vpd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errors.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsboot.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post1.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vpd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vpd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/w7o.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/w7o.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/w7o/CVS/Entries.Extra u-boot-2009.03/board/w7o/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/w7o/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/w7o/CVS/Entries.Extra 2009-03-25 15:57:49.106215900 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019714/
+/cmd_vpd.c///1238019714/
+/config.mk///1238019714/
+/errors.h///1238019714/
+/flash.c///1238019714/
+/fpga.c///1238019714/
+/fsboot.c///1238019714/
+/init.S///1238019714/
+/post1.S///1238019714/
+/post2.c///1238019714/
+/u-boot.lds///1238019714/
+/u-boot.lds.debug///1238019714/
+/vpd.c///1238019714/
+/vpd.h///1238019714/
+/w7o.c///1238019714/
+/w7o.h///1238019714/
+/watchdog.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/w7o/CVS/Entries.Extra.Old u-boot-2009.03/board/w7o/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/w7o/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/w7o/CVS/Entries.Extra.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019714/
+/cmd_vpd.c///1238019714/
+/config.mk///1238019714/
+/errors.h///1238019714/
+/flash.c///1238019714/
+/fpga.c///1238019714/
+/fsboot.c///1238019714/
+/init.S///1238019714/
+/post1.S///1238019714/
+/post2.c///1238019714/
+/u-boot.lds///1238019714/
+/u-boot.lds.debug///1238019714/
+/vpd.c///1238019714/
+/vpd.h///1238019714/
+/w7o.c///1238019714/
+/w7o.h///1238019714/
+/watchdog.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/w7o/CVS/Entries.Old u-boot-2009.03/board/w7o/CVS/Entries.Old
--- u-boot-2009.03_orig/board/w7o/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/w7o/CVS/Entries.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/cmd_vpd.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/errors.h/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/fsboot.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/post1.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/post2.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/vpd.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/vpd.h/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/w7o.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/w7o.h/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/w7o/CVS/Repository u-boot-2009.03/board/w7o/CVS/Repository
--- u-boot-2009.03_orig/board/w7o/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/w7o/CVS/Repository 2009-03-25 15:25:05.603157400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/w7o
diff -Naur u-boot-2009.03_orig/board/w7o/CVS/Root u-boot-2009.03/board/w7o/CVS/Root
--- u-boot-2009.03_orig/board/w7o/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/w7o/CVS/Root 2009-03-25 15:25:05.603157400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/wepep250/CVS/Entries u-boot-2009.03/board/wepep250/CVS/Entries
--- u-boot-2009.03_orig/board/wepep250/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/wepep250/CVS/Entries 2009-03-25 15:57:49.199965300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intel.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/wepep250.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/wepep250/CVS/Entries.Extra u-boot-2009.03/board/wepep250/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/wepep250/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/wepep250/CVS/Entries.Extra 2009-03-25 15:57:49.199965300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/intel.h///1238019714/
+/lowlevel_init.S///1238019714/
+/u-boot.lds///1238019714/
+/wepep250.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/wepep250/CVS/Entries.Extra.Old u-boot-2009.03/board/wepep250/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/wepep250/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/wepep250/CVS/Entries.Extra.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019714/
+/config.mk///1238019714/
+/flash.c///1238019714/
+/intel.h///1238019714/
+/lowlevel_init.S///1238019714/
+/u-boot.lds///1238019714/
+/wepep250.c///1238019714/
diff -Naur u-boot-2009.03_orig/board/wepep250/CVS/Entries.Old u-boot-2009.03/board/wepep250/CVS/Entries.Old
--- u-boot-2009.03_orig/board/wepep250/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/wepep250/CVS/Entries.Old 2009-03-25 15:25:05.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/intel.h/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/wepep250.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+D
diff -Naur u-boot-2009.03_orig/board/wepep250/CVS/Repository u-boot-2009.03/board/wepep250/CVS/Repository
--- u-boot-2009.03_orig/board/wepep250/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/wepep250/CVS/Repository 2009-03-25 15:25:05.821906000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/wepep250
diff -Naur u-boot-2009.03_orig/board/wepep250/CVS/Root u-boot-2009.03/board/wepep250/CVS/Root
--- u-boot-2009.03_orig/board/wepep250/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/wepep250/CVS/Root 2009-03-25 15:25:05.821906000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/westel/CVS/Entries u-boot-2009.03/board/westel/CVS/Entries
--- u-boot-2009.03_orig/board/westel/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/CVS/Entries 2009-03-25 15:25:06.103154200 -0700
@@ -0,0 +1 @@
+D/amx860////
diff -Naur u-boot-2009.03_orig/board/westel/CVS/Entries.Extra u-boot-2009.03/board/westel/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/westel/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/CVS/Entries.Extra 2009-03-25 15:25:06.103154200 -0700
@@ -0,0 +1 @@
+D/amx860////
diff -Naur u-boot-2009.03_orig/board/westel/CVS/Repository u-boot-2009.03/board/westel/CVS/Repository
--- u-boot-2009.03_orig/board/westel/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/CVS/Repository 2009-03-25 15:25:05.962530100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/westel
diff -Naur u-boot-2009.03_orig/board/westel/CVS/Root u-boot-2009.03/board/westel/CVS/Root
--- u-boot-2009.03_orig/board/westel/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/CVS/Root 2009-03-25 15:25:05.962530100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/westel/amx860/CVS/Entries u-boot-2009.03/board/westel/amx860/CVS/Entries
--- u-boot-2009.03_orig/board/westel/amx860/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/amx860/CVS/Entries 2009-03-25 15:57:49.293714700 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/amx860.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/westel/amx860/CVS/Entries.Extra u-boot-2009.03/board/westel/amx860/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/westel/amx860/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/amx860/CVS/Entries.Extra 2009-03-25 15:57:49.293714700 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019715/
+/amx860.c///1238019714/
+/config.mk///1238019715/
+/flash.c///1238019715/
+/u-boot.lds///1238019715/
+/u-boot.lds.debug///1238019715/
diff -Naur u-boot-2009.03_orig/board/westel/amx860/CVS/Entries.Extra.Old u-boot-2009.03/board/westel/amx860/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/westel/amx860/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/amx860/CVS/Entries.Extra.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019715/
+/amx860.c///1238019714/
+/config.mk///1238019715/
+/flash.c///1238019715/
+/u-boot.lds///1238019715/
+/u-boot.lds.debug///1238019715/
diff -Naur u-boot-2009.03_orig/board/westel/amx860/CVS/Entries.Old u-boot-2009.03/board/westel/amx860/CVS/Entries.Old
--- u-boot-2009.03_orig/board/westel/amx860/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/amx860/CVS/Entries.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/amx860.c/1.1.1.1/Wed Mar 25 22:21:54 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/westel/amx860/CVS/Repository u-boot-2009.03/board/westel/amx860/CVS/Repository
--- u-boot-2009.03_orig/board/westel/amx860/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/amx860/CVS/Repository 2009-03-25 15:25:05.978155000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/westel/amx860
diff -Naur u-boot-2009.03_orig/board/westel/amx860/CVS/Root u-boot-2009.03/board/westel/amx860/CVS/Root
--- u-boot-2009.03_orig/board/westel/amx860/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/westel/amx860/CVS/Root 2009-03-25 15:25:05.978155000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xaeniax/CVS/Entries u-boot-2009.03/board/xaeniax/CVS/Entries
--- u-boot-2009.03_orig/board/xaeniax/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xaeniax/CVS/Entries 2009-03-25 15:57:49.371839200 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xaeniax.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xaeniax/CVS/Entries.Extra u-boot-2009.03/board/xaeniax/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xaeniax/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xaeniax/CVS/Entries.Extra 2009-03-25 15:57:49.371839200 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/flash.c///1238019715/
+/lowlevel_init.S///1238019715/
+/u-boot.lds///1238019715/
+/xaeniax.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xaeniax/CVS/Entries.Extra.Old u-boot-2009.03/board/xaeniax/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xaeniax/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xaeniax/CVS/Entries.Extra.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/flash.c///1238019715/
+/lowlevel_init.S///1238019715/
+/u-boot.lds///1238019715/
+/xaeniax.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xaeniax/CVS/Entries.Old u-boot-2009.03/board/xaeniax/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xaeniax/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xaeniax/CVS/Entries.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xaeniax.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xaeniax/CVS/Repository u-boot-2009.03/board/xaeniax/CVS/Repository
--- u-boot-2009.03_orig/board/xaeniax/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xaeniax/CVS/Repository 2009-03-25 15:25:06.134404000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xaeniax
diff -Naur u-boot-2009.03_orig/board/xaeniax/CVS/Root u-boot-2009.03/board/xaeniax/CVS/Root
--- u-boot-2009.03_orig/board/xaeniax/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xaeniax/CVS/Root 2009-03-25 15:25:06.134404000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xes/CVS/Entries u-boot-2009.03/board/xes/CVS/Entries
--- u-boot-2009.03_orig/board/xes/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/CVS/Entries 2009-03-25 15:25:06.821899600 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/xpedite5200////
+D/xpedite5370////
diff -Naur u-boot-2009.03_orig/board/xes/CVS/Entries.Extra u-boot-2009.03/board/xes/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xes/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/CVS/Entries.Extra 2009-03-25 15:25:06.837524500 -0700
@@ -0,0 +1,3 @@
+D/common////
+D/xpedite5200////
+D/xpedite5370////
diff -Naur u-boot-2009.03_orig/board/xes/CVS/Repository u-boot-2009.03/board/xes/CVS/Repository
--- u-boot-2009.03_orig/board/xes/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/CVS/Repository 2009-03-25 15:25:06.243778300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xes
diff -Naur u-boot-2009.03_orig/board/xes/CVS/Root u-boot-2009.03/board/xes/CVS/Root
--- u-boot-2009.03_orig/board/xes/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/CVS/Root 2009-03-25 15:25:06.243778300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xes/common/CVS/Entries u-boot-2009.03/board/xes/common/CVS/Entries
--- u-boot-2009.03_orig/board/xes/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/common/CVS/Entries 2009-03-25 15:57:49.434338800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actl_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_8572_clk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_85xx_ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_85xx_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xes/common/CVS/Entries.Extra u-boot-2009.03/board/xes/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xes/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/common/CVS/Entries.Extra 2009-03-25 15:57:49.449963700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019715/
+/actl_nand.c///1238019715/
+/fsl_8572_clk.c///1238019715/
+/fsl_85xx_ddr.c///1238019715/
+/fsl_85xx_pci.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xes/common/CVS/Entries.Extra.Old u-boot-2009.03/board/xes/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xes/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/common/CVS/Entries.Extra.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019715/
+/actl_nand.c///1238019715/
+/fsl_8572_clk.c///1238019715/
+/fsl_85xx_ddr.c///1238019715/
+/fsl_85xx_pci.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xes/common/CVS/Entries.Old u-boot-2009.03/board/xes/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xes/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/common/CVS/Entries.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/actl_nand.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/fsl_8572_clk.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/fsl_85xx_ddr.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/fsl_85xx_pci.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xes/common/CVS/Repository u-boot-2009.03/board/xes/common/CVS/Repository
--- u-boot-2009.03_orig/board/xes/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/common/CVS/Repository 2009-03-25 15:25:06.275028100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xes/common
diff -Naur u-boot-2009.03_orig/board/xes/common/CVS/Root u-boot-2009.03/board/xes/common/CVS/Root
--- u-boot-2009.03_orig/board/xes/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/common/CVS/Root 2009-03-25 15:25:06.275028100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries u-boot-2009.03/board/xes/xpedite5200/CVS/Entries
--- u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5200/CVS/Entries 2009-03-25 15:57:49.512463300 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xpedite5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries.Extra u-boot-2009.03/board/xes/xpedite5200/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5200/CVS/Entries.Extra 2009-03-25 15:57:49.512463300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/ddr.c///1238019715/
+/law.c///1238019715/
+/tlb.c///1238019715/
+/u-boot.lds///1238019715/
+/xpedite5200.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries.Extra.Old u-boot-2009.03/board/xes/xpedite5200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5200/CVS/Entries.Extra.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/ddr.c///1238019715/
+/law.c///1238019715/
+/tlb.c///1238019715/
+/u-boot.lds///1238019715/
+/xpedite5200.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries.Old u-boot-2009.03/board/xes/xpedite5200/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5200/CVS/Entries.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xpedite5200.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Repository u-boot-2009.03/board/xes/xpedite5200/CVS/Repository
--- u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5200/CVS/Repository 2009-03-25 15:25:06.478151800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xes/xpedite5200
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Root u-boot-2009.03/board/xes/xpedite5200/CVS/Root
--- u-boot-2009.03_orig/board/xes/xpedite5200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5200/CVS/Root 2009-03-25 15:25:06.478151800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries u-boot-2009.03/board/xes/xpedite5370/CVS/Entries
--- u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5370/CVS/Entries 2009-03-25 15:57:49.590587800 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xpedite5370.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries.Extra u-boot-2009.03/board/xes/xpedite5370/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5370/CVS/Entries.Extra 2009-03-25 15:57:49.590587800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/ddr.c///1238019715/
+/law.c///1238019715/
+/tlb.c///1238019715/
+/u-boot.lds///1238019715/
+/xpedite5370.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries.Extra.Old u-boot-2009.03/board/xes/xpedite5370/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5370/CVS/Entries.Extra.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/ddr.c///1238019715/
+/law.c///1238019715/
+/tlb.c///1238019715/
+/u-boot.lds///1238019715/
+/xpedite5370.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries.Old u-boot-2009.03/board/xes/xpedite5370/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5370/CVS/Entries.Old 2009-03-25 15:25:06.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/ddr.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/law.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xpedite5370.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Repository u-boot-2009.03/board/xes/xpedite5370/CVS/Repository
--- u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5370/CVS/Repository 2009-03-25 15:25:06.696900400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xes/xpedite5370
diff -Naur u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Root u-boot-2009.03/board/xes/xpedite5370/CVS/Root
--- u-boot-2009.03_orig/board/xes/xpedite5370/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xes/xpedite5370/CVS/Root 2009-03-25 15:25:06.696900400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/CVS/Entries u-boot-2009.03/board/xilinx/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/CVS/Entries 2009-03-25 15:25:08.259390400 -0700
@@ -0,0 +1,8 @@
+D/common////
+D/microblaze-generic////
+D/ml300////
+D/ml507////
+D/ppc405-generic////
+D/ppc440-generic////
+D/xilinx_enet////
+D/xilinx_iic////
diff -Naur u-boot-2009.03_orig/board/xilinx/CVS/Entries.Extra u-boot-2009.03/board/xilinx/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/CVS/Entries.Extra 2009-03-25 15:25:08.259390400 -0700
@@ -0,0 +1,8 @@
+D/common////
+D/microblaze-generic////
+D/ml300////
+D/ml507////
+D/ppc405-generic////
+D/ppc440-generic////
+D/xilinx_enet////
+D/xilinx_iic////
diff -Naur u-boot-2009.03_orig/board/xilinx/CVS/Repository u-boot-2009.03/board/xilinx/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/CVS/Repository 2009-03-25 15:25:06.868774300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx
diff -Naur u-boot-2009.03_orig/board/xilinx/CVS/Root u-boot-2009.03/board/xilinx/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/CVS/Root 2009-03-25 15:25:06.868774300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/common/CVS/Entries u-boot-2009.03/board/xilinx/common/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/common/CVS/Entries 2009-03-31 14:48:17.429767200 -0700
@@ -0,0 +1,16 @@
+/xbasic_types.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xbasic_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xbuf_descriptor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel_i.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xpacket_fifo_v1_00_b.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xpacket_fifo_v1_00_b.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xstatus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xversion.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xversion.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel_sg.c/1.1.1.1/Tue Mar 31 21:48:17 2009//T1.1.1.1
+/xipif_v1_23_b.c/1.1.1.1/Tue Mar 31 21:48:17 2009//T1.1.1.1
+/xipif_v1_23_b.h/1.1.1.1/Tue Mar 31 21:48:17 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/common/CVS/Entries.Extra u-boot-2009.03/board/xilinx/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/common/CVS/Entries.Extra 2009-03-31 14:48:17.445392000 -0700
@@ -0,0 +1,15 @@
+/xbasic_types.c///1238019715/
+/xbasic_types.h///1238019715/
+/xbuf_descriptor.h///1238019715/
+/xdma_channel.c///1238019715/
+/xdma_channel.h///1238019715/
+/xdma_channel_i.h///1238019715/
+/xio.h///1238019715/
+/xpacket_fifo_v1_00_b.c///1238019715/
+/xpacket_fifo_v1_00_b.h///1238019715/
+/xstatus.h///1238019715/
+/xversion.c///1238019715/
+/xversion.h///1238019715/
+/xdma_channel_sg.c///1238019715/
+/xipif_v1_23_b.c///1238019715/
+/xipif_v1_23_b.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/common/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/common/CVS/Entries.Extra.Old 2009-03-25 17:51:40.000000000 -0700
@@ -0,0 +1,15 @@
+/xbasic_types.c///1238019715/
+/xbasic_types.h///1238019715/
+/xbuf_descriptor.h///1238019715/
+/xdma_channel.c///1238019715/
+/xdma_channel.h///1238019715/
+/xdma_channel_i.h///1238019715/
+/xio.h///1238019715/
+/xpacket_fifo_v1_00_b.c///1238019715/
+/xpacket_fifo_v1_00_b.h///1238019715/
+/xstatus.h///1238019715/
+/xversion.c///1238019715/
+/xversion.h///1238019715/
+/xdma_channel_sg.c///1238028700/
+/xipif_v1_23_b.c///1238028700/
+/xipif_v1_23_b.h///1238028700/
diff -Naur u-boot-2009.03_orig/board/xilinx/common/CVS/Entries.Old u-boot-2009.03/board/xilinx/common/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/common/CVS/Entries.Old 2009-03-25 17:51:40.000000000 -0700
@@ -0,0 +1,16 @@
+/xbasic_types.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xbasic_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xbuf_descriptor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel_i.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xpacket_fifo_v1_00_b.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xpacket_fifo_v1_00_b.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xstatus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xversion.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xversion.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xdma_channel_sg.c/1.2/Thu Mar 26 00:51:40 2009//
+/xipif_v1_23_b.c/1.2/Thu Mar 26 00:51:40 2009//
+/xipif_v1_23_b.h/1.2/Thu Mar 26 00:51:40 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/common/CVS/Repository u-boot-2009.03/board/xilinx/common/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/common/CVS/Repository 2009-03-25 15:25:06.900024100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/common
diff -Naur u-boot-2009.03_orig/board/xilinx/common/CVS/Root u-boot-2009.03/board/xilinx/common/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/common/CVS/Root 2009-03-25 15:25:06.900024100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/common/xdma_channel_sg.c u-boot-2009.03/board/xilinx/common/xdma_channel_sg.c
--- u-boot-2009.03_orig/board/xilinx/common/xdma_channel_sg.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/xilinx/common/xdma_channel_sg.c 2009-03-31 14:48:17.226644800 -0700
@@ -1,1317 +1,1317 @@
-/* $Id: xdma_channel_sg.c,v 1.6 2003/02/03 19:50:33 moleres Exp $ */
-/******************************************************************************
-*
-* Author: Xilinx, Inc.
-*
-*
-* 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.
-*
-*
-* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
-* COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
-* ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD,
-* XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE
-* FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING
-* ANY THIRD PARTY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
-* XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
-* THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY
-* WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM
-* CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE.
-*
-*
-* Xilinx hardware products are not intended for use in life support
-* appliances, devices, or systems. Use in such applications is
-* expressly prohibited.
-*
-*
-* (c) Copyright 2002-2004 Xilinx Inc.
-* All rights reserved.
-*
-*
-* 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.,
-* 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-* FILENAME:
-*
-* xdma_channel_sg.c
-*
-* DESCRIPTION:
-*
-* This file contains the implementation of the XDmaChannel component which is
-* related to scatter gather operations.
-*
-* Scatter Gather Operations
-*
-* The DMA channel may support scatter gather operations. A scatter gather
-* operation automates the DMA channel such that multiple buffers can be
-* sent or received with minimal software interaction with the hardware. Buffer
-* descriptors, contained in the XBufDescriptor component, are used by the
-* scatter gather operations of the DMA channel to describe the buffers to be
-* processed.
-*
-* Scatter Gather List Operations
-*
-* A scatter gather list may be supported by each DMA channel. The scatter
-* gather list allows buffer descriptors to be put into the list by a device
-* driver which requires scatter gather. The hardware processes the buffer
-* descriptors which are contained in the list and modifies the buffer
-* descriptors to reflect the status of the DMA operations. The device driver
-* is notified by interrupt that specific DMA events occur including scatter
-* gather events. The device driver removes the completed buffer descriptors
-* from the scatter gather list to evaluate the status of each DMA operation.
-*
-* The scatter gather list is created and buffer descriptors are inserted into
-* the list. Buffer descriptors are never removed from the list after it's
-* creation such that a put operation copies from a temporary buffer descriptor
-* to a buffer descriptor in the list. Get operations don't copy from the list
-* to a temporary, but return a pointer to the buffer descriptor in the list.
-* A buffer descriptor in the list may be locked to prevent it from being
-* overwritten by a put operation. This allows the device driver to get a
-* descriptor from a scatter gather list and prevent it from being overwritten
-* until the buffer associated with the buffer descriptor has been processed.
-*
-* The get and put functions only operate on the list and are asynchronous from
-* the hardware which may be using the list of descriptors. This is important
-* because there are no checks in the get and put functions to ensure that the
-* hardware has processed the descriptors. This must be handled by the driver
-* using the DMA scatter gather channel through the use of the other functions.
-* When a scatter gather operation is started, the start function does ensure
-* that the descriptor to start has not already been processed by the hardware
-* and is not the first of a series of descriptors that have not been committed
-* yet.
-*
-* Descriptors are put into the list but not marked as ready to use by the
-* hardware until a commit operation is done. This allows multiple descriptors
-* which may contain a single packet of information for a protocol to be
-* guaranteed not to cause any underflow conditions during transmission. The
-* hardware design only allows descriptors to cause it to stop after a descriptor
-* has been processed rather than before it is processed. A series of
-* descriptors are put into the list followed by a commit operation, or each
-* descriptor may be commited. A commit operation is performed by changing a
-* single descriptor, the first of the series of puts, to indicate that the
-* hardware may now use all descriptors after it. The last descriptor in the
-* list is always set to cause the hardware to stop after it is processed.
-*
-* Typical Scatter Gather Processing
-*
-* The following steps illustrate the typical processing to use the
-* scatter gather features of a DMA channel.
-*
-* 1. Create a scatter gather list for the DMA channel which puts empty buffer
-* descriptors into the list.
-* 2. Create buffer descriptors which describe the buffers to be filled with
-* receive data or the buffers which contain data to be sent.
-* 3. Put buffer descriptors into the DMA channel scatter list such that scatter
-* gather operations are requested.
-* 4. Commit the buffer descriptors in the list such that they are ready to be
-* used by the DMA channel hardware.
-* 5. Start the scatter gather operations of the DMA channel.
-* 6. Process any interrupts which occur as a result of the scatter gather
-* operations or poll the DMA channel to determine the status. This may
-* be accomplished by getting the packet count for the channel and then
-* getting the appropriate number of descriptors from the list for that
-* number of packets.
-*
-* Minimizing Interrupts
-*
-* The Scatter Gather operating mode is designed to reduce the amount of CPU
-* throughput necessary to manage the hardware for devices. A key to the CPU
-* throughput is the number and rate of interrupts that the CPU must service.
-* Devices with higher data rates can cause larger numbers of interrupts and
-* higher frequency interrupts. Ideally the number of interrupts can be reduced
-* by only generating an interrupt when a specific amount of data has been
-* received from the interface. This design suffers from a lack of interrupts
-* when the amount of data received is less than the specified amount of data
-* to generate an interrupt. In order to help minimize the number of interrupts
-* which the CPU must service, an algorithm referred to as "interrupt coalescing"
-* is utilized.
-*
-* Interrupt Coalescing
-*
-* The principle of interrupt coalescing is to wait before generating an
-* interrupt until a certain number of packets have been received or sent. An
-* interrupt is also generated if a smaller number of packets have been received
-* followed by a certain period of time with no packet reception. This is a
-* trade-off of latency for bandwidth and is accomplished using several
-* mechanisms of the hardware including a counter for packets received or
-* transmitted and a packet timer. These two hardware mechanisms work in
-* combination to allow a reduction in the number of interrupts processed by the
-* CPU for packet reception.
-*
-* Unserviced Packet Count
-*
-* The purpose of the packet counter is to count the number of packets received
-* or transmitted and provide an interrupt when a specific number of packets
-* have been processed by the hardware. An interrupt is generated whenever the
-* counter is greater than or equal to the Packet Count Threshold. This counter
-* contains an accurate count of the number of packets that the hardware has
-* processed, either received or transmitted, and the software has not serviced.
-*
-* The packet counter allows the number of interrupts to be reduced by waiting
-* to generate an interrupt until enough packets are received. For packet
-* reception, packet counts of less than the number to generate an interrupt
-* would not be serviced without the addition of a packet timer. This counter is
-* continuously updated by the hardware, not latched to the value at the time
-* the interrupt occurred.
-*
-* The packet counter can be used within the interrupt service routine for the
-* device to reduce the number of interrupts. The interrupt service routine
-* loops while performing processing for each packet which has been received or
-* transmitted and decrements the counter by a specified value. At the same time,
-* the hardware is possibly continuing to receive or transmit more packets such
-* that the software may choose, based upon the value in the packet counter, to
-* remain in the interrupt service routine rather than exiting and immediately
-* returning. This feature should be used with caution as reducing the number of
-* interrupts is beneficial, but unbounded interrupt processing is not desirable.
-*
-* Since the hardware may be incrementing the packet counter simultaneously
-* with the software decrementing the counter, there is a need for atomic
-* operations. The hardware ensures that the operation is atomic such that
-* simultaneous accesses are properly handled.
-*
-* Packet Wait Bound
-*
-* The purpose of the packet wait bound is to augment the unserviced packet
-* count. Whenever there is no pending interrupt for the channel and the
-* unserviced packet count is non-zero, a timer starts counting timeout at the
-* value contained the the packet wait bound register. If the timeout is
-* reached, an interrupt is generated such that the software may service the
-* data which was buffered.
-*
-* NOTES:
-*
-* Special Test Conditions:
-*
-* The scatter gather list processing must be thoroughly tested if changes are
-* made. Testing should include putting and committing single descriptors and
-* putting multiple descriptors followed by a single commit. There are some
-* conditions in the code which handle the exception conditions.
-*
-* The Put Pointer points to the next location in the descriptor list to copy
-* in a new descriptor. The Get Pointer points to the next location in the
-* list to get a descriptor from. The Get Pointer only allows software to
-* have a traverse the list after the hardware has finished processing some
-* number of descriptors. The Commit Pointer points to the descriptor in the
-* list which is to be committed. It is also used to determine that no
-* descriptor is waiting to be commited (NULL). The Last Pointer points to
-* the last descriptor that was put into the list. It typically points
-* to the previous descriptor to the one pointed to by the Put Pointer.
-* Comparisons are done between these pointers to determine when the following
-* special conditions exist.
-
-* Single Put And Commit
-*
-* The buffer descriptor is ready to be used by the hardware so it is important
-* for the descriptor to not appear to be waiting to be committed. The commit
-* pointer is reset when a commit is done indicating there are no descriptors
-* waiting to be committed. In all cases but this one, the descriptor is
-* changed to cause the hardware to go to the next descriptor after processing
-* this one. But in this case, this is the last descriptor in the list such
-* that it must not be changed.
-*
-* 3 Or More Puts And Commit
-*
-* A series of 3 or more puts followed by a single commit is different in that
-* only the 1st descriptor put into the list is changed when the commit is done.
-* This requires each put starting on the 3rd to change the previous descriptor
-* so that it allows the hardware to continue to the next descriptor in the list.
-*
-* The 1st Put Following A Commit
-*
-* The commit caused the commit pointer to be NULL indicating that there are no
-* descriptors waiting to be committed. It is necessary for the next put to set
-* the commit pointer so that a commit must follow the put for the hardware to
-* use the descriptor.
-*
-* <pre>
-* MODIFICATION HISTORY:
-*
-* Ver Who Date Changes
-* ----- ---- -------- ------------------------------------------------------
-* 1.00a rpm 02/03/03 Removed the XST_DMA_SG_COUNT_EXCEEDED return code
-* from SetPktThreshold.
-* </pre>
-*
-******************************************************************************/
-
-/***************************** Include Files *********************************/
-
-#include "xdma_channel.h"
-#include "xbasic_types.h"
-#include "xio.h"
-#include "xbuf_descriptor.h"
-#include "xstatus.h"
-
-/************************** Constant Definitions *****************************/
-
-#define XDC_SWCR_SG_ENABLE_MASK 0x80000000UL /* scatter gather enable */
-
-/**************************** Type Definitions *******************************/
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/* the following macro copies selected fields of a buffer descriptor to another
- * buffer descriptor, this was provided by the buffer descriptor component but
- * was moved here since it is only used internally to this component and since
- * it does not copy all fields
- */
-#define CopyBufferDescriptor(InstancePtr, DestinationPtr) \
-{ \
- *((u32 *)DestinationPtr + XBD_CONTROL_OFFSET) = \
- *((u32 *)InstancePtr + XBD_CONTROL_OFFSET); \
- *((u32 *)DestinationPtr + XBD_SOURCE_OFFSET) = \
- *((u32 *)InstancePtr + XBD_SOURCE_OFFSET); \
- *((u32 *)DestinationPtr + XBD_DESTINATION_OFFSET) = \
- *((u32 *)InstancePtr + XBD_DESTINATION_OFFSET); \
- *((u32 *)DestinationPtr + XBD_LENGTH_OFFSET) = \
- *((u32 *)InstancePtr + XBD_LENGTH_OFFSET); \
- *((u32 *)DestinationPtr + XBD_STATUS_OFFSET) = \
- *((u32 *)InstancePtr + XBD_STATUS_OFFSET); \
- *((u32 *)DestinationPtr + XBD_DEVICE_STATUS_OFFSET) = \
- *((u32 *)InstancePtr + XBD_DEVICE_STATUS_OFFSET); \
- *((u32 *)DestinationPtr + XBD_ID_OFFSET) = \
- *((u32 *)InstancePtr + XBD_ID_OFFSET); \
- *((u32 *)DestinationPtr + XBD_FLAGS_OFFSET) = \
- *((u32 *)InstancePtr + XBD_FLAGS_OFFSET); \
- *((u32 *)DestinationPtr + XBD_RQSTED_LENGTH_OFFSET) = \
- *((u32 *)InstancePtr + XBD_RQSTED_LENGTH_OFFSET); \
-}
-
-/************************** Variable Definitions *****************************/
-
-/************************** Function Prototypes ******************************/
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_SgStart
-*
-* DESCRIPTION:
-*
-* This function starts a scatter gather operation for a scatter gather
-* DMA channel. The first buffer descriptor in the buffer descriptor list
-* will be started with the scatter gather operation. A scatter gather list
-* should have previously been created for the DMA channel and buffer
-* descriptors put into the scatter gather list such that there are scatter
-* operations ready to be performed.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* RETURN VALUE:
-*
-* A status containing XST_SUCCESS if scatter gather was started successfully
-* for the DMA channel.
-*
-* A value of XST_DMA_SG_NO_LIST indicates the scatter gather list has not
-* been created.
-*
-* A value of XST_DMA_SG_LIST_EMPTY indicates scatter gather was not started
-* because the scatter gather list of the DMA channel does not contain any
-* buffer descriptors that are ready to be processed by the hardware.
-*
-* A value of XST_DMA_SG_IS_STARTED indicates scatter gather was not started
-* because the scatter gather was not stopped, but was already started.
-*
-* A value of XST_DMA_SG_BD_NOT_COMMITTED indicates the buffer descriptor of
-* scatter gather list which was to be started is not committed to the list.
-* This status is more likely if this function is being called from an ISR
-* and non-ISR processing is putting descriptors into the list.
-*
-* A value of XST_DMA_SG_NO_DATA indicates that the buffer descriptor of the
-* scatter gather list which was to be started had already been used by the
-* hardware for a DMA transfer that has been completed.
-*
-* NOTES:
-*
-* It is the responsibility of the caller to get all the buffer descriptors
-* after performing a stop operation and before performing a start operation.
-* If buffer descriptors are not retrieved between stop and start operations,
-* buffer descriptors may be processed by the hardware more than once.
-*
-******************************************************************************/
-XStatus
-XDmaChannel_SgStart(XDmaChannel * InstancePtr)
-{
- u32 Register;
- XBufDescriptor *LastDescriptorPtr;
-
- /* assert to verify input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* if a scatter gather list has not been created yet, return a status */
-
- if (InstancePtr->TotalDescriptorCount == 0) {
- return XST_DMA_SG_NO_LIST;
- }
-
- /* if the scatter gather list exists but is empty then return a status */
-
- if (XDmaChannel_IsSgListEmpty(InstancePtr)) {
- return XST_DMA_SG_LIST_EMPTY;
- }
-
- /* if scatter gather is busy for the DMA channel, return a status because
- * restarting it could lose data
- */
-
- Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_DMAS_REG_OFFSET);
- if (Register & XDC_DMASR_SG_BUSY_MASK) {
- return XST_DMA_SG_IS_STARTED;
- }
-
- /* get the address of the last buffer descriptor which the DMA hardware
- * finished processing
- */
- LastDescriptorPtr =
- (XBufDescriptor *) XIo_In32(InstancePtr->RegBaseAddress +
- XDC_BDA_REG_OFFSET);
-
- /* setup the first buffer descriptor that will be sent when the scatter
- * gather channel is enabled, this is only necessary one time since
- * the BDA register of the channel maintains the last buffer descriptor
- * processed
- */
- if (LastDescriptorPtr == NULL) {
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_BDA_REG_OFFSET,
- (u32) InstancePtr->GetPtr);
- } else {
- XBufDescriptor *NextDescriptorPtr;
-
- /* get the next descriptor to be started, if the status indicates it
- * hasn't already been used by the h/w, then it's OK to start it,
- * s/w sets the status of each descriptor to busy and then h/w clears
- * the busy when it is complete
- */
- NextDescriptorPtr =
- XBufDescriptor_GetNextPtr(LastDescriptorPtr);
-
- if ((XBufDescriptor_GetStatus(NextDescriptorPtr) &
- XDC_DMASR_BUSY_MASK) == 0) {
- return XST_DMA_SG_NO_DATA;
- }
- /* don't start the DMA SG channel if the descriptor to be processed
- * by h/w is to be committed by the s/w, this function can be called
- * such that it interrupts a thread that was putting into the list
- */
- if (NextDescriptorPtr == InstancePtr->CommitPtr) {
- return XST_DMA_SG_BD_NOT_COMMITTED;
- }
- }
-
- /* start the scatter gather operation by clearing the stop bit in the
- * control register and setting the enable bit in the s/w control register,
- * both of these are necessary to cause it to start, right now the order of
- * these statements is important, the software control register should be
- * set 1st. The other order can cause the CPU to have a loss of sync
- * because it cannot read/write the register while the DMA operation is
- * running
- */
-
- Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET);
-
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET,
- Register | XDC_SWCR_SG_ENABLE_MASK);
-
- Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_DMAC_REG_OFFSET);
-
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_DMAC_REG_OFFSET,
- Register & ~XDC_DMACR_SG_DISABLE_MASK);
-
- /* indicate the DMA channel scatter gather operation was started
- * successfully
- */
- return XST_SUCCESS;
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_SgStop
-*
-* DESCRIPTION:
-*
-* This function stops a scatter gather operation for a scatter gather
-* DMA channel. This function starts the process of stopping a scatter
-* gather operation that is in progress and waits for the stop to be completed.
-* Since it waits for the operation to stopped before returning, this function
-* could take an amount of time relative to the size of the DMA scatter gather
-* operation which is in progress. The scatter gather list of the DMA channel
-* is not modified by this function such that starting the scatter gather
-* channel after stopping it will cause it to resume. This operation is
-* considered to be a graceful stop in that the scatter gather operation
-* completes the current buffer descriptor before stopping.
-*
-* If the interrupt is enabled, an interrupt will be generated when the
-* operation is stopped and the caller is responsible for handling the
-* interrupt.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* BufDescriptorPtr is also a return value which contains a pointer to the
-* buffer descriptor which the scatter gather operation completed when it
-* was stopped.
-*
-* RETURN VALUE:
-*
-* A status containing XST_SUCCESS if scatter gather was stopped successfully
-* for the DMA channel.
-*
-* A value of XST_DMA_SG_IS_STOPPED indicates scatter gather was not stoppped
-* because the scatter gather is not started, but was already stopped.
-*
-* BufDescriptorPtr contains a pointer to the buffer descriptor which was
-* completed when the operation was stopped.
-*
-* NOTES:
-*
-* This function implements a loop which polls the hardware for an infinite
-* amount of time. If the hardware is not operating correctly, this function
-* may never return.
-*
-******************************************************************************/
-XStatus
-XDmaChannel_SgStop(XDmaChannel * InstancePtr,
- XBufDescriptor ** BufDescriptorPtr)
-{
- u32 Register;
-
- /* assert to verify input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(BufDescriptorPtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* get the contents of the software control register, if scatter gather is not
- * enabled (started), then return a status because the disable acknowledge
- * would not be generated
- */
- Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET);
-
- if ((Register & XDC_SWCR_SG_ENABLE_MASK) == 0) {
- return XST_DMA_SG_IS_STOPPED;
- }
-
- /* Ensure the interrupt status for the scatter gather is cleared such
- * that this function will wait til the disable has occurred, writing
- * a 1 to only that bit in the register will clear only it
- */
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_IS_REG_OFFSET,
- XDC_IXR_SG_DISABLE_ACK_MASK);
-
- /* disable scatter gather by writing to the software control register
- * without modifying any other bits of the register
- */
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET,
- Register & ~XDC_SWCR_SG_ENABLE_MASK);
-
- /* scatter gather does not disable immediately, but after the current
- * buffer descriptor is complete, so wait for the DMA channel to indicate
- * the disable is complete
- */
- do {
- Register =
- XIo_In32(InstancePtr->RegBaseAddress + XDC_IS_REG_OFFSET);
- } while ((Register & XDC_IXR_SG_DISABLE_ACK_MASK) == 0);
-
- /* Ensure the interrupt status for the scatter gather disable is cleared,
- * writing a 1 to only that bit in the register will clear only it
- */
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_IS_REG_OFFSET,
- XDC_IXR_SG_DISABLE_ACK_MASK);
-
- /* set the specified buffer descriptor pointer to point to the buffer
- * descriptor that the scatter gather DMA channel was processing
- */
- *BufDescriptorPtr =
- (XBufDescriptor *) XIo_In32(InstancePtr->RegBaseAddress +
- XDC_BDA_REG_OFFSET);
-
- return XST_SUCCESS;
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_CreateSgList
-*
-* DESCRIPTION:
-*
-* This function creates a scatter gather list in the DMA channel. A scatter
-* gather list consists of a list of buffer descriptors that are available to
-* be used for scatter gather operations. Buffer descriptors are put into the
-* list to request a scatter gather operation to be performed.
-*
-* A number of buffer descriptors are created from the specified memory and put
-* into a buffer descriptor list as empty buffer descriptors. This function must
-* be called before non-empty buffer descriptors may be put into the DMA channel
-* to request scatter gather operations.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* MemoryPtr contains a pointer to the memory which is to be used for buffer
-* descriptors and must not be cached.
-*
-* ByteCount contains the number of bytes for the specified memory to be used
-* for buffer descriptors.
-*
-* RETURN VALUE:
-*
-* A status contains XST_SUCCESS if the scatter gather list was successfully
-* created.
-*
-* A value of XST_DMA_SG_LIST_EXISTS indicates that the scatter gather list
-* was not created because the list has already been created.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-XStatus
-XDmaChannel_CreateSgList(XDmaChannel * InstancePtr,
- u32 * MemoryPtr, u32 ByteCount)
-{
- XBufDescriptor *BufferDescriptorPtr = (XBufDescriptor *) MemoryPtr;
- XBufDescriptor *PreviousDescriptorPtr = NULL;
- XBufDescriptor *StartOfListPtr = BufferDescriptorPtr;
- u32 UsedByteCount;
-
- /* assert to verify valid input arguments, alignment for those
- * arguments that have alignment restrictions, and at least enough
- * memory for one buffer descriptor
- */
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(MemoryPtr != NULL);
- XASSERT_NONVOID(((u32) MemoryPtr & 3) == 0);
- XASSERT_NONVOID(ByteCount != 0);
- XASSERT_NONVOID(ByteCount >= sizeof (XBufDescriptor));
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* if the scatter gather list has already been created, then return
- * with a status
- */
- if (InstancePtr->TotalDescriptorCount != 0) {
- return XST_DMA_SG_LIST_EXISTS;
- }
-
- /* loop thru the specified memory block and create as many buffer
- * descriptors as possible putting each into the list which is
- * implemented as a ring buffer, make sure not to use any memory which
- * is not large enough for a complete buffer descriptor
- */
- UsedByteCount = 0;
- while ((UsedByteCount + sizeof (XBufDescriptor)) <= ByteCount) {
- /* setup a pointer to the next buffer descriptor in the memory and
- * update # of used bytes to know when all of memory is used
- */
- BufferDescriptorPtr = (XBufDescriptor *) ((u32) MemoryPtr +
- UsedByteCount);
-
- /* initialize the new buffer descriptor such that it doesn't contain
- * garbage which could be used by the DMA hardware
- */
- XBufDescriptor_Initialize(BufferDescriptorPtr);
-
- /* if this is not the first buffer descriptor to be created,
- * then link it to the last created buffer descriptor
- */
- if (PreviousDescriptorPtr != NULL) {
- XBufDescriptor_SetNextPtr(PreviousDescriptorPtr,
- BufferDescriptorPtr);
- }
-
- /* always keep a pointer to the last created buffer descriptor such
- * that they can be linked together in the ring buffer
- */
- PreviousDescriptorPtr = BufferDescriptorPtr;
-
- /* keep a count of the number of descriptors in the list to allow
- * error processing to be performed
- */
- InstancePtr->TotalDescriptorCount++;
-
- UsedByteCount += sizeof (XBufDescriptor);
- }
-
- /* connect the last buffer descriptor created and inserted in the list
- * to the first such that a ring buffer is created
- */
- XBufDescriptor_SetNextPtr(BufferDescriptorPtr, StartOfListPtr);
-
- /* initialize the ring buffer to indicate that there are no
- * buffer descriptors in the list which point to valid data buffers
- */
- InstancePtr->PutPtr = BufferDescriptorPtr;
- InstancePtr->GetPtr = BufferDescriptorPtr;
- InstancePtr->CommitPtr = NULL;
- InstancePtr->LastPtr = BufferDescriptorPtr;
- InstancePtr->ActiveDescriptorCount = 0;
-
- /* indicate the scatter gather list was successfully created */
-
- return XST_SUCCESS;
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_IsSgListEmpty
-*
-* DESCRIPTION:
-*
-* This function determines if the scatter gather list of a DMA channel is
-* empty with regard to buffer descriptors which are pointing to buffers to be
-* used for scatter gather operations.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* RETURN VALUE:
-*
-* A value of TRUE if the scatter gather list is empty, otherwise a value of
-* FALSE.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-u32
-XDmaChannel_IsSgListEmpty(XDmaChannel * InstancePtr)
-{
- /* assert to verify valid input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* if the number of descriptors which are being used in the list is zero
- * then the list is empty
- */
- return (InstancePtr->ActiveDescriptorCount == 0);
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_PutDescriptor
-*
-* DESCRIPTION:
-*
-* This function puts a buffer descriptor into the DMA channel scatter
-* gather list. A DMA channel maintains a list of buffer descriptors which are
-* to be processed. This function puts the specified buffer descriptor
-* at the next location in the list. Note that since the list is already intact,
-* the information in the parameter is copied into the list (rather than modify
-* list pointers on the fly).
-*
-* After buffer descriptors are put into the list, they must also be committed
-* by calling another function. This allows multiple buffer descriptors which
-* span a single packet to be put into the list while preventing the hardware
-* from starting the first buffer descriptor of the packet.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* BufferDescriptorPtr is a pointer to the buffer descriptor to be put into
-* the next available location of the scatter gather list.
-*
-* RETURN VALUE:
-*
-* A status which indicates XST_SUCCESS if the buffer descriptor was
-* successfully put into the scatter gather list.
-*
-* A value of XST_DMA_SG_NO_LIST indicates the scatter gather list has not
-* been created.
-*
-* A value of XST_DMA_SG_LIST_FULL indicates the buffer descriptor was not
-* put into the list because the list was full.
-*
-* A value of XST_DMA_SG_BD_LOCKED indicates the buffer descriptor was not
-* put into the list because the buffer descriptor in the list which is to
-* be overwritten was locked. A locked buffer descriptor indicates the higher
-* layered software is still using the buffer descriptor.
-*
-* NOTES:
-*
-* It is necessary to create a scatter gather list for a DMA channel before
-* putting buffer descriptors into it.
-*
-******************************************************************************/
-XStatus
-XDmaChannel_PutDescriptor(XDmaChannel * InstancePtr,
- XBufDescriptor * BufferDescriptorPtr)
-{
- u32 Control;
-
- /* assert to verify valid input arguments and alignment for those
- * arguments that have alignment restrictions
- */
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(BufferDescriptorPtr != NULL);
- XASSERT_NONVOID(((u32) BufferDescriptorPtr & 3) == 0);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* if a scatter gather list has not been created yet, return a status */
-
- if (InstancePtr->TotalDescriptorCount == 0) {
- return XST_DMA_SG_NO_LIST;
- }
-
- /* if the list is full because all descriptors are pointing to valid
- * buffers, then indicate an error, this code assumes no list or an
- * empty list is detected above
- */
- if (InstancePtr->ActiveDescriptorCount ==
- InstancePtr->TotalDescriptorCount) {
- return XST_DMA_SG_LIST_FULL;
- }
-
- /* if the buffer descriptor in the list which is to be overwritten is
- * locked, then don't overwrite it and return a status
- */
- if (XBufDescriptor_IsLocked(InstancePtr->PutPtr)) {
- return XST_DMA_SG_BD_LOCKED;
- }
-
- /* set the scatter gather stop bit in the control word of the descriptor
- * to cause the h/w to stop after it processes this descriptor since it
- * will be the last in the list
- */
- Control = XBufDescriptor_GetControl(BufferDescriptorPtr);
- XBufDescriptor_SetControl(BufferDescriptorPtr,
- Control | XDC_DMACR_SG_DISABLE_MASK);
-
- /* set both statuses in the descriptor so we tell if they are updated with
- * the status of the transfer, the hardware should change the busy in the
- * DMA status to be false when it completes
- */
- XBufDescriptor_SetStatus(BufferDescriptorPtr, XDC_DMASR_BUSY_MASK);
- XBufDescriptor_SetDeviceStatus(BufferDescriptorPtr, 0);
-
- /* copy the descriptor into the next position in the list so it's ready to
- * be used by the h/w, this assumes the descriptor in the list prior to this
- * one still has the stop bit in the control word set such that the h/w
- * use this one yet
- */
- CopyBufferDescriptor(BufferDescriptorPtr, InstancePtr->PutPtr);
-
- /* only the last in the list and the one to be committed have scatter gather
- * disabled in the control word, a commit requires only one descriptor
- * to be changed, when # of descriptors to commit > 2 all others except the
- * 1st and last have scatter gather enabled
- */
- if ((InstancePtr->CommitPtr != InstancePtr->LastPtr) &&
- (InstancePtr->CommitPtr != NULL)) {
- Control = XBufDescriptor_GetControl(InstancePtr->LastPtr);
- XBufDescriptor_SetControl(InstancePtr->LastPtr,
- Control & ~XDC_DMACR_SG_DISABLE_MASK);
- }
-
- /* update the list data based upon putting a descriptor into the list,
- * these operations must be last
- */
- InstancePtr->ActiveDescriptorCount++;
-
- /* only update the commit pointer if it is not already active, this allows
- * it to be deactivated after every commit such that a single descriptor
- * which is committed does not appear to be waiting to be committed
- */
- if (InstancePtr->CommitPtr == NULL) {
- InstancePtr->CommitPtr = InstancePtr->LastPtr;
- }
-
- /* these updates MUST BE LAST after the commit pointer update in order for
- * the commit pointer to track the correct descriptor to be committed
- */
- InstancePtr->LastPtr = InstancePtr->PutPtr;
- InstancePtr->PutPtr = XBufDescriptor_GetNextPtr(InstancePtr->PutPtr);
-
- return XST_SUCCESS;
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_CommitPuts
-*
-* DESCRIPTION:
-*
-* This function commits the buffer descriptors which have been put into the
-* scatter list for the DMA channel since the last commit operation was
-* performed. This enables the calling functions to put several buffer
-* descriptors into the list (e.g.,a packet's worth) before allowing the scatter
-* gather operations to start. This prevents the DMA channel hardware from
-* starting to use the buffer descriptors in the list before they are ready
-* to be used (multiple buffer descriptors for a single packet).
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* RETURN VALUE:
-*
-* A status indicating XST_SUCCESS if the buffer descriptors of the list were
-* successfully committed.
-*
-* A value of XST_DMA_SG_NOTHING_TO_COMMIT indicates that the buffer descriptors
-* were not committed because there was nothing to commit in the list. All the
-* buffer descriptors which are in the list are commited.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-XStatus
-XDmaChannel_CommitPuts(XDmaChannel * InstancePtr)
-{
- /* assert to verify input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* if the buffer descriptor to be committed is already committed or
- * the list is empty (none have been put in), then indicate an error
- */
- if ((InstancePtr->CommitPtr == NULL) ||
- XDmaChannel_IsSgListEmpty(InstancePtr)) {
- return XST_DMA_SG_NOTHING_TO_COMMIT;
- }
-
- /* last descriptor in the list must have scatter gather disabled so the end
- * of the list is hit by h/w, if descriptor to commit is not last in list,
- * commit descriptors by enabling scatter gather in the descriptor
- */
- if (InstancePtr->CommitPtr != InstancePtr->LastPtr) {
- u32 Control;
-
- Control = XBufDescriptor_GetControl(InstancePtr->CommitPtr);
- XBufDescriptor_SetControl(InstancePtr->CommitPtr, Control &
- ~XDC_DMACR_SG_DISABLE_MASK);
- }
- /* Update the commit pointer to indicate that there is nothing to be
- * committed, this state is used by start processing to know that the
- * buffer descriptor to start is not waiting to be committed
- */
- InstancePtr->CommitPtr = NULL;
-
- return XST_SUCCESS;
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_GetDescriptor
-*
-* DESCRIPTION:
-*
-* This function gets a buffer descriptor from the scatter gather list of the
-* DMA channel. The buffer descriptor is retrieved from the scatter gather list
-* and the scatter gather list is updated to not include the retrieved buffer
-* descriptor. This is typically done after a scatter gather operation
-* completes indicating that a data buffer has been successfully sent or data
-* has been received into the data buffer. The purpose of this function is to
-* allow the device using the scatter gather operation to get the results of the
-* operation.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* BufDescriptorPtr is a pointer to a pointer to the buffer descriptor which
-* was retrieved from the list. The buffer descriptor is not really removed
-* from the list, but it is changed to a state such that the hardware will not
-* use it again until it is put into the scatter gather list of the DMA channel.
-*
-* RETURN VALUE:
-*
-* A status indicating XST_SUCCESS if a buffer descriptor was retrieved from
-* the scatter gather list of the DMA channel.
-*
-* A value of XST_DMA_SG_NO_LIST indicates the scatter gather list has not
-* been created.
-*
-* A value of XST_DMA_SG_LIST_EMPTY indicates no buffer descriptor was
-* retrieved from the list because there are no buffer descriptors to be
-* processed in the list.
-*
-* BufDescriptorPtr is updated to point to the buffer descriptor which was
-* retrieved from the list if the status indicates success.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-XStatus
-XDmaChannel_GetDescriptor(XDmaChannel * InstancePtr,
- XBufDescriptor ** BufDescriptorPtr)
-{
- u32 Control;
-
- /* assert to verify input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(BufDescriptorPtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* if a scatter gather list has not been created yet, return a status */
-
- if (InstancePtr->TotalDescriptorCount == 0) {
- return XST_DMA_SG_NO_LIST;
- }
-
- /* if the buffer descriptor list is empty, then indicate an error */
-
- if (XDmaChannel_IsSgListEmpty(InstancePtr)) {
- return XST_DMA_SG_LIST_EMPTY;
- }
-
- /* retrieve the next buffer descriptor which is ready to be processed from
- * the buffer descriptor list for the DMA channel, set the control word
- * such that hardware will stop after the descriptor has been processed
- */
- Control = XBufDescriptor_GetControl(InstancePtr->GetPtr);
- XBufDescriptor_SetControl(InstancePtr->GetPtr,
- Control | XDC_DMACR_SG_DISABLE_MASK);
-
- /* set the input argument, which is also an output, to point to the
- * buffer descriptor which is to be retrieved from the list
- */
- *BufDescriptorPtr = InstancePtr->GetPtr;
-
- /* update the pointer of the DMA channel to reflect the buffer descriptor
- * was retrieved from the list by setting it to the next buffer descriptor
- * in the list and indicate one less descriptor in the list now
- */
- InstancePtr->GetPtr = XBufDescriptor_GetNextPtr(InstancePtr->GetPtr);
- InstancePtr->ActiveDescriptorCount--;
-
- return XST_SUCCESS;
-}
-
-/*********************** Interrupt Collescing Functions **********************/
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_GetPktCount
-*
-* DESCRIPTION:
-*
-* This function returns the value of the unserviced packet count register of
-* the DMA channel. This count represents the number of packets that have been
-* sent or received by the hardware, but not processed by software.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* RETURN VALUE:
-*
-* The unserviced packet counter register contents for the DMA channel.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-u32
-XDmaChannel_GetPktCount(XDmaChannel * InstancePtr)
-{
- /* assert to verify input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* get the unserviced packet count from the register and return it */
-
- return XIo_In32(InstancePtr->RegBaseAddress + XDC_UPC_REG_OFFSET);
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_DecrementPktCount
-*
-* DESCRIPTION:
-*
-* This function decrements the value of the unserviced packet count register.
-* This informs the hardware that the software has processed a packet. The
-* unserviced packet count register may only be decremented by one in the
-* hardware.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-void
-XDmaChannel_DecrementPktCount(XDmaChannel * InstancePtr)
-{
- u32 Register;
-
- /* assert to verify input arguments */
-
- XASSERT_VOID(InstancePtr != NULL);
- XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* if the unserviced packet count register can be decremented (rather
- * than rolling over) decrement it by writing a 1 to the register,
- * this is the only valid write to the register as it serves as an
- * acknowledge that a packet was handled by the software
- */
- Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_UPC_REG_OFFSET);
- if (Register > 0) {
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_UPC_REG_OFFSET,
- 1UL);
- }
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_SetPktThreshold
-*
-* DESCRIPTION:
-*
-* This function sets the value of the packet count threshold register of the
-* DMA channel. It reflects the number of packets that must be sent or
-* received before generating an interrupt. This value helps implement
-* a concept called "interrupt coalescing", which is used to reduce the number
-* of interrupts from devices with high data rates.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* Threshold is the value that is written to the threshold register of the
-* DMA channel.
-*
-* RETURN VALUE:
-*
-* A status containing XST_SUCCESS if the packet count threshold was
-* successfully set.
-*
-* NOTES:
-*
-* The packet threshold could be set to larger than the number of descriptors
-* allocated to the DMA channel. In this case, the wait bound will take over
-* and always indicate data arrival. There was a check in this function that
-* returned an error if the treshold was larger than the number of descriptors,
-* but that was removed because users would then have to set the threshold
-* only after they set descriptor space, which is an order dependency that
-* caused confustion.
-*
-******************************************************************************/
-XStatus
-XDmaChannel_SetPktThreshold(XDmaChannel * InstancePtr, u8 Threshold)
-{
- /* assert to verify input arguments, don't assert the threshold since
- * it's range is unknown
- */
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* set the packet count threshold in the register such that an interrupt
- * may be generated, if enabled, when the packet count threshold is
- * reached or exceeded
- */
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_PCT_REG_OFFSET,
- (u32) Threshold);
-
- /* indicate the packet count threshold was successfully set */
-
- return XST_SUCCESS;
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_GetPktThreshold
-*
-* DESCRIPTION:
-*
-* This function gets the value of the packet count threshold register of the
-* DMA channel. This value reflects the number of packets that must be sent or
-* received before generating an interrupt. This value helps implement a concept
-* called "interrupt coalescing", which is used to reduce the number of
-* interrupts from devices with high data rates.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* RETURN VALUE:
-*
-* The packet threshold register contents for the DMA channel and is a value in
-* the range 0 - 1023. A value of 0 indicates the packet wait bound timer is
-* disabled.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-u8
-XDmaChannel_GetPktThreshold(XDmaChannel * InstancePtr)
-{
- /* assert to verify input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* get the packet count threshold from the register and return it,
- * since only 8 bits are used, cast it to return only those bits */
-
- return (u8) XIo_In32(InstancePtr->RegBaseAddress + XDC_PCT_REG_OFFSET);
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_SetPktWaitBound
-*
-* DESCRIPTION:
-*
-* This function sets the value of the packet wait bound register of the
-* DMA channel. This value reflects the timer value used to trigger an
-* interrupt when not enough packets have been received to reach the packet
-* count threshold.
-*
-* The timer is in millisecond units with +/- 33% accuracy.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* WaitBound is the value, in milliseconds, to be stored in the wait bound
-* register of the DMA channel and is a value in the range 0 - 1023. A value
-* of 0 disables the packet wait bound timer.
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-void
-XDmaChannel_SetPktWaitBound(XDmaChannel * InstancePtr, u32 WaitBound)
-{
- /* assert to verify input arguments */
-
- XASSERT_VOID(InstancePtr != NULL);
- XASSERT_VOID(WaitBound < 1024);
- XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* set the packet wait bound in the register such that interrupt may be
- * generated, if enabled, when packets have not been handled for a specific
- * amount of time
- */
- XIo_Out32(InstancePtr->RegBaseAddress + XDC_PWB_REG_OFFSET, WaitBound);
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XDmaChannel_GetPktWaitBound
-*
-* DESCRIPTION:
-*
-* This function gets the value of the packet wait bound register of the
-* DMA channel. This value contains the timer value used to trigger an
-* interrupt when not enough packets have been received to reach the packet
-* count threshold.
-*
-* The timer is in millisecond units with +/- 33% accuracy.
-*
-* ARGUMENTS:
-*
-* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
-* channel should be configured to use scatter gather in order for this function
-* to be called.
-*
-* RETURN VALUE:
-*
-* The packet wait bound register contents for the DMA channel.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-u32
-XDmaChannel_GetPktWaitBound(XDmaChannel * InstancePtr)
-{
- /* assert to verify input arguments */
-
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
- /* get the packet wait bound from the register and return it */
-
- return XIo_In32(InstancePtr->RegBaseAddress + XDC_PWB_REG_OFFSET);
-}
+/* $Id: xdma_channel_sg.c,v 1.1.1.1 2009/03/25 22:21:55 kenagy Exp $ */
+/******************************************************************************
+*
+* Author: Xilinx, Inc.
+*
+*
+* 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.
+*
+*
+* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
+* COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
+* ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD,
+* XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE
+* FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING
+* ANY THIRD PARTY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
+* XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
+* THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY
+* WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM
+* CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE.
+*
+*
+* Xilinx hardware products are not intended for use in life support
+* appliances, devices, or systems. Use in such applications is
+* expressly prohibited.
+*
+*
+* (c) Copyright 2002-2004 Xilinx Inc.
+* All rights reserved.
+*
+*
+* 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.,
+* 675 Mass Ave, Cambridge, MA 02139, USA.
+*
+* FILENAME:
+*
+* xdma_channel_sg.c
+*
+* DESCRIPTION:
+*
+* This file contains the implementation of the XDmaChannel component which is
+* related to scatter gather operations.
+*
+* Scatter Gather Operations
+*
+* The DMA channel may support scatter gather operations. A scatter gather
+* operation automates the DMA channel such that multiple buffers can be
+* sent or received with minimal software interaction with the hardware. Buffer
+* descriptors, contained in the XBufDescriptor component, are used by the
+* scatter gather operations of the DMA channel to describe the buffers to be
+* processed.
+*
+* Scatter Gather List Operations
+*
+* A scatter gather list may be supported by each DMA channel. The scatter
+* gather list allows buffer descriptors to be put into the list by a device
+* driver which requires scatter gather. The hardware processes the buffer
+* descriptors which are contained in the list and modifies the buffer
+* descriptors to reflect the status of the DMA operations. The device driver
+* is notified by interrupt that specific DMA events occur including scatter
+* gather events. The device driver removes the completed buffer descriptors
+* from the scatter gather list to evaluate the status of each DMA operation.
+*
+* The scatter gather list is created and buffer descriptors are inserted into
+* the list. Buffer descriptors are never removed from the list after it's
+* creation such that a put operation copies from a temporary buffer descriptor
+* to a buffer descriptor in the list. Get operations don't copy from the list
+* to a temporary, but return a pointer to the buffer descriptor in the list.
+* A buffer descriptor in the list may be locked to prevent it from being
+* overwritten by a put operation. This allows the device driver to get a
+* descriptor from a scatter gather list and prevent it from being overwritten
+* until the buffer associated with the buffer descriptor has been processed.
+*
+* The get and put functions only operate on the list and are asynchronous from
+* the hardware which may be using the list of descriptors. This is important
+* because there are no checks in the get and put functions to ensure that the
+* hardware has processed the descriptors. This must be handled by the driver
+* using the DMA scatter gather channel through the use of the other functions.
+* When a scatter gather operation is started, the start function does ensure
+* that the descriptor to start has not already been processed by the hardware
+* and is not the first of a series of descriptors that have not been committed
+* yet.
+*
+* Descriptors are put into the list but not marked as ready to use by the
+* hardware until a commit operation is done. This allows multiple descriptors
+* which may contain a single packet of information for a protocol to be
+* guaranteed not to cause any underflow conditions during transmission. The
+* hardware design only allows descriptors to cause it to stop after a descriptor
+* has been processed rather than before it is processed. A series of
+* descriptors are put into the list followed by a commit operation, or each
+* descriptor may be commited. A commit operation is performed by changing a
+* single descriptor, the first of the series of puts, to indicate that the
+* hardware may now use all descriptors after it. The last descriptor in the
+* list is always set to cause the hardware to stop after it is processed.
+*
+* Typical Scatter Gather Processing
+*
+* The following steps illustrate the typical processing to use the
+* scatter gather features of a DMA channel.
+*
+* 1. Create a scatter gather list for the DMA channel which puts empty buffer
+* descriptors into the list.
+* 2. Create buffer descriptors which describe the buffers to be filled with
+* receive data or the buffers which contain data to be sent.
+* 3. Put buffer descriptors into the DMA channel scatter list such that scatter
+* gather operations are requested.
+* 4. Commit the buffer descriptors in the list such that they are ready to be
+* used by the DMA channel hardware.
+* 5. Start the scatter gather operations of the DMA channel.
+* 6. Process any interrupts which occur as a result of the scatter gather
+* operations or poll the DMA channel to determine the status. This may
+* be accomplished by getting the packet count for the channel and then
+* getting the appropriate number of descriptors from the list for that
+* number of packets.
+*
+* Minimizing Interrupts
+*
+* The Scatter Gather operating mode is designed to reduce the amount of CPU
+* throughput necessary to manage the hardware for devices. A key to the CPU
+* throughput is the number and rate of interrupts that the CPU must service.
+* Devices with higher data rates can cause larger numbers of interrupts and
+* higher frequency interrupts. Ideally the number of interrupts can be reduced
+* by only generating an interrupt when a specific amount of data has been
+* received from the interface. This design suffers from a lack of interrupts
+* when the amount of data received is less than the specified amount of data
+* to generate an interrupt. In order to help minimize the number of interrupts
+* which the CPU must service, an algorithm referred to as "interrupt coalescing"
+* is utilized.
+*
+* Interrupt Coalescing
+*
+* The principle of interrupt coalescing is to wait before generating an
+* interrupt until a certain number of packets have been received or sent. An
+* interrupt is also generated if a smaller number of packets have been received
+* followed by a certain period of time with no packet reception. This is a
+* trade-off of latency for bandwidth and is accomplished using several
+* mechanisms of the hardware including a counter for packets received or
+* transmitted and a packet timer. These two hardware mechanisms work in
+* combination to allow a reduction in the number of interrupts processed by the
+* CPU for packet reception.
+*
+* Unserviced Packet Count
+*
+* The purpose of the packet counter is to count the number of packets received
+* or transmitted and provide an interrupt when a specific number of packets
+* have been processed by the hardware. An interrupt is generated whenever the
+* counter is greater than or equal to the Packet Count Threshold. This counter
+* contains an accurate count of the number of packets that the hardware has
+* processed, either received or transmitted, and the software has not serviced.
+*
+* The packet counter allows the number of interrupts to be reduced by waiting
+* to generate an interrupt until enough packets are received. For packet
+* reception, packet counts of less than the number to generate an interrupt
+* would not be serviced without the addition of a packet timer. This counter is
+* continuously updated by the hardware, not latched to the value at the time
+* the interrupt occurred.
+*
+* The packet counter can be used within the interrupt service routine for the
+* device to reduce the number of interrupts. The interrupt service routine
+* loops while performing processing for each packet which has been received or
+* transmitted and decrements the counter by a specified value. At the same time,
+* the hardware is possibly continuing to receive or transmit more packets such
+* that the software may choose, based upon the value in the packet counter, to
+* remain in the interrupt service routine rather than exiting and immediately
+* returning. This feature should be used with caution as reducing the number of
+* interrupts is beneficial, but unbounded interrupt processing is not desirable.
+*
+* Since the hardware may be incrementing the packet counter simultaneously
+* with the software decrementing the counter, there is a need for atomic
+* operations. The hardware ensures that the operation is atomic such that
+* simultaneous accesses are properly handled.
+*
+* Packet Wait Bound
+*
+* The purpose of the packet wait bound is to augment the unserviced packet
+* count. Whenever there is no pending interrupt for the channel and the
+* unserviced packet count is non-zero, a timer starts counting timeout at the
+* value contained the the packet wait bound register. If the timeout is
+* reached, an interrupt is generated such that the software may service the
+* data which was buffered.
+*
+* NOTES:
+*
+* Special Test Conditions:
+*
+* The scatter gather list processing must be thoroughly tested if changes are
+* made. Testing should include putting and committing single descriptors and
+* putting multiple descriptors followed by a single commit. There are some
+* conditions in the code which handle the exception conditions.
+*
+* The Put Pointer points to the next location in the descriptor list to copy
+* in a new descriptor. The Get Pointer points to the next location in the
+* list to get a descriptor from. The Get Pointer only allows software to
+* have a traverse the list after the hardware has finished processing some
+* number of descriptors. The Commit Pointer points to the descriptor in the
+* list which is to be committed. It is also used to determine that no
+* descriptor is waiting to be commited (NULL). The Last Pointer points to
+* the last descriptor that was put into the list. It typically points
+* to the previous descriptor to the one pointed to by the Put Pointer.
+* Comparisons are done between these pointers to determine when the following
+* special conditions exist.
+
+* Single Put And Commit
+*
+* The buffer descriptor is ready to be used by the hardware so it is important
+* for the descriptor to not appear to be waiting to be committed. The commit
+* pointer is reset when a commit is done indicating there are no descriptors
+* waiting to be committed. In all cases but this one, the descriptor is
+* changed to cause the hardware to go to the next descriptor after processing
+* this one. But in this case, this is the last descriptor in the list such
+* that it must not be changed.
+*
+* 3 Or More Puts And Commit
+*
+* A series of 3 or more puts followed by a single commit is different in that
+* only the 1st descriptor put into the list is changed when the commit is done.
+* This requires each put starting on the 3rd to change the previous descriptor
+* so that it allows the hardware to continue to the next descriptor in the list.
+*
+* The 1st Put Following A Commit
+*
+* The commit caused the commit pointer to be NULL indicating that there are no
+* descriptors waiting to be committed. It is necessary for the next put to set
+* the commit pointer so that a commit must follow the put for the hardware to
+* use the descriptor.
+*
+* <pre>
+* MODIFICATION HISTORY:
+*
+* Ver Who Date Changes
+* ----- ---- -------- ------------------------------------------------------
+* 1.00a rpm 02/03/03 Removed the XST_DMA_SG_COUNT_EXCEEDED return code
+* from SetPktThreshold.
+* </pre>
+*
+******************************************************************************/
+
+/***************************** Include Files *********************************/
+
+#include "xdma_channel.h"
+#include "xbasic_types.h"
+#include "xio.h"
+#include "xbuf_descriptor.h"
+#include "xstatus.h"
+
+/************************** Constant Definitions *****************************/
+
+#define XDC_SWCR_SG_ENABLE_MASK 0x80000000UL /* scatter gather enable */
+
+/**************************** Type Definitions *******************************/
+
+/***************** Macros (Inline Functions) Definitions *********************/
+
+/* the following macro copies selected fields of a buffer descriptor to another
+ * buffer descriptor, this was provided by the buffer descriptor component but
+ * was moved here since it is only used internally to this component and since
+ * it does not copy all fields
+ */
+#define CopyBufferDescriptor(InstancePtr, DestinationPtr) \
+{ \
+ *((u32 *)DestinationPtr + XBD_CONTROL_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_CONTROL_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_SOURCE_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_SOURCE_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_DESTINATION_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_DESTINATION_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_LENGTH_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_LENGTH_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_STATUS_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_STATUS_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_DEVICE_STATUS_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_DEVICE_STATUS_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_ID_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_ID_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_FLAGS_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_FLAGS_OFFSET); \
+ *((u32 *)DestinationPtr + XBD_RQSTED_LENGTH_OFFSET) = \
+ *((u32 *)InstancePtr + XBD_RQSTED_LENGTH_OFFSET); \
+}
+
+/************************** Variable Definitions *****************************/
+
+/************************** Function Prototypes ******************************/
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_SgStart
+*
+* DESCRIPTION:
+*
+* This function starts a scatter gather operation for a scatter gather
+* DMA channel. The first buffer descriptor in the buffer descriptor list
+* will be started with the scatter gather operation. A scatter gather list
+* should have previously been created for the DMA channel and buffer
+* descriptors put into the scatter gather list such that there are scatter
+* operations ready to be performed.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* RETURN VALUE:
+*
+* A status containing XST_SUCCESS if scatter gather was started successfully
+* for the DMA channel.
+*
+* A value of XST_DMA_SG_NO_LIST indicates the scatter gather list has not
+* been created.
+*
+* A value of XST_DMA_SG_LIST_EMPTY indicates scatter gather was not started
+* because the scatter gather list of the DMA channel does not contain any
+* buffer descriptors that are ready to be processed by the hardware.
+*
+* A value of XST_DMA_SG_IS_STARTED indicates scatter gather was not started
+* because the scatter gather was not stopped, but was already started.
+*
+* A value of XST_DMA_SG_BD_NOT_COMMITTED indicates the buffer descriptor of
+* scatter gather list which was to be started is not committed to the list.
+* This status is more likely if this function is being called from an ISR
+* and non-ISR processing is putting descriptors into the list.
+*
+* A value of XST_DMA_SG_NO_DATA indicates that the buffer descriptor of the
+* scatter gather list which was to be started had already been used by the
+* hardware for a DMA transfer that has been completed.
+*
+* NOTES:
+*
+* It is the responsibility of the caller to get all the buffer descriptors
+* after performing a stop operation and before performing a start operation.
+* If buffer descriptors are not retrieved between stop and start operations,
+* buffer descriptors may be processed by the hardware more than once.
+*
+******************************************************************************/
+XStatus
+XDmaChannel_SgStart(XDmaChannel * InstancePtr)
+{
+ u32 Register;
+ XBufDescriptor *LastDescriptorPtr;
+
+ /* assert to verify input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* if a scatter gather list has not been created yet, return a status */
+
+ if (InstancePtr->TotalDescriptorCount == 0) {
+ return XST_DMA_SG_NO_LIST;
+ }
+
+ /* if the scatter gather list exists but is empty then return a status */
+
+ if (XDmaChannel_IsSgListEmpty(InstancePtr)) {
+ return XST_DMA_SG_LIST_EMPTY;
+ }
+
+ /* if scatter gather is busy for the DMA channel, return a status because
+ * restarting it could lose data
+ */
+
+ Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_DMAS_REG_OFFSET);
+ if (Register & XDC_DMASR_SG_BUSY_MASK) {
+ return XST_DMA_SG_IS_STARTED;
+ }
+
+ /* get the address of the last buffer descriptor which the DMA hardware
+ * finished processing
+ */
+ LastDescriptorPtr =
+ (XBufDescriptor *) XIo_In32(InstancePtr->RegBaseAddress +
+ XDC_BDA_REG_OFFSET);
+
+ /* setup the first buffer descriptor that will be sent when the scatter
+ * gather channel is enabled, this is only necessary one time since
+ * the BDA register of the channel maintains the last buffer descriptor
+ * processed
+ */
+ if (LastDescriptorPtr == NULL) {
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_BDA_REG_OFFSET,
+ (u32) InstancePtr->GetPtr);
+ } else {
+ XBufDescriptor *NextDescriptorPtr;
+
+ /* get the next descriptor to be started, if the status indicates it
+ * hasn't already been used by the h/w, then it's OK to start it,
+ * s/w sets the status of each descriptor to busy and then h/w clears
+ * the busy when it is complete
+ */
+ NextDescriptorPtr =
+ XBufDescriptor_GetNextPtr(LastDescriptorPtr);
+
+ if ((XBufDescriptor_GetStatus(NextDescriptorPtr) &
+ XDC_DMASR_BUSY_MASK) == 0) {
+ return XST_DMA_SG_NO_DATA;
+ }
+ /* don't start the DMA SG channel if the descriptor to be processed
+ * by h/w is to be committed by the s/w, this function can be called
+ * such that it interrupts a thread that was putting into the list
+ */
+ if (NextDescriptorPtr == InstancePtr->CommitPtr) {
+ return XST_DMA_SG_BD_NOT_COMMITTED;
+ }
+ }
+
+ /* start the scatter gather operation by clearing the stop bit in the
+ * control register and setting the enable bit in the s/w control register,
+ * both of these are necessary to cause it to start, right now the order of
+ * these statements is important, the software control register should be
+ * set 1st. The other order can cause the CPU to have a loss of sync
+ * because it cannot read/write the register while the DMA operation is
+ * running
+ */
+
+ Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET);
+
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET,
+ Register | XDC_SWCR_SG_ENABLE_MASK);
+
+ Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_DMAC_REG_OFFSET);
+
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_DMAC_REG_OFFSET,
+ Register & ~XDC_DMACR_SG_DISABLE_MASK);
+
+ /* indicate the DMA channel scatter gather operation was started
+ * successfully
+ */
+ return XST_SUCCESS;
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_SgStop
+*
+* DESCRIPTION:
+*
+* This function stops a scatter gather operation for a scatter gather
+* DMA channel. This function starts the process of stopping a scatter
+* gather operation that is in progress and waits for the stop to be completed.
+* Since it waits for the operation to stopped before returning, this function
+* could take an amount of time relative to the size of the DMA scatter gather
+* operation which is in progress. The scatter gather list of the DMA channel
+* is not modified by this function such that starting the scatter gather
+* channel after stopping it will cause it to resume. This operation is
+* considered to be a graceful stop in that the scatter gather operation
+* completes the current buffer descriptor before stopping.
+*
+* If the interrupt is enabled, an interrupt will be generated when the
+* operation is stopped and the caller is responsible for handling the
+* interrupt.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* BufDescriptorPtr is also a return value which contains a pointer to the
+* buffer descriptor which the scatter gather operation completed when it
+* was stopped.
+*
+* RETURN VALUE:
+*
+* A status containing XST_SUCCESS if scatter gather was stopped successfully
+* for the DMA channel.
+*
+* A value of XST_DMA_SG_IS_STOPPED indicates scatter gather was not stoppped
+* because the scatter gather is not started, but was already stopped.
+*
+* BufDescriptorPtr contains a pointer to the buffer descriptor which was
+* completed when the operation was stopped.
+*
+* NOTES:
+*
+* This function implements a loop which polls the hardware for an infinite
+* amount of time. If the hardware is not operating correctly, this function
+* may never return.
+*
+******************************************************************************/
+XStatus
+XDmaChannel_SgStop(XDmaChannel * InstancePtr,
+ XBufDescriptor ** BufDescriptorPtr)
+{
+ u32 Register;
+
+ /* assert to verify input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(BufDescriptorPtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* get the contents of the software control register, if scatter gather is not
+ * enabled (started), then return a status because the disable acknowledge
+ * would not be generated
+ */
+ Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET);
+
+ if ((Register & XDC_SWCR_SG_ENABLE_MASK) == 0) {
+ return XST_DMA_SG_IS_STOPPED;
+ }
+
+ /* Ensure the interrupt status for the scatter gather is cleared such
+ * that this function will wait til the disable has occurred, writing
+ * a 1 to only that bit in the register will clear only it
+ */
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_IS_REG_OFFSET,
+ XDC_IXR_SG_DISABLE_ACK_MASK);
+
+ /* disable scatter gather by writing to the software control register
+ * without modifying any other bits of the register
+ */
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_SWCR_REG_OFFSET,
+ Register & ~XDC_SWCR_SG_ENABLE_MASK);
+
+ /* scatter gather does not disable immediately, but after the current
+ * buffer descriptor is complete, so wait for the DMA channel to indicate
+ * the disable is complete
+ */
+ do {
+ Register =
+ XIo_In32(InstancePtr->RegBaseAddress + XDC_IS_REG_OFFSET);
+ } while ((Register & XDC_IXR_SG_DISABLE_ACK_MASK) == 0);
+
+ /* Ensure the interrupt status for the scatter gather disable is cleared,
+ * writing a 1 to only that bit in the register will clear only it
+ */
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_IS_REG_OFFSET,
+ XDC_IXR_SG_DISABLE_ACK_MASK);
+
+ /* set the specified buffer descriptor pointer to point to the buffer
+ * descriptor that the scatter gather DMA channel was processing
+ */
+ *BufDescriptorPtr =
+ (XBufDescriptor *) XIo_In32(InstancePtr->RegBaseAddress +
+ XDC_BDA_REG_OFFSET);
+
+ return XST_SUCCESS;
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_CreateSgList
+*
+* DESCRIPTION:
+*
+* This function creates a scatter gather list in the DMA channel. A scatter
+* gather list consists of a list of buffer descriptors that are available to
+* be used for scatter gather operations. Buffer descriptors are put into the
+* list to request a scatter gather operation to be performed.
+*
+* A number of buffer descriptors are created from the specified memory and put
+* into a buffer descriptor list as empty buffer descriptors. This function must
+* be called before non-empty buffer descriptors may be put into the DMA channel
+* to request scatter gather operations.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* MemoryPtr contains a pointer to the memory which is to be used for buffer
+* descriptors and must not be cached.
+*
+* ByteCount contains the number of bytes for the specified memory to be used
+* for buffer descriptors.
+*
+* RETURN VALUE:
+*
+* A status contains XST_SUCCESS if the scatter gather list was successfully
+* created.
+*
+* A value of XST_DMA_SG_LIST_EXISTS indicates that the scatter gather list
+* was not created because the list has already been created.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+XStatus
+XDmaChannel_CreateSgList(XDmaChannel * InstancePtr,
+ u32 * MemoryPtr, u32 ByteCount)
+{
+ XBufDescriptor *BufferDescriptorPtr = (XBufDescriptor *) MemoryPtr;
+ XBufDescriptor *PreviousDescriptorPtr = NULL;
+ XBufDescriptor *StartOfListPtr = BufferDescriptorPtr;
+ u32 UsedByteCount;
+
+ /* assert to verify valid input arguments, alignment for those
+ * arguments that have alignment restrictions, and at least enough
+ * memory for one buffer descriptor
+ */
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(MemoryPtr != NULL);
+ XASSERT_NONVOID(((u32) MemoryPtr & 3) == 0);
+ XASSERT_NONVOID(ByteCount != 0);
+ XASSERT_NONVOID(ByteCount >= sizeof (XBufDescriptor));
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* if the scatter gather list has already been created, then return
+ * with a status
+ */
+ if (InstancePtr->TotalDescriptorCount != 0) {
+ return XST_DMA_SG_LIST_EXISTS;
+ }
+
+ /* loop thru the specified memory block and create as many buffer
+ * descriptors as possible putting each into the list which is
+ * implemented as a ring buffer, make sure not to use any memory which
+ * is not large enough for a complete buffer descriptor
+ */
+ UsedByteCount = 0;
+ while ((UsedByteCount + sizeof (XBufDescriptor)) <= ByteCount) {
+ /* setup a pointer to the next buffer descriptor in the memory and
+ * update # of used bytes to know when all of memory is used
+ */
+ BufferDescriptorPtr = (XBufDescriptor *) ((u32) MemoryPtr +
+ UsedByteCount);
+
+ /* initialize the new buffer descriptor such that it doesn't contain
+ * garbage which could be used by the DMA hardware
+ */
+ XBufDescriptor_Initialize(BufferDescriptorPtr);
+
+ /* if this is not the first buffer descriptor to be created,
+ * then link it to the last created buffer descriptor
+ */
+ if (PreviousDescriptorPtr != NULL) {
+ XBufDescriptor_SetNextPtr(PreviousDescriptorPtr,
+ BufferDescriptorPtr);
+ }
+
+ /* always keep a pointer to the last created buffer descriptor such
+ * that they can be linked together in the ring buffer
+ */
+ PreviousDescriptorPtr = BufferDescriptorPtr;
+
+ /* keep a count of the number of descriptors in the list to allow
+ * error processing to be performed
+ */
+ InstancePtr->TotalDescriptorCount++;
+
+ UsedByteCount += sizeof (XBufDescriptor);
+ }
+
+ /* connect the last buffer descriptor created and inserted in the list
+ * to the first such that a ring buffer is created
+ */
+ XBufDescriptor_SetNextPtr(BufferDescriptorPtr, StartOfListPtr);
+
+ /* initialize the ring buffer to indicate that there are no
+ * buffer descriptors in the list which point to valid data buffers
+ */
+ InstancePtr->PutPtr = BufferDescriptorPtr;
+ InstancePtr->GetPtr = BufferDescriptorPtr;
+ InstancePtr->CommitPtr = NULL;
+ InstancePtr->LastPtr = BufferDescriptorPtr;
+ InstancePtr->ActiveDescriptorCount = 0;
+
+ /* indicate the scatter gather list was successfully created */
+
+ return XST_SUCCESS;
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_IsSgListEmpty
+*
+* DESCRIPTION:
+*
+* This function determines if the scatter gather list of a DMA channel is
+* empty with regard to buffer descriptors which are pointing to buffers to be
+* used for scatter gather operations.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* RETURN VALUE:
+*
+* A value of TRUE if the scatter gather list is empty, otherwise a value of
+* FALSE.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+u32
+XDmaChannel_IsSgListEmpty(XDmaChannel * InstancePtr)
+{
+ /* assert to verify valid input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* if the number of descriptors which are being used in the list is zero
+ * then the list is empty
+ */
+ return (InstancePtr->ActiveDescriptorCount == 0);
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_PutDescriptor
+*
+* DESCRIPTION:
+*
+* This function puts a buffer descriptor into the DMA channel scatter
+* gather list. A DMA channel maintains a list of buffer descriptors which are
+* to be processed. This function puts the specified buffer descriptor
+* at the next location in the list. Note that since the list is already intact,
+* the information in the parameter is copied into the list (rather than modify
+* list pointers on the fly).
+*
+* After buffer descriptors are put into the list, they must also be committed
+* by calling another function. This allows multiple buffer descriptors which
+* span a single packet to be put into the list while preventing the hardware
+* from starting the first buffer descriptor of the packet.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* BufferDescriptorPtr is a pointer to the buffer descriptor to be put into
+* the next available location of the scatter gather list.
+*
+* RETURN VALUE:
+*
+* A status which indicates XST_SUCCESS if the buffer descriptor was
+* successfully put into the scatter gather list.
+*
+* A value of XST_DMA_SG_NO_LIST indicates the scatter gather list has not
+* been created.
+*
+* A value of XST_DMA_SG_LIST_FULL indicates the buffer descriptor was not
+* put into the list because the list was full.
+*
+* A value of XST_DMA_SG_BD_LOCKED indicates the buffer descriptor was not
+* put into the list because the buffer descriptor in the list which is to
+* be overwritten was locked. A locked buffer descriptor indicates the higher
+* layered software is still using the buffer descriptor.
+*
+* NOTES:
+*
+* It is necessary to create a scatter gather list for a DMA channel before
+* putting buffer descriptors into it.
+*
+******************************************************************************/
+XStatus
+XDmaChannel_PutDescriptor(XDmaChannel * InstancePtr,
+ XBufDescriptor * BufferDescriptorPtr)
+{
+ u32 Control;
+
+ /* assert to verify valid input arguments and alignment for those
+ * arguments that have alignment restrictions
+ */
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(BufferDescriptorPtr != NULL);
+ XASSERT_NONVOID(((u32) BufferDescriptorPtr & 3) == 0);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* if a scatter gather list has not been created yet, return a status */
+
+ if (InstancePtr->TotalDescriptorCount == 0) {
+ return XST_DMA_SG_NO_LIST;
+ }
+
+ /* if the list is full because all descriptors are pointing to valid
+ * buffers, then indicate an error, this code assumes no list or an
+ * empty list is detected above
+ */
+ if (InstancePtr->ActiveDescriptorCount ==
+ InstancePtr->TotalDescriptorCount) {
+ return XST_DMA_SG_LIST_FULL;
+ }
+
+ /* if the buffer descriptor in the list which is to be overwritten is
+ * locked, then don't overwrite it and return a status
+ */
+ if (XBufDescriptor_IsLocked(InstancePtr->PutPtr)) {
+ return XST_DMA_SG_BD_LOCKED;
+ }
+
+ /* set the scatter gather stop bit in the control word of the descriptor
+ * to cause the h/w to stop after it processes this descriptor since it
+ * will be the last in the list
+ */
+ Control = XBufDescriptor_GetControl(BufferDescriptorPtr);
+ XBufDescriptor_SetControl(BufferDescriptorPtr,
+ Control | XDC_DMACR_SG_DISABLE_MASK);
+
+ /* set both statuses in the descriptor so we tell if they are updated with
+ * the status of the transfer, the hardware should change the busy in the
+ * DMA status to be false when it completes
+ */
+ XBufDescriptor_SetStatus(BufferDescriptorPtr, XDC_DMASR_BUSY_MASK);
+ XBufDescriptor_SetDeviceStatus(BufferDescriptorPtr, 0);
+
+ /* copy the descriptor into the next position in the list so it's ready to
+ * be used by the h/w, this assumes the descriptor in the list prior to this
+ * one still has the stop bit in the control word set such that the h/w
+ * use this one yet
+ */
+ CopyBufferDescriptor(BufferDescriptorPtr, InstancePtr->PutPtr);
+
+ /* only the last in the list and the one to be committed have scatter gather
+ * disabled in the control word, a commit requires only one descriptor
+ * to be changed, when # of descriptors to commit > 2 all others except the
+ * 1st and last have scatter gather enabled
+ */
+ if ((InstancePtr->CommitPtr != InstancePtr->LastPtr) &&
+ (InstancePtr->CommitPtr != NULL)) {
+ Control = XBufDescriptor_GetControl(InstancePtr->LastPtr);
+ XBufDescriptor_SetControl(InstancePtr->LastPtr,
+ Control & ~XDC_DMACR_SG_DISABLE_MASK);
+ }
+
+ /* update the list data based upon putting a descriptor into the list,
+ * these operations must be last
+ */
+ InstancePtr->ActiveDescriptorCount++;
+
+ /* only update the commit pointer if it is not already active, this allows
+ * it to be deactivated after every commit such that a single descriptor
+ * which is committed does not appear to be waiting to be committed
+ */
+ if (InstancePtr->CommitPtr == NULL) {
+ InstancePtr->CommitPtr = InstancePtr->LastPtr;
+ }
+
+ /* these updates MUST BE LAST after the commit pointer update in order for
+ * the commit pointer to track the correct descriptor to be committed
+ */
+ InstancePtr->LastPtr = InstancePtr->PutPtr;
+ InstancePtr->PutPtr = XBufDescriptor_GetNextPtr(InstancePtr->PutPtr);
+
+ return XST_SUCCESS;
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_CommitPuts
+*
+* DESCRIPTION:
+*
+* This function commits the buffer descriptors which have been put into the
+* scatter list for the DMA channel since the last commit operation was
+* performed. This enables the calling functions to put several buffer
+* descriptors into the list (e.g.,a packet's worth) before allowing the scatter
+* gather operations to start. This prevents the DMA channel hardware from
+* starting to use the buffer descriptors in the list before they are ready
+* to be used (multiple buffer descriptors for a single packet).
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* RETURN VALUE:
+*
+* A status indicating XST_SUCCESS if the buffer descriptors of the list were
+* successfully committed.
+*
+* A value of XST_DMA_SG_NOTHING_TO_COMMIT indicates that the buffer descriptors
+* were not committed because there was nothing to commit in the list. All the
+* buffer descriptors which are in the list are commited.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+XStatus
+XDmaChannel_CommitPuts(XDmaChannel * InstancePtr)
+{
+ /* assert to verify input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* if the buffer descriptor to be committed is already committed or
+ * the list is empty (none have been put in), then indicate an error
+ */
+ if ((InstancePtr->CommitPtr == NULL) ||
+ XDmaChannel_IsSgListEmpty(InstancePtr)) {
+ return XST_DMA_SG_NOTHING_TO_COMMIT;
+ }
+
+ /* last descriptor in the list must have scatter gather disabled so the end
+ * of the list is hit by h/w, if descriptor to commit is not last in list,
+ * commit descriptors by enabling scatter gather in the descriptor
+ */
+ if (InstancePtr->CommitPtr != InstancePtr->LastPtr) {
+ u32 Control;
+
+ Control = XBufDescriptor_GetControl(InstancePtr->CommitPtr);
+ XBufDescriptor_SetControl(InstancePtr->CommitPtr, Control &
+ ~XDC_DMACR_SG_DISABLE_MASK);
+ }
+ /* Update the commit pointer to indicate that there is nothing to be
+ * committed, this state is used by start processing to know that the
+ * buffer descriptor to start is not waiting to be committed
+ */
+ InstancePtr->CommitPtr = NULL;
+
+ return XST_SUCCESS;
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_GetDescriptor
+*
+* DESCRIPTION:
+*
+* This function gets a buffer descriptor from the scatter gather list of the
+* DMA channel. The buffer descriptor is retrieved from the scatter gather list
+* and the scatter gather list is updated to not include the retrieved buffer
+* descriptor. This is typically done after a scatter gather operation
+* completes indicating that a data buffer has been successfully sent or data
+* has been received into the data buffer. The purpose of this function is to
+* allow the device using the scatter gather operation to get the results of the
+* operation.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* BufDescriptorPtr is a pointer to a pointer to the buffer descriptor which
+* was retrieved from the list. The buffer descriptor is not really removed
+* from the list, but it is changed to a state such that the hardware will not
+* use it again until it is put into the scatter gather list of the DMA channel.
+*
+* RETURN VALUE:
+*
+* A status indicating XST_SUCCESS if a buffer descriptor was retrieved from
+* the scatter gather list of the DMA channel.
+*
+* A value of XST_DMA_SG_NO_LIST indicates the scatter gather list has not
+* been created.
+*
+* A value of XST_DMA_SG_LIST_EMPTY indicates no buffer descriptor was
+* retrieved from the list because there are no buffer descriptors to be
+* processed in the list.
+*
+* BufDescriptorPtr is updated to point to the buffer descriptor which was
+* retrieved from the list if the status indicates success.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+XStatus
+XDmaChannel_GetDescriptor(XDmaChannel * InstancePtr,
+ XBufDescriptor ** BufDescriptorPtr)
+{
+ u32 Control;
+
+ /* assert to verify input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(BufDescriptorPtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* if a scatter gather list has not been created yet, return a status */
+
+ if (InstancePtr->TotalDescriptorCount == 0) {
+ return XST_DMA_SG_NO_LIST;
+ }
+
+ /* if the buffer descriptor list is empty, then indicate an error */
+
+ if (XDmaChannel_IsSgListEmpty(InstancePtr)) {
+ return XST_DMA_SG_LIST_EMPTY;
+ }
+
+ /* retrieve the next buffer descriptor which is ready to be processed from
+ * the buffer descriptor list for the DMA channel, set the control word
+ * such that hardware will stop after the descriptor has been processed
+ */
+ Control = XBufDescriptor_GetControl(InstancePtr->GetPtr);
+ XBufDescriptor_SetControl(InstancePtr->GetPtr,
+ Control | XDC_DMACR_SG_DISABLE_MASK);
+
+ /* set the input argument, which is also an output, to point to the
+ * buffer descriptor which is to be retrieved from the list
+ */
+ *BufDescriptorPtr = InstancePtr->GetPtr;
+
+ /* update the pointer of the DMA channel to reflect the buffer descriptor
+ * was retrieved from the list by setting it to the next buffer descriptor
+ * in the list and indicate one less descriptor in the list now
+ */
+ InstancePtr->GetPtr = XBufDescriptor_GetNextPtr(InstancePtr->GetPtr);
+ InstancePtr->ActiveDescriptorCount--;
+
+ return XST_SUCCESS;
+}
+
+/*********************** Interrupt Collescing Functions **********************/
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_GetPktCount
+*
+* DESCRIPTION:
+*
+* This function returns the value of the unserviced packet count register of
+* the DMA channel. This count represents the number of packets that have been
+* sent or received by the hardware, but not processed by software.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* RETURN VALUE:
+*
+* The unserviced packet counter register contents for the DMA channel.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+u32
+XDmaChannel_GetPktCount(XDmaChannel * InstancePtr)
+{
+ /* assert to verify input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* get the unserviced packet count from the register and return it */
+
+ return XIo_In32(InstancePtr->RegBaseAddress + XDC_UPC_REG_OFFSET);
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_DecrementPktCount
+*
+* DESCRIPTION:
+*
+* This function decrements the value of the unserviced packet count register.
+* This informs the hardware that the software has processed a packet. The
+* unserviced packet count register may only be decremented by one in the
+* hardware.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+void
+XDmaChannel_DecrementPktCount(XDmaChannel * InstancePtr)
+{
+ u32 Register;
+
+ /* assert to verify input arguments */
+
+ XASSERT_VOID(InstancePtr != NULL);
+ XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* if the unserviced packet count register can be decremented (rather
+ * than rolling over) decrement it by writing a 1 to the register,
+ * this is the only valid write to the register as it serves as an
+ * acknowledge that a packet was handled by the software
+ */
+ Register = XIo_In32(InstancePtr->RegBaseAddress + XDC_UPC_REG_OFFSET);
+ if (Register > 0) {
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_UPC_REG_OFFSET,
+ 1UL);
+ }
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_SetPktThreshold
+*
+* DESCRIPTION:
+*
+* This function sets the value of the packet count threshold register of the
+* DMA channel. It reflects the number of packets that must be sent or
+* received before generating an interrupt. This value helps implement
+* a concept called "interrupt coalescing", which is used to reduce the number
+* of interrupts from devices with high data rates.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* Threshold is the value that is written to the threshold register of the
+* DMA channel.
+*
+* RETURN VALUE:
+*
+* A status containing XST_SUCCESS if the packet count threshold was
+* successfully set.
+*
+* NOTES:
+*
+* The packet threshold could be set to larger than the number of descriptors
+* allocated to the DMA channel. In this case, the wait bound will take over
+* and always indicate data arrival. There was a check in this function that
+* returned an error if the treshold was larger than the number of descriptors,
+* but that was removed because users would then have to set the threshold
+* only after they set descriptor space, which is an order dependency that
+* caused confustion.
+*
+******************************************************************************/
+XStatus
+XDmaChannel_SetPktThreshold(XDmaChannel * InstancePtr, u8 Threshold)
+{
+ /* assert to verify input arguments, don't assert the threshold since
+ * it's range is unknown
+ */
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* set the packet count threshold in the register such that an interrupt
+ * may be generated, if enabled, when the packet count threshold is
+ * reached or exceeded
+ */
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_PCT_REG_OFFSET,
+ (u32) Threshold);
+
+ /* indicate the packet count threshold was successfully set */
+
+ return XST_SUCCESS;
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_GetPktThreshold
+*
+* DESCRIPTION:
+*
+* This function gets the value of the packet count threshold register of the
+* DMA channel. This value reflects the number of packets that must be sent or
+* received before generating an interrupt. This value helps implement a concept
+* called "interrupt coalescing", which is used to reduce the number of
+* interrupts from devices with high data rates.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* RETURN VALUE:
+*
+* The packet threshold register contents for the DMA channel and is a value in
+* the range 0 - 1023. A value of 0 indicates the packet wait bound timer is
+* disabled.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+u8
+XDmaChannel_GetPktThreshold(XDmaChannel * InstancePtr)
+{
+ /* assert to verify input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* get the packet count threshold from the register and return it,
+ * since only 8 bits are used, cast it to return only those bits */
+
+ return (u8) XIo_In32(InstancePtr->RegBaseAddress + XDC_PCT_REG_OFFSET);
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_SetPktWaitBound
+*
+* DESCRIPTION:
+*
+* This function sets the value of the packet wait bound register of the
+* DMA channel. This value reflects the timer value used to trigger an
+* interrupt when not enough packets have been received to reach the packet
+* count threshold.
+*
+* The timer is in millisecond units with +/- 33% accuracy.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* WaitBound is the value, in milliseconds, to be stored in the wait bound
+* register of the DMA channel and is a value in the range 0 - 1023. A value
+* of 0 disables the packet wait bound timer.
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+void
+XDmaChannel_SetPktWaitBound(XDmaChannel * InstancePtr, u32 WaitBound)
+{
+ /* assert to verify input arguments */
+
+ XASSERT_VOID(InstancePtr != NULL);
+ XASSERT_VOID(WaitBound < 1024);
+ XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* set the packet wait bound in the register such that interrupt may be
+ * generated, if enabled, when packets have not been handled for a specific
+ * amount of time
+ */
+ XIo_Out32(InstancePtr->RegBaseAddress + XDC_PWB_REG_OFFSET, WaitBound);
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XDmaChannel_GetPktWaitBound
+*
+* DESCRIPTION:
+*
+* This function gets the value of the packet wait bound register of the
+* DMA channel. This value contains the timer value used to trigger an
+* interrupt when not enough packets have been received to reach the packet
+* count threshold.
+*
+* The timer is in millisecond units with +/- 33% accuracy.
+*
+* ARGUMENTS:
+*
+* InstancePtr contains a pointer to the DMA channel to operate on. The DMA
+* channel should be configured to use scatter gather in order for this function
+* to be called.
+*
+* RETURN VALUE:
+*
+* The packet wait bound register contents for the DMA channel.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+u32
+XDmaChannel_GetPktWaitBound(XDmaChannel * InstancePtr)
+{
+ /* assert to verify input arguments */
+
+ XASSERT_NONVOID(InstancePtr != NULL);
+ XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
+
+ /* get the packet wait bound from the register and return it */
+
+ return XIo_In32(InstancePtr->RegBaseAddress + XDC_PWB_REG_OFFSET);
+}
diff -Naur u-boot-2009.03_orig/board/xilinx/common/xipif_v1_23_b.c u-boot-2009.03/board/xilinx/common/xipif_v1_23_b.c
--- u-boot-2009.03_orig/board/xilinx/common/xipif_v1_23_b.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/xilinx/common/xipif_v1_23_b.c 2009-03-31 14:48:17.382892800 -0700
@@ -1,331 +1,331 @@
-/* $Id: xipif_v1_23_b.c,v 1.1 2002/03/18 23:24:52 linnj Exp $ */
-/******************************************************************************
-*
-* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
-* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
-* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
-* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
-* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
-* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
-* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
-* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
-* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
-* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
-* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
-* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE.
-*
-* (c) Copyright 2002 Xilinx Inc.
-* All rights reserved.
-*
-******************************************************************************/
-/******************************************************************************
-*
-* FILENAME:
-*
-* xipif.c
-*
-* DESCRIPTION:
-*
-* This file contains the implementation of the XIpIf component. The
-* XIpIf component encapsulates the IPIF, which is the standard interface
-* that IP must adhere to when connecting to a bus. The purpose of this
-* component is to encapsulate the IPIF processing such that maintainability
-* is increased. This component does not provide a lot of abstraction from
-* from the details of the IPIF as it is considered a building block for
-* device drivers. A device driver designer must be familiar with the
-* details of the IPIF hardware to use this component.
-*
-* The IPIF hardware provides a building block for all hardware devices such
-* that each device does not need to reimplement these building blocks. The
-* IPIF contains other building blocks, such as FIFOs and DMA channels, which
-* are also common to many devices. These blocks are implemented as separate
-* hardware blocks and instantiated within the IPIF. The primary hardware of
-* the IPIF which is implemented by this software component is the interrupt
-* architecture. Since there are many blocks of a device which may generate
-* interrupts, all the interrupt processing is contained in the common part
-* of the device, the IPIF. This interrupt processing is for the device level
-* only and does not include any processing for the interrupt controller.
-*
-* A device is a mechanism such as an Ethernet MAC. The device is made
-* up of several parts which include an IPIF and the IP. The IPIF contains most
-* of the device infrastructure which is common to all devices, such as
-* interrupt processing, DMA channels, and FIFOs. The infrastructure may also
-* be referred to as IPIF internal blocks since they are part of the IPIF and
-* are separate blocks that can be selected based upon the needs of the device.
-* The IP of the device is the logic that is unique to the device and interfaces
-* to the IPIF of the device.
-*
-* In general, there are two levels of registers within the IPIF. The first
-* level, referred to as the device level, contains registers which are for the
-* entire device. The second level, referred to as the IP level, contains
-* registers which are specific to the IP of the device. The two levels of
-* registers are designed to be hierarchical such that the device level is
-* is a more general register set above the more specific registers of the IP.
-* The IP level of registers provides functionality which is typically common
-* across all devices and allows IP designers to focus on the unique aspects
-* of the IP.
-*
-* The interrupt registers of the IPIF are parameterizable such that the only
-* the number of bits necessary for the device are implemented. The functions
-* of this component do not attempt to validate that the passed in arguments are
-* valid based upon the number of implemented bits. This is necessary to
-* maintain the level of performance required for the common components. Bits
-* of the registers are assigned starting at the least significant bit of the
-* registers.
-*
-* Critical Sections
-*
-* It is the responsibility of the device driver designer to use critical
-* sections as necessary when calling functions of the IPIF. This component
-* does not use critical sections and it does access registers using
-* read-modify-write operations. Calls to IPIF functions from a main thread
-* and from an interrupt context could produce unpredictable behavior such that
-* the caller must provide the appropriate critical sections.
-*
-* Mutual Exclusion
-*
-* The functions of the IPIF are not thread safe such that the caller of all
-* functions is responsible for ensuring mutual exclusion for an IPIF. Mutual
-* exclusion across multiple IPIF components is not necessary.
-*
-* NOTES:
-*
-* None.
-*
-* MODIFICATION HISTORY:
-*
-* Ver Who Date Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.23b jhl 02/27/01 Repartioned to reduce size
-*
-******************************************************************************/
-
-/***************************** Include Files *********************************/
-
-#include "xipif_v1_23_b.h"
-#include "xio.h"
-
-/************************** Constant Definitions *****************************/
-
-/* the following constant is used to generate bit masks for register testing
- * in the self test functions, it defines the starting bit mask that is to be
- * shifted from the LSB to MSB in creating a register test mask
- */
-#define XIIF_V123B_FIRST_BIT_MASK 1UL
-
-/**************************** Type Definitions *******************************/
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/************************** Variable Definitions *****************************/
-
-/************************** Function Prototypes ******************************/
-
-static XStatus IpIntrSelfTest(u32 RegBaseAddress, u32 IpRegistersWidth);
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* XIpIf_SelfTest
-*
-* DESCRIPTION:
-*
-* This function performs a self test on the specified IPIF component. Many
-* of the registers in the IPIF are tested to ensure proper operation. This
-* function is destructive because the IPIF is reset at the start of the test
-* and at the end of the test to ensure predictable results. The IPIF reset
-* also resets the entire device that uses the IPIF. This function exits with
-* all interrupts for the device disabled.
-*
-* ARGUMENTS:
-*
-* InstancePtr points to the XIpIf to operate on.
-*
-* DeviceRegistersWidth contains the number of bits in the device interrupt
-* registers. The hardware is parameterizable such that only the number of bits
-* necessary to support a device are implemented. This value must be between 0
-* and 32 with 0 indicating there are no device interrupt registers used.
-*
-* IpRegistersWidth contains the number of bits in the IP interrupt registers
-* of the device. The hardware is parameterizable such that only the number of
-* bits necessary to support a device are implemented. This value must be
-* between 0 and 32 with 0 indicating there are no IP interrupt registers used.
-*
-* RETURN VALUE:
-*
-* A value of XST_SUCCESS indicates the test was successful with no errors.
-* Any one of the following error values may also be returned.
-*
-* XST_IPIF_RESET_REGISTER_ERROR The value of a register at reset was
-* not valid
-* XST_IPIF_IP_STATUS_ERROR A write to the IP interrupt status
-* register did not read back correctly
-* XST_IPIF_IP_ACK_ERROR One or more bits in the IP interrupt
-* status register did not reset when acked
-* XST_IPIF_IP_ENABLE_ERROR The IP interrupt enable register
-* did not read back correctly based upon
-* what was written to it
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-
-/* the following constant defines the maximum number of bits which may be
- * used in the registers at the device and IP levels, this is based upon the
- * number of bits available in the registers
- */
-#define XIIF_V123B_MAX_REG_BIT_COUNT 32
-
-XStatus
-XIpIfV123b_SelfTest(u32 RegBaseAddress, u8 IpRegistersWidth)
-{
- XStatus Status;
-
- /* assert to verify arguments are valid */
-
- XASSERT_NONVOID(IpRegistersWidth <= XIIF_V123B_MAX_REG_BIT_COUNT);
-
- /* reset the IPIF such that it's in a known state before the test
- * and interrupts are globally disabled
- */
- XIIF_V123B_RESET(RegBaseAddress);
-
- /* perform the self test on the IP interrupt registers, if
- * it is not successful exit with the status
- */
- Status = IpIntrSelfTest(RegBaseAddress, IpRegistersWidth);
- if (Status != XST_SUCCESS) {
- return Status;
- }
-
- /* reset the IPIF such that it's in a known state before exiting test */
-
- XIIF_V123B_RESET(RegBaseAddress);
-
- /* reaching this point means there were no errors, return success */
-
- return XST_SUCCESS;
-}
-
-/******************************************************************************
-*
-* FUNCTION:
-*
-* IpIntrSelfTest
-*
-* DESCRIPTION:
-*
-* Perform a self test on the IP interrupt registers of the IPIF. This
-* function modifies registers of the IPIF such that they are not guaranteed
-* to be in the same state when it returns. Any bits in the IP interrupt
-* status register which are set are assumed to be set by default after a reset
-* and are not tested in the test.
-*
-* ARGUMENTS:
-*
-* InstancePtr points to the XIpIf to operate on.
-*
-* IpRegistersWidth contains the number of bits in the IP interrupt registers
-* of the device. The hardware is parameterizable such that only the number of
-* bits necessary to support a device are implemented. This value must be
-* between 0 and 32 with 0 indicating there are no IP interrupt registers used.
-*
-* RETURN VALUE:
-*
-* A status indicating XST_SUCCESS if the test was successful. Otherwise, one
-* of the following values is returned.
-*
-* XST_IPIF_RESET_REGISTER_ERROR The value of a register at reset was
-* not valid
-* XST_IPIF_IP_STATUS_ERROR A write to the IP interrupt status
-* register did not read back correctly
-* XST_IPIF_IP_ACK_ERROR One or more bits in the IP status
-* register did not reset when acked
-* XST_IPIF_IP_ENABLE_ERROR The IP interrupt enable register
-* did not read back correctly based upon
-* what was written to it
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-static XStatus
-IpIntrSelfTest(u32 RegBaseAddress, u32 IpRegistersWidth)
-{
- /* ensure that the IP interrupt interrupt enable register is zero
- * as it should be at reset, the interrupt status is dependent upon the
- * IP such that it's reset value is not known
- */
- if (XIIF_V123B_READ_IIER(RegBaseAddress) != 0) {
- return XST_IPIF_RESET_REGISTER_ERROR;
- }
-
- /* if there are any used IP interrupts, then test all of the interrupt
- * bits in all testable registers
- */
- if (IpRegistersWidth > 0) {
- u32 BitCount;
- u32 IpInterruptMask = XIIF_V123B_FIRST_BIT_MASK;
- u32 Mask = XIIF_V123B_FIRST_BIT_MASK; /* bits assigned MSB to LSB */
- u32 InterruptStatus;
-
- /* generate the register masks to be used for IP register tests, the
- * number of bits supported by the hardware is parameterizable such
- * that only that number of bits are implemented in the registers, the
- * bits are allocated starting at the MSB of the registers
- */
- for (BitCount = 1; BitCount < IpRegistersWidth; BitCount++) {
- Mask = Mask << 1;
- IpInterruptMask |= Mask;
- }
-
- /* get the current IP interrupt status register contents, any bits
- * already set must default to 1 at reset in the device and these
- * bits can't be tested in the following test, remove these bits from
- * the mask that was generated for the test
- */
- InterruptStatus = XIIF_V123B_READ_IISR(RegBaseAddress);
- IpInterruptMask &= ~InterruptStatus;
-
- /* set the bits in the device status register and verify them by reading
- * the register again, all bits of the register are latched
- */
- XIIF_V123B_WRITE_IISR(RegBaseAddress, IpInterruptMask);
- InterruptStatus = XIIF_V123B_READ_IISR(RegBaseAddress);
- if ((InterruptStatus & IpInterruptMask) != IpInterruptMask)
- {
- return XST_IPIF_IP_STATUS_ERROR;
- }
-
- /* test to ensure that the bits set in the IP interrupt status register
- * can be cleared by acknowledging them in the IP interrupt status
- * register then read it again and verify it was cleared
- */
- XIIF_V123B_WRITE_IISR(RegBaseAddress, IpInterruptMask);
- InterruptStatus = XIIF_V123B_READ_IISR(RegBaseAddress);
- if ((InterruptStatus & IpInterruptMask) != 0) {
- return XST_IPIF_IP_ACK_ERROR;
- }
-
- /* set the IP interrupt enable set register and then read the IP
- * interrupt enable register and verify the interrupts were enabled
- */
- XIIF_V123B_WRITE_IIER(RegBaseAddress, IpInterruptMask);
- if (XIIF_V123B_READ_IIER(RegBaseAddress) != IpInterruptMask) {
- return XST_IPIF_IP_ENABLE_ERROR;
- }
-
- /* clear the IP interrupt enable register and then read the
- * IP interrupt enable register and verify the interrupts were disabled
- */
- XIIF_V123B_WRITE_IIER(RegBaseAddress, 0);
- if (XIIF_V123B_READ_IIER(RegBaseAddress) != 0) {
- return XST_IPIF_IP_ENABLE_ERROR;
- }
- }
- return XST_SUCCESS;
-}
+/* $Id: xipif_v1_23_b.c,v 1.1.1.1 2009/03/25 22:21:55 kenagy Exp $ */
+/******************************************************************************
+*
+* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
+* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
+* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
+* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
+* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
+* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
+* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
+* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
+* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
+* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
+* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
+* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE.
+*
+* (c) Copyright 2002 Xilinx Inc.
+* All rights reserved.
+*
+******************************************************************************/
+/******************************************************************************
+*
+* FILENAME:
+*
+* xipif.c
+*
+* DESCRIPTION:
+*
+* This file contains the implementation of the XIpIf component. The
+* XIpIf component encapsulates the IPIF, which is the standard interface
+* that IP must adhere to when connecting to a bus. The purpose of this
+* component is to encapsulate the IPIF processing such that maintainability
+* is increased. This component does not provide a lot of abstraction from
+* from the details of the IPIF as it is considered a building block for
+* device drivers. A device driver designer must be familiar with the
+* details of the IPIF hardware to use this component.
+*
+* The IPIF hardware provides a building block for all hardware devices such
+* that each device does not need to reimplement these building blocks. The
+* IPIF contains other building blocks, such as FIFOs and DMA channels, which
+* are also common to many devices. These blocks are implemented as separate
+* hardware blocks and instantiated within the IPIF. The primary hardware of
+* the IPIF which is implemented by this software component is the interrupt
+* architecture. Since there are many blocks of a device which may generate
+* interrupts, all the interrupt processing is contained in the common part
+* of the device, the IPIF. This interrupt processing is for the device level
+* only and does not include any processing for the interrupt controller.
+*
+* A device is a mechanism such as an Ethernet MAC. The device is made
+* up of several parts which include an IPIF and the IP. The IPIF contains most
+* of the device infrastructure which is common to all devices, such as
+* interrupt processing, DMA channels, and FIFOs. The infrastructure may also
+* be referred to as IPIF internal blocks since they are part of the IPIF and
+* are separate blocks that can be selected based upon the needs of the device.
+* The IP of the device is the logic that is unique to the device and interfaces
+* to the IPIF of the device.
+*
+* In general, there are two levels of registers within the IPIF. The first
+* level, referred to as the device level, contains registers which are for the
+* entire device. The second level, referred to as the IP level, contains
+* registers which are specific to the IP of the device. The two levels of
+* registers are designed to be hierarchical such that the device level is
+* is a more general register set above the more specific registers of the IP.
+* The IP level of registers provides functionality which is typically common
+* across all devices and allows IP designers to focus on the unique aspects
+* of the IP.
+*
+* The interrupt registers of the IPIF are parameterizable such that the only
+* the number of bits necessary for the device are implemented. The functions
+* of this component do not attempt to validate that the passed in arguments are
+* valid based upon the number of implemented bits. This is necessary to
+* maintain the level of performance required for the common components. Bits
+* of the registers are assigned starting at the least significant bit of the
+* registers.
+*
+* Critical Sections
+*
+* It is the responsibility of the device driver designer to use critical
+* sections as necessary when calling functions of the IPIF. This component
+* does not use critical sections and it does access registers using
+* read-modify-write operations. Calls to IPIF functions from a main thread
+* and from an interrupt context could produce unpredictable behavior such that
+* the caller must provide the appropriate critical sections.
+*
+* Mutual Exclusion
+*
+* The functions of the IPIF are not thread safe such that the caller of all
+* functions is responsible for ensuring mutual exclusion for an IPIF. Mutual
+* exclusion across multiple IPIF components is not necessary.
+*
+* NOTES:
+*
+* None.
+*
+* MODIFICATION HISTORY:
+*
+* Ver Who Date Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.23b jhl 02/27/01 Repartioned to reduce size
+*
+******************************************************************************/
+
+/***************************** Include Files *********************************/
+
+#include "xipif_v1_23_b.h"
+#include "xio.h"
+
+/************************** Constant Definitions *****************************/
+
+/* the following constant is used to generate bit masks for register testing
+ * in the self test functions, it defines the starting bit mask that is to be
+ * shifted from the LSB to MSB in creating a register test mask
+ */
+#define XIIF_V123B_FIRST_BIT_MASK 1UL
+
+/**************************** Type Definitions *******************************/
+
+/***************** Macros (Inline Functions) Definitions *********************/
+
+/************************** Variable Definitions *****************************/
+
+/************************** Function Prototypes ******************************/
+
+static XStatus IpIntrSelfTest(u32 RegBaseAddress, u32 IpRegistersWidth);
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* XIpIf_SelfTest
+*
+* DESCRIPTION:
+*
+* This function performs a self test on the specified IPIF component. Many
+* of the registers in the IPIF are tested to ensure proper operation. This
+* function is destructive because the IPIF is reset at the start of the test
+* and at the end of the test to ensure predictable results. The IPIF reset
+* also resets the entire device that uses the IPIF. This function exits with
+* all interrupts for the device disabled.
+*
+* ARGUMENTS:
+*
+* InstancePtr points to the XIpIf to operate on.
+*
+* DeviceRegistersWidth contains the number of bits in the device interrupt
+* registers. The hardware is parameterizable such that only the number of bits
+* necessary to support a device are implemented. This value must be between 0
+* and 32 with 0 indicating there are no device interrupt registers used.
+*
+* IpRegistersWidth contains the number of bits in the IP interrupt registers
+* of the device. The hardware is parameterizable such that only the number of
+* bits necessary to support a device are implemented. This value must be
+* between 0 and 32 with 0 indicating there are no IP interrupt registers used.
+*
+* RETURN VALUE:
+*
+* A value of XST_SUCCESS indicates the test was successful with no errors.
+* Any one of the following error values may also be returned.
+*
+* XST_IPIF_RESET_REGISTER_ERROR The value of a register at reset was
+* not valid
+* XST_IPIF_IP_STATUS_ERROR A write to the IP interrupt status
+* register did not read back correctly
+* XST_IPIF_IP_ACK_ERROR One or more bits in the IP interrupt
+* status register did not reset when acked
+* XST_IPIF_IP_ENABLE_ERROR The IP interrupt enable register
+* did not read back correctly based upon
+* what was written to it
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+
+/* the following constant defines the maximum number of bits which may be
+ * used in the registers at the device and IP levels, this is based upon the
+ * number of bits available in the registers
+ */
+#define XIIF_V123B_MAX_REG_BIT_COUNT 32
+
+XStatus
+XIpIfV123b_SelfTest(u32 RegBaseAddress, u8 IpRegistersWidth)
+{
+ XStatus Status;
+
+ /* assert to verify arguments are valid */
+
+ XASSERT_NONVOID(IpRegistersWidth <= XIIF_V123B_MAX_REG_BIT_COUNT);
+
+ /* reset the IPIF such that it's in a known state before the test
+ * and interrupts are globally disabled
+ */
+ XIIF_V123B_RESET(RegBaseAddress);
+
+ /* perform the self test on the IP interrupt registers, if
+ * it is not successful exit with the status
+ */
+ Status = IpIntrSelfTest(RegBaseAddress, IpRegistersWidth);
+ if (Status != XST_SUCCESS) {
+ return Status;
+ }
+
+ /* reset the IPIF such that it's in a known state before exiting test */
+
+ XIIF_V123B_RESET(RegBaseAddress);
+
+ /* reaching this point means there were no errors, return success */
+
+ return XST_SUCCESS;
+}
+
+/******************************************************************************
+*
+* FUNCTION:
+*
+* IpIntrSelfTest
+*
+* DESCRIPTION:
+*
+* Perform a self test on the IP interrupt registers of the IPIF. This
+* function modifies registers of the IPIF such that they are not guaranteed
+* to be in the same state when it returns. Any bits in the IP interrupt
+* status register which are set are assumed to be set by default after a reset
+* and are not tested in the test.
+*
+* ARGUMENTS:
+*
+* InstancePtr points to the XIpIf to operate on.
+*
+* IpRegistersWidth contains the number of bits in the IP interrupt registers
+* of the device. The hardware is parameterizable such that only the number of
+* bits necessary to support a device are implemented. This value must be
+* between 0 and 32 with 0 indicating there are no IP interrupt registers used.
+*
+* RETURN VALUE:
+*
+* A status indicating XST_SUCCESS if the test was successful. Otherwise, one
+* of the following values is returned.
+*
+* XST_IPIF_RESET_REGISTER_ERROR The value of a register at reset was
+* not valid
+* XST_IPIF_IP_STATUS_ERROR A write to the IP interrupt status
+* register did not read back correctly
+* XST_IPIF_IP_ACK_ERROR One or more bits in the IP status
+* register did not reset when acked
+* XST_IPIF_IP_ENABLE_ERROR The IP interrupt enable register
+* did not read back correctly based upon
+* what was written to it
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+static XStatus
+IpIntrSelfTest(u32 RegBaseAddress, u32 IpRegistersWidth)
+{
+ /* ensure that the IP interrupt interrupt enable register is zero
+ * as it should be at reset, the interrupt status is dependent upon the
+ * IP such that it's reset value is not known
+ */
+ if (XIIF_V123B_READ_IIER(RegBaseAddress) != 0) {
+ return XST_IPIF_RESET_REGISTER_ERROR;
+ }
+
+ /* if there are any used IP interrupts, then test all of the interrupt
+ * bits in all testable registers
+ */
+ if (IpRegistersWidth > 0) {
+ u32 BitCount;
+ u32 IpInterruptMask = XIIF_V123B_FIRST_BIT_MASK;
+ u32 Mask = XIIF_V123B_FIRST_BIT_MASK; /* bits assigned MSB to LSB */
+ u32 InterruptStatus;
+
+ /* generate the register masks to be used for IP register tests, the
+ * number of bits supported by the hardware is parameterizable such
+ * that only that number of bits are implemented in the registers, the
+ * bits are allocated starting at the MSB of the registers
+ */
+ for (BitCount = 1; BitCount < IpRegistersWidth; BitCount++) {
+ Mask = Mask << 1;
+ IpInterruptMask |= Mask;
+ }
+
+ /* get the current IP interrupt status register contents, any bits
+ * already set must default to 1 at reset in the device and these
+ * bits can't be tested in the following test, remove these bits from
+ * the mask that was generated for the test
+ */
+ InterruptStatus = XIIF_V123B_READ_IISR(RegBaseAddress);
+ IpInterruptMask &= ~InterruptStatus;
+
+ /* set the bits in the device status register and verify them by reading
+ * the register again, all bits of the register are latched
+ */
+ XIIF_V123B_WRITE_IISR(RegBaseAddress, IpInterruptMask);
+ InterruptStatus = XIIF_V123B_READ_IISR(RegBaseAddress);
+ if ((InterruptStatus & IpInterruptMask) != IpInterruptMask)
+ {
+ return XST_IPIF_IP_STATUS_ERROR;
+ }
+
+ /* test to ensure that the bits set in the IP interrupt status register
+ * can be cleared by acknowledging them in the IP interrupt status
+ * register then read it again and verify it was cleared
+ */
+ XIIF_V123B_WRITE_IISR(RegBaseAddress, IpInterruptMask);
+ InterruptStatus = XIIF_V123B_READ_IISR(RegBaseAddress);
+ if ((InterruptStatus & IpInterruptMask) != 0) {
+ return XST_IPIF_IP_ACK_ERROR;
+ }
+
+ /* set the IP interrupt enable set register and then read the IP
+ * interrupt enable register and verify the interrupts were enabled
+ */
+ XIIF_V123B_WRITE_IIER(RegBaseAddress, IpInterruptMask);
+ if (XIIF_V123B_READ_IIER(RegBaseAddress) != IpInterruptMask) {
+ return XST_IPIF_IP_ENABLE_ERROR;
+ }
+
+ /* clear the IP interrupt enable register and then read the
+ * IP interrupt enable register and verify the interrupts were disabled
+ */
+ XIIF_V123B_WRITE_IIER(RegBaseAddress, 0);
+ if (XIIF_V123B_READ_IIER(RegBaseAddress) != 0) {
+ return XST_IPIF_IP_ENABLE_ERROR;
+ }
+ }
+ return XST_SUCCESS;
+}
diff -Naur u-boot-2009.03_orig/board/xilinx/common/xipif_v1_23_b.h u-boot-2009.03/board/xilinx/common/xipif_v1_23_b.h
--- u-boot-2009.03_orig/board/xilinx/common/xipif_v1_23_b.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/xilinx/common/xipif_v1_23_b.h 2009-03-31 14:48:17.429767200 -0700
@@ -1,746 +1,746 @@
-/* $Id: xipif_v1_23_b.h,v 1.1 2002/03/18 23:24:52 linnj Exp $ */
-/******************************************************************************
-*
-* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
-* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
-* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
-* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
-* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
-* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
-* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
-* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
-* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
-* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
-* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
-* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE.
-*
-* (c) Copyright 2002 Xilinx Inc.
-* All rights reserved.
-*
-******************************************************************************/
-/******************************************************************************
-*
-* FILENAME:
-*
-* xipif.h
-*
-* DESCRIPTION:
-*
-* The XIpIf component encapsulates the IPIF, which is the standard interface
-* that IP must adhere to when connecting to a bus. The purpose of this
-* component is to encapsulate the IPIF processing such that maintainability
-* is increased. This component does not provide a lot of abstraction from
-* from the details of the IPIF as it is considered a building block for
-* device drivers. A device driver designer must be familiar with the
-* details of the IPIF hardware to use this component.
-*
-* The IPIF hardware provides a building block for all hardware devices such
-* that each device does not need to reimplement these building blocks. The
-* IPIF contains other building blocks, such as FIFOs and DMA channels, which
-* are also common to many devices. These blocks are implemented as separate
-* hardware blocks and instantiated within the IPIF. The primary hardware of
-* the IPIF which is implemented by this software component is the interrupt
-* architecture. Since there are many blocks of a device which may generate
-* interrupts, all the interrupt processing is contained in the common part
-* of the device, the IPIF. This interrupt processing is for the device level
-* only and does not include any processing for the interrupt controller.
-*
-* A device is a mechanism such as an Ethernet MAC. The device is made
-* up of several parts which include an IPIF and the IP. The IPIF contains most
-* of the device infrastructure which is common to all devices, such as
-* interrupt processing, DMA channels, and FIFOs. The infrastructure may also
-* be referred to as IPIF internal blocks since they are part of the IPIF and
-* are separate blocks that can be selected based upon the needs of the device.
-* The IP of the device is the logic that is unique to the device and interfaces
-* to the IPIF of the device.
-*
-* In general, there are two levels of registers within the IPIF. The first
-* level, referred to as the device level, contains registers which are for the
-* entire device. The second level, referred to as the IP level, contains
-* registers which are specific to the IP of the device. The two levels of
-* registers are designed to be hierarchical such that the device level is
-* is a more general register set above the more specific registers of the IP.
-* The IP level of registers provides functionality which is typically common
-* across all devices and allows IP designers to focus on the unique aspects
-* of the IP.
-*
-* Critical Sections
-*
-* It is the responsibility of the device driver designer to use critical
-* sections as necessary when calling functions of the IPIF. This component
-* does not use critical sections and it does access registers using
-* read-modify-write operations. Calls to IPIF functions from a main thread
-* and from an interrupt context could produce unpredictable behavior such that
-* the caller must provide the appropriate critical sections.
-*
-* Mutual Exclusion
-*
-* The functions of the IPIF are not thread safe such that the caller of all
-* functions is responsible for ensuring mutual exclusion for an IPIF. Mutual
-* exclusion across multiple IPIF components is not necessary.
-*
-* NOTES:
-*
-* None.
-*
-* MODIFICATION HISTORY:
-*
-* Ver Who Date Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.23b jhl 02/27/01 Repartioned to minimize size
-*
-******************************************************************************/
-
-#ifndef XIPIF_H /* prevent circular inclusions */
-#define XIPIF_H /* by using protection macros */
-
-/***************************** Include Files *********************************/
-#include "xbasic_types.h"
-#include "xstatus.h"
-#include "xversion.h"
-
-/************************** Constant Definitions *****************************/
-
-/* the following constants define the register offsets for the registers of the
- * IPIF, there are some holes in the memory map for reserved addresses to allow
- * other registers to be added and still match the memory map of the interrupt
- * controller registers
- */
-#define XIIF_V123B_DISR_OFFSET 0UL /* device interrupt status register */
-#define XIIF_V123B_DIPR_OFFSET 4UL /* device interrupt pending register */
-#define XIIF_V123B_DIER_OFFSET 8UL /* device interrupt enable register */
-#define XIIF_V123B_DIIR_OFFSET 24UL /* device interrupt ID register */
-#define XIIF_V123B_DGIER_OFFSET 28UL /* device global interrupt enable reg */
-#define XIIF_V123B_IISR_OFFSET 32UL /* IP interrupt status register */
-#define XIIF_V123B_IIER_OFFSET 40UL /* IP interrupt enable register */
-#define XIIF_V123B_RESETR_OFFSET 64UL /* reset register */
-
-#define XIIF_V123B_RESET_MASK 0xAUL
-
-/* the following constant is used for the device global interrupt enable
- * register, to enable all interrupts for the device, this is the only bit
- * in the register
- */
-#define XIIF_V123B_GINTR_ENABLE_MASK 0x80000000UL
-
-/* the following constants contain the masks to identify each internal IPIF
- * condition in the device registers of the IPIF, interrupts are assigned
- * in the register from LSB to the MSB
- */
-#define XIIF_V123B_ERROR_MASK 1UL /* LSB of the register */
-
-/* The following constants contain interrupt IDs which identify each internal
- * IPIF condition, this value must correlate with the mask constant for the
- * error
- */
-#define XIIF_V123B_ERROR_INTERRUPT_ID 0 /* interrupt bit #, (LSB = 0) */
-#define XIIF_V123B_NO_INTERRUPT_ID 128 /* no interrupts are pending */
-
-/**************************** Type Definitions *******************************/
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_RESET
-*
-* DESCRIPTION:
-*
-* Reset the IPIF component and hardware. This is a destructive operation that
-* could cause the loss of data since resetting the IPIF of a device also
-* resets the device using the IPIF and any blocks, such as FIFOs or DMA
-* channels, within the IPIF. All registers of the IPIF will contain their
-* reset value when this function returns.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-
-/* the following constant is used in the reset register to cause the IPIF to
- * reset
- */
-#define XIIF_V123B_RESET(RegBaseAddress) \
- XIo_Out32(RegBaseAddress + XIIF_V123B_RESETR_OFFSET, XIIF_V123B_RESET_MASK)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_WRITE_DISR
-*
-* DESCRIPTION:
-*
-* This function sets the device interrupt status register to the value.
-* This register indicates the status of interrupt sources for a device
-* which contains the IPIF. The status is independent of whether interrupts
-* are enabled and could be used for polling a device at a higher level rather
-* than a more detailed level.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* device which contains the IPIF. With the exception of some internal IPIF
-* conditions, the contents of this register are not latched but indicate
-* the live status of the interrupt sources within the device. Writing any of
-* the non-latched bits of the register will have no effect on the register.
-*
-* For the latched bits of this register only, setting a bit which is zero
-* within this register causes an interrupt to generated. The device global
-* interrupt enable register and the device interrupt enable register must be set
-* appropriately to allow an interrupt to be passed out of the device. The
-* interrupt is cleared by writing to this register with the bits to be
-* cleared set to a one and all others to zero. This register implements a
-* toggle on write functionality meaning any bits which are set in the value
-* written cause the bits in the register to change to the opposite state.
-*
-* This function writes the specified value to the register such that
-* some bits may be set and others cleared. It is the caller's responsibility
-* to get the value of the register prior to setting the value to prevent a
-* destructive behavior.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* Status contains the value to be written to the interrupt status register of
-* the device. The only bits which can be written are the latched bits which
-* contain the internal IPIF conditions. The following values may be used to
-* set the status register or clear an interrupt condition.
-*
-* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_WRITE_DISR(RegBaseAddress, Status) \
- XIo_Out32((RegBaseAddress) + XIIF_V123B_DISR_OFFSET, (Status))
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_READ_DISR
-*
-* DESCRIPTION:
-*
-* This function gets the device interrupt status register contents.
-* This register indicates the status of interrupt sources for a device
-* which contains the IPIF. The status is independent of whether interrupts
-* are enabled and could be used for polling a device at a higher level.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* device which contains the IPIF. With the exception of some internal IPIF
-* conditions, the contents of this register are not latched but indicate
-* the live status of the interrupt sources within the device.
-*
-* For only the latched bits of this register, the interrupt may be cleared by
-* writing to these bits in the status register.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* A status which contains the value read from the interrupt status register of
-* the device. The bit definitions are specific to the device with
-* the exception of the latched internal IPIF condition bits. The following
-* values may be used to detect internal IPIF conditions in the status.
-*
-* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_READ_DISR(RegBaseAddress) \
- XIo_In32((RegBaseAddress) + XIIF_V123B_DISR_OFFSET)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_WRITE_DIER
-*
-* DESCRIPTION:
-*
-* This function sets the device interrupt enable register contents.
-* This register controls which interrupt sources of the device are allowed to
-* generate an interrupt. The device global interrupt enable register must also
-* be set appropriately for an interrupt to be passed out of the device.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* device which contains the IPIF. Setting a bit in this register enables that
-* interrupt source to generate an interrupt. Clearing a bit in this register
-* disables interrupt generation for that interrupt source.
-*
-* This function writes only the specified value to the register such that
-* some interrupts source may be enabled and others disabled. It is the
-* caller's responsibility to get the value of the interrupt enable register
-* prior to setting the value to prevent an destructive behavior.
-*
-* An interrupt source may not be enabled to generate an interrupt, but can
-* still be polled in the interrupt status register.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* Enable contains the value to be written to the interrupt enable register
-* of the device. The bit definitions are specific to the device with
-* the exception of the internal IPIF conditions. The following
-* values may be used to enable the internal IPIF conditions interrupts.
-*
-* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* Signature: u32 XIIF_V123B_WRITE_DIER(u32 RegBaseAddress,
-* u32 Enable)
-*
-******************************************************************************/
-#define XIIF_V123B_WRITE_DIER(RegBaseAddress, Enable) \
- XIo_Out32((RegBaseAddress) + XIIF_V123B_DIER_OFFSET, (Enable))
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_READ_DIER
-*
-* DESCRIPTION:
-*
-* This function gets the device interrupt enable register contents.
-* This register controls which interrupt sources of the device
-* are allowed to generate an interrupt. The device global interrupt enable
-* register and the device interrupt enable register must also be set
-* appropriately for an interrupt to be passed out of the device.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* device which contains the IPIF. Setting a bit in this register enables that
-* interrupt source to generate an interrupt if the global enable is set
-* appropriately. Clearing a bit in this register disables interrupt generation
-* for that interrupt source regardless of the global interrupt enable.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* The value read from the interrupt enable register of the device. The bit
-* definitions are specific to the device with the exception of the internal
-* IPIF conditions. The following values may be used to determine from the
-* value if the internal IPIF conditions interrupts are enabled.
-*
-* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_READ_DIER(RegBaseAddress) \
- XIo_In32((RegBaseAddress) + XIIF_V123B_DIER_OFFSET)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_READ_DIPR
-*
-* DESCRIPTION:
-*
-* This function gets the device interrupt pending register contents.
-* This register indicates the pending interrupt sources, those that are waiting
-* to be serviced by the software, for a device which contains the IPIF.
-* An interrupt must be enabled in the interrupt enable register of the IPIF to
-* be pending.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* the device which contains the IPIF. With the exception of some internal IPIF
-* conditions, the contents of this register are not latched since the condition
-* is latched in the IP interrupt status register, by an internal block of the
-* IPIF such as a FIFO or DMA channel, or by the IP of the device. This register
-* is read only and is not latched, but it is necessary to acknowledge (clear)
-* the interrupt condition by performing the appropriate processing for the IP
-* or block within the IPIF.
-*
-* This register can be thought of as the contents of the interrupt status
-* register ANDed with the contents of the interrupt enable register.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* The value read from the interrupt pending register of the device. The bit
-* definitions are specific to the device with the exception of the latched
-* internal IPIF condition bits. The following values may be used to detect
-* internal IPIF conditions in the value.
-*
-* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_READ_DIPR(RegBaseAddress) \
- XIo_In32((RegBaseAddress) + XIIF_V123B_DIPR_OFFSET)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_READ_DIIR
-*
-* DESCRIPTION:
-*
-* This function gets the device interrupt ID for the highest priority interrupt
-* which is pending from the interrupt ID register. This function provides
-* priority resolution such that faster interrupt processing is possible.
-* Without priority resolution, it is necessary for the software to read the
-* interrupt pending register and then check each interrupt source to determine
-* if an interrupt is pending. Priority resolution becomes more important as the
-* number of interrupt sources becomes larger.
-*
-* Interrupt priorities are based upon the bit position of the interrupt in the
-* interrupt pending register with bit 0 being the highest priority. The
-* interrupt ID is the priority of the interrupt, 0 - 31, with 0 being the
-* highest priority. The interrupt ID register is live rather than latched such
-* that multiple calls to this function may not yield the same results. A
-* special value, outside of the interrupt priority range of 0 - 31, is
-* contained in the register which indicates that no interrupt is pending. This
-* may be useful for allowing software to continue processing interrupts in a
-* loop until there are no longer any interrupts pending.
-*
-* The interrupt ID is designed to allow a function pointer table to be used
-* in the software such that the interrupt ID is used as an index into that
-* table. The function pointer table could contain an instance pointer, such
-* as to DMA channel, and a function pointer to the function which handles
-* that interrupt. This design requires the interrupt processing of the device
-* driver to be partitioned into smaller more granular pieces based upon
-* hardware used by the device, such as DMA channels and FIFOs.
-*
-* It is not mandatory that this function be used by the device driver software.
-* It may choose to read the pending register and resolve the pending interrupt
-* priorities on it's own.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* An interrupt ID, 0 - 31, which identifies the highest priority interrupt
-* which is pending. A value of XIIF_NO_INTERRUPT_ID indicates that there is
-* no interrupt pending. The following values may be used to identify the
-* interrupt ID for the internal IPIF interrupts.
-*
-* XIIF_V123B_ERROR_INTERRUPT_ID Indicates a device error in the IPIF
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_READ_DIIR(RegBaseAddress) \
- XIo_In32((RegBaseAddress) + XIIF_V123B_DIIR_OFFSET)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_GLOBAL_INTR_DISABLE
-*
-* DESCRIPTION:
-*
-* This function disables all interrupts for the device by writing to the global
-* interrupt enable register. This register provides the ability to disable
-* interrupts without any modifications to the interrupt enable register such
-* that it is minimal effort to restore the interrupts to the previous enabled
-* state. The corresponding function, XIpIf_GlobalIntrEnable, is provided to
-* restore the interrupts to the previous enabled state. This function is
-* designed to be used in critical sections of device drivers such that it is
-* not necessary to disable other device interrupts.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_GINTR_DISABLE(RegBaseAddress) \
- XIo_Out32((RegBaseAddress) + XIIF_V123B_DGIER_OFFSET, 0)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_GINTR_ENABLE
-*
-* DESCRIPTION:
-*
-* This function writes to the global interrupt enable register to enable
-* interrupts from the device. This register provides the ability to enable
-* interrupts without any modifications to the interrupt enable register such
-* that it is minimal effort to restore the interrupts to the previous enabled
-* state. This function does not enable individual interrupts as the interrupt
-* enable register must be set appropriately. This function is designed to be
-* used in critical sections of device drivers such that it is not necessary to
-* disable other device interrupts.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_GINTR_ENABLE(RegBaseAddress) \
- XIo_Out32((RegBaseAddress) + XIIF_V123B_DGIER_OFFSET, \
- XIIF_V123B_GINTR_ENABLE_MASK)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_IS_GINTR_ENABLED
-*
-* DESCRIPTION:
-*
-* This function determines if interrupts are enabled at the global level by
-* reading the gloabl interrupt register. This register provides the ability to
-* disable interrupts without any modifications to the interrupt enable register
-* such that it is minimal effort to restore the interrupts to the previous
-* enabled state.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* XTRUE if interrupts are enabled for the IPIF, XFALSE otherwise.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_IS_GINTR_ENABLED(RegBaseAddress) \
- (XIo_In32((RegBaseAddress) + XIIF_V123B_DGIER_OFFSET) == \
- XIIF_V123B_GINTR_ENABLE_MASK)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_WRITE_IISR
-*
-* DESCRIPTION:
-*
-* This function sets the IP interrupt status register to the specified value.
-* This register indicates the status of interrupt sources for the IP of the
-* device. The IP is defined as the part of the device that connects to the
-* IPIF. The status is independent of whether interrupts are enabled such that
-* the status register may also be polled when interrupts are not enabled.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* IP. All bits of this register are latched. Setting a bit which is zero
-* within this register causes an interrupt to be generated. The device global
-* interrupt enable register and the device interrupt enable register must be set
-* appropriately to allow an interrupt to be passed out of the device. The
-* interrupt is cleared by writing to this register with the bits to be
-* cleared set to a one and all others to zero. This register implements a
-* toggle on write functionality meaning any bits which are set in the value
-* written cause the bits in the register to change to the opposite state.
-*
-* This function writes only the specified value to the register such that
-* some status bits may be set and others cleared. It is the caller's
-* responsibility to get the value of the register prior to setting the value
-* to prevent an destructive behavior.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* Status contains the value to be written to the IP interrupt status
-* register. The bit definitions are specific to the device IP.
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_WRITE_IISR(RegBaseAddress, Status) \
- XIo_Out32((RegBaseAddress) + XIIF_V123B_IISR_OFFSET, (Status))
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_READ_IISR
-*
-* DESCRIPTION:
-*
-* This function gets the contents of the IP interrupt status register.
-* This register indicates the status of interrupt sources for the IP of the
-* device. The IP is defined as the part of the device that connects to the
-* IPIF. The status is independent of whether interrupts are enabled such
-* that the status register may also be polled when interrupts are not enabled.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* device. All bits of this register are latched. Writing a 1 to a bit within
-* this register causes an interrupt to be generated if enabled in the interrupt
-* enable register and the global interrupt enable is set. Since the status is
-* latched, each status bit must be acknowledged in order for the bit in the
-* status register to be updated. Each bit can be acknowledged by writing a
-* 0 to the bit in the status register.
-
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* A status which contains the value read from the IP interrupt status register.
-* The bit definitions are specific to the device IP.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_READ_IISR(RegBaseAddress) \
- XIo_In32((RegBaseAddress) + XIIF_V123B_IISR_OFFSET)
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_WRITE_IIER
-*
-* DESCRIPTION:
-*
-* This function sets the IP interrupt enable register contents. This register
-* controls which interrupt sources of the IP are allowed to generate an
-* interrupt. The global interrupt enable register and the device interrupt
-* enable register must also be set appropriately for an interrupt to be
-* passed out of the device containing the IPIF and the IP.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* IP. Setting a bit in this register enables the interrupt source to generate
-* an interrupt. Clearing a bit in this register disables interrupt generation
-* for that interrupt source.
-*
-* This function writes only the specified value to the register such that
-* some interrupt sources may be enabled and others disabled. It is the
-* caller's responsibility to get the value of the interrupt enable register
-* prior to setting the value to prevent an destructive behavior.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* Enable contains the value to be written to the IP interrupt enable register.
-* The bit definitions are specific to the device IP.
-*
-* RETURN VALUE:
-*
-* None.
-*
-* NOTES:
-*
-* None.
-*
-******************************************************************************/
-#define XIIF_V123B_WRITE_IIER(RegBaseAddress, Enable) \
- XIo_Out32((RegBaseAddress) + XIIF_V123B_IIER_OFFSET, (Enable))
-
-/******************************************************************************
-*
-* MACRO:
-*
-* XIIF_V123B_READ_IIER
-*
-* DESCRIPTION:
-*
-*
-* This function gets the IP interrupt enable register contents. This register
-* controls which interrupt sources of the IP are allowed to generate an
-* interrupt. The global interrupt enable register and the device interrupt
-* enable register must also be set appropriately for an interrupt to be
-* passed out of the device containing the IPIF and the IP.
-*
-* Each bit of the register correlates to a specific interrupt source within the
-* IP. Setting a bit in this register enables the interrupt source to generate
-* an interrupt. Clearing a bit in this register disables interrupt generation
-* for that interrupt source.
-*
-* ARGUMENTS:
-*
-* RegBaseAddress contains the base address of the IPIF registers.
-*
-* RETURN VALUE:
-*
-* The contents read from the IP interrupt enable register. The bit definitions
-* are specific to the device IP.
-*
-* NOTES:
-*
-* Signature: u32 XIIF_V123B_READ_IIER(u32 RegBaseAddress)
-*
-******************************************************************************/
-#define XIIF_V123B_READ_IIER(RegBaseAddress) \
- XIo_In32((RegBaseAddress) + XIIF_V123B_IIER_OFFSET)
-
-/************************** Function Prototypes ******************************/
-
-/*
- * Initialization Functions
- */
-XStatus XIpIfV123b_SelfTest(u32 RegBaseAddress, u8 IpRegistersWidth);
-
-#endif /* end of protection macro */
+/* $Id: xipif_v1_23_b.h,v 1.1.1.1 2009/03/25 22:21:55 kenagy Exp $ */
+/******************************************************************************
+*
+* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
+* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
+* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
+* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
+* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
+* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
+* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
+* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
+* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
+* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
+* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
+* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE.
+*
+* (c) Copyright 2002 Xilinx Inc.
+* All rights reserved.
+*
+******************************************************************************/
+/******************************************************************************
+*
+* FILENAME:
+*
+* xipif.h
+*
+* DESCRIPTION:
+*
+* The XIpIf component encapsulates the IPIF, which is the standard interface
+* that IP must adhere to when connecting to a bus. The purpose of this
+* component is to encapsulate the IPIF processing such that maintainability
+* is increased. This component does not provide a lot of abstraction from
+* from the details of the IPIF as it is considered a building block for
+* device drivers. A device driver designer must be familiar with the
+* details of the IPIF hardware to use this component.
+*
+* The IPIF hardware provides a building block for all hardware devices such
+* that each device does not need to reimplement these building blocks. The
+* IPIF contains other building blocks, such as FIFOs and DMA channels, which
+* are also common to many devices. These blocks are implemented as separate
+* hardware blocks and instantiated within the IPIF. The primary hardware of
+* the IPIF which is implemented by this software component is the interrupt
+* architecture. Since there are many blocks of a device which may generate
+* interrupts, all the interrupt processing is contained in the common part
+* of the device, the IPIF. This interrupt processing is for the device level
+* only and does not include any processing for the interrupt controller.
+*
+* A device is a mechanism such as an Ethernet MAC. The device is made
+* up of several parts which include an IPIF and the IP. The IPIF contains most
+* of the device infrastructure which is common to all devices, such as
+* interrupt processing, DMA channels, and FIFOs. The infrastructure may also
+* be referred to as IPIF internal blocks since they are part of the IPIF and
+* are separate blocks that can be selected based upon the needs of the device.
+* The IP of the device is the logic that is unique to the device and interfaces
+* to the IPIF of the device.
+*
+* In general, there are two levels of registers within the IPIF. The first
+* level, referred to as the device level, contains registers which are for the
+* entire device. The second level, referred to as the IP level, contains
+* registers which are specific to the IP of the device. The two levels of
+* registers are designed to be hierarchical such that the device level is
+* is a more general register set above the more specific registers of the IP.
+* The IP level of registers provides functionality which is typically common
+* across all devices and allows IP designers to focus on the unique aspects
+* of the IP.
+*
+* Critical Sections
+*
+* It is the responsibility of the device driver designer to use critical
+* sections as necessary when calling functions of the IPIF. This component
+* does not use critical sections and it does access registers using
+* read-modify-write operations. Calls to IPIF functions from a main thread
+* and from an interrupt context could produce unpredictable behavior such that
+* the caller must provide the appropriate critical sections.
+*
+* Mutual Exclusion
+*
+* The functions of the IPIF are not thread safe such that the caller of all
+* functions is responsible for ensuring mutual exclusion for an IPIF. Mutual
+* exclusion across multiple IPIF components is not necessary.
+*
+* NOTES:
+*
+* None.
+*
+* MODIFICATION HISTORY:
+*
+* Ver Who Date Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.23b jhl 02/27/01 Repartioned to minimize size
+*
+******************************************************************************/
+
+#ifndef XIPIF_H /* prevent circular inclusions */
+#define XIPIF_H /* by using protection macros */
+
+/***************************** Include Files *********************************/
+#include "xbasic_types.h"
+#include "xstatus.h"
+#include "xversion.h"
+
+/************************** Constant Definitions *****************************/
+
+/* the following constants define the register offsets for the registers of the
+ * IPIF, there are some holes in the memory map for reserved addresses to allow
+ * other registers to be added and still match the memory map of the interrupt
+ * controller registers
+ */
+#define XIIF_V123B_DISR_OFFSET 0UL /* device interrupt status register */
+#define XIIF_V123B_DIPR_OFFSET 4UL /* device interrupt pending register */
+#define XIIF_V123B_DIER_OFFSET 8UL /* device interrupt enable register */
+#define XIIF_V123B_DIIR_OFFSET 24UL /* device interrupt ID register */
+#define XIIF_V123B_DGIER_OFFSET 28UL /* device global interrupt enable reg */
+#define XIIF_V123B_IISR_OFFSET 32UL /* IP interrupt status register */
+#define XIIF_V123B_IIER_OFFSET 40UL /* IP interrupt enable register */
+#define XIIF_V123B_RESETR_OFFSET 64UL /* reset register */
+
+#define XIIF_V123B_RESET_MASK 0xAUL
+
+/* the following constant is used for the device global interrupt enable
+ * register, to enable all interrupts for the device, this is the only bit
+ * in the register
+ */
+#define XIIF_V123B_GINTR_ENABLE_MASK 0x80000000UL
+
+/* the following constants contain the masks to identify each internal IPIF
+ * condition in the device registers of the IPIF, interrupts are assigned
+ * in the register from LSB to the MSB
+ */
+#define XIIF_V123B_ERROR_MASK 1UL /* LSB of the register */
+
+/* The following constants contain interrupt IDs which identify each internal
+ * IPIF condition, this value must correlate with the mask constant for the
+ * error
+ */
+#define XIIF_V123B_ERROR_INTERRUPT_ID 0 /* interrupt bit #, (LSB = 0) */
+#define XIIF_V123B_NO_INTERRUPT_ID 128 /* no interrupts are pending */
+
+/**************************** Type Definitions *******************************/
+
+/***************** Macros (Inline Functions) Definitions *********************/
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_RESET
+*
+* DESCRIPTION:
+*
+* Reset the IPIF component and hardware. This is a destructive operation that
+* could cause the loss of data since resetting the IPIF of a device also
+* resets the device using the IPIF and any blocks, such as FIFOs or DMA
+* channels, within the IPIF. All registers of the IPIF will contain their
+* reset value when this function returns.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+
+/* the following constant is used in the reset register to cause the IPIF to
+ * reset
+ */
+#define XIIF_V123B_RESET(RegBaseAddress) \
+ XIo_Out32(RegBaseAddress + XIIF_V123B_RESETR_OFFSET, XIIF_V123B_RESET_MASK)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_WRITE_DISR
+*
+* DESCRIPTION:
+*
+* This function sets the device interrupt status register to the value.
+* This register indicates the status of interrupt sources for a device
+* which contains the IPIF. The status is independent of whether interrupts
+* are enabled and could be used for polling a device at a higher level rather
+* than a more detailed level.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* device which contains the IPIF. With the exception of some internal IPIF
+* conditions, the contents of this register are not latched but indicate
+* the live status of the interrupt sources within the device. Writing any of
+* the non-latched bits of the register will have no effect on the register.
+*
+* For the latched bits of this register only, setting a bit which is zero
+* within this register causes an interrupt to generated. The device global
+* interrupt enable register and the device interrupt enable register must be set
+* appropriately to allow an interrupt to be passed out of the device. The
+* interrupt is cleared by writing to this register with the bits to be
+* cleared set to a one and all others to zero. This register implements a
+* toggle on write functionality meaning any bits which are set in the value
+* written cause the bits in the register to change to the opposite state.
+*
+* This function writes the specified value to the register such that
+* some bits may be set and others cleared. It is the caller's responsibility
+* to get the value of the register prior to setting the value to prevent a
+* destructive behavior.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* Status contains the value to be written to the interrupt status register of
+* the device. The only bits which can be written are the latched bits which
+* contain the internal IPIF conditions. The following values may be used to
+* set the status register or clear an interrupt condition.
+*
+* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_WRITE_DISR(RegBaseAddress, Status) \
+ XIo_Out32((RegBaseAddress) + XIIF_V123B_DISR_OFFSET, (Status))
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_READ_DISR
+*
+* DESCRIPTION:
+*
+* This function gets the device interrupt status register contents.
+* This register indicates the status of interrupt sources for a device
+* which contains the IPIF. The status is independent of whether interrupts
+* are enabled and could be used for polling a device at a higher level.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* device which contains the IPIF. With the exception of some internal IPIF
+* conditions, the contents of this register are not latched but indicate
+* the live status of the interrupt sources within the device.
+*
+* For only the latched bits of this register, the interrupt may be cleared by
+* writing to these bits in the status register.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* A status which contains the value read from the interrupt status register of
+* the device. The bit definitions are specific to the device with
+* the exception of the latched internal IPIF condition bits. The following
+* values may be used to detect internal IPIF conditions in the status.
+*
+* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_READ_DISR(RegBaseAddress) \
+ XIo_In32((RegBaseAddress) + XIIF_V123B_DISR_OFFSET)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_WRITE_DIER
+*
+* DESCRIPTION:
+*
+* This function sets the device interrupt enable register contents.
+* This register controls which interrupt sources of the device are allowed to
+* generate an interrupt. The device global interrupt enable register must also
+* be set appropriately for an interrupt to be passed out of the device.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* device which contains the IPIF. Setting a bit in this register enables that
+* interrupt source to generate an interrupt. Clearing a bit in this register
+* disables interrupt generation for that interrupt source.
+*
+* This function writes only the specified value to the register such that
+* some interrupts source may be enabled and others disabled. It is the
+* caller's responsibility to get the value of the interrupt enable register
+* prior to setting the value to prevent an destructive behavior.
+*
+* An interrupt source may not be enabled to generate an interrupt, but can
+* still be polled in the interrupt status register.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* Enable contains the value to be written to the interrupt enable register
+* of the device. The bit definitions are specific to the device with
+* the exception of the internal IPIF conditions. The following
+* values may be used to enable the internal IPIF conditions interrupts.
+*
+* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* Signature: u32 XIIF_V123B_WRITE_DIER(u32 RegBaseAddress,
+* u32 Enable)
+*
+******************************************************************************/
+#define XIIF_V123B_WRITE_DIER(RegBaseAddress, Enable) \
+ XIo_Out32((RegBaseAddress) + XIIF_V123B_DIER_OFFSET, (Enable))
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_READ_DIER
+*
+* DESCRIPTION:
+*
+* This function gets the device interrupt enable register contents.
+* This register controls which interrupt sources of the device
+* are allowed to generate an interrupt. The device global interrupt enable
+* register and the device interrupt enable register must also be set
+* appropriately for an interrupt to be passed out of the device.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* device which contains the IPIF. Setting a bit in this register enables that
+* interrupt source to generate an interrupt if the global enable is set
+* appropriately. Clearing a bit in this register disables interrupt generation
+* for that interrupt source regardless of the global interrupt enable.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* The value read from the interrupt enable register of the device. The bit
+* definitions are specific to the device with the exception of the internal
+* IPIF conditions. The following values may be used to determine from the
+* value if the internal IPIF conditions interrupts are enabled.
+*
+* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_READ_DIER(RegBaseAddress) \
+ XIo_In32((RegBaseAddress) + XIIF_V123B_DIER_OFFSET)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_READ_DIPR
+*
+* DESCRIPTION:
+*
+* This function gets the device interrupt pending register contents.
+* This register indicates the pending interrupt sources, those that are waiting
+* to be serviced by the software, for a device which contains the IPIF.
+* An interrupt must be enabled in the interrupt enable register of the IPIF to
+* be pending.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* the device which contains the IPIF. With the exception of some internal IPIF
+* conditions, the contents of this register are not latched since the condition
+* is latched in the IP interrupt status register, by an internal block of the
+* IPIF such as a FIFO or DMA channel, or by the IP of the device. This register
+* is read only and is not latched, but it is necessary to acknowledge (clear)
+* the interrupt condition by performing the appropriate processing for the IP
+* or block within the IPIF.
+*
+* This register can be thought of as the contents of the interrupt status
+* register ANDed with the contents of the interrupt enable register.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* The value read from the interrupt pending register of the device. The bit
+* definitions are specific to the device with the exception of the latched
+* internal IPIF condition bits. The following values may be used to detect
+* internal IPIF conditions in the value.
+*
+* XIIF_V123B_ERROR_MASK Indicates a device error in the IPIF
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_READ_DIPR(RegBaseAddress) \
+ XIo_In32((RegBaseAddress) + XIIF_V123B_DIPR_OFFSET)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_READ_DIIR
+*
+* DESCRIPTION:
+*
+* This function gets the device interrupt ID for the highest priority interrupt
+* which is pending from the interrupt ID register. This function provides
+* priority resolution such that faster interrupt processing is possible.
+* Without priority resolution, it is necessary for the software to read the
+* interrupt pending register and then check each interrupt source to determine
+* if an interrupt is pending. Priority resolution becomes more important as the
+* number of interrupt sources becomes larger.
+*
+* Interrupt priorities are based upon the bit position of the interrupt in the
+* interrupt pending register with bit 0 being the highest priority. The
+* interrupt ID is the priority of the interrupt, 0 - 31, with 0 being the
+* highest priority. The interrupt ID register is live rather than latched such
+* that multiple calls to this function may not yield the same results. A
+* special value, outside of the interrupt priority range of 0 - 31, is
+* contained in the register which indicates that no interrupt is pending. This
+* may be useful for allowing software to continue processing interrupts in a
+* loop until there are no longer any interrupts pending.
+*
+* The interrupt ID is designed to allow a function pointer table to be used
+* in the software such that the interrupt ID is used as an index into that
+* table. The function pointer table could contain an instance pointer, such
+* as to DMA channel, and a function pointer to the function which handles
+* that interrupt. This design requires the interrupt processing of the device
+* driver to be partitioned into smaller more granular pieces based upon
+* hardware used by the device, such as DMA channels and FIFOs.
+*
+* It is not mandatory that this function be used by the device driver software.
+* It may choose to read the pending register and resolve the pending interrupt
+* priorities on it's own.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* An interrupt ID, 0 - 31, which identifies the highest priority interrupt
+* which is pending. A value of XIIF_NO_INTERRUPT_ID indicates that there is
+* no interrupt pending. The following values may be used to identify the
+* interrupt ID for the internal IPIF interrupts.
+*
+* XIIF_V123B_ERROR_INTERRUPT_ID Indicates a device error in the IPIF
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_READ_DIIR(RegBaseAddress) \
+ XIo_In32((RegBaseAddress) + XIIF_V123B_DIIR_OFFSET)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_GLOBAL_INTR_DISABLE
+*
+* DESCRIPTION:
+*
+* This function disables all interrupts for the device by writing to the global
+* interrupt enable register. This register provides the ability to disable
+* interrupts without any modifications to the interrupt enable register such
+* that it is minimal effort to restore the interrupts to the previous enabled
+* state. The corresponding function, XIpIf_GlobalIntrEnable, is provided to
+* restore the interrupts to the previous enabled state. This function is
+* designed to be used in critical sections of device drivers such that it is
+* not necessary to disable other device interrupts.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_GINTR_DISABLE(RegBaseAddress) \
+ XIo_Out32((RegBaseAddress) + XIIF_V123B_DGIER_OFFSET, 0)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_GINTR_ENABLE
+*
+* DESCRIPTION:
+*
+* This function writes to the global interrupt enable register to enable
+* interrupts from the device. This register provides the ability to enable
+* interrupts without any modifications to the interrupt enable register such
+* that it is minimal effort to restore the interrupts to the previous enabled
+* state. This function does not enable individual interrupts as the interrupt
+* enable register must be set appropriately. This function is designed to be
+* used in critical sections of device drivers such that it is not necessary to
+* disable other device interrupts.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_GINTR_ENABLE(RegBaseAddress) \
+ XIo_Out32((RegBaseAddress) + XIIF_V123B_DGIER_OFFSET, \
+ XIIF_V123B_GINTR_ENABLE_MASK)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_IS_GINTR_ENABLED
+*
+* DESCRIPTION:
+*
+* This function determines if interrupts are enabled at the global level by
+* reading the gloabl interrupt register. This register provides the ability to
+* disable interrupts without any modifications to the interrupt enable register
+* such that it is minimal effort to restore the interrupts to the previous
+* enabled state.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* XTRUE if interrupts are enabled for the IPIF, XFALSE otherwise.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_IS_GINTR_ENABLED(RegBaseAddress) \
+ (XIo_In32((RegBaseAddress) + XIIF_V123B_DGIER_OFFSET) == \
+ XIIF_V123B_GINTR_ENABLE_MASK)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_WRITE_IISR
+*
+* DESCRIPTION:
+*
+* This function sets the IP interrupt status register to the specified value.
+* This register indicates the status of interrupt sources for the IP of the
+* device. The IP is defined as the part of the device that connects to the
+* IPIF. The status is independent of whether interrupts are enabled such that
+* the status register may also be polled when interrupts are not enabled.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* IP. All bits of this register are latched. Setting a bit which is zero
+* within this register causes an interrupt to be generated. The device global
+* interrupt enable register and the device interrupt enable register must be set
+* appropriately to allow an interrupt to be passed out of the device. The
+* interrupt is cleared by writing to this register with the bits to be
+* cleared set to a one and all others to zero. This register implements a
+* toggle on write functionality meaning any bits which are set in the value
+* written cause the bits in the register to change to the opposite state.
+*
+* This function writes only the specified value to the register such that
+* some status bits may be set and others cleared. It is the caller's
+* responsibility to get the value of the register prior to setting the value
+* to prevent an destructive behavior.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* Status contains the value to be written to the IP interrupt status
+* register. The bit definitions are specific to the device IP.
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_WRITE_IISR(RegBaseAddress, Status) \
+ XIo_Out32((RegBaseAddress) + XIIF_V123B_IISR_OFFSET, (Status))
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_READ_IISR
+*
+* DESCRIPTION:
+*
+* This function gets the contents of the IP interrupt status register.
+* This register indicates the status of interrupt sources for the IP of the
+* device. The IP is defined as the part of the device that connects to the
+* IPIF. The status is independent of whether interrupts are enabled such
+* that the status register may also be polled when interrupts are not enabled.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* device. All bits of this register are latched. Writing a 1 to a bit within
+* this register causes an interrupt to be generated if enabled in the interrupt
+* enable register and the global interrupt enable is set. Since the status is
+* latched, each status bit must be acknowledged in order for the bit in the
+* status register to be updated. Each bit can be acknowledged by writing a
+* 0 to the bit in the status register.
+
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* A status which contains the value read from the IP interrupt status register.
+* The bit definitions are specific to the device IP.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_READ_IISR(RegBaseAddress) \
+ XIo_In32((RegBaseAddress) + XIIF_V123B_IISR_OFFSET)
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_WRITE_IIER
+*
+* DESCRIPTION:
+*
+* This function sets the IP interrupt enable register contents. This register
+* controls which interrupt sources of the IP are allowed to generate an
+* interrupt. The global interrupt enable register and the device interrupt
+* enable register must also be set appropriately for an interrupt to be
+* passed out of the device containing the IPIF and the IP.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* IP. Setting a bit in this register enables the interrupt source to generate
+* an interrupt. Clearing a bit in this register disables interrupt generation
+* for that interrupt source.
+*
+* This function writes only the specified value to the register such that
+* some interrupt sources may be enabled and others disabled. It is the
+* caller's responsibility to get the value of the interrupt enable register
+* prior to setting the value to prevent an destructive behavior.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* Enable contains the value to be written to the IP interrupt enable register.
+* The bit definitions are specific to the device IP.
+*
+* RETURN VALUE:
+*
+* None.
+*
+* NOTES:
+*
+* None.
+*
+******************************************************************************/
+#define XIIF_V123B_WRITE_IIER(RegBaseAddress, Enable) \
+ XIo_Out32((RegBaseAddress) + XIIF_V123B_IIER_OFFSET, (Enable))
+
+/******************************************************************************
+*
+* MACRO:
+*
+* XIIF_V123B_READ_IIER
+*
+* DESCRIPTION:
+*
+*
+* This function gets the IP interrupt enable register contents. This register
+* controls which interrupt sources of the IP are allowed to generate an
+* interrupt. The global interrupt enable register and the device interrupt
+* enable register must also be set appropriately for an interrupt to be
+* passed out of the device containing the IPIF and the IP.
+*
+* Each bit of the register correlates to a specific interrupt source within the
+* IP. Setting a bit in this register enables the interrupt source to generate
+* an interrupt. Clearing a bit in this register disables interrupt generation
+* for that interrupt source.
+*
+* ARGUMENTS:
+*
+* RegBaseAddress contains the base address of the IPIF registers.
+*
+* RETURN VALUE:
+*
+* The contents read from the IP interrupt enable register. The bit definitions
+* are specific to the device IP.
+*
+* NOTES:
+*
+* Signature: u32 XIIF_V123B_READ_IIER(u32 RegBaseAddress)
+*
+******************************************************************************/
+#define XIIF_V123B_READ_IIER(RegBaseAddress) \
+ XIo_In32((RegBaseAddress) + XIIF_V123B_IIER_OFFSET)
+
+/************************** Function Prototypes ******************************/
+
+/*
+ * Initialization Functions
+ */
+XStatus XIpIfV123b_SelfTest(u32 RegBaseAddress, u8 IpRegistersWidth);
+
+#endif /* end of protection macro */
diff -Naur u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries 2009-03-25 15:57:49.793711500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/microblaze-generic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xparameters.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries.Extra u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries.Extra 2009-03-25 15:57:49.793711500 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/microblaze-generic.c///1238019715/
+/u-boot.lds///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries.Extra.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/microblaze-generic.c///1238019715/
+/u-boot.lds///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries.Old u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Entries.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/microblaze-generic.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xparameters.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Repository u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Repository 2009-03-25 15:25:07.118772700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/microblaze-generic
diff -Naur u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Root u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/microblaze-generic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/microblaze-generic/CVS/Root 2009-03-25 15:25:07.118772700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries u-boot-2009.03/board/xilinx/ml300/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml300/CVS/Entries 2009-03-25 15:57:49.887460900 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ml300.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xparameters.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries.Extra u-boot-2009.03/board/xilinx/ml300/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml300/CVS/Entries.Extra 2009-03-25 15:57:49.887460900 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/init.S///1238019715/
+/ml300.c///1238019715/
+/serial.c///1238019715/
+/u-boot.lds///1238019715/
+/u-boot.lds.debug///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/ml300/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml300/CVS/Entries.Extra.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019715/
+/config.mk///1238019715/
+/init.S///1238019715/
+/ml300.c///1238019715/
+/serial.c///1238019715/
+/u-boot.lds///1238019715/
+/u-boot.lds.debug///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries.Old u-boot-2009.03/board/xilinx/ml300/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/ml300/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml300/CVS/Entries.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/ml300.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xparameters.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ml300/CVS/Repository u-boot-2009.03/board/xilinx/ml300/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/ml300/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml300/CVS/Repository 2009-03-25 15:25:07.243771900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/ml300
diff -Naur u-boot-2009.03_orig/board/xilinx/ml300/CVS/Root u-boot-2009.03/board/xilinx/ml300/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/ml300/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml300/CVS/Root 2009-03-25 15:25:07.243771900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries u-boot-2009.03/board/xilinx/ml507/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml507/CVS/Entries 2009-03-25 15:57:49.949960500 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ml507.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xparameters.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries.Extra u-boot-2009.03/board/xilinx/ml507/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml507/CVS/Entries.Extra 2009-03-25 15:57:49.965585400 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019715/
+/Makefile///1238019715/
+/config.mk///1238019715/
+/ml507.c///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/ml507/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml507/CVS/Entries.Extra.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,5 @@
+/.gitignore///1238019715/
+/Makefile///1238019715/
+/config.mk///1238019715/
+/ml507.c///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries.Old u-boot-2009.03/board/xilinx/ml507/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/ml507/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml507/CVS/Entries.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,6 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/ml507.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xparameters.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ml507/CVS/Repository u-boot-2009.03/board/xilinx/ml507/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/ml507/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml507/CVS/Repository 2009-03-25 15:25:07.493770300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/ml507
diff -Naur u-boot-2009.03_orig/board/xilinx/ml507/CVS/Root u-boot-2009.03/board/xilinx/ml507/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/ml507/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ml507/CVS/Root 2009-03-25 15:25:07.478145400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries 2009-03-25 15:57:50.043709900 -0700
@@ -0,0 +1,8 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-ram.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-rom.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_ppc405_generic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xparameters.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries.Extra u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries.Extra 2009-03-25 15:57:50.043709900 -0700
@@ -0,0 +1,7 @@
+/.gitignore///1238019715/
+/Makefile///1238019715/
+/config.mk///1238019715/
+/u-boot-ram.lds///1238019715/
+/u-boot-rom.lds///1238019715/
+/xilinx_ppc405_generic.c///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries.Extra.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,7 @@
+/.gitignore///1238019715/
+/Makefile///1238019715/
+/config.mk///1238019715/
+/u-boot-ram.lds///1238019715/
+/u-boot-rom.lds///1238019715/
+/xilinx_ppc405_generic.c///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries.Old u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Entries.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,8 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot-ram.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot-rom.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xilinx_ppc405_generic.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xparameters.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Repository u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Repository 2009-03-25 15:25:07.696894000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/ppc405-generic
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Root u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/ppc405-generic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc405-generic/CVS/Root 2009-03-25 15:25:07.696894000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries 2009-03-25 15:57:50.137459300 -0700
@@ -0,0 +1,9 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-ram.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-rom.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_ppc440_generic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xparameters.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries.Extra u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries.Extra 2009-03-25 15:57:50.137459300 -0700
@@ -0,0 +1,8 @@
+/.gitignore///1238019715/
+/Makefile///1238019715/
+/config.mk///1238019715/
+/init.S///1238019715/
+/u-boot-ram.lds///1238019715/
+/u-boot-rom.lds///1238019715/
+/xilinx_ppc440_generic.c///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries.Extra.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,8 @@
+/.gitignore///1238019715/
+/Makefile///1238019715/
+/config.mk///1238019715/
+/init.S///1238019715/
+/u-boot-ram.lds///1238019715/
+/u-boot-rom.lds///1238019715/
+/xilinx_ppc440_generic.c///1238019715/
+/xparameters.h///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries.Old u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Entries.Old 2009-03-25 15:25:07.000000000 -0700
@@ -0,0 +1,9 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot-ram.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/u-boot-rom.lds/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xilinx_ppc440_generic.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xparameters.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Repository u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Repository 2009-03-25 15:25:07.821893200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/ppc440-generic
diff -Naur u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Root u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/ppc440-generic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/ppc440-generic/CVS/Root 2009-03-25 15:25:07.821893200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries 2009-03-25 15:57:50.246833600 -0700
@@ -0,0 +1,11 @@
+/emac_adapter.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac_g.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac_i.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac_intr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac_intr_dma.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac_l.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac_options.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xemac_polled.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries.Extra u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries.Extra 2009-03-25 15:57:50.246833600 -0700
@@ -0,0 +1,10 @@
+/emac_adapter.c///1238019715/
+/xemac.c///1238019715/
+/xemac.h///1238019715/
+/xemac_g.c///1238019715/
+/xemac_i.h///1238019715/
+/xemac_intr.c///1238019715/
+/xemac_intr_dma.c///1238019715/
+/xemac_l.h///1238019715/
+/xemac_options.c///1238019715/
+/xemac_polled.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries.Extra.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,10 @@
+/emac_adapter.c///1238019715/
+/xemac.c///1238019715/
+/xemac.h///1238019715/
+/xemac_g.c///1238019715/
+/xemac_i.h///1238019715/
+/xemac_intr.c///1238019715/
+/xemac_intr_dma.c///1238019715/
+/xemac_l.h///1238019715/
+/xemac_options.c///1238019715/
+/xemac_polled.c///1238019715/
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries.Old u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Entries.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,11 @@
+/emac_adapter.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac_g.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac_i.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac_intr.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac_intr_dma.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac_l.h/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac_options.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+/xemac_polled.c/1.1.1.1/Wed Mar 25 22:21:55 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Repository u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Repository 2009-03-25 15:25:07.962517300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/xilinx_enet
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Root u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/xilinx_enet/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_enet/CVS/Root 2009-03-25 15:25:07.962517300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries 2009-03-31 14:48:44.226299200 -0700
@@ -0,0 +1,4 @@
+/iic_adapter.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xiic_l.c/1.1.1.1/Tue Mar 31 21:48:44 2009//T1.1.1.1
+/xiic_l.h/1.1.1.1/Tue Mar 31 21:48:44 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries.Extra u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries.Extra 2009-03-31 14:48:44.226299200 -0700
@@ -0,0 +1,3 @@
+/iic_adapter.c///1238019715/
+/xiic_l.c///1238019715/
+/xiic_l.h///1238019716/
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries.Extra.Old u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries.Extra.Old 2009-03-25 17:51:41.000000000 -0700
@@ -0,0 +1,3 @@
+/iic_adapter.c///1238019715/
+/xiic_l.c///1238028700/
+/xiic_l.h///1238028701/
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries.Old u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Entries.Old 2009-03-25 17:51:41.000000000 -0700
@@ -0,0 +1,4 @@
+/iic_adapter.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xiic_l.c/1.2/Thu Mar 26 00:51:40 2009//
+/xiic_l.h/1.2/Thu Mar 26 00:51:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Repository u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Repository
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Repository 2009-03-25 15:25:08.165641000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xilinx/xilinx_iic
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Root u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Root
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xilinx/xilinx_iic/CVS/Root 2009-03-25 15:25:08.165641000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/xiic_l.c u-boot-2009.03/board/xilinx/xilinx_iic/xiic_l.c
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/xiic_l.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/xilinx/xilinx_iic/xiic_l.c 2009-03-31 14:48:44.023176800 -0700
@@ -1,484 +1,484 @@
-/* $Id: xiic_l.c,v 1.2 2002/12/05 19:32:40 meinelte Exp $ */
-/******************************************************************************
-*
-* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
-* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
-* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
-* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
-* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
-* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
-* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
-* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
-* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
-* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
-* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
-* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE.
-*
-* (c) Copyright 2002 Xilinx Inc.
-* All rights reserved.
-*
-******************************************************************************/
-/*****************************************************************************/
-/**
-*
-* @file xiic_l.c
-*
-* This file contains low-level driver functions that can be used to access the
-* device. The user should refer to the hardware device specification for more
-* details of the device operation.
-*
-* <pre>
-* MODIFICATION HISTORY:
-*
-* Ver Who Date Changes
-* ----- --- ------- -----------------------------------------------
-* 1.01b jhl 5/13/02 First release
-* 1.01b jhl 10/14/02 Corrected bug in the receive function, the setup of the
-* interrupt status mask was not being done in the loop such
-* that a read would sometimes fail on the last byte because
-* the transmit error which should have been ignored was
-* being used. This would leave an extra byte in the FIFO
-* and the bus throttled such that the next operation would
-* also fail. Also updated the receive function to not
-* disable the device after the last byte until after the
-* bus transitions to not busy which is more consistent
-* with the expected behavior.
-* 1.01c ecm 12/05/02 new rev
-* </pre>
-*
-****************************************************************************/
-
-/***************************** Include Files *******************************/
-
-#include "xbasic_types.h"
-#include "xio.h"
-#include "xipif_v1_23_b.h"
-#include "xiic_l.h"
-
-/************************** Constant Definitions ***************************/
-
-/**************************** Type Definitions *****************************/
-
-
-/***************** Macros (Inline Functions) Definitions *******************/
-
-
-/******************************************************************************
-*
-* This macro clears the specified interrupt in the IPIF interrupt status
-* register. It is non-destructive in that the register is read and only the
-* interrupt specified is cleared. Clearing an interrupt acknowledges it.
-*
-* @param BaseAddress contains the IPIF registers base address.
-*
-* @param InterruptMask contains the interrupts to be disabled
-*
-* @return
-*
-* None.
-*
-* @note
-*
-* Signature: void XIic_mClearIisr(u32 BaseAddress,
-* u32 InterruptMask);
-*
-******************************************************************************/
-#define XIic_mClearIisr(BaseAddress, InterruptMask) \
- XIIF_V123B_WRITE_IISR((BaseAddress), \
- XIIF_V123B_READ_IISR(BaseAddress) & (InterruptMask))
-
-/******************************************************************************
-*
-* This macro sends the address for a 7 bit address during both read and write
-* operations. It takes care of the details to format the address correctly.
-* This macro is designed to be called internally to the drivers.
-*
-* @param SlaveAddress contains the address of the slave to send to.
-*
-* @param Operation indicates XIIC_READ_OPERATION or XIIC_WRITE_OPERATION
-*
-* @return
-*
-* None.
-*
-* @note
-*
-* Signature: void XIic_mSend7BitAddr(u16 SlaveAddress, u8 Operation);
-*
-******************************************************************************/
-#define XIic_mSend7BitAddress(BaseAddress, SlaveAddress, Operation) \
-{ \
- u8 LocalAddr = (u8)(SlaveAddress << 1); \
- LocalAddr = (LocalAddr & 0xFE) | (Operation); \
- XIo_Out8(BaseAddress + XIIC_DTR_REG_OFFSET, LocalAddr); \
-}
-
-/************************** Function Prototypes ****************************/
-
-static unsigned RecvData (u32 BaseAddress, u8 * BufferPtr,
- unsigned ByteCount);
-static unsigned SendData (u32 BaseAddress, u8 * BufferPtr,
- unsigned ByteCount);
-
-/************************** Variable Definitions **************************/
-
-
-/****************************************************************************/
-/**
-* Receive data as a master on the IIC bus. This function receives the data
-* using polled I/O and blocks until the data has been received. It only
-* supports 7 bit addressing and non-repeated start modes of operation. The
-* user is responsible for ensuring the bus is not busy if multiple masters
-* are present on the bus.
-*
-* @param BaseAddress contains the base address of the IIC device.
-* @param Address contains the 7 bit IIC address of the device to send the
-* specified data to.
-* @param BufferPtr points to the data to be sent.
-* @param ByteCount is the number of bytes to be sent.
-*
-* @return
-*
-* The number of bytes received.
-*
-* @note
-*
-* None
-*
-******************************************************************************/
-unsigned XIic_Recv (u32 BaseAddress, u8 Address,
- u8 * BufferPtr, unsigned ByteCount)
-{
- u8 CntlReg;
- unsigned RemainingByteCount;
-
- /* Tx error is enabled incase the address (7 or 10) has no device to answer
- * with Ack. When only one byte of data, must set NO ACK before address goes
- * out therefore Tx error must not be enabled as it will go off immediately
- * and the Rx full interrupt will be checked. If full, then the one byte
- * was received and the Tx error will be disabled without sending an error
- * callback msg.
- */
- XIic_mClearIisr (BaseAddress,
- XIIC_INTR_RX_FULL_MASK | XIIC_INTR_TX_ERROR_MASK |
- XIIC_INTR_ARB_LOST_MASK);
-
- /* Set receive FIFO occupancy depth for 1 byte (zero based)
- */
- XIo_Out8 (BaseAddress + XIIC_RFD_REG_OFFSET, 0);
-
- /* 7 bit slave address, send the address for a read operation
- * and set the state to indicate the address has been sent
- */
- XIic_mSend7BitAddress (BaseAddress, Address, XIIC_READ_OPERATION);
-
- /* MSMS gets set after putting data in FIFO. Start the master receive
- * operation by setting CR Bits MSMS to Master, if the buffer is only one
- * byte, then it should not be acknowledged to indicate the end of data
- */
- CntlReg = XIIC_CR_MSMS_MASK | XIIC_CR_ENABLE_DEVICE_MASK;
- if (ByteCount == 1) {
- CntlReg |= XIIC_CR_NO_ACK_MASK;
- }
-
- /* Write out the control register to start receiving data and call the
- * function to receive each byte into the buffer
- */
- XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET, CntlReg);
-
- /* Clear the latched interrupt status for the bus not busy bit which must
- * be done while the bus is busy
- */
- XIic_mClearIisr (BaseAddress, XIIC_INTR_BNB_MASK);
-
- /* Try to receive the data from the IIC bus */
-
- RemainingByteCount = RecvData (BaseAddress, BufferPtr, ByteCount);
- /*
- * The receive is complete, disable the IIC device and return the number of
- * bytes that was received
- */
- XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET, 0);
-
- /* Return the number of bytes that was received */
-
- return ByteCount - RemainingByteCount;
-}
-
-/******************************************************************************
-*
-* Receive the specified data from the device that has been previously addressed
-* on the IIC bus. This function assumes that the 7 bit address has been sent
-* and it should wait for the transmit of the address to complete.
-*
-* @param BaseAddress contains the base address of the IIC device.
-* @param BufferPtr points to the buffer to hold the data that is received.
-* @param ByteCount is the number of bytes to be received.
-*
-* @return
-*
-* The number of bytes remaining to be received.
-*
-* @note
-*
-* This function does not take advantage of the receive FIFO because it is
-* designed for minimal code space and complexity. It contains loops that
-* that could cause the function not to return if the hardware is not working.
-*
-* This function assumes that the calling function will disable the IIC device
-* after this function returns.
-*
-******************************************************************************/
-static unsigned RecvData (u32 BaseAddress, u8 * BufferPtr, unsigned ByteCount)
-{
- u8 CntlReg;
- u32 IntrStatusMask;
- u32 IntrStatus;
-
- /* Attempt to receive the specified number of bytes on the IIC bus */
-
- while (ByteCount > 0) {
- /* Setup the mask to use for checking errors because when receiving one
- * byte OR the last byte of a multibyte message an error naturally
- * occurs when the no ack is done to tell the slave the last byte
- */
- if (ByteCount == 1) {
- IntrStatusMask =
- XIIC_INTR_ARB_LOST_MASK | XIIC_INTR_BNB_MASK;
- } else {
- IntrStatusMask =
- XIIC_INTR_ARB_LOST_MASK |
- XIIC_INTR_TX_ERROR_MASK | XIIC_INTR_BNB_MASK;
- }
-
- /* Wait for the previous transmit and the 1st receive to complete
- * by checking the interrupt status register of the IPIF
- */
- while (1) {
- IntrStatus = XIIF_V123B_READ_IISR (BaseAddress);
- if (IntrStatus & XIIC_INTR_RX_FULL_MASK) {
- break;
- }
- /* Check the transmit error after the receive full because when
- * sending only one byte transmit error will occur because of the
- * no ack to indicate the end of the data
- */
- if (IntrStatus & IntrStatusMask) {
- return ByteCount;
- }
- }
-
- CntlReg = XIo_In8 (BaseAddress + XIIC_CR_REG_OFFSET);
-
- /* Special conditions exist for the last two bytes so check for them
- * Note that the control register must be setup for these conditions
- * before the data byte which was already received is read from the
- * receive FIFO (while the bus is throttled
- */
- if (ByteCount == 1) {
- /* For the last data byte, it has already been read and no ack
- * has been done, so clear MSMS while leaving the device enabled
- * so it can get off the IIC bus appropriately with a stop.
- */
- XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
- XIIC_CR_ENABLE_DEVICE_MASK);
- }
-
- /* Before the last byte is received, set NOACK to tell the slave IIC
- * device that it is the end, this must be done before reading the byte
- * from the FIFO
- */
- if (ByteCount == 2) {
- /* Write control reg with NO ACK allowing last byte to
- * have the No ack set to indicate to slave last byte read.
- */
- XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
- CntlReg | XIIC_CR_NO_ACK_MASK);
- }
-
- /* Read in data from the FIFO and unthrottle the bus such that the
- * next byte is read from the IIC bus
- */
- *BufferPtr++ = XIo_In8 (BaseAddress + XIIC_DRR_REG_OFFSET);
-
- /* Clear the latched interrupt status so that it will be updated with
- * the new state when it changes, this must be done after the receive
- * register is read
- */
- XIic_mClearIisr (BaseAddress, XIIC_INTR_RX_FULL_MASK |
- XIIC_INTR_TX_ERROR_MASK |
- XIIC_INTR_ARB_LOST_MASK);
- ByteCount--;
- }
-
- /* Wait for the bus to transition to not busy before returning, the IIC
- * device cannot be disabled until this occurs. It should transition as
- * the MSMS bit of the control register was cleared before the last byte
- * was read from the FIFO.
- */
- while (1) {
- if (XIIF_V123B_READ_IISR (BaseAddress) & XIIC_INTR_BNB_MASK) {
- break;
- }
- }
-
- return ByteCount;
-}
-
-/****************************************************************************/
-/**
-* Send data as a master on the IIC bus. This function sends the data
-* using polled I/O and blocks until the data has been sent. It only supports
-* 7 bit addressing and non-repeated start modes of operation. The user is
-* responsible for ensuring the bus is not busy if multiple masters are present
-* on the bus.
-*
-* @param BaseAddress contains the base address of the IIC device.
-* @param Address contains the 7 bit IIC address of the device to send the
-* specified data to.
-* @param BufferPtr points to the data to be sent.
-* @param ByteCount is the number of bytes to be sent.
-*
-* @return
-*
-* The number of bytes sent.
-*
-* @note
-*
-* None
-*
-******************************************************************************/
-unsigned XIic_Send (u32 BaseAddress, u8 Address,
- u8 * BufferPtr, unsigned ByteCount)
-{
- unsigned RemainingByteCount;
-
- /* Put the address into the FIFO to be sent and indicate that the operation
- * to be performed on the bus is a write operation
- */
- XIic_mSend7BitAddress (BaseAddress, Address, XIIC_WRITE_OPERATION);
-
- /* Clear the latched interrupt status so that it will be updated with the
- * new state when it changes, this must be done after the address is put
- * in the FIFO
- */
- XIic_mClearIisr (BaseAddress, XIIC_INTR_TX_EMPTY_MASK |
- XIIC_INTR_TX_ERROR_MASK | XIIC_INTR_ARB_LOST_MASK);
-
- /* MSMS must be set after putting data into transmit FIFO, indicate the
- * direction is transmit, this device is master and enable the IIC device
- */
- XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
- XIIC_CR_MSMS_MASK | XIIC_CR_DIR_IS_TX_MASK |
- XIIC_CR_ENABLE_DEVICE_MASK);
-
- /* Clear the latched interrupt
- * status for the bus not busy bit which must be done while the bus is busy
- */
- XIic_mClearIisr (BaseAddress, XIIC_INTR_BNB_MASK);
-
- /* Send the specified data to the device on the IIC bus specified by the
- * the address
- */
- RemainingByteCount = SendData (BaseAddress, BufferPtr, ByteCount);
-
- /*
- * The send is complete, disable the IIC device and return the number of
- * bytes that was sent
- */
- XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET, 0);
-
- return ByteCount - RemainingByteCount;
-}
-
-/******************************************************************************
-*
-* Send the specified buffer to the device that has been previously addressed
-* on the IIC bus. This function assumes that the 7 bit address has been sent
-* and it should wait for the transmit of the address to complete.
-*
-* @param BaseAddress contains the base address of the IIC device.
-* @param BufferPtr points to the data to be sent.
-* @param ByteCount is the number of bytes to be sent.
-*
-* @return
-*
-* The number of bytes remaining to be sent.
-*
-* @note
-*
-* This function does not take advantage of the transmit FIFO because it is
-* designed for minimal code space and complexity. It contains loops that
-* that could cause the function not to return if the hardware is not working.
-*
-******************************************************************************/
-static unsigned SendData (u32 BaseAddress, u8 * BufferPtr, unsigned ByteCount)
-{
- u32 IntrStatus;
-
- /* Send the specified number of bytes in the specified buffer by polling
- * the device registers and blocking until complete
- */
- while (ByteCount > 0) {
- /* Wait for the transmit to be empty before sending any more data
- * by polling the interrupt status register
- */
- while (1) {
- IntrStatus = XIIF_V123B_READ_IISR (BaseAddress);
-
- if (IntrStatus & (XIIC_INTR_TX_ERROR_MASK |
- XIIC_INTR_ARB_LOST_MASK |
- XIIC_INTR_BNB_MASK)) {
- return ByteCount;
- }
-
- if (IntrStatus & XIIC_INTR_TX_EMPTY_MASK) {
- break;
- }
- }
- /* If there is more than one byte to send then put the next byte to send
- * into the transmit FIFO
- */
- if (ByteCount > 1) {
- XIo_Out8 (BaseAddress + XIIC_DTR_REG_OFFSET,
- *BufferPtr++);
- } else {
- /* Set the stop condition before sending the last byte of data so that
- * the stop condition will be generated immediately following the data
- * This is done by clearing the MSMS bit in the control register.
- */
- XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
- XIIC_CR_ENABLE_DEVICE_MASK |
- XIIC_CR_DIR_IS_TX_MASK);
-
- /* Put the last byte to send in the transmit FIFO */
-
- XIo_Out8 (BaseAddress + XIIC_DTR_REG_OFFSET,
- *BufferPtr++);
- }
-
- /* Clear the latched interrupt status register and this must be done after
- * the transmit FIFO has been written to or it won't clear
- */
- XIic_mClearIisr (BaseAddress, XIIC_INTR_TX_EMPTY_MASK);
-
- /* Update the byte count to reflect the byte sent and clear the latched
- * interrupt status so it will be updated for the new state
- */
- ByteCount--;
- }
-
- /* Wait for the bus to transition to not busy before returning, the IIC
- * device cannot be disabled until this occurs.
- * Note that this is different from a receive operation because the stop
- * condition causes the bus to go not busy.
- */
- while (1) {
- if (XIIF_V123B_READ_IISR (BaseAddress) & XIIC_INTR_BNB_MASK) {
- break;
- }
- }
-
- return ByteCount;
-}
+/* $Id: xiic_l.c,v 1.1.1.1 2009/03/25 22:21:55 kenagy Exp $ */
+/******************************************************************************
+*
+* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
+* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
+* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
+* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
+* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
+* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
+* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
+* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
+* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
+* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
+* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
+* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE.
+*
+* (c) Copyright 2002 Xilinx Inc.
+* All rights reserved.
+*
+******************************************************************************/
+/*****************************************************************************/
+/**
+*
+* @file xiic_l.c
+*
+* This file contains low-level driver functions that can be used to access the
+* device. The user should refer to the hardware device specification for more
+* details of the device operation.
+*
+* <pre>
+* MODIFICATION HISTORY:
+*
+* Ver Who Date Changes
+* ----- --- ------- -----------------------------------------------
+* 1.01b jhl 5/13/02 First release
+* 1.01b jhl 10/14/02 Corrected bug in the receive function, the setup of the
+* interrupt status mask was not being done in the loop such
+* that a read would sometimes fail on the last byte because
+* the transmit error which should have been ignored was
+* being used. This would leave an extra byte in the FIFO
+* and the bus throttled such that the next operation would
+* also fail. Also updated the receive function to not
+* disable the device after the last byte until after the
+* bus transitions to not busy which is more consistent
+* with the expected behavior.
+* 1.01c ecm 12/05/02 new rev
+* </pre>
+*
+****************************************************************************/
+
+/***************************** Include Files *******************************/
+
+#include "xbasic_types.h"
+#include "xio.h"
+#include "xipif_v1_23_b.h"
+#include "xiic_l.h"
+
+/************************** Constant Definitions ***************************/
+
+/**************************** Type Definitions *****************************/
+
+
+/***************** Macros (Inline Functions) Definitions *******************/
+
+
+/******************************************************************************
+*
+* This macro clears the specified interrupt in the IPIF interrupt status
+* register. It is non-destructive in that the register is read and only the
+* interrupt specified is cleared. Clearing an interrupt acknowledges it.
+*
+* @param BaseAddress contains the IPIF registers base address.
+*
+* @param InterruptMask contains the interrupts to be disabled
+*
+* @return
+*
+* None.
+*
+* @note
+*
+* Signature: void XIic_mClearIisr(u32 BaseAddress,
+* u32 InterruptMask);
+*
+******************************************************************************/
+#define XIic_mClearIisr(BaseAddress, InterruptMask) \
+ XIIF_V123B_WRITE_IISR((BaseAddress), \
+ XIIF_V123B_READ_IISR(BaseAddress) & (InterruptMask))
+
+/******************************************************************************
+*
+* This macro sends the address for a 7 bit address during both read and write
+* operations. It takes care of the details to format the address correctly.
+* This macro is designed to be called internally to the drivers.
+*
+* @param SlaveAddress contains the address of the slave to send to.
+*
+* @param Operation indicates XIIC_READ_OPERATION or XIIC_WRITE_OPERATION
+*
+* @return
+*
+* None.
+*
+* @note
+*
+* Signature: void XIic_mSend7BitAddr(u16 SlaveAddress, u8 Operation);
+*
+******************************************************************************/
+#define XIic_mSend7BitAddress(BaseAddress, SlaveAddress, Operation) \
+{ \
+ u8 LocalAddr = (u8)(SlaveAddress << 1); \
+ LocalAddr = (LocalAddr & 0xFE) | (Operation); \
+ XIo_Out8(BaseAddress + XIIC_DTR_REG_OFFSET, LocalAddr); \
+}
+
+/************************** Function Prototypes ****************************/
+
+static unsigned RecvData (u32 BaseAddress, u8 * BufferPtr,
+ unsigned ByteCount);
+static unsigned SendData (u32 BaseAddress, u8 * BufferPtr,
+ unsigned ByteCount);
+
+/************************** Variable Definitions **************************/
+
+
+/****************************************************************************/
+/**
+* Receive data as a master on the IIC bus. This function receives the data
+* using polled I/O and blocks until the data has been received. It only
+* supports 7 bit addressing and non-repeated start modes of operation. The
+* user is responsible for ensuring the bus is not busy if multiple masters
+* are present on the bus.
+*
+* @param BaseAddress contains the base address of the IIC device.
+* @param Address contains the 7 bit IIC address of the device to send the
+* specified data to.
+* @param BufferPtr points to the data to be sent.
+* @param ByteCount is the number of bytes to be sent.
+*
+* @return
+*
+* The number of bytes received.
+*
+* @note
+*
+* None
+*
+******************************************************************************/
+unsigned XIic_Recv (u32 BaseAddress, u8 Address,
+ u8 * BufferPtr, unsigned ByteCount)
+{
+ u8 CntlReg;
+ unsigned RemainingByteCount;
+
+ /* Tx error is enabled incase the address (7 or 10) has no device to answer
+ * with Ack. When only one byte of data, must set NO ACK before address goes
+ * out therefore Tx error must not be enabled as it will go off immediately
+ * and the Rx full interrupt will be checked. If full, then the one byte
+ * was received and the Tx error will be disabled without sending an error
+ * callback msg.
+ */
+ XIic_mClearIisr (BaseAddress,
+ XIIC_INTR_RX_FULL_MASK | XIIC_INTR_TX_ERROR_MASK |
+ XIIC_INTR_ARB_LOST_MASK);
+
+ /* Set receive FIFO occupancy depth for 1 byte (zero based)
+ */
+ XIo_Out8 (BaseAddress + XIIC_RFD_REG_OFFSET, 0);
+
+ /* 7 bit slave address, send the address for a read operation
+ * and set the state to indicate the address has been sent
+ */
+ XIic_mSend7BitAddress (BaseAddress, Address, XIIC_READ_OPERATION);
+
+ /* MSMS gets set after putting data in FIFO. Start the master receive
+ * operation by setting CR Bits MSMS to Master, if the buffer is only one
+ * byte, then it should not be acknowledged to indicate the end of data
+ */
+ CntlReg = XIIC_CR_MSMS_MASK | XIIC_CR_ENABLE_DEVICE_MASK;
+ if (ByteCount == 1) {
+ CntlReg |= XIIC_CR_NO_ACK_MASK;
+ }
+
+ /* Write out the control register to start receiving data and call the
+ * function to receive each byte into the buffer
+ */
+ XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET, CntlReg);
+
+ /* Clear the latched interrupt status for the bus not busy bit which must
+ * be done while the bus is busy
+ */
+ XIic_mClearIisr (BaseAddress, XIIC_INTR_BNB_MASK);
+
+ /* Try to receive the data from the IIC bus */
+
+ RemainingByteCount = RecvData (BaseAddress, BufferPtr, ByteCount);
+ /*
+ * The receive is complete, disable the IIC device and return the number of
+ * bytes that was received
+ */
+ XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET, 0);
+
+ /* Return the number of bytes that was received */
+
+ return ByteCount - RemainingByteCount;
+}
+
+/******************************************************************************
+*
+* Receive the specified data from the device that has been previously addressed
+* on the IIC bus. This function assumes that the 7 bit address has been sent
+* and it should wait for the transmit of the address to complete.
+*
+* @param BaseAddress contains the base address of the IIC device.
+* @param BufferPtr points to the buffer to hold the data that is received.
+* @param ByteCount is the number of bytes to be received.
+*
+* @return
+*
+* The number of bytes remaining to be received.
+*
+* @note
+*
+* This function does not take advantage of the receive FIFO because it is
+* designed for minimal code space and complexity. It contains loops that
+* that could cause the function not to return if the hardware is not working.
+*
+* This function assumes that the calling function will disable the IIC device
+* after this function returns.
+*
+******************************************************************************/
+static unsigned RecvData (u32 BaseAddress, u8 * BufferPtr, unsigned ByteCount)
+{
+ u8 CntlReg;
+ u32 IntrStatusMask;
+ u32 IntrStatus;
+
+ /* Attempt to receive the specified number of bytes on the IIC bus */
+
+ while (ByteCount > 0) {
+ /* Setup the mask to use for checking errors because when receiving one
+ * byte OR the last byte of a multibyte message an error naturally
+ * occurs when the no ack is done to tell the slave the last byte
+ */
+ if (ByteCount == 1) {
+ IntrStatusMask =
+ XIIC_INTR_ARB_LOST_MASK | XIIC_INTR_BNB_MASK;
+ } else {
+ IntrStatusMask =
+ XIIC_INTR_ARB_LOST_MASK |
+ XIIC_INTR_TX_ERROR_MASK | XIIC_INTR_BNB_MASK;
+ }
+
+ /* Wait for the previous transmit and the 1st receive to complete
+ * by checking the interrupt status register of the IPIF
+ */
+ while (1) {
+ IntrStatus = XIIF_V123B_READ_IISR (BaseAddress);
+ if (IntrStatus & XIIC_INTR_RX_FULL_MASK) {
+ break;
+ }
+ /* Check the transmit error after the receive full because when
+ * sending only one byte transmit error will occur because of the
+ * no ack to indicate the end of the data
+ */
+ if (IntrStatus & IntrStatusMask) {
+ return ByteCount;
+ }
+ }
+
+ CntlReg = XIo_In8 (BaseAddress + XIIC_CR_REG_OFFSET);
+
+ /* Special conditions exist for the last two bytes so check for them
+ * Note that the control register must be setup for these conditions
+ * before the data byte which was already received is read from the
+ * receive FIFO (while the bus is throttled
+ */
+ if (ByteCount == 1) {
+ /* For the last data byte, it has already been read and no ack
+ * has been done, so clear MSMS while leaving the device enabled
+ * so it can get off the IIC bus appropriately with a stop.
+ */
+ XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
+ XIIC_CR_ENABLE_DEVICE_MASK);
+ }
+
+ /* Before the last byte is received, set NOACK to tell the slave IIC
+ * device that it is the end, this must be done before reading the byte
+ * from the FIFO
+ */
+ if (ByteCount == 2) {
+ /* Write control reg with NO ACK allowing last byte to
+ * have the No ack set to indicate to slave last byte read.
+ */
+ XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
+ CntlReg | XIIC_CR_NO_ACK_MASK);
+ }
+
+ /* Read in data from the FIFO and unthrottle the bus such that the
+ * next byte is read from the IIC bus
+ */
+ *BufferPtr++ = XIo_In8 (BaseAddress + XIIC_DRR_REG_OFFSET);
+
+ /* Clear the latched interrupt status so that it will be updated with
+ * the new state when it changes, this must be done after the receive
+ * register is read
+ */
+ XIic_mClearIisr (BaseAddress, XIIC_INTR_RX_FULL_MASK |
+ XIIC_INTR_TX_ERROR_MASK |
+ XIIC_INTR_ARB_LOST_MASK);
+ ByteCount--;
+ }
+
+ /* Wait for the bus to transition to not busy before returning, the IIC
+ * device cannot be disabled until this occurs. It should transition as
+ * the MSMS bit of the control register was cleared before the last byte
+ * was read from the FIFO.
+ */
+ while (1) {
+ if (XIIF_V123B_READ_IISR (BaseAddress) & XIIC_INTR_BNB_MASK) {
+ break;
+ }
+ }
+
+ return ByteCount;
+}
+
+/****************************************************************************/
+/**
+* Send data as a master on the IIC bus. This function sends the data
+* using polled I/O and blocks until the data has been sent. It only supports
+* 7 bit addressing and non-repeated start modes of operation. The user is
+* responsible for ensuring the bus is not busy if multiple masters are present
+* on the bus.
+*
+* @param BaseAddress contains the base address of the IIC device.
+* @param Address contains the 7 bit IIC address of the device to send the
+* specified data to.
+* @param BufferPtr points to the data to be sent.
+* @param ByteCount is the number of bytes to be sent.
+*
+* @return
+*
+* The number of bytes sent.
+*
+* @note
+*
+* None
+*
+******************************************************************************/
+unsigned XIic_Send (u32 BaseAddress, u8 Address,
+ u8 * BufferPtr, unsigned ByteCount)
+{
+ unsigned RemainingByteCount;
+
+ /* Put the address into the FIFO to be sent and indicate that the operation
+ * to be performed on the bus is a write operation
+ */
+ XIic_mSend7BitAddress (BaseAddress, Address, XIIC_WRITE_OPERATION);
+
+ /* Clear the latched interrupt status so that it will be updated with the
+ * new state when it changes, this must be done after the address is put
+ * in the FIFO
+ */
+ XIic_mClearIisr (BaseAddress, XIIC_INTR_TX_EMPTY_MASK |
+ XIIC_INTR_TX_ERROR_MASK | XIIC_INTR_ARB_LOST_MASK);
+
+ /* MSMS must be set after putting data into transmit FIFO, indicate the
+ * direction is transmit, this device is master and enable the IIC device
+ */
+ XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
+ XIIC_CR_MSMS_MASK | XIIC_CR_DIR_IS_TX_MASK |
+ XIIC_CR_ENABLE_DEVICE_MASK);
+
+ /* Clear the latched interrupt
+ * status for the bus not busy bit which must be done while the bus is busy
+ */
+ XIic_mClearIisr (BaseAddress, XIIC_INTR_BNB_MASK);
+
+ /* Send the specified data to the device on the IIC bus specified by the
+ * the address
+ */
+ RemainingByteCount = SendData (BaseAddress, BufferPtr, ByteCount);
+
+ /*
+ * The send is complete, disable the IIC device and return the number of
+ * bytes that was sent
+ */
+ XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET, 0);
+
+ return ByteCount - RemainingByteCount;
+}
+
+/******************************************************************************
+*
+* Send the specified buffer to the device that has been previously addressed
+* on the IIC bus. This function assumes that the 7 bit address has been sent
+* and it should wait for the transmit of the address to complete.
+*
+* @param BaseAddress contains the base address of the IIC device.
+* @param BufferPtr points to the data to be sent.
+* @param ByteCount is the number of bytes to be sent.
+*
+* @return
+*
+* The number of bytes remaining to be sent.
+*
+* @note
+*
+* This function does not take advantage of the transmit FIFO because it is
+* designed for minimal code space and complexity. It contains loops that
+* that could cause the function not to return if the hardware is not working.
+*
+******************************************************************************/
+static unsigned SendData (u32 BaseAddress, u8 * BufferPtr, unsigned ByteCount)
+{
+ u32 IntrStatus;
+
+ /* Send the specified number of bytes in the specified buffer by polling
+ * the device registers and blocking until complete
+ */
+ while (ByteCount > 0) {
+ /* Wait for the transmit to be empty before sending any more data
+ * by polling the interrupt status register
+ */
+ while (1) {
+ IntrStatus = XIIF_V123B_READ_IISR (BaseAddress);
+
+ if (IntrStatus & (XIIC_INTR_TX_ERROR_MASK |
+ XIIC_INTR_ARB_LOST_MASK |
+ XIIC_INTR_BNB_MASK)) {
+ return ByteCount;
+ }
+
+ if (IntrStatus & XIIC_INTR_TX_EMPTY_MASK) {
+ break;
+ }
+ }
+ /* If there is more than one byte to send then put the next byte to send
+ * into the transmit FIFO
+ */
+ if (ByteCount > 1) {
+ XIo_Out8 (BaseAddress + XIIC_DTR_REG_OFFSET,
+ *BufferPtr++);
+ } else {
+ /* Set the stop condition before sending the last byte of data so that
+ * the stop condition will be generated immediately following the data
+ * This is done by clearing the MSMS bit in the control register.
+ */
+ XIo_Out8 (BaseAddress + XIIC_CR_REG_OFFSET,
+ XIIC_CR_ENABLE_DEVICE_MASK |
+ XIIC_CR_DIR_IS_TX_MASK);
+
+ /* Put the last byte to send in the transmit FIFO */
+
+ XIo_Out8 (BaseAddress + XIIC_DTR_REG_OFFSET,
+ *BufferPtr++);
+ }
+
+ /* Clear the latched interrupt status register and this must be done after
+ * the transmit FIFO has been written to or it won't clear
+ */
+ XIic_mClearIisr (BaseAddress, XIIC_INTR_TX_EMPTY_MASK);
+
+ /* Update the byte count to reflect the byte sent and clear the latched
+ * interrupt status so it will be updated for the new state
+ */
+ ByteCount--;
+ }
+
+ /* Wait for the bus to transition to not busy before returning, the IIC
+ * device cannot be disabled until this occurs.
+ * Note that this is different from a receive operation because the stop
+ * condition causes the bus to go not busy.
+ */
+ while (1) {
+ if (XIIF_V123B_READ_IISR (BaseAddress) & XIIC_INTR_BNB_MASK) {
+ break;
+ }
+ }
+
+ return ByteCount;
+}
diff -Naur u-boot-2009.03_orig/board/xilinx/xilinx_iic/xiic_l.h u-boot-2009.03/board/xilinx/xilinx_iic/xiic_l.h
--- u-boot-2009.03_orig/board/xilinx/xilinx_iic/xiic_l.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/board/xilinx/xilinx_iic/xiic_l.h 2009-03-31 14:48:44.195049600 -0700
@@ -1,150 +1,150 @@
-/* $Id: xiic_l.h,v 1.2 2002/12/05 19:32:40 meinelte Exp $ */
-/*****************************************************************************
-*
-* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
-* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
-* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
-* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
-* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
-* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
-* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
-* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
-* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
-* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
-* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
-* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE.
-*
-* (c) Copyright 2002 Xilinx Inc.
-* All rights reserved.
-*
-*****************************************************************************/
-/****************************************************************************/
-/**
-*
-* @file xiic_l.h
-*
-* This header file contains identifiers and low-level driver functions (or
-* macros) that can be used to access the device. High-level driver functions
-* are defined in xiic.h.
-*
-* <pre>
-* MODIFICATION HISTORY:
-*
-* Ver Who Date Changes
-* ----- ---- -------- -----------------------------------------------
-* 1.00b jhl 05/07/02 First release
-* 1.01c ecm 12/05/02 new rev
-* </pre>
-*
-*****************************************************************************/
-
-#ifndef XIIC_L_H /* prevent circular inclusions */
-#define XIIC_L_H /* by using protection macros */
-
-/***************************** Include Files ********************************/
-
-#include "xbasic_types.h"
-
-/************************** Constant Definitions ****************************/
-
-#define XIIC_MSB_OFFSET 3
-
-#define XIIC_REG_OFFSET 0x100 + XIIC_MSB_OFFSET
-
-/*
- * Register offsets in bytes from RegisterBase. Three is added to the
- * base offset to access LSB (IBM style) of the word
- */
-#define XIIC_CR_REG_OFFSET 0x00+XIIC_REG_OFFSET /* Control Register */
-#define XIIC_SR_REG_OFFSET 0x04+XIIC_REG_OFFSET /* Status Register */
-#define XIIC_DTR_REG_OFFSET 0x08+XIIC_REG_OFFSET /* Data Tx Register */
-#define XIIC_DRR_REG_OFFSET 0x0C+XIIC_REG_OFFSET /* Data Rx Register */
-#define XIIC_ADR_REG_OFFSET 0x10+XIIC_REG_OFFSET /* Address Register */
-#define XIIC_TFO_REG_OFFSET 0x14+XIIC_REG_OFFSET /* Tx FIFO Occupancy */
-#define XIIC_RFO_REG_OFFSET 0x18+XIIC_REG_OFFSET /* Rx FIFO Occupancy */
-#define XIIC_TBA_REG_OFFSET 0x1C+XIIC_REG_OFFSET /* 10 Bit Address reg */
-#define XIIC_RFD_REG_OFFSET 0x20+XIIC_REG_OFFSET /* Rx FIFO Depth reg */
-
-/* Control Register masks */
-
-#define XIIC_CR_ENABLE_DEVICE_MASK 0x01 /* Device enable = 1 */
-#define XIIC_CR_TX_FIFO_RESET_MASK 0x02 /* Transmit FIFO reset=1 */
-#define XIIC_CR_MSMS_MASK 0x04 /* Master starts Txing=1 */
-#define XIIC_CR_DIR_IS_TX_MASK 0x08 /* Dir of tx. Txing=1 */
-#define XIIC_CR_NO_ACK_MASK 0x10 /* Tx Ack. NO ack = 1 */
-#define XIIC_CR_REPEATED_START_MASK 0x20 /* Repeated start = 1 */
-#define XIIC_CR_GENERAL_CALL_MASK 0x40 /* Gen Call enabled = 1 */
-
-/* Status Register masks */
-
-#define XIIC_SR_GEN_CALL_MASK 0x01 /* 1=a mstr issued a GC */
-#define XIIC_SR_ADDR_AS_SLAVE_MASK 0x02 /* 1=when addr as slave */
-#define XIIC_SR_BUS_BUSY_MASK 0x04 /* 1 = bus is busy */
-#define XIIC_SR_MSTR_RDING_SLAVE_MASK 0x08 /* 1=Dir: mstr <-- slave */
-#define XIIC_SR_TX_FIFO_FULL_MASK 0x10 /* 1 = Tx FIFO full */
-#define XIIC_SR_RX_FIFO_FULL_MASK 0x20 /* 1 = Rx FIFO full */
-#define XIIC_SR_RX_FIFO_EMPTY_MASK 0x40 /* 1 = Rx FIFO empty */
-
-/* IPIF Interrupt Status Register masks Interrupt occurs when... */
-
-#define XIIC_INTR_ARB_LOST_MASK 0x01 /* 1 = arbitration lost */
-#define XIIC_INTR_TX_ERROR_MASK 0x02 /* 1=Tx error/msg complete*/
-#define XIIC_INTR_TX_EMPTY_MASK 0x04 /* 1 = Tx FIFO/reg empty */
-#define XIIC_INTR_RX_FULL_MASK 0x08 /* 1=Rx FIFO/reg=OCY level*/
-#define XIIC_INTR_BNB_MASK 0x10 /* 1 = Bus not busy */
-#define XIIC_INTR_AAS_MASK 0x20 /* 1 = when addr as slave */
-#define XIIC_INTR_NAAS_MASK 0x40 /* 1 = not addr as slave */
-#define XIIC_INTR_TX_HALF_MASK 0x80 /* 1 = TX FIFO half empty */
-
-/* IPIF Device Interrupt Register masks */
-
-#define XIIC_IPIF_IIC_MASK 0x00000004UL /* 1=inter enabled */
-#define XIIC_IPIF_ERROR_MASK 0x00000001UL /* 1=inter enabled */
-#define XIIC_IPIF_INTER_ENABLE_MASK (XIIC_IPIF_IIC_MASK | \
- XIIC_IPIF_ERROR_MASK)
-
-#define XIIC_TX_ADDR_SENT 0x00
-#define XIIC_TX_ADDR_MSTR_RECV_MASK 0x02
-
-/* The following constants specify the depth of the FIFOs */
-
-#define IIC_RX_FIFO_DEPTH 16 /* Rx fifo capacity */
-#define IIC_TX_FIFO_DEPTH 16 /* Tx fifo capacity */
-
-/* The following constants specify groups of interrupts that are typically
- * enabled or disables at the same time
- */
-#define XIIC_TX_INTERRUPTS \
- (XIIC_INTR_TX_ERROR_MASK | XIIC_INTR_TX_EMPTY_MASK | \
- XIIC_INTR_TX_HALF_MASK)
-
-#define XIIC_TX_RX_INTERRUPTS (XIIC_INTR_RX_FULL_MASK | XIIC_TX_INTERRUPTS)
-
-/* The following constants are used with the following macros to specify the
- * operation, a read or write operation.
- */
-#define XIIC_READ_OPERATION 1
-#define XIIC_WRITE_OPERATION 0
-
-/* The following constants are used with the transmit FIFO fill function to
- * specify the role which the IIC device is acting as, a master or a slave.
- */
-#define XIIC_MASTER_ROLE 1
-#define XIIC_SLAVE_ROLE 0
-
-/**************************** Type Definitions ******************************/
-
-
-/***************** Macros (Inline Functions) Definitions ********************/
-
-
-/************************** Function Prototypes *****************************/
-
-unsigned XIic_Recv(u32 BaseAddress, u8 Address,
- u8 *BufferPtr, unsigned ByteCount);
-
-unsigned XIic_Send(u32 BaseAddress, u8 Address,
- u8 *BufferPtr, unsigned ByteCount);
-
-#endif /* end of protection macro */
+/* $Id: xiic_l.h,v 1.1.1.1 2009/03/25 22:21:56 kenagy Exp $ */
+/*****************************************************************************
+*
+* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
+* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
+* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
+* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
+* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
+* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
+* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
+* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
+* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
+* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
+* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
+* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE.
+*
+* (c) Copyright 2002 Xilinx Inc.
+* All rights reserved.
+*
+*****************************************************************************/
+/****************************************************************************/
+/**
+*
+* @file xiic_l.h
+*
+* This header file contains identifiers and low-level driver functions (or
+* macros) that can be used to access the device. High-level driver functions
+* are defined in xiic.h.
+*
+* <pre>
+* MODIFICATION HISTORY:
+*
+* Ver Who Date Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.00b jhl 05/07/02 First release
+* 1.01c ecm 12/05/02 new rev
+* </pre>
+*
+*****************************************************************************/
+
+#ifndef XIIC_L_H /* prevent circular inclusions */
+#define XIIC_L_H /* by using protection macros */
+
+/***************************** Include Files ********************************/
+
+#include "xbasic_types.h"
+
+/************************** Constant Definitions ****************************/
+
+#define XIIC_MSB_OFFSET 3
+
+#define XIIC_REG_OFFSET 0x100 + XIIC_MSB_OFFSET
+
+/*
+ * Register offsets in bytes from RegisterBase. Three is added to the
+ * base offset to access LSB (IBM style) of the word
+ */
+#define XIIC_CR_REG_OFFSET 0x00+XIIC_REG_OFFSET /* Control Register */
+#define XIIC_SR_REG_OFFSET 0x04+XIIC_REG_OFFSET /* Status Register */
+#define XIIC_DTR_REG_OFFSET 0x08+XIIC_REG_OFFSET /* Data Tx Register */
+#define XIIC_DRR_REG_OFFSET 0x0C+XIIC_REG_OFFSET /* Data Rx Register */
+#define XIIC_ADR_REG_OFFSET 0x10+XIIC_REG_OFFSET /* Address Register */
+#define XIIC_TFO_REG_OFFSET 0x14+XIIC_REG_OFFSET /* Tx FIFO Occupancy */
+#define XIIC_RFO_REG_OFFSET 0x18+XIIC_REG_OFFSET /* Rx FIFO Occupancy */
+#define XIIC_TBA_REG_OFFSET 0x1C+XIIC_REG_OFFSET /* 10 Bit Address reg */
+#define XIIC_RFD_REG_OFFSET 0x20+XIIC_REG_OFFSET /* Rx FIFO Depth reg */
+
+/* Control Register masks */
+
+#define XIIC_CR_ENABLE_DEVICE_MASK 0x01 /* Device enable = 1 */
+#define XIIC_CR_TX_FIFO_RESET_MASK 0x02 /* Transmit FIFO reset=1 */
+#define XIIC_CR_MSMS_MASK 0x04 /* Master starts Txing=1 */
+#define XIIC_CR_DIR_IS_TX_MASK 0x08 /* Dir of tx. Txing=1 */
+#define XIIC_CR_NO_ACK_MASK 0x10 /* Tx Ack. NO ack = 1 */
+#define XIIC_CR_REPEATED_START_MASK 0x20 /* Repeated start = 1 */
+#define XIIC_CR_GENERAL_CALL_MASK 0x40 /* Gen Call enabled = 1 */
+
+/* Status Register masks */
+
+#define XIIC_SR_GEN_CALL_MASK 0x01 /* 1=a mstr issued a GC */
+#define XIIC_SR_ADDR_AS_SLAVE_MASK 0x02 /* 1=when addr as slave */
+#define XIIC_SR_BUS_BUSY_MASK 0x04 /* 1 = bus is busy */
+#define XIIC_SR_MSTR_RDING_SLAVE_MASK 0x08 /* 1=Dir: mstr <-- slave */
+#define XIIC_SR_TX_FIFO_FULL_MASK 0x10 /* 1 = Tx FIFO full */
+#define XIIC_SR_RX_FIFO_FULL_MASK 0x20 /* 1 = Rx FIFO full */
+#define XIIC_SR_RX_FIFO_EMPTY_MASK 0x40 /* 1 = Rx FIFO empty */
+
+/* IPIF Interrupt Status Register masks Interrupt occurs when... */
+
+#define XIIC_INTR_ARB_LOST_MASK 0x01 /* 1 = arbitration lost */
+#define XIIC_INTR_TX_ERROR_MASK 0x02 /* 1=Tx error/msg complete*/
+#define XIIC_INTR_TX_EMPTY_MASK 0x04 /* 1 = Tx FIFO/reg empty */
+#define XIIC_INTR_RX_FULL_MASK 0x08 /* 1=Rx FIFO/reg=OCY level*/
+#define XIIC_INTR_BNB_MASK 0x10 /* 1 = Bus not busy */
+#define XIIC_INTR_AAS_MASK 0x20 /* 1 = when addr as slave */
+#define XIIC_INTR_NAAS_MASK 0x40 /* 1 = not addr as slave */
+#define XIIC_INTR_TX_HALF_MASK 0x80 /* 1 = TX FIFO half empty */
+
+/* IPIF Device Interrupt Register masks */
+
+#define XIIC_IPIF_IIC_MASK 0x00000004UL /* 1=inter enabled */
+#define XIIC_IPIF_ERROR_MASK 0x00000001UL /* 1=inter enabled */
+#define XIIC_IPIF_INTER_ENABLE_MASK (XIIC_IPIF_IIC_MASK | \
+ XIIC_IPIF_ERROR_MASK)
+
+#define XIIC_TX_ADDR_SENT 0x00
+#define XIIC_TX_ADDR_MSTR_RECV_MASK 0x02
+
+/* The following constants specify the depth of the FIFOs */
+
+#define IIC_RX_FIFO_DEPTH 16 /* Rx fifo capacity */
+#define IIC_TX_FIFO_DEPTH 16 /* Tx fifo capacity */
+
+/* The following constants specify groups of interrupts that are typically
+ * enabled or disables at the same time
+ */
+#define XIIC_TX_INTERRUPTS \
+ (XIIC_INTR_TX_ERROR_MASK | XIIC_INTR_TX_EMPTY_MASK | \
+ XIIC_INTR_TX_HALF_MASK)
+
+#define XIIC_TX_RX_INTERRUPTS (XIIC_INTR_RX_FULL_MASK | XIIC_TX_INTERRUPTS)
+
+/* The following constants are used with the following macros to specify the
+ * operation, a read or write operation.
+ */
+#define XIIC_READ_OPERATION 1
+#define XIIC_WRITE_OPERATION 0
+
+/* The following constants are used with the transmit FIFO fill function to
+ * specify the role which the IIC device is acting as, a master or a slave.
+ */
+#define XIIC_MASTER_ROLE 1
+#define XIIC_SLAVE_ROLE 0
+
+/**************************** Type Definitions ******************************/
+
+
+/***************** Macros (Inline Functions) Definitions ********************/
+
+
+/************************** Function Prototypes *****************************/
+
+unsigned XIic_Recv(u32 BaseAddress, u8 Address,
+ u8 *BufferPtr, unsigned ByteCount);
+
+unsigned XIic_Send(u32 BaseAddress, u8 Address,
+ u8 *BufferPtr, unsigned ByteCount);
+
+#endif /* end of protection macro */
diff -Naur u-boot-2009.03_orig/board/xm250/CVS/Entries u-boot-2009.03/board/xm250/CVS/Entries
--- u-boot-2009.03_orig/board/xm250/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xm250/CVS/Entries 2009-03-25 15:57:50.371832800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xm250.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xm250/CVS/Entries.Extra u-boot-2009.03/board/xm250/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xm250/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xm250/CVS/Entries.Extra 2009-03-25 15:57:50.371832800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/lowlevel_init.S///1238019716/
+/u-boot.lds///1238019716/
+/xm250.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/xm250/CVS/Entries.Extra.Old u-boot-2009.03/board/xm250/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xm250/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xm250/CVS/Entries.Extra.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/lowlevel_init.S///1238019716/
+/u-boot.lds///1238019716/
+/xm250.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/xm250/CVS/Entries.Old u-boot-2009.03/board/xm250/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xm250/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xm250/CVS/Entries.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/xm250.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xm250/CVS/Repository u-boot-2009.03/board/xm250/CVS/Repository
--- u-boot-2009.03_orig/board/xm250/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xm250/CVS/Repository 2009-03-25 15:25:08.306265100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xm250
diff -Naur u-boot-2009.03_orig/board/xm250/CVS/Root u-boot-2009.03/board/xm250/CVS/Root
--- u-boot-2009.03_orig/board/xm250/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xm250/CVS/Root 2009-03-25 15:25:08.306265100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xpedite1k/CVS/Entries u-boot-2009.03/board/xpedite1k/CVS/Entries
--- u-boot-2009.03_orig/board/xpedite1k/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xpedite1k/CVS/Entries 2009-03-25 15:57:50.434332400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds.debug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xpedite1k.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xpedite1k/CVS/Entries.Extra u-boot-2009.03/board/xpedite1k/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xpedite1k/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xpedite1k/CVS/Entries.Extra 2009-03-25 15:57:50.449957300 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/init.S///1238019716/
+/u-boot.lds///1238019716/
+/u-boot.lds.debug///1238019716/
+/xpedite1k.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/xpedite1k/CVS/Entries.Extra.Old u-boot-2009.03/board/xpedite1k/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xpedite1k/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xpedite1k/CVS/Entries.Extra.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/init.S///1238019716/
+/u-boot.lds///1238019716/
+/u-boot.lds.debug///1238019716/
+/xpedite1k.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/xpedite1k/CVS/Entries.Old u-boot-2009.03/board/xpedite1k/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xpedite1k/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xpedite1k/CVS/Entries.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/init.S/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/u-boot.lds.debug/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/xpedite1k.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xpedite1k/CVS/Repository u-boot-2009.03/board/xpedite1k/CVS/Repository
--- u-boot-2009.03_orig/board/xpedite1k/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xpedite1k/CVS/Repository 2009-03-25 15:25:08.587513300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xpedite1k
diff -Naur u-boot-2009.03_orig/board/xpedite1k/CVS/Root u-boot-2009.03/board/xpedite1k/CVS/Root
--- u-boot-2009.03_orig/board/xpedite1k/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xpedite1k/CVS/Root 2009-03-25 15:25:08.587513300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/xsengine/CVS/Entries u-boot-2009.03/board/xsengine/CVS/Entries
--- u-boot-2009.03_orig/board/xsengine/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xsengine/CVS/Entries 2009-03-25 15:57:50.512456900 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xsengine.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xsengine/CVS/Entries.Extra u-boot-2009.03/board/xsengine/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/xsengine/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xsengine/CVS/Entries.Extra 2009-03-25 15:57:50.512456900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/lowlevel_init.S///1238019716/
+/u-boot.lds///1238019716/
+/xsengine.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/xsengine/CVS/Entries.Extra.Old u-boot-2009.03/board/xsengine/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/xsengine/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xsengine/CVS/Entries.Extra.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/lowlevel_init.S///1238019716/
+/u-boot.lds///1238019716/
+/xsengine.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/xsengine/CVS/Entries.Old u-boot-2009.03/board/xsengine/CVS/Entries.Old
--- u-boot-2009.03_orig/board/xsengine/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xsengine/CVS/Entries.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/xsengine.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+D
diff -Naur u-boot-2009.03_orig/board/xsengine/CVS/Repository u-boot-2009.03/board/xsengine/CVS/Repository
--- u-boot-2009.03_orig/board/xsengine/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xsengine/CVS/Repository 2009-03-25 15:25:08.712512500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/xsengine
diff -Naur u-boot-2009.03_orig/board/xsengine/CVS/Root u-boot-2009.03/board/xsengine/CVS/Root
--- u-boot-2009.03_orig/board/xsengine/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/xsengine/CVS/Root 2009-03-25 15:25:08.712512500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/zeus/CVS/Entries u-boot-2009.03/board/zeus/CVS/Entries
--- u-boot-2009.03_orig/board/zeus/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zeus/CVS/Entries 2009-03-25 15:57:50.606206300 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zeus.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/zeus/CVS/Entries.Extra u-boot-2009.03/board/zeus/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/zeus/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zeus/CVS/Entries.Extra 2009-03-25 15:57:50.606206300 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/u-boot.lds///1238019716/
+/update.c///1238019716/
+/zeus.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/zeus/CVS/Entries.Extra.Old u-boot-2009.03/board/zeus/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/zeus/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zeus/CVS/Entries.Extra.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/u-boot.lds///1238019716/
+/update.c///1238019716/
+/zeus.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/zeus/CVS/Entries.Old u-boot-2009.03/board/zeus/CVS/Entries.Old
--- u-boot-2009.03_orig/board/zeus/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zeus/CVS/Entries.Old 2009-03-25 15:25:08.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/update.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/zeus.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+D
diff -Naur u-boot-2009.03_orig/board/zeus/CVS/Repository u-boot-2009.03/board/zeus/CVS/Repository
--- u-boot-2009.03_orig/board/zeus/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zeus/CVS/Repository 2009-03-25 15:25:08.837511700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/zeus
diff -Naur u-boot-2009.03_orig/board/zeus/CVS/Root u-boot-2009.03/board/zeus/CVS/Root
--- u-boot-2009.03_orig/board/zeus/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zeus/CVS/Root 2009-03-25 15:25:08.837511700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/zpc1900/CVS/Entries u-boot-2009.03/board/zpc1900/CVS/Entries
--- u-boot-2009.03_orig/board/zpc1900/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zpc1900/CVS/Entries 2009-03-25 15:57:50.668705900 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zpc1900.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/zpc1900/CVS/Entries.Extra u-boot-2009.03/board/zpc1900/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/zpc1900/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zpc1900/CVS/Entries.Extra 2009-03-25 15:57:50.668705900 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/zpc1900.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/zpc1900/CVS/Entries.Extra.Old u-boot-2009.03/board/zpc1900/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/zpc1900/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zpc1900/CVS/Entries.Extra.Old 2009-03-25 15:25:09.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/zpc1900.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/zpc1900/CVS/Entries.Old u-boot-2009.03/board/zpc1900/CVS/Entries.Old
--- u-boot-2009.03_orig/board/zpc1900/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zpc1900/CVS/Entries.Old 2009-03-25 15:25:09.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/zpc1900.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+D
diff -Naur u-boot-2009.03_orig/board/zpc1900/CVS/Repository u-boot-2009.03/board/zpc1900/CVS/Repository
--- u-boot-2009.03_orig/board/zpc1900/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zpc1900/CVS/Repository 2009-03-25 15:25:08.962510900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/zpc1900
diff -Naur u-boot-2009.03_orig/board/zpc1900/CVS/Root u-boot-2009.03/board/zpc1900/CVS/Root
--- u-boot-2009.03_orig/board/zpc1900/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zpc1900/CVS/Root 2009-03-25 15:25:08.962510900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/board/zylonite/CVS/Entries u-boot-2009.03/board/zylonite/CVS/Entries
--- u-boot-2009.03_orig/board/zylonite/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zylonite/CVS/Entries 2009-03-25 15:57:50.746830400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zylonite.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/board/zylonite/CVS/Entries.Extra u-boot-2009.03/board/zylonite/CVS/Entries.Extra
--- u-boot-2009.03_orig/board/zylonite/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zylonite/CVS/Entries.Extra 2009-03-25 15:57:50.746830400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/lowlevel_init.S///1238019716/
+/nand.c///1238019716/
+/u-boot.lds///1238019716/
+/zylonite.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/zylonite/CVS/Entries.Extra.Old u-boot-2009.03/board/zylonite/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/board/zylonite/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zylonite/CVS/Entries.Extra.Old 2009-03-25 15:25:09.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019716/
+/config.mk///1238019716/
+/flash.c///1238019716/
+/lowlevel_init.S///1238019716/
+/nand.c///1238019716/
+/u-boot.lds///1238019716/
+/zylonite.c///1238019716/
diff -Naur u-boot-2009.03_orig/board/zylonite/CVS/Entries.Old u-boot-2009.03/board/zylonite/CVS/Entries.Old
--- u-boot-2009.03_orig/board/zylonite/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zylonite/CVS/Entries.Old 2009-03-25 15:25:09.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:56 2009//
+/zylonite.c/1.1.1.1/Wed Mar 25 22:21:56 2009//
+D
diff -Naur u-boot-2009.03_orig/board/zylonite/CVS/Repository u-boot-2009.03/board/zylonite/CVS/Repository
--- u-boot-2009.03_orig/board/zylonite/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zylonite/CVS/Repository 2009-03-25 15:25:09.056260300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/board/zylonite
diff -Naur u-boot-2009.03_orig/board/zylonite/CVS/Root u-boot-2009.03/board/zylonite/CVS/Root
--- u-boot-2009.03_orig/board/zylonite/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/board/zylonite/CVS/Root 2009-03-25 15:25:09.056260300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/common/CVS/Entries u-boot-2009.03/common/CVS/Entries
--- u-boot-2009.03_orig/common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/common/CVS/Entries 2009-03-31 14:50:24.115645600 -0700
@@ -0,0 +1,106 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/circbuf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ambapp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_autoscript.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bdinfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bedbug.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bmp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_boot.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bootldr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_console.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_cplbinfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_date.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_dcr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_df.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_diag.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_display.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_dtt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_elf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ext2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fdc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fdos.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ide.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_immap.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_irq.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_itest.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_license.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_load.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_log.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mfsl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mii.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_net.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_nvedit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_onenand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_otp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_portio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_reginfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_reiser.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_sata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_scsi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_setexpr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_sf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_strings.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_terminal.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ubi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_universe.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_vfd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ximg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_yaffs2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/command.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/console.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr_spd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/devices.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dlmalloc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dlmalloc.src/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_common.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_dataflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_embedded.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_nowhere.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_nvram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_onenand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_sf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exports.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_support.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hush.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/image.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iomux.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lynxkdi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/main.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memsize.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/miiphyutil.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s_record.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_kbd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_storage.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xyzModem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bootm.c/1.2/Wed Mar 25 23:25:04 2009//
+/bedbug.c/1.1.1.1/Tue Mar 31 21:49:15 2009//T1.1.1.1
+/cmd_doc.c/1.1.1.1/Tue Mar 31 21:49:43 2009//T1.1.1.1
+/cmd_jffs2.c/1.1.1.1/Tue Mar 31 21:50:04 2009//T1.1.1.1
+/docecc.c/1.1.1.1/Tue Mar 31 21:50:23 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/common/CVS/Entries.Extra u-boot-2009.03/common/CVS/Entries.Extra
--- u-boot-2009.03_orig/common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/common/CVS/Entries.Extra 2009-03-31 14:50:24.115645600 -0700
@@ -0,0 +1,105 @@
+/Makefile///1238019717/
+/circbuf.c///1238019716/
+/cmd_ambapp.c///1238019716/
+/cmd_autoscript.c///1238019716/
+/cmd_bdinfo.c///1238019716/
+/cmd_bedbug.c///1238019716/
+/cmd_bmp.c///1238019716/
+/cmd_boot.c///1238019716/
+/cmd_bootldr.c///1238019716/
+/cmd_cache.c///1238019716/
+/cmd_console.c///1238019716/
+/cmd_cplbinfo.c///1238019716/
+/cmd_date.c///1238019716/
+/cmd_dcr.c///1238019716/
+/cmd_df.c///1238019716/
+/cmd_diag.c///1238019716/
+/cmd_display.c///1238019716/
+/cmd_dtt.c///1238019716/
+/cmd_eeprom.c///1238019716/
+/cmd_elf.c///1238019716/
+/cmd_ext2.c///1238019716/
+/cmd_fat.c///1238019716/
+/cmd_fdc.c///1238019716/
+/cmd_fdos.c///1238019716/
+/cmd_fdt.c///1238019716/
+/cmd_flash.c///1238019716/
+/cmd_fpga.c///1238019716/
+/cmd_i2c.c///1238019716/
+/cmd_ide.c///1238019716/
+/cmd_immap.c///1238019716/
+/cmd_irq.c///1238019716/
+/cmd_itest.c///1238019716/
+/cmd_license.c///1238019716/
+/cmd_load.c///1238019716/
+/cmd_log.c///1238019716/
+/cmd_mac.c///1238019716/
+/cmd_mem.c///1238019716/
+/cmd_mfsl.c///1238019716/
+/cmd_mii.c///1238019716/
+/cmd_misc.c///1238019716/
+/cmd_mmc.c///1238019716/
+/cmd_mp.c///1238019716/
+/cmd_nand.c///1238019716/
+/cmd_net.c///1238019716/
+/cmd_nvedit.c///1238019716/
+/cmd_onenand.c///1238019716/
+/cmd_otp.c///1238019716/
+/cmd_pci.c///1238019716/
+/cmd_pcmcia.c///1238019716/
+/cmd_portio.c///1238019716/
+/cmd_reginfo.c///1238019716/
+/cmd_reiser.c///1238019716/
+/cmd_sata.c///1238019716/
+/cmd_scsi.c///1238019716/
+/cmd_setexpr.c///1238019716/
+/cmd_sf.c///1238019716/
+/cmd_spi.c///1238019716/
+/cmd_strings.c///1238019716/
+/cmd_terminal.c///1238019716/
+/cmd_ubi.c///1238019716/
+/cmd_universe.c///1238019716/
+/cmd_usb.c///1238019716/
+/cmd_vfd.c///1238019716/
+/cmd_ximg.c///1238019716/
+/cmd_yaffs2.c///1238019716/
+/command.c///1238019716/
+/console.c///1238019717/
+/ddr_spd.c///1238019717/
+/devices.c///1238019717/
+/dlmalloc.c///1238019717/
+/dlmalloc.src///1238019717/
+/env_common.c///1238019717/
+/env_dataflash.c///1238019717/
+/env_eeprom.c///1238019717/
+/env_embedded.c///1238019717/
+/env_flash.c///1238019717/
+/env_nand.c///1238019717/
+/env_nowhere.c///1238019717/
+/env_nvram.c///1238019717/
+/env_onenand.c///1238019717/
+/env_sf.c///1238019717/
+/exports.c///1238019717/
+/fdt_support.c///1238019717/
+/flash.c///1238019717/
+/hush.c///1238019717/
+/image.c///1238019717/
+/iomux.c///1238019717/
+/kgdb.c///1238019717/
+/lcd.c///1238019717/
+/lynxkdi.c///1238019717/
+/main.c///1238019717/
+/memsize.c///1238019717/
+/miiphyutil.c///1238019717/
+/s_record.c///1238019717/
+/serial.c///1238019717/
+/update.c///1238019717/
+/usb.c///1238019717/
+/usb_kbd.c///1238019717/
+/usb_storage.c///1238019717/
+/xyzModem.c///1238019717/
+/cmd_bootm.c///1238028701/
+/bedbug.c///1238019716/
+/cmd_doc.c///1238019716/
+/cmd_jffs2.c///1238019716/
+/docecc.c///1238019717/
diff -Naur u-boot-2009.03_orig/common/CVS/Entries.Extra.Old u-boot-2009.03/common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/common/CVS/Entries.Extra.Old 2009-03-31 14:50:04.000000000 -0700
@@ -0,0 +1,105 @@
+/Makefile///1238019717/
+/circbuf.c///1238019716/
+/cmd_ambapp.c///1238019716/
+/cmd_autoscript.c///1238019716/
+/cmd_bdinfo.c///1238019716/
+/cmd_bedbug.c///1238019716/
+/cmd_bmp.c///1238019716/
+/cmd_boot.c///1238019716/
+/cmd_bootldr.c///1238019716/
+/cmd_cache.c///1238019716/
+/cmd_console.c///1238019716/
+/cmd_cplbinfo.c///1238019716/
+/cmd_date.c///1238019716/
+/cmd_dcr.c///1238019716/
+/cmd_df.c///1238019716/
+/cmd_diag.c///1238019716/
+/cmd_display.c///1238019716/
+/cmd_dtt.c///1238019716/
+/cmd_eeprom.c///1238019716/
+/cmd_elf.c///1238019716/
+/cmd_ext2.c///1238019716/
+/cmd_fat.c///1238019716/
+/cmd_fdc.c///1238019716/
+/cmd_fdos.c///1238019716/
+/cmd_fdt.c///1238019716/
+/cmd_flash.c///1238019716/
+/cmd_fpga.c///1238019716/
+/cmd_i2c.c///1238019716/
+/cmd_ide.c///1238019716/
+/cmd_immap.c///1238019716/
+/cmd_irq.c///1238019716/
+/cmd_itest.c///1238019716/
+/cmd_license.c///1238019716/
+/cmd_load.c///1238019716/
+/cmd_log.c///1238019716/
+/cmd_mac.c///1238019716/
+/cmd_mem.c///1238019716/
+/cmd_mfsl.c///1238019716/
+/cmd_mii.c///1238019716/
+/cmd_misc.c///1238019716/
+/cmd_mmc.c///1238019716/
+/cmd_mp.c///1238019716/
+/cmd_nand.c///1238019716/
+/cmd_net.c///1238019716/
+/cmd_nvedit.c///1238019716/
+/cmd_onenand.c///1238019716/
+/cmd_otp.c///1238019716/
+/cmd_pci.c///1238019716/
+/cmd_pcmcia.c///1238019716/
+/cmd_portio.c///1238019716/
+/cmd_reginfo.c///1238019716/
+/cmd_reiser.c///1238019716/
+/cmd_sata.c///1238019716/
+/cmd_scsi.c///1238019716/
+/cmd_setexpr.c///1238019716/
+/cmd_sf.c///1238019716/
+/cmd_spi.c///1238019716/
+/cmd_strings.c///1238019716/
+/cmd_terminal.c///1238019716/
+/cmd_ubi.c///1238019716/
+/cmd_universe.c///1238019716/
+/cmd_usb.c///1238019716/
+/cmd_vfd.c///1238019716/
+/cmd_ximg.c///1238019716/
+/cmd_yaffs2.c///1238019716/
+/command.c///1238019716/
+/console.c///1238019717/
+/ddr_spd.c///1238019717/
+/devices.c///1238019717/
+/dlmalloc.c///1238019717/
+/dlmalloc.src///1238019717/
+/env_common.c///1238019717/
+/env_dataflash.c///1238019717/
+/env_eeprom.c///1238019717/
+/env_embedded.c///1238019717/
+/env_flash.c///1238019717/
+/env_nand.c///1238019717/
+/env_nowhere.c///1238019717/
+/env_nvram.c///1238019717/
+/env_onenand.c///1238019717/
+/env_sf.c///1238019717/
+/exports.c///1238019717/
+/fdt_support.c///1238019717/
+/flash.c///1238019717/
+/hush.c///1238019717/
+/image.c///1238019717/
+/iomux.c///1238019717/
+/kgdb.c///1238019717/
+/lcd.c///1238019717/
+/lynxkdi.c///1238019717/
+/main.c///1238019717/
+/memsize.c///1238019717/
+/miiphyutil.c///1238019717/
+/s_record.c///1238019717/
+/serial.c///1238019717/
+/update.c///1238019717/
+/usb.c///1238019717/
+/usb_kbd.c///1238019717/
+/usb_storage.c///1238019717/
+/xyzModem.c///1238019717/
+/cmd_bootm.c///1238028701/
+/docecc.c///1238028701/
+/bedbug.c///1238019716/
+/cmd_doc.c///1238019716/
+/cmd_jffs2.c///1238019716/
diff -Naur u-boot-2009.03_orig/common/CVS/Entries.Old u-boot-2009.03/common/CVS/Entries.Old
--- u-boot-2009.03_orig/common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/common/CVS/Entries.Old 2009-03-31 14:50:04.000000000 -0700
@@ -0,0 +1,106 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/circbuf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ambapp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_autoscript.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bdinfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bedbug.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bmp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_boot.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bootldr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_console.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_cplbinfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_date.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_dcr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_df.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_diag.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_display.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_dtt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_elf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ext2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fdc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fdos.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ide.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_immap.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_irq.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_itest.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_license.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_load.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_log.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mfsl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mii.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_mp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_net.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_nvedit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_onenand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_otp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_portio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_reginfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_reiser.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_sata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_scsi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_setexpr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_sf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_strings.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_terminal.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ubi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_universe.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_vfd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_ximg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_yaffs2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/command.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/console.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr_spd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/devices.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dlmalloc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dlmalloc.src/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_common.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_dataflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_embedded.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_nowhere.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_nvram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_onenand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/env_sf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exports.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_support.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hush.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/image.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iomux.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lynxkdi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/main.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memsize.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/miiphyutil.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s_record.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/update.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_kbd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_storage.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xyzModem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmd_bootm.c/1.2/Wed Mar 25 23:25:04 2009//
+/docecc.c/1.2/Thu Mar 26 00:51:41 2009//
+/bedbug.c/1.1.1.1/Tue Mar 31 21:49:15 2009//T1.1.1.1
+/cmd_doc.c/1.1.1.1/Tue Mar 31 21:49:43 2009//T1.1.1.1
+/cmd_jffs2.c/1.1.1.1/Tue Mar 31 21:50:04 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/common/CVS/Repository u-boot-2009.03/common/CVS/Repository
--- u-boot-2009.03_orig/common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/common/CVS/Repository 2009-03-25 15:25:09.228134200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/common
diff -Naur u-boot-2009.03_orig/common/CVS/Root u-boot-2009.03/common/CVS/Root
--- u-boot-2009.03_orig/common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/common/CVS/Root 2009-03-25 15:25:09.228134200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/common/bedbug.c u-boot-2009.03/common/bedbug.c
--- u-boot-2009.03_orig/common/bedbug.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/common/bedbug.c 2009-03-31 14:49:15.725896000 -0700
@@ -1,1252 +1,1252 @@
-/* $Id$ */
-
-#include <common.h>
-
-#include <linux/ctype.h>
-#include <bedbug/bedbug.h>
-#include <bedbug/ppc.h>
-#include <bedbug/regs.h>
-#include <bedbug/tables.h>
-
-#define Elf32_Word unsigned long
-
-/* USE_SOURCE_CODE enables some symbolic debugging functions of this
- code. This is only useful if the program will have access to the
- source code for the binary being examined.
-*/
-
-/* #define USE_SOURCE_CODE 1 */
-
-#ifdef USE_SOURCE_CODE
-extern int line_info_from_addr __P ((Elf32_Word, char *, char *, int *));
-extern struct symreflist *symByAddr;
-extern char *symbol_name_from_addr __P ((Elf32_Word, int, int *));
-#endif /* USE_SOURCE_CODE */
-
-int print_operands __P ((struct ppc_ctx *));
-int get_operand_value __P ((struct opcode *, unsigned long,
- enum OP_FIELD, unsigned long *));
-struct opcode *find_opcode __P ((unsigned long));
-struct opcode *find_opcode_by_name __P ((char *));
-char *spr_name __P ((int));
-int spr_value __P ((char *));
-char *tbr_name __P ((int));
-int tbr_value __P ((char *));
-int parse_operand __P ((unsigned long, struct opcode *,
- struct operand *, char *, int *));
-int get_word __P ((char **, char *));
-long read_number __P ((char *));
-int downstring __P ((char *));
-
-
-/*======================================================================
- * Entry point for the PPC disassembler.
- *
- * Arguments:
- * memaddr The address to start disassembling from.
- *
- * virtual If this value is non-zero, then this will be
- * used as the base address for the output and
- * symbol lookups. If this value is zero then
- * memaddr is used as the absolute address.
- *
- * num_instr The number of instructions to disassemble. Since
- * each instruction is 32 bits long, this can be
- * computed if you know the total size of the region.
- *
- * pfunc The address of a function that is called to print
- * each line of output. The function should take a
- * single character pointer as its parameters a la puts.
- *
- * flags Sets options for the output. This is a
- * bitwise-inclusive-OR of the following
- * values. Note that only one of the radix
- * options may be set.
- *
- * F_RADOCTAL - output radix is unsigned base 8.
- * F_RADUDECIMAL - output radix is unsigned base 10.
- * F_RADSDECIMAL - output radix is signed base 10.
- * F_RADHEX - output radix is unsigned base 16.
- * F_SIMPLE - use simplified mnemonics.
- * F_SYMBOL - lookup symbols for addresses.
- * F_INSTR - output raw instruction.
- * F_LINENO - show line # info if available.
- *
- * Returns TRUE if the area was successfully disassembled or FALSE if
- * a problem was encountered with accessing the memory.
- */
-
-int disppc (unsigned char *memaddr, unsigned char *virtual, int num_instr,
- int (*pfunc) (const char *), unsigned long flags)
-{
- int i;
- struct ppc_ctx ctx;
-
-#ifdef USE_SOURCE_CODE
- int line_no = 0;
- int last_line_no = 0;
- char funcname[128] = { 0 };
- char filename[256] = { 0 };
- char last_funcname[128] = { 0 };
- int symoffset;
- char *symname;
- char *cursym = (char *) 0;
-#endif /* USE_SOURCE_CODE */
- /*------------------------------------------------------------*/
-
- ctx.flags = flags;
- ctx.virtual = virtual;
-
- /* Figure out the output radix before we go any further */
-
- if (ctx.flags & F_RADOCTAL) {
- /* Unsigned octal output */
- strcpy (ctx.radix_fmt, "O%o");
- } else if (ctx.flags & F_RADUDECIMAL) {
- /* Unsigned decimal output */
- strcpy (ctx.radix_fmt, "%u");
- } else if (ctx.flags & F_RADSDECIMAL) {
- /* Signed decimal output */
- strcpy (ctx.radix_fmt, "%d");
- } else {
- /* Unsigned hex output */
- strcpy (ctx.radix_fmt, "0x%x");
- }
-
- if (ctx.virtual == 0) {
- ctx.virtual = memaddr;
- }
-#ifdef USE_SOURCE_CODE
- if (ctx.flags & F_SYMBOL) {
- if (symByAddr == 0) /* no symbols loaded */
- ctx.flags &= ~F_SYMBOL;
- else {
- cursym = (char *) 0;
- symoffset = 0;
- }
- }
-#endif /* USE_SOURCE_CODE */
-
- /* format each line as "XXXXXXXX: <symbol> IIIIIIII disassembly" where,
- XXXXXXXX is the memory address in hex,
- <symbol> is the symbolic location if F_SYMBOL is set.
- IIIIIIII is the raw machine code in hex if F_INSTR is set,
- and disassembly is the disassembled machine code with numbers
- formatted according to the 'radix' parameter */
-
- for (i = 0; i < num_instr; ++i, memaddr += 4, ctx.virtual += 4) {
-#ifdef USE_SOURCE_CODE
- if (ctx.flags & F_LINENO) {
- if ((line_info_from_addr ((Elf32_Word) ctx.virtual, filename,
- funcname, &line_no) == TRUE) &&
- ((line_no != last_line_no) ||
- (strcmp (last_funcname, funcname) != 0))) {
- print_source_line (filename, funcname, line_no, pfunc);
- }
- last_line_no = line_no;
- strcpy (last_funcname, funcname);
- }
-#endif /* USE_SOURCE_CODE */
-
- sprintf (ctx.data, "%08lx: ", (unsigned long) ctx.virtual);
- ctx.datalen = 10;
-
-#ifdef USE_SOURCE_CODE
- if (ctx.flags & F_SYMBOL) {
- if ((symname =
- symbol_name_from_addr ((Elf32_Word) ctx.virtual,
- TRUE, 0)) != 0) {
- cursym = symname;
- symoffset = 0;
- } else {
- if ((cursym == 0) &&
- ((symname =
- symbol_name_from_addr ((Elf32_Word) ctx.virtual,
- FALSE, &symoffset)) != 0)) {
- cursym = symname;
- } else {
- symoffset += 4;
- }
- }
-
- if (cursym != 0) {
- sprintf (&ctx.data[ctx.datalen], "<%s+", cursym);
- ctx.datalen = strlen (ctx.data);
- sprintf (&ctx.data[ctx.datalen], ctx.radix_fmt, symoffset);
- strcat (ctx.data, ">");
- ctx.datalen = strlen (ctx.data);
- }
- }
-#endif /* USE_SOURCE_CODE */
-
- ctx.instr = INSTRUCTION (memaddr);
-
- if (ctx.flags & F_INSTR) {
- /* Find the opcode structure for this opcode. If one is not found
- then it must be an illegal instruction */
- sprintf (&ctx.data[ctx.datalen],
- " %02lx %02lx %02lx %02lx ",
- ((ctx.instr >> 24) & 0xff),
- ((ctx.instr >> 16) & 0xff), ((ctx.instr >> 8) & 0xff),
- (ctx.instr & 0xff));
- ctx.datalen += 18;
- } else {
- strcat (ctx.data, " ");
- ctx.datalen += 3;
- }
-
- if ((ctx.op = find_opcode (ctx.instr)) == 0) {
- /* Illegal Opcode */
- sprintf (&ctx.data[ctx.datalen], " .long 0x%08lx",
- ctx.instr);
- ctx.datalen += 24;
- (*pfunc) (ctx.data);
- continue;
- }
-
- if (((ctx.flags & F_SIMPLE) == 0) ||
- (ctx.op->hfunc == 0) || ((*ctx.op->hfunc) (&ctx) == FALSE)) {
- sprintf (&ctx.data[ctx.datalen], "%-7s ", ctx.op->name);
- ctx.datalen += 8;
- print_operands (&ctx);
- }
-
- (*pfunc) (ctx.data);
- }
-
- return TRUE;
-} /* disppc */
-
-
-
-/*======================================================================
- * Called by the disassembler to print the operands for an instruction.
- *
- * Arguments:
- * ctx A pointer to the disassembler context record.
- *
- * always returns 0.
- */
-
-int print_operands (struct ppc_ctx *ctx)
-{
- int open_parens = 0;
- int field;
- unsigned long operand;
- struct operand *opr;
-
-#ifdef USE_SOURCE_CODE
- char *symname;
- int offset;
-#endif /* USE_SOURCE_CODE */
- /*------------------------------------------------------------*/
-
- /* Walk through the operands and list each in order */
- for (field = 0; ctx->op->fields[field] != 0; ++field) {
- if (ctx->op->fields[field] > n_operands) {
- continue; /* bad operand ?! */
- }
-
- opr = &operands[ctx->op->fields[field] - 1];
-
- if (opr->hint & OH_SILENT) {
- continue;
- }
-
- if ((field > 0) && !open_parens) {
- strcat (ctx->data, ",");
- ctx->datalen++;
- }
-
- operand = (ctx->instr >> opr->shift) & ((1 << opr->bits) - 1);
-
- if (opr->hint & OH_ADDR) {
- if ((operand & (1 << (opr->bits - 1))) != 0) {
- operand = operand - (1 << opr->bits);
- }
-
- if (ctx->op->hint & H_RELATIVE)
- operand = (operand << 2) + (unsigned long) ctx->virtual;
- else
- operand = (operand << 2);
-
-
- sprintf (&ctx->data[ctx->datalen], "0x%lx", operand);
- ctx->datalen = strlen (ctx->data);
-
-#ifdef USE_SOURCE_CODE
- if ((ctx->flags & F_SYMBOL) &&
- ((symname =
- symbol_name_from_addr (operand, 0, &offset)) != 0)) {
- sprintf (&ctx->data[ctx->datalen], " <%s", symname);
- if (offset != 0) {
- strcat (ctx->data, "+");
- ctx->datalen = strlen (ctx->data);
- sprintf (&ctx->data[ctx->datalen], ctx->radix_fmt,
- offset);
- }
- strcat (ctx->data, ">");
- }
-#endif /* USE_SOURCE_CODE */
- }
-
- else if (opr->hint & OH_REG) {
- if ((operand == 0) &&
- (opr->field == O_rA) && (ctx->op->hint & H_RA0_IS_0)) {
- strcat (ctx->data, "0");
- } else {
- sprintf (&ctx->data[ctx->datalen], "r%d", (short) operand);
- }
-
- if (open_parens) {
- strcat (ctx->data, ")");
- open_parens--;
- }
- }
-
- else if (opr->hint & OH_SPR) {
- strcat (ctx->data, spr_name (operand));
- }
-
- else if (opr->hint & OH_TBR) {
- strcat (ctx->data, tbr_name (operand));
- }
-
- else if (opr->hint & OH_LITERAL) {
- switch (opr->field) {
- case O_cr2:
- strcat (ctx->data, "cr2");
- ctx->datalen += 3;
- break;
-
- default:
- break;
- }
- }
-
- else {
- sprintf (&ctx->data[ctx->datalen], ctx->radix_fmt,
- (unsigned short) operand);
-
- if (open_parens) {
- strcat (ctx->data, ")");
- open_parens--;
- }
-
- else if (opr->hint & OH_OFFSET) {
- strcat (ctx->data, "(");
- open_parens++;
- }
- }
-
- ctx->datalen = strlen (ctx->data);
- }
-
- return 0;
-} /* print_operands */
-
-
-
-/*======================================================================
- * Called to get the value of an arbitrary operand with in an instruction.
- *
- * Arguments:
- * op The pointer to the opcode structure to which
- * the operands belong.
- *
- * instr The instruction (32 bits) containing the opcode
- * and the operands to print. By the time that
- * this routine is called the operand has already
- * been added to the output.
- *
- * field The field (operand) to get the value of.
- *
- * value The address of an unsigned long to be filled in
- * with the value of the operand if it is found. This
- * will only be filled in if the function returns
- * TRUE. This may be passed as 0 if the value is
- * not required.
- *
- * Returns TRUE if the operand was found or FALSE if it was not.
- */
-
-int get_operand_value (struct opcode *op, unsigned long instr,
- enum OP_FIELD field, unsigned long *value)
-{
- int i;
- struct operand *opr;
-
- /*------------------------------------------------------------*/
-
- if (field > n_operands) {
- return FALSE; /* bad operand ?! */
- }
-
- /* Walk through the operands and list each in order */
- for (i = 0; op->fields[i] != 0; ++i) {
- if (op->fields[i] != field) {
- continue;
- }
-
- opr = &operands[op->fields[i] - 1];
-
- if (value) {
- *value = (instr >> opr->shift) & ((1 << opr->bits) - 1);
- }
- return TRUE;
- }
-
- return FALSE;
-} /* operand_value */
-
-
-
-/*======================================================================
- * Called by the disassembler to match an opcode value to an opcode structure.
- *
- * Arguments:
- * instr The instruction (32 bits) to match. This value
- * may contain operand values as well as the opcode
- * since they will be masked out anyway for this
- * search.
- *
- * Returns the address of an opcode struct (from the opcode table) if the
- * operand successfully matched an entry, or 0 if no match was found.
- */
-
-struct opcode *find_opcode (unsigned long instr)
-{
- struct opcode *ptr;
- int top = 0;
- int bottom = n_opcodes - 1;
- int idx;
-
- /*------------------------------------------------------------*/
-
- while (top <= bottom) {
- idx = (top + bottom) >> 1;
- ptr = &opcodes[idx];
-
- if ((instr & ptr->mask) < ptr->opcode) {
- bottom = idx - 1;
- } else if ((instr & ptr->mask) > ptr->opcode) {
- top = idx + 1;
- } else {
- return ptr;
- }
- }
-
- return (struct opcode *) 0;
-} /* find_opcode */
-
-
-
-/*======================================================================
- * Called by the assembler to match an opcode name to an opcode structure.
- *
- * Arguments:
- * name The text name of the opcode, e.g. "b", "mtspr", etc.
- *
- * The opcodes are sorted numerically by their instruction binary code
- * so a search for the name cannot use the binary search used by the
- * other find routine.
- *
- * Returns the address of an opcode struct (from the opcode table) if the
- * name successfully matched an entry, or 0 if no match was found.
- */
-
-struct opcode *find_opcode_by_name (char *name)
-{
- int idx;
-
- /*------------------------------------------------------------*/
-
- downstring (name);
-
- for (idx = 0; idx < n_opcodes; ++idx) {
- if (!strcmp (name, opcodes[idx].name))
- return &opcodes[idx];
- }
-
- return (struct opcode *) 0;
-} /* find_opcode_by_name */
-
-
-
-/*======================================================================
- * Convert the 'spr' operand from its numeric value to its symbolic name.
- *
- * Arguments:
- * value The value of the 'spr' operand. This value should
- * be unmodified from its encoding in the instruction.
- * the split-field computations will be performed
- * here before the switch.
- *
- * Returns the address of a character array containing the name of the
- * special purpose register defined by the 'value' parameter, or the
- * address of a character array containing "???" if no match was found.
- */
-
-char *spr_name (int value)
-{
- unsigned short spr;
- static char other[10];
- int i;
-
- /*------------------------------------------------------------*/
-
- /* spr is a 10 bit field whose interpretation has the high and low
- five-bit fields reversed from their encoding in the operand */
-
- spr = ((value >> 5) & 0x1f) | ((value & 0x1f) << 5);
-
- for (i = 0; i < n_sprs; ++i) {
- if (spr == spr_map[i].spr_val)
- return spr_map[i].spr_name;
- }
-
- sprintf (other, "%d", spr);
- return other;
-} /* spr_name */
-
-
-
-/*======================================================================
- * Convert the 'spr' operand from its symbolic name to its numeric value
- *
- * Arguments:
- * name The symbolic name of the 'spr' operand. The
- * split-field encoding will be done by this routine.
- * NOTE: name can be a number.
- *
- * Returns the numeric value for the spr appropriate for encoding a machine
- * instruction. Returns 0 if unable to find the SPR.
- */
-
-int spr_value (char *name)
-{
- struct spr_info *sprp;
- int spr;
- int i;
-
- /*------------------------------------------------------------*/
-
- if (!name || !*name)
- return 0;
-
- if (isdigit ((int) name[0])) {
- i = htonl (read_number (name));
- spr = ((i >> 5) & 0x1f) | ((i & 0x1f) << 5);
- return spr;
- }
-
- downstring (name);
-
- for (i = 0; i < n_sprs; ++i) {
- sprp = &spr_map[i];
-
- if (strcmp (name, sprp->spr_name) == 0) {
- /* spr is a 10 bit field whose interpretation has the high and low
- five-bit fields reversed from their encoding in the operand */
- i = htonl (sprp->spr_val);
- spr = ((i >> 5) & 0x1f) | ((i & 0x1f) << 5);
-
- return spr;
- }
- }
-
- return 0;
-} /* spr_value */
-
-
-
-/*======================================================================
- * Convert the 'tbr' operand from its numeric value to its symbolic name.
- *
- * Arguments:
- * value The value of the 'tbr' operand. This value should
- * be unmodified from its encoding in the instruction.
- * the split-field computations will be performed
- * here before the switch.
- *
- * Returns the address of a character array containing the name of the
- * time base register defined by the 'value' parameter, or the address
- * of a character array containing "???" if no match was found.
- */
-
-char *tbr_name (int value)
-{
- unsigned short tbr;
-
- /*------------------------------------------------------------*/
-
- /* tbr is a 10 bit field whose interpretation has the high and low
- five-bit fields reversed from their encoding in the operand */
-
- tbr = ((value >> 5) & 0x1f) | ((value & 0x1f) << 5);
-
- if (tbr == 268)
- return "TBL";
-
- else if (tbr == 269)
- return "TBU";
-
-
- return "???";
-} /* tbr_name */
-
-
-
-/*======================================================================
- * Convert the 'tbr' operand from its symbolic name to its numeric value.
- *
- * Arguments:
- * name The symbolic name of the 'tbr' operand. The
- * split-field encoding will be done by this routine.
- *
- * Returns the numeric value for the spr appropriate for encoding a machine
- * instruction. Returns 0 if unable to find the TBR.
- */
-
-int tbr_value (char *name)
-{
- int tbr;
- int val;
-
- /*------------------------------------------------------------*/
-
- if (!name || !*name)
- return 0;
-
- downstring (name);
-
- if (isdigit ((int) name[0])) {
- val = read_number (name);
-
- if (val != 268 && val != 269)
- return 0;
- } else if (strcmp (name, "tbl") == 0)
- val = 268;
- else if (strcmp (name, "tbu") == 0)
- val = 269;
- else
- return 0;
-
- /* tbr is a 10 bit field whose interpretation has the high and low
- five-bit fields reversed from their encoding in the operand */
-
- val = htonl (val);
- tbr = ((val >> 5) & 0x1f) | ((val & 0x1f) << 5);
- return tbr;
-} /* tbr_name */
-
-
-
-/*======================================================================
- * The next several functions (handle_xxx) are the routines that handle
- * disassembling the opcodes with simplified mnemonics.
- *
- * Arguments:
- * ctx A pointer to the disassembler context record.
- *
- * Returns TRUE if the simpler form was printed or FALSE if it was not.
- */
-
-int handle_bc (struct ppc_ctx *ctx)
-{
- unsigned long bo;
- unsigned long bi;
- static struct opcode blt = { B_OPCODE (16, 0, 0), B_MASK, {O_BD, 0},
- 0, "blt", H_RELATIVE
- };
- static struct opcode bne =
- { B_OPCODE (16, 0, 0), B_MASK, {O_cr2, O_BD, 0},
- 0, "bne", H_RELATIVE
- };
- static struct opcode bdnz = { B_OPCODE (16, 0, 0), B_MASK, {O_BD, 0},
- 0, "bdnz", H_RELATIVE
- };
-
- /*------------------------------------------------------------*/
-
- if (get_operand_value (ctx->op, ctx->instr, O_BO, &bo) == FALSE)
- return FALSE;
-
- if (get_operand_value (ctx->op, ctx->instr, O_BI, &bi) == FALSE)
- return FALSE;
-
- if ((bo == 12) && (bi == 0)) {
- ctx->op = &blt;
- sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
- ctx->datalen += 8;
- print_operands (ctx);
- return TRUE;
- } else if ((bo == 4) && (bi == 10)) {
- ctx->op = =⃥
- sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
- ctx->datalen += 8;
- print_operands (ctx);
- return TRUE;
- } else if ((bo == 16) && (bi == 0)) {
- ctx->op = &bdnz;
- sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
- ctx->datalen += 8;
- print_operands (ctx);
- return TRUE;
- }
-
- return FALSE;
-} /* handle_blt */
-
-
-
-/*======================================================================
- * Outputs source line information for the disassembler. This should
- * be modified in the future to lookup the actual line of source code
- * from the file, but for now this will do.
- *
- * Arguments:
- * filename The address of a character array containing the
- * absolute path and file name of the source file.
- *
- * funcname The address of a character array containing the
- * name of the function (not C++ demangled (yet))
- * to which this code belongs.
- *
- * line_no An integer specifying the source line number that
- * generated this code.
- *
- * pfunc The address of a function to call to print the output.
- *
- *
- * Returns TRUE if it was able to output the line info, or false if it was
- * not.
- */
-
-int print_source_line (char *filename, char *funcname,
- int line_no, int (*pfunc) (const char *))
-{
- char out_buf[256];
-
- /*------------------------------------------------------------*/
-
- (*pfunc) (""); /* output a newline */
- sprintf (out_buf, "%s %s(): line %d", filename, funcname, line_no);
- (*pfunc) (out_buf);
-
- return TRUE;
-} /* print_source_line */
-
-
-
-/*======================================================================
- * Entry point for the PPC assembler.
- *
- * Arguments:
- * asm_buf An array of characters containing the assembly opcode
- * and operands to convert to a POWERPC machine
- * instruction.
- *
- * Returns the machine instruction or zero.
- */
-
-unsigned long asmppc (unsigned long memaddr, char *asm_buf, int *err)
-{
- struct opcode *opc;
- struct operand *oper[MAX_OPERANDS];
- unsigned long instr;
- unsigned long param;
- char *ptr = asm_buf;
- char scratch[20];
- int i;
- int w_operands = 0; /* wanted # of operands */
- int n_operands = 0; /* # of operands read */
- int asm_debug = 0;
-
- /*------------------------------------------------------------*/
-
- if (err)
- *err = 0;
-
- if (get_word (&ptr, scratch) == 0)
- return 0;
-
- /* Lookup the opcode structure based on the opcode name */
- if ((opc = find_opcode_by_name (scratch)) == (struct opcode *) 0) {
- if (err)
- *err = E_ASM_BAD_OPCODE;
- return 0;
- }
-
- if (asm_debug) {
- printf ("asmppc: Opcode = \"%s\"\n", opc->name);
- }
-
- for (i = 0; i < 8; ++i) {
- if (opc->fields[i] == 0)
- break;
- ++w_operands;
- }
-
- if (asm_debug) {
- printf ("asmppc: Expecting %d operands\n", w_operands);
- }
-
- instr = opc->opcode;
-
- /* read each operand */
- while (n_operands < w_operands) {
-
- oper[n_operands] = &operands[opc->fields[n_operands] - 1];
-
- if (oper[n_operands]->hint & OH_SILENT) {
- /* Skip silent operands, they are covered in opc->opcode */
-
- if (asm_debug) {
- printf ("asmppc: Operand %d \"%s\" SILENT\n", n_operands,
- oper[n_operands]->name);
- }
-
- ++n_operands;
- continue;
- }
-
- if (get_word (&ptr, scratch) == 0)
- break;
-
- if (asm_debug) {
- printf ("asmppc: Operand %d \"%s\" : \"%s\"\n", n_operands,
- oper[n_operands]->name, scratch);
- }
-
- if ((param = parse_operand (memaddr, opc, oper[n_operands],
- scratch, err)) == -1)
- return 0;
-
- instr |= param;
- ++n_operands;
- }
-
- if (n_operands < w_operands) {
- if (err)
- *err = E_ASM_NUM_OPERANDS;
- return 0;
- }
-
- if (asm_debug) {
- printf ("asmppc: Instruction = 0x%08lx\n", instr);
- }
-
- return instr;
-} /* asmppc */
-
-
-
-/*======================================================================
- * Called by the assembler to interpret a single operand
- *
- * Arguments:
- * ctx A pointer to the disassembler context record.
- *
- * Returns 0 if the operand is ok, or -1 if it is bad.
- */
-
-int parse_operand (unsigned long memaddr, struct opcode *opc,
- struct operand *oper, char *txt, int *err)
-{
- long data;
- long mask;
- int is_neg = 0;
-
- /*------------------------------------------------------------*/
-
- mask = (1 << oper->bits) - 1;
-
- if (oper->hint & OH_ADDR) {
- data = read_number (txt);
-
- if (opc->hint & H_RELATIVE)
- data = data - memaddr;
-
- if (data < 0)
- is_neg = 1;
-
- data >>= 2;
- data &= (mask >> 1);
-
- if (is_neg)
- data |= 1 << (oper->bits - 1);
- }
-
- else if (oper->hint & OH_REG) {
- if (txt[0] == 'r' || txt[0] == 'R')
- txt++;
- else if (txt[0] == '%' && (txt[1] == 'r' || txt[1] == 'R'))
- txt += 2;
-
- data = read_number (txt);
- if (data > 31) {
- if (err)
- *err = E_ASM_BAD_REGISTER;
- return -1;
- }
-
- data = htonl (data);
- }
-
- else if (oper->hint & OH_SPR) {
- if ((data = spr_value (txt)) == 0) {
- if (err)
- *err = E_ASM_BAD_SPR;
- return -1;
- }
- }
-
- else if (oper->hint & OH_TBR) {
- if ((data = tbr_value (txt)) == 0) {
- if (err)
- *err = E_ASM_BAD_TBR;
- return -1;
- }
- }
-
- else {
- data = htonl (read_number (txt));
- }
-
- return (data & mask) << oper->shift;
-} /* parse_operand */
-
-
-char *asm_error_str (int err)
-{
- switch (err) {
- case E_ASM_BAD_OPCODE:
- return "Bad opcode";
- case E_ASM_NUM_OPERANDS:
- return "Bad number of operands";
- case E_ASM_BAD_REGISTER:
- return "Bad register number";
- case E_ASM_BAD_SPR:
- return "Bad SPR name or number";
- case E_ASM_BAD_TBR:
- return "Bad TBR name or number";
- }
-
- return "";
-} /* asm_error_str */
-
-
-
-/*======================================================================
- * Copy a word from one buffer to another, ignores leading white spaces.
- *
- * Arguments:
- * src The address of a character pointer to the
- * source buffer.
- * dest A pointer to a character buffer to write the word
- * into.
- *
- * Returns the number of non-white space characters copied, or zero.
- */
-
-int get_word (char **src, char *dest)
-{
- char *ptr = *src;
- int nchars = 0;
-
- /*------------------------------------------------------------*/
-
- /* Eat white spaces */
- while (*ptr && isblank (*ptr))
- ptr++;
-
- if (*ptr == 0) {
- *src = ptr;
- return 0;
- }
-
- /* Find the text of the word */
- while (*ptr && !isblank (*ptr) && (*ptr != ','))
- dest[nchars++] = *ptr++;
- ptr = (*ptr == ',') ? ptr + 1 : ptr;
- dest[nchars] = 0;
-
- *src = ptr;
- return nchars;
-} /* get_word */
-
-
-
-/*======================================================================
- * Convert a numeric string to a number, be aware of base notations.
- *
- * Arguments:
- * txt The numeric string.
- *
- * Returns the converted numeric value.
- */
-
-long read_number (char *txt)
-{
- long val;
- int is_neg = 0;
-
- /*------------------------------------------------------------*/
-
- if (txt == 0 || *txt == 0)
- return 0;
-
- if (*txt == '-') {
- is_neg = 1;
- ++txt;
- }
-
- if (txt[0] == '0' && (txt[1] == 'x' || txt[1] == 'X')) /* hex */
- val = simple_strtoul (&txt[2], NULL, 16);
- else /* decimal */
- val = simple_strtoul (txt, NULL, 10);
-
- if (is_neg)
- val = -val;
-
- return val;
-} /* read_number */
-
-
-int downstring (char *s)
-{
- if (!s || !*s)
- return 0;
-
- while (*s) {
- if (isupper (*s))
- *s = tolower (*s);
- s++;
- }
-
- return 0;
-} /* downstring */
-
-
-
-/*======================================================================
- * Examines the instruction at the current address and determines the
- * next address to be executed. This will take into account branches
- * of different types so that a "step" and "next" operations can be
- * supported.
- *
- * Arguments:
- * nextaddr The address (to be filled in) of the next
- * instruction to execute. This will only be a valid
- * address if TRUE is returned.
- *
- * step_over A flag indicating how to compute addresses for
- * branch statements:
- * TRUE = Step over the branch (next)
- * FALSE = step into the branch (step)
- *
- * Returns TRUE if it was able to compute the address. Returns FALSE if
- * it has a problem reading the current instruction or one of the registers.
- */
-
-int find_next_address (unsigned char *nextaddr, int step_over,
- struct pt_regs *regs)
-{
- unsigned long pc; /* SRR0 register from PPC */
- unsigned long ctr; /* CTR register from PPC */
- unsigned long cr; /* CR register from PPC */
- unsigned long lr; /* LR register from PPC */
- unsigned long instr; /* instruction at SRR0 */
- unsigned long next; /* computed instruction for 'next' */
- unsigned long step; /* computed instruction for 'step' */
- unsigned long addr = 0; /* target address operand */
- unsigned long aa = 0; /* AA operand */
- unsigned long lk = 0; /* LK operand */
- unsigned long bo = 0; /* BO operand */
- unsigned long bi = 0; /* BI operand */
- struct opcode *op = 0; /* opcode structure for 'instr' */
- int ctr_ok = 0;
- int cond_ok = 0;
- int conditional = 0;
- int branch = 0;
-
- /*------------------------------------------------------------*/
-
- if (nextaddr == 0 || regs == 0) {
- printf ("find_next_address: bad args");
- return FALSE;
- }
-
- pc = regs->nip & 0xfffffffc;
- instr = INSTRUCTION (pc);
-
- if ((op = find_opcode (instr)) == (struct opcode *) 0) {
- printf ("find_next_address: can't parse opcode 0x%lx", instr);
- return FALSE;
- }
-
- ctr = regs->ctr;
- cr = regs->ccr;
- lr = regs->link;
-
- switch (op->opcode) {
- case B_OPCODE (16, 0, 0): /* bc */
- case B_OPCODE (16, 0, 1): /* bcl */
- case B_OPCODE (16, 1, 0): /* bca */
- case B_OPCODE (16, 1, 1): /* bcla */
- if (!get_operand_value (op, instr, O_BD, &addr) ||
- !get_operand_value (op, instr, O_BO, &bo) ||
- !get_operand_value (op, instr, O_BI, &bi) ||
- !get_operand_value (op, instr, O_AA, &aa) ||
- !get_operand_value (op, instr, O_LK, &lk))
- return FALSE;
-
- if ((addr & (1 << 13)) != 0)
- addr = addr - (1 << 14);
- addr <<= 2;
- conditional = 1;
- branch = 1;
- break;
-
- case I_OPCODE (18, 0, 0): /* b */
- case I_OPCODE (18, 0, 1): /* bl */
- case I_OPCODE (18, 1, 0): /* ba */
- case I_OPCODE (18, 1, 1): /* bla */
- if (!get_operand_value (op, instr, O_LI, &addr) ||
- !get_operand_value (op, instr, O_AA, &aa) ||
- !get_operand_value (op, instr, O_LK, &lk))
- return FALSE;
-
- if ((addr & (1 << 23)) != 0)
- addr = addr - (1 << 24);
- addr <<= 2;
- conditional = 0;
- branch = 1;
- break;
-
- case XL_OPCODE (19, 528, 0): /* bcctr */
- case XL_OPCODE (19, 528, 1): /* bcctrl */
- if (!get_operand_value (op, instr, O_BO, &bo) ||
- !get_operand_value (op, instr, O_BI, &bi) ||
- !get_operand_value (op, instr, O_LK, &lk))
- return FALSE;
-
- addr = ctr;
- aa = 1;
- conditional = 1;
- branch = 1;
- break;
-
- case XL_OPCODE (19, 16, 0): /* bclr */
- case XL_OPCODE (19, 16, 1): /* bclrl */
- if (!get_operand_value (op, instr, O_BO, &bo) ||
- !get_operand_value (op, instr, O_BI, &bi) ||
- !get_operand_value (op, instr, O_LK, &lk))
- return FALSE;
-
- addr = lr;
- aa = 1;
- conditional = 1;
- branch = 1;
- break;
-
- default:
- conditional = 0;
- branch = 0;
- break;
- }
-
- if (conditional) {
- switch ((bo & 0x1e) >> 1) {
- case 0: /* 0000y */
- if (--ctr != 0)
- ctr_ok = 1;
-
- cond_ok = !(cr & (1 << (31 - bi)));
- break;
-
- case 1: /* 0001y */
- if (--ctr == 0)
- ctr_ok = 1;
-
- cond_ok = !(cr & (1 << (31 - bi)));
- break;
-
- case 2: /* 001zy */
- ctr_ok = 1;
- cond_ok = !(cr & (1 << (31 - bi)));
- break;
-
- case 4: /* 0100y */
- if (--ctr != 0)
- ctr_ok = 1;
-
- cond_ok = cr & (1 << (31 - bi));
- break;
-
- case 5: /* 0101y */
- if (--ctr == 0)
- ctr_ok = 1;
-
- cond_ok = cr & (1 << (31 - bi));
- break;
-
- case 6: /* 011zy */
- ctr_ok = 1;
- cond_ok = cr & (1 << (31 - bi));
- break;
-
- case 8: /* 1z00y */
- if (--ctr != 0)
- ctr_ok = cond_ok = 1;
- break;
-
- case 9: /* 1z01y */
- if (--ctr == 0)
- ctr_ok = cond_ok = 1;
- break;
-
- case 10: /* 1z1zz */
- ctr_ok = cond_ok = 1;
- break;
- }
- }
-
- if (branch && (!conditional || (ctr_ok && cond_ok))) {
- if (aa)
- step = addr;
- else
- step = addr + pc;
-
- if (lk)
- next = pc + 4;
- else
- next = step;
- } else {
- step = next = pc + 4;
- }
-
- if (step_over == TRUE)
- *(unsigned long *) nextaddr = next;
- else
- *(unsigned long *) nextaddr = step;
-
- return TRUE;
-} /* find_next_address */
-
-
-/*
- * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are freely
- * permitted provided that the above copyright notice and this
- * paragraph and the following disclaimer are duplicated in all
- * such forms.
- *
- * This software is provided "AS IS" and without any express or
- * implied warranties, including, without limitation, the implied
- * warranties of merchantability and fitness for a particular
- * purpose.
- */
+/* $Id: bedbug.c,v 1.1.1.1 2009/03/25 22:21:56 kenagy Exp $ */
+
+#include <common.h>
+
+#include <linux/ctype.h>
+#include <bedbug/bedbug.h>
+#include <bedbug/ppc.h>
+#include <bedbug/regs.h>
+#include <bedbug/tables.h>
+
+#define Elf32_Word unsigned long
+
+/* USE_SOURCE_CODE enables some symbolic debugging functions of this
+ code. This is only useful if the program will have access to the
+ source code for the binary being examined.
+*/
+
+/* #define USE_SOURCE_CODE 1 */
+
+#ifdef USE_SOURCE_CODE
+extern int line_info_from_addr __P ((Elf32_Word, char *, char *, int *));
+extern struct symreflist *symByAddr;
+extern char *symbol_name_from_addr __P ((Elf32_Word, int, int *));
+#endif /* USE_SOURCE_CODE */
+
+int print_operands __P ((struct ppc_ctx *));
+int get_operand_value __P ((struct opcode *, unsigned long,
+ enum OP_FIELD, unsigned long *));
+struct opcode *find_opcode __P ((unsigned long));
+struct opcode *find_opcode_by_name __P ((char *));
+char *spr_name __P ((int));
+int spr_value __P ((char *));
+char *tbr_name __P ((int));
+int tbr_value __P ((char *));
+int parse_operand __P ((unsigned long, struct opcode *,
+ struct operand *, char *, int *));
+int get_word __P ((char **, char *));
+long read_number __P ((char *));
+int downstring __P ((char *));
+
+
+/*======================================================================
+ * Entry point for the PPC disassembler.
+ *
+ * Arguments:
+ * memaddr The address to start disassembling from.
+ *
+ * virtual If this value is non-zero, then this will be
+ * used as the base address for the output and
+ * symbol lookups. If this value is zero then
+ * memaddr is used as the absolute address.
+ *
+ * num_instr The number of instructions to disassemble. Since
+ * each instruction is 32 bits long, this can be
+ * computed if you know the total size of the region.
+ *
+ * pfunc The address of a function that is called to print
+ * each line of output. The function should take a
+ * single character pointer as its parameters a la puts.
+ *
+ * flags Sets options for the output. This is a
+ * bitwise-inclusive-OR of the following
+ * values. Note that only one of the radix
+ * options may be set.
+ *
+ * F_RADOCTAL - output radix is unsigned base 8.
+ * F_RADUDECIMAL - output radix is unsigned base 10.
+ * F_RADSDECIMAL - output radix is signed base 10.
+ * F_RADHEX - output radix is unsigned base 16.
+ * F_SIMPLE - use simplified mnemonics.
+ * F_SYMBOL - lookup symbols for addresses.
+ * F_INSTR - output raw instruction.
+ * F_LINENO - show line # info if available.
+ *
+ * Returns TRUE if the area was successfully disassembled or FALSE if
+ * a problem was encountered with accessing the memory.
+ */
+
+int disppc (unsigned char *memaddr, unsigned char *virtual, int num_instr,
+ int (*pfunc) (const char *), unsigned long flags)
+{
+ int i;
+ struct ppc_ctx ctx;
+
+#ifdef USE_SOURCE_CODE
+ int line_no = 0;
+ int last_line_no = 0;
+ char funcname[128] = { 0 };
+ char filename[256] = { 0 };
+ char last_funcname[128] = { 0 };
+ int symoffset;
+ char *symname;
+ char *cursym = (char *) 0;
+#endif /* USE_SOURCE_CODE */
+ /*------------------------------------------------------------*/
+
+ ctx.flags = flags;
+ ctx.virtual = virtual;
+
+ /* Figure out the output radix before we go any further */
+
+ if (ctx.flags & F_RADOCTAL) {
+ /* Unsigned octal output */
+ strcpy (ctx.radix_fmt, "O%o");
+ } else if (ctx.flags & F_RADUDECIMAL) {
+ /* Unsigned decimal output */
+ strcpy (ctx.radix_fmt, "%u");
+ } else if (ctx.flags & F_RADSDECIMAL) {
+ /* Signed decimal output */
+ strcpy (ctx.radix_fmt, "%d");
+ } else {
+ /* Unsigned hex output */
+ strcpy (ctx.radix_fmt, "0x%x");
+ }
+
+ if (ctx.virtual == 0) {
+ ctx.virtual = memaddr;
+ }
+#ifdef USE_SOURCE_CODE
+ if (ctx.flags & F_SYMBOL) {
+ if (symByAddr == 0) /* no symbols loaded */
+ ctx.flags &= ~F_SYMBOL;
+ else {
+ cursym = (char *) 0;
+ symoffset = 0;
+ }
+ }
+#endif /* USE_SOURCE_CODE */
+
+ /* format each line as "XXXXXXXX: <symbol> IIIIIIII disassembly" where,
+ XXXXXXXX is the memory address in hex,
+ <symbol> is the symbolic location if F_SYMBOL is set.
+ IIIIIIII is the raw machine code in hex if F_INSTR is set,
+ and disassembly is the disassembled machine code with numbers
+ formatted according to the 'radix' parameter */
+
+ for (i = 0; i < num_instr; ++i, memaddr += 4, ctx.virtual += 4) {
+#ifdef USE_SOURCE_CODE
+ if (ctx.flags & F_LINENO) {
+ if ((line_info_from_addr ((Elf32_Word) ctx.virtual, filename,
+ funcname, &line_no) == TRUE) &&
+ ((line_no != last_line_no) ||
+ (strcmp (last_funcname, funcname) != 0))) {
+ print_source_line (filename, funcname, line_no, pfunc);
+ }
+ last_line_no = line_no;
+ strcpy (last_funcname, funcname);
+ }
+#endif /* USE_SOURCE_CODE */
+
+ sprintf (ctx.data, "%08lx: ", (unsigned long) ctx.virtual);
+ ctx.datalen = 10;
+
+#ifdef USE_SOURCE_CODE
+ if (ctx.flags & F_SYMBOL) {
+ if ((symname =
+ symbol_name_from_addr ((Elf32_Word) ctx.virtual,
+ TRUE, 0)) != 0) {
+ cursym = symname;
+ symoffset = 0;
+ } else {
+ if ((cursym == 0) &&
+ ((symname =
+ symbol_name_from_addr ((Elf32_Word) ctx.virtual,
+ FALSE, &symoffset)) != 0)) {
+ cursym = symname;
+ } else {
+ symoffset += 4;
+ }
+ }
+
+ if (cursym != 0) {
+ sprintf (&ctx.data[ctx.datalen], "<%s+", cursym);
+ ctx.datalen = strlen (ctx.data);
+ sprintf (&ctx.data[ctx.datalen], ctx.radix_fmt, symoffset);
+ strcat (ctx.data, ">");
+ ctx.datalen = strlen (ctx.data);
+ }
+ }
+#endif /* USE_SOURCE_CODE */
+
+ ctx.instr = INSTRUCTION (memaddr);
+
+ if (ctx.flags & F_INSTR) {
+ /* Find the opcode structure for this opcode. If one is not found
+ then it must be an illegal instruction */
+ sprintf (&ctx.data[ctx.datalen],
+ " %02lx %02lx %02lx %02lx ",
+ ((ctx.instr >> 24) & 0xff),
+ ((ctx.instr >> 16) & 0xff), ((ctx.instr >> 8) & 0xff),
+ (ctx.instr & 0xff));
+ ctx.datalen += 18;
+ } else {
+ strcat (ctx.data, " ");
+ ctx.datalen += 3;
+ }
+
+ if ((ctx.op = find_opcode (ctx.instr)) == 0) {
+ /* Illegal Opcode */
+ sprintf (&ctx.data[ctx.datalen], " .long 0x%08lx",
+ ctx.instr);
+ ctx.datalen += 24;
+ (*pfunc) (ctx.data);
+ continue;
+ }
+
+ if (((ctx.flags & F_SIMPLE) == 0) ||
+ (ctx.op->hfunc == 0) || ((*ctx.op->hfunc) (&ctx) == FALSE)) {
+ sprintf (&ctx.data[ctx.datalen], "%-7s ", ctx.op->name);
+ ctx.datalen += 8;
+ print_operands (&ctx);
+ }
+
+ (*pfunc) (ctx.data);
+ }
+
+ return TRUE;
+} /* disppc */
+
+
+
+/*======================================================================
+ * Called by the disassembler to print the operands for an instruction.
+ *
+ * Arguments:
+ * ctx A pointer to the disassembler context record.
+ *
+ * always returns 0.
+ */
+
+int print_operands (struct ppc_ctx *ctx)
+{
+ int open_parens = 0;
+ int field;
+ unsigned long operand;
+ struct operand *opr;
+
+#ifdef USE_SOURCE_CODE
+ char *symname;
+ int offset;
+#endif /* USE_SOURCE_CODE */
+ /*------------------------------------------------------------*/
+
+ /* Walk through the operands and list each in order */
+ for (field = 0; ctx->op->fields[field] != 0; ++field) {
+ if (ctx->op->fields[field] > n_operands) {
+ continue; /* bad operand ?! */
+ }
+
+ opr = &operands[ctx->op->fields[field] - 1];
+
+ if (opr->hint & OH_SILENT) {
+ continue;
+ }
+
+ if ((field > 0) && !open_parens) {
+ strcat (ctx->data, ",");
+ ctx->datalen++;
+ }
+
+ operand = (ctx->instr >> opr->shift) & ((1 << opr->bits) - 1);
+
+ if (opr->hint & OH_ADDR) {
+ if ((operand & (1 << (opr->bits - 1))) != 0) {
+ operand = operand - (1 << opr->bits);
+ }
+
+ if (ctx->op->hint & H_RELATIVE)
+ operand = (operand << 2) + (unsigned long) ctx->virtual;
+ else
+ operand = (operand << 2);
+
+
+ sprintf (&ctx->data[ctx->datalen], "0x%lx", operand);
+ ctx->datalen = strlen (ctx->data);
+
+#ifdef USE_SOURCE_CODE
+ if ((ctx->flags & F_SYMBOL) &&
+ ((symname =
+ symbol_name_from_addr (operand, 0, &offset)) != 0)) {
+ sprintf (&ctx->data[ctx->datalen], " <%s", symname);
+ if (offset != 0) {
+ strcat (ctx->data, "+");
+ ctx->datalen = strlen (ctx->data);
+ sprintf (&ctx->data[ctx->datalen], ctx->radix_fmt,
+ offset);
+ }
+ strcat (ctx->data, ">");
+ }
+#endif /* USE_SOURCE_CODE */
+ }
+
+ else if (opr->hint & OH_REG) {
+ if ((operand == 0) &&
+ (opr->field == O_rA) && (ctx->op->hint & H_RA0_IS_0)) {
+ strcat (ctx->data, "0");
+ } else {
+ sprintf (&ctx->data[ctx->datalen], "r%d", (short) operand);
+ }
+
+ if (open_parens) {
+ strcat (ctx->data, ")");
+ open_parens--;
+ }
+ }
+
+ else if (opr->hint & OH_SPR) {
+ strcat (ctx->data, spr_name (operand));
+ }
+
+ else if (opr->hint & OH_TBR) {
+ strcat (ctx->data, tbr_name (operand));
+ }
+
+ else if (opr->hint & OH_LITERAL) {
+ switch (opr->field) {
+ case O_cr2:
+ strcat (ctx->data, "cr2");
+ ctx->datalen += 3;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ else {
+ sprintf (&ctx->data[ctx->datalen], ctx->radix_fmt,
+ (unsigned short) operand);
+
+ if (open_parens) {
+ strcat (ctx->data, ")");
+ open_parens--;
+ }
+
+ else if (opr->hint & OH_OFFSET) {
+ strcat (ctx->data, "(");
+ open_parens++;
+ }
+ }
+
+ ctx->datalen = strlen (ctx->data);
+ }
+
+ return 0;
+} /* print_operands */
+
+
+
+/*======================================================================
+ * Called to get the value of an arbitrary operand with in an instruction.
+ *
+ * Arguments:
+ * op The pointer to the opcode structure to which
+ * the operands belong.
+ *
+ * instr The instruction (32 bits) containing the opcode
+ * and the operands to print. By the time that
+ * this routine is called the operand has already
+ * been added to the output.
+ *
+ * field The field (operand) to get the value of.
+ *
+ * value The address of an unsigned long to be filled in
+ * with the value of the operand if it is found. This
+ * will only be filled in if the function returns
+ * TRUE. This may be passed as 0 if the value is
+ * not required.
+ *
+ * Returns TRUE if the operand was found or FALSE if it was not.
+ */
+
+int get_operand_value (struct opcode *op, unsigned long instr,
+ enum OP_FIELD field, unsigned long *value)
+{
+ int i;
+ struct operand *opr;
+
+ /*------------------------------------------------------------*/
+
+ if (field > n_operands) {
+ return FALSE; /* bad operand ?! */
+ }
+
+ /* Walk through the operands and list each in order */
+ for (i = 0; op->fields[i] != 0; ++i) {
+ if (op->fields[i] != field) {
+ continue;
+ }
+
+ opr = &operands[op->fields[i] - 1];
+
+ if (value) {
+ *value = (instr >> opr->shift) & ((1 << opr->bits) - 1);
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+} /* operand_value */
+
+
+
+/*======================================================================
+ * Called by the disassembler to match an opcode value to an opcode structure.
+ *
+ * Arguments:
+ * instr The instruction (32 bits) to match. This value
+ * may contain operand values as well as the opcode
+ * since they will be masked out anyway for this
+ * search.
+ *
+ * Returns the address of an opcode struct (from the opcode table) if the
+ * operand successfully matched an entry, or 0 if no match was found.
+ */
+
+struct opcode *find_opcode (unsigned long instr)
+{
+ struct opcode *ptr;
+ int top = 0;
+ int bottom = n_opcodes - 1;
+ int idx;
+
+ /*------------------------------------------------------------*/
+
+ while (top <= bottom) {
+ idx = (top + bottom) >> 1;
+ ptr = &opcodes[idx];
+
+ if ((instr & ptr->mask) < ptr->opcode) {
+ bottom = idx - 1;
+ } else if ((instr & ptr->mask) > ptr->opcode) {
+ top = idx + 1;
+ } else {
+ return ptr;
+ }
+ }
+
+ return (struct opcode *) 0;
+} /* find_opcode */
+
+
+
+/*======================================================================
+ * Called by the assembler to match an opcode name to an opcode structure.
+ *
+ * Arguments:
+ * name The text name of the opcode, e.g. "b", "mtspr", etc.
+ *
+ * The opcodes are sorted numerically by their instruction binary code
+ * so a search for the name cannot use the binary search used by the
+ * other find routine.
+ *
+ * Returns the address of an opcode struct (from the opcode table) if the
+ * name successfully matched an entry, or 0 if no match was found.
+ */
+
+struct opcode *find_opcode_by_name (char *name)
+{
+ int idx;
+
+ /*------------------------------------------------------------*/
+
+ downstring (name);
+
+ for (idx = 0; idx < n_opcodes; ++idx) {
+ if (!strcmp (name, opcodes[idx].name))
+ return &opcodes[idx];
+ }
+
+ return (struct opcode *) 0;
+} /* find_opcode_by_name */
+
+
+
+/*======================================================================
+ * Convert the 'spr' operand from its numeric value to its symbolic name.
+ *
+ * Arguments:
+ * value The value of the 'spr' operand. This value should
+ * be unmodified from its encoding in the instruction.
+ * the split-field computations will be performed
+ * here before the switch.
+ *
+ * Returns the address of a character array containing the name of the
+ * special purpose register defined by the 'value' parameter, or the
+ * address of a character array containing "???" if no match was found.
+ */
+
+char *spr_name (int value)
+{
+ unsigned short spr;
+ static char other[10];
+ int i;
+
+ /*------------------------------------------------------------*/
+
+ /* spr is a 10 bit field whose interpretation has the high and low
+ five-bit fields reversed from their encoding in the operand */
+
+ spr = ((value >> 5) & 0x1f) | ((value & 0x1f) << 5);
+
+ for (i = 0; i < n_sprs; ++i) {
+ if (spr == spr_map[i].spr_val)
+ return spr_map[i].spr_name;
+ }
+
+ sprintf (other, "%d", spr);
+ return other;
+} /* spr_name */
+
+
+
+/*======================================================================
+ * Convert the 'spr' operand from its symbolic name to its numeric value
+ *
+ * Arguments:
+ * name The symbolic name of the 'spr' operand. The
+ * split-field encoding will be done by this routine.
+ * NOTE: name can be a number.
+ *
+ * Returns the numeric value for the spr appropriate for encoding a machine
+ * instruction. Returns 0 if unable to find the SPR.
+ */
+
+int spr_value (char *name)
+{
+ struct spr_info *sprp;
+ int spr;
+ int i;
+
+ /*------------------------------------------------------------*/
+
+ if (!name || !*name)
+ return 0;
+
+ if (isdigit ((int) name[0])) {
+ i = htonl (read_number (name));
+ spr = ((i >> 5) & 0x1f) | ((i & 0x1f) << 5);
+ return spr;
+ }
+
+ downstring (name);
+
+ for (i = 0; i < n_sprs; ++i) {
+ sprp = &spr_map[i];
+
+ if (strcmp (name, sprp->spr_name) == 0) {
+ /* spr is a 10 bit field whose interpretation has the high and low
+ five-bit fields reversed from their encoding in the operand */
+ i = htonl (sprp->spr_val);
+ spr = ((i >> 5) & 0x1f) | ((i & 0x1f) << 5);
+
+ return spr;
+ }
+ }
+
+ return 0;
+} /* spr_value */
+
+
+
+/*======================================================================
+ * Convert the 'tbr' operand from its numeric value to its symbolic name.
+ *
+ * Arguments:
+ * value The value of the 'tbr' operand. This value should
+ * be unmodified from its encoding in the instruction.
+ * the split-field computations will be performed
+ * here before the switch.
+ *
+ * Returns the address of a character array containing the name of the
+ * time base register defined by the 'value' parameter, or the address
+ * of a character array containing "???" if no match was found.
+ */
+
+char *tbr_name (int value)
+{
+ unsigned short tbr;
+
+ /*------------------------------------------------------------*/
+
+ /* tbr is a 10 bit field whose interpretation has the high and low
+ five-bit fields reversed from their encoding in the operand */
+
+ tbr = ((value >> 5) & 0x1f) | ((value & 0x1f) << 5);
+
+ if (tbr == 268)
+ return "TBL";
+
+ else if (tbr == 269)
+ return "TBU";
+
+
+ return "???";
+} /* tbr_name */
+
+
+
+/*======================================================================
+ * Convert the 'tbr' operand from its symbolic name to its numeric value.
+ *
+ * Arguments:
+ * name The symbolic name of the 'tbr' operand. The
+ * split-field encoding will be done by this routine.
+ *
+ * Returns the numeric value for the spr appropriate for encoding a machine
+ * instruction. Returns 0 if unable to find the TBR.
+ */
+
+int tbr_value (char *name)
+{
+ int tbr;
+ int val;
+
+ /*------------------------------------------------------------*/
+
+ if (!name || !*name)
+ return 0;
+
+ downstring (name);
+
+ if (isdigit ((int) name[0])) {
+ val = read_number (name);
+
+ if (val != 268 && val != 269)
+ return 0;
+ } else if (strcmp (name, "tbl") == 0)
+ val = 268;
+ else if (strcmp (name, "tbu") == 0)
+ val = 269;
+ else
+ return 0;
+
+ /* tbr is a 10 bit field whose interpretation has the high and low
+ five-bit fields reversed from their encoding in the operand */
+
+ val = htonl (val);
+ tbr = ((val >> 5) & 0x1f) | ((val & 0x1f) << 5);
+ return tbr;
+} /* tbr_name */
+
+
+
+/*======================================================================
+ * The next several functions (handle_xxx) are the routines that handle
+ * disassembling the opcodes with simplified mnemonics.
+ *
+ * Arguments:
+ * ctx A pointer to the disassembler context record.
+ *
+ * Returns TRUE if the simpler form was printed or FALSE if it was not.
+ */
+
+int handle_bc (struct ppc_ctx *ctx)
+{
+ unsigned long bo;
+ unsigned long bi;
+ static struct opcode blt = { B_OPCODE (16, 0, 0), B_MASK, {O_BD, 0},
+ 0, "blt", H_RELATIVE
+ };
+ static struct opcode bne =
+ { B_OPCODE (16, 0, 0), B_MASK, {O_cr2, O_BD, 0},
+ 0, "bne", H_RELATIVE
+ };
+ static struct opcode bdnz = { B_OPCODE (16, 0, 0), B_MASK, {O_BD, 0},
+ 0, "bdnz", H_RELATIVE
+ };
+
+ /*------------------------------------------------------------*/
+
+ if (get_operand_value (ctx->op, ctx->instr, O_BO, &bo) == FALSE)
+ return FALSE;
+
+ if (get_operand_value (ctx->op, ctx->instr, O_BI, &bi) == FALSE)
+ return FALSE;
+
+ if ((bo == 12) && (bi == 0)) {
+ ctx->op = &blt;
+ sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
+ ctx->datalen += 8;
+ print_operands (ctx);
+ return TRUE;
+ } else if ((bo == 4) && (bi == 10)) {
+ ctx->op = =⃥
+ sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
+ ctx->datalen += 8;
+ print_operands (ctx);
+ return TRUE;
+ } else if ((bo == 16) && (bi == 0)) {
+ ctx->op = &bdnz;
+ sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
+ ctx->datalen += 8;
+ print_operands (ctx);
+ return TRUE;
+ }
+
+ return FALSE;
+} /* handle_blt */
+
+
+
+/*======================================================================
+ * Outputs source line information for the disassembler. This should
+ * be modified in the future to lookup the actual line of source code
+ * from the file, but for now this will do.
+ *
+ * Arguments:
+ * filename The address of a character array containing the
+ * absolute path and file name of the source file.
+ *
+ * funcname The address of a character array containing the
+ * name of the function (not C++ demangled (yet))
+ * to which this code belongs.
+ *
+ * line_no An integer specifying the source line number that
+ * generated this code.
+ *
+ * pfunc The address of a function to call to print the output.
+ *
+ *
+ * Returns TRUE if it was able to output the line info, or false if it was
+ * not.
+ */
+
+int print_source_line (char *filename, char *funcname,
+ int line_no, int (*pfunc) (const char *))
+{
+ char out_buf[256];
+
+ /*------------------------------------------------------------*/
+
+ (*pfunc) (""); /* output a newline */
+ sprintf (out_buf, "%s %s(): line %d", filename, funcname, line_no);
+ (*pfunc) (out_buf);
+
+ return TRUE;
+} /* print_source_line */
+
+
+
+/*======================================================================
+ * Entry point for the PPC assembler.
+ *
+ * Arguments:
+ * asm_buf An array of characters containing the assembly opcode
+ * and operands to convert to a POWERPC machine
+ * instruction.
+ *
+ * Returns the machine instruction or zero.
+ */
+
+unsigned long asmppc (unsigned long memaddr, char *asm_buf, int *err)
+{
+ struct opcode *opc;
+ struct operand *oper[MAX_OPERANDS];
+ unsigned long instr;
+ unsigned long param;
+ char *ptr = asm_buf;
+ char scratch[20];
+ int i;
+ int w_operands = 0; /* wanted # of operands */
+ int n_operands = 0; /* # of operands read */
+ int asm_debug = 0;
+
+ /*------------------------------------------------------------*/
+
+ if (err)
+ *err = 0;
+
+ if (get_word (&ptr, scratch) == 0)
+ return 0;
+
+ /* Lookup the opcode structure based on the opcode name */
+ if ((opc = find_opcode_by_name (scratch)) == (struct opcode *) 0) {
+ if (err)
+ *err = E_ASM_BAD_OPCODE;
+ return 0;
+ }
+
+ if (asm_debug) {
+ printf ("asmppc: Opcode = \"%s\"\n", opc->name);
+ }
+
+ for (i = 0; i < 8; ++i) {
+ if (opc->fields[i] == 0)
+ break;
+ ++w_operands;
+ }
+
+ if (asm_debug) {
+ printf ("asmppc: Expecting %d operands\n", w_operands);
+ }
+
+ instr = opc->opcode;
+
+ /* read each operand */
+ while (n_operands < w_operands) {
+
+ oper[n_operands] = &operands[opc->fields[n_operands] - 1];
+
+ if (oper[n_operands]->hint & OH_SILENT) {
+ /* Skip silent operands, they are covered in opc->opcode */
+
+ if (asm_debug) {
+ printf ("asmppc: Operand %d \"%s\" SILENT\n", n_operands,
+ oper[n_operands]->name);
+ }
+
+ ++n_operands;
+ continue;
+ }
+
+ if (get_word (&ptr, scratch) == 0)
+ break;
+
+ if (asm_debug) {
+ printf ("asmppc: Operand %d \"%s\" : \"%s\"\n", n_operands,
+ oper[n_operands]->name, scratch);
+ }
+
+ if ((param = parse_operand (memaddr, opc, oper[n_operands],
+ scratch, err)) == -1)
+ return 0;
+
+ instr |= param;
+ ++n_operands;
+ }
+
+ if (n_operands < w_operands) {
+ if (err)
+ *err = E_ASM_NUM_OPERANDS;
+ return 0;
+ }
+
+ if (asm_debug) {
+ printf ("asmppc: Instruction = 0x%08lx\n", instr);
+ }
+
+ return instr;
+} /* asmppc */
+
+
+
+/*======================================================================
+ * Called by the assembler to interpret a single operand
+ *
+ * Arguments:
+ * ctx A pointer to the disassembler context record.
+ *
+ * Returns 0 if the operand is ok, or -1 if it is bad.
+ */
+
+int parse_operand (unsigned long memaddr, struct opcode *opc,
+ struct operand *oper, char *txt, int *err)
+{
+ long data;
+ long mask;
+ int is_neg = 0;
+
+ /*------------------------------------------------------------*/
+
+ mask = (1 << oper->bits) - 1;
+
+ if (oper->hint & OH_ADDR) {
+ data = read_number (txt);
+
+ if (opc->hint & H_RELATIVE)
+ data = data - memaddr;
+
+ if (data < 0)
+ is_neg = 1;
+
+ data >>= 2;
+ data &= (mask >> 1);
+
+ if (is_neg)
+ data |= 1 << (oper->bits - 1);
+ }
+
+ else if (oper->hint & OH_REG) {
+ if (txt[0] == 'r' || txt[0] == 'R')
+ txt++;
+ else if (txt[0] == '%' && (txt[1] == 'r' || txt[1] == 'R'))
+ txt += 2;
+
+ data = read_number (txt);
+ if (data > 31) {
+ if (err)
+ *err = E_ASM_BAD_REGISTER;
+ return -1;
+ }
+
+ data = htonl (data);
+ }
+
+ else if (oper->hint & OH_SPR) {
+ if ((data = spr_value (txt)) == 0) {
+ if (err)
+ *err = E_ASM_BAD_SPR;
+ return -1;
+ }
+ }
+
+ else if (oper->hint & OH_TBR) {
+ if ((data = tbr_value (txt)) == 0) {
+ if (err)
+ *err = E_ASM_BAD_TBR;
+ return -1;
+ }
+ }
+
+ else {
+ data = htonl (read_number (txt));
+ }
+
+ return (data & mask) << oper->shift;
+} /* parse_operand */
+
+
+char *asm_error_str (int err)
+{
+ switch (err) {
+ case E_ASM_BAD_OPCODE:
+ return "Bad opcode";
+ case E_ASM_NUM_OPERANDS:
+ return "Bad number of operands";
+ case E_ASM_BAD_REGISTER:
+ return "Bad register number";
+ case E_ASM_BAD_SPR:
+ return "Bad SPR name or number";
+ case E_ASM_BAD_TBR:
+ return "Bad TBR name or number";
+ }
+
+ return "";
+} /* asm_error_str */
+
+
+
+/*======================================================================
+ * Copy a word from one buffer to another, ignores leading white spaces.
+ *
+ * Arguments:
+ * src The address of a character pointer to the
+ * source buffer.
+ * dest A pointer to a character buffer to write the word
+ * into.
+ *
+ * Returns the number of non-white space characters copied, or zero.
+ */
+
+int get_word (char **src, char *dest)
+{
+ char *ptr = *src;
+ int nchars = 0;
+
+ /*------------------------------------------------------------*/
+
+ /* Eat white spaces */
+ while (*ptr && isblank (*ptr))
+ ptr++;
+
+ if (*ptr == 0) {
+ *src = ptr;
+ return 0;
+ }
+
+ /* Find the text of the word */
+ while (*ptr && !isblank (*ptr) && (*ptr != ','))
+ dest[nchars++] = *ptr++;
+ ptr = (*ptr == ',') ? ptr + 1 : ptr;
+ dest[nchars] = 0;
+
+ *src = ptr;
+ return nchars;
+} /* get_word */
+
+
+
+/*======================================================================
+ * Convert a numeric string to a number, be aware of base notations.
+ *
+ * Arguments:
+ * txt The numeric string.
+ *
+ * Returns the converted numeric value.
+ */
+
+long read_number (char *txt)
+{
+ long val;
+ int is_neg = 0;
+
+ /*------------------------------------------------------------*/
+
+ if (txt == 0 || *txt == 0)
+ return 0;
+
+ if (*txt == '-') {
+ is_neg = 1;
+ ++txt;
+ }
+
+ if (txt[0] == '0' && (txt[1] == 'x' || txt[1] == 'X')) /* hex */
+ val = simple_strtoul (&txt[2], NULL, 16);
+ else /* decimal */
+ val = simple_strtoul (txt, NULL, 10);
+
+ if (is_neg)
+ val = -val;
+
+ return val;
+} /* read_number */
+
+
+int downstring (char *s)
+{
+ if (!s || !*s)
+ return 0;
+
+ while (*s) {
+ if (isupper (*s))
+ *s = tolower (*s);
+ s++;
+ }
+
+ return 0;
+} /* downstring */
+
+
+
+/*======================================================================
+ * Examines the instruction at the current address and determines the
+ * next address to be executed. This will take into account branches
+ * of different types so that a "step" and "next" operations can be
+ * supported.
+ *
+ * Arguments:
+ * nextaddr The address (to be filled in) of the next
+ * instruction to execute. This will only be a valid
+ * address if TRUE is returned.
+ *
+ * step_over A flag indicating how to compute addresses for
+ * branch statements:
+ * TRUE = Step over the branch (next)
+ * FALSE = step into the branch (step)
+ *
+ * Returns TRUE if it was able to compute the address. Returns FALSE if
+ * it has a problem reading the current instruction or one of the registers.
+ */
+
+int find_next_address (unsigned char *nextaddr, int step_over,
+ struct pt_regs *regs)
+{
+ unsigned long pc; /* SRR0 register from PPC */
+ unsigned long ctr; /* CTR register from PPC */
+ unsigned long cr; /* CR register from PPC */
+ unsigned long lr; /* LR register from PPC */
+ unsigned long instr; /* instruction at SRR0 */
+ unsigned long next; /* computed instruction for 'next' */
+ unsigned long step; /* computed instruction for 'step' */
+ unsigned long addr = 0; /* target address operand */
+ unsigned long aa = 0; /* AA operand */
+ unsigned long lk = 0; /* LK operand */
+ unsigned long bo = 0; /* BO operand */
+ unsigned long bi = 0; /* BI operand */
+ struct opcode *op = 0; /* opcode structure for 'instr' */
+ int ctr_ok = 0;
+ int cond_ok = 0;
+ int conditional = 0;
+ int branch = 0;
+
+ /*------------------------------------------------------------*/
+
+ if (nextaddr == 0 || regs == 0) {
+ printf ("find_next_address: bad args");
+ return FALSE;
+ }
+
+ pc = regs->nip & 0xfffffffc;
+ instr = INSTRUCTION (pc);
+
+ if ((op = find_opcode (instr)) == (struct opcode *) 0) {
+ printf ("find_next_address: can't parse opcode 0x%lx", instr);
+ return FALSE;
+ }
+
+ ctr = regs->ctr;
+ cr = regs->ccr;
+ lr = regs->link;
+
+ switch (op->opcode) {
+ case B_OPCODE (16, 0, 0): /* bc */
+ case B_OPCODE (16, 0, 1): /* bcl */
+ case B_OPCODE (16, 1, 0): /* bca */
+ case B_OPCODE (16, 1, 1): /* bcla */
+ if (!get_operand_value (op, instr, O_BD, &addr) ||
+ !get_operand_value (op, instr, O_BO, &bo) ||
+ !get_operand_value (op, instr, O_BI, &bi) ||
+ !get_operand_value (op, instr, O_AA, &aa) ||
+ !get_operand_value (op, instr, O_LK, &lk))
+ return FALSE;
+
+ if ((addr & (1 << 13)) != 0)
+ addr = addr - (1 << 14);
+ addr <<= 2;
+ conditional = 1;
+ branch = 1;
+ break;
+
+ case I_OPCODE (18, 0, 0): /* b */
+ case I_OPCODE (18, 0, 1): /* bl */
+ case I_OPCODE (18, 1, 0): /* ba */
+ case I_OPCODE (18, 1, 1): /* bla */
+ if (!get_operand_value (op, instr, O_LI, &addr) ||
+ !get_operand_value (op, instr, O_AA, &aa) ||
+ !get_operand_value (op, instr, O_LK, &lk))
+ return FALSE;
+
+ if ((addr & (1 << 23)) != 0)
+ addr = addr - (1 << 24);
+ addr <<= 2;
+ conditional = 0;
+ branch = 1;
+ break;
+
+ case XL_OPCODE (19, 528, 0): /* bcctr */
+ case XL_OPCODE (19, 528, 1): /* bcctrl */
+ if (!get_operand_value (op, instr, O_BO, &bo) ||
+ !get_operand_value (op, instr, O_BI, &bi) ||
+ !get_operand_value (op, instr, O_LK, &lk))
+ return FALSE;
+
+ addr = ctr;
+ aa = 1;
+ conditional = 1;
+ branch = 1;
+ break;
+
+ case XL_OPCODE (19, 16, 0): /* bclr */
+ case XL_OPCODE (19, 16, 1): /* bclrl */
+ if (!get_operand_value (op, instr, O_BO, &bo) ||
+ !get_operand_value (op, instr, O_BI, &bi) ||
+ !get_operand_value (op, instr, O_LK, &lk))
+ return FALSE;
+
+ addr = lr;
+ aa = 1;
+ conditional = 1;
+ branch = 1;
+ break;
+
+ default:
+ conditional = 0;
+ branch = 0;
+ break;
+ }
+
+ if (conditional) {
+ switch ((bo & 0x1e) >> 1) {
+ case 0: /* 0000y */
+ if (--ctr != 0)
+ ctr_ok = 1;
+
+ cond_ok = !(cr & (1 << (31 - bi)));
+ break;
+
+ case 1: /* 0001y */
+ if (--ctr == 0)
+ ctr_ok = 1;
+
+ cond_ok = !(cr & (1 << (31 - bi)));
+ break;
+
+ case 2: /* 001zy */
+ ctr_ok = 1;
+ cond_ok = !(cr & (1 << (31 - bi)));
+ break;
+
+ case 4: /* 0100y */
+ if (--ctr != 0)
+ ctr_ok = 1;
+
+ cond_ok = cr & (1 << (31 - bi));
+ break;
+
+ case 5: /* 0101y */
+ if (--ctr == 0)
+ ctr_ok = 1;
+
+ cond_ok = cr & (1 << (31 - bi));
+ break;
+
+ case 6: /* 011zy */
+ ctr_ok = 1;
+ cond_ok = cr & (1 << (31 - bi));
+ break;
+
+ case 8: /* 1z00y */
+ if (--ctr != 0)
+ ctr_ok = cond_ok = 1;
+ break;
+
+ case 9: /* 1z01y */
+ if (--ctr == 0)
+ ctr_ok = cond_ok = 1;
+ break;
+
+ case 10: /* 1z1zz */
+ ctr_ok = cond_ok = 1;
+ break;
+ }
+ }
+
+ if (branch && (!conditional || (ctr_ok && cond_ok))) {
+ if (aa)
+ step = addr;
+ else
+ step = addr + pc;
+
+ if (lk)
+ next = pc + 4;
+ else
+ next = step;
+ } else {
+ step = next = pc + 4;
+ }
+
+ if (step_over == TRUE)
+ *(unsigned long *) nextaddr = next;
+ else
+ *(unsigned long *) nextaddr = step;
+
+ return TRUE;
+} /* find_next_address */
+
+
+/*
+ * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are freely
+ * permitted provided that the above copyright notice and this
+ * paragraph and the following disclaimer are duplicated in all
+ * such forms.
+ *
+ * This software is provided "AS IS" and without any express or
+ * implied warranties, including, without limitation, the implied
+ * warranties of merchantability and fitness for a particular
+ * purpose.
+ */
diff -Naur u-boot-2009.03_orig/common/cmd_bootm.c u-boot-2009.03/common/cmd_bootm.c
--- u-boot-2009.03_orig/common/cmd_bootm.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/common/cmd_bootm.c 2009-03-25 16:25:04.705123000 -0700
@@ -191,6 +191,8 @@
#define IH_INITRD_ARCH IH_ARCH_SH
#elif defined(__sparc__)
#define IH_INITRD_ARCH IH_ARCH_SPARC
+#elif defined(__or1200__)
+ #define IH_INITRD_ARCH IH_ARCH_INVALID
#else
# error Unknown CPU type
#endif
diff -Naur u-boot-2009.03_orig/common/cmd_doc.c u-boot-2009.03/common/cmd_doc.c
--- u-boot-2009.03_orig/common/cmd_doc.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/common/cmd_doc.c 2009-03-31 14:49:43.350542400 -0700
@@ -1,1640 +1,1640 @@
-/*
- * Driver for Disk-On-Chip 2000 and Millennium
- * (c) 1999 Machine Vision Holdings, Inc.
- * (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org>
- *
- * $Id: doc2000.c,v 1.46 2001/10/02 15:05:13 dwmw2 Exp $
- */
-
-#include <common.h>
-#include <config.h>
-#include <command.h>
-#include <malloc.h>
-#include <asm/io.h>
-#include <linux/mtd/nftl.h>
-#include <linux/mtd/doc2000.h>
-
-/*
- * ! BROKEN !
- *
- * TODO: must be implemented and tested by someone with HW
- */
-#if 0
-#ifdef CONFIG_SYS_DOC_SUPPORT_2000
-#define DoC_is_2000(doc) (doc->ChipID == DOC_ChipID_Doc2k)
-#else
-#define DoC_is_2000(doc) (0)
-#endif
-
-#ifdef CONFIG_SYS_DOC_SUPPORT_MILLENNIUM
-#define DoC_is_Millennium(doc) (doc->ChipID == DOC_ChipID_DocMil)
-#else
-#define DoC_is_Millennium(doc) (0)
-#endif
-
-/* CONFIG_SYS_DOC_PASSIVE_PROBE:
- In order to ensure that the BIOS checksum is correct at boot time, and
- hence that the onboard BIOS extension gets executed, the DiskOnChip
- goes into reset mode when it is read sequentially: all registers
- return 0xff until the chip is woken up again by writing to the
- DOCControl register.
-
- Unfortunately, this means that the probe for the DiskOnChip is unsafe,
- because one of the first things it does is write to where it thinks
- the DOCControl register should be - which may well be shared memory
- for another device. I've had machines which lock up when this is
- attempted. Hence the possibility to do a passive probe, which will fail
- to detect a chip in reset mode, but is at least guaranteed not to lock
- the machine.
-
- If you have this problem, uncomment the following line:
-#define CONFIG_SYS_DOC_PASSIVE_PROBE
-*/
-
-#undef DOC_DEBUG
-#undef ECC_DEBUG
-#undef PSYCHO_DEBUG
-#undef NFTL_DEBUG
-
-static struct DiskOnChip doc_dev_desc[CONFIG_SYS_MAX_DOC_DEVICE];
-
-/* Current DOC Device */
-static int curr_device = -1;
-
-/* Supported NAND flash devices */
-static struct nand_flash_dev nand_flash_ids[] = {
- {"Toshiba TC5816BDC", NAND_MFR_TOSHIBA, 0x64, 21, 1, 2, 0x1000, 0},
- {"Toshiba TC5832DC", NAND_MFR_TOSHIBA, 0x6b, 22, 0, 2, 0x2000, 0},
- {"Toshiba TH58V128DC", NAND_MFR_TOSHIBA, 0x73, 24, 0, 2, 0x4000, 0},
- {"Toshiba TC58256FT/DC", NAND_MFR_TOSHIBA, 0x75, 25, 0, 2, 0x4000, 0},
- {"Toshiba TH58512FT", NAND_MFR_TOSHIBA, 0x76, 26, 0, 3, 0x4000, 0},
- {"Toshiba TC58V32DC", NAND_MFR_TOSHIBA, 0xe5, 22, 0, 2, 0x2000, 0},
- {"Toshiba TC58V64AFT/DC", NAND_MFR_TOSHIBA, 0xe6, 23, 0, 2, 0x2000, 0},
- {"Toshiba TC58V16BDC", NAND_MFR_TOSHIBA, 0xea, 21, 1, 2, 0x1000, 0},
- {"Toshiba TH58100FT", NAND_MFR_TOSHIBA, 0x79, 27, 0, 3, 0x4000, 0},
- {"Samsung KM29N16000", NAND_MFR_SAMSUNG, 0x64, 21, 1, 2, 0x1000, 0},
- {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0x6b, 22, 0, 2, 0x2000, 0},
- {"Samsung KM29U128T", NAND_MFR_SAMSUNG, 0x73, 24, 0, 2, 0x4000, 0},
- {"Samsung KM29U256T", NAND_MFR_SAMSUNG, 0x75, 25, 0, 2, 0x4000, 0},
- {"Samsung unknown 64Mb", NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000, 0},
- {"Samsung KM29W32000", NAND_MFR_SAMSUNG, 0xe3, 22, 0, 2, 0x2000, 0},
- {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0xe5, 22, 0, 2, 0x2000, 0},
- {"Samsung KM29U64000", NAND_MFR_SAMSUNG, 0xe6, 23, 0, 2, 0x2000, 0},
- {"Samsung KM29W16000", NAND_MFR_SAMSUNG, 0xea, 21, 1, 2, 0x1000, 0},
- {"Samsung K9F5616Q0C", NAND_MFR_SAMSUNG, 0x45, 25, 0, 2, 0x4000, 1},
- {"Samsung K9K1216Q0C", NAND_MFR_SAMSUNG, 0x46, 26, 0, 3, 0x4000, 1},
- {"Samsung K9F1G08U0M", NAND_MFR_SAMSUNG, 0xf1, 27, 0, 2, 0, 0},
- {NULL,}
-};
-
-/* ------------------------------------------------------------------------- */
-
-int do_doc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- int rcode = 0;
-
- switch (argc) {
- case 0:
- case 1:
- cmd_usage(cmdtp);
- return 1;
- case 2:
- if (strcmp(argv[1],"info") == 0) {
- int i;
-
- putc ('\n');
-
- for (i=0; i<CONFIG_SYS_MAX_DOC_DEVICE; ++i) {
- if(doc_dev_desc[i].ChipID == DOC_ChipID_UNKNOWN)
- continue; /* list only known devices */
- printf ("Device %d: ", i);
- doc_print(&doc_dev_desc[i]);
- }
- return 0;
-
- } else if (strcmp(argv[1],"device") == 0) {
- if ((curr_device < 0) || (curr_device >= CONFIG_SYS_MAX_DOC_DEVICE)) {
- puts ("\nno devices available\n");
- return 1;
- }
- printf ("\nDevice %d: ", curr_device);
- doc_print(&doc_dev_desc[curr_device]);
- return 0;
- }
- cmd_usage(cmdtp);
- return 1;
- case 3:
- if (strcmp(argv[1],"device") == 0) {
- int dev = (int)simple_strtoul(argv[2], NULL, 10);
-
- printf ("\nDevice %d: ", dev);
- if (dev >= CONFIG_SYS_MAX_DOC_DEVICE) {
- puts ("unknown device\n");
- return 1;
- }
- doc_print(&doc_dev_desc[dev]);
- /*doc_print (dev);*/
-
- if (doc_dev_desc[dev].ChipID == DOC_ChipID_UNKNOWN) {
- return 1;
- }
-
- curr_device = dev;
-
- puts ("... is now current device\n");
-
- return 0;
- }
-
- cmd_usage(cmdtp);
- return 1;
- default:
- /* at least 4 args */
-
- if (strcmp(argv[1],"read") == 0 || strcmp(argv[1],"write") == 0) {
- ulong addr = simple_strtoul(argv[2], NULL, 16);
- ulong off = simple_strtoul(argv[3], NULL, 16);
- ulong size = simple_strtoul(argv[4], NULL, 16);
- int cmd = (strcmp(argv[1],"read") == 0);
- int ret, total;
-
- printf ("\nDOC %s: device %d offset %ld, size %ld ... ",
- cmd ? "read" : "write", curr_device, off, size);
-
- ret = doc_rw(doc_dev_desc + curr_device, cmd, off, size,
- (size_t *)&total, (u_char*)addr);
-
- printf ("%d bytes %s: %s\n", total, cmd ? "read" : "write",
- ret ? "ERROR" : "OK");
-
- return ret;
- } else if (strcmp(argv[1],"erase") == 0) {
- ulong off = simple_strtoul(argv[2], NULL, 16);
- ulong size = simple_strtoul(argv[3], NULL, 16);
- int ret;
-
- printf ("\nDOC erase: device %d offset %ld, size %ld ... ",
- curr_device, off, size);
-
- ret = doc_erase (doc_dev_desc + curr_device, off, size);
-
- printf("%s\n", ret ? "ERROR" : "OK");
-
- return ret;
- } else {
- cmd_usage(cmdtp);
- rcode = 1;
- }
-
- return rcode;
- }
-}
-U_BOOT_CMD(
- doc, 5, 1, do_doc,
- "Disk-On-Chip sub-system",
- "info - show available DOC devices\n"
- "doc device [dev] - show or set current device\n"
- "doc read addr off size\n"
- "doc write addr off size - read/write `size'"
- " bytes starting at offset `off'\n"
- " to/from memory address `addr'\n"
- "doc erase off size - erase `size' bytes of DOC from offset `off'\n"
-);
-
-int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- char *boot_device = NULL;
- char *ep;
- int dev;
- ulong cnt;
- ulong addr;
- ulong offset = 0;
- image_header_t *hdr;
- int rcode = 0;
-#if defined(CONFIG_FIT)
- const void *fit_hdr = NULL;
-#endif
-
- show_boot_progress (34);
- switch (argc) {
- case 1:
- addr = CONFIG_SYS_LOAD_ADDR;
- boot_device = getenv ("bootdevice");
- break;
- case 2:
- addr = simple_strtoul(argv[1], NULL, 16);
- boot_device = getenv ("bootdevice");
- break;
- case 3:
- addr = simple_strtoul(argv[1], NULL, 16);
- boot_device = argv[2];
- break;
- case 4:
- addr = simple_strtoul(argv[1], NULL, 16);
- boot_device = argv[2];
- offset = simple_strtoul(argv[3], NULL, 16);
- break;
- default:
- cmd_usage(cmdtp);
- show_boot_progress (-35);
- return 1;
- }
-
- show_boot_progress (35);
- if (!boot_device) {
- puts ("\n** No boot device **\n");
- show_boot_progress (-36);
- return 1;
- }
- show_boot_progress (36);
-
- dev = simple_strtoul(boot_device, &ep, 16);
-
- if ((dev >= CONFIG_SYS_MAX_DOC_DEVICE) ||
- (doc_dev_desc[dev].ChipID == DOC_ChipID_UNKNOWN)) {
- printf ("\n** Device %d not available\n", dev);
- show_boot_progress (-37);
- return 1;
- }
- show_boot_progress (37);
-
- printf ("\nLoading from device %d: %s at 0x%lX (offset 0x%lX)\n",
- dev, doc_dev_desc[dev].name, doc_dev_desc[dev].physadr,
- offset);
-
- if (doc_rw (doc_dev_desc + dev, 1, offset,
- SECTORSIZE, NULL, (u_char *)addr)) {
- printf ("** Read error on %d\n", dev);
- show_boot_progress (-38);
- return 1;
- }
- show_boot_progress (38);
-
- switch (genimg_get_format ((void *)addr)) {
- case IMAGE_FORMAT_LEGACY:
- hdr = (image_header_t *)addr;
-
- image_print_contents (hdr);
-
- cnt = image_get_image_size (hdr);
- break;
-#if defined(CONFIG_FIT)
- case IMAGE_FORMAT_FIT:
- fit_hdr = (const void *)addr;
- puts ("Fit image detected...\n");
-
- cnt = fit_get_size (fit_hdr);
- break;
-#endif
- default:
- show_boot_progress (-39);
- puts ("** Unknown image type\n");
- return 1;
- }
- show_boot_progress (39);
-
- cnt -= SECTORSIZE;
- if (doc_rw (doc_dev_desc + dev, 1, offset + SECTORSIZE, cnt,
- NULL, (u_char *)(addr+SECTORSIZE))) {
- printf ("** Read error on %d\n", dev);
- show_boot_progress (-40);
- return 1;
- }
- show_boot_progress (40);
-
-#if defined(CONFIG_FIT)
- /* This cannot be done earlier, we need complete FIT image in RAM first */
- if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT) {
- if (!fit_check_format (fit_hdr)) {
- show_boot_progress (-130);
- puts ("** Bad FIT image format\n");
- return 1;
- }
- show_boot_progress (131);
- fit_print_contents (fit_hdr);
- }
-#endif
-
- /* Loading ok, update default load address */
-
- load_addr = addr;
-
- /* Check if we should attempt an auto-start */
- if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
- char *local_args[2];
- extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
-
- local_args[0] = argv[0];
- local_args[1] = NULL;
-
- printf ("Automatic boot of image at addr 0x%08lX ...\n", addr);
-
- do_bootm (cmdtp, 0, 1, local_args);
- rcode = 1;
- }
- return rcode;
-}
-
-U_BOOT_CMD(
- docboot, 4, 1, do_docboot,
- "boot from DOC device",
- "loadAddr dev\n"
-);
-
-int doc_rw (struct DiskOnChip* this, int cmd,
- loff_t from, size_t len,
- size_t * retlen, u_char * buf)
-{
- int noecc, ret = 0, n, total = 0;
- char eccbuf[6];
-
- while(len) {
- /* The ECC will not be calculated correctly if
- less than 512 is written or read */
- noecc = (from != (from | 0x1ff) + 1) || (len < 0x200);
-
- if (cmd)
- ret = doc_read_ecc(this, from, len,
- (size_t *)&n, (u_char*)buf,
- noecc ? (uchar *)NULL : (uchar *)eccbuf);
- else
- ret = doc_write_ecc(this, from, len,
- (size_t *)&n, (u_char*)buf,
- noecc ? (uchar *)NULL : (uchar *)eccbuf);
-
- if (ret)
- break;
-
- from += n;
- buf += n;
- total += n;
- len -= n;
- }
-
- if (retlen)
- *retlen = total;
-
- return ret;
-}
-
-void doc_print(struct DiskOnChip *this) {
- printf("%s at 0x%lX,\n"
- "\t %d chip%s %s, size %d MB, \n"
- "\t total size %ld MB, sector size %ld kB\n",
- this->name, this->physadr, this->numchips,
- this->numchips>1 ? "s" : "", this->chips_name,
- 1 << (this->chipshift - 20),
- this->totlen >> 20, this->erasesize >> 10);
-
- if (this->nftl_found) {
- struct NFTLrecord *nftl = &this->nftl;
- unsigned long bin_size, flash_size;
-
- bin_size = nftl->nb_boot_blocks * this->erasesize;
- flash_size = (nftl->nb_blocks - nftl->nb_boot_blocks) * this->erasesize;
-
- printf("\t NFTL boot record:\n"
- "\t Binary partition: size %ld%s\n"
- "\t Flash disk partition: size %ld%s, offset 0x%lx\n",
- bin_size > (1 << 20) ? bin_size >> 20 : bin_size >> 10,
- bin_size > (1 << 20) ? "MB" : "kB",
- flash_size > (1 << 20) ? flash_size >> 20 : flash_size >> 10,
- flash_size > (1 << 20) ? "MB" : "kB", bin_size);
- } else {
- puts ("\t No NFTL boot record found.\n");
- }
-}
-
-/* ------------------------------------------------------------------------- */
-
-/* This function is needed to avoid calls of the __ashrdi3 function. */
-static int shr(int val, int shift) {
- return val >> shift;
-}
-
-/* Perform the required delay cycles by reading from the appropriate register */
-static void DoC_Delay(struct DiskOnChip *doc, unsigned short cycles)
-{
- volatile char dummy;
- int i;
-
- for (i = 0; i < cycles; i++) {
- if (DoC_is_Millennium(doc))
- dummy = ReadDOC(doc->virtadr, NOP);
- else
- dummy = ReadDOC(doc->virtadr, DOCStatus);
- }
-
-}
-
-/* DOC_WaitReady: Wait for RDY line to be asserted by the flash chip */
-static int _DoC_WaitReady(struct DiskOnChip *doc)
-{
- unsigned long docptr = doc->virtadr;
- unsigned long start = get_timer(0);
-
-#ifdef PSYCHO_DEBUG
- puts ("_DoC_WaitReady called for out-of-line wait\n");
-#endif
-
- /* Out-of-line routine to wait for chip response */
- while (!(ReadDOC(docptr, CDSNControl) & CDSN_CTRL_FR_B)) {
-#ifdef CONFIG_SYS_DOC_SHORT_TIMEOUT
- /* it seems that after a certain time the DoC deasserts
- * the CDSN_CTRL_FR_B although it is not ready...
- * using a short timout solve this (timer increments every ms) */
- if (get_timer(start) > 10) {
- return DOC_ETIMEOUT;
- }
-#else
- if (get_timer(start) > 10 * 1000) {
- puts ("_DoC_WaitReady timed out.\n");
- return DOC_ETIMEOUT;
- }
-#endif
- udelay(1);
- }
-
- return 0;
-}
-
-static int DoC_WaitReady(struct DiskOnChip *doc)
-{
- unsigned long docptr = doc->virtadr;
- /* This is inline, to optimise the common case, where it's ready instantly */
- int ret = 0;
-
- /* 4 read form NOP register should be issued in prior to the read from CDSNControl
- see Software Requirement 11.4 item 2. */
- DoC_Delay(doc, 4);
-
- if (!(ReadDOC(docptr, CDSNControl) & CDSN_CTRL_FR_B))
- /* Call the out-of-line routine to wait */
- ret = _DoC_WaitReady(doc);
-
- /* issue 2 read from NOP register after reading from CDSNControl register
- see Software Requirement 11.4 item 2. */
- DoC_Delay(doc, 2);
-
- return ret;
-}
-
-/* DoC_Command: Send a flash command to the flash chip through the CDSN Slow IO register to
- bypass the internal pipeline. Each of 4 delay cycles (read from the NOP register) is
- required after writing to CDSN Control register, see Software Requirement 11.4 item 3. */
-
-static inline int DoC_Command(struct DiskOnChip *doc, unsigned char command,
- unsigned char xtraflags)
-{
- unsigned long docptr = doc->virtadr;
-
- if (DoC_is_2000(doc))
- xtraflags |= CDSN_CTRL_FLASH_IO;
-
- /* Assert the CLE (Command Latch Enable) line to the flash chip */
- WriteDOC(xtraflags | CDSN_CTRL_CLE | CDSN_CTRL_CE, docptr, CDSNControl);
- DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
-
- if (DoC_is_Millennium(doc))
- WriteDOC(command, docptr, CDSNSlowIO);
-
- /* Send the command */
- WriteDOC_(command, docptr, doc->ioreg);
-
- /* Lower the CLE line */
- WriteDOC(xtraflags | CDSN_CTRL_CE, docptr, CDSNControl);
- DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
-
- /* Wait for the chip to respond - Software requirement 11.4.1 (extended for any command) */
- return DoC_WaitReady(doc);
-}
-
-/* DoC_Address: Set the current address for the flash chip through the CDSN Slow IO register to
- bypass the internal pipeline. Each of 4 delay cycles (read from the NOP register) is
- required after writing to CDSN Control register, see Software Requirement 11.4 item 3. */
-
-static int DoC_Address(struct DiskOnChip *doc, int numbytes, unsigned long ofs,
- unsigned char xtraflags1, unsigned char xtraflags2)
-{
- unsigned long docptr;
- int i;
-
- docptr = doc->virtadr;
-
- if (DoC_is_2000(doc))
- xtraflags1 |= CDSN_CTRL_FLASH_IO;
-
- /* Assert the ALE (Address Latch Enable) line to the flash chip */
- WriteDOC(xtraflags1 | CDSN_CTRL_ALE | CDSN_CTRL_CE, docptr, CDSNControl);
-
- DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
-
- /* Send the address */
- /* Devices with 256-byte page are addressed as:
- Column (bits 0-7), Page (bits 8-15, 16-23, 24-31)
- * there is no device on the market with page256
- and more than 24 bits.
- Devices with 512-byte page are addressed as:
- Column (bits 0-7), Page (bits 9-16, 17-24, 25-31)
- * 25-31 is sent only if the chip support it.
- * bit 8 changes the read command to be sent
- (NAND_CMD_READ0 or NAND_CMD_READ1).
- */
-
- if (numbytes == ADDR_COLUMN || numbytes == ADDR_COLUMN_PAGE) {
- if (DoC_is_Millennium(doc))
- WriteDOC(ofs & 0xff, docptr, CDSNSlowIO);
- WriteDOC_(ofs & 0xff, docptr, doc->ioreg);
- }
-
- if (doc->page256) {
- ofs = ofs >> 8;
- } else {
- ofs = ofs >> 9;
- }
-
- if (numbytes == ADDR_PAGE || numbytes == ADDR_COLUMN_PAGE) {
- for (i = 0; i < doc->pageadrlen; i++, ofs = ofs >> 8) {
- if (DoC_is_Millennium(doc))
- WriteDOC(ofs & 0xff, docptr, CDSNSlowIO);
- WriteDOC_(ofs & 0xff, docptr, doc->ioreg);
- }
- }
-
- DoC_Delay(doc, 2); /* Needed for some slow flash chips. mf. */
-
- /* FIXME: The SlowIO's for millennium could be replaced by
- a single WritePipeTerm here. mf. */
-
- /* Lower the ALE line */
- WriteDOC(xtraflags1 | xtraflags2 | CDSN_CTRL_CE, docptr,
- CDSNControl);
-
- DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
-
- /* Wait for the chip to respond - Software requirement 11.4.1 */
- return DoC_WaitReady(doc);
-}
-
-/* Read a buffer from DoC, taking care of Millennium oddities */
-static void DoC_ReadBuf(struct DiskOnChip *doc, u_char * buf, int len)
-{
- volatile int dummy;
- int modulus = 0xffff;
- unsigned long docptr;
- int i;
-
- docptr = doc->virtadr;
-
- if (len <= 0)
- return;
-
- if (DoC_is_Millennium(doc)) {
- /* Read the data via the internal pipeline through CDSN IO register,
- see Pipelined Read Operations 11.3 */
- dummy = ReadDOC(docptr, ReadPipeInit);
-
- /* Millennium should use the LastDataRead register - Pipeline Reads */
- len--;
-
- /* This is needed for correctly ECC calculation */
- modulus = 0xff;
- }
-
- for (i = 0; i < len; i++)
- buf[i] = ReadDOC_(docptr, doc->ioreg + (i & modulus));
-
- if (DoC_is_Millennium(doc)) {
- buf[i] = ReadDOC(docptr, LastDataRead);
- }
-}
-
-/* Write a buffer to DoC, taking care of Millennium oddities */
-static void DoC_WriteBuf(struct DiskOnChip *doc, const u_char * buf, int len)
-{
- unsigned long docptr;
- int i;
-
- docptr = doc->virtadr;
-
- if (len <= 0)
- return;
-
- for (i = 0; i < len; i++)
- WriteDOC_(buf[i], docptr, doc->ioreg + i);
-
- if (DoC_is_Millennium(doc)) {
- WriteDOC(0x00, docptr, WritePipeTerm);
- }
-}
-
-
-/* DoC_SelectChip: Select a given flash chip within the current floor */
-
-static inline int DoC_SelectChip(struct DiskOnChip *doc, int chip)
-{
- unsigned long docptr = doc->virtadr;
-
- /* Software requirement 11.4.4 before writing DeviceSelect */
- /* Deassert the CE line to eliminate glitches on the FCE# outputs */
- WriteDOC(CDSN_CTRL_WP, docptr, CDSNControl);
- DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
-
- /* Select the individual flash chip requested */
- WriteDOC(chip, docptr, CDSNDeviceSelect);
- DoC_Delay(doc, 4);
-
- /* Reassert the CE line */
- WriteDOC(CDSN_CTRL_CE | CDSN_CTRL_FLASH_IO | CDSN_CTRL_WP, docptr,
- CDSNControl);
- DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
-
- /* Wait for it to be ready */
- return DoC_WaitReady(doc);
-}
-
-/* DoC_SelectFloor: Select a given floor (bank of flash chips) */
-
-static inline int DoC_SelectFloor(struct DiskOnChip *doc, int floor)
-{
- unsigned long docptr = doc->virtadr;
-
- /* Select the floor (bank) of chips required */
- WriteDOC(floor, docptr, FloorSelect);
-
- /* Wait for the chip to be ready */
- return DoC_WaitReady(doc);
-}
-
-/* DoC_IdentChip: Identify a given NAND chip given {floor,chip} */
-
-static int DoC_IdentChip(struct DiskOnChip *doc, int floor, int chip)
-{
- int mfr, id, i;
- volatile char dummy;
-
- /* Page in the required floor/chip */
- DoC_SelectFloor(doc, floor);
- DoC_SelectChip(doc, chip);
-
- /* Reset the chip */
- if (DoC_Command(doc, NAND_CMD_RESET, CDSN_CTRL_WP)) {
-#ifdef DOC_DEBUG
- printf("DoC_Command (reset) for %d,%d returned true\n",
- floor, chip);
-#endif
- return 0;
- }
-
-
- /* Read the NAND chip ID: 1. Send ReadID command */
- if (DoC_Command(doc, NAND_CMD_READID, CDSN_CTRL_WP)) {
-#ifdef DOC_DEBUG
- printf("DoC_Command (ReadID) for %d,%d returned true\n",
- floor, chip);
-#endif
- return 0;
- }
-
- /* Read the NAND chip ID: 2. Send address byte zero */
- DoC_Address(doc, ADDR_COLUMN, 0, CDSN_CTRL_WP, 0);
-
- /* Read the manufacturer and device id codes from the device */
-
- /* CDSN Slow IO register see Software Requirement 11.4 item 5. */
- dummy = ReadDOC(doc->virtadr, CDSNSlowIO);
- DoC_Delay(doc, 2);
- mfr = ReadDOC_(doc->virtadr, doc->ioreg);
-
- /* CDSN Slow IO register see Software Requirement 11.4 item 5. */
- dummy = ReadDOC(doc->virtadr, CDSNSlowIO);
- DoC_Delay(doc, 2);
- id = ReadDOC_(doc->virtadr, doc->ioreg);
-
- /* No response - return failure */
- if (mfr == 0xff || mfr == 0)
- return 0;
-
- /* Check it's the same as the first chip we identified.
- * M-Systems say that any given DiskOnChip device should only
- * contain _one_ type of flash part, although that's not a
- * hardware restriction. */
- if (doc->mfr) {
- if (doc->mfr == mfr && doc->id == id)
- return 1; /* This is another the same the first */
- else
- printf("Flash chip at floor %d, chip %d is different:\n",
- floor, chip);
- }
-
- /* Print and store the manufacturer and ID codes. */
- for (i = 0; nand_flash_ids[i].name != NULL; i++) {
- if (mfr == nand_flash_ids[i].manufacture_id &&
- id == nand_flash_ids[i].model_id) {
-#ifdef DOC_DEBUG
- printf("Flash chip found: Manufacturer ID: %2.2X, "
- "Chip ID: %2.2X (%s)\n", mfr, id,
- nand_flash_ids[i].name);
-#endif
- if (!doc->mfr) {
- doc->mfr = mfr;
- doc->id = id;
- doc->chipshift =
- nand_flash_ids[i].chipshift;
- doc->page256 = nand_flash_ids[i].page256;
- doc->pageadrlen =
- nand_flash_ids[i].pageadrlen;
- doc->erasesize =
- nand_flash_ids[i].erasesize;
- doc->chips_name =
- nand_flash_ids[i].name;
- return 1;
- }
- return 0;
- }
- }
-
-
-#ifdef DOC_DEBUG
- /* We haven't fully identified the chip. Print as much as we know. */
- printf("Unknown flash chip found: %2.2X %2.2X\n",
- id, mfr);
-#endif
-
- return 0;
-}
-
-/* DoC_ScanChips: Find all NAND chips present in a DiskOnChip, and identify them */
-
-static void DoC_ScanChips(struct DiskOnChip *this)
-{
- int floor, chip;
- int numchips[MAX_FLOORS];
- int maxchips = MAX_CHIPS;
- int ret = 1;
-
- this->numchips = 0;
- this->mfr = 0;
- this->id = 0;
-
- if (DoC_is_Millennium(this))
- maxchips = MAX_CHIPS_MIL;
-
- /* For each floor, find the number of valid chips it contains */
- for (floor = 0; floor < MAX_FLOORS; floor++) {
- ret = 1;
- numchips[floor] = 0;
- for (chip = 0; chip < maxchips && ret != 0; chip++) {
-
- ret = DoC_IdentChip(this, floor, chip);
- if (ret) {
- numchips[floor]++;
- this->numchips++;
- }
- }
- }
-
- /* If there are none at all that we recognise, bail */
- if (!this->numchips) {
- puts ("No flash chips recognised.\n");
- return;
- }
-
- /* Allocate an array to hold the information for each chip */
- this->chips = malloc(sizeof(struct Nand) * this->numchips);
- if (!this->chips) {
- puts ("No memory for allocating chip info structures\n");
- return;
- }
-
- ret = 0;
-
- /* Fill out the chip array with {floor, chipno} for each
- * detected chip in the device. */
- for (floor = 0; floor < MAX_FLOORS; floor++) {
- for (chip = 0; chip < numchips[floor]; chip++) {
- this->chips[ret].floor = floor;
- this->chips[ret].chip = chip;
- this->chips[ret].curadr = 0;
- this->chips[ret].curmode = 0x50;
- ret++;
- }
- }
-
- /* Calculate and print the total size of the device */
- this->totlen = this->numchips * (1 << this->chipshift);
-
-#ifdef DOC_DEBUG
- printf("%d flash chips found. Total DiskOnChip size: %ld MB\n",
- this->numchips, this->totlen >> 20);
-#endif
-}
-
-/* find_boot_record: Find the NFTL Media Header and its Spare copy which contains the
- * various device information of the NFTL partition and Bad Unit Table. Update
- * the ReplUnitTable[] table accroding to the Bad Unit Table. ReplUnitTable[]
- * is used for management of Erase Unit in other routines in nftl.c and nftlmount.c
- */
-static int find_boot_record(struct NFTLrecord *nftl)
-{
- struct nftl_uci1 h1;
- struct nftl_oob oob;
- unsigned int block, boot_record_count = 0;
- int retlen;
- u8 buf[SECTORSIZE];
- struct NFTLMediaHeader *mh = &nftl->MediaHdr;
- unsigned int i;
-
- nftl->MediaUnit = BLOCK_NIL;
- nftl->SpareMediaUnit = BLOCK_NIL;
-
- /* search for a valid boot record */
- for (block = 0; block < nftl->nb_blocks; block++) {
- int ret;
-
- /* Check for ANAND header first. Then can whinge if it's found but later
- checks fail */
- if ((ret = doc_read_ecc(nftl->mtd, block * nftl->EraseSize, SECTORSIZE,
- (size_t *)&retlen, buf, NULL))) {
- static int warncount = 5;
-
- if (warncount) {
- printf("Block read at 0x%x failed\n", block * nftl->EraseSize);
- if (!--warncount)
- puts ("Further failures for this block will not be printed\n");
- }
- continue;
- }
-
- if (retlen < 6 || memcmp(buf, "ANAND", 6)) {
- /* ANAND\0 not found. Continue */
-#ifdef PSYCHO_DEBUG
- printf("ANAND header not found at 0x%x\n", block * nftl->EraseSize);
-#endif
- continue;
- }
-
-#ifdef NFTL_DEBUG
- printf("ANAND header found at 0x%x\n", block * nftl->EraseSize);
-#endif
-
- /* To be safer with BIOS, also use erase mark as discriminant */
- if ((ret = doc_read_oob(nftl->mtd, block * nftl->EraseSize + SECTORSIZE + 8,
- 8, (size_t *)&retlen, (uchar *)&h1) < 0)) {
-#ifdef NFTL_DEBUG
- printf("ANAND header found at 0x%x, but OOB data read failed\n",
- block * nftl->EraseSize);
-#endif
- continue;
- }
-
- /* OK, we like it. */
-
- if (boot_record_count) {
- /* We've already processed one. So we just check if
- this one is the same as the first one we found */
- if (memcmp(mh, buf, sizeof(struct NFTLMediaHeader))) {
-#ifdef NFTL_DEBUG
- printf("NFTL Media Headers at 0x%x and 0x%x disagree.\n",
- nftl->MediaUnit * nftl->EraseSize, block * nftl->EraseSize);
-#endif
- /* if (debug) Print both side by side */
- return -1;
- }
- if (boot_record_count == 1)
- nftl->SpareMediaUnit = block;
-
- boot_record_count++;
- continue;
- }
-
- /* This is the first we've seen. Copy the media header structure into place */
- memcpy(mh, buf, sizeof(struct NFTLMediaHeader));
-
- /* Do some sanity checks on it */
- if (mh->UnitSizeFactor == 0) {
-#ifdef NFTL_DEBUG
- puts ("UnitSizeFactor 0x00 detected.\n"
- "This violates the spec but we think we know what it means...\n");
-#endif
- } else if (mh->UnitSizeFactor != 0xff) {
- printf ("Sorry, we don't support UnitSizeFactor "
- "of != 1 yet.\n");
- return -1;
- }
-
- nftl->nb_boot_blocks = le16_to_cpu(mh->FirstPhysicalEUN);
- if ((nftl->nb_boot_blocks + 2) >= nftl->nb_blocks) {
- printf ("NFTL Media Header sanity check failed:\n"
- "nb_boot_blocks (%d) + 2 > nb_blocks (%d)\n",
- nftl->nb_boot_blocks, nftl->nb_blocks);
- return -1;
- }
-
- nftl->numvunits = le32_to_cpu(mh->FormattedSize) / nftl->EraseSize;
- if (nftl->numvunits > (nftl->nb_blocks - nftl->nb_boot_blocks - 2)) {
- printf ("NFTL Media Header sanity check failed:\n"
- "numvunits (%d) > nb_blocks (%d) - nb_boot_blocks(%d) - 2\n",
- nftl->numvunits,
- nftl->nb_blocks,
- nftl->nb_boot_blocks);
- return -1;
- }
-
- nftl->nr_sects = nftl->numvunits * (nftl->EraseSize / SECTORSIZE);
-
- /* If we're not using the last sectors in the device for some reason,
- reduce nb_blocks accordingly so we forget they're there */
- nftl->nb_blocks = le16_to_cpu(mh->NumEraseUnits) + le16_to_cpu(mh->FirstPhysicalEUN);
-
- /* read the Bad Erase Unit Table and modify ReplUnitTable[] accordingly */
- for (i = 0; i < nftl->nb_blocks; i++) {
- if ((i & (SECTORSIZE - 1)) == 0) {
- /* read one sector for every SECTORSIZE of blocks */
- if ((ret = doc_read_ecc(nftl->mtd, block * nftl->EraseSize +
- i + SECTORSIZE, SECTORSIZE,
- (size_t *)&retlen, buf, (uchar *)&oob)) < 0) {
- puts ("Read of bad sector table failed\n");
- return -1;
- }
- }
- /* mark the Bad Erase Unit as RESERVED in ReplUnitTable */
- if (buf[i & (SECTORSIZE - 1)] != 0xff)
- nftl->ReplUnitTable[i] = BLOCK_RESERVED;
- }
-
- nftl->MediaUnit = block;
- boot_record_count++;
-
- } /* foreach (block) */
-
- return boot_record_count?0:-1;
-}
-
-/* This routine is made available to other mtd code via
- * inter_module_register. It must only be accessed through
- * inter_module_get which will bump the use count of this module. The
- * addresses passed back in mtd are valid as long as the use count of
- * this module is non-zero, i.e. between inter_module_get and
- * inter_module_put. Keith Owens <kaos@ocs.com.au> 29 Oct 2000.
- */
-static void DoC2k_init(struct DiskOnChip* this)
-{
- struct NFTLrecord *nftl;
-
- switch (this->ChipID) {
- case DOC_ChipID_Doc2k:
- this->name = "DiskOnChip 2000";
- this->ioreg = DoC_2k_CDSN_IO;
- break;
- case DOC_ChipID_DocMil:
- this->name = "DiskOnChip Millennium";
- this->ioreg = DoC_Mil_CDSN_IO;
- break;
- }
-
-#ifdef DOC_DEBUG
- printf("%s found at address 0x%lX\n", this->name,
- this->physadr);
-#endif
-
- this->totlen = 0;
- this->numchips = 0;
-
- this->curfloor = -1;
- this->curchip = -1;
-
- /* Ident all the chips present. */
- DoC_ScanChips(this);
- if ((!this->numchips) || (!this->chips))
- return;
-
- nftl = &this->nftl;
-
- /* Get physical parameters */
- nftl->EraseSize = this->erasesize;
- nftl->nb_blocks = this->totlen / this->erasesize;
- nftl->mtd = this;
-
- if (find_boot_record(nftl) != 0)
- this->nftl_found = 0;
- else
- this->nftl_found = 1;
-
- printf("%s @ 0x%lX, %ld MB\n", this->name, this->physadr, this->totlen >> 20);
-}
-
-int doc_read_ecc(struct DiskOnChip* this, loff_t from, size_t len,
- size_t * retlen, u_char * buf, u_char * eccbuf)
-{
- unsigned long docptr;
- struct Nand *mychip;
- unsigned char syndrome[6];
- volatile char dummy;
- int i, len256 = 0, ret=0;
-
- docptr = this->virtadr;
-
- /* Don't allow read past end of device */
- if (from >= this->totlen) {
- puts ("Out of flash\n");
- return DOC_EINVAL;
- }
-
- /* Don't allow a single read to cross a 512-byte block boundary */
- if (from + len > ((from | 0x1ff) + 1))
- len = ((from | 0x1ff) + 1) - from;
-
- /* The ECC will not be calculated correctly if less than 512 is read */
- if (len != 0x200 && eccbuf)
- printf("ECC needs a full sector read (adr: %lx size %lx)\n",
- (long) from, (long) len);
-
-#ifdef PSYCHO_DEBUG
- printf("DoC_Read (adr: %lx size %lx)\n", (long) from, (long) len);
-#endif
-
- /* Find the chip which is to be used and select it */
- mychip = &this->chips[shr(from, this->chipshift)];
-
- if (this->curfloor != mychip->floor) {
- DoC_SelectFloor(this, mychip->floor);
- DoC_SelectChip(this, mychip->chip);
- } else if (this->curchip != mychip->chip) {
- DoC_SelectChip(this, mychip->chip);
- }
-
- this->curfloor = mychip->floor;
- this->curchip = mychip->chip;
-
- DoC_Command(this,
- (!this->page256
- && (from & 0x100)) ? NAND_CMD_READ1 : NAND_CMD_READ0,
- CDSN_CTRL_WP);
- DoC_Address(this, ADDR_COLUMN_PAGE, from, CDSN_CTRL_WP,
- CDSN_CTRL_ECC_IO);
-
- if (eccbuf) {
- /* Prime the ECC engine */
- WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
- WriteDOC(DOC_ECC_EN, docptr, ECCConf);
- } else {
- /* disable the ECC engine */
- WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
- WriteDOC(DOC_ECC_DIS, docptr, ECCConf);
- }
-
- /* treat crossing 256-byte sector for 2M x 8bits devices */
- if (this->page256 && from + len > (from | 0xff) + 1) {
- len256 = (from | 0xff) + 1 - from;
- DoC_ReadBuf(this, buf, len256);
-
- DoC_Command(this, NAND_CMD_READ0, CDSN_CTRL_WP);
- DoC_Address(this, ADDR_COLUMN_PAGE, from + len256,
- CDSN_CTRL_WP, CDSN_CTRL_ECC_IO);
- }
-
- DoC_ReadBuf(this, &buf[len256], len - len256);
-
- /* Let the caller know we completed it */
- *retlen = len;
-
- if (eccbuf) {
- /* Read the ECC data through the DiskOnChip ECC logic */
- /* Note: this will work even with 2M x 8bit devices as */
- /* they have 8 bytes of OOB per 256 page. mf. */
- DoC_ReadBuf(this, eccbuf, 6);
-
- /* Flush the pipeline */
- if (DoC_is_Millennium(this)) {
- dummy = ReadDOC(docptr, ECCConf);
- dummy = ReadDOC(docptr, ECCConf);
- i = ReadDOC(docptr, ECCConf);
- } else {
- dummy = ReadDOC(docptr, 2k_ECCStatus);
- dummy = ReadDOC(docptr, 2k_ECCStatus);
- i = ReadDOC(docptr, 2k_ECCStatus);
- }
-
- /* Check the ECC Status */
- if (i & 0x80) {
- int nb_errors;
- /* There was an ECC error */
-#ifdef ECC_DEBUG
- printf("DiskOnChip ECC Error: Read at %lx\n", (long)from);
-#endif
- /* Read the ECC syndrom through the DiskOnChip ECC logic.
- These syndrome will be all ZERO when there is no error */
- for (i = 0; i < 6; i++) {
- syndrome[i] =
- ReadDOC(docptr, ECCSyndrome0 + i);
- }
- nb_errors = doc_decode_ecc(buf, syndrome);
-
-#ifdef ECC_DEBUG
- printf("Errors corrected: %x\n", nb_errors);
-#endif
- if (nb_errors < 0) {
- /* We return error, but have actually done the read. Not that
- this can be told to user-space, via sys_read(), but at least
- MTD-aware stuff can know about it by checking *retlen */
- printf("ECC Errors at %lx\n", (long)from);
- ret = DOC_EECC;
- }
- }
-
-#ifdef PSYCHO_DEBUG
- printf("ECC DATA at %lxB: %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X\n",
- (long)from, eccbuf[0], eccbuf[1], eccbuf[2],
- eccbuf[3], eccbuf[4], eccbuf[5]);
-#endif
-
- /* disable the ECC engine */
- WriteDOC(DOC_ECC_DIS, docptr , ECCConf);
- }
-
- /* according to 11.4.1, we need to wait for the busy line
- * drop if we read to the end of the page. */
- if(0 == ((from + *retlen) & 0x1ff))
- {
- DoC_WaitReady(this);
- }
-
- return ret;
-}
-
-int doc_write_ecc(struct DiskOnChip* this, loff_t to, size_t len,
- size_t * retlen, const u_char * buf,
- u_char * eccbuf)
-{
- int di; /* Yes, DI is a hangover from when I was disassembling the binary driver */
- unsigned long docptr;
- volatile char dummy;
- int len256 = 0;
- struct Nand *mychip;
-
- docptr = this->virtadr;
-
- /* Don't allow write past end of device */
- if (to >= this->totlen) {
- puts ("Out of flash\n");
- return DOC_EINVAL;
- }
-
- /* Don't allow a single write to cross a 512-byte block boundary */
- if (to + len > ((to | 0x1ff) + 1))
- len = ((to | 0x1ff) + 1) - to;
-
- /* The ECC will not be calculated correctly if less than 512 is written */
- if (len != 0x200 && eccbuf)
- printf("ECC needs a full sector write (adr: %lx size %lx)\n",
- (long) to, (long) len);
-
- /* printf("DoC_Write (adr: %lx size %lx)\n", (long) to, (long) len); */
-
- /* Find the chip which is to be used and select it */
- mychip = &this->chips[shr(to, this->chipshift)];
-
- if (this->curfloor != mychip->floor) {
- DoC_SelectFloor(this, mychip->floor);
- DoC_SelectChip(this, mychip->chip);
- } else if (this->curchip != mychip->chip) {
- DoC_SelectChip(this, mychip->chip);
- }
-
- this->curfloor = mychip->floor;
- this->curchip = mychip->chip;
-
- /* Set device to main plane of flash */
- DoC_Command(this, NAND_CMD_RESET, CDSN_CTRL_WP);
- DoC_Command(this,
- (!this->page256
- && (to & 0x100)) ? NAND_CMD_READ1 : NAND_CMD_READ0,
- CDSN_CTRL_WP);
-
- DoC_Command(this, NAND_CMD_SEQIN, 0);
- DoC_Address(this, ADDR_COLUMN_PAGE, to, 0, CDSN_CTRL_ECC_IO);
-
- if (eccbuf) {
- /* Prime the ECC engine */
- WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
- WriteDOC(DOC_ECC_EN | DOC_ECC_RW, docptr, ECCConf);
- } else {
- /* disable the ECC engine */
- WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
- WriteDOC(DOC_ECC_DIS, docptr, ECCConf);
- }
-
- /* treat crossing 256-byte sector for 2M x 8bits devices */
- if (this->page256 && to + len > (to | 0xff) + 1) {
- len256 = (to | 0xff) + 1 - to;
- DoC_WriteBuf(this, buf, len256);
-
- DoC_Command(this, NAND_CMD_PAGEPROG, 0);
-
- DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP);
- /* There's an implicit DoC_WaitReady() in DoC_Command */
-
- dummy = ReadDOC(docptr, CDSNSlowIO);
- DoC_Delay(this, 2);
-
- if (ReadDOC_(docptr, this->ioreg) & 1) {
- puts ("Error programming flash\n");
- /* Error in programming */
- *retlen = 0;
- return DOC_EIO;
- }
-
- DoC_Command(this, NAND_CMD_SEQIN, 0);
- DoC_Address(this, ADDR_COLUMN_PAGE, to + len256, 0,
- CDSN_CTRL_ECC_IO);
- }
-
- DoC_WriteBuf(this, &buf[len256], len - len256);
-
- if (eccbuf) {
- WriteDOC(CDSN_CTRL_ECC_IO | CDSN_CTRL_CE, docptr,
- CDSNControl);
-
- if (DoC_is_Millennium(this)) {
- WriteDOC(0, docptr, NOP);
- WriteDOC(0, docptr, NOP);
- WriteDOC(0, docptr, NOP);
- } else {
- WriteDOC_(0, docptr, this->ioreg);
- WriteDOC_(0, docptr, this->ioreg);
- WriteDOC_(0, docptr, this->ioreg);
- }
-
- /* Read the ECC data through the DiskOnChip ECC logic */
- for (di = 0; di < 6; di++) {
- eccbuf[di] = ReadDOC(docptr, ECCSyndrome0 + di);
- }
-
- /* Reset the ECC engine */
- WriteDOC(DOC_ECC_DIS, docptr, ECCConf);
-
-#ifdef PSYCHO_DEBUG
- printf
- ("OOB data at %lx is %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X\n",
- (long) to, eccbuf[0], eccbuf[1], eccbuf[2], eccbuf[3],
- eccbuf[4], eccbuf[5]);
-#endif
- }
-
- DoC_Command(this, NAND_CMD_PAGEPROG, 0);
-
- DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP);
- /* There's an implicit DoC_WaitReady() in DoC_Command */
-
- dummy = ReadDOC(docptr, CDSNSlowIO);
- DoC_Delay(this, 2);
-
- if (ReadDOC_(docptr, this->ioreg) & 1) {
- puts ("Error programming flash\n");
- /* Error in programming */
- *retlen = 0;
- return DOC_EIO;
- }
-
- /* Let the caller know we completed it */
- *retlen = len;
-
- if (eccbuf) {
- unsigned char x[8];
- size_t dummy;
- int ret;
-
- /* Write the ECC data to flash */
- for (di=0; di<6; di++)
- x[di] = eccbuf[di];
-
- x[6]=0x55;
- x[7]=0x55;
-
- ret = doc_write_oob(this, to, 8, &dummy, x);
- return ret;
- }
- return 0;
-}
-
-int doc_read_oob(struct DiskOnChip* this, loff_t ofs, size_t len,
- size_t * retlen, u_char * buf)
-{
- int len256 = 0, ret;
- unsigned long docptr;
- struct Nand *mychip;
-
- docptr = this->virtadr;
-
- mychip = &this->chips[shr(ofs, this->chipshift)];
-
- if (this->curfloor != mychip->floor) {
- DoC_SelectFloor(this, mychip->floor);
- DoC_SelectChip(this, mychip->chip);
- } else if (this->curchip != mychip->chip) {
- DoC_SelectChip(this, mychip->chip);
- }
- this->curfloor = mychip->floor;
- this->curchip = mychip->chip;
-
- /* update address for 2M x 8bit devices. OOB starts on the second */
- /* page to maintain compatibility with doc_read_ecc. */
- if (this->page256) {
- if (!(ofs & 0x8))
- ofs += 0x100;
- else
- ofs -= 0x8;
- }
-
- DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP);
- DoC_Address(this, ADDR_COLUMN_PAGE, ofs, CDSN_CTRL_WP, 0);
-
- /* treat crossing 8-byte OOB data for 2M x 8bit devices */
- /* Note: datasheet says it should automaticaly wrap to the */
- /* next OOB block, but it didn't work here. mf. */
- if (this->page256 && ofs + len > (ofs | 0x7) + 1) {
- len256 = (ofs | 0x7) + 1 - ofs;
- DoC_ReadBuf(this, buf, len256);
-
- DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP);
- DoC_Address(this, ADDR_COLUMN_PAGE, ofs & (~0x1ff),
- CDSN_CTRL_WP, 0);
- }
-
- DoC_ReadBuf(this, &buf[len256], len - len256);
-
- *retlen = len;
- /* Reading the full OOB data drops us off of the end of the page,
- * causing the flash device to go into busy mode, so we need
- * to wait until ready 11.4.1 and Toshiba TC58256FT docs */
-
- ret = DoC_WaitReady(this);
-
- return ret;
-
-}
-
-int doc_write_oob(struct DiskOnChip* this, loff_t ofs, size_t len,
- size_t * retlen, const u_char * buf)
-{
- int len256 = 0;
- unsigned long docptr = this->virtadr;
- struct Nand *mychip = &this->chips[shr(ofs, this->chipshift)];
- volatile int dummy;
-
-#ifdef PSYCHO_DEBUG
- printf("doc_write_oob(%lx, %d): %2.2X %2.2X %2.2X %2.2X ... %2.2X %2.2X .. %2.2X %2.2X\n",
- (long)ofs, len, buf[0], buf[1], buf[2], buf[3],
- buf[8], buf[9], buf[14],buf[15]);
-#endif
-
- /* Find the chip which is to be used and select it */
- if (this->curfloor != mychip->floor) {
- DoC_SelectFloor(this, mychip->floor);
- DoC_SelectChip(this, mychip->chip);
- } else if (this->curchip != mychip->chip) {
- DoC_SelectChip(this, mychip->chip);
- }
- this->curfloor = mychip->floor;
- this->curchip = mychip->chip;
-
- /* disable the ECC engine */
- WriteDOC (DOC_ECC_RESET, docptr, ECCConf);
- WriteDOC (DOC_ECC_DIS, docptr, ECCConf);
-
- /* Reset the chip, see Software Requirement 11.4 item 1. */
- DoC_Command(this, NAND_CMD_RESET, CDSN_CTRL_WP);
-
- /* issue the Read2 command to set the pointer to the Spare Data Area. */
- DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP);
-
- /* update address for 2M x 8bit devices. OOB starts on the second */
- /* page to maintain compatibility with doc_read_ecc. */
- if (this->page256) {
- if (!(ofs & 0x8))
- ofs += 0x100;
- else
- ofs -= 0x8;
- }
-
- /* issue the Serial Data In command to initial the Page Program process */
- DoC_Command(this, NAND_CMD_SEQIN, 0);
- DoC_Address(this, ADDR_COLUMN_PAGE, ofs, 0, 0);
-
- /* treat crossing 8-byte OOB data for 2M x 8bit devices */
- /* Note: datasheet says it should automaticaly wrap to the */
- /* next OOB block, but it didn't work here. mf. */
- if (this->page256 && ofs + len > (ofs | 0x7) + 1) {
- len256 = (ofs | 0x7) + 1 - ofs;
- DoC_WriteBuf(this, buf, len256);
-
- DoC_Command(this, NAND_CMD_PAGEPROG, 0);
- DoC_Command(this, NAND_CMD_STATUS, 0);
- /* DoC_WaitReady() is implicit in DoC_Command */
-
- dummy = ReadDOC(docptr, CDSNSlowIO);
- DoC_Delay(this, 2);
-
- if (ReadDOC_(docptr, this->ioreg) & 1) {
- puts ("Error programming oob data\n");
- /* There was an error */
- *retlen = 0;
- return DOC_EIO;
- }
- DoC_Command(this, NAND_CMD_SEQIN, 0);
- DoC_Address(this, ADDR_COLUMN_PAGE, ofs & (~0x1ff), 0, 0);
- }
-
- DoC_WriteBuf(this, &buf[len256], len - len256);
-
- DoC_Command(this, NAND_CMD_PAGEPROG, 0);
- DoC_Command(this, NAND_CMD_STATUS, 0);
- /* DoC_WaitReady() is implicit in DoC_Command */
-
- dummy = ReadDOC(docptr, CDSNSlowIO);
- DoC_Delay(this, 2);
-
- if (ReadDOC_(docptr, this->ioreg) & 1) {
- puts ("Error programming oob data\n");
- /* There was an error */
- *retlen = 0;
- return DOC_EIO;
- }
-
- *retlen = len;
- return 0;
-
-}
-
-int doc_erase(struct DiskOnChip* this, loff_t ofs, size_t len)
-{
- volatile int dummy;
- unsigned long docptr;
- struct Nand *mychip;
-
- if (ofs & (this->erasesize-1) || len & (this->erasesize-1)) {
- puts ("Offset and size must be sector aligned\n");
- return DOC_EINVAL;
- }
-
- docptr = this->virtadr;
-
- /* FIXME: Do this in the background. Use timers or schedule_task() */
- while(len) {
- mychip = &this->chips[shr(ofs, this->chipshift)];
-
- if (this->curfloor != mychip->floor) {
- DoC_SelectFloor(this, mychip->floor);
- DoC_SelectChip(this, mychip->chip);
- } else if (this->curchip != mychip->chip) {
- DoC_SelectChip(this, mychip->chip);
- }
- this->curfloor = mychip->floor;
- this->curchip = mychip->chip;
-
- DoC_Command(this, NAND_CMD_ERASE1, 0);
- DoC_Address(this, ADDR_PAGE, ofs, 0, 0);
- DoC_Command(this, NAND_CMD_ERASE2, 0);
-
- DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP);
-
- dummy = ReadDOC(docptr, CDSNSlowIO);
- DoC_Delay(this, 2);
-
- if (ReadDOC_(docptr, this->ioreg) & 1) {
- printf("Error erasing at 0x%lx\n", (long)ofs);
- /* There was an error */
- goto callback;
- }
- ofs += this->erasesize;
- len -= this->erasesize;
- }
-
- callback:
- return 0;
-}
-
-static inline int doccheck(unsigned long potential, unsigned long physadr)
-{
- unsigned long window=potential;
- unsigned char tmp, ChipID;
-#ifndef DOC_PASSIVE_PROBE
- unsigned char tmp2;
-#endif
-
- /* Routine copied from the Linux DOC driver */
-
-#ifdef CONFIG_SYS_DOCPROBE_55AA
- /* Check for 0x55 0xAA signature at beginning of window,
- this is no longer true once we remove the IPL (for Millennium */
- if (ReadDOC(window, Sig1) != 0x55 || ReadDOC(window, Sig2) != 0xaa)
- return 0;
-#endif /* CONFIG_SYS_DOCPROBE_55AA */
-
-#ifndef DOC_PASSIVE_PROBE
- /* It's not possible to cleanly detect the DiskOnChip - the
- * bootup procedure will put the device into reset mode, and
- * it's not possible to talk to it without actually writing
- * to the DOCControl register. So we store the current contents
- * of the DOCControl register's location, in case we later decide
- * that it's not a DiskOnChip, and want to put it back how we
- * found it.
- */
- tmp2 = ReadDOC(window, DOCControl);
-
- /* Reset the DiskOnChip ASIC */
- WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_RESET,
- window, DOCControl);
- WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_RESET,
- window, DOCControl);
-
- /* Enable the DiskOnChip ASIC */
- WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_NORMAL,
- window, DOCControl);
- WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_NORMAL,
- window, DOCControl);
-#endif /* !DOC_PASSIVE_PROBE */
-
- ChipID = ReadDOC(window, ChipID);
-
- switch (ChipID) {
- case DOC_ChipID_Doc2k:
- /* Check the TOGGLE bit in the ECC register */
- tmp = ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT;
- if ((ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT) != tmp)
- return ChipID;
- break;
-
- case DOC_ChipID_DocMil:
- /* Check the TOGGLE bit in the ECC register */
- tmp = ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT;
- if ((ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT) != tmp)
- return ChipID;
- break;
-
- default:
-#ifndef CONFIG_SYS_DOCPROBE_55AA
-/*
- * if the ID isn't the DoC2000 or DoCMillenium ID, so we can assume
- * the DOC is missing
- */
-# if 0
- printf("Possible DiskOnChip with unknown ChipID %2.2X found at 0x%lx\n",
- ChipID, physadr);
-# endif
-#endif
-#ifndef DOC_PASSIVE_PROBE
- /* Put back the contents of the DOCControl register, in case it's not
- * actually a DiskOnChip.
- */
- WriteDOC(tmp2, window, DOCControl);
-#endif
- return 0;
- }
-
- puts ("DiskOnChip failed TOGGLE test, dropping.\n");
-
-#ifndef DOC_PASSIVE_PROBE
- /* Put back the contents of the DOCControl register: it's not a DiskOnChip */
- WriteDOC(tmp2, window, DOCControl);
-#endif
- return 0;
-}
-
-void doc_probe(unsigned long physadr)
-{
- struct DiskOnChip *this = NULL;
- int i=0, ChipID;
-
- if ((ChipID = doccheck(physadr, physadr))) {
-
- for (i=0; i<CONFIG_SYS_MAX_DOC_DEVICE; i++) {
- if (doc_dev_desc[i].ChipID == DOC_ChipID_UNKNOWN) {
- this = doc_dev_desc + i;
- break;
- }
- }
-
- if (!this) {
- puts ("Cannot allocate memory for data structures.\n");
- return;
- }
-
- if (curr_device == -1)
- curr_device = i;
-
- memset((char *)this, 0, sizeof(struct DiskOnChip));
-
- this->virtadr = physadr;
- this->physadr = physadr;
- this->ChipID = ChipID;
-
- DoC2k_init(this);
- } else {
- puts ("No DiskOnChip found\n");
- }
-}
-#else
-void doc_probe(unsigned long physadr) {}
-#endif
+/*
+ * Driver for Disk-On-Chip 2000 and Millennium
+ * (c) 1999 Machine Vision Holdings, Inc.
+ * (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org>
+ *
+ * $Id: cmd_doc.c,v 1.1.1.1 2009/03/25 22:21:56 kenagy Exp $
+ */
+
+#include <common.h>
+#include <config.h>
+#include <command.h>
+#include <malloc.h>
+#include <asm/io.h>
+#include <linux/mtd/nftl.h>
+#include <linux/mtd/doc2000.h>
+
+/*
+ * ! BROKEN !
+ *
+ * TODO: must be implemented and tested by someone with HW
+ */
+#if 0
+#ifdef CONFIG_SYS_DOC_SUPPORT_2000
+#define DoC_is_2000(doc) (doc->ChipID == DOC_ChipID_Doc2k)
+#else
+#define DoC_is_2000(doc) (0)
+#endif
+
+#ifdef CONFIG_SYS_DOC_SUPPORT_MILLENNIUM
+#define DoC_is_Millennium(doc) (doc->ChipID == DOC_ChipID_DocMil)
+#else
+#define DoC_is_Millennium(doc) (0)
+#endif
+
+/* CONFIG_SYS_DOC_PASSIVE_PROBE:
+ In order to ensure that the BIOS checksum is correct at boot time, and
+ hence that the onboard BIOS extension gets executed, the DiskOnChip
+ goes into reset mode when it is read sequentially: all registers
+ return 0xff until the chip is woken up again by writing to the
+ DOCControl register.
+
+ Unfortunately, this means that the probe for the DiskOnChip is unsafe,
+ because one of the first things it does is write to where it thinks
+ the DOCControl register should be - which may well be shared memory
+ for another device. I've had machines which lock up when this is
+ attempted. Hence the possibility to do a passive probe, which will fail
+ to detect a chip in reset mode, but is at least guaranteed not to lock
+ the machine.
+
+ If you have this problem, uncomment the following line:
+#define CONFIG_SYS_DOC_PASSIVE_PROBE
+*/
+
+#undef DOC_DEBUG
+#undef ECC_DEBUG
+#undef PSYCHO_DEBUG
+#undef NFTL_DEBUG
+
+static struct DiskOnChip doc_dev_desc[CONFIG_SYS_MAX_DOC_DEVICE];
+
+/* Current DOC Device */
+static int curr_device = -1;
+
+/* Supported NAND flash devices */
+static struct nand_flash_dev nand_flash_ids[] = {
+ {"Toshiba TC5816BDC", NAND_MFR_TOSHIBA, 0x64, 21, 1, 2, 0x1000, 0},
+ {"Toshiba TC5832DC", NAND_MFR_TOSHIBA, 0x6b, 22, 0, 2, 0x2000, 0},
+ {"Toshiba TH58V128DC", NAND_MFR_TOSHIBA, 0x73, 24, 0, 2, 0x4000, 0},
+ {"Toshiba TC58256FT/DC", NAND_MFR_TOSHIBA, 0x75, 25, 0, 2, 0x4000, 0},
+ {"Toshiba TH58512FT", NAND_MFR_TOSHIBA, 0x76, 26, 0, 3, 0x4000, 0},
+ {"Toshiba TC58V32DC", NAND_MFR_TOSHIBA, 0xe5, 22, 0, 2, 0x2000, 0},
+ {"Toshiba TC58V64AFT/DC", NAND_MFR_TOSHIBA, 0xe6, 23, 0, 2, 0x2000, 0},
+ {"Toshiba TC58V16BDC", NAND_MFR_TOSHIBA, 0xea, 21, 1, 2, 0x1000, 0},
+ {"Toshiba TH58100FT", NAND_MFR_TOSHIBA, 0x79, 27, 0, 3, 0x4000, 0},
+ {"Samsung KM29N16000", NAND_MFR_SAMSUNG, 0x64, 21, 1, 2, 0x1000, 0},
+ {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0x6b, 22, 0, 2, 0x2000, 0},
+ {"Samsung KM29U128T", NAND_MFR_SAMSUNG, 0x73, 24, 0, 2, 0x4000, 0},
+ {"Samsung KM29U256T", NAND_MFR_SAMSUNG, 0x75, 25, 0, 2, 0x4000, 0},
+ {"Samsung unknown 64Mb", NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000, 0},
+ {"Samsung KM29W32000", NAND_MFR_SAMSUNG, 0xe3, 22, 0, 2, 0x2000, 0},
+ {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0xe5, 22, 0, 2, 0x2000, 0},
+ {"Samsung KM29U64000", NAND_MFR_SAMSUNG, 0xe6, 23, 0, 2, 0x2000, 0},
+ {"Samsung KM29W16000", NAND_MFR_SAMSUNG, 0xea, 21, 1, 2, 0x1000, 0},
+ {"Samsung K9F5616Q0C", NAND_MFR_SAMSUNG, 0x45, 25, 0, 2, 0x4000, 1},
+ {"Samsung K9K1216Q0C", NAND_MFR_SAMSUNG, 0x46, 26, 0, 3, 0x4000, 1},
+ {"Samsung K9F1G08U0M", NAND_MFR_SAMSUNG, 0xf1, 27, 0, 2, 0, 0},
+ {NULL,}
+};
+
+/* ------------------------------------------------------------------------- */
+
+int do_doc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ int rcode = 0;
+
+ switch (argc) {
+ case 0:
+ case 1:
+ cmd_usage(cmdtp);
+ return 1;
+ case 2:
+ if (strcmp(argv[1],"info") == 0) {
+ int i;
+
+ putc ('\n');
+
+ for (i=0; i<CONFIG_SYS_MAX_DOC_DEVICE; ++i) {
+ if(doc_dev_desc[i].ChipID == DOC_ChipID_UNKNOWN)
+ continue; /* list only known devices */
+ printf ("Device %d: ", i);
+ doc_print(&doc_dev_desc[i]);
+ }
+ return 0;
+
+ } else if (strcmp(argv[1],"device") == 0) {
+ if ((curr_device < 0) || (curr_device >= CONFIG_SYS_MAX_DOC_DEVICE)) {
+ puts ("\nno devices available\n");
+ return 1;
+ }
+ printf ("\nDevice %d: ", curr_device);
+ doc_print(&doc_dev_desc[curr_device]);
+ return 0;
+ }
+ cmd_usage(cmdtp);
+ return 1;
+ case 3:
+ if (strcmp(argv[1],"device") == 0) {
+ int dev = (int)simple_strtoul(argv[2], NULL, 10);
+
+ printf ("\nDevice %d: ", dev);
+ if (dev >= CONFIG_SYS_MAX_DOC_DEVICE) {
+ puts ("unknown device\n");
+ return 1;
+ }
+ doc_print(&doc_dev_desc[dev]);
+ /*doc_print (dev);*/
+
+ if (doc_dev_desc[dev].ChipID == DOC_ChipID_UNKNOWN) {
+ return 1;
+ }
+
+ curr_device = dev;
+
+ puts ("... is now current device\n");
+
+ return 0;
+ }
+
+ cmd_usage(cmdtp);
+ return 1;
+ default:
+ /* at least 4 args */
+
+ if (strcmp(argv[1],"read") == 0 || strcmp(argv[1],"write") == 0) {
+ ulong addr = simple_strtoul(argv[2], NULL, 16);
+ ulong off = simple_strtoul(argv[3], NULL, 16);
+ ulong size = simple_strtoul(argv[4], NULL, 16);
+ int cmd = (strcmp(argv[1],"read") == 0);
+ int ret, total;
+
+ printf ("\nDOC %s: device %d offset %ld, size %ld ... ",
+ cmd ? "read" : "write", curr_device, off, size);
+
+ ret = doc_rw(doc_dev_desc + curr_device, cmd, off, size,
+ (size_t *)&total, (u_char*)addr);
+
+ printf ("%d bytes %s: %s\n", total, cmd ? "read" : "write",
+ ret ? "ERROR" : "OK");
+
+ return ret;
+ } else if (strcmp(argv[1],"erase") == 0) {
+ ulong off = simple_strtoul(argv[2], NULL, 16);
+ ulong size = simple_strtoul(argv[3], NULL, 16);
+ int ret;
+
+ printf ("\nDOC erase: device %d offset %ld, size %ld ... ",
+ curr_device, off, size);
+
+ ret = doc_erase (doc_dev_desc + curr_device, off, size);
+
+ printf("%s\n", ret ? "ERROR" : "OK");
+
+ return ret;
+ } else {
+ cmd_usage(cmdtp);
+ rcode = 1;
+ }
+
+ return rcode;
+ }
+}
+U_BOOT_CMD(
+ doc, 5, 1, do_doc,
+ "Disk-On-Chip sub-system",
+ "info - show available DOC devices\n"
+ "doc device [dev] - show or set current device\n"
+ "doc read addr off size\n"
+ "doc write addr off size - read/write `size'"
+ " bytes starting at offset `off'\n"
+ " to/from memory address `addr'\n"
+ "doc erase off size - erase `size' bytes of DOC from offset `off'\n"
+);
+
+int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ char *boot_device = NULL;
+ char *ep;
+ int dev;
+ ulong cnt;
+ ulong addr;
+ ulong offset = 0;
+ image_header_t *hdr;
+ int rcode = 0;
+#if defined(CONFIG_FIT)
+ const void *fit_hdr = NULL;
+#endif
+
+ show_boot_progress (34);
+ switch (argc) {
+ case 1:
+ addr = CONFIG_SYS_LOAD_ADDR;
+ boot_device = getenv ("bootdevice");
+ break;
+ case 2:
+ addr = simple_strtoul(argv[1], NULL, 16);
+ boot_device = getenv ("bootdevice");
+ break;
+ case 3:
+ addr = simple_strtoul(argv[1], NULL, 16);
+ boot_device = argv[2];
+ break;
+ case 4:
+ addr = simple_strtoul(argv[1], NULL, 16);
+ boot_device = argv[2];
+ offset = simple_strtoul(argv[3], NULL, 16);
+ break;
+ default:
+ cmd_usage(cmdtp);
+ show_boot_progress (-35);
+ return 1;
+ }
+
+ show_boot_progress (35);
+ if (!boot_device) {
+ puts ("\n** No boot device **\n");
+ show_boot_progress (-36);
+ return 1;
+ }
+ show_boot_progress (36);
+
+ dev = simple_strtoul(boot_device, &ep, 16);
+
+ if ((dev >= CONFIG_SYS_MAX_DOC_DEVICE) ||
+ (doc_dev_desc[dev].ChipID == DOC_ChipID_UNKNOWN)) {
+ printf ("\n** Device %d not available\n", dev);
+ show_boot_progress (-37);
+ return 1;
+ }
+ show_boot_progress (37);
+
+ printf ("\nLoading from device %d: %s at 0x%lX (offset 0x%lX)\n",
+ dev, doc_dev_desc[dev].name, doc_dev_desc[dev].physadr,
+ offset);
+
+ if (doc_rw (doc_dev_desc + dev, 1, offset,
+ SECTORSIZE, NULL, (u_char *)addr)) {
+ printf ("** Read error on %d\n", dev);
+ show_boot_progress (-38);
+ return 1;
+ }
+ show_boot_progress (38);
+
+ switch (genimg_get_format ((void *)addr)) {
+ case IMAGE_FORMAT_LEGACY:
+ hdr = (image_header_t *)addr;
+
+ image_print_contents (hdr);
+
+ cnt = image_get_image_size (hdr);
+ break;
+#if defined(CONFIG_FIT)
+ case IMAGE_FORMAT_FIT:
+ fit_hdr = (const void *)addr;
+ puts ("Fit image detected...\n");
+
+ cnt = fit_get_size (fit_hdr);
+ break;
+#endif
+ default:
+ show_boot_progress (-39);
+ puts ("** Unknown image type\n");
+ return 1;
+ }
+ show_boot_progress (39);
+
+ cnt -= SECTORSIZE;
+ if (doc_rw (doc_dev_desc + dev, 1, offset + SECTORSIZE, cnt,
+ NULL, (u_char *)(addr+SECTORSIZE))) {
+ printf ("** Read error on %d\n", dev);
+ show_boot_progress (-40);
+ return 1;
+ }
+ show_boot_progress (40);
+
+#if defined(CONFIG_FIT)
+ /* This cannot be done earlier, we need complete FIT image in RAM first */
+ if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT) {
+ if (!fit_check_format (fit_hdr)) {
+ show_boot_progress (-130);
+ puts ("** Bad FIT image format\n");
+ return 1;
+ }
+ show_boot_progress (131);
+ fit_print_contents (fit_hdr);
+ }
+#endif
+
+ /* Loading ok, update default load address */
+
+ load_addr = addr;
+
+ /* Check if we should attempt an auto-start */
+ if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
+ char *local_args[2];
+ extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
+
+ local_args[0] = argv[0];
+ local_args[1] = NULL;
+
+ printf ("Automatic boot of image at addr 0x%08lX ...\n", addr);
+
+ do_bootm (cmdtp, 0, 1, local_args);
+ rcode = 1;
+ }
+ return rcode;
+}
+
+U_BOOT_CMD(
+ docboot, 4, 1, do_docboot,
+ "boot from DOC device",
+ "loadAddr dev\n"
+);
+
+int doc_rw (struct DiskOnChip* this, int cmd,
+ loff_t from, size_t len,
+ size_t * retlen, u_char * buf)
+{
+ int noecc, ret = 0, n, total = 0;
+ char eccbuf[6];
+
+ while(len) {
+ /* The ECC will not be calculated correctly if
+ less than 512 is written or read */
+ noecc = (from != (from | 0x1ff) + 1) || (len < 0x200);
+
+ if (cmd)
+ ret = doc_read_ecc(this, from, len,
+ (size_t *)&n, (u_char*)buf,
+ noecc ? (uchar *)NULL : (uchar *)eccbuf);
+ else
+ ret = doc_write_ecc(this, from, len,
+ (size_t *)&n, (u_char*)buf,
+ noecc ? (uchar *)NULL : (uchar *)eccbuf);
+
+ if (ret)
+ break;
+
+ from += n;
+ buf += n;
+ total += n;
+ len -= n;
+ }
+
+ if (retlen)
+ *retlen = total;
+
+ return ret;
+}
+
+void doc_print(struct DiskOnChip *this) {
+ printf("%s at 0x%lX,\n"
+ "\t %d chip%s %s, size %d MB, \n"
+ "\t total size %ld MB, sector size %ld kB\n",
+ this->name, this->physadr, this->numchips,
+ this->numchips>1 ? "s" : "", this->chips_name,
+ 1 << (this->chipshift - 20),
+ this->totlen >> 20, this->erasesize >> 10);
+
+ if (this->nftl_found) {
+ struct NFTLrecord *nftl = &this->nftl;
+ unsigned long bin_size, flash_size;
+
+ bin_size = nftl->nb_boot_blocks * this->erasesize;
+ flash_size = (nftl->nb_blocks - nftl->nb_boot_blocks) * this->erasesize;
+
+ printf("\t NFTL boot record:\n"
+ "\t Binary partition: size %ld%s\n"
+ "\t Flash disk partition: size %ld%s, offset 0x%lx\n",
+ bin_size > (1 << 20) ? bin_size >> 20 : bin_size >> 10,
+ bin_size > (1 << 20) ? "MB" : "kB",
+ flash_size > (1 << 20) ? flash_size >> 20 : flash_size >> 10,
+ flash_size > (1 << 20) ? "MB" : "kB", bin_size);
+ } else {
+ puts ("\t No NFTL boot record found.\n");
+ }
+}
+
+/* ------------------------------------------------------------------------- */
+
+/* This function is needed to avoid calls of the __ashrdi3 function. */
+static int shr(int val, int shift) {
+ return val >> shift;
+}
+
+/* Perform the required delay cycles by reading from the appropriate register */
+static void DoC_Delay(struct DiskOnChip *doc, unsigned short cycles)
+{
+ volatile char dummy;
+ int i;
+
+ for (i = 0; i < cycles; i++) {
+ if (DoC_is_Millennium(doc))
+ dummy = ReadDOC(doc->virtadr, NOP);
+ else
+ dummy = ReadDOC(doc->virtadr, DOCStatus);
+ }
+
+}
+
+/* DOC_WaitReady: Wait for RDY line to be asserted by the flash chip */
+static int _DoC_WaitReady(struct DiskOnChip *doc)
+{
+ unsigned long docptr = doc->virtadr;
+ unsigned long start = get_timer(0);
+
+#ifdef PSYCHO_DEBUG
+ puts ("_DoC_WaitReady called for out-of-line wait\n");
+#endif
+
+ /* Out-of-line routine to wait for chip response */
+ while (!(ReadDOC(docptr, CDSNControl) & CDSN_CTRL_FR_B)) {
+#ifdef CONFIG_SYS_DOC_SHORT_TIMEOUT
+ /* it seems that after a certain time the DoC deasserts
+ * the CDSN_CTRL_FR_B although it is not ready...
+ * using a short timout solve this (timer increments every ms) */
+ if (get_timer(start) > 10) {
+ return DOC_ETIMEOUT;
+ }
+#else
+ if (get_timer(start) > 10 * 1000) {
+ puts ("_DoC_WaitReady timed out.\n");
+ return DOC_ETIMEOUT;
+ }
+#endif
+ udelay(1);
+ }
+
+ return 0;
+}
+
+static int DoC_WaitReady(struct DiskOnChip *doc)
+{
+ unsigned long docptr = doc->virtadr;
+ /* This is inline, to optimise the common case, where it's ready instantly */
+ int ret = 0;
+
+ /* 4 read form NOP register should be issued in prior to the read from CDSNControl
+ see Software Requirement 11.4 item 2. */
+ DoC_Delay(doc, 4);
+
+ if (!(ReadDOC(docptr, CDSNControl) & CDSN_CTRL_FR_B))
+ /* Call the out-of-line routine to wait */
+ ret = _DoC_WaitReady(doc);
+
+ /* issue 2 read from NOP register after reading from CDSNControl register
+ see Software Requirement 11.4 item 2. */
+ DoC_Delay(doc, 2);
+
+ return ret;
+}
+
+/* DoC_Command: Send a flash command to the flash chip through the CDSN Slow IO register to
+ bypass the internal pipeline. Each of 4 delay cycles (read from the NOP register) is
+ required after writing to CDSN Control register, see Software Requirement 11.4 item 3. */
+
+static inline int DoC_Command(struct DiskOnChip *doc, unsigned char command,
+ unsigned char xtraflags)
+{
+ unsigned long docptr = doc->virtadr;
+
+ if (DoC_is_2000(doc))
+ xtraflags |= CDSN_CTRL_FLASH_IO;
+
+ /* Assert the CLE (Command Latch Enable) line to the flash chip */
+ WriteDOC(xtraflags | CDSN_CTRL_CLE | CDSN_CTRL_CE, docptr, CDSNControl);
+ DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
+
+ if (DoC_is_Millennium(doc))
+ WriteDOC(command, docptr, CDSNSlowIO);
+
+ /* Send the command */
+ WriteDOC_(command, docptr, doc->ioreg);
+
+ /* Lower the CLE line */
+ WriteDOC(xtraflags | CDSN_CTRL_CE, docptr, CDSNControl);
+ DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
+
+ /* Wait for the chip to respond - Software requirement 11.4.1 (extended for any command) */
+ return DoC_WaitReady(doc);
+}
+
+/* DoC_Address: Set the current address for the flash chip through the CDSN Slow IO register to
+ bypass the internal pipeline. Each of 4 delay cycles (read from the NOP register) is
+ required after writing to CDSN Control register, see Software Requirement 11.4 item 3. */
+
+static int DoC_Address(struct DiskOnChip *doc, int numbytes, unsigned long ofs,
+ unsigned char xtraflags1, unsigned char xtraflags2)
+{
+ unsigned long docptr;
+ int i;
+
+ docptr = doc->virtadr;
+
+ if (DoC_is_2000(doc))
+ xtraflags1 |= CDSN_CTRL_FLASH_IO;
+
+ /* Assert the ALE (Address Latch Enable) line to the flash chip */
+ WriteDOC(xtraflags1 | CDSN_CTRL_ALE | CDSN_CTRL_CE, docptr, CDSNControl);
+
+ DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
+
+ /* Send the address */
+ /* Devices with 256-byte page are addressed as:
+ Column (bits 0-7), Page (bits 8-15, 16-23, 24-31)
+ * there is no device on the market with page256
+ and more than 24 bits.
+ Devices with 512-byte page are addressed as:
+ Column (bits 0-7), Page (bits 9-16, 17-24, 25-31)
+ * 25-31 is sent only if the chip support it.
+ * bit 8 changes the read command to be sent
+ (NAND_CMD_READ0 or NAND_CMD_READ1).
+ */
+
+ if (numbytes == ADDR_COLUMN || numbytes == ADDR_COLUMN_PAGE) {
+ if (DoC_is_Millennium(doc))
+ WriteDOC(ofs & 0xff, docptr, CDSNSlowIO);
+ WriteDOC_(ofs & 0xff, docptr, doc->ioreg);
+ }
+
+ if (doc->page256) {
+ ofs = ofs >> 8;
+ } else {
+ ofs = ofs >> 9;
+ }
+
+ if (numbytes == ADDR_PAGE || numbytes == ADDR_COLUMN_PAGE) {
+ for (i = 0; i < doc->pageadrlen; i++, ofs = ofs >> 8) {
+ if (DoC_is_Millennium(doc))
+ WriteDOC(ofs & 0xff, docptr, CDSNSlowIO);
+ WriteDOC_(ofs & 0xff, docptr, doc->ioreg);
+ }
+ }
+
+ DoC_Delay(doc, 2); /* Needed for some slow flash chips. mf. */
+
+ /* FIXME: The SlowIO's for millennium could be replaced by
+ a single WritePipeTerm here. mf. */
+
+ /* Lower the ALE line */
+ WriteDOC(xtraflags1 | xtraflags2 | CDSN_CTRL_CE, docptr,
+ CDSNControl);
+
+ DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
+
+ /* Wait for the chip to respond - Software requirement 11.4.1 */
+ return DoC_WaitReady(doc);
+}
+
+/* Read a buffer from DoC, taking care of Millennium oddities */
+static void DoC_ReadBuf(struct DiskOnChip *doc, u_char * buf, int len)
+{
+ volatile int dummy;
+ int modulus = 0xffff;
+ unsigned long docptr;
+ int i;
+
+ docptr = doc->virtadr;
+
+ if (len <= 0)
+ return;
+
+ if (DoC_is_Millennium(doc)) {
+ /* Read the data via the internal pipeline through CDSN IO register,
+ see Pipelined Read Operations 11.3 */
+ dummy = ReadDOC(docptr, ReadPipeInit);
+
+ /* Millennium should use the LastDataRead register - Pipeline Reads */
+ len--;
+
+ /* This is needed for correctly ECC calculation */
+ modulus = 0xff;
+ }
+
+ for (i = 0; i < len; i++)
+ buf[i] = ReadDOC_(docptr, doc->ioreg + (i & modulus));
+
+ if (DoC_is_Millennium(doc)) {
+ buf[i] = ReadDOC(docptr, LastDataRead);
+ }
+}
+
+/* Write a buffer to DoC, taking care of Millennium oddities */
+static void DoC_WriteBuf(struct DiskOnChip *doc, const u_char * buf, int len)
+{
+ unsigned long docptr;
+ int i;
+
+ docptr = doc->virtadr;
+
+ if (len <= 0)
+ return;
+
+ for (i = 0; i < len; i++)
+ WriteDOC_(buf[i], docptr, doc->ioreg + i);
+
+ if (DoC_is_Millennium(doc)) {
+ WriteDOC(0x00, docptr, WritePipeTerm);
+ }
+}
+
+
+/* DoC_SelectChip: Select a given flash chip within the current floor */
+
+static inline int DoC_SelectChip(struct DiskOnChip *doc, int chip)
+{
+ unsigned long docptr = doc->virtadr;
+
+ /* Software requirement 11.4.4 before writing DeviceSelect */
+ /* Deassert the CE line to eliminate glitches on the FCE# outputs */
+ WriteDOC(CDSN_CTRL_WP, docptr, CDSNControl);
+ DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
+
+ /* Select the individual flash chip requested */
+ WriteDOC(chip, docptr, CDSNDeviceSelect);
+ DoC_Delay(doc, 4);
+
+ /* Reassert the CE line */
+ WriteDOC(CDSN_CTRL_CE | CDSN_CTRL_FLASH_IO | CDSN_CTRL_WP, docptr,
+ CDSNControl);
+ DoC_Delay(doc, 4); /* Software requirement 11.4.3 for Millennium */
+
+ /* Wait for it to be ready */
+ return DoC_WaitReady(doc);
+}
+
+/* DoC_SelectFloor: Select a given floor (bank of flash chips) */
+
+static inline int DoC_SelectFloor(struct DiskOnChip *doc, int floor)
+{
+ unsigned long docptr = doc->virtadr;
+
+ /* Select the floor (bank) of chips required */
+ WriteDOC(floor, docptr, FloorSelect);
+
+ /* Wait for the chip to be ready */
+ return DoC_WaitReady(doc);
+}
+
+/* DoC_IdentChip: Identify a given NAND chip given {floor,chip} */
+
+static int DoC_IdentChip(struct DiskOnChip *doc, int floor, int chip)
+{
+ int mfr, id, i;
+ volatile char dummy;
+
+ /* Page in the required floor/chip */
+ DoC_SelectFloor(doc, floor);
+ DoC_SelectChip(doc, chip);
+
+ /* Reset the chip */
+ if (DoC_Command(doc, NAND_CMD_RESET, CDSN_CTRL_WP)) {
+#ifdef DOC_DEBUG
+ printf("DoC_Command (reset) for %d,%d returned true\n",
+ floor, chip);
+#endif
+ return 0;
+ }
+
+
+ /* Read the NAND chip ID: 1. Send ReadID command */
+ if (DoC_Command(doc, NAND_CMD_READID, CDSN_CTRL_WP)) {
+#ifdef DOC_DEBUG
+ printf("DoC_Command (ReadID) for %d,%d returned true\n",
+ floor, chip);
+#endif
+ return 0;
+ }
+
+ /* Read the NAND chip ID: 2. Send address byte zero */
+ DoC_Address(doc, ADDR_COLUMN, 0, CDSN_CTRL_WP, 0);
+
+ /* Read the manufacturer and device id codes from the device */
+
+ /* CDSN Slow IO register see Software Requirement 11.4 item 5. */
+ dummy = ReadDOC(doc->virtadr, CDSNSlowIO);
+ DoC_Delay(doc, 2);
+ mfr = ReadDOC_(doc->virtadr, doc->ioreg);
+
+ /* CDSN Slow IO register see Software Requirement 11.4 item 5. */
+ dummy = ReadDOC(doc->virtadr, CDSNSlowIO);
+ DoC_Delay(doc, 2);
+ id = ReadDOC_(doc->virtadr, doc->ioreg);
+
+ /* No response - return failure */
+ if (mfr == 0xff || mfr == 0)
+ return 0;
+
+ /* Check it's the same as the first chip we identified.
+ * M-Systems say that any given DiskOnChip device should only
+ * contain _one_ type of flash part, although that's not a
+ * hardware restriction. */
+ if (doc->mfr) {
+ if (doc->mfr == mfr && doc->id == id)
+ return 1; /* This is another the same the first */
+ else
+ printf("Flash chip at floor %d, chip %d is different:\n",
+ floor, chip);
+ }
+
+ /* Print and store the manufacturer and ID codes. */
+ for (i = 0; nand_flash_ids[i].name != NULL; i++) {
+ if (mfr == nand_flash_ids[i].manufacture_id &&
+ id == nand_flash_ids[i].model_id) {
+#ifdef DOC_DEBUG
+ printf("Flash chip found: Manufacturer ID: %2.2X, "
+ "Chip ID: %2.2X (%s)\n", mfr, id,
+ nand_flash_ids[i].name);
+#endif
+ if (!doc->mfr) {
+ doc->mfr = mfr;
+ doc->id = id;
+ doc->chipshift =
+ nand_flash_ids[i].chipshift;
+ doc->page256 = nand_flash_ids[i].page256;
+ doc->pageadrlen =
+ nand_flash_ids[i].pageadrlen;
+ doc->erasesize =
+ nand_flash_ids[i].erasesize;
+ doc->chips_name =
+ nand_flash_ids[i].name;
+ return 1;
+ }
+ return 0;
+ }
+ }
+
+
+#ifdef DOC_DEBUG
+ /* We haven't fully identified the chip. Print as much as we know. */
+ printf("Unknown flash chip found: %2.2X %2.2X\n",
+ id, mfr);
+#endif
+
+ return 0;
+}
+
+/* DoC_ScanChips: Find all NAND chips present in a DiskOnChip, and identify them */
+
+static void DoC_ScanChips(struct DiskOnChip *this)
+{
+ int floor, chip;
+ int numchips[MAX_FLOORS];
+ int maxchips = MAX_CHIPS;
+ int ret = 1;
+
+ this->numchips = 0;
+ this->mfr = 0;
+ this->id = 0;
+
+ if (DoC_is_Millennium(this))
+ maxchips = MAX_CHIPS_MIL;
+
+ /* For each floor, find the number of valid chips it contains */
+ for (floor = 0; floor < MAX_FLOORS; floor++) {
+ ret = 1;
+ numchips[floor] = 0;
+ for (chip = 0; chip < maxchips && ret != 0; chip++) {
+
+ ret = DoC_IdentChip(this, floor, chip);
+ if (ret) {
+ numchips[floor]++;
+ this->numchips++;
+ }
+ }
+ }
+
+ /* If there are none at all that we recognise, bail */
+ if (!this->numchips) {
+ puts ("No flash chips recognised.\n");
+ return;
+ }
+
+ /* Allocate an array to hold the information for each chip */
+ this->chips = malloc(sizeof(struct Nand) * this->numchips);
+ if (!this->chips) {
+ puts ("No memory for allocating chip info structures\n");
+ return;
+ }
+
+ ret = 0;
+
+ /* Fill out the chip array with {floor, chipno} for each
+ * detected chip in the device. */
+ for (floor = 0; floor < MAX_FLOORS; floor++) {
+ for (chip = 0; chip < numchips[floor]; chip++) {
+ this->chips[ret].floor = floor;
+ this->chips[ret].chip = chip;
+ this->chips[ret].curadr = 0;
+ this->chips[ret].curmode = 0x50;
+ ret++;
+ }
+ }
+
+ /* Calculate and print the total size of the device */
+ this->totlen = this->numchips * (1 << this->chipshift);
+
+#ifdef DOC_DEBUG
+ printf("%d flash chips found. Total DiskOnChip size: %ld MB\n",
+ this->numchips, this->totlen >> 20);
+#endif
+}
+
+/* find_boot_record: Find the NFTL Media Header and its Spare copy which contains the
+ * various device information of the NFTL partition and Bad Unit Table. Update
+ * the ReplUnitTable[] table accroding to the Bad Unit Table. ReplUnitTable[]
+ * is used for management of Erase Unit in other routines in nftl.c and nftlmount.c
+ */
+static int find_boot_record(struct NFTLrecord *nftl)
+{
+ struct nftl_uci1 h1;
+ struct nftl_oob oob;
+ unsigned int block, boot_record_count = 0;
+ int retlen;
+ u8 buf[SECTORSIZE];
+ struct NFTLMediaHeader *mh = &nftl->MediaHdr;
+ unsigned int i;
+
+ nftl->MediaUnit = BLOCK_NIL;
+ nftl->SpareMediaUnit = BLOCK_NIL;
+
+ /* search for a valid boot record */
+ for (block = 0; block < nftl->nb_blocks; block++) {
+ int ret;
+
+ /* Check for ANAND header first. Then can whinge if it's found but later
+ checks fail */
+ if ((ret = doc_read_ecc(nftl->mtd, block * nftl->EraseSize, SECTORSIZE,
+ (size_t *)&retlen, buf, NULL))) {
+ static int warncount = 5;
+
+ if (warncount) {
+ printf("Block read at 0x%x failed\n", block * nftl->EraseSize);
+ if (!--warncount)
+ puts ("Further failures for this block will not be printed\n");
+ }
+ continue;
+ }
+
+ if (retlen < 6 || memcmp(buf, "ANAND", 6)) {
+ /* ANAND\0 not found. Continue */
+#ifdef PSYCHO_DEBUG
+ printf("ANAND header not found at 0x%x\n", block * nftl->EraseSize);
+#endif
+ continue;
+ }
+
+#ifdef NFTL_DEBUG
+ printf("ANAND header found at 0x%x\n", block * nftl->EraseSize);
+#endif
+
+ /* To be safer with BIOS, also use erase mark as discriminant */
+ if ((ret = doc_read_oob(nftl->mtd, block * nftl->EraseSize + SECTORSIZE + 8,
+ 8, (size_t *)&retlen, (uchar *)&h1) < 0)) {
+#ifdef NFTL_DEBUG
+ printf("ANAND header found at 0x%x, but OOB data read failed\n",
+ block * nftl->EraseSize);
+#endif
+ continue;
+ }
+
+ /* OK, we like it. */
+
+ if (boot_record_count) {
+ /* We've already processed one. So we just check if
+ this one is the same as the first one we found */
+ if (memcmp(mh, buf, sizeof(struct NFTLMediaHeader))) {
+#ifdef NFTL_DEBUG
+ printf("NFTL Media Headers at 0x%x and 0x%x disagree.\n",
+ nftl->MediaUnit * nftl->EraseSize, block * nftl->EraseSize);
+#endif
+ /* if (debug) Print both side by side */
+ return -1;
+ }
+ if (boot_record_count == 1)
+ nftl->SpareMediaUnit = block;
+
+ boot_record_count++;
+ continue;
+ }
+
+ /* This is the first we've seen. Copy the media header structure into place */
+ memcpy(mh, buf, sizeof(struct NFTLMediaHeader));
+
+ /* Do some sanity checks on it */
+ if (mh->UnitSizeFactor == 0) {
+#ifdef NFTL_DEBUG
+ puts ("UnitSizeFactor 0x00 detected.\n"
+ "This violates the spec but we think we know what it means...\n");
+#endif
+ } else if (mh->UnitSizeFactor != 0xff) {
+ printf ("Sorry, we don't support UnitSizeFactor "
+ "of != 1 yet.\n");
+ return -1;
+ }
+
+ nftl->nb_boot_blocks = le16_to_cpu(mh->FirstPhysicalEUN);
+ if ((nftl->nb_boot_blocks + 2) >= nftl->nb_blocks) {
+ printf ("NFTL Media Header sanity check failed:\n"
+ "nb_boot_blocks (%d) + 2 > nb_blocks (%d)\n",
+ nftl->nb_boot_blocks, nftl->nb_blocks);
+ return -1;
+ }
+
+ nftl->numvunits = le32_to_cpu(mh->FormattedSize) / nftl->EraseSize;
+ if (nftl->numvunits > (nftl->nb_blocks - nftl->nb_boot_blocks - 2)) {
+ printf ("NFTL Media Header sanity check failed:\n"
+ "numvunits (%d) > nb_blocks (%d) - nb_boot_blocks(%d) - 2\n",
+ nftl->numvunits,
+ nftl->nb_blocks,
+ nftl->nb_boot_blocks);
+ return -1;
+ }
+
+ nftl->nr_sects = nftl->numvunits * (nftl->EraseSize / SECTORSIZE);
+
+ /* If we're not using the last sectors in the device for some reason,
+ reduce nb_blocks accordingly so we forget they're there */
+ nftl->nb_blocks = le16_to_cpu(mh->NumEraseUnits) + le16_to_cpu(mh->FirstPhysicalEUN);
+
+ /* read the Bad Erase Unit Table and modify ReplUnitTable[] accordingly */
+ for (i = 0; i < nftl->nb_blocks; i++) {
+ if ((i & (SECTORSIZE - 1)) == 0) {
+ /* read one sector for every SECTORSIZE of blocks */
+ if ((ret = doc_read_ecc(nftl->mtd, block * nftl->EraseSize +
+ i + SECTORSIZE, SECTORSIZE,
+ (size_t *)&retlen, buf, (uchar *)&oob)) < 0) {
+ puts ("Read of bad sector table failed\n");
+ return -1;
+ }
+ }
+ /* mark the Bad Erase Unit as RESERVED in ReplUnitTable */
+ if (buf[i & (SECTORSIZE - 1)] != 0xff)
+ nftl->ReplUnitTable[i] = BLOCK_RESERVED;
+ }
+
+ nftl->MediaUnit = block;
+ boot_record_count++;
+
+ } /* foreach (block) */
+
+ return boot_record_count?0:-1;
+}
+
+/* This routine is made available to other mtd code via
+ * inter_module_register. It must only be accessed through
+ * inter_module_get which will bump the use count of this module. The
+ * addresses passed back in mtd are valid as long as the use count of
+ * this module is non-zero, i.e. between inter_module_get and
+ * inter_module_put. Keith Owens <kaos@ocs.com.au> 29 Oct 2000.
+ */
+static void DoC2k_init(struct DiskOnChip* this)
+{
+ struct NFTLrecord *nftl;
+
+ switch (this->ChipID) {
+ case DOC_ChipID_Doc2k:
+ this->name = "DiskOnChip 2000";
+ this->ioreg = DoC_2k_CDSN_IO;
+ break;
+ case DOC_ChipID_DocMil:
+ this->name = "DiskOnChip Millennium";
+ this->ioreg = DoC_Mil_CDSN_IO;
+ break;
+ }
+
+#ifdef DOC_DEBUG
+ printf("%s found at address 0x%lX\n", this->name,
+ this->physadr);
+#endif
+
+ this->totlen = 0;
+ this->numchips = 0;
+
+ this->curfloor = -1;
+ this->curchip = -1;
+
+ /* Ident all the chips present. */
+ DoC_ScanChips(this);
+ if ((!this->numchips) || (!this->chips))
+ return;
+
+ nftl = &this->nftl;
+
+ /* Get physical parameters */
+ nftl->EraseSize = this->erasesize;
+ nftl->nb_blocks = this->totlen / this->erasesize;
+ nftl->mtd = this;
+
+ if (find_boot_record(nftl) != 0)
+ this->nftl_found = 0;
+ else
+ this->nftl_found = 1;
+
+ printf("%s @ 0x%lX, %ld MB\n", this->name, this->physadr, this->totlen >> 20);
+}
+
+int doc_read_ecc(struct DiskOnChip* this, loff_t from, size_t len,
+ size_t * retlen, u_char * buf, u_char * eccbuf)
+{
+ unsigned long docptr;
+ struct Nand *mychip;
+ unsigned char syndrome[6];
+ volatile char dummy;
+ int i, len256 = 0, ret=0;
+
+ docptr = this->virtadr;
+
+ /* Don't allow read past end of device */
+ if (from >= this->totlen) {
+ puts ("Out of flash\n");
+ return DOC_EINVAL;
+ }
+
+ /* Don't allow a single read to cross a 512-byte block boundary */
+ if (from + len > ((from | 0x1ff) + 1))
+ len = ((from | 0x1ff) + 1) - from;
+
+ /* The ECC will not be calculated correctly if less than 512 is read */
+ if (len != 0x200 && eccbuf)
+ printf("ECC needs a full sector read (adr: %lx size %lx)\n",
+ (long) from, (long) len);
+
+#ifdef PSYCHO_DEBUG
+ printf("DoC_Read (adr: %lx size %lx)\n", (long) from, (long) len);
+#endif
+
+ /* Find the chip which is to be used and select it */
+ mychip = &this->chips[shr(from, this->chipshift)];
+
+ if (this->curfloor != mychip->floor) {
+ DoC_SelectFloor(this, mychip->floor);
+ DoC_SelectChip(this, mychip->chip);
+ } else if (this->curchip != mychip->chip) {
+ DoC_SelectChip(this, mychip->chip);
+ }
+
+ this->curfloor = mychip->floor;
+ this->curchip = mychip->chip;
+
+ DoC_Command(this,
+ (!this->page256
+ && (from & 0x100)) ? NAND_CMD_READ1 : NAND_CMD_READ0,
+ CDSN_CTRL_WP);
+ DoC_Address(this, ADDR_COLUMN_PAGE, from, CDSN_CTRL_WP,
+ CDSN_CTRL_ECC_IO);
+
+ if (eccbuf) {
+ /* Prime the ECC engine */
+ WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
+ WriteDOC(DOC_ECC_EN, docptr, ECCConf);
+ } else {
+ /* disable the ECC engine */
+ WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
+ WriteDOC(DOC_ECC_DIS, docptr, ECCConf);
+ }
+
+ /* treat crossing 256-byte sector for 2M x 8bits devices */
+ if (this->page256 && from + len > (from | 0xff) + 1) {
+ len256 = (from | 0xff) + 1 - from;
+ DoC_ReadBuf(this, buf, len256);
+
+ DoC_Command(this, NAND_CMD_READ0, CDSN_CTRL_WP);
+ DoC_Address(this, ADDR_COLUMN_PAGE, from + len256,
+ CDSN_CTRL_WP, CDSN_CTRL_ECC_IO);
+ }
+
+ DoC_ReadBuf(this, &buf[len256], len - len256);
+
+ /* Let the caller know we completed it */
+ *retlen = len;
+
+ if (eccbuf) {
+ /* Read the ECC data through the DiskOnChip ECC logic */
+ /* Note: this will work even with 2M x 8bit devices as */
+ /* they have 8 bytes of OOB per 256 page. mf. */
+ DoC_ReadBuf(this, eccbuf, 6);
+
+ /* Flush the pipeline */
+ if (DoC_is_Millennium(this)) {
+ dummy = ReadDOC(docptr, ECCConf);
+ dummy = ReadDOC(docptr, ECCConf);
+ i = ReadDOC(docptr, ECCConf);
+ } else {
+ dummy = ReadDOC(docptr, 2k_ECCStatus);
+ dummy = ReadDOC(docptr, 2k_ECCStatus);
+ i = ReadDOC(docptr, 2k_ECCStatus);
+ }
+
+ /* Check the ECC Status */
+ if (i & 0x80) {
+ int nb_errors;
+ /* There was an ECC error */
+#ifdef ECC_DEBUG
+ printf("DiskOnChip ECC Error: Read at %lx\n", (long)from);
+#endif
+ /* Read the ECC syndrom through the DiskOnChip ECC logic.
+ These syndrome will be all ZERO when there is no error */
+ for (i = 0; i < 6; i++) {
+ syndrome[i] =
+ ReadDOC(docptr, ECCSyndrome0 + i);
+ }
+ nb_errors = doc_decode_ecc(buf, syndrome);
+
+#ifdef ECC_DEBUG
+ printf("Errors corrected: %x\n", nb_errors);
+#endif
+ if (nb_errors < 0) {
+ /* We return error, but have actually done the read. Not that
+ this can be told to user-space, via sys_read(), but at least
+ MTD-aware stuff can know about it by checking *retlen */
+ printf("ECC Errors at %lx\n", (long)from);
+ ret = DOC_EECC;
+ }
+ }
+
+#ifdef PSYCHO_DEBUG
+ printf("ECC DATA at %lxB: %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X\n",
+ (long)from, eccbuf[0], eccbuf[1], eccbuf[2],
+ eccbuf[3], eccbuf[4], eccbuf[5]);
+#endif
+
+ /* disable the ECC engine */
+ WriteDOC(DOC_ECC_DIS, docptr , ECCConf);
+ }
+
+ /* according to 11.4.1, we need to wait for the busy line
+ * drop if we read to the end of the page. */
+ if(0 == ((from + *retlen) & 0x1ff))
+ {
+ DoC_WaitReady(this);
+ }
+
+ return ret;
+}
+
+int doc_write_ecc(struct DiskOnChip* this, loff_t to, size_t len,
+ size_t * retlen, const u_char * buf,
+ u_char * eccbuf)
+{
+ int di; /* Yes, DI is a hangover from when I was disassembling the binary driver */
+ unsigned long docptr;
+ volatile char dummy;
+ int len256 = 0;
+ struct Nand *mychip;
+
+ docptr = this->virtadr;
+
+ /* Don't allow write past end of device */
+ if (to >= this->totlen) {
+ puts ("Out of flash\n");
+ return DOC_EINVAL;
+ }
+
+ /* Don't allow a single write to cross a 512-byte block boundary */
+ if (to + len > ((to | 0x1ff) + 1))
+ len = ((to | 0x1ff) + 1) - to;
+
+ /* The ECC will not be calculated correctly if less than 512 is written */
+ if (len != 0x200 && eccbuf)
+ printf("ECC needs a full sector write (adr: %lx size %lx)\n",
+ (long) to, (long) len);
+
+ /* printf("DoC_Write (adr: %lx size %lx)\n", (long) to, (long) len); */
+
+ /* Find the chip which is to be used and select it */
+ mychip = &this->chips[shr(to, this->chipshift)];
+
+ if (this->curfloor != mychip->floor) {
+ DoC_SelectFloor(this, mychip->floor);
+ DoC_SelectChip(this, mychip->chip);
+ } else if (this->curchip != mychip->chip) {
+ DoC_SelectChip(this, mychip->chip);
+ }
+
+ this->curfloor = mychip->floor;
+ this->curchip = mychip->chip;
+
+ /* Set device to main plane of flash */
+ DoC_Command(this, NAND_CMD_RESET, CDSN_CTRL_WP);
+ DoC_Command(this,
+ (!this->page256
+ && (to & 0x100)) ? NAND_CMD_READ1 : NAND_CMD_READ0,
+ CDSN_CTRL_WP);
+
+ DoC_Command(this, NAND_CMD_SEQIN, 0);
+ DoC_Address(this, ADDR_COLUMN_PAGE, to, 0, CDSN_CTRL_ECC_IO);
+
+ if (eccbuf) {
+ /* Prime the ECC engine */
+ WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
+ WriteDOC(DOC_ECC_EN | DOC_ECC_RW, docptr, ECCConf);
+ } else {
+ /* disable the ECC engine */
+ WriteDOC(DOC_ECC_RESET, docptr, ECCConf);
+ WriteDOC(DOC_ECC_DIS, docptr, ECCConf);
+ }
+
+ /* treat crossing 256-byte sector for 2M x 8bits devices */
+ if (this->page256 && to + len > (to | 0xff) + 1) {
+ len256 = (to | 0xff) + 1 - to;
+ DoC_WriteBuf(this, buf, len256);
+
+ DoC_Command(this, NAND_CMD_PAGEPROG, 0);
+
+ DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP);
+ /* There's an implicit DoC_WaitReady() in DoC_Command */
+
+ dummy = ReadDOC(docptr, CDSNSlowIO);
+ DoC_Delay(this, 2);
+
+ if (ReadDOC_(docptr, this->ioreg) & 1) {
+ puts ("Error programming flash\n");
+ /* Error in programming */
+ *retlen = 0;
+ return DOC_EIO;
+ }
+
+ DoC_Command(this, NAND_CMD_SEQIN, 0);
+ DoC_Address(this, ADDR_COLUMN_PAGE, to + len256, 0,
+ CDSN_CTRL_ECC_IO);
+ }
+
+ DoC_WriteBuf(this, &buf[len256], len - len256);
+
+ if (eccbuf) {
+ WriteDOC(CDSN_CTRL_ECC_IO | CDSN_CTRL_CE, docptr,
+ CDSNControl);
+
+ if (DoC_is_Millennium(this)) {
+ WriteDOC(0, docptr, NOP);
+ WriteDOC(0, docptr, NOP);
+ WriteDOC(0, docptr, NOP);
+ } else {
+ WriteDOC_(0, docptr, this->ioreg);
+ WriteDOC_(0, docptr, this->ioreg);
+ WriteDOC_(0, docptr, this->ioreg);
+ }
+
+ /* Read the ECC data through the DiskOnChip ECC logic */
+ for (di = 0; di < 6; di++) {
+ eccbuf[di] = ReadDOC(docptr, ECCSyndrome0 + di);
+ }
+
+ /* Reset the ECC engine */
+ WriteDOC(DOC_ECC_DIS, docptr, ECCConf);
+
+#ifdef PSYCHO_DEBUG
+ printf
+ ("OOB data at %lx is %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X\n",
+ (long) to, eccbuf[0], eccbuf[1], eccbuf[2], eccbuf[3],
+ eccbuf[4], eccbuf[5]);
+#endif
+ }
+
+ DoC_Command(this, NAND_CMD_PAGEPROG, 0);
+
+ DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP);
+ /* There's an implicit DoC_WaitReady() in DoC_Command */
+
+ dummy = ReadDOC(docptr, CDSNSlowIO);
+ DoC_Delay(this, 2);
+
+ if (ReadDOC_(docptr, this->ioreg) & 1) {
+ puts ("Error programming flash\n");
+ /* Error in programming */
+ *retlen = 0;
+ return DOC_EIO;
+ }
+
+ /* Let the caller know we completed it */
+ *retlen = len;
+
+ if (eccbuf) {
+ unsigned char x[8];
+ size_t dummy;
+ int ret;
+
+ /* Write the ECC data to flash */
+ for (di=0; di<6; di++)
+ x[di] = eccbuf[di];
+
+ x[6]=0x55;
+ x[7]=0x55;
+
+ ret = doc_write_oob(this, to, 8, &dummy, x);
+ return ret;
+ }
+ return 0;
+}
+
+int doc_read_oob(struct DiskOnChip* this, loff_t ofs, size_t len,
+ size_t * retlen, u_char * buf)
+{
+ int len256 = 0, ret;
+ unsigned long docptr;
+ struct Nand *mychip;
+
+ docptr = this->virtadr;
+
+ mychip = &this->chips[shr(ofs, this->chipshift)];
+
+ if (this->curfloor != mychip->floor) {
+ DoC_SelectFloor(this, mychip->floor);
+ DoC_SelectChip(this, mychip->chip);
+ } else if (this->curchip != mychip->chip) {
+ DoC_SelectChip(this, mychip->chip);
+ }
+ this->curfloor = mychip->floor;
+ this->curchip = mychip->chip;
+
+ /* update address for 2M x 8bit devices. OOB starts on the second */
+ /* page to maintain compatibility with doc_read_ecc. */
+ if (this->page256) {
+ if (!(ofs & 0x8))
+ ofs += 0x100;
+ else
+ ofs -= 0x8;
+ }
+
+ DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP);
+ DoC_Address(this, ADDR_COLUMN_PAGE, ofs, CDSN_CTRL_WP, 0);
+
+ /* treat crossing 8-byte OOB data for 2M x 8bit devices */
+ /* Note: datasheet says it should automaticaly wrap to the */
+ /* next OOB block, but it didn't work here. mf. */
+ if (this->page256 && ofs + len > (ofs | 0x7) + 1) {
+ len256 = (ofs | 0x7) + 1 - ofs;
+ DoC_ReadBuf(this, buf, len256);
+
+ DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP);
+ DoC_Address(this, ADDR_COLUMN_PAGE, ofs & (~0x1ff),
+ CDSN_CTRL_WP, 0);
+ }
+
+ DoC_ReadBuf(this, &buf[len256], len - len256);
+
+ *retlen = len;
+ /* Reading the full OOB data drops us off of the end of the page,
+ * causing the flash device to go into busy mode, so we need
+ * to wait until ready 11.4.1 and Toshiba TC58256FT docs */
+
+ ret = DoC_WaitReady(this);
+
+ return ret;
+
+}
+
+int doc_write_oob(struct DiskOnChip* this, loff_t ofs, size_t len,
+ size_t * retlen, const u_char * buf)
+{
+ int len256 = 0;
+ unsigned long docptr = this->virtadr;
+ struct Nand *mychip = &this->chips[shr(ofs, this->chipshift)];
+ volatile int dummy;
+
+#ifdef PSYCHO_DEBUG
+ printf("doc_write_oob(%lx, %d): %2.2X %2.2X %2.2X %2.2X ... %2.2X %2.2X .. %2.2X %2.2X\n",
+ (long)ofs, len, buf[0], buf[1], buf[2], buf[3],
+ buf[8], buf[9], buf[14],buf[15]);
+#endif
+
+ /* Find the chip which is to be used and select it */
+ if (this->curfloor != mychip->floor) {
+ DoC_SelectFloor(this, mychip->floor);
+ DoC_SelectChip(this, mychip->chip);
+ } else if (this->curchip != mychip->chip) {
+ DoC_SelectChip(this, mychip->chip);
+ }
+ this->curfloor = mychip->floor;
+ this->curchip = mychip->chip;
+
+ /* disable the ECC engine */
+ WriteDOC (DOC_ECC_RESET, docptr, ECCConf);
+ WriteDOC (DOC_ECC_DIS, docptr, ECCConf);
+
+ /* Reset the chip, see Software Requirement 11.4 item 1. */
+ DoC_Command(this, NAND_CMD_RESET, CDSN_CTRL_WP);
+
+ /* issue the Read2 command to set the pointer to the Spare Data Area. */
+ DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP);
+
+ /* update address for 2M x 8bit devices. OOB starts on the second */
+ /* page to maintain compatibility with doc_read_ecc. */
+ if (this->page256) {
+ if (!(ofs & 0x8))
+ ofs += 0x100;
+ else
+ ofs -= 0x8;
+ }
+
+ /* issue the Serial Data In command to initial the Page Program process */
+ DoC_Command(this, NAND_CMD_SEQIN, 0);
+ DoC_Address(this, ADDR_COLUMN_PAGE, ofs, 0, 0);
+
+ /* treat crossing 8-byte OOB data for 2M x 8bit devices */
+ /* Note: datasheet says it should automaticaly wrap to the */
+ /* next OOB block, but it didn't work here. mf. */
+ if (this->page256 && ofs + len > (ofs | 0x7) + 1) {
+ len256 = (ofs | 0x7) + 1 - ofs;
+ DoC_WriteBuf(this, buf, len256);
+
+ DoC_Command(this, NAND_CMD_PAGEPROG, 0);
+ DoC_Command(this, NAND_CMD_STATUS, 0);
+ /* DoC_WaitReady() is implicit in DoC_Command */
+
+ dummy = ReadDOC(docptr, CDSNSlowIO);
+ DoC_Delay(this, 2);
+
+ if (ReadDOC_(docptr, this->ioreg) & 1) {
+ puts ("Error programming oob data\n");
+ /* There was an error */
+ *retlen = 0;
+ return DOC_EIO;
+ }
+ DoC_Command(this, NAND_CMD_SEQIN, 0);
+ DoC_Address(this, ADDR_COLUMN_PAGE, ofs & (~0x1ff), 0, 0);
+ }
+
+ DoC_WriteBuf(this, &buf[len256], len - len256);
+
+ DoC_Command(this, NAND_CMD_PAGEPROG, 0);
+ DoC_Command(this, NAND_CMD_STATUS, 0);
+ /* DoC_WaitReady() is implicit in DoC_Command */
+
+ dummy = ReadDOC(docptr, CDSNSlowIO);
+ DoC_Delay(this, 2);
+
+ if (ReadDOC_(docptr, this->ioreg) & 1) {
+ puts ("Error programming oob data\n");
+ /* There was an error */
+ *retlen = 0;
+ return DOC_EIO;
+ }
+
+ *retlen = len;
+ return 0;
+
+}
+
+int doc_erase(struct DiskOnChip* this, loff_t ofs, size_t len)
+{
+ volatile int dummy;
+ unsigned long docptr;
+ struct Nand *mychip;
+
+ if (ofs & (this->erasesize-1) || len & (this->erasesize-1)) {
+ puts ("Offset and size must be sector aligned\n");
+ return DOC_EINVAL;
+ }
+
+ docptr = this->virtadr;
+
+ /* FIXME: Do this in the background. Use timers or schedule_task() */
+ while(len) {
+ mychip = &this->chips[shr(ofs, this->chipshift)];
+
+ if (this->curfloor != mychip->floor) {
+ DoC_SelectFloor(this, mychip->floor);
+ DoC_SelectChip(this, mychip->chip);
+ } else if (this->curchip != mychip->chip) {
+ DoC_SelectChip(this, mychip->chip);
+ }
+ this->curfloor = mychip->floor;
+ this->curchip = mychip->chip;
+
+ DoC_Command(this, NAND_CMD_ERASE1, 0);
+ DoC_Address(this, ADDR_PAGE, ofs, 0, 0);
+ DoC_Command(this, NAND_CMD_ERASE2, 0);
+
+ DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP);
+
+ dummy = ReadDOC(docptr, CDSNSlowIO);
+ DoC_Delay(this, 2);
+
+ if (ReadDOC_(docptr, this->ioreg) & 1) {
+ printf("Error erasing at 0x%lx\n", (long)ofs);
+ /* There was an error */
+ goto callback;
+ }
+ ofs += this->erasesize;
+ len -= this->erasesize;
+ }
+
+ callback:
+ return 0;
+}
+
+static inline int doccheck(unsigned long potential, unsigned long physadr)
+{
+ unsigned long window=potential;
+ unsigned char tmp, ChipID;
+#ifndef DOC_PASSIVE_PROBE
+ unsigned char tmp2;
+#endif
+
+ /* Routine copied from the Linux DOC driver */
+
+#ifdef CONFIG_SYS_DOCPROBE_55AA
+ /* Check for 0x55 0xAA signature at beginning of window,
+ this is no longer true once we remove the IPL (for Millennium */
+ if (ReadDOC(window, Sig1) != 0x55 || ReadDOC(window, Sig2) != 0xaa)
+ return 0;
+#endif /* CONFIG_SYS_DOCPROBE_55AA */
+
+#ifndef DOC_PASSIVE_PROBE
+ /* It's not possible to cleanly detect the DiskOnChip - the
+ * bootup procedure will put the device into reset mode, and
+ * it's not possible to talk to it without actually writing
+ * to the DOCControl register. So we store the current contents
+ * of the DOCControl register's location, in case we later decide
+ * that it's not a DiskOnChip, and want to put it back how we
+ * found it.
+ */
+ tmp2 = ReadDOC(window, DOCControl);
+
+ /* Reset the DiskOnChip ASIC */
+ WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_RESET,
+ window, DOCControl);
+ WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_RESET,
+ window, DOCControl);
+
+ /* Enable the DiskOnChip ASIC */
+ WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_NORMAL,
+ window, DOCControl);
+ WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_NORMAL,
+ window, DOCControl);
+#endif /* !DOC_PASSIVE_PROBE */
+
+ ChipID = ReadDOC(window, ChipID);
+
+ switch (ChipID) {
+ case DOC_ChipID_Doc2k:
+ /* Check the TOGGLE bit in the ECC register */
+ tmp = ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT;
+ if ((ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT) != tmp)
+ return ChipID;
+ break;
+
+ case DOC_ChipID_DocMil:
+ /* Check the TOGGLE bit in the ECC register */
+ tmp = ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT;
+ if ((ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT) != tmp)
+ return ChipID;
+ break;
+
+ default:
+#ifndef CONFIG_SYS_DOCPROBE_55AA
+/*
+ * if the ID isn't the DoC2000 or DoCMillenium ID, so we can assume
+ * the DOC is missing
+ */
+# if 0
+ printf("Possible DiskOnChip with unknown ChipID %2.2X found at 0x%lx\n",
+ ChipID, physadr);
+# endif
+#endif
+#ifndef DOC_PASSIVE_PROBE
+ /* Put back the contents of the DOCControl register, in case it's not
+ * actually a DiskOnChip.
+ */
+ WriteDOC(tmp2, window, DOCControl);
+#endif
+ return 0;
+ }
+
+ puts ("DiskOnChip failed TOGGLE test, dropping.\n");
+
+#ifndef DOC_PASSIVE_PROBE
+ /* Put back the contents of the DOCControl register: it's not a DiskOnChip */
+ WriteDOC(tmp2, window, DOCControl);
+#endif
+ return 0;
+}
+
+void doc_probe(unsigned long physadr)
+{
+ struct DiskOnChip *this = NULL;
+ int i=0, ChipID;
+
+ if ((ChipID = doccheck(physadr, physadr))) {
+
+ for (i=0; i<CONFIG_SYS_MAX_DOC_DEVICE; i++) {
+ if (doc_dev_desc[i].ChipID == DOC_ChipID_UNKNOWN) {
+ this = doc_dev_desc + i;
+ break;
+ }
+ }
+
+ if (!this) {
+ puts ("Cannot allocate memory for data structures.\n");
+ return;
+ }
+
+ if (curr_device == -1)
+ curr_device = i;
+
+ memset((char *)this, 0, sizeof(struct DiskOnChip));
+
+ this->virtadr = physadr;
+ this->physadr = physadr;
+ this->ChipID = ChipID;
+
+ DoC2k_init(this);
+ } else {
+ puts ("No DiskOnChip found\n");
+ }
+}
+#else
+void doc_probe(unsigned long physadr) {}
+#endif
diff -Naur u-boot-2009.03_orig/common/cmd_jffs2.c u-boot-2009.03/common/cmd_jffs2.c
--- u-boot-2009.03_orig/common/cmd_jffs2.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/common/cmd_jffs2.c 2009-03-31 14:50:04.678394400 -0700
@@ -1,2362 +1,2362 @@
-/*
- * (C) Copyright 2002
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * (C) Copyright 2002
- * Robert Schwebel, Pengutronix, <r.schwebel@pengutronix.de>
- *
- * (C) Copyright 2003
- * Kai-Uwe Bloem, Auerswald GmbH & Co KG, <linux-development@auerswald.de>
- *
- * (C) Copyright 2005
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * Added support for reading flash partition table from environment.
- * Parsing routines are based on driver/mtd/cmdline.c from the linux 2.4
- * kernel tree.
- *
- * $Id: cmdlinepart.c,v 1.17 2004/11/26 11:18:47 lavinen Exp $
- * Copyright 2002 SYSGO Real-Time Solutions GmbH
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- */
-
-/*
- * Three environment variables are used by the parsing routines:
- *
- * 'partition' - keeps current partition identifier
- *
- * partition := <part-id>
- * <part-id> := <dev-id>,part_num
- *
- *
- * 'mtdids' - linux kernel mtd device id <-> u-boot device id mapping
- *
- * mtdids=<idmap>[,<idmap>,...]
- *
- * <idmap> := <dev-id>=<mtd-id>
- * <dev-id> := 'nand'|'nor'|'onenand'<dev-num>
- * <dev-num> := mtd device number, 0...
- * <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)
- *
- *
- * 'mtdparts' - partition list
- *
- * mtdparts=mtdparts=<mtd-def>[;<mtd-def>...]
- *
- * <mtd-def> := <mtd-id>:<part-def>[,<part-def>...]
- * <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)
- * <part-def> := <size>[@<offset>][<name>][<ro-flag>]
- * <size> := standard linux memsize OR '-' to denote all remaining space
- * <offset> := partition start offset within the device
- * <name> := '(' NAME ')'
- * <ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel)
- *
- * Notes:
- * - each <mtd-id> used in mtdparts must albo exist in 'mtddis' mapping
- * - if the above variables are not set defaults for a given target are used
- *
- * Examples:
- *
- * 1 NOR Flash, with 1 single writable partition:
- * mtdids=nor0=edb7312-nor
- * mtdparts=mtdparts=edb7312-nor:-
- *
- * 1 NOR Flash with 2 partitions, 1 NAND with one
- * mtdids=nor0=edb7312-nor,nand0=edb7312-nand
- * mtdparts=mtdparts=edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home)
- *
- */
-
-/*
- * JFFS2/CRAMFS support
- */
-#include <common.h>
-#include <command.h>
-#include <malloc.h>
-#include <jffs2/jffs2.h>
-#include <linux/list.h>
-#include <linux/ctype.h>
-#include <cramfs/cramfs_fs.h>
-
-#if defined(CONFIG_CMD_NAND)
-#ifdef CONFIG_NAND_LEGACY
-#include <linux/mtd/nand_legacy.h>
-#else /* !CONFIG_NAND_LEGACY */
-#include <linux/mtd/nand.h>
-#include <nand.h>
-#endif /* !CONFIG_NAND_LEGACY */
-#endif
-
-#if defined(CONFIG_CMD_ONENAND)
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/onenand.h>
-#include <onenand_uboot.h>
-#endif
-
-/* enable/disable debugging messages */
-#define DEBUG_JFFS
-#undef DEBUG_JFFS
-
-#ifdef DEBUG_JFFS
-# define DEBUGF(fmt, args...) printf(fmt ,##args)
-#else
-# define DEBUGF(fmt, args...)
-#endif
-
-/* special size referring to all the remaining space in a partition */
-#define SIZE_REMAINING 0xFFFFFFFF
-
-/* special offset value, it is used when not provided by user
- *
- * this value is used temporarily during parsing, later such offests
- * are recalculated */
-#define OFFSET_NOT_SPECIFIED 0xFFFFFFFF
-
-/* minimum partition size */
-#define MIN_PART_SIZE 4096
-
-/* this flag needs to be set in part_info struct mask_flags
- * field for read-only partitions */
-#define MTD_WRITEABLE_CMD 1
-
-#ifdef CONFIG_JFFS2_CMDLINE
-/* default values for mtdids and mtdparts variables */
-#if defined(MTDIDS_DEFAULT)
-static const char *const mtdids_default = MTDIDS_DEFAULT;
-#else
-#warning "MTDIDS_DEFAULT not defined!"
-static const char *const mtdids_default = NULL;
-#endif
-
-#if defined(MTDPARTS_DEFAULT)
-static const char *const mtdparts_default = MTDPARTS_DEFAULT;
-#else
-#warning "MTDPARTS_DEFAULT not defined!"
-static const char *const mtdparts_default = NULL;
-#endif
-
-/* copies of last seen 'mtdids', 'mtdparts' and 'partition' env variables */
-#define MTDIDS_MAXLEN 128
-#define MTDPARTS_MAXLEN 512
-#define PARTITION_MAXLEN 16
-static char last_ids[MTDIDS_MAXLEN];
-static char last_parts[MTDPARTS_MAXLEN];
-static char last_partition[PARTITION_MAXLEN];
-
-/* low level jffs2 cache cleaning routine */
-extern void jffs2_free_cache(struct part_info *part);
-
-/* mtdids mapping list, filled by parse_ids() */
-struct list_head mtdids;
-
-/* device/partition list, parse_cmdline() parses into here */
-struct list_head devices;
-#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
-
-/* current active device and partition number */
-static struct mtd_device *current_dev = NULL;
-static u8 current_partnum = 0;
-
-#if defined(CONFIG_CMD_CRAMFS)
-extern int cramfs_check (struct part_info *info);
-extern int cramfs_load (char *loadoffset, struct part_info *info, char *filename);
-extern int cramfs_ls (struct part_info *info, char *filename);
-extern int cramfs_info (struct part_info *info);
-#else
-/* defining empty macros for function names is ugly but avoids ifdef clutter
- * all over the code */
-#define cramfs_check(x) (0)
-#define cramfs_load(x,y,z) (-1)
-#define cramfs_ls(x,y) (0)
-#define cramfs_info(x) (0)
-#endif
-
-static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num);
-
-/* command line only routines */
-#ifdef CONFIG_JFFS2_CMDLINE
-
-static struct mtdids* id_find_by_mtd_id(const char *mtd_id, unsigned int mtd_id_len);
-static int device_del(struct mtd_device *dev);
-
-/**
- * Parses a string into a number. The number stored at ptr is
- * potentially suffixed with K (for kilobytes, or 1024 bytes),
- * M (for megabytes, or 1048576 bytes), or G (for gigabytes, or
- * 1073741824). If the number is suffixed with K, M, or G, then
- * the return value is the number multiplied by one kilobyte, one
- * megabyte, or one gigabyte, respectively.
- *
- * @param ptr where parse begins
- * @param retptr output pointer to next char after parse completes (output)
- * @return resulting unsigned int
- */
-static unsigned long memsize_parse (const char *const ptr, const char **retptr)
-{
- unsigned long ret = simple_strtoul(ptr, (char **)retptr, 0);
-
- switch (**retptr) {
- case 'G':
- case 'g':
- ret <<= 10;
- case 'M':
- case 'm':
- ret <<= 10;
- case 'K':
- case 'k':
- ret <<= 10;
- (*retptr)++;
- default:
- break;
- }
-
- return ret;
-}
-
-/**
- * Format string describing supplied size. This routine does the opposite job
- * to memsize_parse(). Size in bytes is converted to string and if possible
- * shortened by using k (kilobytes), m (megabytes) or g (gigabytes) suffix.
- *
- * Note, that this routine does not check for buffer overflow, it's the caller
- * who must assure enough space.
- *
- * @param buf output buffer
- * @param size size to be converted to string
- */
-static void memsize_format(char *buf, u32 size)
-{
-#define SIZE_GB ((u32)1024*1024*1024)
-#define SIZE_MB ((u32)1024*1024)
-#define SIZE_KB ((u32)1024)
-
- if ((size % SIZE_GB) == 0)
- sprintf(buf, "%ug", size/SIZE_GB);
- else if ((size % SIZE_MB) == 0)
- sprintf(buf, "%um", size/SIZE_MB);
- else if (size % SIZE_KB == 0)
- sprintf(buf, "%uk", size/SIZE_KB);
- else
- sprintf(buf, "%u", size);
-}
-
-/**
- * This routine does global indexing of all partitions. Resulting index for
- * current partition is saved in 'mtddevnum'. Current partition name in
- * 'mtddevname'.
- */
-static void index_partitions(void)
-{
- char buf[16];
- u16 mtddevnum;
- struct part_info *part;
- struct list_head *dentry;
- struct mtd_device *dev;
-
- DEBUGF("--- index partitions ---\n");
-
- if (current_dev) {
- mtddevnum = 0;
- list_for_each(dentry, &devices) {
- dev = list_entry(dentry, struct mtd_device, link);
- if (dev == current_dev) {
- mtddevnum += current_partnum;
- sprintf(buf, "%d", mtddevnum);
- setenv("mtddevnum", buf);
- break;
- }
- mtddevnum += dev->num_parts;
- }
-
- part = jffs2_part_info(current_dev, current_partnum);
- setenv("mtddevname", part->name);
-
- DEBUGF("=> mtddevnum %d,\n=> mtddevname %s\n", mtddevnum, part->name);
- } else {
- setenv("mtddevnum", NULL);
- setenv("mtddevname", NULL);
-
- DEBUGF("=> mtddevnum NULL\n=> mtddevname NULL\n");
- }
-}
-
-/**
- * Save current device and partition in environment variable 'partition'.
- */
-static void current_save(void)
-{
- char buf[16];
-
- DEBUGF("--- current_save ---\n");
-
- if (current_dev) {
- sprintf(buf, "%s%d,%d", MTD_DEV_TYPE(current_dev->id->type),
- current_dev->id->num, current_partnum);
-
- setenv("partition", buf);
- strncpy(last_partition, buf, 16);
-
- DEBUGF("=> partition %s\n", buf);
- } else {
- setenv("partition", NULL);
- last_partition[0] = '\0';
-
- DEBUGF("=> partition NULL\n");
- }
- index_partitions();
-}
-
-/**
- * Performs sanity check for supplied NOR flash partition. Table of existing
- * NOR flash devices is searched and partition device is located. Alignment
- * with the granularity of NOR flash sectors is verified.
- *
- * @param id of the parent device
- * @param part partition to validate
- * @return 0 if partition is valid, 1 otherwise
- */
-static int part_validate_nor(struct mtdids *id, struct part_info *part)
-{
-#if defined(CONFIG_CMD_FLASH)
- /* info for FLASH chips */
- extern flash_info_t flash_info[];
- flash_info_t *flash;
- int offset_aligned;
- u32 end_offset, sector_size = 0;
- int i;
-
- flash = &flash_info[id->num];
-
- /* size of last sector */
- part->sector_size = flash->size -
- (flash->start[flash->sector_count-1] - flash->start[0]);
-
- offset_aligned = 0;
- for (i = 0; i < flash->sector_count; i++) {
- if ((flash->start[i] - flash->start[0]) == part->offset) {
- offset_aligned = 1;
- break;
- }
- }
- if (offset_aligned == 0) {
- printf("%s%d: partition (%s) start offset alignment incorrect\n",
- MTD_DEV_TYPE(id->type), id->num, part->name);
- return 1;
- }
-
- end_offset = part->offset + part->size;
- offset_aligned = 0;
- for (i = 0; i < flash->sector_count; i++) {
- if (i) {
- sector_size = flash->start[i] - flash->start[i-1];
- if (part->sector_size < sector_size)
- part->sector_size = sector_size;
- }
- if ((flash->start[i] - flash->start[0]) == end_offset)
- offset_aligned = 1;
- }
-
- if (offset_aligned || flash->size == end_offset)
- return 0;
-
- printf("%s%d: partition (%s) size alignment incorrect\n",
- MTD_DEV_TYPE(id->type), id->num, part->name);
-#endif
- return 1;
-}
-
-/**
- * Performs sanity check for supplied NAND flash partition. Table of existing
- * NAND flash devices is searched and partition device is located. Alignment
- * with the granularity of nand erasesize is verified.
- *
- * @param id of the parent device
- * @param part partition to validate
- * @return 0 if partition is valid, 1 otherwise
- */
-static int part_validate_nand(struct mtdids *id, struct part_info *part)
-{
-#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
- /* info for NAND chips */
- nand_info_t *nand;
-
- nand = &nand_info[id->num];
-
- part->sector_size = nand->erasesize;
-
- if ((unsigned long)(part->offset) % nand->erasesize) {
- printf("%s%d: partition (%s) start offset alignment incorrect\n",
- MTD_DEV_TYPE(id->type), id->num, part->name);
- return 1;
- }
-
- if (part->size % nand->erasesize) {
- printf("%s%d: partition (%s) size alignment incorrect\n",
- MTD_DEV_TYPE(id->type), id->num, part->name);
- return 1;
- }
-
- return 0;
-#else
- return 1;
-#endif
-}
-
-/**
- * Performs sanity check for supplied OneNAND flash partition.
- * Table of existing OneNAND flash devices is searched and partition device
- * is located. Alignment with the granularity of nand erasesize is verified.
- *
- * @param id of the parent device
- * @param part partition to validate
- * @return 0 if partition is valid, 1 otherwise
- */
-static int part_validate_onenand(struct mtdids *id, struct part_info *part)
-{
-#if defined(CONFIG_CMD_ONENAND)
- /* info for OneNAND chips */
- struct mtd_info *mtd;
-
- mtd = &onenand_mtd;
-
- part->sector_size = mtd->erasesize;
-
- if ((unsigned long)(part->offset) % mtd->erasesize) {
- printf("%s%d: partition (%s) start offset"
- "alignment incorrect\n",
- MTD_DEV_TYPE(id->type), id->num, part->name);
- return 1;
- }
-
- if (part->size % mtd->erasesize) {
- printf("%s%d: partition (%s) size alignment incorrect\n",
- MTD_DEV_TYPE(id->type), id->num, part->name);
- return 1;
- }
-
- return 0;
-#else
- return 1;
-#endif
-}
-
-
-/**
- * Performs sanity check for supplied partition. Offset and size are verified
- * to be within valid range. Partition type is checked and either
- * parts_validate_nor() or parts_validate_nand() is called with the argument
- * of part.
- *
- * @param id of the parent device
- * @param part partition to validate
- * @return 0 if partition is valid, 1 otherwise
- */
-static int part_validate(struct mtdids *id, struct part_info *part)
-{
- if (part->size == SIZE_REMAINING)
- part->size = id->size - part->offset;
-
- if (part->offset > id->size) {
- printf("%s: offset %08x beyond flash size %08x\n",
- id->mtd_id, part->offset, id->size);
- return 1;
- }
-
- if ((part->offset + part->size) <= part->offset) {
- printf("%s%d: partition (%s) size too big\n",
- MTD_DEV_TYPE(id->type), id->num, part->name);
- return 1;
- }
-
- if (part->offset + part->size > id->size) {
- printf("%s: partitioning exceeds flash size\n", id->mtd_id);
- return 1;
- }
-
- if (id->type == MTD_DEV_TYPE_NAND)
- return part_validate_nand(id, part);
- else if (id->type == MTD_DEV_TYPE_NOR)
- return part_validate_nor(id, part);
- else if (id->type == MTD_DEV_TYPE_ONENAND)
- return part_validate_onenand(id, part);
- else
- DEBUGF("part_validate: invalid dev type\n");
-
- return 1;
-}
-
-/**
- * Delete selected partition from the partion list of the specified device.
- *
- * @param dev device to delete partition from
- * @param part partition to delete
- * @return 0 on success, 1 otherwise
- */
-static int part_del(struct mtd_device *dev, struct part_info *part)
-{
- u8 current_save_needed = 0;
-
- /* if there is only one partition, remove whole device */
- if (dev->num_parts == 1)
- return device_del(dev);
-
- /* otherwise just delete this partition */
-
- if (dev == current_dev) {
- /* we are modyfing partitions for the current device,
- * update current */
- struct part_info *curr_pi;
- curr_pi = jffs2_part_info(current_dev, current_partnum);
-
- if (curr_pi) {
- if (curr_pi == part) {
- printf("current partition deleted, resetting current to 0\n");
- current_partnum = 0;
- } else if (part->offset <= curr_pi->offset) {
- current_partnum--;
- }
- current_save_needed = 1;
- }
- }
-
-#ifdef CONFIG_NAND_LEGACY
- jffs2_free_cache(part);
-#endif
- list_del(&part->link);
- free(part);
- dev->num_parts--;
-
- if (current_save_needed > 0)
- current_save();
- else
- index_partitions();
-
- return 0;
-}
-
-/**
- * Delete all partitions from parts head list, free memory.
- *
- * @param head list of partitions to delete
- */
-static void part_delall(struct list_head *head)
-{
- struct list_head *entry, *n;
- struct part_info *part_tmp;
-
- /* clean tmp_list and free allocated memory */
- list_for_each_safe(entry, n, head) {
- part_tmp = list_entry(entry, struct part_info, link);
-
-#ifdef CONFIG_NAND_LEGACY
- jffs2_free_cache(part_tmp);
-#endif
- list_del(entry);
- free(part_tmp);
- }
-}
-
-/**
- * Add new partition to the supplied partition list. Make sure partitions are
- * sorted by offset in ascending order.
- *
- * @param head list this partition is to be added to
- * @param new partition to be added
- */
-static int part_sort_add(struct mtd_device *dev, struct part_info *part)
-{
- struct list_head *entry;
- struct part_info *new_pi, *curr_pi;
-
- /* link partition to parrent dev */
- part->dev = dev;
-
- if (list_empty(&dev->parts)) {
- DEBUGF("part_sort_add: list empty\n");
- list_add(&part->link, &dev->parts);
- dev->num_parts++;
- index_partitions();
- return 0;
- }
-
- new_pi = list_entry(&part->link, struct part_info, link);
-
- /* get current partition info if we are updating current device */
- curr_pi = NULL;
- if (dev == current_dev)
- curr_pi = jffs2_part_info(current_dev, current_partnum);
-
- list_for_each(entry, &dev->parts) {
- struct part_info *pi;
-
- pi = list_entry(entry, struct part_info, link);
-
- /* be compliant with kernel cmdline, allow only one partition at offset zero */
- if ((new_pi->offset == pi->offset) && (pi->offset == 0)) {
- printf("cannot add second partition at offset 0\n");
- return 1;
- }
-
- if (new_pi->offset <= pi->offset) {
- list_add_tail(&part->link, entry);
- dev->num_parts++;
-
- if (curr_pi && (pi->offset <= curr_pi->offset)) {
- /* we are modyfing partitions for the current
- * device, update current */
- current_partnum++;
- current_save();
- } else {
- index_partitions();
- }
- return 0;
- }
- }
-
- list_add_tail(&part->link, &dev->parts);
- dev->num_parts++;
- index_partitions();
- return 0;
-}
-
-/**
- * Add provided partition to the partition list of a given device.
- *
- * @param dev device to which partition is added
- * @param part partition to be added
- * @return 0 on success, 1 otherwise
- */
-static int part_add(struct mtd_device *dev, struct part_info *part)
-{
- /* verify alignment and size */
- if (part_validate(dev->id, part) != 0)
- return 1;
-
- /* partition is ok, add it to the list */
- if (part_sort_add(dev, part) != 0)
- return 1;
-
- return 0;
-}
-
-/**
- * Parse one partition definition, allocate memory and return pointer to this
- * location in retpart.
- *
- * @param partdef pointer to the partition definition string i.e. <part-def>
- * @param ret output pointer to next char after parse completes (output)
- * @param retpart pointer to the allocated partition (output)
- * @return 0 on success, 1 otherwise
- */
-static int part_parse(const char *const partdef, const char **ret, struct part_info **retpart)
-{
- struct part_info *part;
- unsigned long size;
- unsigned long offset;
- const char *name;
- int name_len;
- unsigned int mask_flags;
- const char *p;
-
- p = partdef;
- *retpart = NULL;
- *ret = NULL;
-
- /* fetch the partition size */
- if (*p == '-') {
- /* assign all remaining space to this partition */
- DEBUGF("'-': remaining size assigned\n");
- size = SIZE_REMAINING;
- p++;
- } else {
- size = memsize_parse(p, &p);
- if (size < MIN_PART_SIZE) {
- printf("partition size too small (%lx)\n", size);
- return 1;
- }
- }
-
- /* check for offset */
- offset = OFFSET_NOT_SPECIFIED;
- if (*p == '@') {
- p++;
- offset = memsize_parse(p, &p);
- }
-
- /* now look for the name */
- if (*p == '(') {
- name = ++p;
- if ((p = strchr(name, ')')) == NULL) {
- printf("no closing ) found in partition name\n");
- return 1;
- }
- name_len = p - name + 1;
- if ((name_len - 1) == 0) {
- printf("empty partition name\n");
- return 1;
- }
- p++;
- } else {
- /* 0x00000000@0x00000000 */
- name_len = 22;
- name = NULL;
- }
-
- /* test for options */
- mask_flags = 0;
- if (strncmp(p, "ro", 2) == 0) {
- mask_flags |= MTD_WRITEABLE_CMD;
- p += 2;
- }
-
- /* check for next partition definition */
- if (*p == ',') {
- if (size == SIZE_REMAINING) {
- *ret = NULL;
- printf("no partitions allowed after a fill-up partition\n");
- return 1;
- }
- *ret = ++p;
- } else if ((*p == ';') || (*p == '\0')) {
- *ret = p;
- } else {
- printf("unexpected character '%c' at the end of partition\n", *p);
- *ret = NULL;
- return 1;
- }
-
- /* allocate memory */
- part = (struct part_info *)malloc(sizeof(struct part_info) + name_len);
- if (!part) {
- printf("out of memory\n");
- return 1;
- }
- memset(part, 0, sizeof(struct part_info) + name_len);
- part->size = size;
- part->offset = offset;
- part->mask_flags = mask_flags;
- part->name = (char *)(part + 1);
-
- if (name) {
- /* copy user provided name */
- strncpy(part->name, name, name_len - 1);
- part->auto_name = 0;
- } else {
- /* auto generated name in form of size@offset */
- sprintf(part->name, "0x%08lx@0x%08lx", size, offset);
- part->auto_name = 1;
- }
-
- part->name[name_len - 1] = '\0';
- INIT_LIST_HEAD(&part->link);
-
- DEBUGF("+ partition: name %-22s size 0x%08x offset 0x%08x mask flags %d\n",
- part->name, part->size,
- part->offset, part->mask_flags);
-
- *retpart = part;
- return 0;
-}
-#endif/* #ifdef CONFIG_JFFS2_CMDLINE */
-
-/**
- * Check device number to be within valid range for given device type.
- *
- * @param dev device to validate
- * @return 0 if device is valid, 1 otherwise
- */
-static int device_validate(u8 type, u8 num, u32 *size)
-{
- if (type == MTD_DEV_TYPE_NOR) {
-#if defined(CONFIG_CMD_FLASH)
- if (num < CONFIG_SYS_MAX_FLASH_BANKS) {
- extern flash_info_t flash_info[];
- *size = flash_info[num].size;
-
- return 0;
- }
-
- printf("no such FLASH device: %s%d (valid range 0 ... %d\n",
- MTD_DEV_TYPE(type), num, CONFIG_SYS_MAX_FLASH_BANKS - 1);
-#else
- printf("support for FLASH devices not present\n");
-#endif
- } else if (type == MTD_DEV_TYPE_NAND) {
-#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
- if (num < CONFIG_SYS_MAX_NAND_DEVICE) {
-#ifndef CONFIG_NAND_LEGACY
- *size = nand_info[num].size;
-#else
- extern struct nand_chip nand_dev_desc[CONFIG_SYS_MAX_NAND_DEVICE];
- *size = nand_dev_desc[num].totlen;
-#endif
- return 0;
- }
-
- printf("no such NAND device: %s%d (valid range 0 ... %d)\n",
- MTD_DEV_TYPE(type), num, CONFIG_SYS_MAX_NAND_DEVICE - 1);
-#else
- printf("support for NAND devices not present\n");
-#endif
- } else if (type == MTD_DEV_TYPE_ONENAND) {
-#if defined(CONFIG_CMD_ONENAND)
- *size = onenand_mtd.size;
- return 0;
-#else
- printf("support for OneNAND devices not present\n");
-#endif
- } else
- printf("Unknown defice type %d\n", type);
-
- return 1;
-}
-
-#ifdef CONFIG_JFFS2_CMDLINE
-/**
- * Delete all mtd devices from a supplied devices list, free memory allocated for
- * each device and delete all device partitions.
- *
- * @return 0 on success, 1 otherwise
- */
-static int device_delall(struct list_head *head)
-{
- struct list_head *entry, *n;
- struct mtd_device *dev_tmp;
-
- /* clean devices list */
- list_for_each_safe(entry, n, head) {
- dev_tmp = list_entry(entry, struct mtd_device, link);
- list_del(entry);
- part_delall(&dev_tmp->parts);
- free(dev_tmp);
- }
- INIT_LIST_HEAD(&devices);
-
- return 0;
-}
-
-/**
- * If provided device exists it's partitions are deleted, device is removed
- * from device list and device memory is freed.
- *
- * @param dev device to be deleted
- * @return 0 on success, 1 otherwise
- */
-static int device_del(struct mtd_device *dev)
-{
- part_delall(&dev->parts);
- list_del(&dev->link);
- free(dev);
-
- if (dev == current_dev) {
- /* we just deleted current device */
- if (list_empty(&devices)) {
- current_dev = NULL;
- } else {
- /* reset first partition from first dev from the
- * devices list as current */
- current_dev = list_entry(devices.next, struct mtd_device, link);
- current_partnum = 0;
- }
- current_save();
- return 0;
- }
-
- index_partitions();
- return 0;
-}
-
-/**
- * Search global device list and return pointer to the device of type and num
- * specified.
- *
- * @param type device type
- * @param num device number
- * @return NULL if requested device does not exist
- */
-static struct mtd_device* device_find(u8 type, u8 num)
-{
- struct list_head *entry;
- struct mtd_device *dev_tmp;
-
- list_for_each(entry, &devices) {
- dev_tmp = list_entry(entry, struct mtd_device, link);
-
- if ((dev_tmp->id->type == type) && (dev_tmp->id->num == num))
- return dev_tmp;
- }
-
- return NULL;
-}
-
-/**
- * Add specified device to the global device list.
- *
- * @param dev device to be added
- */
-static void device_add(struct mtd_device *dev)
-{
- u8 current_save_needed = 0;
-
- if (list_empty(&devices)) {
- current_dev = dev;
- current_partnum = 0;
- current_save_needed = 1;
- }
-
- list_add_tail(&dev->link, &devices);
-
- if (current_save_needed > 0)
- current_save();
- else
- index_partitions();
-}
-
-/**
- * Parse device type, name and mtd-id. If syntax is ok allocate memory and
- * return pointer to the device structure.
- *
- * @param mtd_dev pointer to the device definition string i.e. <mtd-dev>
- * @param ret output pointer to next char after parse completes (output)
- * @param retdev pointer to the allocated device (output)
- * @return 0 on success, 1 otherwise
- */
-static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_device **retdev)
-{
- struct mtd_device *dev;
- struct part_info *part;
- struct mtdids *id;
- const char *mtd_id;
- unsigned int mtd_id_len;
- const char *p, *pend;
- LIST_HEAD(tmp_list);
- struct list_head *entry, *n;
- u16 num_parts;
- u32 offset;
- int err = 1;
-
- p = mtd_dev;
- *retdev = NULL;
- *ret = NULL;
-
- DEBUGF("===device_parse===\n");
-
- /* fetch <mtd-id> */
- mtd_id = p;
- if (!(p = strchr(mtd_id, ':'))) {
- printf("no <mtd-id> identifier\n");
- return 1;
- }
- mtd_id_len = p - mtd_id + 1;
- p++;
-
- /* verify if we have a valid device specified */
- if ((id = id_find_by_mtd_id(mtd_id, mtd_id_len - 1)) == NULL) {
- printf("invalid mtd device '%.*s'\n", mtd_id_len - 1, mtd_id);
- return 1;
- }
-
- DEBUGF("dev type = %d (%s), dev num = %d, mtd-id = %s\n",
- id->type, MTD_DEV_TYPE(id->type),
- id->num, id->mtd_id);
- pend = strchr(p, ';');
- DEBUGF("parsing partitions %.*s\n", (pend ? pend - p : strlen(p)), p);
-
-
- /* parse partitions */
- num_parts = 0;
-
- offset = 0;
- if ((dev = device_find(id->type, id->num)) != NULL) {
- /* if device already exists start at the end of the last partition */
- part = list_entry(dev->parts.prev, struct part_info, link);
- offset = part->offset + part->size;
- }
-
- while (p && (*p != '\0') && (*p != ';')) {
- err = 1;
- if ((part_parse(p, &p, &part) != 0) || (!part))
- break;
-
- /* calculate offset when not specified */
- if (part->offset == OFFSET_NOT_SPECIFIED)
- part->offset = offset;
- else
- offset = part->offset;
-
- /* verify alignment and size */
- if (part_validate(id, part) != 0)
- break;
-
- offset += part->size;
-
- /* partition is ok, add it to the list */
- list_add_tail(&part->link, &tmp_list);
- num_parts++;
- err = 0;
- }
- if (err == 1) {
- part_delall(&tmp_list);
- return 1;
- }
-
- if (num_parts == 0) {
- printf("no partitions for device %s%d (%s)\n",
- MTD_DEV_TYPE(id->type), id->num, id->mtd_id);
- return 1;
- }
-
- DEBUGF("\ntotal partitions: %d\n", num_parts);
-
- /* check for next device presence */
- if (p) {
- if (*p == ';') {
- *ret = ++p;
- } else if (*p == '\0') {
- *ret = p;
- } else {
- printf("unexpected character '%c' at the end of device\n", *p);
- *ret = NULL;
- return 1;
- }
- }
-
- /* allocate memory for mtd_device structure */
- if ((dev = (struct mtd_device *)malloc(sizeof(struct mtd_device))) == NULL) {
- printf("out of memory\n");
- return 1;
- }
- memset(dev, 0, sizeof(struct mtd_device));
- dev->id = id;
- dev->num_parts = 0; /* part_sort_add increments num_parts */
- INIT_LIST_HEAD(&dev->parts);
- INIT_LIST_HEAD(&dev->link);
-
- /* move partitions from tmp_list to dev->parts */
- list_for_each_safe(entry, n, &tmp_list) {
- part = list_entry(entry, struct part_info, link);
- list_del(entry);
- if (part_sort_add(dev, part) != 0) {
- device_del(dev);
- return 1;
- }
- }
-
- *retdev = dev;
-
- DEBUGF("===\n\n");
- return 0;
-}
-
-/**
- * Initialize global device list.
- *
- * @return 0 on success, 1 otherwise
- */
-static int jffs2_devices_init(void)
-{
- last_parts[0] = '\0';
- current_dev = NULL;
- current_save();
-
- return device_delall(&devices);
-}
-
-/*
- * Search global mtdids list and find id of requested type and number.
- *
- * @return pointer to the id if it exists, NULL otherwise
- */
-static struct mtdids* id_find(u8 type, u8 num)
-{
- struct list_head *entry;
- struct mtdids *id;
-
- list_for_each(entry, &mtdids) {
- id = list_entry(entry, struct mtdids, link);
-
- if ((id->type == type) && (id->num == num))
- return id;
- }
-
- return NULL;
-}
-
-/**
- * Search global mtdids list and find id of a requested mtd_id.
- *
- * Note: first argument is not null terminated.
- *
- * @param mtd_id string containing requested mtd_id
- * @param mtd_id_len length of supplied mtd_id
- * @return pointer to the id if it exists, NULL otherwise
- */
-static struct mtdids* id_find_by_mtd_id(const char *mtd_id, unsigned int mtd_id_len)
-{
- struct list_head *entry;
- struct mtdids *id;
-
- DEBUGF("--- id_find_by_mtd_id: '%.*s' (len = %d)\n",
- mtd_id_len, mtd_id, mtd_id_len);
-
- list_for_each(entry, &mtdids) {
- id = list_entry(entry, struct mtdids, link);
-
- DEBUGF("entry: '%s' (len = %d)\n",
- id->mtd_id, strlen(id->mtd_id));
-
- if (mtd_id_len != strlen(id->mtd_id))
- continue;
- if (strncmp(id->mtd_id, mtd_id, mtd_id_len) == 0)
- return id;
- }
-
- return NULL;
-}
-#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
-
-/**
- * Parse device id string <dev-id> := 'nand'|'nor'|'onenand'<dev-num>,
- * return device type and number.
- *
- * @param id string describing device id
- * @param ret_id output pointer to next char after parse completes (output)
- * @param dev_type parsed device type (output)
- * @param dev_num parsed device number (output)
- * @return 0 on success, 1 otherwise
- */
-int id_parse(const char *id, const char **ret_id, u8 *dev_type, u8 *dev_num)
-{
- const char *p = id;
-
- *dev_type = 0;
- if (strncmp(p, "nand", 4) == 0) {
- *dev_type = MTD_DEV_TYPE_NAND;
- p += 4;
- } else if (strncmp(p, "nor", 3) == 0) {
- *dev_type = MTD_DEV_TYPE_NOR;
- p += 3;
- } else if (strncmp(p, "onenand", 7) == 0) {
- *dev_type = MTD_DEV_TYPE_ONENAND;
- p += 7;
- } else {
- printf("incorrect device type in %s\n", id);
- return 1;
- }
-
- if (!isdigit(*p)) {
- printf("incorrect device number in %s\n", id);
- return 1;
- }
-
- *dev_num = simple_strtoul(p, (char **)&p, 0);
- if (ret_id)
- *ret_id = p;
- return 0;
-}
-
-#ifdef CONFIG_JFFS2_CMDLINE
-/**
- * Process all devices and generate corresponding mtdparts string describing
- * all partitions on all devices.
- *
- * @param buf output buffer holding generated mtdparts string (output)
- * @param buflen buffer size
- * @return 0 on success, 1 otherwise
- */
-static int generate_mtdparts(char *buf, u32 buflen)
-{
- struct list_head *pentry, *dentry;
- struct mtd_device *dev;
- struct part_info *part, *prev_part;
- char *p = buf;
- char tmpbuf[32];
- u32 size, offset, len, part_cnt;
- u32 maxlen = buflen - 1;
-
- DEBUGF("--- generate_mtdparts ---\n");
-
- if (list_empty(&devices)) {
- buf[0] = '\0';
- return 0;
- }
-
- sprintf(p, "mtdparts=");
- p += 9;
-
- list_for_each(dentry, &devices) {
- dev = list_entry(dentry, struct mtd_device, link);
-
- /* copy mtd_id */
- len = strlen(dev->id->mtd_id) + 1;
- if (len > maxlen)
- goto cleanup;
- memcpy(p, dev->id->mtd_id, len - 1);
- p += len - 1;
- *(p++) = ':';
- maxlen -= len;
-
- /* format partitions */
- prev_part = NULL;
- part_cnt = 0;
- list_for_each(pentry, &dev->parts) {
- part = list_entry(pentry, struct part_info, link);
- size = part->size;
- offset = part->offset;
- part_cnt++;
-
- /* partition size */
- memsize_format(tmpbuf, size);
- len = strlen(tmpbuf);
- if (len > maxlen)
- goto cleanup;
- memcpy(p, tmpbuf, len);
- p += len;
- maxlen -= len;
-
-
- /* add offset only when there is a gap between
- * partitions */
- if ((!prev_part && (offset != 0)) ||
- (prev_part && ((prev_part->offset + prev_part->size) != part->offset))) {
-
- memsize_format(tmpbuf, offset);
- len = strlen(tmpbuf) + 1;
- if (len > maxlen)
- goto cleanup;
- *(p++) = '@';
- memcpy(p, tmpbuf, len - 1);
- p += len - 1;
- maxlen -= len;
- }
-
- /* copy name only if user supplied */
- if(!part->auto_name) {
- len = strlen(part->name) + 2;
- if (len > maxlen)
- goto cleanup;
-
- *(p++) = '(';
- memcpy(p, part->name, len - 2);
- p += len - 2;
- *(p++) = ')';
- maxlen -= len;
- }
-
- /* ro mask flag */
- if (part->mask_flags && MTD_WRITEABLE_CMD) {
- len = 2;
- if (len > maxlen)
- goto cleanup;
- *(p++) = 'r';
- *(p++) = 'o';
- maxlen -= 2;
- }
-
- /* print ',' separator if there are other partitions
- * following */
- if (dev->num_parts > part_cnt) {
- if (1 > maxlen)
- goto cleanup;
- *(p++) = ',';
- maxlen--;
- }
- prev_part = part;
- }
- /* print ';' separator if there are other devices following */
- if (dentry->next != &devices) {
- if (1 > maxlen)
- goto cleanup;
- *(p++) = ';';
- maxlen--;
- }
- }
-
- /* we still have at least one char left, as we decremented maxlen at
- * the begining */
- *p = '\0';
-
- return 0;
-
-cleanup:
- last_parts[0] = '\0';
- return 1;
-}
-
-/**
- * Call generate_mtdparts to process all devices and generate corresponding
- * mtdparts string, save it in mtdparts environment variable.
- *
- * @param buf output buffer holding generated mtdparts string (output)
- * @param buflen buffer size
- * @return 0 on success, 1 otherwise
- */
-static int generate_mtdparts_save(char *buf, u32 buflen)
-{
- int ret;
-
- ret = generate_mtdparts(buf, buflen);
-
- if ((buf[0] != '\0') && (ret == 0))
- setenv("mtdparts", buf);
- else
- setenv("mtdparts", NULL);
-
- return ret;
-}
-
-/**
- * Format and print out a partition list for each device from global device
- * list.
- */
-static void list_partitions(void)
-{
- struct list_head *dentry, *pentry;
- struct part_info *part;
- struct mtd_device *dev;
- int part_num;
-
- DEBUGF("\n---list_partitions---\n");
- list_for_each(dentry, &devices) {
- dev = list_entry(dentry, struct mtd_device, link);
- printf("\ndevice %s%d <%s>, # parts = %d\n",
- MTD_DEV_TYPE(dev->id->type), dev->id->num,
- dev->id->mtd_id, dev->num_parts);
- printf(" #: name\t\t\tsize\t\toffset\t\tmask_flags\n");
-
- /* list partitions for given device */
- part_num = 0;
- list_for_each(pentry, &dev->parts) {
- part = list_entry(pentry, struct part_info, link);
- printf("%2d: %-20s0x%08x\t0x%08x\t%d\n",
- part_num, part->name, part->size,
- part->offset, part->mask_flags);
-
- part_num++;
- }
- }
- if (list_empty(&devices))
- printf("no partitions defined\n");
-
- /* current_dev is not NULL only when we have non empty device list */
- if (current_dev) {
- part = jffs2_part_info(current_dev, current_partnum);
- if (part) {
- printf("\nactive partition: %s%d,%d - (%s) 0x%08x @ 0x%08x\n",
- MTD_DEV_TYPE(current_dev->id->type),
- current_dev->id->num, current_partnum,
- part->name, part->size, part->offset);
- } else {
- printf("could not get current partition info\n\n");
- }
- }
-
- printf("\ndefaults:\n");
- printf("mtdids : %s\n", mtdids_default);
- printf("mtdparts: %s\n", mtdparts_default);
-}
-
-/**
- * Given partition identifier in form of <dev_type><dev_num>,<part_num> find
- * corresponding device and verify partition number.
- *
- * @param id string describing device and partition or partition name
- * @param dev pointer to the requested device (output)
- * @param part_num verified partition number (output)
- * @param part pointer to requested partition (output)
- * @return 0 on success, 1 otherwise
- */
-int find_dev_and_part(const char *id, struct mtd_device **dev,
- u8 *part_num, struct part_info **part)
-{
- struct list_head *dentry, *pentry;
- u8 type, dnum, pnum;
- const char *p;
-
- DEBUGF("--- find_dev_and_part ---\nid = %s\n", id);
-
- list_for_each(dentry, &devices) {
- *part_num = 0;
- *dev = list_entry(dentry, struct mtd_device, link);
- list_for_each(pentry, &(*dev)->parts) {
- *part = list_entry(pentry, struct part_info, link);
- if (strcmp((*part)->name, id) == 0)
- return 0;
- (*part_num)++;
- }
- }
-
- p = id;
- *dev = NULL;
- *part = NULL;
- *part_num = 0;
-
- if (id_parse(p, &p, &type, &dnum) != 0)
- return 1;
-
- if ((*p++ != ',') || (*p == '\0')) {
- printf("no partition number specified\n");
- return 1;
- }
- pnum = simple_strtoul(p, (char **)&p, 0);
- if (*p != '\0') {
- printf("unexpected trailing character '%c'\n", *p);
- return 1;
- }
-
- if ((*dev = device_find(type, dnum)) == NULL) {
- printf("no such device %s%d\n", MTD_DEV_TYPE(type), dnum);
- return 1;
- }
-
- if ((*part = jffs2_part_info(*dev, pnum)) == NULL) {
- printf("no such partition\n");
- *dev = NULL;
- return 1;
- }
-
- *part_num = pnum;
-
- return 0;
-}
-
-/**
- * Find and delete partition. For partition id format see find_dev_and_part().
- *
- * @param id string describing device and partition
- * @return 0 on success, 1 otherwise
- */
-static int delete_partition(const char *id)
-{
- u8 pnum;
- struct mtd_device *dev;
- struct part_info *part;
-
- if (find_dev_and_part(id, &dev, &pnum, &part) == 0) {
-
- DEBUGF("delete_partition: device = %s%d, partition %d = (%s) 0x%08lx@0x%08lx\n",
- MTD_DEV_TYPE(dev->id->type), dev->id->num, pnum,
- part->name, part->size, part->offset);
-
- if (part_del(dev, part) != 0)
- return 1;
-
- if (generate_mtdparts_save(last_parts, MTDPARTS_MAXLEN) != 0) {
- printf("generated mtdparts too long, reseting to null\n");
- return 1;
- }
- return 0;
- }
-
- printf("partition %s not found\n", id);
- return 1;
-}
-
-/**
- * Accept character string describing mtd partitions and call device_parse()
- * for each entry. Add created devices to the global devices list.
- *
- * @param mtdparts string specifing mtd partitions
- * @return 0 on success, 1 otherwise
- */
-static int parse_mtdparts(const char *const mtdparts)
-{
- const char *p = mtdparts;
- struct mtd_device *dev;
- int err = 1;
-
- DEBUGF("\n---parse_mtdparts---\nmtdparts = %s\n\n", p);
-
- /* delete all devices and partitions */
- if (jffs2_devices_init() != 0) {
- printf("could not initialise device list\n");
- return err;
- }
-
- /* re-read 'mtdparts' variable, jffs2_devices_init may be updating env */
- p = getenv("mtdparts");
-
- if (strncmp(p, "mtdparts=", 9) != 0) {
- printf("mtdparts variable doesn't start with 'mtdparts='\n");
- return err;
- }
- p += 9;
-
- while (p && (*p != '\0')) {
- err = 1;
- if ((device_parse(p, &p, &dev) != 0) || (!dev))
- break;
-
- DEBUGF("+ device: %s\t%d\t%s\n", MTD_DEV_TYPE(dev->id->type),
- dev->id->num, dev->id->mtd_id);
-
- /* check if parsed device is already on the list */
- if (device_find(dev->id->type, dev->id->num) != NULL) {
- printf("device %s%d redefined, please correct mtdparts variable\n",
- MTD_DEV_TYPE(dev->id->type), dev->id->num);
- break;
- }
-
- list_add_tail(&dev->link, &devices);
- err = 0;
- }
- if (err == 1) {
- device_delall(&devices);
- return 1;
- }
-
- return 0;
-}
-
-/**
- * Parse provided string describing mtdids mapping (see file header for mtdids
- * variable format). Allocate memory for each entry and add all found entries
- * to the global mtdids list.
- *
- * @param ids mapping string
- * @return 0 on success, 1 otherwise
- */
-static int parse_mtdids(const char *const ids)
-{
- const char *p = ids;
- const char *mtd_id;
- int mtd_id_len;
- struct mtdids *id;
- struct list_head *entry, *n;
- struct mtdids *id_tmp;
- u8 type, num;
- u32 size;
- int ret = 1;
-
- DEBUGF("\n---parse_mtdids---\nmtdids = %s\n\n", ids);
-
- /* clean global mtdids list */
- list_for_each_safe(entry, n, &mtdids) {
- id_tmp = list_entry(entry, struct mtdids, link);
- DEBUGF("mtdids del: %d %d\n", id_tmp->type, id_tmp->num);
- list_del(entry);
- free(id_tmp);
- }
- last_ids[0] = '\0';
- INIT_LIST_HEAD(&mtdids);
-
- while(p && (*p != '\0')) {
-
- ret = 1;
- /* parse 'nor'|'nand'|'onenand'<dev-num> */
- if (id_parse(p, &p, &type, &num) != 0)
- break;
-
- if (*p != '=') {
- printf("mtdids: incorrect <dev-num>\n");
- break;
- }
- p++;
-
- /* check if requested device exists */
- if (device_validate(type, num, &size) != 0)
- return 1;
-
- /* locate <mtd-id> */
- mtd_id = p;
- if ((p = strchr(mtd_id, ',')) != NULL) {
- mtd_id_len = p - mtd_id + 1;
- p++;
- } else {
- mtd_id_len = strlen(mtd_id) + 1;
- }
- if (mtd_id_len == 0) {
- printf("mtdids: no <mtd-id> identifier\n");
- break;
- }
-
- /* check if this id is already on the list */
- int double_entry = 0;
- list_for_each(entry, &mtdids) {
- id_tmp = list_entry(entry, struct mtdids, link);
- if ((id_tmp->type == type) && (id_tmp->num == num)) {
- double_entry = 1;
- break;
- }
- }
- if (double_entry) {
- printf("device id %s%d redefined, please correct mtdids variable\n",
- MTD_DEV_TYPE(type), num);
- break;
- }
-
- /* allocate mtdids structure */
- if (!(id = (struct mtdids *)malloc(sizeof(struct mtdids) + mtd_id_len))) {
- printf("out of memory\n");
- break;
- }
- memset(id, 0, sizeof(struct mtdids) + mtd_id_len);
- id->num = num;
- id->type = type;
- id->size = size;
- id->mtd_id = (char *)(id + 1);
- strncpy(id->mtd_id, mtd_id, mtd_id_len - 1);
- id->mtd_id[mtd_id_len - 1] = '\0';
- INIT_LIST_HEAD(&id->link);
-
- DEBUGF("+ id %s%d\t%16d bytes\t%s\n",
- MTD_DEV_TYPE(id->type), id->num,
- id->size, id->mtd_id);
-
- list_add_tail(&id->link, &mtdids);
- ret = 0;
- }
- if (ret == 1) {
- /* clean mtdids list and free allocated memory */
- list_for_each_safe(entry, n, &mtdids) {
- id_tmp = list_entry(entry, struct mtdids, link);
- list_del(entry);
- free(id_tmp);
- }
- return 1;
- }
-
- return 0;
-}
-
-/**
- * Parse and initialize global mtdids mapping and create global
- * device/partition list.
- *
- * @return 0 on success, 1 otherwise
- */
-int mtdparts_init(void)
-{
- static int initialized = 0;
- const char *ids, *parts;
- const char *current_partition;
- int ids_changed;
- char tmp_ep[PARTITION_MAXLEN];
-
- DEBUGF("\n---mtdparts_init---\n");
- if (!initialized) {
- INIT_LIST_HEAD(&mtdids);
- INIT_LIST_HEAD(&devices);
- memset(last_ids, 0, MTDIDS_MAXLEN);
- memset(last_parts, 0, MTDPARTS_MAXLEN);
- memset(last_partition, 0, PARTITION_MAXLEN);
- initialized = 1;
- }
-
- /* get variables */
- ids = getenv("mtdids");
- parts = getenv("mtdparts");
- current_partition = getenv("partition");
-
- /* save it for later parsing, cannot rely on current partition pointer
- * as 'partition' variable may be updated during init */
- tmp_ep[0] = '\0';
- if (current_partition)
- strncpy(tmp_ep, current_partition, PARTITION_MAXLEN);
-
- DEBUGF("last_ids : %s\n", last_ids);
- DEBUGF("env_ids : %s\n", ids);
- DEBUGF("last_parts: %s\n", last_parts);
- DEBUGF("env_parts : %s\n\n", parts);
-
- DEBUGF("last_partition : %s\n", last_partition);
- DEBUGF("env_partition : %s\n", current_partition);
-
- /* if mtdids varible is empty try to use defaults */
- if (!ids) {
- if (mtdids_default) {
- DEBUGF("mtdids variable not defined, using default\n");
- ids = mtdids_default;
- setenv("mtdids", (char *)ids);
- } else {
- printf("mtdids not defined, no default present\n");
- return 1;
- }
- }
- if (strlen(ids) > MTDIDS_MAXLEN - 1) {
- printf("mtdids too long (> %d)\n", MTDIDS_MAXLEN);
- return 1;
- }
-
- /* do no try to use defaults when mtdparts variable is not defined,
- * just check the length */
- if (!parts)
- printf("mtdparts variable not set, see 'help mtdparts'\n");
-
- if (parts && (strlen(parts) > MTDPARTS_MAXLEN - 1)) {
- printf("mtdparts too long (> %d)\n", MTDPARTS_MAXLEN);
- return 1;
- }
-
- /* check if we have already parsed those mtdids */
- if ((last_ids[0] != '\0') && (strcmp(last_ids, ids) == 0)) {
- ids_changed = 0;
- } else {
- ids_changed = 1;
-
- if (parse_mtdids(ids) != 0) {
- jffs2_devices_init();
- return 1;
- }
-
- /* ok it's good, save new ids */
- strncpy(last_ids, ids, MTDIDS_MAXLEN);
- }
-
- /* parse partitions if either mtdparts or mtdids were updated */
- if (parts && ((last_parts[0] == '\0') || ((strcmp(last_parts, parts) != 0)) || ids_changed)) {
- if (parse_mtdparts(parts) != 0)
- return 1;
-
- if (list_empty(&devices)) {
- printf("mtdparts_init: no valid partitions\n");
- return 1;
- }
-
- /* ok it's good, save new parts */
- strncpy(last_parts, parts, MTDPARTS_MAXLEN);
-
- /* reset first partition from first dev from the list as current */
- current_dev = list_entry(devices.next, struct mtd_device, link);
- current_partnum = 0;
- current_save();
-
- DEBUGF("mtdparts_init: current_dev = %s%d, current_partnum = %d\n",
- MTD_DEV_TYPE(current_dev->id->type),
- current_dev->id->num, current_partnum);
- }
-
- /* mtdparts variable was reset to NULL, delete all devices/partitions */
- if (!parts && (last_parts[0] != '\0'))
- return jffs2_devices_init();
-
- /* do not process current partition if mtdparts variable is null */
- if (!parts)
- return 0;
-
- /* is current partition set in environment? if so, use it */
- if ((tmp_ep[0] != '\0') && (strcmp(tmp_ep, last_partition) != 0)) {
- struct part_info *p;
- struct mtd_device *cdev;
- u8 pnum;
-
- DEBUGF("--- getting current partition: %s\n", tmp_ep);
-
- if (find_dev_and_part(tmp_ep, &cdev, &pnum, &p) == 0) {
- current_dev = cdev;
- current_partnum = pnum;
- current_save();
- }
- } else if (getenv("partition") == NULL) {
- DEBUGF("no partition variable set, setting...\n");
- current_save();
- }
-
- return 0;
-}
-#else /* #ifdef CONFIG_JFFS2_CMDLINE */
-/*
- * 'Static' version of command line mtdparts_init() routine. Single partition on
- * a single device configuration.
- */
-
-/**
- * Calculate sector size.
- *
- * @return sector size
- */
-static inline u32 get_part_sector_size_nand(struct mtdids *id)
-{
-#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
-#if defined(CONFIG_NAND_LEGACY)
- extern struct nand_chip nand_dev_desc[CONFIG_SYS_MAX_NAND_DEVICE];
-
- return nand_dev_desc[id->num].erasesize;
-#else
- nand_info_t *nand;
-
- nand = &nand_info[id->num];
-
- return nand->erasesize;
-#endif
-#else
- BUG();
- return 0;
-#endif
-}
-
-static inline u32 get_part_sector_size_nor(struct mtdids *id, struct part_info *part)
-{
-#if defined(CONFIG_CMD_FLASH)
- extern flash_info_t flash_info[];
-
- u32 end_phys, start_phys, sector_size = 0, size = 0;
- int i;
- flash_info_t *flash;
-
- flash = &flash_info[id->num];
-
- start_phys = flash->start[0] + part->offset;
- end_phys = start_phys + part->size;
-
- for (i = 0; i < flash->sector_count; i++) {
- if (flash->start[i] >= end_phys)
- break;
-
- if (flash->start[i] >= start_phys) {
- if (i == flash->sector_count - 1) {
- size = flash->start[0] + flash->size - flash->start[i];
- } else {
- size = flash->start[i+1] - flash->start[i];
- }
-
- if (sector_size < size)
- sector_size = size;
- }
- }
-
- return sector_size;
-#else
- BUG();
- return 0;
-#endif
-}
-
-static inline u32 get_part_sector_size_onenand(void)
-{
-#if defined(CONFIG_CMD_ONENAND)
- struct mtd_info *mtd;
-
- mtd = &onenand_mtd;
-
- return mtd->erasesize;
-#else
- BUG();
- return 0;
-#endif
-}
-
-static inline u32 get_part_sector_size(struct mtdids *id, struct part_info *part)
-{
- if (id->type == MTD_DEV_TYPE_NAND)
- return get_part_sector_size_nand(id);
- else if (id->type == MTD_DEV_TYPE_NOR)
- return get_part_sector_size_nor(id, part);
- else if (id->type == MTD_DEV_TYPE_ONENAND)
- return get_part_sector_size_onenand();
- else
- DEBUGF("Error: Unknown device type.\n");
-
- return 0;
-}
-
-/**
- * Parse and initialize global mtdids mapping and create global
- * device/partition list.
- *
- * @return 0 on success, 1 otherwise
- */
-int mtdparts_init(void)
-{
- static int initialized = 0;
- u32 size;
- char *dev_name;
-
- DEBUGF("\n---mtdparts_init---\n");
- if (!initialized) {
- struct mtdids *id;
- struct part_info *part;
-
- initialized = 1;
- current_dev = (struct mtd_device *)
- malloc(sizeof(struct mtd_device) +
- sizeof(struct part_info) +
- sizeof(struct mtdids));
- if (!current_dev) {
- printf("out of memory\n");
- return 1;
- }
- memset(current_dev, 0, sizeof(struct mtd_device) +
- sizeof(struct part_info) + sizeof(struct mtdids));
-
- id = (struct mtdids *)(current_dev + 1);
- part = (struct part_info *)(id + 1);
-
- /* id */
- id->mtd_id = "single part";
-
-#if defined(CONFIG_JFFS2_DEV)
- dev_name = CONFIG_JFFS2_DEV;
-#else
- dev_name = "nor0";
-#endif
-
- if ((id_parse(dev_name, NULL, &id->type, &id->num) != 0) ||
- (device_validate(id->type, id->num, &size) != 0)) {
- printf("incorrect device: %s%d\n", MTD_DEV_TYPE(id->type), id->num);
- free(current_dev);
- return 1;
- }
- id->size = size;
- INIT_LIST_HEAD(&id->link);
-
- DEBUGF("dev id: type = %d, num = %d, size = 0x%08lx, mtd_id = %s\n",
- id->type, id->num, id->size, id->mtd_id);
-
- /* partition */
- part->name = "static";
- part->auto_name = 0;
-
-#if defined(CONFIG_JFFS2_PART_SIZE)
- part->size = CONFIG_JFFS2_PART_SIZE;
-#else
- part->size = SIZE_REMAINING;
-#endif
-
-#if defined(CONFIG_JFFS2_PART_OFFSET)
- part->offset = CONFIG_JFFS2_PART_OFFSET;
-#else
- part->offset = 0x00000000;
-#endif
-
- part->sector_size = get_part_sector_size(id, part);
-
- part->dev = current_dev;
- INIT_LIST_HEAD(&part->link);
-
- /* recalculate size if needed */
- if (part->size == SIZE_REMAINING)
- part->size = id->size - part->offset;
-
- DEBUGF("part : name = %s, size = 0x%08lx, offset = 0x%08lx\n",
- part->name, part->size, part->offset);
-
- /* device */
- current_dev->id = id;
- INIT_LIST_HEAD(¤t_dev->link);
- current_dev->num_parts = 1;
- INIT_LIST_HEAD(¤t_dev->parts);
- list_add(&part->link, ¤t_dev->parts);
- }
-
- return 0;
-}
-#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
-
-/**
- * Return pointer to the partition of a requested number from a requested
- * device.
- *
- * @param dev device that is to be searched for a partition
- * @param part_num requested partition number
- * @return pointer to the part_info, NULL otherwise
- */
-static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num)
-{
- struct list_head *entry;
- struct part_info *part;
- int num;
-
- if (!dev)
- return NULL;
-
- DEBUGF("\n--- jffs2_part_info: partition number %d for device %s%d (%s)\n",
- part_num, MTD_DEV_TYPE(dev->id->type),
- dev->id->num, dev->id->mtd_id);
-
- if (part_num >= dev->num_parts) {
- printf("invalid partition number %d for device %s%d (%s)\n",
- part_num, MTD_DEV_TYPE(dev->id->type),
- dev->id->num, dev->id->mtd_id);
- return NULL;
- }
-
- /* locate partition number, return it */
- num = 0;
- list_for_each(entry, &dev->parts) {
- part = list_entry(entry, struct part_info, link);
-
- if (part_num == num++) {
- return part;
- }
- }
-
- return NULL;
-}
-
-/***************************************************/
-/* U-boot commands */
-/***************************************************/
-
-/**
- * Routine implementing fsload u-boot command. This routine tries to load
- * a requested file from jffs2/cramfs filesystem on a current partition.
- *
- * @param cmdtp command internal data
- * @param flag command flag
- * @param argc number of arguments supplied to the command
- * @param argv arguments list
- * @return 0 on success, 1 otherwise
- */
-int do_jffs2_fsload(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- char *fsname;
- char *filename;
- int size;
- struct part_info *part;
- ulong offset = load_addr;
-
- /* pre-set Boot file name */
- if ((filename = getenv("bootfile")) == NULL) {
- filename = "uImage";
- }
-
- if (argc == 2) {
- filename = argv[1];
- }
- if (argc == 3) {
- offset = simple_strtoul(argv[1], NULL, 16);
- load_addr = offset;
- filename = argv[2];
- }
-
- /* make sure we are in sync with env variables */
- if (mtdparts_init() !=0)
- return 1;
-
- if ((part = jffs2_part_info(current_dev, current_partnum))){
-
- /* check partition type for cramfs */
- fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2");
- printf("### %s loading '%s' to 0x%lx\n", fsname, filename, offset);
-
- if (cramfs_check(part)) {
- size = cramfs_load ((char *) offset, part, filename);
- } else {
- /* if this is not cramfs assume jffs2 */
- size = jffs2_1pass_load((char *)offset, part, filename);
- }
-
- if (size > 0) {
- char buf[10];
- printf("### %s load complete: %d bytes loaded to 0x%lx\n",
- fsname, size, offset);
- sprintf(buf, "%x", size);
- setenv("filesize", buf);
- } else {
- printf("### %s LOAD ERROR<%x> for %s!\n", fsname, size, filename);
- }
-
- return !(size > 0);
- }
- return 1;
-}
-
-/**
- * Routine implementing u-boot ls command which lists content of a given
- * directory on a current partition.
- *
- * @param cmdtp command internal data
- * @param flag command flag
- * @param argc number of arguments supplied to the command
- * @param argv arguments list
- * @return 0 on success, 1 otherwise
- */
-int do_jffs2_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- char *filename = "/";
- int ret;
- struct part_info *part;
-
- if (argc == 2)
- filename = argv[1];
-
- /* make sure we are in sync with env variables */
- if (mtdparts_init() !=0)
- return 1;
-
- if ((part = jffs2_part_info(current_dev, current_partnum))){
-
- /* check partition type for cramfs */
- if (cramfs_check(part)) {
- ret = cramfs_ls (part, filename);
- } else {
- /* if this is not cramfs assume jffs2 */
- ret = jffs2_1pass_ls(part, filename);
- }
-
- return ret ? 0 : 1;
- }
- return 1;
-}
-
-/**
- * Routine implementing u-boot fsinfo command. This routine prints out
- * miscellaneous filesystem informations/statistics.
- *
- * @param cmdtp command internal data
- * @param flag command flag
- * @param argc number of arguments supplied to the command
- * @param argv arguments list
- * @return 0 on success, 1 otherwise
- */
-int do_jffs2_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- struct part_info *part;
- char *fsname;
- int ret;
-
- /* make sure we are in sync with env variables */
- if (mtdparts_init() !=0)
- return 1;
-
- if ((part = jffs2_part_info(current_dev, current_partnum))){
-
- /* check partition type for cramfs */
- fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2");
- printf("### filesystem type is %s\n", fsname);
-
- if (cramfs_check(part)) {
- ret = cramfs_info (part);
- } else {
- /* if this is not cramfs assume jffs2 */
- ret = jffs2_1pass_info(part);
- }
-
- return ret ? 0 : 1;
- }
- return 1;
-}
-
-/* command line only */
-#ifdef CONFIG_JFFS2_CMDLINE
-/**
- * Routine implementing u-boot chpart command. Sets new current partition based
- * on the user supplied partition id. For partition id format see find_dev_and_part().
- *
- * @param cmdtp command internal data
- * @param flag command flag
- * @param argc number of arguments supplied to the command
- * @param argv arguments list
- * @return 0 on success, 1 otherwise
- */
-int do_jffs2_chpart(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
-/* command line only */
- struct mtd_device *dev;
- struct part_info *part;
- u8 pnum;
-
- if (mtdparts_init() !=0)
- return 1;
-
- if (argc < 2) {
- printf("no partition id specified\n");
- return 1;
- }
-
- if (find_dev_and_part(argv[1], &dev, &pnum, &part) != 0)
- return 1;
-
- current_dev = dev;
- current_partnum = pnum;
- current_save();
-
- printf("partition changed to %s%d,%d\n",
- MTD_DEV_TYPE(dev->id->type), dev->id->num, pnum);
-
- return 0;
-}
-
-/**
- * Routine implementing u-boot mtdparts command. Initialize/update default global
- * partition list and process user partition request (list, add, del).
- *
- * @param cmdtp command internal data
- * @param flag command flag
- * @param argc number of arguments supplied to the command
- * @param argv arguments list
- * @return 0 on success, 1 otherwise
- */
-int do_jffs2_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- if (argc == 2) {
- if (strcmp(argv[1], "default") == 0) {
- setenv("mtdids", (char *)mtdids_default);
- setenv("mtdparts", (char *)mtdparts_default);
- setenv("partition", NULL);
-
- mtdparts_init();
- return 0;
- } else if (strcmp(argv[1], "delall") == 0) {
- /* this may be the first run, initialize lists if needed */
- mtdparts_init();
-
- setenv("mtdparts", NULL);
-
- /* jffs2_devices_init() calls current_save() */
- return jffs2_devices_init();
- }
- }
-
- /* make sure we are in sync with env variables */
- if (mtdparts_init() != 0)
- return 1;
-
- if (argc == 1) {
- list_partitions();
- return 0;
- }
-
- /* mtdparts add <mtd-dev> <size>[@<offset>] <name> [ro] */
- if (((argc == 5) || (argc == 6)) && (strcmp(argv[1], "add") == 0)) {
-#define PART_ADD_DESC_MAXLEN 64
- char tmpbuf[PART_ADD_DESC_MAXLEN];
- u8 type, num, len;
- struct mtd_device *dev;
- struct mtd_device *dev_tmp;
- struct mtdids *id;
- struct part_info *p;
-
- if (id_parse(argv[2], NULL, &type, &num) != 0)
- return 1;
-
- if ((id = id_find(type, num)) == NULL) {
- printf("no such device %s defined in mtdids variable\n", argv[2]);
- return 1;
- }
-
- len = strlen(id->mtd_id) + 1; /* 'mtd_id:' */
- len += strlen(argv[3]); /* size@offset */
- len += strlen(argv[4]) + 2; /* '(' name ')' */
- if (argv[5] && (strlen(argv[5]) == 2))
- len += 2; /* 'ro' */
-
- if (len >= PART_ADD_DESC_MAXLEN) {
- printf("too long partition description\n");
- return 1;
- }
- sprintf(tmpbuf, "%s:%s(%s)%s",
- id->mtd_id, argv[3], argv[4], argv[5] ? argv[5] : "");
- DEBUGF("add tmpbuf: %s\n", tmpbuf);
-
- if ((device_parse(tmpbuf, NULL, &dev) != 0) || (!dev))
- return 1;
-
- DEBUGF("+ %s\t%d\t%s\n", MTD_DEV_TYPE(dev->id->type),
- dev->id->num, dev->id->mtd_id);
-
- if ((dev_tmp = device_find(dev->id->type, dev->id->num)) == NULL) {
- device_add(dev);
- } else {
- /* merge new partition with existing ones*/
- p = list_entry(dev->parts.next, struct part_info, link);
- if (part_add(dev_tmp, p) != 0) {
- device_del(dev);
- return 1;
- }
- }
-
- if (generate_mtdparts_save(last_parts, MTDPARTS_MAXLEN) != 0) {
- printf("generated mtdparts too long, reseting to null\n");
- return 1;
- }
-
- return 0;
- }
-
- /* mtdparts del part-id */
- if ((argc == 3) && (strcmp(argv[1], "del") == 0)) {
- DEBUGF("del: part-id = %s\n", argv[2]);
-
- return delete_partition(argv[2]);
- }
-
- cmd_usage(cmdtp);
- return 1;
-}
-#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
-
-/***************************************************/
-U_BOOT_CMD(
- fsload, 3, 0, do_jffs2_fsload,
- "load binary file from a filesystem image",
- "[ off ] [ filename ]\n"
- " - load binary file from flash bank\n"
- " with offset 'off'\n"
-);
-U_BOOT_CMD(
- ls, 2, 1, do_jffs2_ls,
- "list files in a directory (default /)",
- "[ directory ]\n"
- " - list files in a directory.\n"
-);
-
-U_BOOT_CMD(
- fsinfo, 1, 1, do_jffs2_fsinfo,
- "print information about filesystems",
- " - print information about filesystems\n"
-);
-
-#ifdef CONFIG_JFFS2_CMDLINE
-U_BOOT_CMD(
- chpart, 2, 0, do_jffs2_chpart,
- "change active partition",
- "part-id\n"
- " - change active partition (e.g. part-id = nand0,1)\n"
-);
-
-U_BOOT_CMD(
- mtdparts, 6, 0, do_jffs2_mtdparts,
- "define flash/nand partitions",
- "\n"
- " - list partition table\n"
- "mtdparts delall\n"
- " - delete all partitions\n"
- "mtdparts del part-id\n"
- " - delete partition (e.g. part-id = nand0,1)\n"
- "mtdparts add <mtd-dev> <size>[@<offset>] [<name>] [ro]\n"
- " - add partition\n"
- "mtdparts default\n"
- " - reset partition table to defaults\n\n"
- "-----\n\n"
- "this command uses three environment variables:\n\n"
- "'partition' - keeps current partition identifier\n\n"
- "partition := <part-id>\n"
- "<part-id> := <dev-id>,part_num\n\n"
- "'mtdids' - linux kernel mtd device id <-> u-boot device id mapping\n\n"
- "mtdids=<idmap>[,<idmap>,...]\n\n"
- "<idmap> := <dev-id>=<mtd-id>\n"
- "<dev-id> := 'nand'|'nor'|'onenand'<dev-num>\n"
- "<dev-num> := mtd device number, 0...\n"
- "<mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)\n\n"
- "'mtdparts' - partition list\n\n"
- "mtdparts=mtdparts=<mtd-def>[;<mtd-def>...]\n\n"
- "<mtd-def> := <mtd-id>:<part-def>[,<part-def>...]\n"
- "<mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)\n"
- "<part-def> := <size>[@<offset>][<name>][<ro-flag>]\n"
- "<size> := standard linux memsize OR '-' to denote all remaining space\n"
- "<offset> := partition start offset within the device\n"
- "<name> := '(' NAME ')'\n"
- "<ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel)\n"
-);
-#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
-
-/***************************************************/
+/*
+ * (C) Copyright 2002
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2002
+ * Robert Schwebel, Pengutronix, <r.schwebel@pengutronix.de>
+ *
+ * (C) Copyright 2003
+ * Kai-Uwe Bloem, Auerswald GmbH & Co KG, <linux-development@auerswald.de>
+ *
+ * (C) Copyright 2005
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Added support for reading flash partition table from environment.
+ * Parsing routines are based on driver/mtd/cmdline.c from the linux 2.4
+ * kernel tree.
+ *
+ * $Id: cmd_jffs2.c,v 1.1.1.1 2009/03/25 22:21:56 kenagy Exp $
+ * Copyright 2002 SYSGO Real-Time Solutions GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+/*
+ * Three environment variables are used by the parsing routines:
+ *
+ * 'partition' - keeps current partition identifier
+ *
+ * partition := <part-id>
+ * <part-id> := <dev-id>,part_num
+ *
+ *
+ * 'mtdids' - linux kernel mtd device id <-> u-boot device id mapping
+ *
+ * mtdids=<idmap>[,<idmap>,...]
+ *
+ * <idmap> := <dev-id>=<mtd-id>
+ * <dev-id> := 'nand'|'nor'|'onenand'<dev-num>
+ * <dev-num> := mtd device number, 0...
+ * <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)
+ *
+ *
+ * 'mtdparts' - partition list
+ *
+ * mtdparts=mtdparts=<mtd-def>[;<mtd-def>...]
+ *
+ * <mtd-def> := <mtd-id>:<part-def>[,<part-def>...]
+ * <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)
+ * <part-def> := <size>[@<offset>][<name>][<ro-flag>]
+ * <size> := standard linux memsize OR '-' to denote all remaining space
+ * <offset> := partition start offset within the device
+ * <name> := '(' NAME ')'
+ * <ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel)
+ *
+ * Notes:
+ * - each <mtd-id> used in mtdparts must albo exist in 'mtddis' mapping
+ * - if the above variables are not set defaults for a given target are used
+ *
+ * Examples:
+ *
+ * 1 NOR Flash, with 1 single writable partition:
+ * mtdids=nor0=edb7312-nor
+ * mtdparts=mtdparts=edb7312-nor:-
+ *
+ * 1 NOR Flash with 2 partitions, 1 NAND with one
+ * mtdids=nor0=edb7312-nor,nand0=edb7312-nand
+ * mtdparts=mtdparts=edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home)
+ *
+ */
+
+/*
+ * JFFS2/CRAMFS support
+ */
+#include <common.h>
+#include <command.h>
+#include <malloc.h>
+#include <jffs2/jffs2.h>
+#include <linux/list.h>
+#include <linux/ctype.h>
+#include <cramfs/cramfs_fs.h>
+
+#if defined(CONFIG_CMD_NAND)
+#ifdef CONFIG_NAND_LEGACY
+#include <linux/mtd/nand_legacy.h>
+#else /* !CONFIG_NAND_LEGACY */
+#include <linux/mtd/nand.h>
+#include <nand.h>
+#endif /* !CONFIG_NAND_LEGACY */
+#endif
+
+#if defined(CONFIG_CMD_ONENAND)
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/onenand.h>
+#include <onenand_uboot.h>
+#endif
+
+/* enable/disable debugging messages */
+#define DEBUG_JFFS
+#undef DEBUG_JFFS
+
+#ifdef DEBUG_JFFS
+# define DEBUGF(fmt, args...) printf(fmt ,##args)
+#else
+# define DEBUGF(fmt, args...)
+#endif
+
+/* special size referring to all the remaining space in a partition */
+#define SIZE_REMAINING 0xFFFFFFFF
+
+/* special offset value, it is used when not provided by user
+ *
+ * this value is used temporarily during parsing, later such offests
+ * are recalculated */
+#define OFFSET_NOT_SPECIFIED 0xFFFFFFFF
+
+/* minimum partition size */
+#define MIN_PART_SIZE 4096
+
+/* this flag needs to be set in part_info struct mask_flags
+ * field for read-only partitions */
+#define MTD_WRITEABLE_CMD 1
+
+#ifdef CONFIG_JFFS2_CMDLINE
+/* default values for mtdids and mtdparts variables */
+#if defined(MTDIDS_DEFAULT)
+static const char *const mtdids_default = MTDIDS_DEFAULT;
+#else
+#warning "MTDIDS_DEFAULT not defined!"
+static const char *const mtdids_default = NULL;
+#endif
+
+#if defined(MTDPARTS_DEFAULT)
+static const char *const mtdparts_default = MTDPARTS_DEFAULT;
+#else
+#warning "MTDPARTS_DEFAULT not defined!"
+static const char *const mtdparts_default = NULL;
+#endif
+
+/* copies of last seen 'mtdids', 'mtdparts' and 'partition' env variables */
+#define MTDIDS_MAXLEN 128
+#define MTDPARTS_MAXLEN 512
+#define PARTITION_MAXLEN 16
+static char last_ids[MTDIDS_MAXLEN];
+static char last_parts[MTDPARTS_MAXLEN];
+static char last_partition[PARTITION_MAXLEN];
+
+/* low level jffs2 cache cleaning routine */
+extern void jffs2_free_cache(struct part_info *part);
+
+/* mtdids mapping list, filled by parse_ids() */
+struct list_head mtdids;
+
+/* device/partition list, parse_cmdline() parses into here */
+struct list_head devices;
+#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
+
+/* current active device and partition number */
+static struct mtd_device *current_dev = NULL;
+static u8 current_partnum = 0;
+
+#if defined(CONFIG_CMD_CRAMFS)
+extern int cramfs_check (struct part_info *info);
+extern int cramfs_load (char *loadoffset, struct part_info *info, char *filename);
+extern int cramfs_ls (struct part_info *info, char *filename);
+extern int cramfs_info (struct part_info *info);
+#else
+/* defining empty macros for function names is ugly but avoids ifdef clutter
+ * all over the code */
+#define cramfs_check(x) (0)
+#define cramfs_load(x,y,z) (-1)
+#define cramfs_ls(x,y) (0)
+#define cramfs_info(x) (0)
+#endif
+
+static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num);
+
+/* command line only routines */
+#ifdef CONFIG_JFFS2_CMDLINE
+
+static struct mtdids* id_find_by_mtd_id(const char *mtd_id, unsigned int mtd_id_len);
+static int device_del(struct mtd_device *dev);
+
+/**
+ * Parses a string into a number. The number stored at ptr is
+ * potentially suffixed with K (for kilobytes, or 1024 bytes),
+ * M (for megabytes, or 1048576 bytes), or G (for gigabytes, or
+ * 1073741824). If the number is suffixed with K, M, or G, then
+ * the return value is the number multiplied by one kilobyte, one
+ * megabyte, or one gigabyte, respectively.
+ *
+ * @param ptr where parse begins
+ * @param retptr output pointer to next char after parse completes (output)
+ * @return resulting unsigned int
+ */
+static unsigned long memsize_parse (const char *const ptr, const char **retptr)
+{
+ unsigned long ret = simple_strtoul(ptr, (char **)retptr, 0);
+
+ switch (**retptr) {
+ case 'G':
+ case 'g':
+ ret <<= 10;
+ case 'M':
+ case 'm':
+ ret <<= 10;
+ case 'K':
+ case 'k':
+ ret <<= 10;
+ (*retptr)++;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+/**
+ * Format string describing supplied size. This routine does the opposite job
+ * to memsize_parse(). Size in bytes is converted to string and if possible
+ * shortened by using k (kilobytes), m (megabytes) or g (gigabytes) suffix.
+ *
+ * Note, that this routine does not check for buffer overflow, it's the caller
+ * who must assure enough space.
+ *
+ * @param buf output buffer
+ * @param size size to be converted to string
+ */
+static void memsize_format(char *buf, u32 size)
+{
+#define SIZE_GB ((u32)1024*1024*1024)
+#define SIZE_MB ((u32)1024*1024)
+#define SIZE_KB ((u32)1024)
+
+ if ((size % SIZE_GB) == 0)
+ sprintf(buf, "%ug", size/SIZE_GB);
+ else if ((size % SIZE_MB) == 0)
+ sprintf(buf, "%um", size/SIZE_MB);
+ else if (size % SIZE_KB == 0)
+ sprintf(buf, "%uk", size/SIZE_KB);
+ else
+ sprintf(buf, "%u", size);
+}
+
+/**
+ * This routine does global indexing of all partitions. Resulting index for
+ * current partition is saved in 'mtddevnum'. Current partition name in
+ * 'mtddevname'.
+ */
+static void index_partitions(void)
+{
+ char buf[16];
+ u16 mtddevnum;
+ struct part_info *part;
+ struct list_head *dentry;
+ struct mtd_device *dev;
+
+ DEBUGF("--- index partitions ---\n");
+
+ if (current_dev) {
+ mtddevnum = 0;
+ list_for_each(dentry, &devices) {
+ dev = list_entry(dentry, struct mtd_device, link);
+ if (dev == current_dev) {
+ mtddevnum += current_partnum;
+ sprintf(buf, "%d", mtddevnum);
+ setenv("mtddevnum", buf);
+ break;
+ }
+ mtddevnum += dev->num_parts;
+ }
+
+ part = jffs2_part_info(current_dev, current_partnum);
+ setenv("mtddevname", part->name);
+
+ DEBUGF("=> mtddevnum %d,\n=> mtddevname %s\n", mtddevnum, part->name);
+ } else {
+ setenv("mtddevnum", NULL);
+ setenv("mtddevname", NULL);
+
+ DEBUGF("=> mtddevnum NULL\n=> mtddevname NULL\n");
+ }
+}
+
+/**
+ * Save current device and partition in environment variable 'partition'.
+ */
+static void current_save(void)
+{
+ char buf[16];
+
+ DEBUGF("--- current_save ---\n");
+
+ if (current_dev) {
+ sprintf(buf, "%s%d,%d", MTD_DEV_TYPE(current_dev->id->type),
+ current_dev->id->num, current_partnum);
+
+ setenv("partition", buf);
+ strncpy(last_partition, buf, 16);
+
+ DEBUGF("=> partition %s\n", buf);
+ } else {
+ setenv("partition", NULL);
+ last_partition[0] = '\0';
+
+ DEBUGF("=> partition NULL\n");
+ }
+ index_partitions();
+}
+
+/**
+ * Performs sanity check for supplied NOR flash partition. Table of existing
+ * NOR flash devices is searched and partition device is located. Alignment
+ * with the granularity of NOR flash sectors is verified.
+ *
+ * @param id of the parent device
+ * @param part partition to validate
+ * @return 0 if partition is valid, 1 otherwise
+ */
+static int part_validate_nor(struct mtdids *id, struct part_info *part)
+{
+#if defined(CONFIG_CMD_FLASH)
+ /* info for FLASH chips */
+ extern flash_info_t flash_info[];
+ flash_info_t *flash;
+ int offset_aligned;
+ u32 end_offset, sector_size = 0;
+ int i;
+
+ flash = &flash_info[id->num];
+
+ /* size of last sector */
+ part->sector_size = flash->size -
+ (flash->start[flash->sector_count-1] - flash->start[0]);
+
+ offset_aligned = 0;
+ for (i = 0; i < flash->sector_count; i++) {
+ if ((flash->start[i] - flash->start[0]) == part->offset) {
+ offset_aligned = 1;
+ break;
+ }
+ }
+ if (offset_aligned == 0) {
+ printf("%s%d: partition (%s) start offset alignment incorrect\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+ return 1;
+ }
+
+ end_offset = part->offset + part->size;
+ offset_aligned = 0;
+ for (i = 0; i < flash->sector_count; i++) {
+ if (i) {
+ sector_size = flash->start[i] - flash->start[i-1];
+ if (part->sector_size < sector_size)
+ part->sector_size = sector_size;
+ }
+ if ((flash->start[i] - flash->start[0]) == end_offset)
+ offset_aligned = 1;
+ }
+
+ if (offset_aligned || flash->size == end_offset)
+ return 0;
+
+ printf("%s%d: partition (%s) size alignment incorrect\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+#endif
+ return 1;
+}
+
+/**
+ * Performs sanity check for supplied NAND flash partition. Table of existing
+ * NAND flash devices is searched and partition device is located. Alignment
+ * with the granularity of nand erasesize is verified.
+ *
+ * @param id of the parent device
+ * @param part partition to validate
+ * @return 0 if partition is valid, 1 otherwise
+ */
+static int part_validate_nand(struct mtdids *id, struct part_info *part)
+{
+#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
+ /* info for NAND chips */
+ nand_info_t *nand;
+
+ nand = &nand_info[id->num];
+
+ part->sector_size = nand->erasesize;
+
+ if ((unsigned long)(part->offset) % nand->erasesize) {
+ printf("%s%d: partition (%s) start offset alignment incorrect\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+ return 1;
+ }
+
+ if (part->size % nand->erasesize) {
+ printf("%s%d: partition (%s) size alignment incorrect\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+ return 1;
+ }
+
+ return 0;
+#else
+ return 1;
+#endif
+}
+
+/**
+ * Performs sanity check for supplied OneNAND flash partition.
+ * Table of existing OneNAND flash devices is searched and partition device
+ * is located. Alignment with the granularity of nand erasesize is verified.
+ *
+ * @param id of the parent device
+ * @param part partition to validate
+ * @return 0 if partition is valid, 1 otherwise
+ */
+static int part_validate_onenand(struct mtdids *id, struct part_info *part)
+{
+#if defined(CONFIG_CMD_ONENAND)
+ /* info for OneNAND chips */
+ struct mtd_info *mtd;
+
+ mtd = &onenand_mtd;
+
+ part->sector_size = mtd->erasesize;
+
+ if ((unsigned long)(part->offset) % mtd->erasesize) {
+ printf("%s%d: partition (%s) start offset"
+ "alignment incorrect\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+ return 1;
+ }
+
+ if (part->size % mtd->erasesize) {
+ printf("%s%d: partition (%s) size alignment incorrect\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+ return 1;
+ }
+
+ return 0;
+#else
+ return 1;
+#endif
+}
+
+
+/**
+ * Performs sanity check for supplied partition. Offset and size are verified
+ * to be within valid range. Partition type is checked and either
+ * parts_validate_nor() or parts_validate_nand() is called with the argument
+ * of part.
+ *
+ * @param id of the parent device
+ * @param part partition to validate
+ * @return 0 if partition is valid, 1 otherwise
+ */
+static int part_validate(struct mtdids *id, struct part_info *part)
+{
+ if (part->size == SIZE_REMAINING)
+ part->size = id->size - part->offset;
+
+ if (part->offset > id->size) {
+ printf("%s: offset %08x beyond flash size %08x\n",
+ id->mtd_id, part->offset, id->size);
+ return 1;
+ }
+
+ if ((part->offset + part->size) <= part->offset) {
+ printf("%s%d: partition (%s) size too big\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+ return 1;
+ }
+
+ if (part->offset + part->size > id->size) {
+ printf("%s: partitioning exceeds flash size\n", id->mtd_id);
+ return 1;
+ }
+
+ if (id->type == MTD_DEV_TYPE_NAND)
+ return part_validate_nand(id, part);
+ else if (id->type == MTD_DEV_TYPE_NOR)
+ return part_validate_nor(id, part);
+ else if (id->type == MTD_DEV_TYPE_ONENAND)
+ return part_validate_onenand(id, part);
+ else
+ DEBUGF("part_validate: invalid dev type\n");
+
+ return 1;
+}
+
+/**
+ * Delete selected partition from the partion list of the specified device.
+ *
+ * @param dev device to delete partition from
+ * @param part partition to delete
+ * @return 0 on success, 1 otherwise
+ */
+static int part_del(struct mtd_device *dev, struct part_info *part)
+{
+ u8 current_save_needed = 0;
+
+ /* if there is only one partition, remove whole device */
+ if (dev->num_parts == 1)
+ return device_del(dev);
+
+ /* otherwise just delete this partition */
+
+ if (dev == current_dev) {
+ /* we are modyfing partitions for the current device,
+ * update current */
+ struct part_info *curr_pi;
+ curr_pi = jffs2_part_info(current_dev, current_partnum);
+
+ if (curr_pi) {
+ if (curr_pi == part) {
+ printf("current partition deleted, resetting current to 0\n");
+ current_partnum = 0;
+ } else if (part->offset <= curr_pi->offset) {
+ current_partnum--;
+ }
+ current_save_needed = 1;
+ }
+ }
+
+#ifdef CONFIG_NAND_LEGACY
+ jffs2_free_cache(part);
+#endif
+ list_del(&part->link);
+ free(part);
+ dev->num_parts--;
+
+ if (current_save_needed > 0)
+ current_save();
+ else
+ index_partitions();
+
+ return 0;
+}
+
+/**
+ * Delete all partitions from parts head list, free memory.
+ *
+ * @param head list of partitions to delete
+ */
+static void part_delall(struct list_head *head)
+{
+ struct list_head *entry, *n;
+ struct part_info *part_tmp;
+
+ /* clean tmp_list and free allocated memory */
+ list_for_each_safe(entry, n, head) {
+ part_tmp = list_entry(entry, struct part_info, link);
+
+#ifdef CONFIG_NAND_LEGACY
+ jffs2_free_cache(part_tmp);
+#endif
+ list_del(entry);
+ free(part_tmp);
+ }
+}
+
+/**
+ * Add new partition to the supplied partition list. Make sure partitions are
+ * sorted by offset in ascending order.
+ *
+ * @param head list this partition is to be added to
+ * @param new partition to be added
+ */
+static int part_sort_add(struct mtd_device *dev, struct part_info *part)
+{
+ struct list_head *entry;
+ struct part_info *new_pi, *curr_pi;
+
+ /* link partition to parrent dev */
+ part->dev = dev;
+
+ if (list_empty(&dev->parts)) {
+ DEBUGF("part_sort_add: list empty\n");
+ list_add(&part->link, &dev->parts);
+ dev->num_parts++;
+ index_partitions();
+ return 0;
+ }
+
+ new_pi = list_entry(&part->link, struct part_info, link);
+
+ /* get current partition info if we are updating current device */
+ curr_pi = NULL;
+ if (dev == current_dev)
+ curr_pi = jffs2_part_info(current_dev, current_partnum);
+
+ list_for_each(entry, &dev->parts) {
+ struct part_info *pi;
+
+ pi = list_entry(entry, struct part_info, link);
+
+ /* be compliant with kernel cmdline, allow only one partition at offset zero */
+ if ((new_pi->offset == pi->offset) && (pi->offset == 0)) {
+ printf("cannot add second partition at offset 0\n");
+ return 1;
+ }
+
+ if (new_pi->offset <= pi->offset) {
+ list_add_tail(&part->link, entry);
+ dev->num_parts++;
+
+ if (curr_pi && (pi->offset <= curr_pi->offset)) {
+ /* we are modyfing partitions for the current
+ * device, update current */
+ current_partnum++;
+ current_save();
+ } else {
+ index_partitions();
+ }
+ return 0;
+ }
+ }
+
+ list_add_tail(&part->link, &dev->parts);
+ dev->num_parts++;
+ index_partitions();
+ return 0;
+}
+
+/**
+ * Add provided partition to the partition list of a given device.
+ *
+ * @param dev device to which partition is added
+ * @param part partition to be added
+ * @return 0 on success, 1 otherwise
+ */
+static int part_add(struct mtd_device *dev, struct part_info *part)
+{
+ /* verify alignment and size */
+ if (part_validate(dev->id, part) != 0)
+ return 1;
+
+ /* partition is ok, add it to the list */
+ if (part_sort_add(dev, part) != 0)
+ return 1;
+
+ return 0;
+}
+
+/**
+ * Parse one partition definition, allocate memory and return pointer to this
+ * location in retpart.
+ *
+ * @param partdef pointer to the partition definition string i.e. <part-def>
+ * @param ret output pointer to next char after parse completes (output)
+ * @param retpart pointer to the allocated partition (output)
+ * @return 0 on success, 1 otherwise
+ */
+static int part_parse(const char *const partdef, const char **ret, struct part_info **retpart)
+{
+ struct part_info *part;
+ unsigned long size;
+ unsigned long offset;
+ const char *name;
+ int name_len;
+ unsigned int mask_flags;
+ const char *p;
+
+ p = partdef;
+ *retpart = NULL;
+ *ret = NULL;
+
+ /* fetch the partition size */
+ if (*p == '-') {
+ /* assign all remaining space to this partition */
+ DEBUGF("'-': remaining size assigned\n");
+ size = SIZE_REMAINING;
+ p++;
+ } else {
+ size = memsize_parse(p, &p);
+ if (size < MIN_PART_SIZE) {
+ printf("partition size too small (%lx)\n", size);
+ return 1;
+ }
+ }
+
+ /* check for offset */
+ offset = OFFSET_NOT_SPECIFIED;
+ if (*p == '@') {
+ p++;
+ offset = memsize_parse(p, &p);
+ }
+
+ /* now look for the name */
+ if (*p == '(') {
+ name = ++p;
+ if ((p = strchr(name, ')')) == NULL) {
+ printf("no closing ) found in partition name\n");
+ return 1;
+ }
+ name_len = p - name + 1;
+ if ((name_len - 1) == 0) {
+ printf("empty partition name\n");
+ return 1;
+ }
+ p++;
+ } else {
+ /* 0x00000000@0x00000000 */
+ name_len = 22;
+ name = NULL;
+ }
+
+ /* test for options */
+ mask_flags = 0;
+ if (strncmp(p, "ro", 2) == 0) {
+ mask_flags |= MTD_WRITEABLE_CMD;
+ p += 2;
+ }
+
+ /* check for next partition definition */
+ if (*p == ',') {
+ if (size == SIZE_REMAINING) {
+ *ret = NULL;
+ printf("no partitions allowed after a fill-up partition\n");
+ return 1;
+ }
+ *ret = ++p;
+ } else if ((*p == ';') || (*p == '\0')) {
+ *ret = p;
+ } else {
+ printf("unexpected character '%c' at the end of partition\n", *p);
+ *ret = NULL;
+ return 1;
+ }
+
+ /* allocate memory */
+ part = (struct part_info *)malloc(sizeof(struct part_info) + name_len);
+ if (!part) {
+ printf("out of memory\n");
+ return 1;
+ }
+ memset(part, 0, sizeof(struct part_info) + name_len);
+ part->size = size;
+ part->offset = offset;
+ part->mask_flags = mask_flags;
+ part->name = (char *)(part + 1);
+
+ if (name) {
+ /* copy user provided name */
+ strncpy(part->name, name, name_len - 1);
+ part->auto_name = 0;
+ } else {
+ /* auto generated name in form of size@offset */
+ sprintf(part->name, "0x%08lx@0x%08lx", size, offset);
+ part->auto_name = 1;
+ }
+
+ part->name[name_len - 1] = '\0';
+ INIT_LIST_HEAD(&part->link);
+
+ DEBUGF("+ partition: name %-22s size 0x%08x offset 0x%08x mask flags %d\n",
+ part->name, part->size,
+ part->offset, part->mask_flags);
+
+ *retpart = part;
+ return 0;
+}
+#endif/* #ifdef CONFIG_JFFS2_CMDLINE */
+
+/**
+ * Check device number to be within valid range for given device type.
+ *
+ * @param dev device to validate
+ * @return 0 if device is valid, 1 otherwise
+ */
+static int device_validate(u8 type, u8 num, u32 *size)
+{
+ if (type == MTD_DEV_TYPE_NOR) {
+#if defined(CONFIG_CMD_FLASH)
+ if (num < CONFIG_SYS_MAX_FLASH_BANKS) {
+ extern flash_info_t flash_info[];
+ *size = flash_info[num].size;
+
+ return 0;
+ }
+
+ printf("no such FLASH device: %s%d (valid range 0 ... %d\n",
+ MTD_DEV_TYPE(type), num, CONFIG_SYS_MAX_FLASH_BANKS - 1);
+#else
+ printf("support for FLASH devices not present\n");
+#endif
+ } else if (type == MTD_DEV_TYPE_NAND) {
+#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
+ if (num < CONFIG_SYS_MAX_NAND_DEVICE) {
+#ifndef CONFIG_NAND_LEGACY
+ *size = nand_info[num].size;
+#else
+ extern struct nand_chip nand_dev_desc[CONFIG_SYS_MAX_NAND_DEVICE];
+ *size = nand_dev_desc[num].totlen;
+#endif
+ return 0;
+ }
+
+ printf("no such NAND device: %s%d (valid range 0 ... %d)\n",
+ MTD_DEV_TYPE(type), num, CONFIG_SYS_MAX_NAND_DEVICE - 1);
+#else
+ printf("support for NAND devices not present\n");
+#endif
+ } else if (type == MTD_DEV_TYPE_ONENAND) {
+#if defined(CONFIG_CMD_ONENAND)
+ *size = onenand_mtd.size;
+ return 0;
+#else
+ printf("support for OneNAND devices not present\n");
+#endif
+ } else
+ printf("Unknown defice type %d\n", type);
+
+ return 1;
+}
+
+#ifdef CONFIG_JFFS2_CMDLINE
+/**
+ * Delete all mtd devices from a supplied devices list, free memory allocated for
+ * each device and delete all device partitions.
+ *
+ * @return 0 on success, 1 otherwise
+ */
+static int device_delall(struct list_head *head)
+{
+ struct list_head *entry, *n;
+ struct mtd_device *dev_tmp;
+
+ /* clean devices list */
+ list_for_each_safe(entry, n, head) {
+ dev_tmp = list_entry(entry, struct mtd_device, link);
+ list_del(entry);
+ part_delall(&dev_tmp->parts);
+ free(dev_tmp);
+ }
+ INIT_LIST_HEAD(&devices);
+
+ return 0;
+}
+
+/**
+ * If provided device exists it's partitions are deleted, device is removed
+ * from device list and device memory is freed.
+ *
+ * @param dev device to be deleted
+ * @return 0 on success, 1 otherwise
+ */
+static int device_del(struct mtd_device *dev)
+{
+ part_delall(&dev->parts);
+ list_del(&dev->link);
+ free(dev);
+
+ if (dev == current_dev) {
+ /* we just deleted current device */
+ if (list_empty(&devices)) {
+ current_dev = NULL;
+ } else {
+ /* reset first partition from first dev from the
+ * devices list as current */
+ current_dev = list_entry(devices.next, struct mtd_device, link);
+ current_partnum = 0;
+ }
+ current_save();
+ return 0;
+ }
+
+ index_partitions();
+ return 0;
+}
+
+/**
+ * Search global device list and return pointer to the device of type and num
+ * specified.
+ *
+ * @param type device type
+ * @param num device number
+ * @return NULL if requested device does not exist
+ */
+static struct mtd_device* device_find(u8 type, u8 num)
+{
+ struct list_head *entry;
+ struct mtd_device *dev_tmp;
+
+ list_for_each(entry, &devices) {
+ dev_tmp = list_entry(entry, struct mtd_device, link);
+
+ if ((dev_tmp->id->type == type) && (dev_tmp->id->num == num))
+ return dev_tmp;
+ }
+
+ return NULL;
+}
+
+/**
+ * Add specified device to the global device list.
+ *
+ * @param dev device to be added
+ */
+static void device_add(struct mtd_device *dev)
+{
+ u8 current_save_needed = 0;
+
+ if (list_empty(&devices)) {
+ current_dev = dev;
+ current_partnum = 0;
+ current_save_needed = 1;
+ }
+
+ list_add_tail(&dev->link, &devices);
+
+ if (current_save_needed > 0)
+ current_save();
+ else
+ index_partitions();
+}
+
+/**
+ * Parse device type, name and mtd-id. If syntax is ok allocate memory and
+ * return pointer to the device structure.
+ *
+ * @param mtd_dev pointer to the device definition string i.e. <mtd-dev>
+ * @param ret output pointer to next char after parse completes (output)
+ * @param retdev pointer to the allocated device (output)
+ * @return 0 on success, 1 otherwise
+ */
+static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_device **retdev)
+{
+ struct mtd_device *dev;
+ struct part_info *part;
+ struct mtdids *id;
+ const char *mtd_id;
+ unsigned int mtd_id_len;
+ const char *p, *pend;
+ LIST_HEAD(tmp_list);
+ struct list_head *entry, *n;
+ u16 num_parts;
+ u32 offset;
+ int err = 1;
+
+ p = mtd_dev;
+ *retdev = NULL;
+ *ret = NULL;
+
+ DEBUGF("===device_parse===\n");
+
+ /* fetch <mtd-id> */
+ mtd_id = p;
+ if (!(p = strchr(mtd_id, ':'))) {
+ printf("no <mtd-id> identifier\n");
+ return 1;
+ }
+ mtd_id_len = p - mtd_id + 1;
+ p++;
+
+ /* verify if we have a valid device specified */
+ if ((id = id_find_by_mtd_id(mtd_id, mtd_id_len - 1)) == NULL) {
+ printf("invalid mtd device '%.*s'\n", mtd_id_len - 1, mtd_id);
+ return 1;
+ }
+
+ DEBUGF("dev type = %d (%s), dev num = %d, mtd-id = %s\n",
+ id->type, MTD_DEV_TYPE(id->type),
+ id->num, id->mtd_id);
+ pend = strchr(p, ';');
+ DEBUGF("parsing partitions %.*s\n", (pend ? pend - p : strlen(p)), p);
+
+
+ /* parse partitions */
+ num_parts = 0;
+
+ offset = 0;
+ if ((dev = device_find(id->type, id->num)) != NULL) {
+ /* if device already exists start at the end of the last partition */
+ part = list_entry(dev->parts.prev, struct part_info, link);
+ offset = part->offset + part->size;
+ }
+
+ while (p && (*p != '\0') && (*p != ';')) {
+ err = 1;
+ if ((part_parse(p, &p, &part) != 0) || (!part))
+ break;
+
+ /* calculate offset when not specified */
+ if (part->offset == OFFSET_NOT_SPECIFIED)
+ part->offset = offset;
+ else
+ offset = part->offset;
+
+ /* verify alignment and size */
+ if (part_validate(id, part) != 0)
+ break;
+
+ offset += part->size;
+
+ /* partition is ok, add it to the list */
+ list_add_tail(&part->link, &tmp_list);
+ num_parts++;
+ err = 0;
+ }
+ if (err == 1) {
+ part_delall(&tmp_list);
+ return 1;
+ }
+
+ if (num_parts == 0) {
+ printf("no partitions for device %s%d (%s)\n",
+ MTD_DEV_TYPE(id->type), id->num, id->mtd_id);
+ return 1;
+ }
+
+ DEBUGF("\ntotal partitions: %d\n", num_parts);
+
+ /* check for next device presence */
+ if (p) {
+ if (*p == ';') {
+ *ret = ++p;
+ } else if (*p == '\0') {
+ *ret = p;
+ } else {
+ printf("unexpected character '%c' at the end of device\n", *p);
+ *ret = NULL;
+ return 1;
+ }
+ }
+
+ /* allocate memory for mtd_device structure */
+ if ((dev = (struct mtd_device *)malloc(sizeof(struct mtd_device))) == NULL) {
+ printf("out of memory\n");
+ return 1;
+ }
+ memset(dev, 0, sizeof(struct mtd_device));
+ dev->id = id;
+ dev->num_parts = 0; /* part_sort_add increments num_parts */
+ INIT_LIST_HEAD(&dev->parts);
+ INIT_LIST_HEAD(&dev->link);
+
+ /* move partitions from tmp_list to dev->parts */
+ list_for_each_safe(entry, n, &tmp_list) {
+ part = list_entry(entry, struct part_info, link);
+ list_del(entry);
+ if (part_sort_add(dev, part) != 0) {
+ device_del(dev);
+ return 1;
+ }
+ }
+
+ *retdev = dev;
+
+ DEBUGF("===\n\n");
+ return 0;
+}
+
+/**
+ * Initialize global device list.
+ *
+ * @return 0 on success, 1 otherwise
+ */
+static int jffs2_devices_init(void)
+{
+ last_parts[0] = '\0';
+ current_dev = NULL;
+ current_save();
+
+ return device_delall(&devices);
+}
+
+/*
+ * Search global mtdids list and find id of requested type and number.
+ *
+ * @return pointer to the id if it exists, NULL otherwise
+ */
+static struct mtdids* id_find(u8 type, u8 num)
+{
+ struct list_head *entry;
+ struct mtdids *id;
+
+ list_for_each(entry, &mtdids) {
+ id = list_entry(entry, struct mtdids, link);
+
+ if ((id->type == type) && (id->num == num))
+ return id;
+ }
+
+ return NULL;
+}
+
+/**
+ * Search global mtdids list and find id of a requested mtd_id.
+ *
+ * Note: first argument is not null terminated.
+ *
+ * @param mtd_id string containing requested mtd_id
+ * @param mtd_id_len length of supplied mtd_id
+ * @return pointer to the id if it exists, NULL otherwise
+ */
+static struct mtdids* id_find_by_mtd_id(const char *mtd_id, unsigned int mtd_id_len)
+{
+ struct list_head *entry;
+ struct mtdids *id;
+
+ DEBUGF("--- id_find_by_mtd_id: '%.*s' (len = %d)\n",
+ mtd_id_len, mtd_id, mtd_id_len);
+
+ list_for_each(entry, &mtdids) {
+ id = list_entry(entry, struct mtdids, link);
+
+ DEBUGF("entry: '%s' (len = %d)\n",
+ id->mtd_id, strlen(id->mtd_id));
+
+ if (mtd_id_len != strlen(id->mtd_id))
+ continue;
+ if (strncmp(id->mtd_id, mtd_id, mtd_id_len) == 0)
+ return id;
+ }
+
+ return NULL;
+}
+#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
+
+/**
+ * Parse device id string <dev-id> := 'nand'|'nor'|'onenand'<dev-num>,
+ * return device type and number.
+ *
+ * @param id string describing device id
+ * @param ret_id output pointer to next char after parse completes (output)
+ * @param dev_type parsed device type (output)
+ * @param dev_num parsed device number (output)
+ * @return 0 on success, 1 otherwise
+ */
+int id_parse(const char *id, const char **ret_id, u8 *dev_type, u8 *dev_num)
+{
+ const char *p = id;
+
+ *dev_type = 0;
+ if (strncmp(p, "nand", 4) == 0) {
+ *dev_type = MTD_DEV_TYPE_NAND;
+ p += 4;
+ } else if (strncmp(p, "nor", 3) == 0) {
+ *dev_type = MTD_DEV_TYPE_NOR;
+ p += 3;
+ } else if (strncmp(p, "onenand", 7) == 0) {
+ *dev_type = MTD_DEV_TYPE_ONENAND;
+ p += 7;
+ } else {
+ printf("incorrect device type in %s\n", id);
+ return 1;
+ }
+
+ if (!isdigit(*p)) {
+ printf("incorrect device number in %s\n", id);
+ return 1;
+ }
+
+ *dev_num = simple_strtoul(p, (char **)&p, 0);
+ if (ret_id)
+ *ret_id = p;
+ return 0;
+}
+
+#ifdef CONFIG_JFFS2_CMDLINE
+/**
+ * Process all devices and generate corresponding mtdparts string describing
+ * all partitions on all devices.
+ *
+ * @param buf output buffer holding generated mtdparts string (output)
+ * @param buflen buffer size
+ * @return 0 on success, 1 otherwise
+ */
+static int generate_mtdparts(char *buf, u32 buflen)
+{
+ struct list_head *pentry, *dentry;
+ struct mtd_device *dev;
+ struct part_info *part, *prev_part;
+ char *p = buf;
+ char tmpbuf[32];
+ u32 size, offset, len, part_cnt;
+ u32 maxlen = buflen - 1;
+
+ DEBUGF("--- generate_mtdparts ---\n");
+
+ if (list_empty(&devices)) {
+ buf[0] = '\0';
+ return 0;
+ }
+
+ sprintf(p, "mtdparts=");
+ p += 9;
+
+ list_for_each(dentry, &devices) {
+ dev = list_entry(dentry, struct mtd_device, link);
+
+ /* copy mtd_id */
+ len = strlen(dev->id->mtd_id) + 1;
+ if (len > maxlen)
+ goto cleanup;
+ memcpy(p, dev->id->mtd_id, len - 1);
+ p += len - 1;
+ *(p++) = ':';
+ maxlen -= len;
+
+ /* format partitions */
+ prev_part = NULL;
+ part_cnt = 0;
+ list_for_each(pentry, &dev->parts) {
+ part = list_entry(pentry, struct part_info, link);
+ size = part->size;
+ offset = part->offset;
+ part_cnt++;
+
+ /* partition size */
+ memsize_format(tmpbuf, size);
+ len = strlen(tmpbuf);
+ if (len > maxlen)
+ goto cleanup;
+ memcpy(p, tmpbuf, len);
+ p += len;
+ maxlen -= len;
+
+
+ /* add offset only when there is a gap between
+ * partitions */
+ if ((!prev_part && (offset != 0)) ||
+ (prev_part && ((prev_part->offset + prev_part->size) != part->offset))) {
+
+ memsize_format(tmpbuf, offset);
+ len = strlen(tmpbuf) + 1;
+ if (len > maxlen)
+ goto cleanup;
+ *(p++) = '@';
+ memcpy(p, tmpbuf, len - 1);
+ p += len - 1;
+ maxlen -= len;
+ }
+
+ /* copy name only if user supplied */
+ if(!part->auto_name) {
+ len = strlen(part->name) + 2;
+ if (len > maxlen)
+ goto cleanup;
+
+ *(p++) = '(';
+ memcpy(p, part->name, len - 2);
+ p += len - 2;
+ *(p++) = ')';
+ maxlen -= len;
+ }
+
+ /* ro mask flag */
+ if (part->mask_flags && MTD_WRITEABLE_CMD) {
+ len = 2;
+ if (len > maxlen)
+ goto cleanup;
+ *(p++) = 'r';
+ *(p++) = 'o';
+ maxlen -= 2;
+ }
+
+ /* print ',' separator if there are other partitions
+ * following */
+ if (dev->num_parts > part_cnt) {
+ if (1 > maxlen)
+ goto cleanup;
+ *(p++) = ',';
+ maxlen--;
+ }
+ prev_part = part;
+ }
+ /* print ';' separator if there are other devices following */
+ if (dentry->next != &devices) {
+ if (1 > maxlen)
+ goto cleanup;
+ *(p++) = ';';
+ maxlen--;
+ }
+ }
+
+ /* we still have at least one char left, as we decremented maxlen at
+ * the begining */
+ *p = '\0';
+
+ return 0;
+
+cleanup:
+ last_parts[0] = '\0';
+ return 1;
+}
+
+/**
+ * Call generate_mtdparts to process all devices and generate corresponding
+ * mtdparts string, save it in mtdparts environment variable.
+ *
+ * @param buf output buffer holding generated mtdparts string (output)
+ * @param buflen buffer size
+ * @return 0 on success, 1 otherwise
+ */
+static int generate_mtdparts_save(char *buf, u32 buflen)
+{
+ int ret;
+
+ ret = generate_mtdparts(buf, buflen);
+
+ if ((buf[0] != '\0') && (ret == 0))
+ setenv("mtdparts", buf);
+ else
+ setenv("mtdparts", NULL);
+
+ return ret;
+}
+
+/**
+ * Format and print out a partition list for each device from global device
+ * list.
+ */
+static void list_partitions(void)
+{
+ struct list_head *dentry, *pentry;
+ struct part_info *part;
+ struct mtd_device *dev;
+ int part_num;
+
+ DEBUGF("\n---list_partitions---\n");
+ list_for_each(dentry, &devices) {
+ dev = list_entry(dentry, struct mtd_device, link);
+ printf("\ndevice %s%d <%s>, # parts = %d\n",
+ MTD_DEV_TYPE(dev->id->type), dev->id->num,
+ dev->id->mtd_id, dev->num_parts);
+ printf(" #: name\t\t\tsize\t\toffset\t\tmask_flags\n");
+
+ /* list partitions for given device */
+ part_num = 0;
+ list_for_each(pentry, &dev->parts) {
+ part = list_entry(pentry, struct part_info, link);
+ printf("%2d: %-20s0x%08x\t0x%08x\t%d\n",
+ part_num, part->name, part->size,
+ part->offset, part->mask_flags);
+
+ part_num++;
+ }
+ }
+ if (list_empty(&devices))
+ printf("no partitions defined\n");
+
+ /* current_dev is not NULL only when we have non empty device list */
+ if (current_dev) {
+ part = jffs2_part_info(current_dev, current_partnum);
+ if (part) {
+ printf("\nactive partition: %s%d,%d - (%s) 0x%08x @ 0x%08x\n",
+ MTD_DEV_TYPE(current_dev->id->type),
+ current_dev->id->num, current_partnum,
+ part->name, part->size, part->offset);
+ } else {
+ printf("could not get current partition info\n\n");
+ }
+ }
+
+ printf("\ndefaults:\n");
+ printf("mtdids : %s\n", mtdids_default);
+ printf("mtdparts: %s\n", mtdparts_default);
+}
+
+/**
+ * Given partition identifier in form of <dev_type><dev_num>,<part_num> find
+ * corresponding device and verify partition number.
+ *
+ * @param id string describing device and partition or partition name
+ * @param dev pointer to the requested device (output)
+ * @param part_num verified partition number (output)
+ * @param part pointer to requested partition (output)
+ * @return 0 on success, 1 otherwise
+ */
+int find_dev_and_part(const char *id, struct mtd_device **dev,
+ u8 *part_num, struct part_info **part)
+{
+ struct list_head *dentry, *pentry;
+ u8 type, dnum, pnum;
+ const char *p;
+
+ DEBUGF("--- find_dev_and_part ---\nid = %s\n", id);
+
+ list_for_each(dentry, &devices) {
+ *part_num = 0;
+ *dev = list_entry(dentry, struct mtd_device, link);
+ list_for_each(pentry, &(*dev)->parts) {
+ *part = list_entry(pentry, struct part_info, link);
+ if (strcmp((*part)->name, id) == 0)
+ return 0;
+ (*part_num)++;
+ }
+ }
+
+ p = id;
+ *dev = NULL;
+ *part = NULL;
+ *part_num = 0;
+
+ if (id_parse(p, &p, &type, &dnum) != 0)
+ return 1;
+
+ if ((*p++ != ',') || (*p == '\0')) {
+ printf("no partition number specified\n");
+ return 1;
+ }
+ pnum = simple_strtoul(p, (char **)&p, 0);
+ if (*p != '\0') {
+ printf("unexpected trailing character '%c'\n", *p);
+ return 1;
+ }
+
+ if ((*dev = device_find(type, dnum)) == NULL) {
+ printf("no such device %s%d\n", MTD_DEV_TYPE(type), dnum);
+ return 1;
+ }
+
+ if ((*part = jffs2_part_info(*dev, pnum)) == NULL) {
+ printf("no such partition\n");
+ *dev = NULL;
+ return 1;
+ }
+
+ *part_num = pnum;
+
+ return 0;
+}
+
+/**
+ * Find and delete partition. For partition id format see find_dev_and_part().
+ *
+ * @param id string describing device and partition
+ * @return 0 on success, 1 otherwise
+ */
+static int delete_partition(const char *id)
+{
+ u8 pnum;
+ struct mtd_device *dev;
+ struct part_info *part;
+
+ if (find_dev_and_part(id, &dev, &pnum, &part) == 0) {
+
+ DEBUGF("delete_partition: device = %s%d, partition %d = (%s) 0x%08lx@0x%08lx\n",
+ MTD_DEV_TYPE(dev->id->type), dev->id->num, pnum,
+ part->name, part->size, part->offset);
+
+ if (part_del(dev, part) != 0)
+ return 1;
+
+ if (generate_mtdparts_save(last_parts, MTDPARTS_MAXLEN) != 0) {
+ printf("generated mtdparts too long, reseting to null\n");
+ return 1;
+ }
+ return 0;
+ }
+
+ printf("partition %s not found\n", id);
+ return 1;
+}
+
+/**
+ * Accept character string describing mtd partitions and call device_parse()
+ * for each entry. Add created devices to the global devices list.
+ *
+ * @param mtdparts string specifing mtd partitions
+ * @return 0 on success, 1 otherwise
+ */
+static int parse_mtdparts(const char *const mtdparts)
+{
+ const char *p = mtdparts;
+ struct mtd_device *dev;
+ int err = 1;
+
+ DEBUGF("\n---parse_mtdparts---\nmtdparts = %s\n\n", p);
+
+ /* delete all devices and partitions */
+ if (jffs2_devices_init() != 0) {
+ printf("could not initialise device list\n");
+ return err;
+ }
+
+ /* re-read 'mtdparts' variable, jffs2_devices_init may be updating env */
+ p = getenv("mtdparts");
+
+ if (strncmp(p, "mtdparts=", 9) != 0) {
+ printf("mtdparts variable doesn't start with 'mtdparts='\n");
+ return err;
+ }
+ p += 9;
+
+ while (p && (*p != '\0')) {
+ err = 1;
+ if ((device_parse(p, &p, &dev) != 0) || (!dev))
+ break;
+
+ DEBUGF("+ device: %s\t%d\t%s\n", MTD_DEV_TYPE(dev->id->type),
+ dev->id->num, dev->id->mtd_id);
+
+ /* check if parsed device is already on the list */
+ if (device_find(dev->id->type, dev->id->num) != NULL) {
+ printf("device %s%d redefined, please correct mtdparts variable\n",
+ MTD_DEV_TYPE(dev->id->type), dev->id->num);
+ break;
+ }
+
+ list_add_tail(&dev->link, &devices);
+ err = 0;
+ }
+ if (err == 1) {
+ device_delall(&devices);
+ return 1;
+ }
+
+ return 0;
+}
+
+/**
+ * Parse provided string describing mtdids mapping (see file header for mtdids
+ * variable format). Allocate memory for each entry and add all found entries
+ * to the global mtdids list.
+ *
+ * @param ids mapping string
+ * @return 0 on success, 1 otherwise
+ */
+static int parse_mtdids(const char *const ids)
+{
+ const char *p = ids;
+ const char *mtd_id;
+ int mtd_id_len;
+ struct mtdids *id;
+ struct list_head *entry, *n;
+ struct mtdids *id_tmp;
+ u8 type, num;
+ u32 size;
+ int ret = 1;
+
+ DEBUGF("\n---parse_mtdids---\nmtdids = %s\n\n", ids);
+
+ /* clean global mtdids list */
+ list_for_each_safe(entry, n, &mtdids) {
+ id_tmp = list_entry(entry, struct mtdids, link);
+ DEBUGF("mtdids del: %d %d\n", id_tmp->type, id_tmp->num);
+ list_del(entry);
+ free(id_tmp);
+ }
+ last_ids[0] = '\0';
+ INIT_LIST_HEAD(&mtdids);
+
+ while(p && (*p != '\0')) {
+
+ ret = 1;
+ /* parse 'nor'|'nand'|'onenand'<dev-num> */
+ if (id_parse(p, &p, &type, &num) != 0)
+ break;
+
+ if (*p != '=') {
+ printf("mtdids: incorrect <dev-num>\n");
+ break;
+ }
+ p++;
+
+ /* check if requested device exists */
+ if (device_validate(type, num, &size) != 0)
+ return 1;
+
+ /* locate <mtd-id> */
+ mtd_id = p;
+ if ((p = strchr(mtd_id, ',')) != NULL) {
+ mtd_id_len = p - mtd_id + 1;
+ p++;
+ } else {
+ mtd_id_len = strlen(mtd_id) + 1;
+ }
+ if (mtd_id_len == 0) {
+ printf("mtdids: no <mtd-id> identifier\n");
+ break;
+ }
+
+ /* check if this id is already on the list */
+ int double_entry = 0;
+ list_for_each(entry, &mtdids) {
+ id_tmp = list_entry(entry, struct mtdids, link);
+ if ((id_tmp->type == type) && (id_tmp->num == num)) {
+ double_entry = 1;
+ break;
+ }
+ }
+ if (double_entry) {
+ printf("device id %s%d redefined, please correct mtdids variable\n",
+ MTD_DEV_TYPE(type), num);
+ break;
+ }
+
+ /* allocate mtdids structure */
+ if (!(id = (struct mtdids *)malloc(sizeof(struct mtdids) + mtd_id_len))) {
+ printf("out of memory\n");
+ break;
+ }
+ memset(id, 0, sizeof(struct mtdids) + mtd_id_len);
+ id->num = num;
+ id->type = type;
+ id->size = size;
+ id->mtd_id = (char *)(id + 1);
+ strncpy(id->mtd_id, mtd_id, mtd_id_len - 1);
+ id->mtd_id[mtd_id_len - 1] = '\0';
+ INIT_LIST_HEAD(&id->link);
+
+ DEBUGF("+ id %s%d\t%16d bytes\t%s\n",
+ MTD_DEV_TYPE(id->type), id->num,
+ id->size, id->mtd_id);
+
+ list_add_tail(&id->link, &mtdids);
+ ret = 0;
+ }
+ if (ret == 1) {
+ /* clean mtdids list and free allocated memory */
+ list_for_each_safe(entry, n, &mtdids) {
+ id_tmp = list_entry(entry, struct mtdids, link);
+ list_del(entry);
+ free(id_tmp);
+ }
+ return 1;
+ }
+
+ return 0;
+}
+
+/**
+ * Parse and initialize global mtdids mapping and create global
+ * device/partition list.
+ *
+ * @return 0 on success, 1 otherwise
+ */
+int mtdparts_init(void)
+{
+ static int initialized = 0;
+ const char *ids, *parts;
+ const char *current_partition;
+ int ids_changed;
+ char tmp_ep[PARTITION_MAXLEN];
+
+ DEBUGF("\n---mtdparts_init---\n");
+ if (!initialized) {
+ INIT_LIST_HEAD(&mtdids);
+ INIT_LIST_HEAD(&devices);
+ memset(last_ids, 0, MTDIDS_MAXLEN);
+ memset(last_parts, 0, MTDPARTS_MAXLEN);
+ memset(last_partition, 0, PARTITION_MAXLEN);
+ initialized = 1;
+ }
+
+ /* get variables */
+ ids = getenv("mtdids");
+ parts = getenv("mtdparts");
+ current_partition = getenv("partition");
+
+ /* save it for later parsing, cannot rely on current partition pointer
+ * as 'partition' variable may be updated during init */
+ tmp_ep[0] = '\0';
+ if (current_partition)
+ strncpy(tmp_ep, current_partition, PARTITION_MAXLEN);
+
+ DEBUGF("last_ids : %s\n", last_ids);
+ DEBUGF("env_ids : %s\n", ids);
+ DEBUGF("last_parts: %s\n", last_parts);
+ DEBUGF("env_parts : %s\n\n", parts);
+
+ DEBUGF("last_partition : %s\n", last_partition);
+ DEBUGF("env_partition : %s\n", current_partition);
+
+ /* if mtdids varible is empty try to use defaults */
+ if (!ids) {
+ if (mtdids_default) {
+ DEBUGF("mtdids variable not defined, using default\n");
+ ids = mtdids_default;
+ setenv("mtdids", (char *)ids);
+ } else {
+ printf("mtdids not defined, no default present\n");
+ return 1;
+ }
+ }
+ if (strlen(ids) > MTDIDS_MAXLEN - 1) {
+ printf("mtdids too long (> %d)\n", MTDIDS_MAXLEN);
+ return 1;
+ }
+
+ /* do no try to use defaults when mtdparts variable is not defined,
+ * just check the length */
+ if (!parts)
+ printf("mtdparts variable not set, see 'help mtdparts'\n");
+
+ if (parts && (strlen(parts) > MTDPARTS_MAXLEN - 1)) {
+ printf("mtdparts too long (> %d)\n", MTDPARTS_MAXLEN);
+ return 1;
+ }
+
+ /* check if we have already parsed those mtdids */
+ if ((last_ids[0] != '\0') && (strcmp(last_ids, ids) == 0)) {
+ ids_changed = 0;
+ } else {
+ ids_changed = 1;
+
+ if (parse_mtdids(ids) != 0) {
+ jffs2_devices_init();
+ return 1;
+ }
+
+ /* ok it's good, save new ids */
+ strncpy(last_ids, ids, MTDIDS_MAXLEN);
+ }
+
+ /* parse partitions if either mtdparts or mtdids were updated */
+ if (parts && ((last_parts[0] == '\0') || ((strcmp(last_parts, parts) != 0)) || ids_changed)) {
+ if (parse_mtdparts(parts) != 0)
+ return 1;
+
+ if (list_empty(&devices)) {
+ printf("mtdparts_init: no valid partitions\n");
+ return 1;
+ }
+
+ /* ok it's good, save new parts */
+ strncpy(last_parts, parts, MTDPARTS_MAXLEN);
+
+ /* reset first partition from first dev from the list as current */
+ current_dev = list_entry(devices.next, struct mtd_device, link);
+ current_partnum = 0;
+ current_save();
+
+ DEBUGF("mtdparts_init: current_dev = %s%d, current_partnum = %d\n",
+ MTD_DEV_TYPE(current_dev->id->type),
+ current_dev->id->num, current_partnum);
+ }
+
+ /* mtdparts variable was reset to NULL, delete all devices/partitions */
+ if (!parts && (last_parts[0] != '\0'))
+ return jffs2_devices_init();
+
+ /* do not process current partition if mtdparts variable is null */
+ if (!parts)
+ return 0;
+
+ /* is current partition set in environment? if so, use it */
+ if ((tmp_ep[0] != '\0') && (strcmp(tmp_ep, last_partition) != 0)) {
+ struct part_info *p;
+ struct mtd_device *cdev;
+ u8 pnum;
+
+ DEBUGF("--- getting current partition: %s\n", tmp_ep);
+
+ if (find_dev_and_part(tmp_ep, &cdev, &pnum, &p) == 0) {
+ current_dev = cdev;
+ current_partnum = pnum;
+ current_save();
+ }
+ } else if (getenv("partition") == NULL) {
+ DEBUGF("no partition variable set, setting...\n");
+ current_save();
+ }
+
+ return 0;
+}
+#else /* #ifdef CONFIG_JFFS2_CMDLINE */
+/*
+ * 'Static' version of command line mtdparts_init() routine. Single partition on
+ * a single device configuration.
+ */
+
+/**
+ * Calculate sector size.
+ *
+ * @return sector size
+ */
+static inline u32 get_part_sector_size_nand(struct mtdids *id)
+{
+#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
+#if defined(CONFIG_NAND_LEGACY)
+ extern struct nand_chip nand_dev_desc[CONFIG_SYS_MAX_NAND_DEVICE];
+
+ return nand_dev_desc[id->num].erasesize;
+#else
+ nand_info_t *nand;
+
+ nand = &nand_info[id->num];
+
+ return nand->erasesize;
+#endif
+#else
+ BUG();
+ return 0;
+#endif
+}
+
+static inline u32 get_part_sector_size_nor(struct mtdids *id, struct part_info *part)
+{
+#if defined(CONFIG_CMD_FLASH)
+ extern flash_info_t flash_info[];
+
+ u32 end_phys, start_phys, sector_size = 0, size = 0;
+ int i;
+ flash_info_t *flash;
+
+ flash = &flash_info[id->num];
+
+ start_phys = flash->start[0] + part->offset;
+ end_phys = start_phys + part->size;
+
+ for (i = 0; i < flash->sector_count; i++) {
+ if (flash->start[i] >= end_phys)
+ break;
+
+ if (flash->start[i] >= start_phys) {
+ if (i == flash->sector_count - 1) {
+ size = flash->start[0] + flash->size - flash->start[i];
+ } else {
+ size = flash->start[i+1] - flash->start[i];
+ }
+
+ if (sector_size < size)
+ sector_size = size;
+ }
+ }
+
+ return sector_size;
+#else
+ BUG();
+ return 0;
+#endif
+}
+
+static inline u32 get_part_sector_size_onenand(void)
+{
+#if defined(CONFIG_CMD_ONENAND)
+ struct mtd_info *mtd;
+
+ mtd = &onenand_mtd;
+
+ return mtd->erasesize;
+#else
+ BUG();
+ return 0;
+#endif
+}
+
+static inline u32 get_part_sector_size(struct mtdids *id, struct part_info *part)
+{
+ if (id->type == MTD_DEV_TYPE_NAND)
+ return get_part_sector_size_nand(id);
+ else if (id->type == MTD_DEV_TYPE_NOR)
+ return get_part_sector_size_nor(id, part);
+ else if (id->type == MTD_DEV_TYPE_ONENAND)
+ return get_part_sector_size_onenand();
+ else
+ DEBUGF("Error: Unknown device type.\n");
+
+ return 0;
+}
+
+/**
+ * Parse and initialize global mtdids mapping and create global
+ * device/partition list.
+ *
+ * @return 0 on success, 1 otherwise
+ */
+int mtdparts_init(void)
+{
+ static int initialized = 0;
+ u32 size;
+ char *dev_name;
+
+ DEBUGF("\n---mtdparts_init---\n");
+ if (!initialized) {
+ struct mtdids *id;
+ struct part_info *part;
+
+ initialized = 1;
+ current_dev = (struct mtd_device *)
+ malloc(sizeof(struct mtd_device) +
+ sizeof(struct part_info) +
+ sizeof(struct mtdids));
+ if (!current_dev) {
+ printf("out of memory\n");
+ return 1;
+ }
+ memset(current_dev, 0, sizeof(struct mtd_device) +
+ sizeof(struct part_info) + sizeof(struct mtdids));
+
+ id = (struct mtdids *)(current_dev + 1);
+ part = (struct part_info *)(id + 1);
+
+ /* id */
+ id->mtd_id = "single part";
+
+#if defined(CONFIG_JFFS2_DEV)
+ dev_name = CONFIG_JFFS2_DEV;
+#else
+ dev_name = "nor0";
+#endif
+
+ if ((id_parse(dev_name, NULL, &id->type, &id->num) != 0) ||
+ (device_validate(id->type, id->num, &size) != 0)) {
+ printf("incorrect device: %s%d\n", MTD_DEV_TYPE(id->type), id->num);
+ free(current_dev);
+ return 1;
+ }
+ id->size = size;
+ INIT_LIST_HEAD(&id->link);
+
+ DEBUGF("dev id: type = %d, num = %d, size = 0x%08lx, mtd_id = %s\n",
+ id->type, id->num, id->size, id->mtd_id);
+
+ /* partition */
+ part->name = "static";
+ part->auto_name = 0;
+
+#if defined(CONFIG_JFFS2_PART_SIZE)
+ part->size = CONFIG_JFFS2_PART_SIZE;
+#else
+ part->size = SIZE_REMAINING;
+#endif
+
+#if defined(CONFIG_JFFS2_PART_OFFSET)
+ part->offset = CONFIG_JFFS2_PART_OFFSET;
+#else
+ part->offset = 0x00000000;
+#endif
+
+ part->sector_size = get_part_sector_size(id, part);
+
+ part->dev = current_dev;
+ INIT_LIST_HEAD(&part->link);
+
+ /* recalculate size if needed */
+ if (part->size == SIZE_REMAINING)
+ part->size = id->size - part->offset;
+
+ DEBUGF("part : name = %s, size = 0x%08lx, offset = 0x%08lx\n",
+ part->name, part->size, part->offset);
+
+ /* device */
+ current_dev->id = id;
+ INIT_LIST_HEAD(¤t_dev->link);
+ current_dev->num_parts = 1;
+ INIT_LIST_HEAD(¤t_dev->parts);
+ list_add(&part->link, ¤t_dev->parts);
+ }
+
+ return 0;
+}
+#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
+
+/**
+ * Return pointer to the partition of a requested number from a requested
+ * device.
+ *
+ * @param dev device that is to be searched for a partition
+ * @param part_num requested partition number
+ * @return pointer to the part_info, NULL otherwise
+ */
+static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num)
+{
+ struct list_head *entry;
+ struct part_info *part;
+ int num;
+
+ if (!dev)
+ return NULL;
+
+ DEBUGF("\n--- jffs2_part_info: partition number %d for device %s%d (%s)\n",
+ part_num, MTD_DEV_TYPE(dev->id->type),
+ dev->id->num, dev->id->mtd_id);
+
+ if (part_num >= dev->num_parts) {
+ printf("invalid partition number %d for device %s%d (%s)\n",
+ part_num, MTD_DEV_TYPE(dev->id->type),
+ dev->id->num, dev->id->mtd_id);
+ return NULL;
+ }
+
+ /* locate partition number, return it */
+ num = 0;
+ list_for_each(entry, &dev->parts) {
+ part = list_entry(entry, struct part_info, link);
+
+ if (part_num == num++) {
+ return part;
+ }
+ }
+
+ return NULL;
+}
+
+/***************************************************/
+/* U-boot commands */
+/***************************************************/
+
+/**
+ * Routine implementing fsload u-boot command. This routine tries to load
+ * a requested file from jffs2/cramfs filesystem on a current partition.
+ *
+ * @param cmdtp command internal data
+ * @param flag command flag
+ * @param argc number of arguments supplied to the command
+ * @param argv arguments list
+ * @return 0 on success, 1 otherwise
+ */
+int do_jffs2_fsload(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ char *fsname;
+ char *filename;
+ int size;
+ struct part_info *part;
+ ulong offset = load_addr;
+
+ /* pre-set Boot file name */
+ if ((filename = getenv("bootfile")) == NULL) {
+ filename = "uImage";
+ }
+
+ if (argc == 2) {
+ filename = argv[1];
+ }
+ if (argc == 3) {
+ offset = simple_strtoul(argv[1], NULL, 16);
+ load_addr = offset;
+ filename = argv[2];
+ }
+
+ /* make sure we are in sync with env variables */
+ if (mtdparts_init() !=0)
+ return 1;
+
+ if ((part = jffs2_part_info(current_dev, current_partnum))){
+
+ /* check partition type for cramfs */
+ fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2");
+ printf("### %s loading '%s' to 0x%lx\n", fsname, filename, offset);
+
+ if (cramfs_check(part)) {
+ size = cramfs_load ((char *) offset, part, filename);
+ } else {
+ /* if this is not cramfs assume jffs2 */
+ size = jffs2_1pass_load((char *)offset, part, filename);
+ }
+
+ if (size > 0) {
+ char buf[10];
+ printf("### %s load complete: %d bytes loaded to 0x%lx\n",
+ fsname, size, offset);
+ sprintf(buf, "%x", size);
+ setenv("filesize", buf);
+ } else {
+ printf("### %s LOAD ERROR<%x> for %s!\n", fsname, size, filename);
+ }
+
+ return !(size > 0);
+ }
+ return 1;
+}
+
+/**
+ * Routine implementing u-boot ls command which lists content of a given
+ * directory on a current partition.
+ *
+ * @param cmdtp command internal data
+ * @param flag command flag
+ * @param argc number of arguments supplied to the command
+ * @param argv arguments list
+ * @return 0 on success, 1 otherwise
+ */
+int do_jffs2_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ char *filename = "/";
+ int ret;
+ struct part_info *part;
+
+ if (argc == 2)
+ filename = argv[1];
+
+ /* make sure we are in sync with env variables */
+ if (mtdparts_init() !=0)
+ return 1;
+
+ if ((part = jffs2_part_info(current_dev, current_partnum))){
+
+ /* check partition type for cramfs */
+ if (cramfs_check(part)) {
+ ret = cramfs_ls (part, filename);
+ } else {
+ /* if this is not cramfs assume jffs2 */
+ ret = jffs2_1pass_ls(part, filename);
+ }
+
+ return ret ? 0 : 1;
+ }
+ return 1;
+}
+
+/**
+ * Routine implementing u-boot fsinfo command. This routine prints out
+ * miscellaneous filesystem informations/statistics.
+ *
+ * @param cmdtp command internal data
+ * @param flag command flag
+ * @param argc number of arguments supplied to the command
+ * @param argv arguments list
+ * @return 0 on success, 1 otherwise
+ */
+int do_jffs2_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ struct part_info *part;
+ char *fsname;
+ int ret;
+
+ /* make sure we are in sync with env variables */
+ if (mtdparts_init() !=0)
+ return 1;
+
+ if ((part = jffs2_part_info(current_dev, current_partnum))){
+
+ /* check partition type for cramfs */
+ fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2");
+ printf("### filesystem type is %s\n", fsname);
+
+ if (cramfs_check(part)) {
+ ret = cramfs_info (part);
+ } else {
+ /* if this is not cramfs assume jffs2 */
+ ret = jffs2_1pass_info(part);
+ }
+
+ return ret ? 0 : 1;
+ }
+ return 1;
+}
+
+/* command line only */
+#ifdef CONFIG_JFFS2_CMDLINE
+/**
+ * Routine implementing u-boot chpart command. Sets new current partition based
+ * on the user supplied partition id. For partition id format see find_dev_and_part().
+ *
+ * @param cmdtp command internal data
+ * @param flag command flag
+ * @param argc number of arguments supplied to the command
+ * @param argv arguments list
+ * @return 0 on success, 1 otherwise
+ */
+int do_jffs2_chpart(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+/* command line only */
+ struct mtd_device *dev;
+ struct part_info *part;
+ u8 pnum;
+
+ if (mtdparts_init() !=0)
+ return 1;
+
+ if (argc < 2) {
+ printf("no partition id specified\n");
+ return 1;
+ }
+
+ if (find_dev_and_part(argv[1], &dev, &pnum, &part) != 0)
+ return 1;
+
+ current_dev = dev;
+ current_partnum = pnum;
+ current_save();
+
+ printf("partition changed to %s%d,%d\n",
+ MTD_DEV_TYPE(dev->id->type), dev->id->num, pnum);
+
+ return 0;
+}
+
+/**
+ * Routine implementing u-boot mtdparts command. Initialize/update default global
+ * partition list and process user partition request (list, add, del).
+ *
+ * @param cmdtp command internal data
+ * @param flag command flag
+ * @param argc number of arguments supplied to the command
+ * @param argv arguments list
+ * @return 0 on success, 1 otherwise
+ */
+int do_jffs2_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ if (argc == 2) {
+ if (strcmp(argv[1], "default") == 0) {
+ setenv("mtdids", (char *)mtdids_default);
+ setenv("mtdparts", (char *)mtdparts_default);
+ setenv("partition", NULL);
+
+ mtdparts_init();
+ return 0;
+ } else if (strcmp(argv[1], "delall") == 0) {
+ /* this may be the first run, initialize lists if needed */
+ mtdparts_init();
+
+ setenv("mtdparts", NULL);
+
+ /* jffs2_devices_init() calls current_save() */
+ return jffs2_devices_init();
+ }
+ }
+
+ /* make sure we are in sync with env variables */
+ if (mtdparts_init() != 0)
+ return 1;
+
+ if (argc == 1) {
+ list_partitions();
+ return 0;
+ }
+
+ /* mtdparts add <mtd-dev> <size>[@<offset>] <name> [ro] */
+ if (((argc == 5) || (argc == 6)) && (strcmp(argv[1], "add") == 0)) {
+#define PART_ADD_DESC_MAXLEN 64
+ char tmpbuf[PART_ADD_DESC_MAXLEN];
+ u8 type, num, len;
+ struct mtd_device *dev;
+ struct mtd_device *dev_tmp;
+ struct mtdids *id;
+ struct part_info *p;
+
+ if (id_parse(argv[2], NULL, &type, &num) != 0)
+ return 1;
+
+ if ((id = id_find(type, num)) == NULL) {
+ printf("no such device %s defined in mtdids variable\n", argv[2]);
+ return 1;
+ }
+
+ len = strlen(id->mtd_id) + 1; /* 'mtd_id:' */
+ len += strlen(argv[3]); /* size@offset */
+ len += strlen(argv[4]) + 2; /* '(' name ')' */
+ if (argv[5] && (strlen(argv[5]) == 2))
+ len += 2; /* 'ro' */
+
+ if (len >= PART_ADD_DESC_MAXLEN) {
+ printf("too long partition description\n");
+ return 1;
+ }
+ sprintf(tmpbuf, "%s:%s(%s)%s",
+ id->mtd_id, argv[3], argv[4], argv[5] ? argv[5] : "");
+ DEBUGF("add tmpbuf: %s\n", tmpbuf);
+
+ if ((device_parse(tmpbuf, NULL, &dev) != 0) || (!dev))
+ return 1;
+
+ DEBUGF("+ %s\t%d\t%s\n", MTD_DEV_TYPE(dev->id->type),
+ dev->id->num, dev->id->mtd_id);
+
+ if ((dev_tmp = device_find(dev->id->type, dev->id->num)) == NULL) {
+ device_add(dev);
+ } else {
+ /* merge new partition with existing ones*/
+ p = list_entry(dev->parts.next, struct part_info, link);
+ if (part_add(dev_tmp, p) != 0) {
+ device_del(dev);
+ return 1;
+ }
+ }
+
+ if (generate_mtdparts_save(last_parts, MTDPARTS_MAXLEN) != 0) {
+ printf("generated mtdparts too long, reseting to null\n");
+ return 1;
+ }
+
+ return 0;
+ }
+
+ /* mtdparts del part-id */
+ if ((argc == 3) && (strcmp(argv[1], "del") == 0)) {
+ DEBUGF("del: part-id = %s\n", argv[2]);
+
+ return delete_partition(argv[2]);
+ }
+
+ cmd_usage(cmdtp);
+ return 1;
+}
+#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
+
+/***************************************************/
+U_BOOT_CMD(
+ fsload, 3, 0, do_jffs2_fsload,
+ "load binary file from a filesystem image",
+ "[ off ] [ filename ]\n"
+ " - load binary file from flash bank\n"
+ " with offset 'off'\n"
+);
+U_BOOT_CMD(
+ ls, 2, 1, do_jffs2_ls,
+ "list files in a directory (default /)",
+ "[ directory ]\n"
+ " - list files in a directory.\n"
+);
+
+U_BOOT_CMD(
+ fsinfo, 1, 1, do_jffs2_fsinfo,
+ "print information about filesystems",
+ " - print information about filesystems\n"
+);
+
+#ifdef CONFIG_JFFS2_CMDLINE
+U_BOOT_CMD(
+ chpart, 2, 0, do_jffs2_chpart,
+ "change active partition",
+ "part-id\n"
+ " - change active partition (e.g. part-id = nand0,1)\n"
+);
+
+U_BOOT_CMD(
+ mtdparts, 6, 0, do_jffs2_mtdparts,
+ "define flash/nand partitions",
+ "\n"
+ " - list partition table\n"
+ "mtdparts delall\n"
+ " - delete all partitions\n"
+ "mtdparts del part-id\n"
+ " - delete partition (e.g. part-id = nand0,1)\n"
+ "mtdparts add <mtd-dev> <size>[@<offset>] [<name>] [ro]\n"
+ " - add partition\n"
+ "mtdparts default\n"
+ " - reset partition table to defaults\n\n"
+ "-----\n\n"
+ "this command uses three environment variables:\n\n"
+ "'partition' - keeps current partition identifier\n\n"
+ "partition := <part-id>\n"
+ "<part-id> := <dev-id>,part_num\n\n"
+ "'mtdids' - linux kernel mtd device id <-> u-boot device id mapping\n\n"
+ "mtdids=<idmap>[,<idmap>,...]\n\n"
+ "<idmap> := <dev-id>=<mtd-id>\n"
+ "<dev-id> := 'nand'|'nor'|'onenand'<dev-num>\n"
+ "<dev-num> := mtd device number, 0...\n"
+ "<mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)\n\n"
+ "'mtdparts' - partition list\n\n"
+ "mtdparts=mtdparts=<mtd-def>[;<mtd-def>...]\n\n"
+ "<mtd-def> := <mtd-id>:<part-def>[,<part-def>...]\n"
+ "<mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name)\n"
+ "<part-def> := <size>[@<offset>][<name>][<ro-flag>]\n"
+ "<size> := standard linux memsize OR '-' to denote all remaining space\n"
+ "<offset> := partition start offset within the device\n"
+ "<name> := '(' NAME ')'\n"
+ "<ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel)\n"
+);
+#endif /* #ifdef CONFIG_JFFS2_CMDLINE */
+
+/***************************************************/
diff -Naur u-boot-2009.03_orig/common/docecc.c u-boot-2009.03/common/docecc.c
--- u-boot-2009.03_orig/common/docecc.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/common/docecc.c 2009-03-31 14:50:23.959397600 -0700
@@ -1,513 +1,513 @@
-/*
- * ECC algorithm for M-systems disk on chip. We use the excellent Reed
- * Solmon code of Phil Karn (karn@ka9q.ampr.org) available under the
- * GNU GPL License. The rest is simply to convert the disk on chip
- * syndrom into a standard syndom.
- *
- * Author: Fabrice Bellard (fabrice.bellard@netgem.com)
- * Copyright (C) 2000 Netgem S.A.
- *
- * $Id: docecc.c,v 1.4 2001/10/02 15:05:13 dwmw2 Exp $
- *
- * 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
- */
-
-#include <config.h>
-#include <common.h>
-#include <malloc.h>
-
-#undef ECC_DEBUG
-#undef PSYCHO_DEBUG
-
-#include <linux/mtd/doc2000.h>
-
-/* need to undef it (from asm/termbits.h) */
-#undef B0
-
-#define MM 10 /* Symbol size in bits */
-#define KK (1023-4) /* Number of data symbols per block */
-#define B0 510 /* First root of generator polynomial, alpha form */
-#define PRIM 1 /* power of alpha used to generate roots of generator poly */
-#define NN ((1 << MM) - 1)
-
-typedef unsigned short dtype;
-
-/* 1+x^3+x^10 */
-static const int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 };
-
-/* This defines the type used to store an element of the Galois Field
- * used by the code. Make sure this is something larger than a char if
- * if anything larger than GF(256) is used.
- *
- * Note: unsigned char will work up to GF(256) but int seems to run
- * faster on the Pentium.
- */
-typedef int gf;
-
-/* No legal value in index form represents zero, so
- * we need a special value for this purpose
- */
-#define A0 (NN)
-
-/* Compute x % NN, where NN is 2**MM - 1,
- * without a slow divide
- */
-static inline gf
-modnn(int x)
-{
- while (x >= NN) {
- x -= NN;
- x = (x >> MM) + (x & NN);
- }
- return x;
-}
-
-#define CLEAR(a,n) {\
-int ci;\
-for(ci=(n)-1;ci >=0;ci--)\
-(a)[ci] = 0;\
-}
-
-#define COPY(a,b,n) {\
-int ci;\
-for(ci=(n)-1;ci >=0;ci--)\
-(a)[ci] = (b)[ci];\
-}
-
-#define COPYDOWN(a,b,n) {\
-int ci;\
-for(ci=(n)-1;ci >=0;ci--)\
-(a)[ci] = (b)[ci];\
-}
-
-#define Ldec 1
-
-/* generate GF(2**m) from the irreducible polynomial p(X) in Pp[0]..Pp[m]
- lookup tables: index->polynomial form alpha_to[] contains j=alpha**i;
- polynomial form -> index form index_of[j=alpha**i] = i
- alpha=2 is the primitive element of GF(2**m)
- HARI's COMMENT: (4/13/94) alpha_to[] can be used as follows:
- Let @ represent the primitive element commonly called "alpha" that
- is the root of the primitive polynomial p(x). Then in GF(2^m), for any
- 0 <= i <= 2^m-2,
- @^i = a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
- where the binary vector (a(0),a(1),a(2),...,a(m-1)) is the representation
- of the integer "alpha_to[i]" with a(0) being the LSB and a(m-1) the MSB. Thus for
- example the polynomial representation of @^5 would be given by the binary
- representation of the integer "alpha_to[5]".
- Similarily, index_of[] can be used as follows:
- As above, let @ represent the primitive element of GF(2^m) that is
- the root of the primitive polynomial p(x). In order to find the power
- of @ (alpha) that has the polynomial representation
- a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
- we consider the integer "i" whose binary representation with a(0) being LSB
- and a(m-1) MSB is (a(0),a(1),...,a(m-1)) and locate the entry
- "index_of[i]". Now, @^index_of[i] is that element whose polynomial
- representation is (a(0),a(1),a(2),...,a(m-1)).
- NOTE:
- The element alpha_to[2^m-1] = 0 always signifying that the
- representation of "@^infinity" = 0 is (0,0,0,...,0).
- Similarily, the element index_of[0] = A0 always signifying
- that the power of alpha which has the polynomial representation
- (0,0,...,0) is "infinity".
-
-*/
-
-static void
-generate_gf(dtype Alpha_to[NN + 1], dtype Index_of[NN + 1])
-{
- register int i, mask;
-
- mask = 1;
- Alpha_to[MM] = 0;
- for (i = 0; i < MM; i++) {
- Alpha_to[i] = mask;
- Index_of[Alpha_to[i]] = i;
- /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */
- if (Pp[i] != 0)
- Alpha_to[MM] ^= mask; /* Bit-wise EXOR operation */
- mask <<= 1; /* single left-shift */
- }
- Index_of[Alpha_to[MM]] = MM;
- /*
- * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by
- * poly-repr of @^i shifted left one-bit and accounting for any @^MM
- * term that may occur when poly-repr of @^i is shifted.
- */
- mask >>= 1;
- for (i = MM + 1; i < NN; i++) {
- if (Alpha_to[i - 1] >= mask)
- Alpha_to[i] = Alpha_to[MM] ^ ((Alpha_to[i - 1] ^ mask) << 1);
- else
- Alpha_to[i] = Alpha_to[i - 1] << 1;
- Index_of[Alpha_to[i]] = i;
- }
- Index_of[0] = A0;
- Alpha_to[NN] = 0;
-}
-
-/*
- * Performs ERRORS+ERASURES decoding of RS codes. bb[] is the content
- * of the feedback shift register after having processed the data and
- * the ECC.
- *
- * Return number of symbols corrected, or -1 if codeword is illegal
- * or uncorrectable. If eras_pos is non-null, the detected error locations
- * are written back. NOTE! This array must be at least NN-KK elements long.
- * The corrected data are written in eras_val[]. They must be xor with the data
- * to retrieve the correct data : data[erase_pos[i]] ^= erase_val[i] .
- *
- * First "no_eras" erasures are declared by the calling program. Then, the
- * maximum # of errors correctable is t_after_eras = floor((NN-KK-no_eras)/2).
- * If the number of channel errors is not greater than "t_after_eras" the
- * transmitted codeword will be recovered. Details of algorithm can be found
- * in R. Blahut's "Theory ... of Error-Correcting Codes".
-
- * Warning: the eras_pos[] array must not contain duplicate entries; decoder failure
- * will result. The decoder *could* check for this condition, but it would involve
- * extra time on every decoding operation.
- * */
-static int
-eras_dec_rs(dtype Alpha_to[NN + 1], dtype Index_of[NN + 1],
- gf bb[NN - KK + 1], gf eras_val[NN-KK], int eras_pos[NN-KK],
- int no_eras)
-{
- int deg_lambda, el, deg_omega;
- int i, j, r,k;
- gf u,q,tmp,num1,num2,den,discr_r;
- gf lambda[NN-KK + 1], s[NN-KK + 1]; /* Err+Eras Locator poly
- * and syndrome poly */
- gf b[NN-KK + 1], t[NN-KK + 1], omega[NN-KK + 1];
- gf root[NN-KK], reg[NN-KK + 1], loc[NN-KK];
- int syn_error, count;
-
- syn_error = 0;
- for(i=0;i<NN-KK;i++)
- syn_error |= bb[i];
-
- if (!syn_error) {
- /* if remainder is zero, data[] is a codeword and there are no
- * errors to correct. So return data[] unmodified
- */
- count = 0;
- goto finish;
- }
-
- for(i=1;i<=NN-KK;i++){
- s[i] = bb[0];
- }
- for(j=1;j<NN-KK;j++){
- if(bb[j] == 0)
- continue;
- tmp = Index_of[bb[j]];
-
- for(i=1;i<=NN-KK;i++)
- s[i] ^= Alpha_to[modnn(tmp + (B0+i-1)*PRIM*j)];
- }
-
- /* undo the feedback register implicit multiplication and convert
- syndromes to index form */
-
- for(i=1;i<=NN-KK;i++) {
- tmp = Index_of[s[i]];
- if (tmp != A0)
- tmp = modnn(tmp + 2 * KK * (B0+i-1)*PRIM);
- s[i] = tmp;
- }
-
- CLEAR(&lambda[1],NN-KK);
- lambda[0] = 1;
-
- if (no_eras > 0) {
- /* Init lambda to be the erasure locator polynomial */
- lambda[1] = Alpha_to[modnn(PRIM * eras_pos[0])];
- for (i = 1; i < no_eras; i++) {
- u = modnn(PRIM*eras_pos[i]);
- for (j = i+1; j > 0; j--) {
- tmp = Index_of[lambda[j - 1]];
- if(tmp != A0)
- lambda[j] ^= Alpha_to[modnn(u + tmp)];
- }
- }
-#ifdef ECC_DEBUG
- /* Test code that verifies the erasure locator polynomial just constructed
- Needed only for decoder debugging. */
-
- /* find roots of the erasure location polynomial */
- for(i=1;i<=no_eras;i++)
- reg[i] = Index_of[lambda[i]];
- count = 0;
- for (i = 1,k=NN-Ldec; i <= NN; i++,k = modnn(NN+k-Ldec)) {
- q = 1;
- for (j = 1; j <= no_eras; j++)
- if (reg[j] != A0) {
- reg[j] = modnn(reg[j] + j);
- q ^= Alpha_to[reg[j]];
- }
- if (q != 0)
- continue;
- /* store root and error location number indices */
- root[count] = i;
- loc[count] = k;
- count++;
- }
- if (count != no_eras) {
- printf("\n lambda(x) is WRONG\n");
- count = -1;
- goto finish;
- }
-#ifdef PSYCHO_DEBUG
- printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n");
- for (i = 0; i < count; i++)
- printf("%d ", loc[i]);
- printf("\n");
-#endif
-#endif
- }
- for(i=0;i<NN-KK+1;i++)
- b[i] = Index_of[lambda[i]];
-
- /*
- * Begin Berlekamp-Massey algorithm to determine error+erasure
- * locator polynomial
- */
- r = no_eras;
- el = no_eras;
- while (++r <= NN-KK) { /* r is the step number */
- /* Compute discrepancy at the r-th step in poly-form */
- discr_r = 0;
- for (i = 0; i < r; i++){
- if ((lambda[i] != 0) && (s[r - i] != A0)) {
- discr_r ^= Alpha_to[modnn(Index_of[lambda[i]] + s[r - i])];
- }
- }
- discr_r = Index_of[discr_r]; /* Index form */
- if (discr_r == A0) {
- /* 2 lines below: B(x) <-- x*B(x) */
- COPYDOWN(&b[1],b,NN-KK);
- b[0] = A0;
- } else {
- /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */
- t[0] = lambda[0];
- for (i = 0 ; i < NN-KK; i++) {
- if(b[i] != A0)
- t[i+1] = lambda[i+1] ^ Alpha_to[modnn(discr_r + b[i])];
- else
- t[i+1] = lambda[i+1];
- }
- if (2 * el <= r + no_eras - 1) {
- el = r + no_eras - el;
- /*
- * 2 lines below: B(x) <-- inv(discr_r) *
- * lambda(x)
- */
- for (i = 0; i <= NN-KK; i++)
- b[i] = (lambda[i] == 0) ? A0 : modnn(Index_of[lambda[i]] - discr_r + NN);
- } else {
- /* 2 lines below: B(x) <-- x*B(x) */
- COPYDOWN(&b[1],b,NN-KK);
- b[0] = A0;
- }
- COPY(lambda,t,NN-KK+1);
- }
- }
-
- /* Convert lambda to index form and compute deg(lambda(x)) */
- deg_lambda = 0;
- for(i=0;i<NN-KK+1;i++){
- lambda[i] = Index_of[lambda[i]];
- if(lambda[i] != A0)
- deg_lambda = i;
- }
- /*
- * Find roots of the error+erasure locator polynomial by Chien
- * Search
- */
- COPY(®[1],&lambda[1],NN-KK);
- count = 0; /* Number of roots of lambda(x) */
- for (i = 1,k=NN-Ldec; i <= NN; i++,k = modnn(NN+k-Ldec)) {
- q = 1;
- for (j = deg_lambda; j > 0; j--){
- if (reg[j] != A0) {
- reg[j] = modnn(reg[j] + j);
- q ^= Alpha_to[reg[j]];
- }
- }
- if (q != 0)
- continue;
- /* store root (index-form) and error location number */
- root[count] = i;
- loc[count] = k;
- /* If we've already found max possible roots,
- * abort the search to save time
- */
- if(++count == deg_lambda)
- break;
- }
- if (deg_lambda != count) {
- /*
- * deg(lambda) unequal to number of roots => uncorrectable
- * error detected
- */
- count = -1;
- goto finish;
- }
- /*
- * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo
- * x**(NN-KK)). in index form. Also find deg(omega).
- */
- deg_omega = 0;
- for (i = 0; i < NN-KK;i++){
- tmp = 0;
- j = (deg_lambda < i) ? deg_lambda : i;
- for(;j >= 0; j--){
- if ((s[i + 1 - j] != A0) && (lambda[j] != A0))
- tmp ^= Alpha_to[modnn(s[i + 1 - j] + lambda[j])];
- }
- if(tmp != 0)
- deg_omega = i;
- omega[i] = Index_of[tmp];
- }
- omega[NN-KK] = A0;
-
- /*
- * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 =
- * inv(X(l))**(B0-1) and den = lambda_pr(inv(X(l))) all in poly-form
- */
- for (j = count-1; j >=0; j--) {
- num1 = 0;
- for (i = deg_omega; i >= 0; i--) {
- if (omega[i] != A0)
- num1 ^= Alpha_to[modnn(omega[i] + i * root[j])];
- }
- num2 = Alpha_to[modnn(root[j] * (B0 - 1) + NN)];
- den = 0;
-
- /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */
- for (i = min(deg_lambda,NN-KK-1) & ~1; i >= 0; i -=2) {
- if(lambda[i+1] != A0)
- den ^= Alpha_to[modnn(lambda[i+1] + i * root[j])];
- }
- if (den == 0) {
-#ifdef ECC_DEBUG
- printf("\n ERROR: denominator = 0\n");
-#endif
- /* Convert to dual- basis */
- count = -1;
- goto finish;
- }
- /* Apply error to data */
- if (num1 != 0) {
- eras_val[j] = Alpha_to[modnn(Index_of[num1] + Index_of[num2] + NN - Index_of[den])];
- } else {
- eras_val[j] = 0;
- }
- }
- finish:
- for(i=0;i<count;i++)
- eras_pos[i] = loc[i];
- return count;
-}
-
-/***************************************************************************/
-/* The DOC specific code begins here */
-
-#define SECTOR_SIZE 512
-/* The sector bytes are packed into NB_DATA MM bits words */
-#define NB_DATA (((SECTOR_SIZE + 1) * 8 + 6) / MM)
-
-/*
- * Correct the errors in 'sector[]' by using 'ecc1[]' which is the
- * content of the feedback shift register applyied to the sector and
- * the ECC. Return the number of errors corrected (and correct them in
- * sector), or -1 if error
- */
-int doc_decode_ecc(unsigned char sector[SECTOR_SIZE], unsigned char ecc1[6])
-{
- int parity, i, nb_errors;
- gf bb[NN - KK + 1];
- gf error_val[NN-KK];
- int error_pos[NN-KK], pos, bitpos, index, val;
- dtype *Alpha_to, *Index_of;
-
- /* init log and exp tables here to save memory. However, it is slower */
- Alpha_to = malloc((NN + 1) * sizeof(dtype));
- if (!Alpha_to)
- return -1;
-
- Index_of = malloc((NN + 1) * sizeof(dtype));
- if (!Index_of) {
- free(Alpha_to);
- return -1;
- }
-
- generate_gf(Alpha_to, Index_of);
-
- parity = ecc1[1];
-
- bb[0] = (ecc1[4] & 0xff) | ((ecc1[5] & 0x03) << 8);
- bb[1] = ((ecc1[5] & 0xfc) >> 2) | ((ecc1[2] & 0x0f) << 6);
- bb[2] = ((ecc1[2] & 0xf0) >> 4) | ((ecc1[3] & 0x3f) << 4);
- bb[3] = ((ecc1[3] & 0xc0) >> 6) | ((ecc1[0] & 0xff) << 2);
-
- nb_errors = eras_dec_rs(Alpha_to, Index_of, bb,
- error_val, error_pos, 0);
- if (nb_errors <= 0)
- goto the_end;
-
- /* correct the errors */
- for(i=0;i<nb_errors;i++) {
- pos = error_pos[i];
- if (pos >= NB_DATA && pos < KK) {
- nb_errors = -1;
- goto the_end;
- }
- if (pos < NB_DATA) {
- /* extract bit position (MSB first) */
- pos = 10 * (NB_DATA - 1 - pos) - 6;
- /* now correct the following 10 bits. At most two bytes
- can be modified since pos is even */
- index = (pos >> 3) ^ 1;
- bitpos = pos & 7;
- if ((index >= 0 && index < SECTOR_SIZE) ||
- index == (SECTOR_SIZE + 1)) {
- val = error_val[i] >> (2 + bitpos);
- parity ^= val;
- if (index < SECTOR_SIZE)
- sector[index] ^= val;
- }
- index = ((pos >> 3) + 1) ^ 1;
- bitpos = (bitpos + 10) & 7;
- if (bitpos == 0)
- bitpos = 8;
- if ((index >= 0 && index < SECTOR_SIZE) ||
- index == (SECTOR_SIZE + 1)) {
- val = error_val[i] << (8 - bitpos);
- parity ^= val;
- if (index < SECTOR_SIZE)
- sector[index] ^= val;
- }
- }
- }
-
- /* use parity to test extra errors */
- if ((parity & 0xff) != 0)
- nb_errors = -1;
-
- the_end:
- free(Alpha_to);
- free(Index_of);
- return nb_errors;
-}
+/*
+ * ECC algorithm for M-systems disk on chip. We use the excellent Reed
+ * Solmon code of Phil Karn (karn@ka9q.ampr.org) available under the
+ * GNU GPL License. The rest is simply to convert the disk on chip
+ * syndrom into a standard syndom.
+ *
+ * Author: Fabrice Bellard (fabrice.bellard@netgem.com)
+ * Copyright (C) 2000 Netgem S.A.
+ *
+ * $Id: docecc.c,v 1.1.1.1 2009/03/25 22:21:57 kenagy Exp $
+ *
+ * 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
+ */
+
+#include <config.h>
+#include <common.h>
+#include <malloc.h>
+
+#undef ECC_DEBUG
+#undef PSYCHO_DEBUG
+
+#include <linux/mtd/doc2000.h>
+
+/* need to undef it (from asm/termbits.h) */
+#undef B0
+
+#define MM 10 /* Symbol size in bits */
+#define KK (1023-4) /* Number of data symbols per block */
+#define B0 510 /* First root of generator polynomial, alpha form */
+#define PRIM 1 /* power of alpha used to generate roots of generator poly */
+#define NN ((1 << MM) - 1)
+
+typedef unsigned short dtype;
+
+/* 1+x^3+x^10 */
+static const int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 };
+
+/* This defines the type used to store an element of the Galois Field
+ * used by the code. Make sure this is something larger than a char if
+ * if anything larger than GF(256) is used.
+ *
+ * Note: unsigned char will work up to GF(256) but int seems to run
+ * faster on the Pentium.
+ */
+typedef int gf;
+
+/* No legal value in index form represents zero, so
+ * we need a special value for this purpose
+ */
+#define A0 (NN)
+
+/* Compute x % NN, where NN is 2**MM - 1,
+ * without a slow divide
+ */
+static inline gf
+modnn(int x)
+{
+ while (x >= NN) {
+ x -= NN;
+ x = (x >> MM) + (x & NN);
+ }
+ return x;
+}
+
+#define CLEAR(a,n) {\
+int ci;\
+for(ci=(n)-1;ci >=0;ci--)\
+(a)[ci] = 0;\
+}
+
+#define COPY(a,b,n) {\
+int ci;\
+for(ci=(n)-1;ci >=0;ci--)\
+(a)[ci] = (b)[ci];\
+}
+
+#define COPYDOWN(a,b,n) {\
+int ci;\
+for(ci=(n)-1;ci >=0;ci--)\
+(a)[ci] = (b)[ci];\
+}
+
+#define Ldec 1
+
+/* generate GF(2**m) from the irreducible polynomial p(X) in Pp[0]..Pp[m]
+ lookup tables: index->polynomial form alpha_to[] contains j=alpha**i;
+ polynomial form -> index form index_of[j=alpha**i] = i
+ alpha=2 is the primitive element of GF(2**m)
+ HARI's COMMENT: (4/13/94) alpha_to[] can be used as follows:
+ Let @ represent the primitive element commonly called "alpha" that
+ is the root of the primitive polynomial p(x). Then in GF(2^m), for any
+ 0 <= i <= 2^m-2,
+ @^i = a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
+ where the binary vector (a(0),a(1),a(2),...,a(m-1)) is the representation
+ of the integer "alpha_to[i]" with a(0) being the LSB and a(m-1) the MSB. Thus for
+ example the polynomial representation of @^5 would be given by the binary
+ representation of the integer "alpha_to[5]".
+ Similarily, index_of[] can be used as follows:
+ As above, let @ represent the primitive element of GF(2^m) that is
+ the root of the primitive polynomial p(x). In order to find the power
+ of @ (alpha) that has the polynomial representation
+ a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
+ we consider the integer "i" whose binary representation with a(0) being LSB
+ and a(m-1) MSB is (a(0),a(1),...,a(m-1)) and locate the entry
+ "index_of[i]". Now, @^index_of[i] is that element whose polynomial
+ representation is (a(0),a(1),a(2),...,a(m-1)).
+ NOTE:
+ The element alpha_to[2^m-1] = 0 always signifying that the
+ representation of "@^infinity" = 0 is (0,0,0,...,0).
+ Similarily, the element index_of[0] = A0 always signifying
+ that the power of alpha which has the polynomial representation
+ (0,0,...,0) is "infinity".
+
+*/
+
+static void
+generate_gf(dtype Alpha_to[NN + 1], dtype Index_of[NN + 1])
+{
+ register int i, mask;
+
+ mask = 1;
+ Alpha_to[MM] = 0;
+ for (i = 0; i < MM; i++) {
+ Alpha_to[i] = mask;
+ Index_of[Alpha_to[i]] = i;
+ /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */
+ if (Pp[i] != 0)
+ Alpha_to[MM] ^= mask; /* Bit-wise EXOR operation */
+ mask <<= 1; /* single left-shift */
+ }
+ Index_of[Alpha_to[MM]] = MM;
+ /*
+ * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by
+ * poly-repr of @^i shifted left one-bit and accounting for any @^MM
+ * term that may occur when poly-repr of @^i is shifted.
+ */
+ mask >>= 1;
+ for (i = MM + 1; i < NN; i++) {
+ if (Alpha_to[i - 1] >= mask)
+ Alpha_to[i] = Alpha_to[MM] ^ ((Alpha_to[i - 1] ^ mask) << 1);
+ else
+ Alpha_to[i] = Alpha_to[i - 1] << 1;
+ Index_of[Alpha_to[i]] = i;
+ }
+ Index_of[0] = A0;
+ Alpha_to[NN] = 0;
+}
+
+/*
+ * Performs ERRORS+ERASURES decoding of RS codes. bb[] is the content
+ * of the feedback shift register after having processed the data and
+ * the ECC.
+ *
+ * Return number of symbols corrected, or -1 if codeword is illegal
+ * or uncorrectable. If eras_pos is non-null, the detected error locations
+ * are written back. NOTE! This array must be at least NN-KK elements long.
+ * The corrected data are written in eras_val[]. They must be xor with the data
+ * to retrieve the correct data : data[erase_pos[i]] ^= erase_val[i] .
+ *
+ * First "no_eras" erasures are declared by the calling program. Then, the
+ * maximum # of errors correctable is t_after_eras = floor((NN-KK-no_eras)/2).
+ * If the number of channel errors is not greater than "t_after_eras" the
+ * transmitted codeword will be recovered. Details of algorithm can be found
+ * in R. Blahut's "Theory ... of Error-Correcting Codes".
+
+ * Warning: the eras_pos[] array must not contain duplicate entries; decoder failure
+ * will result. The decoder *could* check for this condition, but it would involve
+ * extra time on every decoding operation.
+ * */
+static int
+eras_dec_rs(dtype Alpha_to[NN + 1], dtype Index_of[NN + 1],
+ gf bb[NN - KK + 1], gf eras_val[NN-KK], int eras_pos[NN-KK],
+ int no_eras)
+{
+ int deg_lambda, el, deg_omega;
+ int i, j, r,k;
+ gf u,q,tmp,num1,num2,den,discr_r;
+ gf lambda[NN-KK + 1], s[NN-KK + 1]; /* Err+Eras Locator poly
+ * and syndrome poly */
+ gf b[NN-KK + 1], t[NN-KK + 1], omega[NN-KK + 1];
+ gf root[NN-KK], reg[NN-KK + 1], loc[NN-KK];
+ int syn_error, count;
+
+ syn_error = 0;
+ for(i=0;i<NN-KK;i++)
+ syn_error |= bb[i];
+
+ if (!syn_error) {
+ /* if remainder is zero, data[] is a codeword and there are no
+ * errors to correct. So return data[] unmodified
+ */
+ count = 0;
+ goto finish;
+ }
+
+ for(i=1;i<=NN-KK;i++){
+ s[i] = bb[0];
+ }
+ for(j=1;j<NN-KK;j++){
+ if(bb[j] == 0)
+ continue;
+ tmp = Index_of[bb[j]];
+
+ for(i=1;i<=NN-KK;i++)
+ s[i] ^= Alpha_to[modnn(tmp + (B0+i-1)*PRIM*j)];
+ }
+
+ /* undo the feedback register implicit multiplication and convert
+ syndromes to index form */
+
+ for(i=1;i<=NN-KK;i++) {
+ tmp = Index_of[s[i]];
+ if (tmp != A0)
+ tmp = modnn(tmp + 2 * KK * (B0+i-1)*PRIM);
+ s[i] = tmp;
+ }
+
+ CLEAR(&lambda[1],NN-KK);
+ lambda[0] = 1;
+
+ if (no_eras > 0) {
+ /* Init lambda to be the erasure locator polynomial */
+ lambda[1] = Alpha_to[modnn(PRIM * eras_pos[0])];
+ for (i = 1; i < no_eras; i++) {
+ u = modnn(PRIM*eras_pos[i]);
+ for (j = i+1; j > 0; j--) {
+ tmp = Index_of[lambda[j - 1]];
+ if(tmp != A0)
+ lambda[j] ^= Alpha_to[modnn(u + tmp)];
+ }
+ }
+#ifdef ECC_DEBUG
+ /* Test code that verifies the erasure locator polynomial just constructed
+ Needed only for decoder debugging. */
+
+ /* find roots of the erasure location polynomial */
+ for(i=1;i<=no_eras;i++)
+ reg[i] = Index_of[lambda[i]];
+ count = 0;
+ for (i = 1,k=NN-Ldec; i <= NN; i++,k = modnn(NN+k-Ldec)) {
+ q = 1;
+ for (j = 1; j <= no_eras; j++)
+ if (reg[j] != A0) {
+ reg[j] = modnn(reg[j] + j);
+ q ^= Alpha_to[reg[j]];
+ }
+ if (q != 0)
+ continue;
+ /* store root and error location number indices */
+ root[count] = i;
+ loc[count] = k;
+ count++;
+ }
+ if (count != no_eras) {
+ printf("\n lambda(x) is WRONG\n");
+ count = -1;
+ goto finish;
+ }
+#ifdef PSYCHO_DEBUG
+ printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n");
+ for (i = 0; i < count; i++)
+ printf("%d ", loc[i]);
+ printf("\n");
+#endif
+#endif
+ }
+ for(i=0;i<NN-KK+1;i++)
+ b[i] = Index_of[lambda[i]];
+
+ /*
+ * Begin Berlekamp-Massey algorithm to determine error+erasure
+ * locator polynomial
+ */
+ r = no_eras;
+ el = no_eras;
+ while (++r <= NN-KK) { /* r is the step number */
+ /* Compute discrepancy at the r-th step in poly-form */
+ discr_r = 0;
+ for (i = 0; i < r; i++){
+ if ((lambda[i] != 0) && (s[r - i] != A0)) {
+ discr_r ^= Alpha_to[modnn(Index_of[lambda[i]] + s[r - i])];
+ }
+ }
+ discr_r = Index_of[discr_r]; /* Index form */
+ if (discr_r == A0) {
+ /* 2 lines below: B(x) <-- x*B(x) */
+ COPYDOWN(&b[1],b,NN-KK);
+ b[0] = A0;
+ } else {
+ /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */
+ t[0] = lambda[0];
+ for (i = 0 ; i < NN-KK; i++) {
+ if(b[i] != A0)
+ t[i+1] = lambda[i+1] ^ Alpha_to[modnn(discr_r + b[i])];
+ else
+ t[i+1] = lambda[i+1];
+ }
+ if (2 * el <= r + no_eras - 1) {
+ el = r + no_eras - el;
+ /*
+ * 2 lines below: B(x) <-- inv(discr_r) *
+ * lambda(x)
+ */
+ for (i = 0; i <= NN-KK; i++)
+ b[i] = (lambda[i] == 0) ? A0 : modnn(Index_of[lambda[i]] - discr_r + NN);
+ } else {
+ /* 2 lines below: B(x) <-- x*B(x) */
+ COPYDOWN(&b[1],b,NN-KK);
+ b[0] = A0;
+ }
+ COPY(lambda,t,NN-KK+1);
+ }
+ }
+
+ /* Convert lambda to index form and compute deg(lambda(x)) */
+ deg_lambda = 0;
+ for(i=0;i<NN-KK+1;i++){
+ lambda[i] = Index_of[lambda[i]];
+ if(lambda[i] != A0)
+ deg_lambda = i;
+ }
+ /*
+ * Find roots of the error+erasure locator polynomial by Chien
+ * Search
+ */
+ COPY(®[1],&lambda[1],NN-KK);
+ count = 0; /* Number of roots of lambda(x) */
+ for (i = 1,k=NN-Ldec; i <= NN; i++,k = modnn(NN+k-Ldec)) {
+ q = 1;
+ for (j = deg_lambda; j > 0; j--){
+ if (reg[j] != A0) {
+ reg[j] = modnn(reg[j] + j);
+ q ^= Alpha_to[reg[j]];
+ }
+ }
+ if (q != 0)
+ continue;
+ /* store root (index-form) and error location number */
+ root[count] = i;
+ loc[count] = k;
+ /* If we've already found max possible roots,
+ * abort the search to save time
+ */
+ if(++count == deg_lambda)
+ break;
+ }
+ if (deg_lambda != count) {
+ /*
+ * deg(lambda) unequal to number of roots => uncorrectable
+ * error detected
+ */
+ count = -1;
+ goto finish;
+ }
+ /*
+ * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo
+ * x**(NN-KK)). in index form. Also find deg(omega).
+ */
+ deg_omega = 0;
+ for (i = 0; i < NN-KK;i++){
+ tmp = 0;
+ j = (deg_lambda < i) ? deg_lambda : i;
+ for(;j >= 0; j--){
+ if ((s[i + 1 - j] != A0) && (lambda[j] != A0))
+ tmp ^= Alpha_to[modnn(s[i + 1 - j] + lambda[j])];
+ }
+ if(tmp != 0)
+ deg_omega = i;
+ omega[i] = Index_of[tmp];
+ }
+ omega[NN-KK] = A0;
+
+ /*
+ * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 =
+ * inv(X(l))**(B0-1) and den = lambda_pr(inv(X(l))) all in poly-form
+ */
+ for (j = count-1; j >=0; j--) {
+ num1 = 0;
+ for (i = deg_omega; i >= 0; i--) {
+ if (omega[i] != A0)
+ num1 ^= Alpha_to[modnn(omega[i] + i * root[j])];
+ }
+ num2 = Alpha_to[modnn(root[j] * (B0 - 1) + NN)];
+ den = 0;
+
+ /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */
+ for (i = min(deg_lambda,NN-KK-1) & ~1; i >= 0; i -=2) {
+ if(lambda[i+1] != A0)
+ den ^= Alpha_to[modnn(lambda[i+1] + i * root[j])];
+ }
+ if (den == 0) {
+#ifdef ECC_DEBUG
+ printf("\n ERROR: denominator = 0\n");
+#endif
+ /* Convert to dual- basis */
+ count = -1;
+ goto finish;
+ }
+ /* Apply error to data */
+ if (num1 != 0) {
+ eras_val[j] = Alpha_to[modnn(Index_of[num1] + Index_of[num2] + NN - Index_of[den])];
+ } else {
+ eras_val[j] = 0;
+ }
+ }
+ finish:
+ for(i=0;i<count;i++)
+ eras_pos[i] = loc[i];
+ return count;
+}
+
+/***************************************************************************/
+/* The DOC specific code begins here */
+
+#define SECTOR_SIZE 512
+/* The sector bytes are packed into NB_DATA MM bits words */
+#define NB_DATA (((SECTOR_SIZE + 1) * 8 + 6) / MM)
+
+/*
+ * Correct the errors in 'sector[]' by using 'ecc1[]' which is the
+ * content of the feedback shift register applyied to the sector and
+ * the ECC. Return the number of errors corrected (and correct them in
+ * sector), or -1 if error
+ */
+int doc_decode_ecc(unsigned char sector[SECTOR_SIZE], unsigned char ecc1[6])
+{
+ int parity, i, nb_errors;
+ gf bb[NN - KK + 1];
+ gf error_val[NN-KK];
+ int error_pos[NN-KK], pos, bitpos, index, val;
+ dtype *Alpha_to, *Index_of;
+
+ /* init log and exp tables here to save memory. However, it is slower */
+ Alpha_to = malloc((NN + 1) * sizeof(dtype));
+ if (!Alpha_to)
+ return -1;
+
+ Index_of = malloc((NN + 1) * sizeof(dtype));
+ if (!Index_of) {
+ free(Alpha_to);
+ return -1;
+ }
+
+ generate_gf(Alpha_to, Index_of);
+
+ parity = ecc1[1];
+
+ bb[0] = (ecc1[4] & 0xff) | ((ecc1[5] & 0x03) << 8);
+ bb[1] = ((ecc1[5] & 0xfc) >> 2) | ((ecc1[2] & 0x0f) << 6);
+ bb[2] = ((ecc1[2] & 0xf0) >> 4) | ((ecc1[3] & 0x3f) << 4);
+ bb[3] = ((ecc1[3] & 0xc0) >> 6) | ((ecc1[0] & 0xff) << 2);
+
+ nb_errors = eras_dec_rs(Alpha_to, Index_of, bb,
+ error_val, error_pos, 0);
+ if (nb_errors <= 0)
+ goto the_end;
+
+ /* correct the errors */
+ for(i=0;i<nb_errors;i++) {
+ pos = error_pos[i];
+ if (pos >= NB_DATA && pos < KK) {
+ nb_errors = -1;
+ goto the_end;
+ }
+ if (pos < NB_DATA) {
+ /* extract bit position (MSB first) */
+ pos = 10 * (NB_DATA - 1 - pos) - 6;
+ /* now correct the following 10 bits. At most two bytes
+ can be modified since pos is even */
+ index = (pos >> 3) ^ 1;
+ bitpos = pos & 7;
+ if ((index >= 0 && index < SECTOR_SIZE) ||
+ index == (SECTOR_SIZE + 1)) {
+ val = error_val[i] >> (2 + bitpos);
+ parity ^= val;
+ if (index < SECTOR_SIZE)
+ sector[index] ^= val;
+ }
+ index = ((pos >> 3) + 1) ^ 1;
+ bitpos = (bitpos + 10) & 7;
+ if (bitpos == 0)
+ bitpos = 8;
+ if ((index >= 0 && index < SECTOR_SIZE) ||
+ index == (SECTOR_SIZE + 1)) {
+ val = error_val[i] << (8 - bitpos);
+ parity ^= val;
+ if (index < SECTOR_SIZE)
+ sector[index] ^= val;
+ }
+ }
+ }
+
+ /* use parity to test extra errors */
+ if ((parity & 0xff) != 0)
+ nb_errors = -1;
+
+ the_end:
+ free(Alpha_to);
+ free(Index_of);
+ return nb_errors;
+}
diff -Naur u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries u-boot-2009.03/cpu/74xx_7xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/74xx_7xx/CVS/Entries 2009-03-25 15:57:51.340576600 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries.Extra u-boot-2009.03/cpu/74xx_7xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/74xx_7xx/CVS/Entries.Extra 2009-03-25 15:57:51.340576600 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019717/
+/cache.S///1238019717/
+/config.mk///1238019717/
+/cpu.c///1238019717/
+/cpu_init.c///1238019717/
+/interrupts.c///1238019717/
+/io.S///1238019717/
+/kgdb.S///1238019717/
+/speed.c///1238019718/
+/start.S///1238019718/
+/traps.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/74xx_7xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/74xx_7xx/CVS/Entries.Extra.Old 2009-03-25 15:25:10.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019717/
+/cache.S///1238019717/
+/config.mk///1238019717/
+/cpu.c///1238019717/
+/cpu_init.c///1238019717/
+/interrupts.c///1238019717/
+/io.S///1238019717/
+/kgdb.S///1238019717/
+/speed.c///1238019718/
+/start.S///1238019718/
+/traps.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries.Old u-boot-2009.03/cpu/74xx_7xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/74xx_7xx/CVS/Entries.Old 2009-03-25 15:25:10.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/cache.S/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/io.S/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/kgdb.S/1.1.1.1/Wed Mar 25 22:21:57 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Repository u-boot-2009.03/cpu/74xx_7xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/74xx_7xx/CVS/Repository 2009-03-25 15:25:10.743749500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/74xx_7xx
diff -Naur u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Root u-boot-2009.03/cpu/74xx_7xx/CVS/Root
--- u-boot-2009.03_orig/cpu/74xx_7xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/74xx_7xx/CVS/Root 2009-03-25 15:25:10.728124600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/CVS/Entries u-boot-2009.03/cpu/CVS/Entries
--- u-boot-2009.03_orig/cpu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/CVS/Entries 2009-03-25 17:49:53.639648500 -0700
@@ -0,0 +1,46 @@
+D/74xx_7xx////
+D/arm1136////
+D/arm1176////
+D/arm720t////
+D/arm920t////
+D/arm925t////
+D/arm926ejs////
+D/arm946es////
+D/arm_cortexa8////
+D/arm_intcm////
+D/at32ap////
+D/blackfin////
+D/i386////
+D/ixp////
+D/leon2////
+D/leon3////
+D/lh7a40x////
+D/mcf5227x////
+D/mcf523x////
+D/mcf52x2////
+D/mcf532x////
+D/mcf5445x////
+D/mcf547x_8x////
+D/microblaze////
+D/mips////
+D/mpc512x////
+D/mpc5xx////
+D/mpc5xxx////
+D/mpc8220////
+D/mpc824x////
+D/mpc8260////
+D/mpc83xx////
+D/mpc85xx////
+D/mpc86xx////
+D/mpc8xx////
+D/mpc8xxx////
+D/nios////
+D/nios2////
+D/ppc4xx////
+D/pxa////
+D/s3c44b0////
+D/sa1100////
+D/sh2////
+D/sh3////
+D/sh4////
+D/or1200////
diff -Naur u-boot-2009.03_orig/cpu/CVS/Entries.Extra u-boot-2009.03/cpu/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/CVS/Entries.Extra 2009-03-25 17:49:53.639648500 -0700
@@ -0,0 +1,46 @@
+D/74xx_7xx////
+D/arm1136////
+D/arm1176////
+D/arm720t////
+D/arm920t////
+D/arm925t////
+D/arm926ejs////
+D/arm946es////
+D/arm_cortexa8////
+D/arm_intcm////
+D/at32ap////
+D/blackfin////
+D/i386////
+D/ixp////
+D/leon2////
+D/leon3////
+D/lh7a40x////
+D/mcf5227x////
+D/mcf523x////
+D/mcf52x2////
+D/mcf532x////
+D/mcf5445x////
+D/mcf547x_8x////
+D/microblaze////
+D/mips////
+D/mpc512x////
+D/mpc5xx////
+D/mpc5xxx////
+D/mpc8220////
+D/mpc824x////
+D/mpc8260////
+D/mpc83xx////
+D/mpc85xx////
+D/mpc86xx////
+D/mpc8xx////
+D/mpc8xxx////
+D/nios////
+D/nios2////
+D/ppc4xx////
+D/pxa////
+D/s3c44b0////
+D/sa1100////
+D/sh2////
+D/sh3////
+D/sh4////
+D/or1200////
diff -Naur u-boot-2009.03_orig/cpu/CVS/Entries.Extra.Old u-boot-2009.03/cpu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/CVS/Entries.Extra.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,45 @@
+D/74xx_7xx////
+D/arm1136////
+D/arm1176////
+D/arm720t////
+D/arm920t////
+D/arm925t////
+D/arm926ejs////
+D/arm946es////
+D/arm_cortexa8////
+D/arm_intcm////
+D/at32ap////
+D/blackfin////
+D/i386////
+D/ixp////
+D/leon2////
+D/leon3////
+D/lh7a40x////
+D/mcf5227x////
+D/mcf523x////
+D/mcf52x2////
+D/mcf532x////
+D/mcf5445x////
+D/mcf547x_8x////
+D/microblaze////
+D/mips////
+D/mpc512x////
+D/mpc5xx////
+D/mpc5xxx////
+D/mpc8220////
+D/mpc824x////
+D/mpc8260////
+D/mpc83xx////
+D/mpc85xx////
+D/mpc86xx////
+D/mpc8xx////
+D/mpc8xxx////
+D/nios////
+D/nios2////
+D/ppc4xx////
+D/pxa////
+D/s3c44b0////
+D/sa1100////
+D/sh2////
+D/sh3////
+D/sh4////
diff -Naur u-boot-2009.03_orig/cpu/CVS/Entries.Old u-boot-2009.03/cpu/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/CVS/Entries.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,45 @@
+D/74xx_7xx////
+D/arm1136////
+D/arm1176////
+D/arm720t////
+D/arm920t////
+D/arm925t////
+D/arm926ejs////
+D/arm946es////
+D/arm_cortexa8////
+D/arm_intcm////
+D/at32ap////
+D/blackfin////
+D/i386////
+D/ixp////
+D/leon2////
+D/leon3////
+D/lh7a40x////
+D/mcf5227x////
+D/mcf523x////
+D/mcf52x2////
+D/mcf532x////
+D/mcf5445x////
+D/mcf547x_8x////
+D/microblaze////
+D/mips////
+D/mpc512x////
+D/mpc5xx////
+D/mpc5xxx////
+D/mpc8220////
+D/mpc824x////
+D/mpc8260////
+D/mpc83xx////
+D/mpc85xx////
+D/mpc86xx////
+D/mpc8xx////
+D/mpc8xxx////
+D/nios////
+D/nios2////
+D/ppc4xx////
+D/pxa////
+D/s3c44b0////
+D/sa1100////
+D/sh2////
+D/sh3////
+D/sh4////
diff -Naur u-boot-2009.03_orig/cpu/CVS/Repository u-boot-2009.03/cpu/CVS/Repository
--- u-boot-2009.03_orig/cpu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/CVS/Repository 2009-03-25 15:25:10.712499700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu
diff -Naur u-boot-2009.03_orig/cpu/CVS/Root u-boot-2009.03/cpu/CVS/Root
--- u-boot-2009.03_orig/cpu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/CVS/Root 2009-03-25 15:25:10.712499700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm1136/CVS/Entries u-boot-2009.03/cpu/arm1136/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm1136/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/CVS/Entries 2009-03-25 15:57:51.512450500 -0700
@@ -0,0 +1,6 @@
+D/mx31////
+D/omap24xx////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/arm1136/CVS/Entries.Extra u-boot-2009.03/cpu/arm1136/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm1136/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/CVS/Entries.Extra 2009-03-25 15:57:51.512450500 -0700
@@ -0,0 +1,6 @@
+D/mx31////
+D/omap24xx////
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/start.S///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1136/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm1136/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm1136/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/CVS/Entries.Extra.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/start.S///1238019718/
+D/mx31////
+D/omap24xx////
diff -Naur u-boot-2009.03_orig/cpu/arm1136/CVS/Entries.Old u-boot-2009.03/cpu/arm1136/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm1136/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/CVS/Entries.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D/mx31////
+D/omap24xx////
diff -Naur u-boot-2009.03_orig/cpu/arm1136/CVS/Repository u-boot-2009.03/cpu/arm1136/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm1136/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/CVS/Repository 2009-03-25 15:25:10.915623400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm1136
diff -Naur u-boot-2009.03_orig/cpu/arm1136/CVS/Root u-boot-2009.03/cpu/arm1136/CVS/Root
--- u-boot-2009.03_orig/cpu/arm1136/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/CVS/Root 2009-03-25 15:25:10.899998500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries 2009-03-25 15:57:51.418701100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/generic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries.Extra u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries.Extra 2009-03-25 15:57:51.418701100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019718/
+/generic.c///1238019718/
+/interrupts.c///1238019718/
+/serial.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries.Extra.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019718/
+/generic.c///1238019718/
+/interrupts.c///1238019718/
+/serial.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries.Old u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/mx31/CVS/Entries.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/generic.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Repository u-boot-2009.03/cpu/arm1136/mx31/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/mx31/CVS/Repository 2009-03-25 15:25:10.962498100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm1136/mx31
diff -Naur u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Root u-boot-2009.03/cpu/arm1136/mx31/CVS/Root
--- u-boot-2009.03_orig/cpu/arm1136/mx31/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/mx31/CVS/Root 2009-03-25 15:25:10.946873200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries 2009-03-25 15:57:51.481200700 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries.Extra u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries.Extra 2009-03-25 15:57:51.481200700 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019718/
+/interrupts.c///1238019718/
+/start.S///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries.Extra.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019718/
+/interrupts.c///1238019718/
+/start.S///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries.Old u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Entries.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Repository u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Repository 2009-03-25 15:25:11.056247500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm1136/omap24xx
diff -Naur u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Root u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Root
--- u-boot-2009.03_orig/cpu/arm1136/omap24xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1136/omap24xx/CVS/Root 2009-03-25 15:25:11.056247500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm1176/CVS/Entries u-boot-2009.03/cpu/arm1176/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm1176/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/CVS/Entries 2009-03-25 15:57:51.684324400 -0700
@@ -0,0 +1,5 @@
+D/s3c64xx////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/arm1176/CVS/Entries.Extra u-boot-2009.03/cpu/arm1176/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm1176/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/CVS/Entries.Extra 2009-03-25 15:57:51.684324400 -0700
@@ -0,0 +1,5 @@
+D/s3c64xx////
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/start.S///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1176/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm1176/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm1176/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/CVS/Entries.Extra.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/start.S///1238019718/
+D/s3c64xx////
diff -Naur u-boot-2009.03_orig/cpu/arm1176/CVS/Entries.Old u-boot-2009.03/cpu/arm1176/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm1176/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/CVS/Entries.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D/s3c64xx////
diff -Naur u-boot-2009.03_orig/cpu/arm1176/CVS/Repository u-boot-2009.03/cpu/arm1176/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm1176/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/CVS/Repository 2009-03-25 15:25:11.196871600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm1176
diff -Naur u-boot-2009.03_orig/cpu/arm1176/CVS/Root u-boot-2009.03/cpu/arm1176/CVS/Root
--- u-boot-2009.03_orig/cpu/arm1176/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/CVS/Root 2009-03-25 15:25:11.181246700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries 2009-03-25 15:57:51.621824800 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries.Extra u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries.Extra 2009-03-25 15:57:51.621824800 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu_init.S///1238019718/
+/interrupts.c///1238019718/
+/speed.c///1238019718/
+/usb.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries.Extra.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu_init.S///1238019718/
+/interrupts.c///1238019718/
+/speed.c///1238019718/
+/usb.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries.Old u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Entries.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/cpu_init.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Repository u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Repository 2009-03-25 15:25:11.243746300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm1176/s3c64xx
diff -Naur u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Root u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Root
--- u-boot-2009.03_orig/cpu/arm1176/s3c64xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm1176/s3c64xx/CVS/Root 2009-03-25 15:25:11.243746300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm720t/CVS/Entries u-boot-2009.03/cpu/arm720t/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm720t/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/CVS/Entries 2009-03-25 15:57:51.840573400 -0700
@@ -0,0 +1,8 @@
+D/lpc2292////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_netarm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/arm720t/CVS/Entries.Extra u-boot-2009.03/cpu/arm720t/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm720t/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/CVS/Entries.Extra 2009-03-25 15:57:51.840573400 -0700
@@ -0,0 +1,8 @@
+D/lpc2292////
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/interrupts.c///1238019718/
+/serial.c///1238019718/
+/serial_netarm.c///1238019718/
+/start.S///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm720t/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm720t/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm720t/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/CVS/Entries.Extra.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/interrupts.c///1238019718/
+/serial.c///1238019718/
+/serial_netarm.c///1238019718/
+/start.S///1238019718/
+D/lpc2292////
diff -Naur u-boot-2009.03_orig/cpu/arm720t/CVS/Entries.Old u-boot-2009.03/cpu/arm720t/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm720t/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/CVS/Entries.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/serial_netarm.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D/lpc2292////
diff -Naur u-boot-2009.03_orig/cpu/arm720t/CVS/Repository u-boot-2009.03/cpu/arm720t/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm720t/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/CVS/Repository 2009-03-25 15:25:11.618743900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm720t
diff -Naur u-boot-2009.03_orig/cpu/arm720t/CVS/Root u-boot-2009.03/cpu/arm720t/CVS/Root
--- u-boot-2009.03_orig/cpu/arm720t/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/CVS/Root 2009-03-25 15:25:11.618743900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries 2009-03-25 15:57:51.793698700 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iap_entry.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc_hw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc_hw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries.Extra u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries.Extra 2009-03-25 15:57:51.793698700 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019718/
+/flash.c///1238019718/
+/iap_entry.S///1238019718/
+/mmc.c///1238019718/
+/mmc_hw.c///1238019718/
+/mmc_hw.h///1238019718/
+/spi.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries.Extra.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019718/
+/flash.c///1238019718/
+/iap_entry.S///1238019718/
+/mmc.c///1238019718/
+/mmc_hw.c///1238019718/
+/mmc_hw.h///1238019718/
+/spi.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries.Old u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Entries.Old 2009-03-25 15:25:11.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/flash.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/iap_entry.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/mmc.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/mmc_hw.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/mmc_hw.h/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/spi.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Repository u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Repository 2009-03-25 15:25:11.696868400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm720t/lpc2292
diff -Naur u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Root u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Root
--- u-boot-2009.03_orig/cpu/arm720t/lpc2292/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm720t/lpc2292/CVS/Root 2009-03-25 15:25:11.696868400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm920t/CVS/Entries u-boot-2009.03/cpu/arm920t/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm920t/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/CVS/Entries 2009-03-25 15:57:52.262445700 -0700
@@ -0,0 +1,9 @@
+D/at91rm9200////
+D/imx////
+D/ks8695////
+D/s3c24x0////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/arm920t/CVS/Entries.Extra u-boot-2009.03/cpu/arm920t/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm920t/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/CVS/Entries.Extra 2009-03-25 15:57:52.262445700 -0700
@@ -0,0 +1,9 @@
+D/at91rm9200////
+D/imx////
+D/ks8695////
+D/s3c24x0////
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/interrupts.c///1238019718/
+/start.S///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm920t/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm920t/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/CVS/Entries.Extra.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019718/
+/config.mk///1238019718/
+/cpu.c///1238019718/
+/interrupts.c///1238019718/
+/start.S///1238019718/
+D/at91rm9200////
+D/imx////
+D/ks8695////
+D/s3c24x0////
diff -Naur u-boot-2009.03_orig/cpu/arm920t/CVS/Entries.Old u-boot-2009.03/cpu/arm920t/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm920t/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/CVS/Entries.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D/at91rm9200////
+D/imx////
+D/ks8695////
+D/s3c24x0////
diff -Naur u-boot-2009.03_orig/cpu/arm920t/CVS/Repository u-boot-2009.03/cpu/arm920t/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm920t/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/CVS/Repository 2009-03-25 15:25:11.884367200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm920t
diff -Naur u-boot-2009.03_orig/cpu/arm920t/CVS/Root u-boot-2009.03/cpu/arm920t/CVS/Root
--- u-boot-2009.03_orig/cpu/arm920t/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/CVS/Root 2009-03-25 15:25:11.884367200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries 2009-03-25 15:57:51.965572600 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm5221.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dm9161.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ether.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lxt972.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries.Extra u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries.Extra 2009-03-25 15:57:51.965572600 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019718/
+/bcm5221.c///1238019718/
+/dm9161.c///1238019718/
+/ether.c///1238019718/
+/i2c.c///1238019718/
+/interrupts.c///1238019718/
+/lowlevel_init.S///1238019718/
+/lxt972.c///1238019718/
+/serial.c///1238019718/
+/spi.c///1238019718/
+/usb.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries.Extra.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019718/
+/bcm5221.c///1238019718/
+/dm9161.c///1238019718/
+/ether.c///1238019718/
+/i2c.c///1238019718/
+/interrupts.c///1238019718/
+/lowlevel_init.S///1238019718/
+/lxt972.c///1238019718/
+/serial.c///1238019718/
+/spi.c///1238019718/
+/usb.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries.Old u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Entries.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/bcm5221.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/dm9161.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/ether.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/lxt972.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/spi.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Repository u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Repository 2009-03-25 15:25:11.962491700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm920t/at91rm9200
diff -Naur u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Root u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Root
--- u-boot-2009.03_orig/cpu/arm920t/at91rm9200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/at91rm9200/CVS/Root 2009-03-25 15:25:11.946866800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries u-boot-2009.03/cpu/arm920t/imx/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/imx/CVS/Entries 2009-03-25 15:57:52.043697100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/generic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries.Extra u-boot-2009.03/cpu/arm920t/imx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/imx/CVS/Entries.Extra 2009-03-25 15:57:52.043697100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019718/
+/generic.c///1238019718/
+/interrupts.c///1238019718/
+/serial.c///1238019718/
+/speed.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm920t/imx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/imx/CVS/Entries.Extra.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019718/
+/generic.c///1238019718/
+/interrupts.c///1238019718/
+/serial.c///1238019718/
+/speed.c///1238019718/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries.Old u-boot-2009.03/cpu/arm920t/imx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/imx/CVS/Entries.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/generic.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Repository u-boot-2009.03/cpu/arm920t/imx/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/imx/CVS/Repository 2009-03-25 15:25:12.118740700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm920t/imx
diff -Naur u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Root u-boot-2009.03/cpu/arm920t/imx/CVS/Root
--- u-boot-2009.03_orig/cpu/arm920t/imx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/imx/CVS/Root 2009-03-25 15:25:12.118740700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries 2009-03-25 15:57:52.106196700 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries.Extra u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries.Extra 2009-03-25 15:57:52.106196700 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019718/
+/interrupts.c///1238019718/
+/lowlevel_init.S///1238019718/
+/serial.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries.Extra.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019718/
+/interrupts.c///1238019718/
+/lowlevel_init.S///1238019718/
+/serial.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries.Old u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/ks8695/CVS/Entries.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:58 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Repository u-boot-2009.03/cpu/arm920t/ks8695/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/ks8695/CVS/Repository 2009-03-25 15:25:12.243739900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm920t/ks8695
diff -Naur u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Root u-boot-2009.03/cpu/arm920t/ks8695/CVS/Root
--- u-boot-2009.03_orig/cpu/arm920t/ks8695/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/ks8695/CVS/Root 2009-03-25 15:25:12.228115000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries 2009-03-25 15:57:52.215571000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries.Extra u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries.Extra 2009-03-25 15:57:52.215571000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019719/
+/i2c.c///1238019719/
+/interrupts.c///1238019719/
+/nand.c///1238019719/
+/serial.c///1238019719/
+/speed.c///1238019719/
+/usb.c///1238019719/
+/usb_ohci.c///1238019719/
+/usb_ohci.h///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries.Extra.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019719/
+/i2c.c///1238019719/
+/interrupts.c///1238019719/
+/nand.c///1238019719/
+/serial.c///1238019719/
+/speed.c///1238019719/
+/usb.c///1238019719/
+/usb_ohci.c///1238019719/
+/usb_ohci.h///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries.Old u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Entries.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/usb_ohci.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/usb_ohci.h/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Repository u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Repository 2009-03-25 15:25:12.337489300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm920t/s3c24x0
diff -Naur u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Root u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Root
--- u-boot-2009.03_orig/cpu/arm920t/s3c24x0/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm920t/s3c24x0/CVS/Root 2009-03-25 15:25:12.321864400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm925t/CVS/Entries u-boot-2009.03/cpu/arm925t/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm925t/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm925t/CVS/Entries 2009-03-25 15:57:52.324945300 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap925.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm925t/CVS/Entries.Extra u-boot-2009.03/cpu/arm925t/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm925t/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm925t/CVS/Entries.Extra 2009-03-25 15:57:52.324945300 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/omap925.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm925t/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm925t/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm925t/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm925t/CVS/Entries.Extra.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/omap925.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm925t/CVS/Entries.Old u-boot-2009.03/cpu/arm925t/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm925t/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm925t/CVS/Entries.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/omap925.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm925t/CVS/Repository u-boot-2009.03/cpu/arm925t/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm925t/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm925t/CVS/Repository 2009-03-25 15:25:12.603112600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm925t
diff -Naur u-boot-2009.03_orig/cpu/arm925t/CVS/Root u-boot-2009.03/cpu/arm925t/CVS/Root
--- u-boot-2009.03_orig/cpu/arm925t/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm925t/CVS/Root 2009-03-25 15:25:12.603112600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries u-boot-2009.03/cpu/arm926ejs/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/CVS/Entries 2009-03-25 15:57:52.778067400 -0700
@@ -0,0 +1,10 @@
+D/at91////
+D/davinci////
+D/nomadik////
+D/omap////
+D/versatile////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries.Extra u-boot-2009.03/cpu/arm926ejs/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/CVS/Entries.Extra 2009-03-25 15:57:52.778067400 -0700
@@ -0,0 +1,10 @@
+D/at91////
+D/davinci////
+D/nomadik////
+D/omap////
+D/versatile////
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm926ejs/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/CVS/Entries.Extra.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/start.S///1238019719/
+D/at91////
+D/davinci////
+D/nomadik////
+D/omap////
+D/versatile////
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries.Old u-boot-2009.03/cpu/arm926ejs/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/CVS/Entries.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D/at91////
+D/davinci////
+D/nomadik////
+D/omap////
+D/versatile////
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/CVS/Repository u-boot-2009.03/cpu/arm926ejs/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm926ejs/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/CVS/Repository 2009-03-25 15:25:12.743736700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm926ejs
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/CVS/Root u-boot-2009.03/cpu/arm926ejs/CVS/Root
--- u-boot-2009.03_orig/cpu/arm926ejs/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/CVS/Root 2009-03-25 15:25:12.743736700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries 2009-03-25 15:57:52.434319600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries.Extra u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries.Extra 2009-03-25 15:57:52.434319600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/lowlevel_init.S///1238019719/
+/spi.c///1238019719/
+/timer.c///1238019719/
+/u-boot.lds///1238019719/
+/usb.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries.Extra.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/lowlevel_init.S///1238019719/
+/spi.c///1238019719/
+/timer.c///1238019719/
+/u-boot.lds///1238019719/
+/usb.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries.Old u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/at91/CVS/Entries.Old 2009-03-25 15:25:12.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/spi.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Repository u-boot-2009.03/cpu/arm926ejs/at91/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/at91/CVS/Repository 2009-03-25 15:25:12.806236300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm926ejs/at91
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Root u-boot-2009.03/cpu/arm926ejs/at91/CVS/Root
--- u-boot-2009.03_orig/cpu/arm926ejs/at91/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/at91/CVS/Root 2009-03-25 15:25:12.790611400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries 2009-03-25 15:57:52.528069000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dp83848.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ether.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lxt972.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reset.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries.Extra u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries.Extra 2009-03-25 15:57:52.528069000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019719/
+/dp83848.c///1238019719/
+/ether.c///1238019719/
+/i2c.c///1238019719/
+/lowlevel_init.S///1238019719/
+/lxt972.c///1238019719/
+/nand.c///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries.Extra.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019719/
+/dp83848.c///1238019719/
+/ether.c///1238019719/
+/i2c.c///1238019719/
+/lowlevel_init.S///1238019719/
+/lxt972.c///1238019719/
+/nand.c///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries.Old u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Entries.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/dp83848.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/ether.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/lxt972.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/reset.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Repository u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Repository 2009-03-25 15:25:12.931235500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm926ejs/davinci
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Root u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Root
--- u-boot-2009.03_orig/cpu/arm926ejs/davinci/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/davinci/CVS/Root 2009-03-25 15:25:12.931235500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries 2009-03-25 15:57:52.590568600 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reset.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries.Extra u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries.Extra 2009-03-25 15:57:52.590568600 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries.Extra.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries.Old u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Entries.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/reset.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Repository u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Repository 2009-03-25 15:25:13.087484500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm926ejs/nomadik
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Root u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Root
--- u-boot-2009.03_orig/cpu/arm926ejs/nomadik/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/nomadik/CVS/Root 2009-03-25 15:25:13.071859600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries 2009-03-25 15:57:52.668693100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpuinfo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reset.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries.Extra u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries.Extra 2009-03-25 15:57:52.668693100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019719/
+/cpuinfo.c///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries.Extra.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019719/
+/cpuinfo.c///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries.Old u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/omap/CVS/Entries.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpuinfo.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/reset.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Repository u-boot-2009.03/cpu/arm926ejs/omap/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/omap/CVS/Repository 2009-03-25 15:25:13.165609000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm926ejs/omap
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Root u-boot-2009.03/cpu/arm926ejs/omap/CVS/Root
--- u-boot-2009.03_orig/cpu/arm926ejs/omap/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/omap/CVS/Root 2009-03-25 15:25:13.165609000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries 2009-03-25 15:57:52.731192700 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reset.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries.Extra u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries.Extra 2009-03-25 15:57:52.731192700 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries.Extra.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019719/
+/reset.S///1238019719/
+/timer.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries.Old u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Entries.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/reset.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Repository u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Repository 2009-03-25 15:25:13.274983300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm926ejs/versatile
diff -Naur u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Root u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Root
--- u-boot-2009.03_orig/cpu/arm926ejs/versatile/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm926ejs/versatile/CVS/Root 2009-03-25 15:25:13.274983300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm946es/CVS/Entries u-boot-2009.03/cpu/arm946es/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm946es/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm946es/CVS/Entries 2009-03-25 15:57:52.856191900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm946es/CVS/Entries.Extra u-boot-2009.03/cpu/arm946es/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm946es/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm946es/CVS/Entries.Extra 2009-03-25 15:57:52.856191900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm946es/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm946es/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm946es/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm946es/CVS/Entries.Extra.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm946es/CVS/Entries.Old u-boot-2009.03/cpu/arm946es/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm946es/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm946es/CVS/Entries.Old 2009-03-25 15:25:13.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm946es/CVS/Repository u-boot-2009.03/cpu/arm946es/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm946es/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm946es/CVS/Repository 2009-03-25 15:25:13.712480500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm946es
diff -Naur u-boot-2009.03_orig/cpu/arm946es/CVS/Root u-boot-2009.03/cpu/arm946es/CVS/Root
--- u-boot-2009.03_orig/cpu/arm946es/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm946es/CVS/Root 2009-03-25 15:25:13.712480500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries 2009-03-25 15:57:53.012440900 -0700
@@ -0,0 +1,5 @@
+D/omap3////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries.Extra u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries.Extra 2009-03-25 15:57:53.012440900 -0700
@@ -0,0 +1,5 @@
+D/omap3////
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries.Extra.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/start.S///1238019719/
+D/omap3////
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries.Old u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/CVS/Entries.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D/omap3////
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Repository u-boot-2009.03/cpu/arm_cortexa8/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/CVS/Repository 2009-03-25 15:25:13.853104600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm_cortexa8
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Root u-boot-2009.03/cpu/arm_cortexa8/CVS/Root
--- u-boot-2009.03_orig/cpu/arm_cortexa8/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/CVS/Root 2009-03-25 15:25:13.837479700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries 2009-03-25 15:57:52.965566200 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clock.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lowlevel_init.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys_info.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/syslib.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries.Extra u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries.Extra 2009-03-25 15:57:52.965566200 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019719/
+/board.c///1238019719/
+/clock.c///1238019719/
+/config.mk///1238019719/
+/interrupts.c///1238019719/
+/lowlevel_init.S///1238019719/
+/mem.c///1238019719/
+/sys_info.c///1238019719/
+/syslib.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries.Extra.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019719/
+/board.c///1238019719/
+/clock.c///1238019719/
+/config.mk///1238019719/
+/interrupts.c///1238019719/
+/lowlevel_init.S///1238019719/
+/mem.c///1238019719/
+/sys_info.c///1238019719/
+/syslib.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries.Old u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Entries.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/clock.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/lowlevel_init.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/mem.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/sys_info.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/syslib.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Repository u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Repository 2009-03-25 15:25:13.899979300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm_cortexa8/omap3
diff -Naur u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Root u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Root
--- u-boot-2009.03_orig/cpu/arm_cortexa8/omap3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_cortexa8/omap3/CVS/Root 2009-03-25 15:25:13.899979300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries u-boot-2009.03/cpu/arm_intcm/CVS/Entries
--- u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_intcm/CVS/Entries 2009-03-25 15:57:53.090565400 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries.Extra u-boot-2009.03/cpu/arm_intcm/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_intcm/CVS/Entries.Extra 2009-03-25 15:57:53.090565400 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries.Extra.Old u-boot-2009.03/cpu/arm_intcm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_intcm/CVS/Entries.Extra.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries.Old u-boot-2009.03/cpu/arm_intcm/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/arm_intcm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_intcm/CVS/Entries.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/arm_intcm/CVS/Repository u-boot-2009.03/cpu/arm_intcm/CVS/Repository
--- u-boot-2009.03_orig/cpu/arm_intcm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_intcm/CVS/Repository 2009-03-25 15:25:14.118727900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/arm_intcm
diff -Naur u-boot-2009.03_orig/cpu/arm_intcm/CVS/Root u-boot-2009.03/cpu/arm_intcm/CVS/Root
--- u-boot-2009.03_orig/cpu/arm_intcm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/arm_intcm/CVS/Root 2009-03-25 15:25:14.103103000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/at32ap/CVS/Entries u-boot-2009.03/cpu/at32ap/CVS/Entries
--- u-boot-2009.03_orig/cpu/at32ap/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/CVS/Entries 2009-03-25 15:57:53.262439300 -0700
@@ -0,0 +1,13 @@
+D/at32ap700x////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exception.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hsdramc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hsdramc1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hsmc3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pio2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/at32ap/CVS/Entries.Extra u-boot-2009.03/cpu/at32ap/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/at32ap/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/CVS/Entries.Extra 2009-03-25 15:57:53.262439300 -0700
@@ -0,0 +1,13 @@
+D/at32ap700x////
+/Makefile///1238019719/
+/cache.c///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/exception.c///1238019719/
+/hsdramc.c///1238019719/
+/hsdramc1.h///1238019719/
+/hsmc3.h///1238019719/
+/interrupts.c///1238019719/
+/pio.c///1238019719/
+/pio2.h///1238019719/
+/start.S///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/at32ap/CVS/Entries.Extra.Old u-boot-2009.03/cpu/at32ap/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/at32ap/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/CVS/Entries.Extra.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019719/
+/cache.c///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/exception.c///1238019719/
+/hsdramc.c///1238019719/
+/hsdramc1.h///1238019719/
+/hsmc3.h///1238019719/
+/interrupts.c///1238019719/
+/pio.c///1238019719/
+/pio2.h///1238019719/
+/start.S///1238019719/
+D/at32ap700x////
diff -Naur u-boot-2009.03_orig/cpu/at32ap/CVS/Entries.Old u-boot-2009.03/cpu/at32ap/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/at32ap/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/CVS/Entries.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/exception.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/hsdramc.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/hsdramc1.h/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/hsmc3.h/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/pio.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/pio2.h/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D/at32ap700x////
diff -Naur u-boot-2009.03_orig/cpu/at32ap/CVS/Repository u-boot-2009.03/cpu/at32ap/CVS/Repository
--- u-boot-2009.03_orig/cpu/at32ap/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/CVS/Repository 2009-03-25 15:25:14.212477300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/at32ap
diff -Naur u-boot-2009.03_orig/cpu/at32ap/CVS/Root u-boot-2009.03/cpu/at32ap/CVS/Root
--- u-boot-2009.03_orig/cpu/at32ap/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/CVS/Root 2009-03-25 15:25:14.212477300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries
--- u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries 2009-03-25 15:57:53.199939700 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gpio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries.Extra u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries.Extra 2009-03-25 15:57:53.199939700 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019719/
+/clk.c///1238019719/
+/gpio.c///1238019719/
+/sm.h///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries.Extra.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019719/
+/clk.c///1238019719/
+/gpio.c///1238019719/
+/sm.h///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries.Old u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Entries.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/clk.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/gpio.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/sm.h/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Repository u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Repository
--- u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Repository 2009-03-25 15:25:14.353101400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/at32ap/at32ap700x
diff -Naur u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Root u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Root
--- u-boot-2009.03_orig/cpu/at32ap/at32ap700x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/at32ap/at32ap700x/CVS/Root 2009-03-25 15:25:14.337476500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/blackfin/CVS/Entries u-boot-2009.03/cpu/blackfin/CVS/Entries
--- u-boot-2009.03_orig/cpu/blackfin/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/blackfin/CVS/Entries 2009-03-25 15:57:53.387438500 -0700
@@ -0,0 +1,19 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootrom-asm-offsets.awk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootrom-asm-offsets.c.in/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/initcode.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupt.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jtag-console.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reset.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system_map.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/blackfin/CVS/Entries.Extra u-boot-2009.03/cpu/blackfin/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/blackfin/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/blackfin/CVS/Entries.Extra 2009-03-25 15:57:53.387438500 -0700
@@ -0,0 +1,18 @@
+/.gitignore///1238019719/
+/Makefile///1238019719/
+/bootrom-asm-offsets.awk///1238019719/
+/bootrom-asm-offsets.c.in///1238019719/
+/cache.S///1238019719/
+/cpu.c///1238019719/
+/cpu.h///1238019719/
+/initcode.c///1238019719/
+/interrupt.S///1238019719/
+/interrupts.c///1238019719/
+/jtag-console.c///1238019719/
+/reset.c///1238019719/
+/serial.c///1238019719/
+/serial.h///1238019719/
+/start.S///1238019719/
+/system_map.S///1238019719/
+/traps.c///1238019719/
+/watchdog.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/blackfin/CVS/Entries.Extra.Old u-boot-2009.03/cpu/blackfin/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/blackfin/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/blackfin/CVS/Entries.Extra.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,18 @@
+/.gitignore///1238019719/
+/Makefile///1238019719/
+/bootrom-asm-offsets.awk///1238019719/
+/bootrom-asm-offsets.c.in///1238019719/
+/cache.S///1238019719/
+/cpu.c///1238019719/
+/cpu.h///1238019719/
+/initcode.c///1238019719/
+/interrupt.S///1238019719/
+/interrupts.c///1238019719/
+/jtag-console.c///1238019719/
+/reset.c///1238019719/
+/serial.c///1238019719/
+/serial.h///1238019719/
+/start.S///1238019719/
+/system_map.S///1238019719/
+/traps.c///1238019719/
+/watchdog.c///1238019719/
diff -Naur u-boot-2009.03_orig/cpu/blackfin/CVS/Entries.Old u-boot-2009.03/cpu/blackfin/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/blackfin/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/blackfin/CVS/Entries.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,19 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/bootrom-asm-offsets.awk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/bootrom-asm-offsets.c.in/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cache.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.h/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/initcode.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupt.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/jtag-console.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/reset.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/serial.h/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/system_map.S/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/blackfin/CVS/Repository u-boot-2009.03/cpu/blackfin/CVS/Repository
--- u-boot-2009.03_orig/cpu/blackfin/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/blackfin/CVS/Repository 2009-03-25 15:25:14.618724700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/blackfin
diff -Naur u-boot-2009.03_orig/cpu/blackfin/CVS/Root u-boot-2009.03/cpu/blackfin/CVS/Root
--- u-boot-2009.03_orig/cpu/blackfin/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/blackfin/CVS/Root 2009-03-25 15:25:14.618724700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/i386/CVS/Entries u-boot-2009.03/cpu/i386/CVS/Entries
--- u-boot-2009.03_orig/cpu/i386/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/CVS/Entries 2009-03-25 15:57:53.559312400 -0700
@@ -0,0 +1,10 @@
+D/sc520////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/resetvec.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start16.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/i386/CVS/Entries.Extra u-boot-2009.03/cpu/i386/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/i386/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/CVS/Entries.Extra 2009-03-25 15:57:53.574937300 -0700
@@ -0,0 +1,10 @@
+D/sc520////
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/resetvec.S///1238019720/
+/serial.c///1238019720/
+/start.S///1238019720/
+/start16.S///1238019720/
+/timer.c///1238019720/
diff -Naur u-boot-2009.03_orig/cpu/i386/CVS/Entries.Extra.Old u-boot-2009.03/cpu/i386/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/i386/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/CVS/Entries.Extra.Old 2009-03-25 15:25:15.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019719/
+/config.mk///1238019719/
+/cpu.c///1238019719/
+/interrupts.c///1238019719/
+/resetvec.S///1238019720/
+/serial.c///1238019720/
+/start.S///1238019720/
+/start16.S///1238019720/
+/timer.c///1238019720/
+D/sc520////
diff -Naur u-boot-2009.03_orig/cpu/i386/CVS/Entries.Old u-boot-2009.03/cpu/i386/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/i386/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/CVS/Entries.Old 2009-03-25 15:25:15.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:21:59 2009//
+/resetvec.S/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/start16.S/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+D/sc520////
diff -Naur u-boot-2009.03_orig/cpu/i386/CVS/Repository u-boot-2009.03/cpu/i386/CVS/Repository
--- u-boot-2009.03_orig/cpu/i386/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/CVS/Repository 2009-03-25 15:25:14.853098200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/i386
diff -Naur u-boot-2009.03_orig/cpu/i386/CVS/Root u-boot-2009.03/cpu/i386/CVS/Root
--- u-boot-2009.03_orig/cpu/i386/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/CVS/Root 2009-03-25 15:25:14.853098200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries u-boot-2009.03/cpu/i386/sc520/CVS/Entries
--- u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/sc520/CVS/Entries 2009-03-25 15:57:53.512437700 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_asm.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries.Extra u-boot-2009.03/cpu/i386/sc520/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/sc520/CVS/Entries.Extra 2009-03-25 15:57:53.512437700 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019720/
+/sc520.c///1238019720/
+/sc520_asm.S///1238019720/
diff -Naur u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries.Extra.Old u-boot-2009.03/cpu/i386/sc520/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/sc520/CVS/Entries.Extra.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019720/
+/sc520.c///1238019720/
+/sc520_asm.S///1238019720/
diff -Naur u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries.Old u-boot-2009.03/cpu/i386/sc520/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/i386/sc520/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/sc520/CVS/Entries.Old 2009-03-25 15:25:14.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/sc520.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/sc520_asm.S/1.1.1.1/Wed Mar 25 22:22:00 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/i386/sc520/CVS/Repository u-boot-2009.03/cpu/i386/sc520/CVS/Repository
--- u-boot-2009.03_orig/cpu/i386/sc520/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/sc520/CVS/Repository 2009-03-25 15:25:14.946847600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/i386/sc520
diff -Naur u-boot-2009.03_orig/cpu/i386/sc520/CVS/Root u-boot-2009.03/cpu/i386/sc520/CVS/Root
--- u-boot-2009.03_orig/cpu/i386/sc520/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/i386/sc520/CVS/Root 2009-03-25 15:25:14.946847600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/ixp/CVS/Entries u-boot-2009.03/cpu/ixp/CVS/Entries
--- u-boot-2009.03_orig/cpu/ixp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/CVS/Entries 2009-03-25 15:57:54.918678700 -0700
@@ -0,0 +1,7 @@
+D/npe////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/ixp/CVS/Entries.Extra u-boot-2009.03/cpu/ixp/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/ixp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/CVS/Entries.Extra 2009-03-25 15:57:54.934303600 -0700
@@ -0,0 +1,7 @@
+D/npe////
+/Makefile///1238019720/
+/config.mk///1238019720/
+/cpu.c///1238019720/
+/interrupts.c///1238019720/
+/start.S///1238019720/
+/timer.c///1238019720/
diff -Naur u-boot-2009.03_orig/cpu/ixp/CVS/Entries.Extra.Old u-boot-2009.03/cpu/ixp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/ixp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/CVS/Entries.Extra.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019720/
+/config.mk///1238019720/
+/cpu.c///1238019720/
+/interrupts.c///1238019720/
+/start.S///1238019720/
+/timer.c///1238019720/
+D/npe////
diff -Naur u-boot-2009.03_orig/cpu/ixp/CVS/Entries.Old u-boot-2009.03/cpu/ixp/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/ixp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/CVS/Entries.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+D/npe////
diff -Naur u-boot-2009.03_orig/cpu/ixp/CVS/Repository u-boot-2009.03/cpu/ixp/CVS/Repository
--- u-boot-2009.03_orig/cpu/ixp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/CVS/Repository 2009-03-25 15:25:15.087471700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/ixp
diff -Naur u-boot-2009.03_orig/cpu/ixp/CVS/Root u-boot-2009.03/cpu/ixp/CVS/Root
--- u-boot-2009.03_orig/cpu/ixp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/CVS/Root 2009-03-25 15:25:15.087471700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries u-boot-2009.03/cpu/ixp/npe/CVS/Entries
--- u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/CVS/Entries 2009-03-25 15:57:54.871804000 -0700
@@ -0,0 +1,51 @@
+D/include////
+/IxEthAcc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccCommon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccControlInterface.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccDataPlane.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccMac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccMii.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBAPI.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBAPISupport.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBCore.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBEvents.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBFeatures.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBFirewall.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBHashtable.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBLearning.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBMem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBNPEAdaptor.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBPortUpdate.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBReports.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBSearch.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBSpanningTree.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBUtil.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBVlan.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBWiFi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthMii.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxFeatureCtrl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlImageMgr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgrUtils.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMh.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhConfig.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhReceive.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhSend.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhSolicitedCbMgr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhUnsolicitedCbMgr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBufferMgt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalIoMem.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsCacheMMU.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsMsgQ.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsSemaphore.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsServices.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsThread.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrAqmIf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrDispatcher.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrInit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrQAccess.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrQCfg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/miiphy.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/npe.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries.Extra u-boot-2009.03/cpu/ixp/npe/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/CVS/Entries.Extra 2009-03-25 15:57:54.871804000 -0700
@@ -0,0 +1,51 @@
+D/include////
+/IxEthAcc.c///1238019720/
+/IxEthAccCommon.c///1238019720/
+/IxEthAccControlInterface.c///1238019720/
+/IxEthAccDataPlane.c///1238019720/
+/IxEthAccMac.c///1238019720/
+/IxEthAccMii.c///1238019720/
+/IxEthDBAPI.c///1238019720/
+/IxEthDBAPISupport.c///1238019720/
+/IxEthDBCore.c///1238019720/
+/IxEthDBEvents.c///1238019720/
+/IxEthDBFeatures.c///1238019720/
+/IxEthDBFirewall.c///1238019720/
+/IxEthDBHashtable.c///1238019720/
+/IxEthDBLearning.c///1238019720/
+/IxEthDBMem.c///1238019720/
+/IxEthDBNPEAdaptor.c///1238019720/
+/IxEthDBPortUpdate.c///1238019720/
+/IxEthDBReports.c///1238019720/
+/IxEthDBSearch.c///1238019720/
+/IxEthDBSpanningTree.c///1238019720/
+/IxEthDBUtil.c///1238019720/
+/IxEthDBVlan.c///1238019720/
+/IxEthDBWiFi.c///1238019720/
+/IxEthMii.c///1238019720/
+/IxFeatureCtrl.c///1238019720/
+/IxNpeDl.c///1238019720/
+/IxNpeDlImageMgr.c///1238019720/
+/IxNpeDlNpeMgr.c///1238019720/
+/IxNpeDlNpeMgrUtils.c///1238019720/
+/IxNpeMh.c///1238019720/
+/IxNpeMhConfig.c///1238019720/
+/IxNpeMhReceive.c///1238019720/
+/IxNpeMhSend.c///1238019720/
+/IxNpeMhSolicitedCbMgr.c///1238019720/
+/IxNpeMhUnsolicitedCbMgr.c///1238019720/
+/IxOsalBufferMgt.c///1238019720/
+/IxOsalIoMem.c///1238019720/
+/IxOsalOsCacheMMU.c///1238019720/
+/IxOsalOsMsgQ.c///1238019720/
+/IxOsalOsSemaphore.c///1238019720/
+/IxOsalOsServices.c///1238019720/
+/IxOsalOsThread.c///1238019720/
+/IxQMgrAqmIf.c///1238019720/
+/IxQMgrDispatcher.c///1238019720/
+/IxQMgrInit.c///1238019720/
+/IxQMgrQAccess.c///1238019720/
+/IxQMgrQCfg.c///1238019720/
+/Makefile///1238019720/
+/miiphy.c///1238019720/
+/npe.c///1238019720/
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries.Extra.Old u-boot-2009.03/cpu/ixp/npe/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/CVS/Entries.Extra.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,51 @@
+/IxEthAcc.c///1238019720/
+/IxEthAccCommon.c///1238019720/
+/IxEthAccControlInterface.c///1238019720/
+/IxEthAccDataPlane.c///1238019720/
+/IxEthAccMac.c///1238019720/
+/IxEthAccMii.c///1238019720/
+/IxEthDBAPI.c///1238019720/
+/IxEthDBAPISupport.c///1238019720/
+/IxEthDBCore.c///1238019720/
+/IxEthDBEvents.c///1238019720/
+/IxEthDBFeatures.c///1238019720/
+/IxEthDBFirewall.c///1238019720/
+/IxEthDBHashtable.c///1238019720/
+/IxEthDBLearning.c///1238019720/
+/IxEthDBMem.c///1238019720/
+/IxEthDBNPEAdaptor.c///1238019720/
+/IxEthDBPortUpdate.c///1238019720/
+/IxEthDBReports.c///1238019720/
+/IxEthDBSearch.c///1238019720/
+/IxEthDBSpanningTree.c///1238019720/
+/IxEthDBUtil.c///1238019720/
+/IxEthDBVlan.c///1238019720/
+/IxEthDBWiFi.c///1238019720/
+/IxEthMii.c///1238019720/
+/IxFeatureCtrl.c///1238019720/
+/IxNpeDl.c///1238019720/
+/IxNpeDlImageMgr.c///1238019720/
+/IxNpeDlNpeMgr.c///1238019720/
+/IxNpeDlNpeMgrUtils.c///1238019720/
+/IxNpeMh.c///1238019720/
+/IxNpeMhConfig.c///1238019720/
+/IxNpeMhReceive.c///1238019720/
+/IxNpeMhSend.c///1238019720/
+/IxNpeMhSolicitedCbMgr.c///1238019720/
+/IxNpeMhUnsolicitedCbMgr.c///1238019720/
+/IxOsalBufferMgt.c///1238019720/
+/IxOsalIoMem.c///1238019720/
+/IxOsalOsCacheMMU.c///1238019720/
+/IxOsalOsMsgQ.c///1238019720/
+/IxOsalOsSemaphore.c///1238019720/
+/IxOsalOsServices.c///1238019720/
+/IxOsalOsThread.c///1238019720/
+/IxQMgrAqmIf.c///1238019720/
+/IxQMgrDispatcher.c///1238019720/
+/IxQMgrInit.c///1238019720/
+/IxQMgrQAccess.c///1238019720/
+/IxQMgrQCfg.c///1238019720/
+/Makefile///1238019720/
+/miiphy.c///1238019720/
+/npe.c///1238019720/
+D/include////
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries.Old u-boot-2009.03/cpu/ixp/npe/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/ixp/npe/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/CVS/Entries.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,51 @@
+/IxEthAcc.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthAccCommon.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthAccControlInterface.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthAccDataPlane.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthAccMac.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthAccMii.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBAPI.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBAPISupport.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBCore.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBEvents.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBFeatures.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBFirewall.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBHashtable.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBLearning.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBMem.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBNPEAdaptor.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBPortUpdate.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBReports.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBSearch.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBSpanningTree.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBUtil.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBVlan.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthDBWiFi.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxEthMii.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxFeatureCtrl.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeDl.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeDlImageMgr.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeDlNpeMgr.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeDlNpeMgrUtils.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeMh.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeMhConfig.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeMhReceive.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeMhSend.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeMhSolicitedCbMgr.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxNpeMhUnsolicitedCbMgr.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxOsalBufferMgt.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxOsalIoMem.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxOsalOsCacheMMU.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxOsalOsMsgQ.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxOsalOsSemaphore.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxOsalOsServices.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxOsalOsThread.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxQMgrAqmIf.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxQMgrDispatcher.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxQMgrInit.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxQMgrQAccess.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/IxQMgrQCfg.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/miiphy.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+/npe.c/1.1.1.1/Wed Mar 25 22:22:00 2009//
+D/include////
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/CVS/Repository u-boot-2009.03/cpu/ixp/npe/CVS/Repository
--- u-boot-2009.03_orig/cpu/ixp/npe/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/CVS/Repository 2009-03-25 15:25:15.165596200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/ixp/npe
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/CVS/Root u-boot-2009.03/cpu/ixp/npe/CVS/Root
--- u-boot-2009.03_orig/cpu/ixp/npe/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/CVS/Root 2009-03-25 15:25:15.165596200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries
--- u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries 2009-03-31 14:51:31.958527200 -0700
@@ -0,0 +1,101 @@
+/IxAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmSch.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmdAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmdAccCtrl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxDmaAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccDataPlane_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccMac_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccMii_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccQueueAssign_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAcc_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBLocks_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBLog_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBMessages_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBPortDefs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBQoS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDB_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthMii.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthMii_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthNpe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxFeatureCtrl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxHssAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlImageMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlMacros_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgrEcRegisters_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgrUtils_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMh.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhConfig_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhMacros_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhReceive_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhSend_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhSolicitedCbMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhUnsolicitedCbMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMicrocode.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsBufLib.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsBuffMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsBuffPoolMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsCacheMMU.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsPrintf.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesComponents.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesEndianess.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesMemAccess.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesMemMap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsal.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackward.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardBufferMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardCacheMMU.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardMemMap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardOsServices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardOssl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBufferMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBufferMgtDefault.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalConfig.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalEndianess.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalIoMem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsBufferMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsIxp400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsIxp400CustomizedMapping.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsUtilitySymbols.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalUtilitySymbols.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxParityENAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxPerfProfAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrAqmIf_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrDefines_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrDispatcher_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrLog_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrQAccess_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrQCfg_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQueueAssignments.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxTimeSyncAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxTimerCtrl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxUART.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxVersionId.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_error.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_macros.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_os_type.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_ossl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_symbols.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/npe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/os_datatypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxI2cDrv.h/1.1.1.1/Tue Mar 31 21:51:11 2009//T1.1.1.1
+/IxOsalMemAccess.h/1.1.1.1/Tue Mar 31 21:51:21 2009//T1.1.1.1
+/IxSspAcc.h/1.1.1.1/Tue Mar 31 21:51:31 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries.Extra u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries.Extra 2009-03-31 14:51:31.958527200 -0700
@@ -0,0 +1,100 @@
+/IxAssert.h///1238019720/
+/IxAtmSch.h///1238019720/
+/IxAtmTypes.h///1238019720/
+/IxAtmdAcc.h///1238019720/
+/IxAtmdAccCtrl.h///1238019720/
+/IxAtmm.h///1238019720/
+/IxDmaAcc.h///1238019720/
+/IxEthAcc.h///1238019720/
+/IxEthAccDataPlane_p.h///1238019720/
+/IxEthAccMac_p.h///1238019720/
+/IxEthAccMii_p.h///1238019720/
+/IxEthAccQueueAssign_p.h///1238019720/
+/IxEthAcc_p.h///1238019720/
+/IxEthDB.h///1238019720/
+/IxEthDBLocks_p.h///1238019720/
+/IxEthDBLog_p.h///1238019720/
+/IxEthDBMessages_p.h///1238019720/
+/IxEthDBPortDefs.h///1238019720/
+/IxEthDBQoS.h///1238019720/
+/IxEthDB_p.h///1238019720/
+/IxEthMii.h///1238019720/
+/IxEthMii_p.h///1238019720/
+/IxEthNpe.h///1238019720/
+/IxFeatureCtrl.h///1238019720/
+/IxHssAcc.h///1238019720/
+/IxNpeA.h///1238019720/
+/IxNpeDl.h///1238019720/
+/IxNpeDlImageMgr_p.h///1238019720/
+/IxNpeDlMacros_p.h///1238019720/
+/IxNpeDlNpeMgrEcRegisters_p.h///1238019720/
+/IxNpeDlNpeMgrUtils_p.h///1238019720/
+/IxNpeDlNpeMgr_p.h///1238019720/
+/IxNpeMh.h///1238019720/
+/IxNpeMhConfig_p.h///1238019720/
+/IxNpeMhMacros_p.h///1238019720/
+/IxNpeMhReceive_p.h///1238019720/
+/IxNpeMhSend_p.h///1238019720/
+/IxNpeMhSolicitedCbMgr_p.h///1238019720/
+/IxNpeMhUnsolicitedCbMgr_p.h///1238019720/
+/IxNpeMicrocode.h///1238019720/
+/IxOsBufLib.h///1238019721/
+/IxOsBuffMgt.h///1238019721/
+/IxOsBuffPoolMgt.h///1238019721/
+/IxOsCacheMMU.h///1238019721/
+/IxOsPrintf.h///1238019721/
+/IxOsServices.h///1238019721/
+/IxOsServicesComponents.h///1238019721/
+/IxOsServicesEndianess.h///1238019721/
+/IxOsServicesMemAccess.h///1238019721/
+/IxOsServicesMemMap.h///1238019721/
+/IxOsal.h///1238019720/
+/IxOsalAssert.h///1238019720/
+/IxOsalBackward.h///1238019720/
+/IxOsalBackwardAssert.h///1238019720/
+/IxOsalBackwardBufferMgt.h///1238019720/
+/IxOsalBackwardCacheMMU.h///1238019720/
+/IxOsalBackwardMemMap.h///1238019720/
+/IxOsalBackwardOsServices.h///1238019721/
+/IxOsalBackwardOssl.h///1238019721/
+/IxOsalBufferMgt.h///1238019721/
+/IxOsalBufferMgtDefault.h///1238019721/
+/IxOsalConfig.h///1238019721/
+/IxOsalEndianess.h///1238019721/
+/IxOsalIoMem.h///1238019721/
+/IxOsalOem.h///1238019721/
+/IxOsalOs.h///1238019721/
+/IxOsalOsAssert.h///1238019721/
+/IxOsalOsBufferMgt.h///1238019721/
+/IxOsalOsIxp400.h///1238019721/
+/IxOsalOsIxp400CustomizedMapping.h///1238019721/
+/IxOsalOsTypes.h///1238019721/
+/IxOsalOsUtilitySymbols.h///1238019721/
+/IxOsalTypes.h///1238019721/
+/IxOsalUtilitySymbols.h///1238019721/
+/IxParityENAcc.h///1238019721/
+/IxPerfProfAcc.h///1238019721/
+/IxQMgr.h///1238019721/
+/IxQMgrAqmIf_p.h///1238019721/
+/IxQMgrDefines_p.h///1238019721/
+/IxQMgrDispatcher_p.h///1238019721/
+/IxQMgrLog_p.h///1238019721/
+/IxQMgrQAccess_p.h///1238019721/
+/IxQMgrQCfg_p.h///1238019721/
+/IxQueueAssignments.h///1238019721/
+/IxTimeSyncAcc.h///1238019721/
+/IxTimerCtrl.h///1238019721/
+/IxTypes.h///1238019721/
+/IxUART.h///1238019721/
+/IxVersionId.h///1238019721/
+/ix_error.h///1238019721/
+/ix_macros.h///1238019721/
+/ix_os_type.h///1238019721/
+/ix_ossl.h///1238019721/
+/ix_symbols.h///1238019721/
+/ix_types.h///1238019721/
+/npe.h///1238019721/
+/os_datatypes.h///1238019721/
+/IxI2cDrv.h///1238019720/
+/IxOsalMemAccess.h///1238019721/
+/IxSspAcc.h///1238019721/
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries.Extra.Old u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries.Extra.Old 2009-03-31 14:51:21.000000000 -0700
@@ -0,0 +1,100 @@
+/IxAssert.h///1238019720/
+/IxAtmSch.h///1238019720/
+/IxAtmTypes.h///1238019720/
+/IxAtmdAcc.h///1238019720/
+/IxAtmdAccCtrl.h///1238019720/
+/IxAtmm.h///1238019720/
+/IxDmaAcc.h///1238019720/
+/IxEthAcc.h///1238019720/
+/IxEthAccDataPlane_p.h///1238019720/
+/IxEthAccMac_p.h///1238019720/
+/IxEthAccMii_p.h///1238019720/
+/IxEthAccQueueAssign_p.h///1238019720/
+/IxEthAcc_p.h///1238019720/
+/IxEthDB.h///1238019720/
+/IxEthDBLocks_p.h///1238019720/
+/IxEthDBLog_p.h///1238019720/
+/IxEthDBMessages_p.h///1238019720/
+/IxEthDBPortDefs.h///1238019720/
+/IxEthDBQoS.h///1238019720/
+/IxEthDB_p.h///1238019720/
+/IxEthMii.h///1238019720/
+/IxEthMii_p.h///1238019720/
+/IxEthNpe.h///1238019720/
+/IxFeatureCtrl.h///1238019720/
+/IxHssAcc.h///1238019720/
+/IxNpeA.h///1238019720/
+/IxNpeDl.h///1238019720/
+/IxNpeDlImageMgr_p.h///1238019720/
+/IxNpeDlMacros_p.h///1238019720/
+/IxNpeDlNpeMgrEcRegisters_p.h///1238019720/
+/IxNpeDlNpeMgrUtils_p.h///1238019720/
+/IxNpeDlNpeMgr_p.h///1238019720/
+/IxNpeMh.h///1238019720/
+/IxNpeMhConfig_p.h///1238019720/
+/IxNpeMhMacros_p.h///1238019720/
+/IxNpeMhReceive_p.h///1238019720/
+/IxNpeMhSend_p.h///1238019720/
+/IxNpeMhSolicitedCbMgr_p.h///1238019720/
+/IxNpeMhUnsolicitedCbMgr_p.h///1238019720/
+/IxNpeMicrocode.h///1238019720/
+/IxOsBufLib.h///1238019721/
+/IxOsBuffMgt.h///1238019721/
+/IxOsBuffPoolMgt.h///1238019721/
+/IxOsCacheMMU.h///1238019721/
+/IxOsPrintf.h///1238019721/
+/IxOsServices.h///1238019721/
+/IxOsServicesComponents.h///1238019721/
+/IxOsServicesEndianess.h///1238019721/
+/IxOsServicesMemAccess.h///1238019721/
+/IxOsServicesMemMap.h///1238019721/
+/IxOsal.h///1238019720/
+/IxOsalAssert.h///1238019720/
+/IxOsalBackward.h///1238019720/
+/IxOsalBackwardAssert.h///1238019720/
+/IxOsalBackwardBufferMgt.h///1238019720/
+/IxOsalBackwardCacheMMU.h///1238019720/
+/IxOsalBackwardMemMap.h///1238019720/
+/IxOsalBackwardOsServices.h///1238019721/
+/IxOsalBackwardOssl.h///1238019721/
+/IxOsalBufferMgt.h///1238019721/
+/IxOsalBufferMgtDefault.h///1238019721/
+/IxOsalConfig.h///1238019721/
+/IxOsalEndianess.h///1238019721/
+/IxOsalIoMem.h///1238019721/
+/IxOsalOem.h///1238019721/
+/IxOsalOs.h///1238019721/
+/IxOsalOsAssert.h///1238019721/
+/IxOsalOsBufferMgt.h///1238019721/
+/IxOsalOsIxp400.h///1238019721/
+/IxOsalOsIxp400CustomizedMapping.h///1238019721/
+/IxOsalOsTypes.h///1238019721/
+/IxOsalOsUtilitySymbols.h///1238019721/
+/IxOsalTypes.h///1238019721/
+/IxOsalUtilitySymbols.h///1238019721/
+/IxParityENAcc.h///1238019721/
+/IxPerfProfAcc.h///1238019721/
+/IxQMgr.h///1238019721/
+/IxQMgrAqmIf_p.h///1238019721/
+/IxQMgrDefines_p.h///1238019721/
+/IxQMgrDispatcher_p.h///1238019721/
+/IxQMgrLog_p.h///1238019721/
+/IxQMgrQAccess_p.h///1238019721/
+/IxQMgrQCfg_p.h///1238019721/
+/IxQueueAssignments.h///1238019721/
+/IxTimeSyncAcc.h///1238019721/
+/IxTimerCtrl.h///1238019721/
+/IxTypes.h///1238019721/
+/IxUART.h///1238019721/
+/IxVersionId.h///1238019721/
+/ix_error.h///1238019721/
+/ix_macros.h///1238019721/
+/ix_os_type.h///1238019721/
+/ix_ossl.h///1238019721/
+/ix_symbols.h///1238019721/
+/ix_types.h///1238019721/
+/npe.h///1238019721/
+/os_datatypes.h///1238019721/
+/IxSspAcc.h///1238028702/
+/IxI2cDrv.h///1238019720/
+/IxOsalMemAccess.h///1238019721/
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries.Old u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/include/CVS/Entries.Old 2009-03-31 14:51:21.000000000 -0700
@@ -0,0 +1,101 @@
+/IxAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmSch.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmdAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmdAccCtrl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxAtmm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxDmaAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccDataPlane_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccMac_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccMii_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAccQueueAssign_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthAcc_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBLocks_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBLog_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBMessages_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBPortDefs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDBQoS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthDB_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthMii.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthMii_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxEthNpe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxFeatureCtrl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxHssAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlImageMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlMacros_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgrEcRegisters_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgrUtils_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeDlNpeMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMh.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhConfig_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhMacros_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhReceive_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhSend_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhSolicitedCbMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMhUnsolicitedCbMgr_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxNpeMicrocode.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsBufLib.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsBuffMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsBuffPoolMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsCacheMMU.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsPrintf.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesComponents.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesEndianess.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesMemAccess.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsServicesMemMap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsal.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackward.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardBufferMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardCacheMMU.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardMemMap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardOsServices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBackwardOssl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBufferMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalBufferMgtDefault.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalConfig.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalEndianess.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalIoMem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsAssert.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsBufferMgt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsIxp400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsIxp400CustomizedMapping.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalOsUtilitySymbols.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxOsalUtilitySymbols.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxParityENAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxPerfProfAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrAqmIf_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrDefines_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrDispatcher_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrLog_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrQAccess_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQMgrQCfg_p.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxQueueAssignments.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxTimeSyncAcc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxTimerCtrl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxUART.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxVersionId.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_error.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_macros.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_os_type.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_ossl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_symbols.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/npe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/os_datatypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IxSspAcc.h/1.2/Thu Mar 26 00:51:42 2009//
+/IxI2cDrv.h/1.1.1.1/Tue Mar 31 21:51:11 2009//T1.1.1.1
+/IxOsalMemAccess.h/1.1.1.1/Tue Mar 31 21:51:21 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Repository u-boot-2009.03/cpu/ixp/npe/include/CVS/Repository
--- u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/include/CVS/Repository 2009-03-25 15:25:15.837466900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/ixp/npe/include
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Root u-boot-2009.03/cpu/ixp/npe/include/CVS/Root
--- u-boot-2009.03_orig/cpu/ixp/npe/include/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ixp/npe/include/CVS/Root 2009-03-25 15:25:15.837466900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/IxI2cDrv.h u-boot-2009.03/cpu/ixp/npe/include/IxI2cDrv.h
--- u-boot-2009.03_orig/cpu/ixp/npe/include/IxI2cDrv.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/cpu/ixp/npe/include/IxI2cDrv.h 2009-03-31 14:51:11.099419200 -0700
@@ -1,867 +1,867 @@
-/**
- * @file IxI2cDrv.h
- *
- * @brief Header file for the IXP400 I2C Driver (IxI2cDrv)
- *
- * @version $Revision: 0.1 $
- *
- * @par
- * IXP400 SW Release version 2.0
- *
- * -- Copyright Notice --
- *
- * @par
- * Copyright 2001-2005, Intel Corporation.
- * All rights reserved.
- *
- * @par
- * 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 Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
- *
- * @par
- * -- End of Copyright Notice --
- */
-
-/**
- * @defgroup IxI2cDrv IXP400 I2C Driver(IxI2cDrv) API
- *
- * @brief IXP400 I2C Driver Public API
- *
- * @{
- */
-#ifndef IXI2CDRV_H
-#define IXI2CDRV_H
-
-#ifdef __ixp46X
-#include "IxOsal.h"
-
-/*
- * Section for #define
- */
-
-/**
- * @ingroup IxI2cDrv
- * @brief The interval of micro/mili seconds the IXP will wait before it polls for
- * status from the ixI2cIntrXferStatus; Every 20us is 1 byte @
- * 400Kbps and 4 bytes @ 100Kbps. This is dependent on delay type selected
- * through the API ixI2cDrvDelayTypeSelect.
- */
-#define IX_I2C_US_POLL_FOR_XFER_STATUS 20
-
-/**
- * @ingroup IxI2cDrv
- * @brief The number of tries that will be attempted to call a callback
- * function if the callback does not or is unable to resolve the
- * issue it is called to resolve
- */
-#define IX_I2C_NUM_OF_TRIES_TO_CALL_CALLBACK_FUNC 10
-
-
-/**
- * @ingroup IxI2cDrv
- * @brief Number of tries slave will poll the IDBR Rx full bit before it
- * gives up
- */
-#define IX_I2C_NUM_TO_POLL_IDBR_RX_FULL 0x100
-
-/**
- * @ingroup IxI2cDrv
- * @brief Number of tries slave will poll the IDBR Tx empty bit before it
- * gives up
- */
-#define IX_I2C_NUM_TO_POLL_IDBR_TX_EMPTY 0x100
-
-/*
- * Section for enum
- */
-
-/**
- * @ingroup IxI2cDrv
- *
- * @enum IxI2cMasterStatus
- *
- * @brief The master status - transfer complete, bus error or arbitration loss
- */
-typedef enum
-{
- IX_I2C_MASTER_XFER_COMPLETE = IX_SUCCESS,
- IX_I2C_MASTER_XFER_BUS_ERROR,
- IX_I2C_MASTER_XFER_ARB_LOSS
-} IxI2cMasterStatus;
-
-
-/**
- * @ingroup IxI2cDrv
- *
- * @enum IX_I2C_STATUS
- *
- * @brief The status that can be returned in a I2C driver initialization
- */
-typedef enum
-{
- IX_I2C_SUCCESS = IX_SUCCESS, /**< Success status */
- IX_I2C_FAIL, /**< Fail status */
- IX_I2C_NOT_SUPPORTED, /**< hardware does not have dedicated I2C hardware */
- IX_I2C_NULL_POINTER, /**< parameter passed in is NULL */
- IX_I2C_INVALID_SPEED_MODE_ENUM_VALUE, /**< speed mode selected is invalid */
- IX_I2C_INVALID_FLOW_MODE_ENUM_VALUE, /**< flow mode selected is invalid */
- IX_I2C_SLAVE_ADDR_CB_MISSING, /**< slave callback is NULL */
- IX_I2C_GEN_CALL_CB_MISSING, /**< general callback is NULL */
- IX_I2C_INVALID_SLAVE_ADDR, /**< invalid slave address specified */
- IX_I2C_INT_BIND_FAIL, /**< interrupt bind fail */
- IX_I2C_INT_UNBIND_FAIL, /**< interrupt unbind fail */
- IX_I2C_NOT_INIT, /**< I2C is not initialized yet */
- IX_I2C_MASTER_BUS_BUSY, /**< master detected a I2C bus busy */
- IX_I2C_MASTER_ARB_LOSS, /**< master experienced arbitration loss */
- IX_I2C_MASTER_XFER_ERROR, /**< master experienced a transfer error */
- IX_I2C_MASTER_BUS_ERROR, /**< master detected a I2C bus error */
- IX_I2C_MASTER_NO_BUFFER, /**< no buffer provided for master transfer */
- IX_I2C_MASTER_INVALID_XFER_MODE, /**< xfer mode selected is invalid */
- IX_I2C_SLAVE_ADDR_NOT_DETECTED, /**< polled slave addr not detected */
- IX_I2C_GEN_CALL_ADDR_DETECTED, /**< polling detected general call */
- IX_I2C_SLAVE_READ_DETECTED, /**< polling detected slave read request */
- IX_I2C_SLAVE_WRITE_DETECTED, /**< polling detected slave write request */
- IX_I2C_SLAVE_NO_BUFFER, /**< no buffer provided for slave transfers */
- IX_I2C_DATA_SIZE_ZERO, /**< data size transfer is zero - invalid */
- IX_I2C_SLAVE_WRITE_BUFFER_EMPTY, /**< slave buffer is used till empty */
- IX_I2C_SLAVE_WRITE_ERROR, /**< slave write experienced an error */
- IX_I2C_SLAVE_OR_GEN_READ_BUFFER_FULL, /**< slave buffer is filled up */
- IX_I2C_SLAVE_OR_GEN_READ_ERROR /**< slave read experienced an error */
-} IX_I2C_STATUS;
-
-/**
- * @ingroup IxI2cDrv
- *
- * @enum IxI2cSpeedMode
- *
- * @brief Type of speed modes supported by the I2C hardware.
- */
-typedef enum
-{
- IX_I2C_NORMAL_MODE = 0x0,
- IX_I2C_FAST_MODE
-} IxI2cSpeedMode;
-
-/**
- * @ingroup IxI2cDrv
- *
- * @enum IxI2cXferMode
- *
- * @brief Used for indicating it is a repeated start or normal transfer
- */
-typedef enum
-{
- IX_I2C_NORMAL = 0x0,
- IX_I2C_REPEATED_START
-} IxI2cXferMode;
-
-/**
- * @ingroup IxI2cDrv
- *
- * @enum IxI2cFlowMode
- *
- * @brief Used for indicating it is a poll or interrupt mode
- */
-typedef enum
-{
- IX_I2C_POLL_MODE = 0x0,
- IX_I2C_INTERRUPT_MODE
-} IxI2cFlowMode;
-
-/**
- * @ingroup IxI2cDrv
- *
- * @enum IxI2cDelayMode
- *
- * @brief Used for selecting looping delay or OS scheduler delay
- */
-typedef enum
-{
- IX_I2C_LOOP_DELAY = 1, /**< delay in microseconds */
- IX_I2C_SCHED_DELAY /**< delay in miliseconds */
-} IxI2cDelayMode;
-
-/**
- * @ingroup IxI2cDrv
- *
- * @brief The pointer to the function that will be called when the master
- * has completed its receive. The parameter that is passed will
- * provide the status of the read (success, arb loss, or bus
- * error), the transfer mode (normal or repeated start, the
- * buffer pointer and number of bytes transferred.
- */
-typedef void (*IxI2cMasterReadCallbackP)(IxI2cMasterStatus, IxI2cXferMode, char*, UINT32);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @brief The pointer to the function that will be called when the master
- * has completed its transmit. The parameter that is passed will
- * provide the status of the write (success, arb loss, or buss
- * error), the transfer mode (normal or repeated start), the
- * buffer pointer and number of bytes transferred.
- */
-typedef void (*IxI2cMasterWriteCallbackP)(IxI2cMasterStatus, IxI2cXferMode, char*, UINT32);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @brief The pointer to the function that will be called when a slave
- * address detected in interrupt mode for a read. The parameters
- * that is passed will provide the read status, buffer pointer,
- * buffer size, and the bytes received. When a start of a read
- * is initiated there will be no buffer allocated and this callback
- * will be called to request for a buffer. While receiving, if the
- * buffer gets filled, this callback will be called to request for
- * a new buffer while sending the filled buffer's pointer and size,
- * and data size received. When the receive is complete, this
- * callback will be called to process the data and free the memory
- * by passing the buffer's pointer and size, and data size received.
- */
-typedef void (*IxI2cSlaveReadCallbackP)(IX_I2C_STATUS, char*, UINT32, UINT32);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @brief The pointer to the function that will be called when a slave
- * address detected in interrupt mode for a write. The parameters
- * that is passed will provide the write status, buffer pointer,
- * buffer size, and the bytes received. When a start of a write is
- * initiated there will be no buffer allocated and this callback
- * will be called to request for a buffer and to fill it with data.
- * While transmitting, if the data in the buffer empties, this
- * callback will be called to request for more data to be filled in
- * the same or new buffer. When the transmit is complete, this
- * callback will be called to free the memory or other actions to
- * be taken.
- */
-typedef void (*IxI2cSlaveWriteCallbackP)(IX_I2C_STATUS, char*, UINT32, UINT32);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @brief The pointer to the function that will be called when a general
- * call detected in interrupt mode for a read. The parameters that
- * is passed will provide the read status, buffer pointer, buffer
- * size, and the bytes received. When a start of a read is
- * initiated there will be no buffer allocated and this callback
- * will be called to request for a buffer. While receiving, if the
- * buffer gets filled, this callback will be called to request for
- * a new buffer while sending the filled buffer's pointer and size,
- * and data size received. When the receive is complete, this
- * callback will be called to process the data and free the memory
- * by passing the buffer's pointer and size, and data size received.
- */
-typedef void (*IxI2cGenCallCallbackP)(IX_I2C_STATUS, char*, UINT32, UINT32);
-
-/*
- * Section for struct
- */
-
-/**
- * @brief contains all the variables required to initialize the I2C unit
- *
- * Structure to be filled and used for calling initialization
- */
-typedef struct
-{
- IxI2cSpeedMode I2cSpeedSelect; /**<Select either normal (100kbps)
- or fast mode (400kbps)*/
- IxI2cFlowMode I2cFlowSelect; /**<Select interrupt or poll mode*/
- IxI2cMasterReadCallbackP MasterReadCBP;
- /**<The master read callback pointer */
- IxI2cMasterWriteCallbackP MasterWriteCBP;
- /**<The master write callback pointer */
- IxI2cSlaveReadCallbackP SlaveReadCBP;
- /**<The slave read callback pointer */
- IxI2cSlaveWriteCallbackP SlaveWriteCBP;
- /**<The slave write callback pointer */
- IxI2cGenCallCallbackP GenCallCBP;
- /**<The general call callback pointer */
- BOOL I2cGenCallResponseEnable; /**<Enable/disable the unit to
- respond to generall calls.*/
- BOOL I2cSlaveAddrResponseEnable;/**<Enable/disable the unit to
- respond to the slave address set in
- ISAR*/
- BOOL SCLEnable; /**<Enable/disable the unit from
- driving the SCL line during master
- mode operation*/
- UINT8 I2cHWAddr; /**<The address the unit will
- response to as a slave device*/
-} IxI2cInitVars;
-
-/**
- * @brief contains results of counters and their overflow
- *
- * Structure contains all values of counters and associated overflows.
- */
-typedef struct
-{
- UINT32 ixI2cMasterXmitCounter; /**<Total bytes transmitted as
- master.*/
- UINT32 ixI2cMasterFailedXmitCounter; /**<Total bytes failed for
- transmission as master.*/
- UINT32 ixI2cMasterRcvCounter; /**<Total bytes received as
- master.*/
- UINT32 ixI2cMasterFailedRcvCounter; /**<Total bytes failed for
- receival as master.*/
- UINT32 ixI2cSlaveXmitCounter; /**<Total bytes transmitted as
- slave.*/
- UINT32 ixI2cSlaveFailedXmitCounter; /**<Total bytes failed for
- transmission as slave.*/
- UINT32 ixI2cSlaveRcvCounter; /**<Total bytes received as
- slave.*/
- UINT32 ixI2cSlaveFailedRcvCounter; /**<Total bytes failed for
- receival as slave.*/
- UINT32 ixI2cGenAddrCallSucceedCounter; /**<Total bytes successfully
- transmitted for general address.*/
- UINT32 ixI2cGenAddrCallFailedCounter; /**<Total bytes failed transmission
- for general address.*/
- UINT32 ixI2cArbLossCounter; /**<Total instances of arbitration
- loss has occured.*/
-} IxI2cStatsCounters;
-
-
-/*
- * Section for prototypes interface functions
- */
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvInit(
- IxI2cInitVars *InitVarsSelected)
- *
- * @brief Initializes the I2C Driver.
- *
- * @param "IxI2cInitVars [in] *InitVarsSelected" - struct containing required
- * variables for initialization
- *
- * Global Data :
- * - None.
- *
- * This API will check if the hardware supports this I2C driver and the validity
- * of the parameters passed in. It will continue to process the parameters
- * passed in by setting the speed of the I2C unit (100kbps or 400kbps), setting
- * the flow to either interrupt or poll mode, setting the address of the I2C unit,
- * enabling/disabling the respond to General Calls, enabling/disabling the respond
- * to Slave Address and SCL line driving. If it is interrupt mode, then it will
- * register the callback routines for master, slavetransfer and general call receive.
- *
- * @return
- * - IX_I2C_SUCCESS - Successfully initialize and enable the I2C
- * hardware.
- * - IX_I2C_NOT_SUPPORTED - The hardware does not support or have a
- * dedicated I2C unit to support this driver
- * - IX_I2C_NULL_POINTER - The parameter passed in is a NULL pointed
- * - IX_I2C_INVALID_SPEED_MODE_ENUM_VALUE - The speed mode selected in the
- * InitVarsSelected is invalid
- * - IX_I2C_INVALID_FLOW_MODE_ENUM_VALUE - The flow mode selected in the
- * InitVarsSelected is invalid
- * - IX_I2C_INVALID_SLAVE_ADDR - The address 0x0 is reserved for
- * general call.
- * - IX_I2C_SLAVE_ADDR_CB_MISSING - interrupt mode is selected but
- * slave address callback pointer is NULL
- * - IX_I2C_GEN_CALL_CB_MISSING - interrupt mode is selected but
- * general call callback pointer is NULL
- * - IX_I2C_INT_BIND_FAIL - The ISR for the I2C failed to bind
- * - IX_I2C_INT_UNBIND_FAIL - The ISR for the I2C failed to unbind
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvInit(IxI2cInitVars *InitVarsSelected);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvUninit(
- void)
- *
- * @brief Disables the I2C hardware
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will disable the I2C hardware, unbind interrupt, and unmap memory.
- *
- * @return
- * - IX_I2C_SUCCESS - successfully un-initialized I2C
- * - IX_I2C_INT_UNBIND_FAIL - failed to unbind the I2C interrupt
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvUninit(void);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvSlaveAddrSet(
- UINT8 SlaveAddrSet)
- *
- * @brief Sets the I2C Slave Address
- *
- * @param "UINT8 [in] SlaveAddrSet" - Slave Address to be inserted into ISAR
- *
- * Global Data :
- * - None.
- *
- * This API will insert the SlaveAddrSet into the ISAR.
- *
- * @return
- * - IX_I2C_SUCCESS - successfuly set the slave addr
- * - IX_I2C_INVALID_SLAVE_ADDR - invalid slave address (zero) specified
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvSlaveAddrSet(UINT8 SlaveAddrSet);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvBusScan(
- void)
- *
- * @brief scans the I2C bus for slave devices
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will prompt all slave addresses for a reply except its own
- *
- * @return
- * - IX_I2C_SUCCESS - found at least one slave device
- * - IX_I2C_FAIL - Fail to find even one slave device
- * - IX_I2C_BUS_BUSY - The I2C bus is busy (held by another I2C master)
- * - IX_I2C_ARB_LOSS - The I2C bus was loss to another I2C master
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvBusScan(void);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvWriteTransfer(
- UINT8 SlaveAddr,
- char *bufP,
- UINT32 dataSize,
- IxI2cXferMode XferModeSelect)
- *
- * @param "UINT8 [in] SlaveAddr" - The slave address to request data from.
- * @param "char [in] *bufP" - The pointer to the data to be transmitted.
- * @param "UINT32 [in] dataSize" - The number of bytes requested.
- * @param "IxI2cXferMode [in] XferModeSelect" - the transfer mode selected,
- * either repeated start (ends w/o stop) or normal (start and stop)
- *
- * Global Data :
- * - None.
- *
- * This API will try to obtain master control of the I2C bus and transmit the
- * number of bytes, specified by dataSize, to the user specified slave
- * address from the buffer pointer. It will use either interrupt or poll mode
- * depending on the method selected.
- *
- * If in interrupt mode and IxI2cMasterWriteCallbackP is not NULL, the driver
- * will initiate the transfer and return immediately. The function pointed to
- * by IxI2cMasterWriteCallbackP will be called in the interrupt service
- * handlers when the operation is complete.
- *
- * If in interrupt mode and IxI2cMasterWriteCallbackP is NULL, then the driver
- * will wait for the operation to complete, and then return.
- *
- * And if the repeated start transfer mode is selected, then it will not send a
- * stop signal at the end of all the transfers.
- * *NOTE*: If repeated start transfer mode is selected, it has to end with a
- * normal mode transfer mode else the bus will continue to be held
- * by the IXP.
- *
- * @return
- * - IX_I2C_SUCCESS - Successfuuly wrote data to slave.
- * - IX_I2C_MASTER_BUS_BUSY - The I2C bus is busy (held by another I2C master)
- * - IX_I2C_MASTER_ARB_LOSS - The I2C bus was loss to another I2C master
- * - IX_I2C_MASTER_XFER_ERROR - There was a transfer error
- * - IX_I2C_MASTER_BUS_ERROR - There was a bus error during transfer
- * - IX_I2C_MASTER_NO_BUFFER - buffer pointer is NULL
- * - IX_I2C_MASTER_INVALID_XFER_MODE - Xfer mode selected is invalid
- * - IX_I2C_DATA_SIZE_ZERO - dataSize passed in is zero, which is invalid
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : no
- * @li ISR Callable : no
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvWriteTransfer(
- UINT8 SlaveAddr,
- char *bufP,
- UINT32 dataSize,
- IxI2cXferMode XferModeSelect);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvReadTransfer(
- UINT8 SlaveAddr,
- char *bufP,
- UINT32 dataSize,
- IxI2cXferMode XferModeSelect)
- *
- * @brief Initiates a transfer to receive bytes of data from a slave
- * device through the I2C bus.
- *
- * @param "UINT8 [in] SlaveAddr" - The slave address to request data from.
- * @param "char [out] *bufP" - The pointer to the buffer to store the
- * requested data.
- * @param "UINT32 [in] dataSize" - The number of bytes requested.
- * @param "IxI2cXferMode [in] XferModeSelect" - the transfer mode selected,
- * either repeated start (ends w/o stop) or normal (start and stop)
- *
- * Global Data :
- * - None.
- *
- * This API will try to obtain master control of the I2C bus and receive the
- * number of bytes, specified by dataSize, from the user specified address
- * into the receive buffer. It will use either interrupt or poll mode depending
- * on the mode selected.
- *
- * If in interrupt mode and IxI2cMasterReadCallbackP is not NULL, the driver
- * will initiate the transfer and return immediately. The function pointed to
- * by IxI2cMasterReadCallbackP will be called in the interrupt service
- * handlers when the operation is complete.
- *
- * If in interrupt mode and IxI2cMasterReadCallbackP is NULL, then the driver will
- * wait for the operation to complete, and then return.
- *
- * And if the repeated start transfer mode is selected, then it will not send a
- * stop signal at the end of all the transfers.
- * *NOTE*: If repeated start transfer mode is selected, it has to end with a
- * normal mode transfer mode else the bus will continue to be held
- * by the IXP.
- *
- * @return
- * - IX_I2C_SUCCESS - Successfuuly read slave data
- * - IX_I2C_MASTER_BUS_BUSY - The I2C bus is busy (held by another I2C master)
- * - IX_I2C_MASTER_ARB_LOSS - The I2C bus was loss to another I2C master
- * - IX_I2C_MASTER_XFER_ERROR - There was a bus error during transfer
- * - IX_I2C_MASTER_BUS_ERROR - There was a bus error during transfer
- * - IX_I2C_MASTER_NO_BUFFER - buffer pointer is NULL
- * - IX_I2C_MASTER_INVALID_XFER_MODE - Xfer mode selected is invalid
- * - IX_I2C_INVALID_SLAVE_ADDR - invalid slave address (zero) specified
- * - IX_I2C_DATA_SIZE_ZERO - dataSize passed in is zero, which is invalid
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : no
- * @li ISR Callable : no
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvReadTransfer(
- UINT8 SlaveAddr,
- char *bufP,
- UINT32 dataSize,
- IxI2cXferMode XferModeSelect);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvSlaveAddrAndGenCallDetectedCheck(
- void)
- *
- * @brief Checks the I2C Status Register to determine if a slave address is
- * detected
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API is used in polled mode to determine if the I2C unit is requested
- * for a slave or general call transfer. If it is requested for a slave
- * transfer then it will determine if it is a general call (read only), read,
- * or write transfer requested.
- *
- * @return
- * - IX_I2C_SLAVE_ADDR_NOT_DETECTED - The I2C unit is not requested for slave
- * transfer
- * - IX_I2C_GEN_CALL_ADDR_DETECTED - The I2C unit is not requested for slave
- * transfer but for general call
- * - IX_I2C_SLAVE_READ_DETECTED - The I2C unit is requested for a read
- * - IX_I2C_SLAVE_WRITE_DETECTED - The I2C unit is requested for a write
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : no
- * @li ISR Callable : no
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvSlaveAddrAndGenCallDetectedCheck(void);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvSlaveOrGenDataReceive(
- char *bufP,
- UINT32 bufSize,
- UINT32 *dataSizeRcvd)
- *
- * @brief Performs the slave receive or general call receive data transfer
- *
- * @param "char [in] *bufP" - the pointer to the buffer to store data
- * "UINT32 [in] bufSize" - the buffer size allocated
- * "UINT32 [in] *dataSizeRcvd" - the length of data received in bytes
- *
- * Global Data :
- * - None.
- *
- * This API is only used in polled mode to perform the slave read or general call
- * receive data. It will continuously store the data received into bufP until
- * complete or until bufP is full in which it will return
- * IX_I2C_SLAVE_OR_GEN_READ_BUFFER_FULL. If in interrupt mode, the callback will be
- * used.
- *
- * @return
- * - IX_I2C_SUCCESS - The I2C driver transferred the data successfully.
- * - IX_I2C_SLAVE_OR_GEN_READ_BUFFER_FULL - The I2C driver has ran out of
- * space to store the received data.
- * - IX_I2C_SLAVE_OR_GEN_READ_ERROR - The I2C driver didn't manage to
- * detect the IDBR Rx Full bit
- * - IX_I2C_DATA_SIZE_ZERO - bufSize passed in is zero, which is invalid
- * - IX_I2C_SLAVE_NO_BUFFER - buffer pointer is NULL
- * - IX_I2C_NULL_POINTER - dataSizeRcvd is NULL
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : no
- * @li ISR Callable : no
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvSlaveOrGenDataReceive(
- char *bufP,
- UINT32 bufSize,
- UINT32 *dataSizeRcvd);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvSlaveDataTransmit(
- char *bufP,
- UINT32 dataSize,
- UINT32 *dataSizeXmtd)
- *
- * @brief Performs the slave write data transfer
- *
- * @param "char [in] *bufP" - the pointer to the buffer for data to be
- * transmitted
- * "UINT32 [in] bufSize" - the buffer size allocated
- * "UINT32 [in] *dataSizeRcvd" - the length of data trasnmitted in
- * bytes
- *
- * Global Data :
- * - None.
- *
- * This API is only used in polled mode to perform the slave transmit data. It
- * will continuously transmit the data from bufP until complete or until bufP
- * is empty in which it will return IX_I2C_SLAVE_WRITE_BUFFER_EMPTY. If in
- * interrupt mode, the callback will be used.
- *
- * @return
- * - IX_I2C_SUCCESS - The I2C driver transferred the data successfully.
- * - IX_I2C_SLAVE_WRITE_BUFFER_EMPTY - The I2C driver needs more data to
- * transmit.
- * - IX_I2C_SLAVE_WRITE_ERROR -The I2C driver didn't manage to detect the
- * IDBR Tx empty bit or the slave stop bit.
- * - IX_I2C_DATA_SIZE_ZERO - dataSize passed in is zero, which is invalid
- * - IX_I2C_SLAVE_NO_BUFFER - buffer pointer is NULL
- * - IX_I2C_NULL_POINTER - dataSizeXmtd is NULL
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : no
- * @li ISR Callable : no
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvSlaveDataTransmit(
- char *bufP,
- UINT32 dataSize,
- UINT32 *dataSizeXmtd);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvSlaveOrGenCallBufReplenish(
- char *bufP,
- UINT32 bufSize)
- *
- * @brief Replenishes the buffer which stores buffer info for both slave and
- * general call
- *
- * @param "char [in] *bufP" - pointer to the buffer allocated
- * "UINT32 [in] bufSize" - size of the buffer
- *
- * Global Data :
- * - None.
- *
- * This API is only used in interrupt mode for replenishing the same buffer
- * that is used by both slave and generall call by updating the buffer info
- * with new info and clearing previous offsets set by previous transfers.
- *
- * @return
- * - None
- *
- * @li Reentrant : no
- * @li ISR Callable : no
- *
- */
-PUBLIC void
-ixI2cDrvSlaveOrGenCallBufReplenish(
- char *bufP,
- UINT32 bufSize);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvStatsGet(IxI2cStatsCounters *I2cStats)
- *
- * @brief Returns the I2C Statistics through the pointer passed in
- *
- * @param - "IxI2cStatsCounters [out] *I2cStats" - I2C statistics counter will
- * be read and written to the location pointed by this pointer.
- *
- * Global Data :
- * - None.
- *
- * This API will return the statistics counters of the I2C driver.
- *
- * @return
- * - IX_I2C_NULL_POINTER - pointer passed in is NULL
- * - IX_I2C_SUCCESS - successfully obtained I2C statistics
- *
- * @li Reentrant : yes
- * @li ISR Callable : no
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvStatsGet(IxI2cStatsCounters *I2cStats);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvStatsReset(void)
- *
- * @brief Reset I2C statistics counters.
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will reset the statistics counters of the I2C driver.
- *
- * @return
- * - None
- *
- * @li Reentrant : yes
- * @li ISR Callable : no
- *
- */
-PUBLIC void
-ixI2cDrvStatsReset(void);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvShow(void)
- *
- * @brief Displays the I2C status register and the statistics counter.
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will display the I2C Status register and is useful if any error
- * occurs. It displays the detection of bus error, slave address, general call,
- * address, IDBR receive full, IDBR transmit empty, arbitration loss, slave
- * STOP signal, I2C bus busy, unit busy, ack/nack, and read/write mode. It will
- * also call the ixI2cDrvGetStats and then display the statistics counter.
- *
- * @return
- * - IX_I2C_SUCCESS - successfully displayed statistics and status register
- * - IX_I2C_NOT_INIT - I2C not init yet.
- *
- * @li Reentrant : yes
- * @li ISR Callable : no
- *
- */
-PUBLIC IX_I2C_STATUS
-ixI2cDrvShow(void);
-
-/**
- * @ingroup IxI2cDrv
- *
- * @fn ixI2cDrvDelayTypeSelect (IxI2cDelayMode delayMechanismSelect)
- *
- * @brief Sets the delay type of either looping delay or OS scheduler delay
- * according to the argument provided.
- *
- * @param - "IxI2cDelayMode [in] delayTypeSelect" - the I2C delay type selected
- *
- * Global Data :
- * - None.
- *
- * This API will set the delay type used by the I2C Driver to either looping
- * delay or OS scheduler delay.
- *
- * @return
- * - None
- *
- * @li Reentrant : yes
- * @li ISR Callable : no
- *
- */
-PUBLIC void
-ixI2cDrvDelayTypeSelect (IxI2cDelayMode delayTypeSelect);
-
-#endif /* __ixp46X */
-#endif /* IXI2CDRV_H */
+/**
+ * @file IxI2cDrv.h
+ *
+ * @brief Header file for the IXP400 I2C Driver (IxI2cDrv)
+ *
+ * @version $Revision: 1.1.1.1 $
+ *
+ * @par
+ * IXP400 SW Release version 2.0
+ *
+ * -- Copyright Notice --
+ *
+ * @par
+ * Copyright 2001-2005, Intel Corporation.
+ * All rights reserved.
+ *
+ * @par
+ * 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 Intel Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * @par
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
+ *
+ * @par
+ * -- End of Copyright Notice --
+ */
+
+/**
+ * @defgroup IxI2cDrv IXP400 I2C Driver(IxI2cDrv) API
+ *
+ * @brief IXP400 I2C Driver Public API
+ *
+ * @{
+ */
+#ifndef IXI2CDRV_H
+#define IXI2CDRV_H
+
+#ifdef __ixp46X
+#include "IxOsal.h"
+
+/*
+ * Section for #define
+ */
+
+/**
+ * @ingroup IxI2cDrv
+ * @brief The interval of micro/mili seconds the IXP will wait before it polls for
+ * status from the ixI2cIntrXferStatus; Every 20us is 1 byte @
+ * 400Kbps and 4 bytes @ 100Kbps. This is dependent on delay type selected
+ * through the API ixI2cDrvDelayTypeSelect.
+ */
+#define IX_I2C_US_POLL_FOR_XFER_STATUS 20
+
+/**
+ * @ingroup IxI2cDrv
+ * @brief The number of tries that will be attempted to call a callback
+ * function if the callback does not or is unable to resolve the
+ * issue it is called to resolve
+ */
+#define IX_I2C_NUM_OF_TRIES_TO_CALL_CALLBACK_FUNC 10
+
+
+/**
+ * @ingroup IxI2cDrv
+ * @brief Number of tries slave will poll the IDBR Rx full bit before it
+ * gives up
+ */
+#define IX_I2C_NUM_TO_POLL_IDBR_RX_FULL 0x100
+
+/**
+ * @ingroup IxI2cDrv
+ * @brief Number of tries slave will poll the IDBR Tx empty bit before it
+ * gives up
+ */
+#define IX_I2C_NUM_TO_POLL_IDBR_TX_EMPTY 0x100
+
+/*
+ * Section for enum
+ */
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @enum IxI2cMasterStatus
+ *
+ * @brief The master status - transfer complete, bus error or arbitration loss
+ */
+typedef enum
+{
+ IX_I2C_MASTER_XFER_COMPLETE = IX_SUCCESS,
+ IX_I2C_MASTER_XFER_BUS_ERROR,
+ IX_I2C_MASTER_XFER_ARB_LOSS
+} IxI2cMasterStatus;
+
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @enum IX_I2C_STATUS
+ *
+ * @brief The status that can be returned in a I2C driver initialization
+ */
+typedef enum
+{
+ IX_I2C_SUCCESS = IX_SUCCESS, /**< Success status */
+ IX_I2C_FAIL, /**< Fail status */
+ IX_I2C_NOT_SUPPORTED, /**< hardware does not have dedicated I2C hardware */
+ IX_I2C_NULL_POINTER, /**< parameter passed in is NULL */
+ IX_I2C_INVALID_SPEED_MODE_ENUM_VALUE, /**< speed mode selected is invalid */
+ IX_I2C_INVALID_FLOW_MODE_ENUM_VALUE, /**< flow mode selected is invalid */
+ IX_I2C_SLAVE_ADDR_CB_MISSING, /**< slave callback is NULL */
+ IX_I2C_GEN_CALL_CB_MISSING, /**< general callback is NULL */
+ IX_I2C_INVALID_SLAVE_ADDR, /**< invalid slave address specified */
+ IX_I2C_INT_BIND_FAIL, /**< interrupt bind fail */
+ IX_I2C_INT_UNBIND_FAIL, /**< interrupt unbind fail */
+ IX_I2C_NOT_INIT, /**< I2C is not initialized yet */
+ IX_I2C_MASTER_BUS_BUSY, /**< master detected a I2C bus busy */
+ IX_I2C_MASTER_ARB_LOSS, /**< master experienced arbitration loss */
+ IX_I2C_MASTER_XFER_ERROR, /**< master experienced a transfer error */
+ IX_I2C_MASTER_BUS_ERROR, /**< master detected a I2C bus error */
+ IX_I2C_MASTER_NO_BUFFER, /**< no buffer provided for master transfer */
+ IX_I2C_MASTER_INVALID_XFER_MODE, /**< xfer mode selected is invalid */
+ IX_I2C_SLAVE_ADDR_NOT_DETECTED, /**< polled slave addr not detected */
+ IX_I2C_GEN_CALL_ADDR_DETECTED, /**< polling detected general call */
+ IX_I2C_SLAVE_READ_DETECTED, /**< polling detected slave read request */
+ IX_I2C_SLAVE_WRITE_DETECTED, /**< polling detected slave write request */
+ IX_I2C_SLAVE_NO_BUFFER, /**< no buffer provided for slave transfers */
+ IX_I2C_DATA_SIZE_ZERO, /**< data size transfer is zero - invalid */
+ IX_I2C_SLAVE_WRITE_BUFFER_EMPTY, /**< slave buffer is used till empty */
+ IX_I2C_SLAVE_WRITE_ERROR, /**< slave write experienced an error */
+ IX_I2C_SLAVE_OR_GEN_READ_BUFFER_FULL, /**< slave buffer is filled up */
+ IX_I2C_SLAVE_OR_GEN_READ_ERROR /**< slave read experienced an error */
+} IX_I2C_STATUS;
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @enum IxI2cSpeedMode
+ *
+ * @brief Type of speed modes supported by the I2C hardware.
+ */
+typedef enum
+{
+ IX_I2C_NORMAL_MODE = 0x0,
+ IX_I2C_FAST_MODE
+} IxI2cSpeedMode;
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @enum IxI2cXferMode
+ *
+ * @brief Used for indicating it is a repeated start or normal transfer
+ */
+typedef enum
+{
+ IX_I2C_NORMAL = 0x0,
+ IX_I2C_REPEATED_START
+} IxI2cXferMode;
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @enum IxI2cFlowMode
+ *
+ * @brief Used for indicating it is a poll or interrupt mode
+ */
+typedef enum
+{
+ IX_I2C_POLL_MODE = 0x0,
+ IX_I2C_INTERRUPT_MODE
+} IxI2cFlowMode;
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @enum IxI2cDelayMode
+ *
+ * @brief Used for selecting looping delay or OS scheduler delay
+ */
+typedef enum
+{
+ IX_I2C_LOOP_DELAY = 1, /**< delay in microseconds */
+ IX_I2C_SCHED_DELAY /**< delay in miliseconds */
+} IxI2cDelayMode;
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @brief The pointer to the function that will be called when the master
+ * has completed its receive. The parameter that is passed will
+ * provide the status of the read (success, arb loss, or bus
+ * error), the transfer mode (normal or repeated start, the
+ * buffer pointer and number of bytes transferred.
+ */
+typedef void (*IxI2cMasterReadCallbackP)(IxI2cMasterStatus, IxI2cXferMode, char*, UINT32);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @brief The pointer to the function that will be called when the master
+ * has completed its transmit. The parameter that is passed will
+ * provide the status of the write (success, arb loss, or buss
+ * error), the transfer mode (normal or repeated start), the
+ * buffer pointer and number of bytes transferred.
+ */
+typedef void (*IxI2cMasterWriteCallbackP)(IxI2cMasterStatus, IxI2cXferMode, char*, UINT32);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @brief The pointer to the function that will be called when a slave
+ * address detected in interrupt mode for a read. The parameters
+ * that is passed will provide the read status, buffer pointer,
+ * buffer size, and the bytes received. When a start of a read
+ * is initiated there will be no buffer allocated and this callback
+ * will be called to request for a buffer. While receiving, if the
+ * buffer gets filled, this callback will be called to request for
+ * a new buffer while sending the filled buffer's pointer and size,
+ * and data size received. When the receive is complete, this
+ * callback will be called to process the data and free the memory
+ * by passing the buffer's pointer and size, and data size received.
+ */
+typedef void (*IxI2cSlaveReadCallbackP)(IX_I2C_STATUS, char*, UINT32, UINT32);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @brief The pointer to the function that will be called when a slave
+ * address detected in interrupt mode for a write. The parameters
+ * that is passed will provide the write status, buffer pointer,
+ * buffer size, and the bytes received. When a start of a write is
+ * initiated there will be no buffer allocated and this callback
+ * will be called to request for a buffer and to fill it with data.
+ * While transmitting, if the data in the buffer empties, this
+ * callback will be called to request for more data to be filled in
+ * the same or new buffer. When the transmit is complete, this
+ * callback will be called to free the memory or other actions to
+ * be taken.
+ */
+typedef void (*IxI2cSlaveWriteCallbackP)(IX_I2C_STATUS, char*, UINT32, UINT32);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @brief The pointer to the function that will be called when a general
+ * call detected in interrupt mode for a read. The parameters that
+ * is passed will provide the read status, buffer pointer, buffer
+ * size, and the bytes received. When a start of a read is
+ * initiated there will be no buffer allocated and this callback
+ * will be called to request for a buffer. While receiving, if the
+ * buffer gets filled, this callback will be called to request for
+ * a new buffer while sending the filled buffer's pointer and size,
+ * and data size received. When the receive is complete, this
+ * callback will be called to process the data and free the memory
+ * by passing the buffer's pointer and size, and data size received.
+ */
+typedef void (*IxI2cGenCallCallbackP)(IX_I2C_STATUS, char*, UINT32, UINT32);
+
+/*
+ * Section for struct
+ */
+
+/**
+ * @brief contains all the variables required to initialize the I2C unit
+ *
+ * Structure to be filled and used for calling initialization
+ */
+typedef struct
+{
+ IxI2cSpeedMode I2cSpeedSelect; /**<Select either normal (100kbps)
+ or fast mode (400kbps)*/
+ IxI2cFlowMode I2cFlowSelect; /**<Select interrupt or poll mode*/
+ IxI2cMasterReadCallbackP MasterReadCBP;
+ /**<The master read callback pointer */
+ IxI2cMasterWriteCallbackP MasterWriteCBP;
+ /**<The master write callback pointer */
+ IxI2cSlaveReadCallbackP SlaveReadCBP;
+ /**<The slave read callback pointer */
+ IxI2cSlaveWriteCallbackP SlaveWriteCBP;
+ /**<The slave write callback pointer */
+ IxI2cGenCallCallbackP GenCallCBP;
+ /**<The general call callback pointer */
+ BOOL I2cGenCallResponseEnable; /**<Enable/disable the unit to
+ respond to generall calls.*/
+ BOOL I2cSlaveAddrResponseEnable;/**<Enable/disable the unit to
+ respond to the slave address set in
+ ISAR*/
+ BOOL SCLEnable; /**<Enable/disable the unit from
+ driving the SCL line during master
+ mode operation*/
+ UINT8 I2cHWAddr; /**<The address the unit will
+ response to as a slave device*/
+} IxI2cInitVars;
+
+/**
+ * @brief contains results of counters and their overflow
+ *
+ * Structure contains all values of counters and associated overflows.
+ */
+typedef struct
+{
+ UINT32 ixI2cMasterXmitCounter; /**<Total bytes transmitted as
+ master.*/
+ UINT32 ixI2cMasterFailedXmitCounter; /**<Total bytes failed for
+ transmission as master.*/
+ UINT32 ixI2cMasterRcvCounter; /**<Total bytes received as
+ master.*/
+ UINT32 ixI2cMasterFailedRcvCounter; /**<Total bytes failed for
+ receival as master.*/
+ UINT32 ixI2cSlaveXmitCounter; /**<Total bytes transmitted as
+ slave.*/
+ UINT32 ixI2cSlaveFailedXmitCounter; /**<Total bytes failed for
+ transmission as slave.*/
+ UINT32 ixI2cSlaveRcvCounter; /**<Total bytes received as
+ slave.*/
+ UINT32 ixI2cSlaveFailedRcvCounter; /**<Total bytes failed for
+ receival as slave.*/
+ UINT32 ixI2cGenAddrCallSucceedCounter; /**<Total bytes successfully
+ transmitted for general address.*/
+ UINT32 ixI2cGenAddrCallFailedCounter; /**<Total bytes failed transmission
+ for general address.*/
+ UINT32 ixI2cArbLossCounter; /**<Total instances of arbitration
+ loss has occured.*/
+} IxI2cStatsCounters;
+
+
+/*
+ * Section for prototypes interface functions
+ */
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvInit(
+ IxI2cInitVars *InitVarsSelected)
+ *
+ * @brief Initializes the I2C Driver.
+ *
+ * @param "IxI2cInitVars [in] *InitVarsSelected" - struct containing required
+ * variables for initialization
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will check if the hardware supports this I2C driver and the validity
+ * of the parameters passed in. It will continue to process the parameters
+ * passed in by setting the speed of the I2C unit (100kbps or 400kbps), setting
+ * the flow to either interrupt or poll mode, setting the address of the I2C unit,
+ * enabling/disabling the respond to General Calls, enabling/disabling the respond
+ * to Slave Address and SCL line driving. If it is interrupt mode, then it will
+ * register the callback routines for master, slavetransfer and general call receive.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - Successfully initialize and enable the I2C
+ * hardware.
+ * - IX_I2C_NOT_SUPPORTED - The hardware does not support or have a
+ * dedicated I2C unit to support this driver
+ * - IX_I2C_NULL_POINTER - The parameter passed in is a NULL pointed
+ * - IX_I2C_INVALID_SPEED_MODE_ENUM_VALUE - The speed mode selected in the
+ * InitVarsSelected is invalid
+ * - IX_I2C_INVALID_FLOW_MODE_ENUM_VALUE - The flow mode selected in the
+ * InitVarsSelected is invalid
+ * - IX_I2C_INVALID_SLAVE_ADDR - The address 0x0 is reserved for
+ * general call.
+ * - IX_I2C_SLAVE_ADDR_CB_MISSING - interrupt mode is selected but
+ * slave address callback pointer is NULL
+ * - IX_I2C_GEN_CALL_CB_MISSING - interrupt mode is selected but
+ * general call callback pointer is NULL
+ * - IX_I2C_INT_BIND_FAIL - The ISR for the I2C failed to bind
+ * - IX_I2C_INT_UNBIND_FAIL - The ISR for the I2C failed to unbind
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvInit(IxI2cInitVars *InitVarsSelected);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvUninit(
+ void)
+ *
+ * @brief Disables the I2C hardware
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will disable the I2C hardware, unbind interrupt, and unmap memory.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - successfully un-initialized I2C
+ * - IX_I2C_INT_UNBIND_FAIL - failed to unbind the I2C interrupt
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvUninit(void);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvSlaveAddrSet(
+ UINT8 SlaveAddrSet)
+ *
+ * @brief Sets the I2C Slave Address
+ *
+ * @param "UINT8 [in] SlaveAddrSet" - Slave Address to be inserted into ISAR
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will insert the SlaveAddrSet into the ISAR.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - successfuly set the slave addr
+ * - IX_I2C_INVALID_SLAVE_ADDR - invalid slave address (zero) specified
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvSlaveAddrSet(UINT8 SlaveAddrSet);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvBusScan(
+ void)
+ *
+ * @brief scans the I2C bus for slave devices
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will prompt all slave addresses for a reply except its own
+ *
+ * @return
+ * - IX_I2C_SUCCESS - found at least one slave device
+ * - IX_I2C_FAIL - Fail to find even one slave device
+ * - IX_I2C_BUS_BUSY - The I2C bus is busy (held by another I2C master)
+ * - IX_I2C_ARB_LOSS - The I2C bus was loss to another I2C master
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvBusScan(void);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvWriteTransfer(
+ UINT8 SlaveAddr,
+ char *bufP,
+ UINT32 dataSize,
+ IxI2cXferMode XferModeSelect)
+ *
+ * @param "UINT8 [in] SlaveAddr" - The slave address to request data from.
+ * @param "char [in] *bufP" - The pointer to the data to be transmitted.
+ * @param "UINT32 [in] dataSize" - The number of bytes requested.
+ * @param "IxI2cXferMode [in] XferModeSelect" - the transfer mode selected,
+ * either repeated start (ends w/o stop) or normal (start and stop)
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will try to obtain master control of the I2C bus and transmit the
+ * number of bytes, specified by dataSize, to the user specified slave
+ * address from the buffer pointer. It will use either interrupt or poll mode
+ * depending on the method selected.
+ *
+ * If in interrupt mode and IxI2cMasterWriteCallbackP is not NULL, the driver
+ * will initiate the transfer and return immediately. The function pointed to
+ * by IxI2cMasterWriteCallbackP will be called in the interrupt service
+ * handlers when the operation is complete.
+ *
+ * If in interrupt mode and IxI2cMasterWriteCallbackP is NULL, then the driver
+ * will wait for the operation to complete, and then return.
+ *
+ * And if the repeated start transfer mode is selected, then it will not send a
+ * stop signal at the end of all the transfers.
+ * *NOTE*: If repeated start transfer mode is selected, it has to end with a
+ * normal mode transfer mode else the bus will continue to be held
+ * by the IXP.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - Successfuuly wrote data to slave.
+ * - IX_I2C_MASTER_BUS_BUSY - The I2C bus is busy (held by another I2C master)
+ * - IX_I2C_MASTER_ARB_LOSS - The I2C bus was loss to another I2C master
+ * - IX_I2C_MASTER_XFER_ERROR - There was a transfer error
+ * - IX_I2C_MASTER_BUS_ERROR - There was a bus error during transfer
+ * - IX_I2C_MASTER_NO_BUFFER - buffer pointer is NULL
+ * - IX_I2C_MASTER_INVALID_XFER_MODE - Xfer mode selected is invalid
+ * - IX_I2C_DATA_SIZE_ZERO - dataSize passed in is zero, which is invalid
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : no
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvWriteTransfer(
+ UINT8 SlaveAddr,
+ char *bufP,
+ UINT32 dataSize,
+ IxI2cXferMode XferModeSelect);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvReadTransfer(
+ UINT8 SlaveAddr,
+ char *bufP,
+ UINT32 dataSize,
+ IxI2cXferMode XferModeSelect)
+ *
+ * @brief Initiates a transfer to receive bytes of data from a slave
+ * device through the I2C bus.
+ *
+ * @param "UINT8 [in] SlaveAddr" - The slave address to request data from.
+ * @param "char [out] *bufP" - The pointer to the buffer to store the
+ * requested data.
+ * @param "UINT32 [in] dataSize" - The number of bytes requested.
+ * @param "IxI2cXferMode [in] XferModeSelect" - the transfer mode selected,
+ * either repeated start (ends w/o stop) or normal (start and stop)
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will try to obtain master control of the I2C bus and receive the
+ * number of bytes, specified by dataSize, from the user specified address
+ * into the receive buffer. It will use either interrupt or poll mode depending
+ * on the mode selected.
+ *
+ * If in interrupt mode and IxI2cMasterReadCallbackP is not NULL, the driver
+ * will initiate the transfer and return immediately. The function pointed to
+ * by IxI2cMasterReadCallbackP will be called in the interrupt service
+ * handlers when the operation is complete.
+ *
+ * If in interrupt mode and IxI2cMasterReadCallbackP is NULL, then the driver will
+ * wait for the operation to complete, and then return.
+ *
+ * And if the repeated start transfer mode is selected, then it will not send a
+ * stop signal at the end of all the transfers.
+ * *NOTE*: If repeated start transfer mode is selected, it has to end with a
+ * normal mode transfer mode else the bus will continue to be held
+ * by the IXP.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - Successfuuly read slave data
+ * - IX_I2C_MASTER_BUS_BUSY - The I2C bus is busy (held by another I2C master)
+ * - IX_I2C_MASTER_ARB_LOSS - The I2C bus was loss to another I2C master
+ * - IX_I2C_MASTER_XFER_ERROR - There was a bus error during transfer
+ * - IX_I2C_MASTER_BUS_ERROR - There was a bus error during transfer
+ * - IX_I2C_MASTER_NO_BUFFER - buffer pointer is NULL
+ * - IX_I2C_MASTER_INVALID_XFER_MODE - Xfer mode selected is invalid
+ * - IX_I2C_INVALID_SLAVE_ADDR - invalid slave address (zero) specified
+ * - IX_I2C_DATA_SIZE_ZERO - dataSize passed in is zero, which is invalid
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : no
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvReadTransfer(
+ UINT8 SlaveAddr,
+ char *bufP,
+ UINT32 dataSize,
+ IxI2cXferMode XferModeSelect);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvSlaveAddrAndGenCallDetectedCheck(
+ void)
+ *
+ * @brief Checks the I2C Status Register to determine if a slave address is
+ * detected
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API is used in polled mode to determine if the I2C unit is requested
+ * for a slave or general call transfer. If it is requested for a slave
+ * transfer then it will determine if it is a general call (read only), read,
+ * or write transfer requested.
+ *
+ * @return
+ * - IX_I2C_SLAVE_ADDR_NOT_DETECTED - The I2C unit is not requested for slave
+ * transfer
+ * - IX_I2C_GEN_CALL_ADDR_DETECTED - The I2C unit is not requested for slave
+ * transfer but for general call
+ * - IX_I2C_SLAVE_READ_DETECTED - The I2C unit is requested for a read
+ * - IX_I2C_SLAVE_WRITE_DETECTED - The I2C unit is requested for a write
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : no
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvSlaveAddrAndGenCallDetectedCheck(void);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvSlaveOrGenDataReceive(
+ char *bufP,
+ UINT32 bufSize,
+ UINT32 *dataSizeRcvd)
+ *
+ * @brief Performs the slave receive or general call receive data transfer
+ *
+ * @param "char [in] *bufP" - the pointer to the buffer to store data
+ * "UINT32 [in] bufSize" - the buffer size allocated
+ * "UINT32 [in] *dataSizeRcvd" - the length of data received in bytes
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API is only used in polled mode to perform the slave read or general call
+ * receive data. It will continuously store the data received into bufP until
+ * complete or until bufP is full in which it will return
+ * IX_I2C_SLAVE_OR_GEN_READ_BUFFER_FULL. If in interrupt mode, the callback will be
+ * used.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - The I2C driver transferred the data successfully.
+ * - IX_I2C_SLAVE_OR_GEN_READ_BUFFER_FULL - The I2C driver has ran out of
+ * space to store the received data.
+ * - IX_I2C_SLAVE_OR_GEN_READ_ERROR - The I2C driver didn't manage to
+ * detect the IDBR Rx Full bit
+ * - IX_I2C_DATA_SIZE_ZERO - bufSize passed in is zero, which is invalid
+ * - IX_I2C_SLAVE_NO_BUFFER - buffer pointer is NULL
+ * - IX_I2C_NULL_POINTER - dataSizeRcvd is NULL
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : no
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvSlaveOrGenDataReceive(
+ char *bufP,
+ UINT32 bufSize,
+ UINT32 *dataSizeRcvd);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvSlaveDataTransmit(
+ char *bufP,
+ UINT32 dataSize,
+ UINT32 *dataSizeXmtd)
+ *
+ * @brief Performs the slave write data transfer
+ *
+ * @param "char [in] *bufP" - the pointer to the buffer for data to be
+ * transmitted
+ * "UINT32 [in] bufSize" - the buffer size allocated
+ * "UINT32 [in] *dataSizeRcvd" - the length of data trasnmitted in
+ * bytes
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API is only used in polled mode to perform the slave transmit data. It
+ * will continuously transmit the data from bufP until complete or until bufP
+ * is empty in which it will return IX_I2C_SLAVE_WRITE_BUFFER_EMPTY. If in
+ * interrupt mode, the callback will be used.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - The I2C driver transferred the data successfully.
+ * - IX_I2C_SLAVE_WRITE_BUFFER_EMPTY - The I2C driver needs more data to
+ * transmit.
+ * - IX_I2C_SLAVE_WRITE_ERROR -The I2C driver didn't manage to detect the
+ * IDBR Tx empty bit or the slave stop bit.
+ * - IX_I2C_DATA_SIZE_ZERO - dataSize passed in is zero, which is invalid
+ * - IX_I2C_SLAVE_NO_BUFFER - buffer pointer is NULL
+ * - IX_I2C_NULL_POINTER - dataSizeXmtd is NULL
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : no
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvSlaveDataTransmit(
+ char *bufP,
+ UINT32 dataSize,
+ UINT32 *dataSizeXmtd);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvSlaveOrGenCallBufReplenish(
+ char *bufP,
+ UINT32 bufSize)
+ *
+ * @brief Replenishes the buffer which stores buffer info for both slave and
+ * general call
+ *
+ * @param "char [in] *bufP" - pointer to the buffer allocated
+ * "UINT32 [in] bufSize" - size of the buffer
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API is only used in interrupt mode for replenishing the same buffer
+ * that is used by both slave and generall call by updating the buffer info
+ * with new info and clearing previous offsets set by previous transfers.
+ *
+ * @return
+ * - None
+ *
+ * @li Reentrant : no
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC void
+ixI2cDrvSlaveOrGenCallBufReplenish(
+ char *bufP,
+ UINT32 bufSize);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvStatsGet(IxI2cStatsCounters *I2cStats)
+ *
+ * @brief Returns the I2C Statistics through the pointer passed in
+ *
+ * @param - "IxI2cStatsCounters [out] *I2cStats" - I2C statistics counter will
+ * be read and written to the location pointed by this pointer.
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return the statistics counters of the I2C driver.
+ *
+ * @return
+ * - IX_I2C_NULL_POINTER - pointer passed in is NULL
+ * - IX_I2C_SUCCESS - successfully obtained I2C statistics
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvStatsGet(IxI2cStatsCounters *I2cStats);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvStatsReset(void)
+ *
+ * @brief Reset I2C statistics counters.
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will reset the statistics counters of the I2C driver.
+ *
+ * @return
+ * - None
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC void
+ixI2cDrvStatsReset(void);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvShow(void)
+ *
+ * @brief Displays the I2C status register and the statistics counter.
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will display the I2C Status register and is useful if any error
+ * occurs. It displays the detection of bus error, slave address, general call,
+ * address, IDBR receive full, IDBR transmit empty, arbitration loss, slave
+ * STOP signal, I2C bus busy, unit busy, ack/nack, and read/write mode. It will
+ * also call the ixI2cDrvGetStats and then display the statistics counter.
+ *
+ * @return
+ * - IX_I2C_SUCCESS - successfully displayed statistics and status register
+ * - IX_I2C_NOT_INIT - I2C not init yet.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC IX_I2C_STATUS
+ixI2cDrvShow(void);
+
+/**
+ * @ingroup IxI2cDrv
+ *
+ * @fn ixI2cDrvDelayTypeSelect (IxI2cDelayMode delayMechanismSelect)
+ *
+ * @brief Sets the delay type of either looping delay or OS scheduler delay
+ * according to the argument provided.
+ *
+ * @param - "IxI2cDelayMode [in] delayTypeSelect" - the I2C delay type selected
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will set the delay type used by the I2C Driver to either looping
+ * delay or OS scheduler delay.
+ *
+ * @return
+ * - None
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : no
+ *
+ */
+PUBLIC void
+ixI2cDrvDelayTypeSelect (IxI2cDelayMode delayTypeSelect);
+
+#endif /* __ixp46X */
+#endif /* IXI2CDRV_H */
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/IxOsalMemAccess.h u-boot-2009.03/cpu/ixp/npe/include/IxOsalMemAccess.h
--- u-boot-2009.03_orig/cpu/ixp/npe/include/IxOsalMemAccess.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/cpu/ixp/npe/include/IxOsalMemAccess.h 2009-03-31 14:51:21.693033600 -0700
@@ -1,494 +1,494 @@
-/**
- * @file IxOsalMemAccess.h
- *
- * @brief Header file for memory access
- *
- * @par
- * @version $Revision: 1.0 $
- *
- * @par
- * IXP400 SW Release version 2.0
- *
- * -- Copyright Notice --
- *
- * @par
- * Copyright 2001-2005, Intel Corporation.
- * All rights reserved.
- *
- * @par
- * 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 Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
- *
- * @par
- * -- End of Copyright Notice --
- */
-
-#ifndef IxOsalMemAccess_H
-#define IxOsalMemAccess_H
-
-
-/* Global BE switch
- *
- * Should be set only in BE mode and only if the component uses I/O memory.
- */
-
-#if defined (__BIG_ENDIAN)
-
-#define IX_OSAL_BE_MAPPING
-
-#endif /* Global switch */
-
-
-/* By default only static memory maps in use;
- define IX_OSAL_DYNAMIC_MEMORY_MAP per component if dynamic maps are
- used instead in that component */
-#define IX_OSAL_STATIC_MEMORY_MAP
-
-
-/*
- * SDRAM coherency mode
- * Must be defined to BE, LE_DATA_COHERENT or LE_ADDRESS_COHERENT.
- * The mode changes depending on OS
- */
-#if defined (IX_OSAL_LINUX_BE) || defined (IX_OSAL_VXWORKS_BE)
-
-#define IX_SDRAM_BE
-
-#elif defined (IX_OSAL_VXWORKS_LE)
-
-#define IX_SDRAM_LE_DATA_COHERENT
-
-#elif defined (IX_OSAL_LINUX_LE)
-
-#define IX_SDRAM_LE_DATA_COHERENT
-
-#elif defined (IX_OSAL_WINCE_LE)
-
-#define IX_SDRAM_LE_DATA_COHERENT
-
-#elif defined (IX_OSAL_EBOOT_LE)
-
-#define IX_SDRAM_LE_ADDRESS_COHERENT
-
-#endif
-
-
-
-
-/**************************************
- * Retrieve current component mapping *
- **************************************/
-
-/*
- * Only use customized mapping for LE.
- *
- */
-#if defined (IX_OSAL_VXWORKS_LE) || defined (IX_OSAL_LINUX_LE) || defined (IX_OSAL_WINCE_LE) || defined (IX_OSAL_EBOOT_LE)
-
-#include "IxOsalOsIxp400CustomizedMapping.h"
-
-#endif
-
-
-/*******************************************************************
- * Turn off IX_STATIC_MEMORY map for components using dynamic maps *
- *******************************************************************/
-#ifdef IX_OSAL_DYNAMIC_MEMORY_MAP
-
-#undef IX_OSAL_STATIC_MEMORY_MAP
-
-#endif
-
-
-/************************************************************
- * Turn off BE access for components using LE or no mapping *
- ************************************************************/
-
-#if ( defined (IX_OSAL_LE_AC_MAPPING) || defined (IX_OSAL_LE_DC_MAPPING) || defined (IX_OSAL_NO_MAPPING) )
-
-#undef IX_OSAL_BE_MAPPING
-
-#endif
-
-
-/*****************
- * Safety checks *
- *****************/
-
-/* Default to no_mapping */
-#if !defined (IX_OSAL_BE_MAPPING) && !defined (IX_OSAL_LE_AC_MAPPING) && !defined (IX_OSAL_LE_DC_MAPPING) && !defined (IX_OSAL_NO_MAPPING)
-
-#define IX_OSAL_NO_MAPPING
-
-#endif /* check at least one mapping */
-
-/* No more than one mapping can be defined for a component */
-#if (defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_LE_AC_MAPPING)) \
- ||(defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_LE_DC_MAPPING)) \
- ||(defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_NO_MAPPING)) \
- ||(defined (IX_OSAL_LE_DC_MAPPING) && defined (IX_OSAL_NO_MAPPING)) \
- ||(defined (IX_OSAL_LE_DC_MAPPING) && defined (IX_OSAL_LE_AC_MAPPING)) \
- ||(defined (IX_OSAL_LE_AC_MAPPING) && defined (IX_OSAL_NO_MAPPING))
-
-
-#ifdef IX_OSAL_BE_MAPPING
-#warning IX_OSAL_BE_MAPPING is defined
-#endif
-
-#ifdef IX_OSAL_LE_AC_MAPPING
-#warning IX_OSAL_LE_AC_MAPPING is defined
-#endif
-
-#ifdef IX_OSAL_LE_DC_MAPPING
-#warning IX_OSAL_LE_DC_MAPPING is defined
-#endif
-
-#ifdef IX_OSAL_NO_MAPPING
-#warning IX_OSAL_NO_MAPPING is defined
-#endif
-
-#error More than one I/O mapping is defined, please check your component mapping
-
-#endif /* check at most one mapping */
-
-
-/* Now set IX_OSAL_COMPONENT_MAPPING */
-
-#ifdef IX_OSAL_BE_MAPPING
-#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_BE
-#endif
-
-#ifdef IX_OSAL_LE_AC_MAPPING
-#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE_AC
-#endif
-
-#ifdef IX_OSAL_LE_DC_MAPPING
-#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE_DC
-#endif
-
-#ifdef IX_OSAL_NO_MAPPING
-#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE
-#endif
-
-
-/* SDRAM coherency should be defined */
-#if !defined (IX_SDRAM_BE) && !defined (IX_SDRAM_LE_DATA_COHERENT) && !defined (IX_SDRAM_LE_ADDRESS_COHERENT)
-
-#error SDRAM coherency must be defined
-
-#endif /* SDRAM coherency must be defined */
-
-/* SDRAM coherency cannot be defined in several ways */
-#if (defined (IX_SDRAM_BE) && (defined (IX_SDRAM_LE_DATA_COHERENT) || defined (IX_SDRAM_LE_ADDRESS_COHERENT))) \
- || (defined (IX_SDRAM_LE_DATA_COHERENT) && (defined (IX_SDRAM_BE) || defined (IX_SDRAM_LE_ADDRESS_COHERENT))) \
- || (defined (IX_SDRAM_LE_ADDRESS_COHERENT) && (defined (IX_SDRAM_BE) || defined (IX_SDRAM_LE_DATA_COHERENT)))
-
-#error SDRAM coherency cannot be defined in more than one way
-
-#endif /* SDRAM coherency must be defined exactly once */
-
-
-/*********************
- * Read/write macros *
- *********************/
-
-/* WARNING - except for addition of special cookie read/write macros (see below)
- these macros are NOT user serviceable. Please do not modify */
-
-#define IX_OSAL_READ_LONG_RAW(wAddr) (*(wAddr))
-#define IX_OSAL_READ_SHORT_RAW(sAddr) (*(sAddr))
-#define IX_OSAL_READ_BYTE_RAW(bAddr) (*(bAddr))
-#define IX_OSAL_WRITE_LONG_RAW(wAddr, wData) (*(wAddr) = (wData))
-#define IX_OSAL_WRITE_SHORT_RAW(sAddr,sData) (*(sAddr) = (sData))
-#define IX_OSAL_WRITE_BYTE_RAW(bAddr, bData) (*(bAddr) = (bData))
-
-#ifdef __linux
-
-/* Linux - specific cookie reads/writes.
- Redefine per OS if dynamic memory maps are used
- and I/O memory is accessed via functions instead of raw pointer access. */
-
-#define IX_OSAL_READ_LONG_COOKIE(wCookie) (readl((UINT32) (wCookie) ))
-#define IX_OSAL_READ_SHORT_COOKIE(sCookie) (readw((UINT32) (sCookie) ))
-#define IX_OSAL_READ_BYTE_COOKIE(bCookie) (readb((UINT32) (bCookie) ))
-#define IX_OSAL_WRITE_LONG_COOKIE(wCookie, wData) (writel(wData, (UINT32) (wCookie) ))
-#define IX_OSAL_WRITE_SHORT_COOKIE(sCookie, sData) (writew(sData, (UINT32) (sCookie) ))
-#define IX_OSAL_WRITE_BYTE_COOKIE(bCookie, bData) (writeb(bData, (UINT32) (bCookie) ))
-
-#endif /* linux */
-
-#ifdef __wince
-
-/* WinCE - specific cookie reads/writes. */
-
-static __inline__ UINT32
-ixOsalWinCEReadLCookie (volatile UINT32 * lCookie)
-{
- return *lCookie;
-}
-
-static __inline__ UINT16
-ixOsalWinCEReadWCookie (volatile UINT16 * wCookie)
-{
-#if 0
- UINT32 auxVal = *((volatile UINT32 *) wCookie);
- if ((unsigned) wCookie & 3)
- return (UINT16) (auxVal >> 16);
- else
- return (UINT16) (auxVal & 0xffff);
-#else
- return *wCookie;
-#endif
-}
-
-static __inline__ UINT8
-ixOsalWinCEReadBCookie (volatile UINT8 * bCookie)
-{
-#if 0
- UINT32 auxVal = *((volatile UINT32 *) bCookie);
- return (UINT8) ((auxVal >> (3 - (((unsigned) bCookie & 3) << 3)) & 0xff));
-#else
- return *bCookie;
-#endif
-}
-
-static __inline__ void
-ixOsalWinCEWriteLCookie (volatile UINT32 * lCookie, UINT32 lVal)
-{
- *lCookie = lVal;
-}
-
-static __inline__ void
-ixOsalWinCEWriteWCookie (volatile UINT16 * wCookie, UINT16 wVal)
-{
-#if 0
- volatile UINT32 *auxCookie =
- (volatile UINT32 *) ((unsigned) wCookie & ~3);
- if ((unsigned) wCookie & 3)
- {
- *auxCookie &= 0xffff;
- *auxCookie |= (UINT32) wVal << 16;
- }
- else
- {
- *auxCookie &= ~0xffff;
- *auxCookie |= (UINT32) wVal & 0xffff;
- }
-#else
- *wCookie = wVal;
-#endif
-}
-
-static __inline__ void
-ixOsalWinCEWriteBCookie (volatile UINT8 * bCookie, UINT8 bVal)
-{
-#if 0
- volatile UINT32 *auxCookie =
- (volatile UINT32 *) ((unsigned) bCookie & ~3);
- *auxCookie &= 0xff << (3 - (((unsigned) bCookie & 3) << 3));
- *auxCookie |= (UINT32) bVal << (3 - (((unsigned) bCookie & 3) << 3));
-#else
- *bCookie = bVal;
-#endif
-}
-
-
-#define IX_OSAL_READ_LONG_COOKIE(wCookie) (ixOsalWinCEReadLCookie(wCookie))
-#define IX_OSAL_READ_SHORT_COOKIE(sCookie) (ixOsalWinCEReadWCookie(sCookie))
-#define IX_OSAL_READ_BYTE_COOKIE(bCookie) (ixOsalWinCEReadBCookie(bCookie))
-#define IX_OSAL_WRITE_LONG_COOKIE(wCookie, wData) (ixOsalWinCEWriteLCookie(wCookie, wData))
-#define IX_OSAL_WRITE_SHORT_COOKIE(sCookie, sData) (ixOsalWinCEWriteWCookie(sCookie, sData))
-#define IX_OSAL_WRITE_BYTE_COOKIE(bCookie, bData) (ixOsalWinCEWriteBCookie(bCookie, bData))
-
-#endif /* wince */
-
-#if defined (__vxworks) || (defined (__linux) && defined (IX_OSAL_STATIC_MEMORY_MAP)) || \
- (defined (__wince) && defined (IX_OSAL_STATIC_MEMORY_MAP))
-
-#define IX_OSAL_READ_LONG_IO(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
-#define IX_OSAL_READ_SHORT_IO(sAddr) IX_OSAL_READ_SHORT_RAW(sAddr)
-#define IX_OSAL_READ_BYTE_IO(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
-#define IX_OSAL_WRITE_LONG_IO(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
-#define IX_OSAL_WRITE_SHORT_IO(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, sData)
-#define IX_OSAL_WRITE_BYTE_IO(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
-
-#elif (defined (__linux) && !defined (IX_OSAL_STATIC_MEMORY_MAP)) || \
- (defined (__wince) && !defined (IX_OSAL_STATIC_MEMORY_MAP))
-
-#ifndef __wince
-#include <asm/io.h>
-#endif /* ndef __wince */
-
-#define IX_OSAL_READ_LONG_IO(wAddr) IX_OSAL_READ_LONG_COOKIE(wAddr)
-#define IX_OSAL_READ_SHORT_IO(sAddr) IX_OSAL_READ_SHORT_COOKIE(sAddr)
-#define IX_OSAL_READ_BYTE_IO(bAddr) IX_OSAL_READ_BYTE_COOKIE(bAddr)
-#define IX_OSAL_WRITE_LONG_IO(wAddr, wData) IX_OSAL_WRITE_LONG_COOKIE(wAddr, wData)
-#define IX_OSAL_WRITE_SHORT_IO(sAddr, sData) IX_OSAL_WRITE_SHORT_COOKIE(sAddr, sData)
-#define IX_OSAL_WRITE_BYTE_IO(bAddr, bData) IX_OSAL_WRITE_BYTE_COOKIE(bAddr, bData)
-
-#endif
-
-/* Define BE macros */
-#define IX_OSAL_READ_LONG_BE(wAddr) IX_OSAL_BE_BUSTOXSL(IX_OSAL_READ_LONG_IO((volatile UINT32 *) (wAddr) ))
-#define IX_OSAL_READ_SHORT_BE(sAddr) IX_OSAL_BE_BUSTOXSS(IX_OSAL_READ_SHORT_IO((volatile UINT16 *) (sAddr) ))
-#define IX_OSAL_READ_BYTE_BE(bAddr) IX_OSAL_BE_BUSTOXSB(IX_OSAL_READ_BYTE_IO((volatile UINT8 *) (bAddr) ))
-#define IX_OSAL_WRITE_LONG_BE(wAddr, wData) IX_OSAL_WRITE_LONG_IO((volatile UINT32 *) (wAddr), IX_OSAL_BE_XSTOBUSL((UINT32) (wData) ))
-#define IX_OSAL_WRITE_SHORT_BE(sAddr, sData) IX_OSAL_WRITE_SHORT_IO((volatile UINT16 *) (sAddr), IX_OSAL_BE_XSTOBUSS((UINT16) (sData) ))
-#define IX_OSAL_WRITE_BYTE_BE(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) (bAddr), IX_OSAL_BE_XSTOBUSB((UINT8) (bData) ))
-
-/* Define LE AC macros */
-#define IX_OSAL_READ_LONG_LE_AC(wAddr) IX_OSAL_READ_LONG_IO((volatile UINT32 *) IX_OSAL_LE_AC_BUSTOXSL((UINT32) (wAddr) ))
-#define IX_OSAL_READ_SHORT_LE_AC(sAddr) IX_OSAL_READ_SHORT_IO((volatile UINT16 *) IX_OSAL_LE_AC_BUSTOXSS((UINT32) (sAddr) ))
-#define IX_OSAL_READ_BYTE_LE_AC(bAddr) IX_OSAL_READ_BYTE_IO((volatile UINT8 *) IX_OSAL_LE_AC_BUSTOXSB((UINT32) (bAddr) ))
-#define IX_OSAL_WRITE_LONG_LE_AC(wAddr, wData) IX_OSAL_WRITE_LONG_IO((volatile UINT32 *) IX_OSAL_LE_AC_XSTOBUSL((UINT32) (wAddr) ), (UINT32) (wData))
-#define IX_OSAL_WRITE_SHORT_LE_AC(sAddr, sData) IX_OSAL_WRITE_SHORT_IO((volatile UINT16 *) IX_OSAL_LE_AC_XSTOBUSS((UINT32) (sAddr) ), (UINT16) (sData))
-#define IX_OSAL_WRITE_BYTE_LE_AC(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) IX_OSAL_LE_AC_XSTOBUSB((UINT32) (bAddr) ), (UINT8) (bData))
-
-
-/* Inline functions are required here to avoid reading the same I/O location 2 or 4 times for the byte swap */
-static __inline__ UINT32
-ixOsalDataCoherentLongReadSwap (volatile UINT32 * wAddr)
-{
- UINT32 wData = IX_OSAL_READ_LONG_IO (wAddr);
- return IX_OSAL_LE_DC_BUSTOXSL (wData);
-}
-
-static __inline__ UINT16
-ixOsalDataCoherentShortReadSwap (volatile UINT16 * sAddr)
-{
- UINT16 sData = IX_OSAL_READ_SHORT_IO (sAddr);
- return IX_OSAL_LE_DC_BUSTOXSS (sData);
-}
-
-static __inline__ void
-ixOsalDataCoherentLongWriteSwap (volatile UINT32 * wAddr, UINT32 wData)
-{
- wData = IX_OSAL_LE_DC_XSTOBUSL (wData);
- IX_OSAL_WRITE_LONG_IO (wAddr, wData);
-}
-
-static __inline__ void
-ixOsalDataCoherentShortWriteSwap (volatile UINT16 * sAddr, UINT16 sData)
-{
- sData = IX_OSAL_LE_DC_XSTOBUSS (sData);
- IX_OSAL_WRITE_SHORT_IO (sAddr, sData);
-}
-
-/* Define LE DC macros */
-
-#define IX_OSAL_READ_LONG_LE_DC(wAddr) ixOsalDataCoherentLongReadSwap((volatile UINT32 *) (wAddr) )
-#define IX_OSAL_READ_SHORT_LE_DC(sAddr) ixOsalDataCoherentShortReadSwap((volatile UINT16 *) (sAddr) )
-#define IX_OSAL_READ_BYTE_LE_DC(bAddr) IX_OSAL_LE_DC_BUSTOXSB(IX_OSAL_READ_BYTE_IO((volatile UINT8 *) (bAddr) ))
-#define IX_OSAL_WRITE_LONG_LE_DC(wAddr, wData) ixOsalDataCoherentLongWriteSwap((volatile UINT32 *) (wAddr), (UINT32) (wData))
-#define IX_OSAL_WRITE_SHORT_LE_DC(sAddr, sData) ixOsalDataCoherentShortWriteSwap((volatile UINT16 *) (sAddr), (UINT16) (sData))
-#define IX_OSAL_WRITE_BYTE_LE_DC(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) (bAddr), IX_OSAL_LE_DC_XSTOBUSB((UINT8) (bData)))
-
-#if defined (IX_OSAL_BE_MAPPING)
-
-#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_BE(wAddr)
-#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_BE(sAddr)
-#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_BE(bAddr)
-#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_BE(wAddr, wData)
-#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_BE(sAddr, sData)
-#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_BE(bAddr, bData)
-
-#elif defined (IX_OSAL_LE_AC_MAPPING)
-
-#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_LE_AC(wAddr)
-#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_LE_AC(sAddr)
-#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_LE_AC(bAddr)
-#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_LE_AC(wAddr, wData)
-#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_LE_AC(sAddr, sData)
-#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_LE_AC(bAddr, bData)
-
-#elif defined (IX_OSAL_LE_DC_MAPPING)
-
-#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_LE_DC(wAddr)
-#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_LE_DC(sAddr)
-#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_LE_DC(bAddr)
-#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_LE_DC(wAddr, wData)
-#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_LE_DC(sAddr, sData)
-#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_LE_DC(bAddr, bData)
-
-#endif /* End of BE and LE coherency mode switch */
-
-
-/* Reads/writes to and from memory shared with NPEs - depends on the SDRAM coherency */
-
-#if defined (IX_SDRAM_BE)
-
-#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
-#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_READ_SHORT_RAW(sAddr)
-#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
-
-#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
-#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, sData)
-#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
-
-#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) (wData)
-#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) (sData)
-#define IX_OSAL_SWAP_BE_SHARED_BYTE(bData) (bData)
-
-#elif defined (IX_SDRAM_LE_ADDRESS_COHERENT)
-
-#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
-#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_READ_SHORT_RAW(IX_OSAL_SWAP_SHORT_ADDRESS(sAddr))
-#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(IX_OSAL_SWAP_BYTE_ADDRESS(bAddr))
-
-#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
-#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(IX_OSAL_SWAP_SHORT_ADDRESS(sAddr), sData)
-#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(IX_OSAL_SWAP_BYTE_ADDRESS(bAddr), bData)
-
-#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) (wData)
-#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) (sData)
-#define IX_OSAL_SWAP_BE_SHARED_BYTE(bData) (bData)
-
-#elif defined (IX_SDRAM_LE_DATA_COHERENT)
-
-#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_SWAP_LONG(IX_OSAL_READ_LONG_RAW(wAddr))
-#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_SWAP_SHORT(IX_OSAL_READ_SHORT_RAW(sAddr))
-#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
-
-#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, IX_OSAL_SWAP_LONG(wData))
-#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, IX_OSAL_SWAP_SHORT(sData))
-#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
-
-#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) IX_OSAL_SWAP_LONG(wData)
-#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) IX_OSAL_SWAP_SHORT(sData)
-
-#endif
-
-
-#define IX_OSAL_COPY_BE_SHARED_LONG_ARRAY(wDestAddr, wSrcAddr, wCount) \
- { \
- UINT32 i; \
- \
- for ( i = 0 ; i < wCount ; i++ ) \
- { \
- * (((UINT32 *) wDestAddr) + i) = IX_OSAL_READ_BE_SHARED_LONG(((UINT32 *) wSrcAddr) + i); \
- }; \
- };
-
-#endif /* IxOsalMemAccess_H */
+/**
+ * @file IxOsalMemAccess.h
+ *
+ * @brief Header file for memory access
+ *
+ * @par
+ * @version $Revision: 1.1.1.1 $
+ *
+ * @par
+ * IXP400 SW Release version 2.0
+ *
+ * -- Copyright Notice --
+ *
+ * @par
+ * Copyright 2001-2005, Intel Corporation.
+ * All rights reserved.
+ *
+ * @par
+ * 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 Intel Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * @par
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
+ *
+ * @par
+ * -- End of Copyright Notice --
+ */
+
+#ifndef IxOsalMemAccess_H
+#define IxOsalMemAccess_H
+
+
+/* Global BE switch
+ *
+ * Should be set only in BE mode and only if the component uses I/O memory.
+ */
+
+#if defined (__BIG_ENDIAN)
+
+#define IX_OSAL_BE_MAPPING
+
+#endif /* Global switch */
+
+
+/* By default only static memory maps in use;
+ define IX_OSAL_DYNAMIC_MEMORY_MAP per component if dynamic maps are
+ used instead in that component */
+#define IX_OSAL_STATIC_MEMORY_MAP
+
+
+/*
+ * SDRAM coherency mode
+ * Must be defined to BE, LE_DATA_COHERENT or LE_ADDRESS_COHERENT.
+ * The mode changes depending on OS
+ */
+#if defined (IX_OSAL_LINUX_BE) || defined (IX_OSAL_VXWORKS_BE)
+
+#define IX_SDRAM_BE
+
+#elif defined (IX_OSAL_VXWORKS_LE)
+
+#define IX_SDRAM_LE_DATA_COHERENT
+
+#elif defined (IX_OSAL_LINUX_LE)
+
+#define IX_SDRAM_LE_DATA_COHERENT
+
+#elif defined (IX_OSAL_WINCE_LE)
+
+#define IX_SDRAM_LE_DATA_COHERENT
+
+#elif defined (IX_OSAL_EBOOT_LE)
+
+#define IX_SDRAM_LE_ADDRESS_COHERENT
+
+#endif
+
+
+
+
+/**************************************
+ * Retrieve current component mapping *
+ **************************************/
+
+/*
+ * Only use customized mapping for LE.
+ *
+ */
+#if defined (IX_OSAL_VXWORKS_LE) || defined (IX_OSAL_LINUX_LE) || defined (IX_OSAL_WINCE_LE) || defined (IX_OSAL_EBOOT_LE)
+
+#include "IxOsalOsIxp400CustomizedMapping.h"
+
+#endif
+
+
+/*******************************************************************
+ * Turn off IX_STATIC_MEMORY map for components using dynamic maps *
+ *******************************************************************/
+#ifdef IX_OSAL_DYNAMIC_MEMORY_MAP
+
+#undef IX_OSAL_STATIC_MEMORY_MAP
+
+#endif
+
+
+/************************************************************
+ * Turn off BE access for components using LE or no mapping *
+ ************************************************************/
+
+#if ( defined (IX_OSAL_LE_AC_MAPPING) || defined (IX_OSAL_LE_DC_MAPPING) || defined (IX_OSAL_NO_MAPPING) )
+
+#undef IX_OSAL_BE_MAPPING
+
+#endif
+
+
+/*****************
+ * Safety checks *
+ *****************/
+
+/* Default to no_mapping */
+#if !defined (IX_OSAL_BE_MAPPING) && !defined (IX_OSAL_LE_AC_MAPPING) && !defined (IX_OSAL_LE_DC_MAPPING) && !defined (IX_OSAL_NO_MAPPING)
+
+#define IX_OSAL_NO_MAPPING
+
+#endif /* check at least one mapping */
+
+/* No more than one mapping can be defined for a component */
+#if (defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_LE_AC_MAPPING)) \
+ ||(defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_LE_DC_MAPPING)) \
+ ||(defined (IX_OSAL_BE_MAPPING) && defined (IX_OSAL_NO_MAPPING)) \
+ ||(defined (IX_OSAL_LE_DC_MAPPING) && defined (IX_OSAL_NO_MAPPING)) \
+ ||(defined (IX_OSAL_LE_DC_MAPPING) && defined (IX_OSAL_LE_AC_MAPPING)) \
+ ||(defined (IX_OSAL_LE_AC_MAPPING) && defined (IX_OSAL_NO_MAPPING))
+
+
+#ifdef IX_OSAL_BE_MAPPING
+#warning IX_OSAL_BE_MAPPING is defined
+#endif
+
+#ifdef IX_OSAL_LE_AC_MAPPING
+#warning IX_OSAL_LE_AC_MAPPING is defined
+#endif
+
+#ifdef IX_OSAL_LE_DC_MAPPING
+#warning IX_OSAL_LE_DC_MAPPING is defined
+#endif
+
+#ifdef IX_OSAL_NO_MAPPING
+#warning IX_OSAL_NO_MAPPING is defined
+#endif
+
+#error More than one I/O mapping is defined, please check your component mapping
+
+#endif /* check at most one mapping */
+
+
+/* Now set IX_OSAL_COMPONENT_MAPPING */
+
+#ifdef IX_OSAL_BE_MAPPING
+#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_BE
+#endif
+
+#ifdef IX_OSAL_LE_AC_MAPPING
+#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE_AC
+#endif
+
+#ifdef IX_OSAL_LE_DC_MAPPING
+#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE_DC
+#endif
+
+#ifdef IX_OSAL_NO_MAPPING
+#define IX_OSAL_COMPONENT_MAPPING IX_OSAL_LE
+#endif
+
+
+/* SDRAM coherency should be defined */
+#if !defined (IX_SDRAM_BE) && !defined (IX_SDRAM_LE_DATA_COHERENT) && !defined (IX_SDRAM_LE_ADDRESS_COHERENT)
+
+#error SDRAM coherency must be defined
+
+#endif /* SDRAM coherency must be defined */
+
+/* SDRAM coherency cannot be defined in several ways */
+#if (defined (IX_SDRAM_BE) && (defined (IX_SDRAM_LE_DATA_COHERENT) || defined (IX_SDRAM_LE_ADDRESS_COHERENT))) \
+ || (defined (IX_SDRAM_LE_DATA_COHERENT) && (defined (IX_SDRAM_BE) || defined (IX_SDRAM_LE_ADDRESS_COHERENT))) \
+ || (defined (IX_SDRAM_LE_ADDRESS_COHERENT) && (defined (IX_SDRAM_BE) || defined (IX_SDRAM_LE_DATA_COHERENT)))
+
+#error SDRAM coherency cannot be defined in more than one way
+
+#endif /* SDRAM coherency must be defined exactly once */
+
+
+/*********************
+ * Read/write macros *
+ *********************/
+
+/* WARNING - except for addition of special cookie read/write macros (see below)
+ these macros are NOT user serviceable. Please do not modify */
+
+#define IX_OSAL_READ_LONG_RAW(wAddr) (*(wAddr))
+#define IX_OSAL_READ_SHORT_RAW(sAddr) (*(sAddr))
+#define IX_OSAL_READ_BYTE_RAW(bAddr) (*(bAddr))
+#define IX_OSAL_WRITE_LONG_RAW(wAddr, wData) (*(wAddr) = (wData))
+#define IX_OSAL_WRITE_SHORT_RAW(sAddr,sData) (*(sAddr) = (sData))
+#define IX_OSAL_WRITE_BYTE_RAW(bAddr, bData) (*(bAddr) = (bData))
+
+#ifdef __linux
+
+/* Linux - specific cookie reads/writes.
+ Redefine per OS if dynamic memory maps are used
+ and I/O memory is accessed via functions instead of raw pointer access. */
+
+#define IX_OSAL_READ_LONG_COOKIE(wCookie) (readl((UINT32) (wCookie) ))
+#define IX_OSAL_READ_SHORT_COOKIE(sCookie) (readw((UINT32) (sCookie) ))
+#define IX_OSAL_READ_BYTE_COOKIE(bCookie) (readb((UINT32) (bCookie) ))
+#define IX_OSAL_WRITE_LONG_COOKIE(wCookie, wData) (writel(wData, (UINT32) (wCookie) ))
+#define IX_OSAL_WRITE_SHORT_COOKIE(sCookie, sData) (writew(sData, (UINT32) (sCookie) ))
+#define IX_OSAL_WRITE_BYTE_COOKIE(bCookie, bData) (writeb(bData, (UINT32) (bCookie) ))
+
+#endif /* linux */
+
+#ifdef __wince
+
+/* WinCE - specific cookie reads/writes. */
+
+static __inline__ UINT32
+ixOsalWinCEReadLCookie (volatile UINT32 * lCookie)
+{
+ return *lCookie;
+}
+
+static __inline__ UINT16
+ixOsalWinCEReadWCookie (volatile UINT16 * wCookie)
+{
+#if 0
+ UINT32 auxVal = *((volatile UINT32 *) wCookie);
+ if ((unsigned) wCookie & 3)
+ return (UINT16) (auxVal >> 16);
+ else
+ return (UINT16) (auxVal & 0xffff);
+#else
+ return *wCookie;
+#endif
+}
+
+static __inline__ UINT8
+ixOsalWinCEReadBCookie (volatile UINT8 * bCookie)
+{
+#if 0
+ UINT32 auxVal = *((volatile UINT32 *) bCookie);
+ return (UINT8) ((auxVal >> (3 - (((unsigned) bCookie & 3) << 3)) & 0xff));
+#else
+ return *bCookie;
+#endif
+}
+
+static __inline__ void
+ixOsalWinCEWriteLCookie (volatile UINT32 * lCookie, UINT32 lVal)
+{
+ *lCookie = lVal;
+}
+
+static __inline__ void
+ixOsalWinCEWriteWCookie (volatile UINT16 * wCookie, UINT16 wVal)
+{
+#if 0
+ volatile UINT32 *auxCookie =
+ (volatile UINT32 *) ((unsigned) wCookie & ~3);
+ if ((unsigned) wCookie & 3)
+ {
+ *auxCookie &= 0xffff;
+ *auxCookie |= (UINT32) wVal << 16;
+ }
+ else
+ {
+ *auxCookie &= ~0xffff;
+ *auxCookie |= (UINT32) wVal & 0xffff;
+ }
+#else
+ *wCookie = wVal;
+#endif
+}
+
+static __inline__ void
+ixOsalWinCEWriteBCookie (volatile UINT8 * bCookie, UINT8 bVal)
+{
+#if 0
+ volatile UINT32 *auxCookie =
+ (volatile UINT32 *) ((unsigned) bCookie & ~3);
+ *auxCookie &= 0xff << (3 - (((unsigned) bCookie & 3) << 3));
+ *auxCookie |= (UINT32) bVal << (3 - (((unsigned) bCookie & 3) << 3));
+#else
+ *bCookie = bVal;
+#endif
+}
+
+
+#define IX_OSAL_READ_LONG_COOKIE(wCookie) (ixOsalWinCEReadLCookie(wCookie))
+#define IX_OSAL_READ_SHORT_COOKIE(sCookie) (ixOsalWinCEReadWCookie(sCookie))
+#define IX_OSAL_READ_BYTE_COOKIE(bCookie) (ixOsalWinCEReadBCookie(bCookie))
+#define IX_OSAL_WRITE_LONG_COOKIE(wCookie, wData) (ixOsalWinCEWriteLCookie(wCookie, wData))
+#define IX_OSAL_WRITE_SHORT_COOKIE(sCookie, sData) (ixOsalWinCEWriteWCookie(sCookie, sData))
+#define IX_OSAL_WRITE_BYTE_COOKIE(bCookie, bData) (ixOsalWinCEWriteBCookie(bCookie, bData))
+
+#endif /* wince */
+
+#if defined (__vxworks) || (defined (__linux) && defined (IX_OSAL_STATIC_MEMORY_MAP)) || \
+ (defined (__wince) && defined (IX_OSAL_STATIC_MEMORY_MAP))
+
+#define IX_OSAL_READ_LONG_IO(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
+#define IX_OSAL_READ_SHORT_IO(sAddr) IX_OSAL_READ_SHORT_RAW(sAddr)
+#define IX_OSAL_READ_BYTE_IO(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
+#define IX_OSAL_WRITE_LONG_IO(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
+#define IX_OSAL_WRITE_SHORT_IO(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, sData)
+#define IX_OSAL_WRITE_BYTE_IO(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
+
+#elif (defined (__linux) && !defined (IX_OSAL_STATIC_MEMORY_MAP)) || \
+ (defined (__wince) && !defined (IX_OSAL_STATIC_MEMORY_MAP))
+
+#ifndef __wince
+#include <asm/io.h>
+#endif /* ndef __wince */
+
+#define IX_OSAL_READ_LONG_IO(wAddr) IX_OSAL_READ_LONG_COOKIE(wAddr)
+#define IX_OSAL_READ_SHORT_IO(sAddr) IX_OSAL_READ_SHORT_COOKIE(sAddr)
+#define IX_OSAL_READ_BYTE_IO(bAddr) IX_OSAL_READ_BYTE_COOKIE(bAddr)
+#define IX_OSAL_WRITE_LONG_IO(wAddr, wData) IX_OSAL_WRITE_LONG_COOKIE(wAddr, wData)
+#define IX_OSAL_WRITE_SHORT_IO(sAddr, sData) IX_OSAL_WRITE_SHORT_COOKIE(sAddr, sData)
+#define IX_OSAL_WRITE_BYTE_IO(bAddr, bData) IX_OSAL_WRITE_BYTE_COOKIE(bAddr, bData)
+
+#endif
+
+/* Define BE macros */
+#define IX_OSAL_READ_LONG_BE(wAddr) IX_OSAL_BE_BUSTOXSL(IX_OSAL_READ_LONG_IO((volatile UINT32 *) (wAddr) ))
+#define IX_OSAL_READ_SHORT_BE(sAddr) IX_OSAL_BE_BUSTOXSS(IX_OSAL_READ_SHORT_IO((volatile UINT16 *) (sAddr) ))
+#define IX_OSAL_READ_BYTE_BE(bAddr) IX_OSAL_BE_BUSTOXSB(IX_OSAL_READ_BYTE_IO((volatile UINT8 *) (bAddr) ))
+#define IX_OSAL_WRITE_LONG_BE(wAddr, wData) IX_OSAL_WRITE_LONG_IO((volatile UINT32 *) (wAddr), IX_OSAL_BE_XSTOBUSL((UINT32) (wData) ))
+#define IX_OSAL_WRITE_SHORT_BE(sAddr, sData) IX_OSAL_WRITE_SHORT_IO((volatile UINT16 *) (sAddr), IX_OSAL_BE_XSTOBUSS((UINT16) (sData) ))
+#define IX_OSAL_WRITE_BYTE_BE(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) (bAddr), IX_OSAL_BE_XSTOBUSB((UINT8) (bData) ))
+
+/* Define LE AC macros */
+#define IX_OSAL_READ_LONG_LE_AC(wAddr) IX_OSAL_READ_LONG_IO((volatile UINT32 *) IX_OSAL_LE_AC_BUSTOXSL((UINT32) (wAddr) ))
+#define IX_OSAL_READ_SHORT_LE_AC(sAddr) IX_OSAL_READ_SHORT_IO((volatile UINT16 *) IX_OSAL_LE_AC_BUSTOXSS((UINT32) (sAddr) ))
+#define IX_OSAL_READ_BYTE_LE_AC(bAddr) IX_OSAL_READ_BYTE_IO((volatile UINT8 *) IX_OSAL_LE_AC_BUSTOXSB((UINT32) (bAddr) ))
+#define IX_OSAL_WRITE_LONG_LE_AC(wAddr, wData) IX_OSAL_WRITE_LONG_IO((volatile UINT32 *) IX_OSAL_LE_AC_XSTOBUSL((UINT32) (wAddr) ), (UINT32) (wData))
+#define IX_OSAL_WRITE_SHORT_LE_AC(sAddr, sData) IX_OSAL_WRITE_SHORT_IO((volatile UINT16 *) IX_OSAL_LE_AC_XSTOBUSS((UINT32) (sAddr) ), (UINT16) (sData))
+#define IX_OSAL_WRITE_BYTE_LE_AC(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) IX_OSAL_LE_AC_XSTOBUSB((UINT32) (bAddr) ), (UINT8) (bData))
+
+
+/* Inline functions are required here to avoid reading the same I/O location 2 or 4 times for the byte swap */
+static __inline__ UINT32
+ixOsalDataCoherentLongReadSwap (volatile UINT32 * wAddr)
+{
+ UINT32 wData = IX_OSAL_READ_LONG_IO (wAddr);
+ return IX_OSAL_LE_DC_BUSTOXSL (wData);
+}
+
+static __inline__ UINT16
+ixOsalDataCoherentShortReadSwap (volatile UINT16 * sAddr)
+{
+ UINT16 sData = IX_OSAL_READ_SHORT_IO (sAddr);
+ return IX_OSAL_LE_DC_BUSTOXSS (sData);
+}
+
+static __inline__ void
+ixOsalDataCoherentLongWriteSwap (volatile UINT32 * wAddr, UINT32 wData)
+{
+ wData = IX_OSAL_LE_DC_XSTOBUSL (wData);
+ IX_OSAL_WRITE_LONG_IO (wAddr, wData);
+}
+
+static __inline__ void
+ixOsalDataCoherentShortWriteSwap (volatile UINT16 * sAddr, UINT16 sData)
+{
+ sData = IX_OSAL_LE_DC_XSTOBUSS (sData);
+ IX_OSAL_WRITE_SHORT_IO (sAddr, sData);
+}
+
+/* Define LE DC macros */
+
+#define IX_OSAL_READ_LONG_LE_DC(wAddr) ixOsalDataCoherentLongReadSwap((volatile UINT32 *) (wAddr) )
+#define IX_OSAL_READ_SHORT_LE_DC(sAddr) ixOsalDataCoherentShortReadSwap((volatile UINT16 *) (sAddr) )
+#define IX_OSAL_READ_BYTE_LE_DC(bAddr) IX_OSAL_LE_DC_BUSTOXSB(IX_OSAL_READ_BYTE_IO((volatile UINT8 *) (bAddr) ))
+#define IX_OSAL_WRITE_LONG_LE_DC(wAddr, wData) ixOsalDataCoherentLongWriteSwap((volatile UINT32 *) (wAddr), (UINT32) (wData))
+#define IX_OSAL_WRITE_SHORT_LE_DC(sAddr, sData) ixOsalDataCoherentShortWriteSwap((volatile UINT16 *) (sAddr), (UINT16) (sData))
+#define IX_OSAL_WRITE_BYTE_LE_DC(bAddr, bData) IX_OSAL_WRITE_BYTE_IO((volatile UINT8 *) (bAddr), IX_OSAL_LE_DC_XSTOBUSB((UINT8) (bData)))
+
+#if defined (IX_OSAL_BE_MAPPING)
+
+#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_BE(wAddr)
+#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_BE(sAddr)
+#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_BE(bAddr)
+#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_BE(wAddr, wData)
+#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_BE(sAddr, sData)
+#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_BE(bAddr, bData)
+
+#elif defined (IX_OSAL_LE_AC_MAPPING)
+
+#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_LE_AC(wAddr)
+#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_LE_AC(sAddr)
+#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_LE_AC(bAddr)
+#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_LE_AC(wAddr, wData)
+#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_LE_AC(sAddr, sData)
+#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_LE_AC(bAddr, bData)
+
+#elif defined (IX_OSAL_LE_DC_MAPPING)
+
+#define IX_OSAL_READ_LONG(wAddr) IX_OSAL_READ_LONG_LE_DC(wAddr)
+#define IX_OSAL_READ_SHORT(sAddr) IX_OSAL_READ_SHORT_LE_DC(sAddr)
+#define IX_OSAL_READ_BYTE(bAddr) IX_OSAL_READ_BYTE_LE_DC(bAddr)
+#define IX_OSAL_WRITE_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_LE_DC(wAddr, wData)
+#define IX_OSAL_WRITE_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_LE_DC(sAddr, sData)
+#define IX_OSAL_WRITE_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_LE_DC(bAddr, bData)
+
+#endif /* End of BE and LE coherency mode switch */
+
+
+/* Reads/writes to and from memory shared with NPEs - depends on the SDRAM coherency */
+
+#if defined (IX_SDRAM_BE)
+
+#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
+#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_READ_SHORT_RAW(sAddr)
+#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
+
+#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
+#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, sData)
+#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
+
+#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) (wData)
+#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) (sData)
+#define IX_OSAL_SWAP_BE_SHARED_BYTE(bData) (bData)
+
+#elif defined (IX_SDRAM_LE_ADDRESS_COHERENT)
+
+#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_READ_LONG_RAW(wAddr)
+#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_READ_SHORT_RAW(IX_OSAL_SWAP_SHORT_ADDRESS(sAddr))
+#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(IX_OSAL_SWAP_BYTE_ADDRESS(bAddr))
+
+#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, wData)
+#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(IX_OSAL_SWAP_SHORT_ADDRESS(sAddr), sData)
+#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(IX_OSAL_SWAP_BYTE_ADDRESS(bAddr), bData)
+
+#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) (wData)
+#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) (sData)
+#define IX_OSAL_SWAP_BE_SHARED_BYTE(bData) (bData)
+
+#elif defined (IX_SDRAM_LE_DATA_COHERENT)
+
+#define IX_OSAL_READ_BE_SHARED_LONG(wAddr) IX_OSAL_SWAP_LONG(IX_OSAL_READ_LONG_RAW(wAddr))
+#define IX_OSAL_READ_BE_SHARED_SHORT(sAddr) IX_OSAL_SWAP_SHORT(IX_OSAL_READ_SHORT_RAW(sAddr))
+#define IX_OSAL_READ_BE_SHARED_BYTE(bAddr) IX_OSAL_READ_BYTE_RAW(bAddr)
+
+#define IX_OSAL_WRITE_BE_SHARED_LONG(wAddr, wData) IX_OSAL_WRITE_LONG_RAW(wAddr, IX_OSAL_SWAP_LONG(wData))
+#define IX_OSAL_WRITE_BE_SHARED_SHORT(sAddr, sData) IX_OSAL_WRITE_SHORT_RAW(sAddr, IX_OSAL_SWAP_SHORT(sData))
+#define IX_OSAL_WRITE_BE_SHARED_BYTE(bAddr, bData) IX_OSAL_WRITE_BYTE_RAW(bAddr, bData)
+
+#define IX_OSAL_SWAP_BE_SHARED_LONG(wData) IX_OSAL_SWAP_LONG(wData)
+#define IX_OSAL_SWAP_BE_SHARED_SHORT(sData) IX_OSAL_SWAP_SHORT(sData)
+
+#endif
+
+
+#define IX_OSAL_COPY_BE_SHARED_LONG_ARRAY(wDestAddr, wSrcAddr, wCount) \
+ { \
+ UINT32 i; \
+ \
+ for ( i = 0 ; i < wCount ; i++ ) \
+ { \
+ * (((UINT32 *) wDestAddr) + i) = IX_OSAL_READ_BE_SHARED_LONG(((UINT32 *) wSrcAddr) + i); \
+ }; \
+ };
+
+#endif /* IxOsalMemAccess_H */
diff -Naur u-boot-2009.03_orig/cpu/ixp/npe/include/IxSspAcc.h u-boot-2009.03/cpu/ixp/npe/include/IxSspAcc.h
--- u-boot-2009.03_orig/cpu/ixp/npe/include/IxSspAcc.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/cpu/ixp/npe/include/IxSspAcc.h 2009-03-31 14:51:31.817904000 -0700
@@ -1,1271 +1,1271 @@
-/**
- * @file IxSspAcc.h
- *
- * @brief Header file for the IXP400 SSP Serial Port Access (IxSspAcc)
- *
- * @version $Revision: 0.1 $
- *
- * @par
- * IXP400 SW Release version 2.0
- *
- * -- Copyright Notice --
- *
- * @par
- * Copyright 2001-2005, Intel Corporation.
- * All rights reserved.
- *
- * @par
- * 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 Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
- *
- * @par
- * -- End of Copyright Notice --
- */
-
-/**
- * @defgroup IxSspAcc IXP400 SSP Serial Port Access (IxSspAcc) API
- *
- * @brief IXP400 SSP Serial Port Access Public API
- *
- * @{
- */
-#ifndef IXSSPACC_H
-#define IXSSPACC_H
-
-#ifdef __ixp46X
-
-#include "IxOsal.h"
-
-/*
- * Section for enum
- */
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccDataSize
- *
- * @brief The data sizes in bits that are supported by the protocol
- */
-typedef enum
-{
- DATA_SIZE_TOO_SMALL = 0x2,
- DATA_SIZE_4 = 0x3,
- DATA_SIZE_5,
- DATA_SIZE_6,
- DATA_SIZE_7,
- DATA_SIZE_8,
- DATA_SIZE_9,
- DATA_SIZE_10,
- DATA_SIZE_11,
- DATA_SIZE_12,
- DATA_SIZE_13,
- DATA_SIZE_14,
- DATA_SIZE_15,
- DATA_SIZE_16,
- DATA_SIZE_TOO_BIG
-} IxSspAccDataSize;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccPortStatus
- *
- * @brief The status of the SSP port to be set to enable/disable
- */
-typedef enum
-{
- SSP_PORT_DISABLE = 0x0,
- SSP_PORT_ENABLE,
- INVALID_SSP_PORT_STATUS
-} IxSspAccPortStatus;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccFrameFormat
- *
- * @brief The frame format that is to be used - SPI, SSP, or Microwire
- */
-typedef enum
-{
- SPI_FORMAT = 0x0,
- SSP_FORMAT,
- MICROWIRE_FORMAT,
- INVALID_FORMAT
-} IxSspAccFrameFormat;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccClkSource
- *
- * @brief The source to produce the SSP serial clock
- */
-typedef enum
-{
- ON_CHIP_CLK = 0x0,
- EXTERNAL_CLK,
- INVALID_CLK_SOURCE
-} IxSspAccClkSource;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccSpiSclkPhase
- *
- * @brief The SPI SCLK Phase:
- * 0 - SCLK is inactive one cycle at the start of a frame and 1/2 cycle at the
- * end of a frame.
- * 1 - SCLK is inactive 1/2 cycle at the start of a frame and one cycle at the
- * end of a frame.
- */
-typedef enum
-{
- START_ONE_END_HALF = 0x0,
- START_HALF_END_ONE,
- INVALID_SPI_PHASE
-} IxSspAccSpiSclkPhase;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccSpiSclkPolarity
- *
- * @brief The SPI SCLK Polarity can be set to either low or high.
- */
-typedef enum
-{
- SPI_POLARITY_LOW = 0x0,
- SPI_POLARITY_HIGH,
- INVALID_SPI_POLARITY
-} IxSspAccSpiSclkPolarity;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccMicrowireCtlWord
- *
- * @brief The Microwire control word can be either 8 or 16 bit.
- */
-typedef enum
-{
- MICROWIRE_8_BIT = 0x0,
- MICROWIRE_16_BIT,
- INVALID_MICROWIRE_CTL_WORD
-} IxSspAccMicrowireCtlWord;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IxSspAccFifoThreshold
- *
- * @brief The threshold in frames (each frame is defined by IxSspAccDataSize)
- * that can be set for the FIFO to trigger a threshold exceed when
- * checking with the ExceedThresholdCheck functions or an interrupt
- * when it is enabled.
- */
-typedef enum
-{
- FIFO_TSHLD_1 = 0x0,
- FIFO_TSHLD_2,
- FIFO_TSHLD_3,
- FIFO_TSHLD_4,
- FIFO_TSHLD_5,
- FIFO_TSHLD_6,
- FIFO_TSHLD_7,
- FIFO_TSHLD_8,
- FIFO_TSHLD_9,
- FIFO_TSHLD_10,
- FIFO_TSHLD_11,
- FIFO_TSHLD_12,
- FIFO_TSHLD_13,
- FIFO_TSHLD_14,
- FIFO_TSHLD_15,
- FIFO_TSHLD_16,
- INVALID_FIFO_TSHLD
-} IxSspAccFifoThreshold;
-
-/**
- * @ingroup IxSspAcc
- *
- * @enum IX_SSP_STATUS
- *
- * @brief The statuses that can be returned in a SSP Serial Port Access
- */
-typedef enum
-{
- IX_SSP_SUCCESS = IX_SUCCESS, /**< Success status */
- IX_SSP_FAIL, /**< Fail status */
- IX_SSP_RX_FIFO_OVERRUN_HANDLER_MISSING, /**<
- Rx FIFO Overrun handler is NULL. */
- IX_SSP_RX_FIFO_HANDLER_MISSING, /**<
- Rx FIFO threshold hit or above handler is NULL
- */
- IX_SSP_TX_FIFO_HANDLER_MISSING, /**<
- Tx FIFO threshold hit or below handler is NULL
- */
- IX_SSP_FIFO_NOT_EMPTY_FOR_SETTING_CTL_CMD, /**<
- Tx FIFO not empty and therefore microwire
- control command size setting is not allowed. */
- IX_SSP_INVALID_FRAME_FORMAT_ENUM_VALUE, /**<
- frame format selected is invalid. */
- IX_SSP_INVALID_DATA_SIZE_ENUM_VALUE, /**<
- data size selected is invalid. */
- IX_SSP_INVALID_CLOCK_SOURCE_ENUM_VALUE, /**<
- source clock selected is invalid. */
- IX_SSP_INVALID_TX_FIFO_THRESHOLD_ENUM_VALUE, /**<
- Tx FIFO threshold selected is invalid. */
- IX_SSP_INVALID_RX_FIFO_THRESHOLD_ENUM_VALUE, /**<
- Rx FIFO threshold selected is invalid. */
- IX_SSP_INVALID_SPI_PHASE_ENUM_VALUE, /**<
- SPI phase selected is invalid. */
- IX_SSP_INVALID_SPI_POLARITY_ENUM_VALUE, /**<
- SPI polarity selected is invalid. */
- IX_SSP_INVALID_MICROWIRE_CTL_CMD_ENUM_VALUE, /**<
- Microwire control command selected is invalid
- */
- IX_SSP_INT_UNBIND_FAIL, /**< Interrupt unbind fail to unbind SSP
- interrupt */
- IX_SSP_INT_BIND_FAIL, /**< Interrupt bind fail during init */
- IX_SSP_RX_FIFO_NOT_EMPTY, /**<
- Rx FIFO not empty while trying to change data
- size. */
- IX_SSP_TX_FIFO_NOT_EMPTY, /**<
- Rx FIFO not empty while trying to change data
- size or microwire control command size. */
- IX_SSP_POLL_MODE_BLOCKING, /**<
- poll mode selected blocks interrupt mode from
- being selected. */
- IX_SSP_TX_FIFO_HIT_BELOW_THRESHOLD, /**<
- Tx FIFO level hit or below threshold. */
- IX_SSP_TX_FIFO_EXCEED_THRESHOLD, /**<
- Tx FIFO level exceeded threshold. */
- IX_SSP_RX_FIFO_HIT_ABOVE_THRESHOLD, /**<
- Rx FIFO level hit or exceeded threshold. */
- IX_SSP_RX_FIFO_BELOW_THRESHOLD, /**<
- Rx FIFO level below threshold. */
- IX_SSP_BUSY, /**< SSP is busy. */
- IX_SSP_IDLE, /**< SSP is idle. */
- IX_SSP_OVERRUN_OCCURRED, /**<
- SSP has experienced an overrun. */
- IX_SSP_NO_OVERRUN, /**<
- SSP did not experience an overrun. */
- IX_SSP_NOT_SUPORTED, /**< hardware does not support SSP */
- IX_SSP_NOT_INIT, /**< SSP Access not intialized */
- IX_SSP_NULL_POINTER /**< parameter passed in is NULL */
-} IX_SSP_STATUS;
-
-/**
- * @ingroup IxSspAcc
- *
- * @brief SSP Rx FIFO Overrun handler
- *
- * This function is called for the client to handle Rx FIFO Overrun that occurs
- * in the SSP hardware
- */
-typedef void (*RxFIFOOverrunHandler)(void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @brief SSP Rx FIFO Threshold hit or above handler
- *
- * This function is called for the client to handle Rx FIFO threshold hit or
- * or above that occurs in the SSP hardware
- */
-typedef void (*RxFIFOThresholdHandler)(void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @brief SSP Tx FIFO Threshold hit or below handler
- *
- * This function is called for the client to handle Tx FIFO threshold hit or
- * or below that occurs in the SSP hardware
- */
-typedef void (*TxFIFOThresholdHandler)(void);
-
-
-/*
- * Section for struct
- */
-/**
- * @ingroup IxSspAcc
- *
- * @brief contains all the variables required to initialize the SSP serial port
- * hardware.
- *
- * Structure to be filled and used for calling initialization
- */
-typedef struct
-{
- IxSspAccFrameFormat FrameFormatSelected;/**<Select between SPI, SSP and
- Microwire. */
- IxSspAccDataSize DataSizeSelected; /**<Select between 4 and 16. */
- IxSspAccClkSource ClkSourceSelected; /**<Select clock source to be
- on-chip or external. */
- IxSspAccFifoThreshold TxFIFOThresholdSelected;
- /**<Select Tx FIFO threshold
- between 1 to 16. */
- IxSspAccFifoThreshold RxFIFOThresholdSelected;
- /**<Select Rx FIFO threshold
- between 1 to 16. */
- BOOL RxFIFOIntrEnable; /**<Enable/disable Rx FIFO
- threshold interrupt. Disabling
- this interrupt will require
- the use of the polling function
- RxFIFOExceedThresholdCheck. */
- BOOL TxFIFOIntrEnable; /**<Enable/disable Tx FIFO
- threshold interrupt. Disabling
- this interrupt will require
- the use of the polling function
- TxFIFOExceedThresholdCheck. */
- RxFIFOThresholdHandler RxFIFOThsldHdlr; /**<Pointer to function to handle
- a Rx FIFO interrupt. */
- TxFIFOThresholdHandler TxFIFOThsldHdlr; /**<Pointer to function to handle
- a Tx FIFO interrupt. */
- RxFIFOOverrunHandler RxFIFOOverrunHdlr; /**<Pointer to function to handle
- a Rx FIFO overrun interrupt. */
- BOOL LoopbackEnable; /**<Select operation mode to be
- normal or loopback mode. */
- IxSspAccSpiSclkPhase SpiSclkPhaseSelected;
- /**<Select SPI SCLK phase to start
- with one inactive cycle and end
- with 1/2 inactive cycle or
- start with 1/2 inactive cycle
- and end with one inactive
- cycle. (Only used in
- SPI format). */
- IxSspAccSpiSclkPolarity SpiSclkPolaritySelected;
- /**<Select SPI SCLK idle state
- to be low or high. (Only used in
- SPI format). */
- IxSspAccMicrowireCtlWord MicrowireCtlWordSelected;
- /**<Select Microwire control
- format to be 8 or 16-bit. (Only
- used in Microwire format). */
- UINT8 SerialClkRateSelected; /**<Select between 0 (1.8432Mbps)
- and 255 (7.2Kbps). The
- formula used is Bit rate =
- 3.6864x10^6 /
- (2 x (SerialClkRateSelect + 1))
- */
-} IxSspInitVars;
-
-/**
- * @ingroup IxSspAcc
- *
- * @brief contains counters of the SSP statistics
- *
- * Structure contains all values of counters and associated overflows.
- */
-typedef struct
-{
- UINT32 ixSspRcvCounter; /**<Total frames received. */
- UINT32 ixSspXmitCounter; /**<Total frames transmitted. */
- UINT32 ixSspOverflowCounter;/**<Total occurrences of overflow. */
-} IxSspAccStatsCounters;
-
-
-/*
- * Section for prototypes interface functions
- */
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccInit (
- IxSspInitVars *initVarsSelected);
- *
- * @brief Initializes the SSP Access module.
- *
- * @param "IxSspAccInitVars [in] *initVarsSelected" - struct containing required
- * variables for initialization
- *
- * Global Data :
- * - None.
- *
- * This API will initialize the SSP Serial Port hardware to the user specified
- * configuration. Then it will enable the SSP Serial Port.
- * *NOTE*: Once interrupt or polling mode is selected, the mode cannot be
- * changed via the interrupt enable/disable function but the init needs to be
- * called again to change it.
- *
- * @return
- * - IX_SSP_SUCCESS - Successfully initialize and enable the SSP
- * serial port.
- * - IX_SSP_RX_FIFO_HANDLER_MISSING - interrupt mode is selected but RX FIFO
- * handler pointer is NULL
- * - IX_SSP_TX_FIFO_HANDLER_MISSING - interrupt mode is selected but TX FIFO
- * handler pointer is NULL
- * - IX_SSP_RX_FIFO_OVERRUN_HANDLER_MISSING - interrupt mode is selected but
- * RX FIFO Overrun handler pointer is NULL
- * - IX_SSP_RX_FIFO_NOT_EMPTY - Rx FIFO not empty, data size change is not
- * allowed.
- * - IX_SSP_TX_FIFO_NOT_EMPTY - Tx FIFO not empty, data size change is not
- * allowed.
- * - IX_SSP_INVALID_FRAME_FORMAT_ENUM_VALUE - frame format selected is invalid
- * - IX_SSP_INVALID_DATA_SIZE_ENUM_VALUE - data size selected is invalid
- * - IX_SSP_INVALID_CLOCK_SOURCE_ENUM_VALUE - clock source selected is invalid
- * - IX_SSP_INVALID_TX_FIFO_THRESHOLD_ENUM_VALUE - Tx FIFO threshold level
- * selected is invalid
- * - IX_SSP_INVALID_RX_FIFO_THRESHOLD_ENUM_VALUE - Rx FIFO threshold level
- * selected is invalid
- * - IX_SSP_INVALID_SPI_PHASE_ENUM_VALUE - SPI phase selected is invalid
- * - IX_SSP_INVALID_SPI_POLARITY_ENUM_VALUE - SPI polarity selected is invalid
- * - IX_SSP_INVALID_MICROWIRE_CTL_CMD_ENUM_VALUE - microwire control command
- * size is invalid
- * - IX_SSP_INT_UNBIND_FAIL - interrupt handler failed to unbind SSP interrupt
- * - IX_SSP_INT_BIND_FAIL - interrupt handler failed to bind to SSP interrupt
- * hardware trigger
- * - IX_SSP_NOT_SUPORTED - hardware does not support SSP
- * - IX_SSP_NULL_POINTER - parameter passed in is NULL
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccInit (IxSspInitVars *initVarsSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccUninit (
- void)
- *
- * @brief Un-initializes the SSP Serial Port Access component
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will disable the SSP Serial Port hardware. The client can call the
- * init function again if they wish to enable the SSP.
- *
- * @return
- * - IX_SSP_SUCCESS - successfully uninit SSP component
- * - IX_SSP_INT_UNBIND_FAIL - interrupt handler failed to unbind SSP interrupt
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccUninit (void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccFIFODataSubmit (
- UINT16 *data,
- UINT32 amtOfData)
- *
- * @brief Inserts data into the SSP Serial Port's FIFO
- *
- * @param "UINT16 [in] *data" - pointer to the location to transmit the data
- * from
- * "UINT32 [in] amtOfData" - number of data to be transmitted.
- *
- * Global Data :
- * - None.
- *
- * This API will insert the amount of data specified by "amtOfData" from buffer
- * pointed to by "data" into the FIFO to be transmitted by the hardware.
- *
- * @return
- * - IX_SSP_SUCCESS - Data inserted successfully into FIFO
- * - IX_SSP_FAIL - FIFO insufficient space
- * - IX_SSP_NULL_POINTER - data pointer passed by client is NULL
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccFIFODataSubmit (
- UINT16* data,
- UINT32 amtOfData);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccFIFODataReceive (
- UINT16 *data,
- UINT32 amtOfData)
- *
- * @brief Extract data from the SSP Serial Port's FIFO
- *
- * @param "UINT16 [in] *data" - pointer to the location to receive the data into
- * "UINT32 [in] amtOfData" - number of data to be received.
- *
- * Global Data :
- * - None.
- *
- * This API will extract the amount of data specified by "amtOfData" from the
- * FIFO already received by the hardware into the buffer pointed to by "data".
- *
- * @return
- * - IX_SSP_SUCCESS - Data extracted successfully from FIFO
- * - IX_SSP_FAIL - FIFO has no data
- * - IX_SSP_NULL_POINTER - data pointer passed by client is NULL
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccFIFODataReceive (
- UINT16* data,
- UINT32 amtOfData);
-
-
-/**
- * Polling Functions
- */
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccTxFIFOHitOrBelowThresholdCheck (
- void)
- *
- * @brief Check if the Tx FIFO threshold has been hit or fallen below.
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will return whether the Tx FIFO threshold has been exceeded or not
- *
- * @return
- * - IX_SSP_TX_FIFO_HIT_BELOW_THRESHOLD - Tx FIFO level hit or below threshold .
- * - IX_SSP_TX_FIFO_EXCEED_THRESHOLD - Tx FIFO level exceeded threshold.
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccTxFIFOHitOrBelowThresholdCheck (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccRxFIFOHitOrAboveThresholdCheck (
- void)
- *
- * @brief Check if the Rx FIFO threshold has been hit or exceeded.
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will return whether the Rx FIFO level is below threshold or not
- *
- * @return
- * - IX_SSP_RX_FIFO_HIT_ABOVE_THRESHOLD - Rx FIFO level hit or exceeded threshold
- * - IX_SSP_RX_FIFO_BELOW_THRESHOLD - Rx FIFO level below threshold
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccRxFIFOHitOrAboveThresholdCheck (
- void);
-
-
-/**
- * Configuration functions
- *
- * NOTE: These configurations are not required to be called once init is called
- * unless configurations need to be changed on the fly.
- */
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccSSPPortStatusSet (
- IxSspAccPortStatus portStatusSelected)
- *
- * @brief Enables/disables the SSP Serial Port hardware.
- *
- * @param "IxSspAccPortStatus [in] portStatusSelected" - Set the SSP port to
- * enable or disable
- *
- * Global Data :
- * - None.
- *
- * This API will enable/disable the SSP Serial Port hardware.
- * NOTE: This function is called by init to enable the SSP after setting up the
- * configurations and by uninit to disable the SSP.
- *
- * @return
- * - IX_SSP_SUCCESS - Port status set with valid enum value
- * - IX_SSP_FAIL - invalid enum value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccSSPPortStatusSet (
- IxSspAccPortStatus portStatusSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccFrameFormatSelect (
- IxSspAccFrameFormat frameFormatSelected)
- *
- * @brief Sets the frame format for the SSP Serial Port hardware
- *
- * @param "IxSspAccFrameFormat [in] frameFormatSelected" - The frame format of
- * SPI, SSP or Microwire can be selected as the format
- *
- * Global Data :
- * - None.
- *
- * This API will set the format for the transfers via user input.
- * *NOTE*: The SSP hardware will be disabled to clear the FIFOs. Then its
- * previous state (enabled/disabled) restored after changing the format.
- *
- * @return
- * - IX_SSP_SUCCESS - frame format set with valid enum value
- * - IX_SSP_INVALID_FRAME_FORMAT_ENUM_VALUE - invalid frame format value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccFrameFormatSelect (
- IxSspAccFrameFormat frameFormatSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccDataSizeSelect (
- IxSspAccDataSize dataSizeSelected)
- *
- * @brief Sets the data size for transfers
- *
- * @param "IxSspAccDataSize [in] dataSizeSelected" - The data size between 4
- * and 16 that can be selected for data transfers
- *
- * Global Data :
- * - None.
- *
- * This API will set the data size for the transfers via user input. It will
- * disallow the change of the data size if either of the Rx/Tx FIFO is not
- * empty to prevent data loss.
- * *NOTE*: The SSP port will be disabled if the FIFOs are found to be empty and
- * if between the check and disabling of the SSP (which clears the
- * FIFOs) data is received into the FIFO, it might be lost.
- * *NOTE*: The FIFOs can be cleared by disabling the SSP Port if necessary to
- * force the data size change.
- *
- * @return
- * - IX_SSP_SUCCESS - data size set with valid enum value
- * - IX_SSP_RX_FIFO_NOT_EMPTY - Rx FIFO not empty, data size change is not
- * allowed.
- * - IX_SSP_TX_FIFO_NOT_EMPTY - Tx FIFO not empty, data size change is not
- * allowed.
- * - IX_SSP_INVALID_DATA_SIZE_ENUM_VALUE - invalid enum value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccDataSizeSelect (
- IxSspAccDataSize dataSizeSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccClockSourceSelect(
- IxSspAccClkSource clkSourceSelected)
- *
- * @brief Sets the clock source of the SSP Serial Port hardware
- *
- * @param "IxSspAccClkSource [in] clkSourceSelected" - The clock source from
- * either external source on on-chip can be selected as the source
- *
- * Global Data :
- * - None.
- *
- * This API will set the clock source for the transfers via user input.
- *
- * @return
- * - IX_SSP_SUCCESS - clock source set with valid enum value
- * - IX_SSP_INVALID_CLOCK_SOURCE_ENUM_VALUE - invalid enum value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccClockSourceSelect (
- IxSspAccClkSource clkSourceSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccSerialClockRateConfigure (
- UINT8 serialClockRateSelected)
- *
- * @brief Sets the on-chip Serial Clock Rate of the SSP Serial Port hardware.
- *
- * @param "UINT8 [in] serialClockRateSelected" - The serial clock rate that can
- * be set is between 7.2Kbps and 1.8432Mbps. The formula used is
- * Bit rate = 3.6864x10^6 / (2 x (SerialClockRateSelected + 1))
- *
- * Global Data :
- * - None.
- *
- * This API will set the serial clock rate for the transfers via user input.
- *
- * @return
- * - IX_SSP_SUCCESS - Serial clock rate configured successfully
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccSerialClockRateConfigure (
- UINT8 serialClockRateSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccRxFIFOIntEnable (
- RxFIFOThresholdHandler rxFIFOIntrHandler)
- *
- * @brief Enables service request interrupt whenever the Rx FIFO hits its
- * threshold
- *
- * @param "void [in] *rxFIFOIntrHandler(UINT32)" - function pointer to the
- * interrupt handler for the Rx FIFO exceeded.
- *
- * Global Data :
- * - None.
- *
- * This API will enable the service request interrupt for the Rx FIFO
- *
- * @return
- * - IX_SSP_SUCCESS - Rx FIFO level interrupt enabled successfully
- * - IX_SSP_RX_FIFO_HANDLER_MISSING - missing handler for Rx FIFO level interrupt
- * - IX_SSP_POLL_MODE_BLOCKING - poll mode is selected at init, interrupt not
- * allowed to be enabled. Use init to enable interrupt mode.
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccRxFIFOIntEnable (
- RxFIFOThresholdHandler rxFIFOIntrHandler);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccRxFIFOIntDisable (
- void)
- *
- * @brief Disables service request interrupt of the Rx FIFO.
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will disable the service request interrupt of the Rx FIFO.
- *
- * @return
- * - IX_SSP_SUCCESS - Rx FIFO Interrupt disabled successfully
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccRxFIFOIntDisable (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccTxFIFOIntEnable (
- TxFIFOThresholdHandler txFIFOIntrHandler)
- *
- * @brief Enables service request interrupt of the Tx FIFO.
- *
- * @param "void [in] *txFIFOIntrHandler(UINT32)" - function pointer to the
- * interrupt handler for the Tx FIFO exceeded.
- *
- * Global Data :
- * - None.
- *
- * This API will enable the service request interrupt of the Tx FIFO.
- *
- * @return
- * - IX_SSP_SUCCESS - Tx FIFO level interrupt enabled successfully
- * - IX_SSP_TX_FIFO_HANDLER_MISSING - missing handler for Tx FIFO level interrupt
- * - IX_SSP_POLL_MODE_BLOCKING - poll mode is selected at init, interrupt not
- * allowed to be enabled. Use init to enable interrupt mode.
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccTxFIFOIntEnable (
- TxFIFOThresholdHandler txFIFOIntrHandler);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccTxFIFOIntDisable (
- void)
- *
- * @brief Disables service request interrupt of the Tx FIFO
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will disable the service request interrupt of the Tx FIFO
- *
- * @return
- * - IX_SSP_SUCCESS - Tx FIFO Interrupt disabled successfuly.
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccTxFIFOIntDisable (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccLoopbackEnable (
- BOOL loopbackEnable)
- *
- * @brief Enables/disables the loopback mode
- *
- * @param "BOOL [in] loopbackEnable" - True to enable and false to disable.
- *
- * Global Data :
- * - None.
- *
- * This API will set the mode of operation to either loopback or normal mode
- * according to the user input.
- *
- * @return
- * - IX_SSP_SUCCESS - Loopback enabled successfully
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccLoopbackEnable (
- BOOL loopbackEnable);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccSpiSclkPolaritySet (
- IxSspAccSpiSclkPolarity spiSclkPolaritySelected)
- *
- * @brief Sets the SPI SCLK Polarity to Low or High
- *
- * @param - "IxSspAccSpiSclkPolarity [in] spiSclkPolaritySelected" - SPI SCLK
- * polarity that can be selected to either high or low
- *
- * Global Data :
- * - None.
- *
- * This API is only used for the SPI frame format and will set the SPI SCLK polarity
- * to either low or high
- *
- * @return
- * - IX_SSP_SUCCESS - SPI Sclk polarity set with valid enum value
- * - IX_SSP_INVALID_SPI_POLARITY_ENUM_VALUE - invalid SPI polarity value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccSpiSclkPolaritySet (
- IxSspAccSpiSclkPolarity spiSclkPolaritySelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccSpiSclkPhaseSet (
- IxSspAccSpiSclkPhase spiSclkPhaseSelected)
- *
- * @brief Sets the SPI SCLK Phase
- *
- * @param "IxSspAccSpiSclkPhase [in] spiSclkPhaseSelected" - Phase of either
- * the SCLK is inactive one cycle at the start of a frame and 1/2
- * cycle at the end of a frame, OR
- * the SCLK is inactive 1/2 cycle at the start of a frame and one
- * cycle at the end of a frame.
- *
- * Global Data :
- * - IX_SSP_SUCCESS - SPI Sclk phase set with valid enum value
- * - IX_SSP_INVALID_SPI_PHASE_ENUM_VALUE - invalid SPI phase value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * This API is only used for the SPI frame format and will set the SPI SCLK
- * phase according to user input.
- *
- * @return
- * - None
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccSpiSclkPhaseSet (
- IxSspAccSpiSclkPhase spiSclkPhaseSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccMicrowireControlWordSet (
- IxSspAccMicrowireCtlWord microwireCtlWordSelected)
- *
- * @brief Sets the Microwire control word to 8 or 16 bit format
- *
- * @param "IxSspAccMicrowireCtlWord [in] microwireCtlWordSelected" - Microwire
- * control word format can be either 8 or 16 bit format
- *
- * Global Data :
- * - None.
- *
- * This API is only used for the Microwire frame format and will set the
- * control word to 8 or 16 bit format
- *
- * @return
- * - IX_SSP_SUCCESS - Microwire Control Word set with valid enum value
- * - IX_SSP_TX_FIFO_NOT_EMPTY - Tx FIFO not empty, data size change is not
- * allowed.
- * - IX_SSP_INVALID_MICROWIRE_CTL_CMD_ENUM_VALUE - invalid enum value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccMicrowireControlWordSet (
- IxSspAccMicrowireCtlWord microwireCtlWordSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccTxFIFOThresholdSet (
- IxSspAccFifoThreshold txFIFOThresholdSelected)
- *
- * @brief Sets the Tx FIFO Threshold.
- *
- * @param "IxSspAccFifoThreshold [in] txFIFOThresholdSelected" - Threshold that
- * is set for a Tx FIFO service request to be triggered
- *
- * Global Data :
- * - None.
- *
- * This API will set the threshold for a Tx FIFO threshold to be triggered
- *
- * @return
- * - IX_SSP_SUCCESS - Tx FIFO Threshold set with valid enum value
- * - IX_SSP_INVALID_TX_FIFO_THRESHOLD_ENUM_VALUE - invalid enum value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccTxFIFOThresholdSet (
- IxSspAccFifoThreshold txFIFOThresholdSelected);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccRxFIFOThresholdSet (
- IxSspAccFifoThreshold rxFIFOThresholdSelected)
- *
- * @brief Sets the Rx FIFO Threshold.
- *
- * @param "IxSspAccFifoThreshold [in] rxFIFOThresholdSelected" - Threshold that
- * is set for a Tx FIFO service request to be triggered
- *
- * Global Data :
- * - None.
- *
- * This API will will set the threshold for a Rx FIFO threshold to be triggered
- *
- * @return
- * - IX_SSP_SUCCESS - Rx FIFO Threshold set with valid enum value
- * - IX_SSP_INVALID_RX_FIFO_THRESHOLD_ENUM_VALUE - invalid enum value
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccRxFIFOThresholdSet (
- IxSspAccFifoThreshold rxFIFOThresholdSelected);
-
-
-/**
- * Debug functions
- */
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccStatsGet (
- IxSspAccStatsCounters *sspStats)
- *
- * @brief Returns the SSP Statistics through the pointer passed in
- *
- * @param "IxSspAccStatsCounters [in] *sspStats" - SSP statistics counter will
- * be read and written to the location pointed by this pointer.
- *
- * Global Data :
- * - None.
- *
- * This API will return the statistics counters of the SSP transfers.
- *
- * @return
- * - IX_SSP_SUCCESS - Stats obtained into the pointer provided successfully
- * - IX_SSP_FAIL - client provided pointer is NULL
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccStatsGet (
- IxSspAccStatsCounters *sspStats);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccStatsReset (
- void)
- *
- * @brief Resets the SSP Statistics
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will reset the SSP statistics counters.
- *
- * @return
- * - None
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC void
-ixSspAccStatsReset (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccShow (
- void)
- *
- * @brief Display SSP status registers and statistics counters.
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will display the status registers of the SSP and the statistics
- * counters.
- *
- * @return
- * - IX_SSP_SUCCESS - SSP show called successfully.
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccShow (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccSSPBusyCheck (
- void)
- *
- * @brief Determine the state of the SSP serial port hardware.
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will return the state of the SSP serial port hardware - busy or
- * idle
- *
- * @return
- * - IX_SSP_BUSY - SSP is busy
- * - IX_SSP_IDLE - SSP is idle.
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccSSPBusyCheck (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccTxFIFOLevelGet (
- void)
- *
- * @brief Obtain the Tx FIFO's level
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will return the level of the Tx FIFO
- *
- * @return
- * - 0..16; 0 can also mean SSP not initialized and will need to be init.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC UINT8
-ixSspAccTxFIFOLevelGet (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccRxFIFOLevelGet (
- void)
- *
- * @brief Obtain the Rx FIFO's level
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will return the level of the Rx FIFO
- *
- * @return
- * - 0..16; 0 can also mean SSP not initialized and will need to be init.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC UINT8
-ixSspAccRxFIFOLevelGet (
- void);
-
-/**
- * @ingroup IxSspAcc
- *
- * @fn ixSspAccRxFIFOOverrunCheck (
- void)
- *
- * @brief Check if the Rx FIFO has overrun its FIFOs
- *
- * @param - None
- *
- * Global Data :
- * - None.
- *
- * This API will return whether the Rx FIFO has overrun its 16 FIFOs
- *
- * @return
- * - IX_SSP_OVERRUN_OCCURRED - Rx FIFO overrun occurred
- * - IX_SSP_NO_OVERRUN - Rx FIFO did not overrun
- * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
- *
- * @li Reentrant : yes
- * @li ISR Callable : yes
- *
- */
-PUBLIC IX_SSP_STATUS
-ixSspAccRxFIFOOverrunCheck (
- void);
-
-#endif /* __ixp46X */
-#endif /* IXSSPACC_H */
+/**
+ * @file IxSspAcc.h
+ *
+ * @brief Header file for the IXP400 SSP Serial Port Access (IxSspAcc)
+ *
+ * @version $Revision: 1.1.1.1 $
+ *
+ * @par
+ * IXP400 SW Release version 2.0
+ *
+ * -- Copyright Notice --
+ *
+ * @par
+ * Copyright 2001-2005, Intel Corporation.
+ * All rights reserved.
+ *
+ * @par
+ * 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 Intel Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * @par
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
+ *
+ * @par
+ * -- End of Copyright Notice --
+ */
+
+/**
+ * @defgroup IxSspAcc IXP400 SSP Serial Port Access (IxSspAcc) API
+ *
+ * @brief IXP400 SSP Serial Port Access Public API
+ *
+ * @{
+ */
+#ifndef IXSSPACC_H
+#define IXSSPACC_H
+
+#ifdef __ixp46X
+
+#include "IxOsal.h"
+
+/*
+ * Section for enum
+ */
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccDataSize
+ *
+ * @brief The data sizes in bits that are supported by the protocol
+ */
+typedef enum
+{
+ DATA_SIZE_TOO_SMALL = 0x2,
+ DATA_SIZE_4 = 0x3,
+ DATA_SIZE_5,
+ DATA_SIZE_6,
+ DATA_SIZE_7,
+ DATA_SIZE_8,
+ DATA_SIZE_9,
+ DATA_SIZE_10,
+ DATA_SIZE_11,
+ DATA_SIZE_12,
+ DATA_SIZE_13,
+ DATA_SIZE_14,
+ DATA_SIZE_15,
+ DATA_SIZE_16,
+ DATA_SIZE_TOO_BIG
+} IxSspAccDataSize;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccPortStatus
+ *
+ * @brief The status of the SSP port to be set to enable/disable
+ */
+typedef enum
+{
+ SSP_PORT_DISABLE = 0x0,
+ SSP_PORT_ENABLE,
+ INVALID_SSP_PORT_STATUS
+} IxSspAccPortStatus;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccFrameFormat
+ *
+ * @brief The frame format that is to be used - SPI, SSP, or Microwire
+ */
+typedef enum
+{
+ SPI_FORMAT = 0x0,
+ SSP_FORMAT,
+ MICROWIRE_FORMAT,
+ INVALID_FORMAT
+} IxSspAccFrameFormat;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccClkSource
+ *
+ * @brief The source to produce the SSP serial clock
+ */
+typedef enum
+{
+ ON_CHIP_CLK = 0x0,
+ EXTERNAL_CLK,
+ INVALID_CLK_SOURCE
+} IxSspAccClkSource;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccSpiSclkPhase
+ *
+ * @brief The SPI SCLK Phase:
+ * 0 - SCLK is inactive one cycle at the start of a frame and 1/2 cycle at the
+ * end of a frame.
+ * 1 - SCLK is inactive 1/2 cycle at the start of a frame and one cycle at the
+ * end of a frame.
+ */
+typedef enum
+{
+ START_ONE_END_HALF = 0x0,
+ START_HALF_END_ONE,
+ INVALID_SPI_PHASE
+} IxSspAccSpiSclkPhase;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccSpiSclkPolarity
+ *
+ * @brief The SPI SCLK Polarity can be set to either low or high.
+ */
+typedef enum
+{
+ SPI_POLARITY_LOW = 0x0,
+ SPI_POLARITY_HIGH,
+ INVALID_SPI_POLARITY
+} IxSspAccSpiSclkPolarity;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccMicrowireCtlWord
+ *
+ * @brief The Microwire control word can be either 8 or 16 bit.
+ */
+typedef enum
+{
+ MICROWIRE_8_BIT = 0x0,
+ MICROWIRE_16_BIT,
+ INVALID_MICROWIRE_CTL_WORD
+} IxSspAccMicrowireCtlWord;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IxSspAccFifoThreshold
+ *
+ * @brief The threshold in frames (each frame is defined by IxSspAccDataSize)
+ * that can be set for the FIFO to trigger a threshold exceed when
+ * checking with the ExceedThresholdCheck functions or an interrupt
+ * when it is enabled.
+ */
+typedef enum
+{
+ FIFO_TSHLD_1 = 0x0,
+ FIFO_TSHLD_2,
+ FIFO_TSHLD_3,
+ FIFO_TSHLD_4,
+ FIFO_TSHLD_5,
+ FIFO_TSHLD_6,
+ FIFO_TSHLD_7,
+ FIFO_TSHLD_8,
+ FIFO_TSHLD_9,
+ FIFO_TSHLD_10,
+ FIFO_TSHLD_11,
+ FIFO_TSHLD_12,
+ FIFO_TSHLD_13,
+ FIFO_TSHLD_14,
+ FIFO_TSHLD_15,
+ FIFO_TSHLD_16,
+ INVALID_FIFO_TSHLD
+} IxSspAccFifoThreshold;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @enum IX_SSP_STATUS
+ *
+ * @brief The statuses that can be returned in a SSP Serial Port Access
+ */
+typedef enum
+{
+ IX_SSP_SUCCESS = IX_SUCCESS, /**< Success status */
+ IX_SSP_FAIL, /**< Fail status */
+ IX_SSP_RX_FIFO_OVERRUN_HANDLER_MISSING, /**<
+ Rx FIFO Overrun handler is NULL. */
+ IX_SSP_RX_FIFO_HANDLER_MISSING, /**<
+ Rx FIFO threshold hit or above handler is NULL
+ */
+ IX_SSP_TX_FIFO_HANDLER_MISSING, /**<
+ Tx FIFO threshold hit or below handler is NULL
+ */
+ IX_SSP_FIFO_NOT_EMPTY_FOR_SETTING_CTL_CMD, /**<
+ Tx FIFO not empty and therefore microwire
+ control command size setting is not allowed. */
+ IX_SSP_INVALID_FRAME_FORMAT_ENUM_VALUE, /**<
+ frame format selected is invalid. */
+ IX_SSP_INVALID_DATA_SIZE_ENUM_VALUE, /**<
+ data size selected is invalid. */
+ IX_SSP_INVALID_CLOCK_SOURCE_ENUM_VALUE, /**<
+ source clock selected is invalid. */
+ IX_SSP_INVALID_TX_FIFO_THRESHOLD_ENUM_VALUE, /**<
+ Tx FIFO threshold selected is invalid. */
+ IX_SSP_INVALID_RX_FIFO_THRESHOLD_ENUM_VALUE, /**<
+ Rx FIFO threshold selected is invalid. */
+ IX_SSP_INVALID_SPI_PHASE_ENUM_VALUE, /**<
+ SPI phase selected is invalid. */
+ IX_SSP_INVALID_SPI_POLARITY_ENUM_VALUE, /**<
+ SPI polarity selected is invalid. */
+ IX_SSP_INVALID_MICROWIRE_CTL_CMD_ENUM_VALUE, /**<
+ Microwire control command selected is invalid
+ */
+ IX_SSP_INT_UNBIND_FAIL, /**< Interrupt unbind fail to unbind SSP
+ interrupt */
+ IX_SSP_INT_BIND_FAIL, /**< Interrupt bind fail during init */
+ IX_SSP_RX_FIFO_NOT_EMPTY, /**<
+ Rx FIFO not empty while trying to change data
+ size. */
+ IX_SSP_TX_FIFO_NOT_EMPTY, /**<
+ Rx FIFO not empty while trying to change data
+ size or microwire control command size. */
+ IX_SSP_POLL_MODE_BLOCKING, /**<
+ poll mode selected blocks interrupt mode from
+ being selected. */
+ IX_SSP_TX_FIFO_HIT_BELOW_THRESHOLD, /**<
+ Tx FIFO level hit or below threshold. */
+ IX_SSP_TX_FIFO_EXCEED_THRESHOLD, /**<
+ Tx FIFO level exceeded threshold. */
+ IX_SSP_RX_FIFO_HIT_ABOVE_THRESHOLD, /**<
+ Rx FIFO level hit or exceeded threshold. */
+ IX_SSP_RX_FIFO_BELOW_THRESHOLD, /**<
+ Rx FIFO level below threshold. */
+ IX_SSP_BUSY, /**< SSP is busy. */
+ IX_SSP_IDLE, /**< SSP is idle. */
+ IX_SSP_OVERRUN_OCCURRED, /**<
+ SSP has experienced an overrun. */
+ IX_SSP_NO_OVERRUN, /**<
+ SSP did not experience an overrun. */
+ IX_SSP_NOT_SUPORTED, /**< hardware does not support SSP */
+ IX_SSP_NOT_INIT, /**< SSP Access not intialized */
+ IX_SSP_NULL_POINTER /**< parameter passed in is NULL */
+} IX_SSP_STATUS;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @brief SSP Rx FIFO Overrun handler
+ *
+ * This function is called for the client to handle Rx FIFO Overrun that occurs
+ * in the SSP hardware
+ */
+typedef void (*RxFIFOOverrunHandler)(void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @brief SSP Rx FIFO Threshold hit or above handler
+ *
+ * This function is called for the client to handle Rx FIFO threshold hit or
+ * or above that occurs in the SSP hardware
+ */
+typedef void (*RxFIFOThresholdHandler)(void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @brief SSP Tx FIFO Threshold hit or below handler
+ *
+ * This function is called for the client to handle Tx FIFO threshold hit or
+ * or below that occurs in the SSP hardware
+ */
+typedef void (*TxFIFOThresholdHandler)(void);
+
+
+/*
+ * Section for struct
+ */
+/**
+ * @ingroup IxSspAcc
+ *
+ * @brief contains all the variables required to initialize the SSP serial port
+ * hardware.
+ *
+ * Structure to be filled and used for calling initialization
+ */
+typedef struct
+{
+ IxSspAccFrameFormat FrameFormatSelected;/**<Select between SPI, SSP and
+ Microwire. */
+ IxSspAccDataSize DataSizeSelected; /**<Select between 4 and 16. */
+ IxSspAccClkSource ClkSourceSelected; /**<Select clock source to be
+ on-chip or external. */
+ IxSspAccFifoThreshold TxFIFOThresholdSelected;
+ /**<Select Tx FIFO threshold
+ between 1 to 16. */
+ IxSspAccFifoThreshold RxFIFOThresholdSelected;
+ /**<Select Rx FIFO threshold
+ between 1 to 16. */
+ BOOL RxFIFOIntrEnable; /**<Enable/disable Rx FIFO
+ threshold interrupt. Disabling
+ this interrupt will require
+ the use of the polling function
+ RxFIFOExceedThresholdCheck. */
+ BOOL TxFIFOIntrEnable; /**<Enable/disable Tx FIFO
+ threshold interrupt. Disabling
+ this interrupt will require
+ the use of the polling function
+ TxFIFOExceedThresholdCheck. */
+ RxFIFOThresholdHandler RxFIFOThsldHdlr; /**<Pointer to function to handle
+ a Rx FIFO interrupt. */
+ TxFIFOThresholdHandler TxFIFOThsldHdlr; /**<Pointer to function to handle
+ a Tx FIFO interrupt. */
+ RxFIFOOverrunHandler RxFIFOOverrunHdlr; /**<Pointer to function to handle
+ a Rx FIFO overrun interrupt. */
+ BOOL LoopbackEnable; /**<Select operation mode to be
+ normal or loopback mode. */
+ IxSspAccSpiSclkPhase SpiSclkPhaseSelected;
+ /**<Select SPI SCLK phase to start
+ with one inactive cycle and end
+ with 1/2 inactive cycle or
+ start with 1/2 inactive cycle
+ and end with one inactive
+ cycle. (Only used in
+ SPI format). */
+ IxSspAccSpiSclkPolarity SpiSclkPolaritySelected;
+ /**<Select SPI SCLK idle state
+ to be low or high. (Only used in
+ SPI format). */
+ IxSspAccMicrowireCtlWord MicrowireCtlWordSelected;
+ /**<Select Microwire control
+ format to be 8 or 16-bit. (Only
+ used in Microwire format). */
+ UINT8 SerialClkRateSelected; /**<Select between 0 (1.8432Mbps)
+ and 255 (7.2Kbps). The
+ formula used is Bit rate =
+ 3.6864x10^6 /
+ (2 x (SerialClkRateSelect + 1))
+ */
+} IxSspInitVars;
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @brief contains counters of the SSP statistics
+ *
+ * Structure contains all values of counters and associated overflows.
+ */
+typedef struct
+{
+ UINT32 ixSspRcvCounter; /**<Total frames received. */
+ UINT32 ixSspXmitCounter; /**<Total frames transmitted. */
+ UINT32 ixSspOverflowCounter;/**<Total occurrences of overflow. */
+} IxSspAccStatsCounters;
+
+
+/*
+ * Section for prototypes interface functions
+ */
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccInit (
+ IxSspInitVars *initVarsSelected);
+ *
+ * @brief Initializes the SSP Access module.
+ *
+ * @param "IxSspAccInitVars [in] *initVarsSelected" - struct containing required
+ * variables for initialization
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will initialize the SSP Serial Port hardware to the user specified
+ * configuration. Then it will enable the SSP Serial Port.
+ * *NOTE*: Once interrupt or polling mode is selected, the mode cannot be
+ * changed via the interrupt enable/disable function but the init needs to be
+ * called again to change it.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Successfully initialize and enable the SSP
+ * serial port.
+ * - IX_SSP_RX_FIFO_HANDLER_MISSING - interrupt mode is selected but RX FIFO
+ * handler pointer is NULL
+ * - IX_SSP_TX_FIFO_HANDLER_MISSING - interrupt mode is selected but TX FIFO
+ * handler pointer is NULL
+ * - IX_SSP_RX_FIFO_OVERRUN_HANDLER_MISSING - interrupt mode is selected but
+ * RX FIFO Overrun handler pointer is NULL
+ * - IX_SSP_RX_FIFO_NOT_EMPTY - Rx FIFO not empty, data size change is not
+ * allowed.
+ * - IX_SSP_TX_FIFO_NOT_EMPTY - Tx FIFO not empty, data size change is not
+ * allowed.
+ * - IX_SSP_INVALID_FRAME_FORMAT_ENUM_VALUE - frame format selected is invalid
+ * - IX_SSP_INVALID_DATA_SIZE_ENUM_VALUE - data size selected is invalid
+ * - IX_SSP_INVALID_CLOCK_SOURCE_ENUM_VALUE - clock source selected is invalid
+ * - IX_SSP_INVALID_TX_FIFO_THRESHOLD_ENUM_VALUE - Tx FIFO threshold level
+ * selected is invalid
+ * - IX_SSP_INVALID_RX_FIFO_THRESHOLD_ENUM_VALUE - Rx FIFO threshold level
+ * selected is invalid
+ * - IX_SSP_INVALID_SPI_PHASE_ENUM_VALUE - SPI phase selected is invalid
+ * - IX_SSP_INVALID_SPI_POLARITY_ENUM_VALUE - SPI polarity selected is invalid
+ * - IX_SSP_INVALID_MICROWIRE_CTL_CMD_ENUM_VALUE - microwire control command
+ * size is invalid
+ * - IX_SSP_INT_UNBIND_FAIL - interrupt handler failed to unbind SSP interrupt
+ * - IX_SSP_INT_BIND_FAIL - interrupt handler failed to bind to SSP interrupt
+ * hardware trigger
+ * - IX_SSP_NOT_SUPORTED - hardware does not support SSP
+ * - IX_SSP_NULL_POINTER - parameter passed in is NULL
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccInit (IxSspInitVars *initVarsSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccUninit (
+ void)
+ *
+ * @brief Un-initializes the SSP Serial Port Access component
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will disable the SSP Serial Port hardware. The client can call the
+ * init function again if they wish to enable the SSP.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - successfully uninit SSP component
+ * - IX_SSP_INT_UNBIND_FAIL - interrupt handler failed to unbind SSP interrupt
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccUninit (void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccFIFODataSubmit (
+ UINT16 *data,
+ UINT32 amtOfData)
+ *
+ * @brief Inserts data into the SSP Serial Port's FIFO
+ *
+ * @param "UINT16 [in] *data" - pointer to the location to transmit the data
+ * from
+ * "UINT32 [in] amtOfData" - number of data to be transmitted.
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will insert the amount of data specified by "amtOfData" from buffer
+ * pointed to by "data" into the FIFO to be transmitted by the hardware.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Data inserted successfully into FIFO
+ * - IX_SSP_FAIL - FIFO insufficient space
+ * - IX_SSP_NULL_POINTER - data pointer passed by client is NULL
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccFIFODataSubmit (
+ UINT16* data,
+ UINT32 amtOfData);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccFIFODataReceive (
+ UINT16 *data,
+ UINT32 amtOfData)
+ *
+ * @brief Extract data from the SSP Serial Port's FIFO
+ *
+ * @param "UINT16 [in] *data" - pointer to the location to receive the data into
+ * "UINT32 [in] amtOfData" - number of data to be received.
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will extract the amount of data specified by "amtOfData" from the
+ * FIFO already received by the hardware into the buffer pointed to by "data".
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Data extracted successfully from FIFO
+ * - IX_SSP_FAIL - FIFO has no data
+ * - IX_SSP_NULL_POINTER - data pointer passed by client is NULL
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccFIFODataReceive (
+ UINT16* data,
+ UINT32 amtOfData);
+
+
+/**
+ * Polling Functions
+ */
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccTxFIFOHitOrBelowThresholdCheck (
+ void)
+ *
+ * @brief Check if the Tx FIFO threshold has been hit or fallen below.
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return whether the Tx FIFO threshold has been exceeded or not
+ *
+ * @return
+ * - IX_SSP_TX_FIFO_HIT_BELOW_THRESHOLD - Tx FIFO level hit or below threshold .
+ * - IX_SSP_TX_FIFO_EXCEED_THRESHOLD - Tx FIFO level exceeded threshold.
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccTxFIFOHitOrBelowThresholdCheck (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccRxFIFOHitOrAboveThresholdCheck (
+ void)
+ *
+ * @brief Check if the Rx FIFO threshold has been hit or exceeded.
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return whether the Rx FIFO level is below threshold or not
+ *
+ * @return
+ * - IX_SSP_RX_FIFO_HIT_ABOVE_THRESHOLD - Rx FIFO level hit or exceeded threshold
+ * - IX_SSP_RX_FIFO_BELOW_THRESHOLD - Rx FIFO level below threshold
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccRxFIFOHitOrAboveThresholdCheck (
+ void);
+
+
+/**
+ * Configuration functions
+ *
+ * NOTE: These configurations are not required to be called once init is called
+ * unless configurations need to be changed on the fly.
+ */
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccSSPPortStatusSet (
+ IxSspAccPortStatus portStatusSelected)
+ *
+ * @brief Enables/disables the SSP Serial Port hardware.
+ *
+ * @param "IxSspAccPortStatus [in] portStatusSelected" - Set the SSP port to
+ * enable or disable
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will enable/disable the SSP Serial Port hardware.
+ * NOTE: This function is called by init to enable the SSP after setting up the
+ * configurations and by uninit to disable the SSP.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Port status set with valid enum value
+ * - IX_SSP_FAIL - invalid enum value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccSSPPortStatusSet (
+ IxSspAccPortStatus portStatusSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccFrameFormatSelect (
+ IxSspAccFrameFormat frameFormatSelected)
+ *
+ * @brief Sets the frame format for the SSP Serial Port hardware
+ *
+ * @param "IxSspAccFrameFormat [in] frameFormatSelected" - The frame format of
+ * SPI, SSP or Microwire can be selected as the format
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will set the format for the transfers via user input.
+ * *NOTE*: The SSP hardware will be disabled to clear the FIFOs. Then its
+ * previous state (enabled/disabled) restored after changing the format.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - frame format set with valid enum value
+ * - IX_SSP_INVALID_FRAME_FORMAT_ENUM_VALUE - invalid frame format value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccFrameFormatSelect (
+ IxSspAccFrameFormat frameFormatSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccDataSizeSelect (
+ IxSspAccDataSize dataSizeSelected)
+ *
+ * @brief Sets the data size for transfers
+ *
+ * @param "IxSspAccDataSize [in] dataSizeSelected" - The data size between 4
+ * and 16 that can be selected for data transfers
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will set the data size for the transfers via user input. It will
+ * disallow the change of the data size if either of the Rx/Tx FIFO is not
+ * empty to prevent data loss.
+ * *NOTE*: The SSP port will be disabled if the FIFOs are found to be empty and
+ * if between the check and disabling of the SSP (which clears the
+ * FIFOs) data is received into the FIFO, it might be lost.
+ * *NOTE*: The FIFOs can be cleared by disabling the SSP Port if necessary to
+ * force the data size change.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - data size set with valid enum value
+ * - IX_SSP_RX_FIFO_NOT_EMPTY - Rx FIFO not empty, data size change is not
+ * allowed.
+ * - IX_SSP_TX_FIFO_NOT_EMPTY - Tx FIFO not empty, data size change is not
+ * allowed.
+ * - IX_SSP_INVALID_DATA_SIZE_ENUM_VALUE - invalid enum value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccDataSizeSelect (
+ IxSspAccDataSize dataSizeSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccClockSourceSelect(
+ IxSspAccClkSource clkSourceSelected)
+ *
+ * @brief Sets the clock source of the SSP Serial Port hardware
+ *
+ * @param "IxSspAccClkSource [in] clkSourceSelected" - The clock source from
+ * either external source on on-chip can be selected as the source
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will set the clock source for the transfers via user input.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - clock source set with valid enum value
+ * - IX_SSP_INVALID_CLOCK_SOURCE_ENUM_VALUE - invalid enum value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccClockSourceSelect (
+ IxSspAccClkSource clkSourceSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccSerialClockRateConfigure (
+ UINT8 serialClockRateSelected)
+ *
+ * @brief Sets the on-chip Serial Clock Rate of the SSP Serial Port hardware.
+ *
+ * @param "UINT8 [in] serialClockRateSelected" - The serial clock rate that can
+ * be set is between 7.2Kbps and 1.8432Mbps. The formula used is
+ * Bit rate = 3.6864x10^6 / (2 x (SerialClockRateSelected + 1))
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will set the serial clock rate for the transfers via user input.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Serial clock rate configured successfully
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccSerialClockRateConfigure (
+ UINT8 serialClockRateSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccRxFIFOIntEnable (
+ RxFIFOThresholdHandler rxFIFOIntrHandler)
+ *
+ * @brief Enables service request interrupt whenever the Rx FIFO hits its
+ * threshold
+ *
+ * @param "void [in] *rxFIFOIntrHandler(UINT32)" - function pointer to the
+ * interrupt handler for the Rx FIFO exceeded.
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will enable the service request interrupt for the Rx FIFO
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Rx FIFO level interrupt enabled successfully
+ * - IX_SSP_RX_FIFO_HANDLER_MISSING - missing handler for Rx FIFO level interrupt
+ * - IX_SSP_POLL_MODE_BLOCKING - poll mode is selected at init, interrupt not
+ * allowed to be enabled. Use init to enable interrupt mode.
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccRxFIFOIntEnable (
+ RxFIFOThresholdHandler rxFIFOIntrHandler);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccRxFIFOIntDisable (
+ void)
+ *
+ * @brief Disables service request interrupt of the Rx FIFO.
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will disable the service request interrupt of the Rx FIFO.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Rx FIFO Interrupt disabled successfully
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccRxFIFOIntDisable (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccTxFIFOIntEnable (
+ TxFIFOThresholdHandler txFIFOIntrHandler)
+ *
+ * @brief Enables service request interrupt of the Tx FIFO.
+ *
+ * @param "void [in] *txFIFOIntrHandler(UINT32)" - function pointer to the
+ * interrupt handler for the Tx FIFO exceeded.
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will enable the service request interrupt of the Tx FIFO.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Tx FIFO level interrupt enabled successfully
+ * - IX_SSP_TX_FIFO_HANDLER_MISSING - missing handler for Tx FIFO level interrupt
+ * - IX_SSP_POLL_MODE_BLOCKING - poll mode is selected at init, interrupt not
+ * allowed to be enabled. Use init to enable interrupt mode.
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccTxFIFOIntEnable (
+ TxFIFOThresholdHandler txFIFOIntrHandler);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccTxFIFOIntDisable (
+ void)
+ *
+ * @brief Disables service request interrupt of the Tx FIFO
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will disable the service request interrupt of the Tx FIFO
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Tx FIFO Interrupt disabled successfuly.
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccTxFIFOIntDisable (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccLoopbackEnable (
+ BOOL loopbackEnable)
+ *
+ * @brief Enables/disables the loopback mode
+ *
+ * @param "BOOL [in] loopbackEnable" - True to enable and false to disable.
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will set the mode of operation to either loopback or normal mode
+ * according to the user input.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Loopback enabled successfully
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccLoopbackEnable (
+ BOOL loopbackEnable);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccSpiSclkPolaritySet (
+ IxSspAccSpiSclkPolarity spiSclkPolaritySelected)
+ *
+ * @brief Sets the SPI SCLK Polarity to Low or High
+ *
+ * @param - "IxSspAccSpiSclkPolarity [in] spiSclkPolaritySelected" - SPI SCLK
+ * polarity that can be selected to either high or low
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API is only used for the SPI frame format and will set the SPI SCLK polarity
+ * to either low or high
+ *
+ * @return
+ * - IX_SSP_SUCCESS - SPI Sclk polarity set with valid enum value
+ * - IX_SSP_INVALID_SPI_POLARITY_ENUM_VALUE - invalid SPI polarity value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccSpiSclkPolaritySet (
+ IxSspAccSpiSclkPolarity spiSclkPolaritySelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccSpiSclkPhaseSet (
+ IxSspAccSpiSclkPhase spiSclkPhaseSelected)
+ *
+ * @brief Sets the SPI SCLK Phase
+ *
+ * @param "IxSspAccSpiSclkPhase [in] spiSclkPhaseSelected" - Phase of either
+ * the SCLK is inactive one cycle at the start of a frame and 1/2
+ * cycle at the end of a frame, OR
+ * the SCLK is inactive 1/2 cycle at the start of a frame and one
+ * cycle at the end of a frame.
+ *
+ * Global Data :
+ * - IX_SSP_SUCCESS - SPI Sclk phase set with valid enum value
+ * - IX_SSP_INVALID_SPI_PHASE_ENUM_VALUE - invalid SPI phase value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * This API is only used for the SPI frame format and will set the SPI SCLK
+ * phase according to user input.
+ *
+ * @return
+ * - None
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccSpiSclkPhaseSet (
+ IxSspAccSpiSclkPhase spiSclkPhaseSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccMicrowireControlWordSet (
+ IxSspAccMicrowireCtlWord microwireCtlWordSelected)
+ *
+ * @brief Sets the Microwire control word to 8 or 16 bit format
+ *
+ * @param "IxSspAccMicrowireCtlWord [in] microwireCtlWordSelected" - Microwire
+ * control word format can be either 8 or 16 bit format
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API is only used for the Microwire frame format and will set the
+ * control word to 8 or 16 bit format
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Microwire Control Word set with valid enum value
+ * - IX_SSP_TX_FIFO_NOT_EMPTY - Tx FIFO not empty, data size change is not
+ * allowed.
+ * - IX_SSP_INVALID_MICROWIRE_CTL_CMD_ENUM_VALUE - invalid enum value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccMicrowireControlWordSet (
+ IxSspAccMicrowireCtlWord microwireCtlWordSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccTxFIFOThresholdSet (
+ IxSspAccFifoThreshold txFIFOThresholdSelected)
+ *
+ * @brief Sets the Tx FIFO Threshold.
+ *
+ * @param "IxSspAccFifoThreshold [in] txFIFOThresholdSelected" - Threshold that
+ * is set for a Tx FIFO service request to be triggered
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will set the threshold for a Tx FIFO threshold to be triggered
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Tx FIFO Threshold set with valid enum value
+ * - IX_SSP_INVALID_TX_FIFO_THRESHOLD_ENUM_VALUE - invalid enum value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccTxFIFOThresholdSet (
+ IxSspAccFifoThreshold txFIFOThresholdSelected);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccRxFIFOThresholdSet (
+ IxSspAccFifoThreshold rxFIFOThresholdSelected)
+ *
+ * @brief Sets the Rx FIFO Threshold.
+ *
+ * @param "IxSspAccFifoThreshold [in] rxFIFOThresholdSelected" - Threshold that
+ * is set for a Tx FIFO service request to be triggered
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will will set the threshold for a Rx FIFO threshold to be triggered
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Rx FIFO Threshold set with valid enum value
+ * - IX_SSP_INVALID_RX_FIFO_THRESHOLD_ENUM_VALUE - invalid enum value
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccRxFIFOThresholdSet (
+ IxSspAccFifoThreshold rxFIFOThresholdSelected);
+
+
+/**
+ * Debug functions
+ */
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccStatsGet (
+ IxSspAccStatsCounters *sspStats)
+ *
+ * @brief Returns the SSP Statistics through the pointer passed in
+ *
+ * @param "IxSspAccStatsCounters [in] *sspStats" - SSP statistics counter will
+ * be read and written to the location pointed by this pointer.
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return the statistics counters of the SSP transfers.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - Stats obtained into the pointer provided successfully
+ * - IX_SSP_FAIL - client provided pointer is NULL
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccStatsGet (
+ IxSspAccStatsCounters *sspStats);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccStatsReset (
+ void)
+ *
+ * @brief Resets the SSP Statistics
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will reset the SSP statistics counters.
+ *
+ * @return
+ * - None
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC void
+ixSspAccStatsReset (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccShow (
+ void)
+ *
+ * @brief Display SSP status registers and statistics counters.
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will display the status registers of the SSP and the statistics
+ * counters.
+ *
+ * @return
+ * - IX_SSP_SUCCESS - SSP show called successfully.
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccShow (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccSSPBusyCheck (
+ void)
+ *
+ * @brief Determine the state of the SSP serial port hardware.
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return the state of the SSP serial port hardware - busy or
+ * idle
+ *
+ * @return
+ * - IX_SSP_BUSY - SSP is busy
+ * - IX_SSP_IDLE - SSP is idle.
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccSSPBusyCheck (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccTxFIFOLevelGet (
+ void)
+ *
+ * @brief Obtain the Tx FIFO's level
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return the level of the Tx FIFO
+ *
+ * @return
+ * - 0..16; 0 can also mean SSP not initialized and will need to be init.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC UINT8
+ixSspAccTxFIFOLevelGet (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccRxFIFOLevelGet (
+ void)
+ *
+ * @brief Obtain the Rx FIFO's level
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return the level of the Rx FIFO
+ *
+ * @return
+ * - 0..16; 0 can also mean SSP not initialized and will need to be init.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC UINT8
+ixSspAccRxFIFOLevelGet (
+ void);
+
+/**
+ * @ingroup IxSspAcc
+ *
+ * @fn ixSspAccRxFIFOOverrunCheck (
+ void)
+ *
+ * @brief Check if the Rx FIFO has overrun its FIFOs
+ *
+ * @param - None
+ *
+ * Global Data :
+ * - None.
+ *
+ * This API will return whether the Rx FIFO has overrun its 16 FIFOs
+ *
+ * @return
+ * - IX_SSP_OVERRUN_OCCURRED - Rx FIFO overrun occurred
+ * - IX_SSP_NO_OVERRUN - Rx FIFO did not overrun
+ * - IX_SSP_NOT_INIT - SSP not initialized. SSP init needs to be called.
+ *
+ * @li Reentrant : yes
+ * @li ISR Callable : yes
+ *
+ */
+PUBLIC IX_SSP_STATUS
+ixSspAccRxFIFOOverrunCheck (
+ void);
+
+#endif /* __ixp46X */
+#endif /* IXSSPACC_H */
diff -Naur u-boot-2009.03_orig/cpu/leon2/CVS/Entries u-boot-2009.03/cpu/leon2/CVS/Entries
--- u-boot-2009.03_orig/cpu/leon2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon2/CVS/Entries 2009-03-25 15:57:55.043677900 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/prom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/leon2/CVS/Entries.Extra u-boot-2009.03/cpu/leon2/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/leon2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon2/CVS/Entries.Extra 2009-03-25 15:57:55.043677900 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019721/
+/config.mk///1238019721/
+/cpu.c///1238019721/
+/cpu_init.c///1238019721/
+/interrupts.c///1238019721/
+/prom.c///1238019721/
+/serial.c///1238019721/
+/start.S///1238019721/
diff -Naur u-boot-2009.03_orig/cpu/leon2/CVS/Entries.Extra.Old u-boot-2009.03/cpu/leon2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/leon2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon2/CVS/Entries.Extra.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019721/
+/config.mk///1238019721/
+/cpu.c///1238019721/
+/cpu_init.c///1238019721/
+/interrupts.c///1238019721/
+/prom.c///1238019721/
+/serial.c///1238019721/
+/start.S///1238019721/
diff -Naur u-boot-2009.03_orig/cpu/leon2/CVS/Entries.Old u-boot-2009.03/cpu/leon2/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/leon2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon2/CVS/Entries.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:01 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:01 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:01 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:01 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:01 2009//
+/prom.c/1.1.1.1/Wed Mar 25 22:22:01 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:01 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:01 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/leon2/CVS/Repository u-boot-2009.03/cpu/leon2/CVS/Repository
--- u-boot-2009.03_orig/cpu/leon2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon2/CVS/Repository 2009-03-25 15:25:17.181208300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/leon2
diff -Naur u-boot-2009.03_orig/cpu/leon2/CVS/Root u-boot-2009.03/cpu/leon2/CVS/Root
--- u-boot-2009.03_orig/cpu/leon2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon2/CVS/Root 2009-03-25 15:25:17.165583400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/leon3/CVS/Entries u-boot-2009.03/cpu/leon3/CVS/Entries
--- u-boot-2009.03_orig/cpu/leon3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon3/CVS/Entries 2009-03-25 15:57:55.168677100 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ambapp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/prom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_uhci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_uhci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/leon3/CVS/Entries.Extra u-boot-2009.03/cpu/leon3/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/leon3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon3/CVS/Entries.Extra 2009-03-25 15:57:55.168677100 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019722/
+/ambapp.c///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/prom.c///1238019722/
+/serial.c///1238019722/
+/start.S///1238019722/
+/usb_uhci.c///1238019722/
+/usb_uhci.h///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/leon3/CVS/Entries.Extra.Old u-boot-2009.03/cpu/leon3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/leon3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon3/CVS/Entries.Extra.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019722/
+/ambapp.c///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/prom.c///1238019722/
+/serial.c///1238019722/
+/start.S///1238019722/
+/usb_uhci.c///1238019722/
+/usb_uhci.h///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/leon3/CVS/Entries.Old u-boot-2009.03/cpu/leon3/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/leon3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon3/CVS/Entries.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/ambapp.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/prom.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/usb_uhci.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/usb_uhci.h/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/leon3/CVS/Repository u-boot-2009.03/cpu/leon3/CVS/Repository
--- u-boot-2009.03_orig/cpu/leon3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon3/CVS/Repository 2009-03-25 15:25:17.306207500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/leon3
diff -Naur u-boot-2009.03_orig/cpu/leon3/CVS/Root u-boot-2009.03/cpu/leon3/CVS/Root
--- u-boot-2009.03_orig/cpu/leon3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/leon3/CVS/Root 2009-03-25 15:25:17.306207500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries u-boot-2009.03/cpu/lh7a40x/CVS/Entries
--- u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/lh7a40x/CVS/Entries 2009-03-25 15:57:55.278051400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries.Extra u-boot-2009.03/cpu/lh7a40x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/lh7a40x/CVS/Entries.Extra 2009-03-25 15:57:55.278051400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/interrupts.c///1238019722/
+/serial.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/lh7a40x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/lh7a40x/CVS/Entries.Extra.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/interrupts.c///1238019722/
+/serial.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries.Old u-boot-2009.03/cpu/lh7a40x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/lh7a40x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/lh7a40x/CVS/Entries.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/lh7a40x/CVS/Repository u-boot-2009.03/cpu/lh7a40x/CVS/Repository
--- u-boot-2009.03_orig/cpu/lh7a40x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/lh7a40x/CVS/Repository 2009-03-25 15:25:17.524956100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/lh7a40x
diff -Naur u-boot-2009.03_orig/cpu/lh7a40x/CVS/Root u-boot-2009.03/cpu/lh7a40x/CVS/Root
--- u-boot-2009.03_orig/cpu/lh7a40x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/lh7a40x/CVS/Root 2009-03-25 15:25:17.524956100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries u-boot-2009.03/cpu/mcf5227x/CVS/Entries
--- u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5227x/CVS/Entries 2009-03-25 15:57:55.371800800 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dspi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries.Extra u-boot-2009.03/cpu/mcf5227x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5227x/CVS/Entries.Extra 2009-03-25 15:57:55.371800800 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/dspi.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mcf5227x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5227x/CVS/Entries.Extra.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/dspi.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries.Old u-boot-2009.03/cpu/mcf5227x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mcf5227x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5227x/CVS/Entries.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/dspi.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf5227x/CVS/Repository u-boot-2009.03/cpu/mcf5227x/CVS/Repository
--- u-boot-2009.03_orig/cpu/mcf5227x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5227x/CVS/Repository 2009-03-25 15:25:17.665580200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mcf5227x
diff -Naur u-boot-2009.03_orig/cpu/mcf5227x/CVS/Root u-boot-2009.03/cpu/mcf5227x/CVS/Root
--- u-boot-2009.03_orig/cpu/mcf5227x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5227x/CVS/Root 2009-03-25 15:25:17.665580200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries u-boot-2009.03/cpu/mcf523x/CVS/Entries
--- u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf523x/CVS/Entries 2009-03-25 15:57:55.465550200 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries.Extra u-boot-2009.03/cpu/mcf523x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf523x/CVS/Entries.Extra 2009-03-25 15:57:55.481175100 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mcf523x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf523x/CVS/Entries.Extra.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries.Old u-boot-2009.03/cpu/mcf523x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mcf523x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf523x/CVS/Entries.Old 2009-03-25 15:25:17.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf523x/CVS/Repository u-boot-2009.03/cpu/mcf523x/CVS/Repository
--- u-boot-2009.03_orig/cpu/mcf523x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf523x/CVS/Repository 2009-03-25 15:25:17.790579400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mcf523x
diff -Naur u-boot-2009.03_orig/cpu/mcf523x/CVS/Root u-boot-2009.03/cpu/mcf523x/CVS/Root
--- u-boot-2009.03_orig/cpu/mcf523x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf523x/CVS/Root 2009-03-25 15:25:17.790579400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries u-boot-2009.03/cpu/mcf52x2/CVS/Entries
--- u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf52x2/CVS/Entries 2009-03-25 15:57:55.590549400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries.Extra u-boot-2009.03/cpu/mcf52x2/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf52x2/CVS/Entries.Extra 2009-03-25 15:57:55.590549400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mcf52x2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf52x2/CVS/Entries.Extra.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries.Old u-boot-2009.03/cpu/mcf52x2/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mcf52x2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf52x2/CVS/Entries.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf52x2/CVS/Repository u-boot-2009.03/cpu/mcf52x2/CVS/Repository
--- u-boot-2009.03_orig/cpu/mcf52x2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf52x2/CVS/Repository 2009-03-25 15:25:17.915578600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mcf52x2
diff -Naur u-boot-2009.03_orig/cpu/mcf52x2/CVS/Root u-boot-2009.03/cpu/mcf52x2/CVS/Root
--- u-boot-2009.03_orig/cpu/mcf52x2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf52x2/CVS/Root 2009-03-25 15:25:17.915578600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries u-boot-2009.03/cpu/mcf532x/CVS/Entries
--- u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf532x/CVS/Entries 2009-03-25 15:57:55.668673900 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries.Extra u-boot-2009.03/cpu/mcf532x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf532x/CVS/Entries.Extra 2009-03-25 15:57:55.684298800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mcf532x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf532x/CVS/Entries.Extra.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries.Old u-boot-2009.03/cpu/mcf532x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mcf532x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf532x/CVS/Entries.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf532x/CVS/Repository u-boot-2009.03/cpu/mcf532x/CVS/Repository
--- u-boot-2009.03_orig/cpu/mcf532x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf532x/CVS/Repository 2009-03-25 15:25:18.056202700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mcf532x
diff -Naur u-boot-2009.03_orig/cpu/mcf532x/CVS/Root u-boot-2009.03/cpu/mcf532x/CVS/Root
--- u-boot-2009.03_orig/cpu/mcf532x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf532x/CVS/Root 2009-03-25 15:25:18.056202700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries u-boot-2009.03/cpu/mcf5445x/CVS/Entries
--- u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5445x/CVS/Entries 2009-03-25 15:57:55.778048200 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dspi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries.Extra u-boot-2009.03/cpu/mcf5445x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5445x/CVS/Entries.Extra 2009-03-25 15:57:55.778048200 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/dspi.c///1238019722/
+/interrupts.c///1238019722/
+/pci.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mcf5445x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5445x/CVS/Entries.Extra.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/dspi.c///1238019722/
+/interrupts.c///1238019722/
+/pci.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries.Old u-boot-2009.03/cpu/mcf5445x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mcf5445x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5445x/CVS/Entries.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/dspi.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf5445x/CVS/Repository u-boot-2009.03/cpu/mcf5445x/CVS/Repository
--- u-boot-2009.03_orig/cpu/mcf5445x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5445x/CVS/Repository 2009-03-25 15:25:18.196826800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mcf5445x
diff -Naur u-boot-2009.03_orig/cpu/mcf5445x/CVS/Root u-boot-2009.03/cpu/mcf5445x/CVS/Root
--- u-boot-2009.03_orig/cpu/mcf5445x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf5445x/CVS/Root 2009-03-25 15:25:18.196826800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries
--- u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries 2009-03-25 15:57:55.903047400 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/slicetimer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries.Extra u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries.Extra 2009-03-25 15:57:55.903047400 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/pci.c///1238019722/
+/slicetimer.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries.Extra.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/pci.c///1238019722/
+/slicetimer.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries.Old u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf547x_8x/CVS/Entries.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/slicetimer.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Repository u-boot-2009.03/cpu/mcf547x_8x/CVS/Repository
--- u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf547x_8x/CVS/Repository 2009-03-25 15:25:18.353075800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mcf547x_8x
diff -Naur u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Root u-boot-2009.03/cpu/mcf547x_8x/CVS/Root
--- u-boot-2009.03_orig/cpu/mcf547x_8x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mcf547x_8x/CVS/Root 2009-03-25 15:25:18.353075800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/microblaze/CVS/Entries u-boot-2009.03/cpu/microblaze/CVS/Entries
--- u-boot-2009.03_orig/cpu/microblaze/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/microblaze/CVS/Entries 2009-03-25 15:57:56.012421700 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exception.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/irq.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/microblaze/CVS/Entries.Extra u-boot-2009.03/cpu/microblaze/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/microblaze/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/microblaze/CVS/Entries.Extra 2009-03-25 15:57:56.012421700 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019722/
+/cache.c///1238019722/
+/cpu.c///1238019722/
+/exception.c///1238019722/
+/interrupts.c///1238019722/
+/irq.S///1238019722/
+/start.S///1238019722/
+/timer.c///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/microblaze/CVS/Entries.Extra.Old u-boot-2009.03/cpu/microblaze/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/microblaze/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/microblaze/CVS/Entries.Extra.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019722/
+/cache.c///1238019722/
+/cpu.c///1238019722/
+/exception.c///1238019722/
+/interrupts.c///1238019722/
+/irq.S///1238019722/
+/start.S///1238019722/
+/timer.c///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/microblaze/CVS/Entries.Old u-boot-2009.03/cpu/microblaze/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/microblaze/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/microblaze/CVS/Entries.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/exception.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/irq.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/microblaze/CVS/Repository u-boot-2009.03/cpu/microblaze/CVS/Repository
--- u-boot-2009.03_orig/cpu/microblaze/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/microblaze/CVS/Repository 2009-03-25 15:25:18.696823600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/microblaze
diff -Naur u-boot-2009.03_orig/cpu/microblaze/CVS/Root u-boot-2009.03/cpu/microblaze/CVS/Root
--- u-boot-2009.03_orig/cpu/microblaze/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/microblaze/CVS/Root 2009-03-25 15:25:18.696823600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mips/CVS/Entries u-boot-2009.03/cpu/mips/CVS/Entries
--- u-boot-2009.03_orig/cpu/mips/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mips/CVS/Entries 2009-03-25 15:57:56.246795200 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asc_serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asc_serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/au1x00_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/au1x00_serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/au1x00_usb_ohci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/au1x00_usb_ohci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/incaip_clock.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/incaip_wdt.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mips/CVS/Entries.Extra u-boot-2009.03/cpu/mips/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mips/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mips/CVS/Entries.Extra 2009-03-25 15:57:56.262420100 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019722/
+/asc_serial.c///1238019722/
+/asc_serial.h///1238019722/
+/au1x00_eth.c///1238019722/
+/au1x00_serial.c///1238019722/
+/au1x00_usb_ohci.c///1238019722/
+/au1x00_usb_ohci.h///1238019722/
+/cache.S///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/incaip_clock.c///1238019722/
+/incaip_wdt.S///1238019722/
+/interrupts.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mips/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mips/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mips/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mips/CVS/Entries.Extra.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019722/
+/asc_serial.c///1238019722/
+/asc_serial.h///1238019722/
+/au1x00_eth.c///1238019722/
+/au1x00_serial.c///1238019722/
+/au1x00_usb_ohci.c///1238019722/
+/au1x00_usb_ohci.h///1238019722/
+/cache.S///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/incaip_clock.c///1238019722/
+/incaip_wdt.S///1238019722/
+/interrupts.c///1238019722/
+/start.S///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mips/CVS/Entries.Old u-boot-2009.03/cpu/mips/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mips/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mips/CVS/Entries.Old 2009-03-25 15:25:18.000000000 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/asc_serial.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/asc_serial.h/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/au1x00_eth.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/au1x00_serial.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/au1x00_usb_ohci.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/au1x00_usb_ohci.h/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cache.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/incaip_clock.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/incaip_wdt.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mips/CVS/Repository u-boot-2009.03/cpu/mips/CVS/Repository
--- u-boot-2009.03_orig/cpu/mips/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mips/CVS/Repository 2009-03-25 15:25:18.837447700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mips
diff -Naur u-boot-2009.03_orig/cpu/mips/CVS/Root u-boot-2009.03/cpu/mips/CVS/Root
--- u-boot-2009.03_orig/cpu/mips/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mips/CVS/Root 2009-03-25 15:25:18.837447700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries u-boot-2009.03/cpu/mpc512x/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc512x/CVS/Entries 2009-03-25 15:57:56.403044200 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iim.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iopin.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries.Extra u-boot-2009.03/cpu/mpc512x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc512x/CVS/Entries.Extra 2009-03-25 15:57:56.403044200 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/i2c.c///1238019722/
+/iim.c///1238019722/
+/interrupts.c///1238019722/
+/iopin.c///1238019722/
+/serial.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
+/traps.c///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc512x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc512x/CVS/Entries.Extra.Old 2009-03-25 15:25:19.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/i2c.c///1238019722/
+/iim.c///1238019722/
+/interrupts.c///1238019722/
+/iopin.c///1238019722/
+/serial.c///1238019722/
+/speed.c///1238019722/
+/start.S///1238019722/
+/traps.c///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries.Old u-boot-2009.03/cpu/mpc512x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc512x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc512x/CVS/Entries.Old 2009-03-25 15:25:19.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/iim.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/iopin.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc512x/CVS/Repository u-boot-2009.03/cpu/mpc512x/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc512x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc512x/CVS/Repository 2009-03-25 15:25:19.040571400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc512x
diff -Naur u-boot-2009.03_orig/cpu/mpc512x/CVS/Root u-boot-2009.03/cpu/mpc512x/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc512x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc512x/CVS/Root 2009-03-25 15:25:19.040571400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries u-boot-2009.03/cpu/mpc5xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xx/CVS/Entries 2009-03-25 15:57:56.528043400 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries.Extra u-boot-2009.03/cpu/mpc5xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xx/CVS/Entries.Extra 2009-03-25 15:57:56.528043400 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/serial.c///1238019722/
+/speed.c///1238019722/
+/spi.c///1238019722/
+/start.S///1238019722/
+/traps.c///1238019722/
+/u-boot.lds///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc5xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xx/CVS/Entries.Extra.Old 2009-03-25 15:25:19.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019722/
+/config.mk///1238019722/
+/cpu.c///1238019722/
+/cpu_init.c///1238019722/
+/interrupts.c///1238019722/
+/serial.c///1238019722/
+/speed.c///1238019722/
+/spi.c///1238019722/
+/start.S///1238019722/
+/traps.c///1238019722/
+/u-boot.lds///1238019722/
diff -Naur u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries.Old u-boot-2009.03/cpu/mpc5xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc5xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xx/CVS/Entries.Old 2009-03-25 15:25:19.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/spi.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:02 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:02 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc5xx/CVS/Repository u-boot-2009.03/cpu/mpc5xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc5xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xx/CVS/Repository 2009-03-25 15:25:19.228070200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc5xx
diff -Naur u-boot-2009.03_orig/cpu/mpc5xx/CVS/Root u-boot-2009.03/cpu/mpc5xx/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc5xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xx/CVS/Root 2009-03-25 15:25:19.228070200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries u-boot-2009.03/cpu/mpc5xxx/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xxx/CVS/Entries 2009-03-25 15:57:56.746792000 -0700
@@ -0,0 +1,22 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/firmware_sc_task.impl.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/firmware_sc_task_bestcomm.impl.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ide.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/loadtask.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_mpc5200.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-customlayout.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries.Extra u-boot-2009.03/cpu/mpc5xxx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xxx/CVS/Entries.Extra 2009-03-25 15:57:56.746792000 -0700
@@ -0,0 +1,21 @@
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/firmware_sc_task.impl.S///1238019723/
+/firmware_sc_task_bestcomm.impl.S///1238019723/
+/i2c.c///1238019723/
+/ide.c///1238019723/
+/interrupts.c///1238019723/
+/io.S///1238019723/
+/loadtask.c///1238019723/
+/pci_mpc5200.c///1238019723/
+/serial.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot-customlayout.lds///1238019723/
+/u-boot.lds///1238019723/
+/usb.c///1238019723/
+/usb_ohci.c///1238019723/
+/usb_ohci.h///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc5xxx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xxx/CVS/Entries.Extra.Old 2009-03-25 15:25:19.000000000 -0700
@@ -0,0 +1,21 @@
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/firmware_sc_task.impl.S///1238019723/
+/firmware_sc_task_bestcomm.impl.S///1238019723/
+/i2c.c///1238019723/
+/ide.c///1238019723/
+/interrupts.c///1238019723/
+/io.S///1238019723/
+/loadtask.c///1238019723/
+/pci_mpc5200.c///1238019723/
+/serial.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot-customlayout.lds///1238019723/
+/u-boot.lds///1238019723/
+/usb.c///1238019723/
+/usb_ohci.c///1238019723/
+/usb_ohci.h///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries.Old u-boot-2009.03/cpu/mpc5xxx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xxx/CVS/Entries.Old 2009-03-25 15:25:19.000000000 -0700
@@ -0,0 +1,22 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/firmware_sc_task.impl.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/firmware_sc_task_bestcomm.impl.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ide.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/io.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/loadtask.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/pci_mpc5200.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/u-boot-customlayout.lds/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/usb_ohci.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/usb_ohci.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Repository u-boot-2009.03/cpu/mpc5xxx/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xxx/CVS/Repository 2009-03-25 15:25:19.665567400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc5xxx
diff -Naur u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Root u-boot-2009.03/cpu/mpc5xxx/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc5xxx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc5xxx/CVS/Root 2009-03-25 15:25:19.603067800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries u-boot-2009.03/cpu/mpc8220/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8220/CVS/Entries 2009-03-25 15:57:56.934290800 -0700
@@ -0,0 +1,23 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dma.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dramSetup.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dramSetup.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fec_dma_tasks.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2cCore.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2cCore.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/loadtask.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries.Extra u-boot-2009.03/cpu/mpc8220/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8220/CVS/Entries.Extra 2009-03-25 15:57:56.934290800 -0700
@@ -0,0 +1,22 @@
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/dma.h///1238019723/
+/dramSetup.c///1238019723/
+/dramSetup.h///1238019723/
+/fec.c///1238019723/
+/fec.h///1238019723/
+/fec_dma_tasks.S///1238019723/
+/i2c.c///1238019723/
+/i2cCore.c///1238019723/
+/i2cCore.h///1238019723/
+/interrupts.c///1238019723/
+/io.S///1238019723/
+/loadtask.c///1238019723/
+/pci.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
+/uart.c///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc8220/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8220/CVS/Entries.Extra.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,22 @@
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/dma.h///1238019723/
+/dramSetup.c///1238019723/
+/dramSetup.h///1238019723/
+/fec.c///1238019723/
+/fec.h///1238019723/
+/fec_dma_tasks.S///1238019723/
+/i2c.c///1238019723/
+/i2cCore.c///1238019723/
+/i2cCore.h///1238019723/
+/interrupts.c///1238019723/
+/io.S///1238019723/
+/loadtask.c///1238019723/
+/pci.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
+/uart.c///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries.Old u-boot-2009.03/cpu/mpc8220/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc8220/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8220/CVS/Entries.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,23 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/dma.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/dramSetup.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/dramSetup.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/fec.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/fec.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/fec_dma_tasks.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/i2cCore.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/i2cCore.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/io.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/loadtask.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/uart.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8220/CVS/Repository u-boot-2009.03/cpu/mpc8220/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc8220/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8220/CVS/Repository 2009-03-25 15:25:20.009315200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc8220
diff -Naur u-boot-2009.03_orig/cpu/mpc8220/CVS/Root u-boot-2009.03/cpu/mpc8220/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc8220/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8220/CVS/Root 2009-03-25 15:25:19.993690300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries u-boot-2009.03/cpu/mpc824x/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/CVS/Entries 2009-03-25 15:57:57.340538200 -0700
@@ -0,0 +1,11 @@
+D/drivers////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries.Extra u-boot-2009.03/cpu/mpc824x/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/CVS/Entries.Extra 2009-03-25 15:57:57.340538200 -0700
@@ -0,0 +1,11 @@
+D/drivers////
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/interrupts.c///1238019723/
+/pci.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc824x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/CVS/Entries.Extra.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/interrupts.c///1238019723/
+/pci.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
+D/drivers////
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries.Old u-boot-2009.03/cpu/mpc824x/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc824x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/CVS/Entries.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D/drivers////
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/CVS/Repository u-boot-2009.03/cpu/mpc824x/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc824x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/CVS/Repository 2009-03-25 15:25:20.274938500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc824x
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/CVS/Root u-boot-2009.03/cpu/mpc824x/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc824x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/CVS/Root 2009-03-25 15:25:20.274938500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries 2009-03-25 15:57:57.293663500 -0700
@@ -0,0 +1,5 @@
+D/epic////
+D/i2c////
+/epic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errors.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c_export.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries.Extra u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries.Extra 2009-03-25 15:57:57.293663500 -0700
@@ -0,0 +1,5 @@
+D/epic////
+D/i2c////
+/epic.h///1238019723/
+/errors.h///1238019723/
+/i2c_export.h///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries.Extra.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,5 @@
+/epic.h///1238019723/
+/errors.h///1238019723/
+/i2c_export.h///1238019723/
+D/epic////
+D/i2c////
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries.Old u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/CVS/Entries.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,5 @@
+/epic.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/errors.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/i2c_export.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D/epic////
+D/i2c////
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Repository u-boot-2009.03/cpu/mpc824x/drivers/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/CVS/Repository 2009-03-25 15:25:20.415562600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc824x/drivers
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Root u-boot-2009.03/cpu/mpc824x/drivers/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/CVS/Root 2009-03-25 15:25:20.415562600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries 2009-03-25 15:57:57.153039400 -0700
@@ -0,0 +1,6 @@
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/epic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/epic1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/epic2.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/epicutil.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries.Extra u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries.Extra 2009-03-25 15:57:57.153039400 -0700
@@ -0,0 +1,5 @@
+/README///1238019723/
+/epic.h///1238019723/
+/epic1.c///1238019723/
+/epic2.S///1238019723/
+/epicutil.S///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries.Extra.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,5 @@
+/README///1238019723/
+/epic.h///1238019723/
+/epic1.c///1238019723/
+/epic2.S///1238019723/
+/epicutil.S///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries.Old u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Entries.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,6 @@
+/README/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/epic.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/epic1.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/epic2.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/epicutil.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Repository u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Repository 2009-03-25 15:25:20.571811600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc824x/drivers/epic
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Root u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/epic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/epic/CVS/Root 2009-03-25 15:25:20.571811600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries 2009-03-25 15:57:57.246788800 -0700
@@ -0,0 +1,2 @@
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra 2009-03-25 15:57:57.246788800 -0700
@@ -0,0 +1 @@
+/i2c.c///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries.Extra.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1 @@
+/i2c.c///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries.Old u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Entries.Old 2009-03-25 15:25:20.000000000 -0700
@@ -0,0 +1,2 @@
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Repository u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Repository 2009-03-25 15:25:20.712435700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc824x/drivers/i2c
diff -Naur u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Root u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc824x/drivers/i2c/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc824x/drivers/i2c/CVS/Root 2009-03-25 15:25:20.712435700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries u-boot-2009.03/cpu/mpc8260/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8260/CVS/Entries 2009-03-25 15:57:57.543661900 -0700
@@ -0,0 +1,21 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bedbug_603e.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/commproc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ether_fcc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ether_scc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_scc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_smc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries.Extra u-boot-2009.03/cpu/mpc8260/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8260/CVS/Entries.Extra 2009-03-25 15:57:57.543661900 -0700
@@ -0,0 +1,20 @@
+/Makefile///1238019723/
+/bedbug_603e.c///1238019723/
+/commproc.c///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/ether_fcc.c///1238019723/
+/ether_scc.c///1238019723/
+/i2c.c///1238019723/
+/interrupts.c///1238019723/
+/kgdb.S///1238019723/
+/pci.c///1238019723/
+/serial_scc.c///1238019723/
+/serial_smc.c///1238019723/
+/speed.c///1238019723/
+/speed.h///1238019723/
+/spi.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc8260/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8260/CVS/Entries.Extra.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,20 @@
+/Makefile///1238019723/
+/bedbug_603e.c///1238019723/
+/commproc.c///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/ether_fcc.c///1238019723/
+/ether_scc.c///1238019723/
+/i2c.c///1238019723/
+/interrupts.c///1238019723/
+/kgdb.S///1238019723/
+/pci.c///1238019723/
+/serial_scc.c///1238019723/
+/serial_smc.c///1238019723/
+/speed.c///1238019723/
+/speed.h///1238019723/
+/spi.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries.Old u-boot-2009.03/cpu/mpc8260/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc8260/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8260/CVS/Entries.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,21 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/bedbug_603e.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/commproc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ether_fcc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ether_scc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/kgdb.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/serial_scc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/serial_smc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/speed.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/spi.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8260/CVS/Repository u-boot-2009.03/cpu/mpc8260/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc8260/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8260/CVS/Repository 2009-03-25 15:25:20.868684700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc8260
diff -Naur u-boot-2009.03_orig/cpu/mpc8260/CVS/Root u-boot-2009.03/cpu/mpc8260/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc8260/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8260/CVS/Root 2009-03-25 15:25:20.868684700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries u-boot-2009.03/cpu/mpc83xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc83xx/CVS/Entries 2009-03-25 15:57:57.715535800 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ecc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcie.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qe_io.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serdes.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spd_sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries.Extra u-boot-2009.03/cpu/mpc83xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc83xx/CVS/Entries.Extra 2009-03-25 15:57:57.715535800 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/ecc.c///1238019723/
+/fdt.c///1238019723/
+/interrupts.c///1238019723/
+/nand_init.c///1238019723/
+/pci.c///1238019723/
+/pcie.c///1238019723/
+/qe_io.c///1238019723/
+/serdes.c///1238019723/
+/spd_sdram.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc83xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc83xx/CVS/Entries.Extra.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,17 @@
+/Makefile///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/ecc.c///1238019723/
+/fdt.c///1238019723/
+/interrupts.c///1238019723/
+/nand_init.c///1238019723/
+/pci.c///1238019723/
+/pcie.c///1238019723/
+/qe_io.c///1238019723/
+/serdes.c///1238019723/
+/spd_sdram.c///1238019723/
+/speed.c///1238019723/
+/start.S///1238019723/
+/traps.c///1238019723/
+/u-boot.lds///1238019723/
diff -Naur u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries.Old u-boot-2009.03/cpu/mpc83xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc83xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc83xx/CVS/Entries.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,18 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ecc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/fdt.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/nand_init.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/pcie.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/qe_io.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/serdes.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/spd_sdram.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:03 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc83xx/CVS/Repository u-boot-2009.03/cpu/mpc83xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc83xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc83xx/CVS/Repository 2009-03-25 15:25:21.118683100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc83xx
diff -Naur u-boot-2009.03_orig/cpu/mpc83xx/CVS/Root u-boot-2009.03/cpu/mpc83xx/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc83xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc83xx/CVS/Root 2009-03-25 15:25:21.118683100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries u-boot-2009.03/cpu/mpc85xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc85xx/CVS/Entries 2009-03-25 15:57:57.934284400 -0700
@@ -0,0 +1,24 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/commproc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr-gen1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr-gen2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr-gen3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ether_fcc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8536_serdes.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qe_io.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/release.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/resetvec.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_scc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries.Extra u-boot-2009.03/cpu/mpc85xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc85xx/CVS/Entries.Extra 2009-03-25 15:57:57.934284400 -0700
@@ -0,0 +1,23 @@
+/Makefile///1238019723/
+/commproc.c///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/ddr-gen1.c///1238019723/
+/ddr-gen2.c///1238019723/
+/ddr-gen3.c///1238019723/
+/ether_fcc.c///1238019723/
+/fdt.c///1238019723/
+/interrupts.c///1238019723/
+/mp.c///1238019723/
+/mp.h///1238019723/
+/mpc8536_serdes.c///1238019723/
+/pci.c///1238019723/
+/qe_io.c///1238019723/
+/release.S///1238019723/
+/resetvec.S///1238019723/
+/serial_scc.c///1238019723/
+/speed.c///1238019724/
+/start.S///1238019724/
+/tlb.c///1238019724/
+/traps.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc85xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc85xx/CVS/Entries.Extra.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,23 @@
+/Makefile///1238019723/
+/commproc.c///1238019723/
+/config.mk///1238019723/
+/cpu.c///1238019723/
+/cpu_init.c///1238019723/
+/ddr-gen1.c///1238019723/
+/ddr-gen2.c///1238019723/
+/ddr-gen3.c///1238019723/
+/ether_fcc.c///1238019723/
+/fdt.c///1238019723/
+/interrupts.c///1238019723/
+/mp.c///1238019723/
+/mp.h///1238019723/
+/mpc8536_serdes.c///1238019723/
+/pci.c///1238019723/
+/qe_io.c///1238019723/
+/release.S///1238019723/
+/resetvec.S///1238019723/
+/serial_scc.c///1238019723/
+/speed.c///1238019724/
+/start.S///1238019724/
+/tlb.c///1238019724/
+/traps.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries.Old u-boot-2009.03/cpu/mpc85xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc85xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc85xx/CVS/Entries.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,24 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/commproc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ddr-gen1.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ddr-gen2.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ddr-gen3.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/ether_fcc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/fdt.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/mp.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/mp.h/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/mpc8536_serdes.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/qe_io.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/release.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/resetvec.S/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/serial_scc.c/1.1.1.1/Wed Mar 25 22:22:03 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc85xx/CVS/Repository u-boot-2009.03/cpu/mpc85xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc85xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc85xx/CVS/Repository 2009-03-25 15:25:21.353056600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc85xx
diff -Naur u-boot-2009.03_orig/cpu/mpc85xx/CVS/Root u-boot-2009.03/cpu/mpc85xx/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc85xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc85xx/CVS/Root 2009-03-25 15:25:21.337431700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries u-boot-2009.03/cpu/mpc86xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc86xx/CVS/Entries 2009-03-25 15:57:58.074908500 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr-8641.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/release.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries.Extra u-boot-2009.03/cpu/mpc86xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc86xx/CVS/Entries.Extra 2009-03-25 15:57:58.090533400 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019724/
+/cache.S///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/cpu_init.c///1238019724/
+/ddr-8641.c///1238019724/
+/fdt.c///1238019724/
+/interrupts.c///1238019724/
+/mp.c///1238019724/
+/mp.h///1238019724/
+/release.S///1238019724/
+/speed.c///1238019724/
+/start.S///1238019724/
+/traps.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc86xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc86xx/CVS/Entries.Extra.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019724/
+/cache.S///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/cpu_init.c///1238019724/
+/ddr-8641.c///1238019724/
+/fdt.c///1238019724/
+/interrupts.c///1238019724/
+/mp.c///1238019724/
+/mp.h///1238019724/
+/release.S///1238019724/
+/speed.c///1238019724/
+/start.S///1238019724/
+/traps.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries.Old u-boot-2009.03/cpu/mpc86xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc86xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc86xx/CVS/Entries.Old 2009-03-25 15:25:21.000000000 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cache.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ddr-8641.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/fdt.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/mp.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/mp.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/release.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc86xx/CVS/Repository u-boot-2009.03/cpu/mpc86xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc86xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc86xx/CVS/Repository 2009-03-25 15:25:21.696804400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc86xx
diff -Naur u-boot-2009.03_orig/cpu/mpc86xx/CVS/Root u-boot-2009.03/cpu/mpc86xx/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc86xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc86xx/CVS/Root 2009-03-25 15:25:21.696804400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries u-boot-2009.03/cpu/mpc8xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xx/CVS/Entries 2009-03-25 15:57:58.340531800 -0700
@@ -0,0 +1,24 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bedbug_860.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/commproc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/plprcr_write.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/upatch.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/wlkbd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries.Extra u-boot-2009.03/cpu/mpc8xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xx/CVS/Entries.Extra 2009-03-25 15:57:58.356156700 -0700
@@ -0,0 +1,23 @@
+/Makefile///1238019724/
+/bedbug_860.c///1238019724/
+/commproc.c///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/cpu_init.c///1238019724/
+/fdt.c///1238019724/
+/fec.c///1238019724/
+/fec.h///1238019724/
+/i2c.c///1238019724/
+/interrupts.c///1238019724/
+/kgdb.S///1238019724/
+/lcd.c///1238019724/
+/plprcr_write.S///1238019724/
+/scc.c///1238019724/
+/serial.c///1238019724/
+/speed.c///1238019724/
+/spi.c///1238019724/
+/start.S///1238019724/
+/traps.c///1238019724/
+/upatch.c///1238019724/
+/video.c///1238019724/
+/wlkbd.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc8xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xx/CVS/Entries.Extra.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,23 @@
+/Makefile///1238019724/
+/bedbug_860.c///1238019724/
+/commproc.c///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/cpu_init.c///1238019724/
+/fdt.c///1238019724/
+/fec.c///1238019724/
+/fec.h///1238019724/
+/i2c.c///1238019724/
+/interrupts.c///1238019724/
+/kgdb.S///1238019724/
+/lcd.c///1238019724/
+/plprcr_write.S///1238019724/
+/scc.c///1238019724/
+/serial.c///1238019724/
+/speed.c///1238019724/
+/spi.c///1238019724/
+/start.S///1238019724/
+/traps.c///1238019724/
+/upatch.c///1238019724/
+/video.c///1238019724/
+/wlkbd.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries.Old u-boot-2009.03/cpu/mpc8xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc8xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xx/CVS/Entries.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,24 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/bedbug_860.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/commproc.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/fdt.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/fec.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/fec.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/kgdb.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/lcd.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/plprcr_write.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/scc.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/spi.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/upatch.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/video.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/wlkbd.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8xx/CVS/Repository u-boot-2009.03/cpu/mpc8xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc8xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xx/CVS/Repository 2009-03-25 15:25:21.899928100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc8xx
diff -Naur u-boot-2009.03_orig/cpu/mpc8xx/CVS/Root u-boot-2009.03/cpu/mpc8xx/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc8xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xx/CVS/Root 2009-03-25 15:25:21.899928100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Entries u-boot-2009.03/cpu/mpc8xxx/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/CVS/Entries 2009-03-25 15:25:22.415549800 -0700
@@ -0,0 +1 @@
+D/ddr////
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Entries.Extra u-boot-2009.03/cpu/mpc8xxx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/CVS/Entries.Extra 2009-03-25 15:25:22.415549800 -0700
@@ -0,0 +1 @@
+D/ddr////
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Repository u-boot-2009.03/cpu/mpc8xxx/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/CVS/Repository 2009-03-25 15:25:22.196801200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc8xxx
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Root u-boot-2009.03/cpu/mpc8xxx/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc8xxx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/CVS/Root 2009-03-25 15:25:22.181176300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries
--- u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries 2009-03-25 15:57:58.496780800 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/common_timing_params.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ctrl_regs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr1_dimm_params.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr2_dimm_params.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lc_common_dimm_params.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/main.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/options.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/util.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries.Extra u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries.Extra 2009-03-25 15:57:58.496780800 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019724/
+/common_timing_params.h///1238019724/
+/ctrl_regs.c///1238019724/
+/ddr.h///1238019724/
+/ddr1_dimm_params.c///1238019724/
+/ddr2_dimm_params.c///1238019724/
+/lc_common_dimm_params.c///1238019724/
+/main.c///1238019724/
+/options.c///1238019724/
+/util.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries.Extra.Old u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries.Extra.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019724/
+/common_timing_params.h///1238019724/
+/ctrl_regs.c///1238019724/
+/ddr.h///1238019724/
+/ddr1_dimm_params.c///1238019724/
+/ddr2_dimm_params.c///1238019724/
+/lc_common_dimm_params.c///1238019724/
+/main.c///1238019724/
+/options.c///1238019724/
+/util.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries.Old u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Entries.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/common_timing_params.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ctrl_regs.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ddr.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ddr1_dimm_params.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ddr2_dimm_params.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/lc_common_dimm_params.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/main.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/options.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/util.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Repository u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Repository
--- u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Repository 2009-03-25 15:25:22.212426100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/mpc8xxx/ddr
diff -Naur u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Root u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Root
--- u-boot-2009.03_orig/cpu/mpc8xxx/ddr/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/mpc8xxx/ddr/CVS/Root 2009-03-25 15:25:22.212426100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/nios/CVS/Entries u-boot-2009.03/cpu/nios/CVS/Entries
--- u-boot-2009.03_orig/cpu/nios/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios/CVS/Entries 2009-03-25 15:57:58.606155100 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asmi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/nios/CVS/Entries.Extra u-boot-2009.03/cpu/nios/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/nios/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios/CVS/Entries.Extra 2009-03-25 15:57:58.621780000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019724/
+/asmi.c///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/interrupts.c///1238019724/
+/serial.c///1238019724/
+/spi.c///1238019724/
+/start.S///1238019724/
+/traps.S///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/nios/CVS/Entries.Extra.Old u-boot-2009.03/cpu/nios/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/nios/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios/CVS/Entries.Extra.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019724/
+/asmi.c///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/interrupts.c///1238019724/
+/serial.c///1238019724/
+/spi.c///1238019724/
+/start.S///1238019724/
+/traps.S///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/nios/CVS/Entries.Old u-boot-2009.03/cpu/nios/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/nios/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios/CVS/Entries.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/asmi.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/spi.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/traps.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/nios/CVS/Repository u-boot-2009.03/cpu/nios/CVS/Repository
--- u-boot-2009.03_orig/cpu/nios/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios/CVS/Repository 2009-03-25 15:25:22.665548200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/nios
diff -Naur u-boot-2009.03_orig/cpu/nios/CVS/Root u-boot-2009.03/cpu/nios/CVS/Root
--- u-boot-2009.03_orig/cpu/nios/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios/CVS/Root 2009-03-25 15:25:22.665548200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/nios2/CVS/Entries u-boot-2009.03/cpu/nios2/CVS/Entries
--- u-boot-2009.03_orig/cpu/nios2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios2/CVS/Entries 2009-03-25 15:57:58.746779200 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/epcs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exceptions.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sysid.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/nios2/CVS/Entries.Extra u-boot-2009.03/cpu/nios2/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/nios2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios2/CVS/Entries.Extra 2009-03-25 15:57:58.746779200 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/epcs.c///1238019724/
+/exceptions.S///1238019724/
+/interrupts.c///1238019724/
+/serial.c///1238019724/
+/start.S///1238019724/
+/sysid.c///1238019724/
+/traps.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/nios2/CVS/Entries.Extra.Old u-boot-2009.03/cpu/nios2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/nios2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios2/CVS/Entries.Extra.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/epcs.c///1238019724/
+/exceptions.S///1238019724/
+/interrupts.c///1238019724/
+/serial.c///1238019724/
+/start.S///1238019724/
+/sysid.c///1238019724/
+/traps.c///1238019724/
diff -Naur u-boot-2009.03_orig/cpu/nios2/CVS/Entries.Old u-boot-2009.03/cpu/nios2/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/nios2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios2/CVS/Entries.Old 2009-03-25 15:25:22.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/epcs.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/exceptions.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/sysid.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/nios2/CVS/Repository u-boot-2009.03/cpu/nios2/CVS/Repository
--- u-boot-2009.03_orig/cpu/nios2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios2/CVS/Repository 2009-03-25 15:25:22.868671900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/nios2
diff -Naur u-boot-2009.03_orig/cpu/nios2/CVS/Root u-boot-2009.03/cpu/nios2/CVS/Root
--- u-boot-2009.03_orig/cpu/nios2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/nios2/CVS/Root 2009-03-25 15:25:22.868671900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/or1200/CVS/Entries u-boot-2009.03/cpu/or1200/CVS/Entries
--- u-boot-2009.03_orig/cpu/or1200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/CVS/Entries 2009-03-25 17:51:43.232697100 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1/Tue Mar 24 20:32:29 2009//
+/cpu.c/1.1/Tue Mar 24 20:32:29 2009//
+/interrupts.c/1.1/Tue Mar 24 20:32:29 2009//
+/start.S/1.1/Tue Mar 24 20:32:29 2009//
+/time.c/1.1/Thu Mar 26 00:31:06 2009//
+/watchdog.c/1.1/Tue Mar 24 20:32:29 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/or1200/CVS/Entries.Extra u-boot-2009.03/cpu/or1200/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/or1200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/CVS/Entries.Extra 2009-03-25 17:51:43.232697100 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238028702/
+/cpu.c///1238028702/
+/interrupts.c///1238028702/
+/start.S///1238028702/
+/time.c///1238028702/
+/watchdog.c///1238028703/
diff -Naur u-boot-2009.03_orig/cpu/or1200/CVS/Entries.Extra.Old u-boot-2009.03/cpu/or1200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/or1200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/CVS/Entries.Extra.Old 2009-03-25 17:51:28.000000000 -0700
@@ -0,0 +1,6 @@
+/cpu.c////
+/interrupts.c////
+/time.c////
+/watchdog.c////
+/start.S////
+/Makefile////
diff -Naur u-boot-2009.03_orig/cpu/or1200/CVS/Entries.Old u-boot-2009.03/cpu/or1200/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/or1200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/CVS/Entries.Old 2009-03-25 17:51:28.000000000 -0700
@@ -0,0 +1,7 @@
+/cpu.c/0/Initial cpu.c//
+/interrupts.c/0/Initial interrupts.c//
+/time.c/0/Initial time.c//
+/watchdog.c/0/Initial watchdog.c//
+/start.S/0/Initial start.S//
+/Makefile/0/Initial Makefile//
+D
diff -Naur u-boot-2009.03_orig/cpu/or1200/CVS/Repository u-boot-2009.03/cpu/or1200/CVS/Repository
--- u-boot-2009.03_orig/cpu/or1200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/CVS/Repository 2009-03-25 17:49:53.639648500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/or1200
diff -Naur u-boot-2009.03_orig/cpu/or1200/CVS/Root u-boot-2009.03/cpu/or1200/CVS/Root
--- u-boot-2009.03_orig/cpu/or1200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/CVS/Root 2009-03-25 17:49:53.624023600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/or1200/Makefile u-boot-2009.03/cpu/or1200/Makefile
--- u-boot-2009.03_orig/cpu/or1200/Makefile 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/Makefile 2009-03-24 13:32:29.713725000 -0700
@@ -0,0 +1,57 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# (C) Copyright 2007
+# Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+#
+# (C) Copyright 2007
+# Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(CPU).a
+
+SOBJS = start.o
+COBJS = interrupts.o watchdog.o time.o cpu.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(OBJS) $(SOBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff -Naur u-boot-2009.03_orig/cpu/or1200/cpu.c u-boot-2009.03/cpu/or1200/cpu.c
--- u-boot-2009.03_orig/cpu/or1200/cpu.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/cpu.c 2009-03-24 13:32:29.713725000 -0700
@@ -0,0 +1,35 @@
+/*
+ * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
+ * Scott McNutt <smcnutt@psyent.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+
+
+
+int do_reset (void)
+{
+ void (*rst)(void) = (void(*)(void))0x00000000;
+// void (*rst)(void) = (void(*)(void))CFG_RESET_ADDR;
+ disable_interrupts ();
+ rst();
+ return(0);
+}
diff -Naur u-boot-2009.03_orig/cpu/or1200/interrupts.c u-boot-2009.03/cpu/or1200/interrupts.c
--- u-boot-2009.03_orig/cpu/or1200/interrupts.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/interrupts.c 2009-03-24 13:32:29.698200000 -0700
@@ -0,0 +1,42 @@
+/*
+ * (C) Copyright 2007
+ * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
+ *
+ * (C) Copyright 2007
+ * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+
+int interrupt_init(void)
+{
+ return 0;
+}
+
+void enable_interrupts(void)
+{
+
+}
+
+int disable_interrupts(void)
+{
+ return 0;
+}
diff -Naur u-boot-2009.03_orig/cpu/or1200/start.S u-boot-2009.03/cpu/or1200/start.S
--- u-boot-2009.03_orig/cpu/or1200/start.S 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/start.S 2009-03-24 13:32:29.713725000 -0700
@@ -0,0 +1,27 @@
+/* */
+/* */
+
+#include <config.h>
+
+.section .stack, "aw", @nobits
+.space 0x8000
+_stack:
+
+.section .vectors, "ax"
+
+ .global _start
+_start:
+
+ /* Set stack pointer */
+ l.movhi r1,hi(_stack)
+ l.ori r1,r1,lo(_stack)
+
+ /* Jump to main */
+ l.movhi r2,hi(_board_init)
+ l.ori r2,r2,lo(_board_init)
+ l.jr r2
+ l.nop
+
+
+
+
\ No newline at end of file
diff -Naur u-boot-2009.03_orig/cpu/or1200/time.c u-boot-2009.03/cpu/or1200/time.c
--- u-boot-2009.03_orig/cpu/or1200/time.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/time.c 2009-03-25 17:31:06.263350000 -0700
@@ -0,0 +1,39 @@
+/*
+ * (C) Copyright 2007 Michal Simek
+ * (C) Copyright 2004 Atmark Techno, Inc.
+ *
+ * Michal SIMEK <monstr@monstr.eu>
+ * Yasushi SHOJI <yashi@atmark-techno.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+
+void udelay (unsigned long usec)
+{
+ unsigned int i;
+ for (i = 0; i < (usec * CONFIG_HZ / 10000000); i++);
+}
+
+
+ulong get_timer (ulong base_ticks)
+{
+ return 0;
+}
diff -Naur u-boot-2009.03_orig/cpu/or1200/watchdog.c u-boot-2009.03/cpu/or1200/watchdog.c
--- u-boot-2009.03_orig/cpu/or1200/watchdog.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/or1200/watchdog.c 2009-03-24 13:32:29.698200000 -0700
@@ -0,0 +1,33 @@
+/*
+ * (C) Copyright 2007
+ * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
+ *
+ * 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
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+
+int watchdog_init(void)
+{
+ return 0;
+}
+
+void reset_cpu(unsigned long ignored)
+{
+ while (1)
+ ;
+}
diff -Naur u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries u-boot-2009.03/cpu/ppc4xx/CVS/Entries
--- u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ppc4xx/CVS/Entries 2009-03-25 15:57:58.965527800 -0700
@@ -0,0 +1,42 @@
+/40x_spd_sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/44x_spd_ddr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/44x_spd_ddr2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_ibm_ddr2_autocalib.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_pcie.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_uart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bedbug_405.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/commproc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dcr.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/denali_data_eye.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/denali_spd_ddr2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ecc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ecc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gpio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iop480_uart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/miiphy.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ndfc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/resetvec.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/speed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tlb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdev.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_irq.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries.Extra u-boot-2009.03/cpu/ppc4xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ppc4xx/CVS/Entries.Extra 2009-03-25 15:57:58.965527800 -0700
@@ -0,0 +1,41 @@
+/40x_spd_sdram.c///1238019724/
+/44x_spd_ddr.c///1238019724/
+/44x_spd_ddr2.c///1238019724/
+/4xx_ibm_ddr2_autocalib.c///1238019724/
+/4xx_pci.c///1238019724/
+/4xx_pcie.c///1238019724/
+/4xx_uart.c///1238019724/
+/Makefile///1238019724/
+/bedbug_405.c///1238019724/
+/cache.S///1238019724/
+/commproc.c///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/cpu_init.c///1238019724/
+/dcr.S///1238019724/
+/denali_data_eye.c///1238019724/
+/denali_spd_ddr2.c///1238019724/
+/ecc.c///1238019724/
+/ecc.h///1238019724/
+/fdt.c///1238019724/
+/gpio.c///1238019724/
+/i2c.c///1238019724/
+/interrupts.c///1238019724/
+/iop480_uart.c///1238019724/
+/kgdb.S///1238019724/
+/miiphy.c///1238019724/
+/ndfc.c///1238019724/
+/resetvec.S///1238019724/
+/sdram.c///1238019724/
+/sdram.h///1238019724/
+/speed.c///1238019724/
+/start.S///1238019724/
+/tlb.c///1238019724/
+/traps.c///1238019724/
+/uic.c///1238019724/
+/usb.c///1238019724/
+/usb_ohci.c///1238019724/
+/usb_ohci.h///1238019724/
+/usbdev.c///1238019724/
+/usbdev.h///1238019724/
+/xilinx_irq.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries.Extra.Old u-boot-2009.03/cpu/ppc4xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ppc4xx/CVS/Entries.Extra.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,41 @@
+/40x_spd_sdram.c///1238019724/
+/44x_spd_ddr.c///1238019724/
+/44x_spd_ddr2.c///1238019724/
+/4xx_ibm_ddr2_autocalib.c///1238019724/
+/4xx_pci.c///1238019724/
+/4xx_pcie.c///1238019724/
+/4xx_uart.c///1238019724/
+/Makefile///1238019724/
+/bedbug_405.c///1238019724/
+/cache.S///1238019724/
+/commproc.c///1238019724/
+/config.mk///1238019724/
+/cpu.c///1238019724/
+/cpu_init.c///1238019724/
+/dcr.S///1238019724/
+/denali_data_eye.c///1238019724/
+/denali_spd_ddr2.c///1238019724/
+/ecc.c///1238019724/
+/ecc.h///1238019724/
+/fdt.c///1238019724/
+/gpio.c///1238019724/
+/i2c.c///1238019724/
+/interrupts.c///1238019724/
+/iop480_uart.c///1238019724/
+/kgdb.S///1238019724/
+/miiphy.c///1238019724/
+/ndfc.c///1238019724/
+/resetvec.S///1238019724/
+/sdram.c///1238019724/
+/sdram.h///1238019724/
+/speed.c///1238019724/
+/start.S///1238019724/
+/tlb.c///1238019724/
+/traps.c///1238019724/
+/uic.c///1238019724/
+/usb.c///1238019724/
+/usb_ohci.c///1238019724/
+/usb_ohci.h///1238019724/
+/usbdev.c///1238019724/
+/usbdev.h///1238019724/
+/xilinx_irq.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries.Old u-boot-2009.03/cpu/ppc4xx/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/ppc4xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ppc4xx/CVS/Entries.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,42 @@
+/40x_spd_sdram.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/44x_spd_ddr.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/44x_spd_ddr2.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/4xx_ibm_ddr2_autocalib.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/4xx_pci.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/4xx_pcie.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/4xx_uart.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/bedbug_405.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cache.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/commproc.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/cpu_init.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/dcr.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/denali_data_eye.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/denali_spd_ddr2.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ecc.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ecc.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/fdt.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/gpio.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/iop480_uart.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/kgdb.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/miiphy.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/ndfc.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/resetvec.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/sdram.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/speed.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/tlb.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/uic.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/usb_ohci.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/usb_ohci.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/usbdev.c/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/usbdev.h/1.1.1.1/Wed Mar 25 22:22:04 2009//
+/xilinx_irq.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/ppc4xx/CVS/Repository u-boot-2009.03/cpu/ppc4xx/CVS/Repository
--- u-boot-2009.03_orig/cpu/ppc4xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ppc4xx/CVS/Repository 2009-03-25 15:25:23.024920900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/ppc4xx
diff -Naur u-boot-2009.03_orig/cpu/ppc4xx/CVS/Root u-boot-2009.03/cpu/ppc4xx/CVS/Root
--- u-boot-2009.03_orig/cpu/ppc4xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/ppc4xx/CVS/Root 2009-03-25 15:25:23.024920900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/pxa/CVS/Entries u-boot-2009.03/cpu/pxa/CVS/Entries
--- u-boot-2009.03_orig/cpu/pxa/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/pxa/CVS/Entries 2009-03-25 15:57:59.215526200 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxafb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/pxa/CVS/Entries.Extra u-boot-2009.03/cpu/pxa/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/pxa/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/pxa/CVS/Entries.Extra 2009-03-25 15:57:59.215526200 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/i2c.c///1238019725/
+/interrupts.c///1238019725/
+/pxafb.c///1238019725/
+/serial.c///1238019725/
+/start.S///1238019725/
+/usb.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/pxa/CVS/Entries.Extra.Old u-boot-2009.03/cpu/pxa/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/pxa/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/pxa/CVS/Entries.Extra.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/i2c.c///1238019725/
+/interrupts.c///1238019725/
+/pxafb.c///1238019725/
+/serial.c///1238019725/
+/start.S///1238019725/
+/usb.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/pxa/CVS/Entries.Old u-boot-2009.03/cpu/pxa/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/pxa/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/pxa/CVS/Entries.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/pxafb.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/pxa/CVS/Repository u-boot-2009.03/cpu/pxa/CVS/Repository
--- u-boot-2009.03_orig/cpu/pxa/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/pxa/CVS/Repository 2009-03-25 15:25:23.587417300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/pxa
diff -Naur u-boot-2009.03_orig/cpu/pxa/CVS/Root u-boot-2009.03/cpu/pxa/CVS/Root
--- u-boot-2009.03_orig/cpu/pxa/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/pxa/CVS/Root 2009-03-25 15:25:23.587417300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries u-boot-2009.03/cpu/s3c44b0/CVS/Entries
--- u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/s3c44b0/CVS/Entries 2009-03-25 15:57:59.324900500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries.Extra u-boot-2009.03/cpu/s3c44b0/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/s3c44b0/CVS/Entries.Extra 2009-03-25 15:57:59.324900500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/serial.c///1238019725/
+/start.S///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries.Extra.Old u-boot-2009.03/cpu/s3c44b0/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/s3c44b0/CVS/Entries.Extra.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/serial.c///1238019725/
+/start.S///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries.Old u-boot-2009.03/cpu/s3c44b0/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/s3c44b0/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/s3c44b0/CVS/Entries.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/s3c44b0/CVS/Repository u-boot-2009.03/cpu/s3c44b0/CVS/Repository
--- u-boot-2009.03_orig/cpu/s3c44b0/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/s3c44b0/CVS/Repository 2009-03-25 15:25:23.743666300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/s3c44b0
diff -Naur u-boot-2009.03_orig/cpu/s3c44b0/CVS/Root u-boot-2009.03/cpu/s3c44b0/CVS/Root
--- u-boot-2009.03_orig/cpu/s3c44b0/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/s3c44b0/CVS/Root 2009-03-25 15:25:23.743666300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/sa1100/CVS/Entries u-boot-2009.03/cpu/sa1100/CVS/Entries
--- u-boot-2009.03_orig/cpu/sa1100/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sa1100/CVS/Entries 2009-03-25 15:57:59.403025000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sa1100/CVS/Entries.Extra u-boot-2009.03/cpu/sa1100/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/sa1100/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sa1100/CVS/Entries.Extra 2009-03-25 15:57:59.403025000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/serial.c///1238019725/
+/start.S///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sa1100/CVS/Entries.Extra.Old u-boot-2009.03/cpu/sa1100/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/sa1100/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sa1100/CVS/Entries.Extra.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/serial.c///1238019725/
+/start.S///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sa1100/CVS/Entries.Old u-boot-2009.03/cpu/sa1100/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/sa1100/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sa1100/CVS/Entries.Old 2009-03-25 15:25:23.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/serial.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sa1100/CVS/Repository u-boot-2009.03/cpu/sa1100/CVS/Repository
--- u-boot-2009.03_orig/cpu/sa1100/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sa1100/CVS/Repository 2009-03-25 15:25:23.868665500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/sa1100
diff -Naur u-boot-2009.03_orig/cpu/sa1100/CVS/Root u-boot-2009.03/cpu/sa1100/CVS/Root
--- u-boot-2009.03_orig/cpu/sa1100/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sa1100/CVS/Root 2009-03-25 15:25:23.853040600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/sh2/CVS/Entries u-boot-2009.03/cpu/sh2/CVS/Entries
--- u-boot-2009.03_orig/cpu/sh2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh2/CVS/Entries 2009-03-25 15:57:59.481149500 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sh2/CVS/Entries.Extra u-boot-2009.03/cpu/sh2/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/sh2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh2/CVS/Entries.Extra 2009-03-25 15:57:59.481149500 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019725/
+/cache.c///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/start.S///1238019725/
+/watchdog.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sh2/CVS/Entries.Extra.Old u-boot-2009.03/cpu/sh2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/sh2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh2/CVS/Entries.Extra.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019725/
+/cache.c///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/start.S///1238019725/
+/watchdog.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sh2/CVS/Entries.Old u-boot-2009.03/cpu/sh2/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/sh2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh2/CVS/Entries.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sh2/CVS/Repository u-boot-2009.03/cpu/sh2/CVS/Repository
--- u-boot-2009.03_orig/cpu/sh2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh2/CVS/Repository 2009-03-25 15:25:23.978039800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/sh2
diff -Naur u-boot-2009.03_orig/cpu/sh2/CVS/Root u-boot-2009.03/cpu/sh2/CVS/Root
--- u-boot-2009.03_orig/cpu/sh2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh2/CVS/Root 2009-03-25 15:25:23.978039800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/sh3/CVS/Entries u-boot-2009.03/cpu/sh3/CVS/Entries
--- u-boot-2009.03_orig/cpu/sh3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh3/CVS/Entries 2009-03-25 15:57:59.574898900 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sh3/CVS/Entries.Extra u-boot-2009.03/cpu/sh3/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/sh3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh3/CVS/Entries.Extra 2009-03-25 15:57:59.574898900 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019725/
+/cache.c///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/start.S///1238019725/
+/watchdog.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sh3/CVS/Entries.Extra.Old u-boot-2009.03/cpu/sh3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/sh3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh3/CVS/Entries.Extra.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019725/
+/cache.c///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/start.S///1238019725/
+/watchdog.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sh3/CVS/Entries.Old u-boot-2009.03/cpu/sh3/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/sh3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh3/CVS/Entries.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sh3/CVS/Repository u-boot-2009.03/cpu/sh3/CVS/Repository
--- u-boot-2009.03_orig/cpu/sh3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh3/CVS/Repository 2009-03-25 15:25:24.118663900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/sh3
diff -Naur u-boot-2009.03_orig/cpu/sh3/CVS/Root u-boot-2009.03/cpu/sh3/CVS/Root
--- u-boot-2009.03_orig/cpu/sh3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh3/CVS/Root 2009-03-25 15:25:24.118663900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/cpu/sh4/CVS/Entries u-boot-2009.03/cpu/sh4/CVS/Entries
--- u-boot-2009.03_orig/cpu/sh4/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh4/CVS/Entries 2009-03-25 15:57:59.653023400 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/start.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sh4/CVS/Entries.Extra u-boot-2009.03/cpu/sh4/CVS/Entries.Extra
--- u-boot-2009.03_orig/cpu/sh4/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh4/CVS/Entries.Extra 2009-03-25 15:57:59.653023400 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019725/
+/cache.c///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/start.S///1238019725/
+/watchdog.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sh4/CVS/Entries.Extra.Old u-boot-2009.03/cpu/sh4/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/cpu/sh4/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh4/CVS/Entries.Extra.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019725/
+/cache.c///1238019725/
+/config.mk///1238019725/
+/cpu.c///1238019725/
+/interrupts.c///1238019725/
+/start.S///1238019725/
+/watchdog.c///1238019725/
diff -Naur u-boot-2009.03_orig/cpu/sh4/CVS/Entries.Old u-boot-2009.03/cpu/sh4/CVS/Entries.Old
--- u-boot-2009.03_orig/cpu/sh4/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh4/CVS/Entries.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/start.S/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/cpu/sh4/CVS/Repository u-boot-2009.03/cpu/sh4/CVS/Repository
--- u-boot-2009.03_orig/cpu/sh4/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh4/CVS/Repository 2009-03-25 15:25:24.243663100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/cpu/sh4
diff -Naur u-boot-2009.03_orig/cpu/sh4/CVS/Root u-boot-2009.03/cpu/sh4/CVS/Root
--- u-boot-2009.03_orig/cpu/sh4/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/cpu/sh4/CVS/Root 2009-03-25 15:25:24.243663100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/disk/CVS/Entries u-boot-2009.03/disk/CVS/Entries
--- u-boot-2009.03_orig/disk/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/disk/CVS/Entries 2009-03-25 15:57:59.762397700 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_amiga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_amiga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_dos.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_dos.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_efi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_efi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_iso.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_iso.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_mac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part_mac.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/disk/CVS/Entries.Extra u-boot-2009.03/disk/CVS/Entries.Extra
--- u-boot-2009.03_orig/disk/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/disk/CVS/Entries.Extra 2009-03-25 15:57:59.778022600 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019725/
+/part.c///1238019725/
+/part_amiga.c///1238019725/
+/part_amiga.h///1238019725/
+/part_dos.c///1238019725/
+/part_dos.h///1238019725/
+/part_efi.c///1238019725/
+/part_efi.h///1238019725/
+/part_iso.c///1238019725/
+/part_iso.h///1238019725/
+/part_mac.c///1238019725/
+/part_mac.h///1238019725/
diff -Naur u-boot-2009.03_orig/disk/CVS/Entries.Extra.Old u-boot-2009.03/disk/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/disk/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/disk/CVS/Entries.Extra.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019725/
+/part.c///1238019725/
+/part_amiga.c///1238019725/
+/part_amiga.h///1238019725/
+/part_dos.c///1238019725/
+/part_dos.h///1238019725/
+/part_efi.c///1238019725/
+/part_efi.h///1238019725/
+/part_iso.c///1238019725/
+/part_iso.h///1238019725/
+/part_mac.c///1238019725/
+/part_mac.h///1238019725/
diff -Naur u-boot-2009.03_orig/disk/CVS/Entries.Old u-boot-2009.03/disk/CVS/Entries.Old
--- u-boot-2009.03_orig/disk/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/disk/CVS/Entries.Old 2009-03-25 15:25:24.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_amiga.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_amiga.h/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_dos.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_dos.h/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_efi.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_efi.h/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_iso.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_iso.h/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_mac.c/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/part_mac.h/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D
diff -Naur u-boot-2009.03_orig/disk/CVS/Repository u-boot-2009.03/disk/CVS/Repository
--- u-boot-2009.03_orig/disk/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/disk/CVS/Repository 2009-03-25 15:25:24.649910500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/disk
diff -Naur u-boot-2009.03_orig/disk/CVS/Root u-boot-2009.03/disk/CVS/Root
--- u-boot-2009.03_orig/disk/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/disk/CVS/Root 2009-03-25 15:25:24.603035800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/doc/CVS/Entries u-boot-2009.03/doc/CVS/Entries
--- u-boot-2009.03_orig/doc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/CVS/Entries 2009-03-25 15:58:00.418643500 -0700
@@ -0,0 +1,135 @@
+D/uImage.FIT////
+/I2C_Edge_Conditions/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README-i386/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README-integrator/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.440-DDR-performance/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.AMCC-eval-boards-cleanup/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ARM-SoC/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ARM-memory-map/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.AVR32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.COBRA5272/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.EVB-64260-750CX/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.INCA-IP/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.IPHASE4539/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.IceCube/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.JFFS2/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.JFFS2_NAND/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.Lite5200B_low_power/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.MBX/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.MPC866/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.Modem/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.NetConsole/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.OFT/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.OXC/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.PIP405/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.POST/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.PXA_CF/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.PlanetCore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.Purple/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.RPXClassic/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.RPXlite/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.SBC8560/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.SNTP/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.Sandpoint8240/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.TQM8260/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.VLAN/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.adnpesc1/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.adnpesc1_base32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.alaska8220/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.amigaone/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.at91/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.atum8548/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.autoboot/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.bamboo/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.bedbug/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.blackfin/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.cmi/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.commands/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.commands.itest/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.console/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.db64360/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.db64460/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.dk1c20/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.dk1c20_std32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.dk1s10/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.dk1s10_mldk20/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.dk1s10_std32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.dk1s40_std32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.dk20k200_std32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ebony/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.evb64260/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.fads/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.fsl-ddr/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.generic_usb_ohci/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.idma2intr/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.imx31/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.iomux/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.kmeter1/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.korat/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.lynxkdi/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.m52277evb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.m5253evbe/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.m53017evb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.m5373evb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.m54455evb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.m5475evb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.m68k/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.marubun-pcmcia/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mips/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ml300/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.modnet50/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc5xx/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc7448hpc2/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc74xx/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8313erdb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8315erdb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8323erdb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc832xemds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8349itx/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8360emds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc837xemds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc837xerdb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc83xx.ddrecc/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc83xxads/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8544ds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8572ds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc85xxads/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc85xxcds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8610hpcd/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mpc8641hpcn/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mvbc_p/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.mvblm7/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.nand/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.nand-boot-ppc440/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ne2000/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.nios/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.nios_CONFIG_SYS_NIOS_CPU/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.nios_DK/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.nmdk8815/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ns9750dev/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ocotea/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ocotea-PIBS-to-U-Boot/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.omap3/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.omap730p2/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.ppc440/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.qemu_mips/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sata/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sbc8349/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sbc8548/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sbc8641d/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sched/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.serial_multi/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sh/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sh7785lcr/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.sha1/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.silent/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.simpc8313/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.standalone/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.stxxtc/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.update/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.usb/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.video/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.xpedite1k/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.zeus/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TODO-i386/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/feature-removal-schedule.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/doc/CVS/Entries.Extra u-boot-2009.03/doc/CVS/Entries.Extra
--- u-boot-2009.03_orig/doc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/CVS/Entries.Extra 2009-03-25 15:58:00.434268400 -0700
@@ -0,0 +1,135 @@
+D/uImage.FIT////
+/I2C_Edge_Conditions///1238019725/
+/README-i386///1238019725/
+/README-integrator///1238019725/
+/README.440-DDR-performance///1238019725/
+/README.AMCC-eval-boards-cleanup///1238019725/
+/README.ARM-SoC///1238019725/
+/README.ARM-memory-map///1238019725/
+/README.AVR32///1238019725/
+/README.COBRA5272///1238019725/
+/README.EVB-64260-750CX///1238019725/
+/README.INCA-IP///1238019725/
+/README.IPHASE4539///1238019725/
+/README.IceCube///1238019725/
+/README.JFFS2///1238019725/
+/README.JFFS2_NAND///1238019725/
+/README.Lite5200B_low_power///1238019726/
+/README.MBX///1238019726/
+/README.MPC866///1238019726/
+/README.Modem///1238019726/
+/README.NetConsole///1238019726/
+/README.OFT///1238019726/
+/README.OXC///1238019726/
+/README.PIP405///1238019726/
+/README.POST///1238019726/
+/README.PXA_CF///1238019726/
+/README.PlanetCore///1238019726/
+/README.Purple///1238019726/
+/README.RPXClassic///1238019726/
+/README.RPXlite///1238019726/
+/README.SBC8560///1238019726/
+/README.SNTP///1238019726/
+/README.Sandpoint8240///1238019726/
+/README.TQM8260///1238019726/
+/README.VLAN///1238019726/
+/README.adnpesc1///1238019725/
+/README.adnpesc1_base32///1238019725/
+/README.alaska8220///1238019725/
+/README.amigaone///1238019725/
+/README.at91///1238019725/
+/README.atum8548///1238019725/
+/README.autoboot///1238019725/
+/README.bamboo///1238019725/
+/README.bedbug///1238019725/
+/README.blackfin///1238019725/
+/README.cmi///1238019725/
+/README.commands///1238019725/
+/README.commands.itest///1238019725/
+/README.console///1238019725/
+/README.db64360///1238019725/
+/README.db64460///1238019725/
+/README.dk1c20///1238019725/
+/README.dk1c20_std32///1238019725/
+/README.dk1s10///1238019725/
+/README.dk1s10_mldk20///1238019725/
+/README.dk1s10_std32///1238019725/
+/README.dk1s40_std32///1238019725/
+/README.dk20k200_std32///1238019725/
+/README.ebony///1238019725/
+/README.evb64260///1238019725/
+/README.fads///1238019725/
+/README.fsl-ddr///1238019725/
+/README.generic_usb_ohci///1238019725/
+/README.idma2intr///1238019725/
+/README.imx31///1238019725/
+/README.iomux///1238019725/
+/README.kmeter1///1238019726/
+/README.korat///1238019726/
+/README.lynxkdi///1238019726/
+/README.m52277evb///1238019726/
+/README.m5253evbe///1238019726/
+/README.m53017evb///1238019726/
+/README.m5373evb///1238019726/
+/README.m54455evb///1238019726/
+/README.m5475evb///1238019726/
+/README.m68k///1238019726/
+/README.marubun-pcmcia///1238019726/
+/README.mips///1238019726/
+/README.ml300///1238019726/
+/README.modnet50///1238019726/
+/README.mpc5xx///1238019726/
+/README.mpc7448hpc2///1238019726/
+/README.mpc74xx///1238019726/
+/README.mpc8313erdb///1238019726/
+/README.mpc8315erdb///1238019726/
+/README.mpc8323erdb///1238019726/
+/README.mpc832xemds///1238019726/
+/README.mpc8349itx///1238019726/
+/README.mpc8360emds///1238019726/
+/README.mpc837xemds///1238019726/
+/README.mpc837xerdb///1238019726/
+/README.mpc83xx.ddrecc///1238019726/
+/README.mpc83xxads///1238019726/
+/README.mpc8544ds///1238019726/
+/README.mpc8572ds///1238019726/
+/README.mpc85xxads///1238019726/
+/README.mpc85xxcds///1238019726/
+/README.mpc8610hpcd///1238019726/
+/README.mpc8641hpcn///1238019726/
+/README.mvbc_p///1238019726/
+/README.mvblm7///1238019726/
+/README.nand///1238019726/
+/README.nand-boot-ppc440///1238019726/
+/README.ne2000///1238019726/
+/README.nios///1238019726/
+/README.nios_CONFIG_SYS_NIOS_CPU///1238019726/
+/README.nios_DK///1238019726/
+/README.nmdk8815///1238019726/
+/README.ns9750dev///1238019726/
+/README.ocotea///1238019726/
+/README.ocotea-PIBS-to-U-Boot///1238019726/
+/README.omap3///1238019726/
+/README.omap730p2///1238019726/
+/README.ppc440///1238019726/
+/README.qemu_mips///1238019726/
+/README.sata///1238019726/
+/README.sbc8349///1238019726/
+/README.sbc8548///1238019726/
+/README.sbc8641d///1238019726/
+/README.sched///1238019726/
+/README.serial_multi///1238019726/
+/README.sh///1238019726/
+/README.sh7785lcr///1238019726/
+/README.sha1///1238019726/
+/README.silent///1238019726/
+/README.simpc8313///1238019726/
+/README.standalone///1238019726/
+/README.stxxtc///1238019726/
+/README.update///1238019726/
+/README.usb///1238019726/
+/README.video///1238019726/
+/README.xpedite1k///1238019726/
+/README.zeus///1238019726/
+/TODO-i386///1238019726/
+/feature-removal-schedule.txt///1238019725/
diff -Naur u-boot-2009.03_orig/doc/CVS/Entries.Extra.Old u-boot-2009.03/doc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/doc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/CVS/Entries.Extra.Old 2009-03-25 15:25:26.000000000 -0700
@@ -0,0 +1,135 @@
+/I2C_Edge_Conditions///1238019725/
+/README-i386///1238019725/
+/README-integrator///1238019725/
+/README.440-DDR-performance///1238019725/
+/README.AMCC-eval-boards-cleanup///1238019725/
+/README.ARM-SoC///1238019725/
+/README.ARM-memory-map///1238019725/
+/README.AVR32///1238019725/
+/README.COBRA5272///1238019725/
+/README.EVB-64260-750CX///1238019725/
+/README.INCA-IP///1238019725/
+/README.IPHASE4539///1238019725/
+/README.IceCube///1238019725/
+/README.JFFS2///1238019725/
+/README.JFFS2_NAND///1238019725/
+/README.Lite5200B_low_power///1238019726/
+/README.MBX///1238019726/
+/README.MPC866///1238019726/
+/README.Modem///1238019726/
+/README.NetConsole///1238019726/
+/README.OFT///1238019726/
+/README.OXC///1238019726/
+/README.PIP405///1238019726/
+/README.POST///1238019726/
+/README.PXA_CF///1238019726/
+/README.PlanetCore///1238019726/
+/README.Purple///1238019726/
+/README.RPXClassic///1238019726/
+/README.RPXlite///1238019726/
+/README.SBC8560///1238019726/
+/README.SNTP///1238019726/
+/README.Sandpoint8240///1238019726/
+/README.TQM8260///1238019726/
+/README.VLAN///1238019726/
+/README.adnpesc1///1238019725/
+/README.adnpesc1_base32///1238019725/
+/README.alaska8220///1238019725/
+/README.amigaone///1238019725/
+/README.at91///1238019725/
+/README.atum8548///1238019725/
+/README.autoboot///1238019725/
+/README.bamboo///1238019725/
+/README.bedbug///1238019725/
+/README.blackfin///1238019725/
+/README.cmi///1238019725/
+/README.commands///1238019725/
+/README.commands.itest///1238019725/
+/README.console///1238019725/
+/README.db64360///1238019725/
+/README.db64460///1238019725/
+/README.dk1c20///1238019725/
+/README.dk1c20_std32///1238019725/
+/README.dk1s10///1238019725/
+/README.dk1s10_mldk20///1238019725/
+/README.dk1s10_std32///1238019725/
+/README.dk1s40_std32///1238019725/
+/README.dk20k200_std32///1238019725/
+/README.ebony///1238019725/
+/README.evb64260///1238019725/
+/README.fads///1238019725/
+/README.fsl-ddr///1238019725/
+/README.generic_usb_ohci///1238019725/
+/README.idma2intr///1238019725/
+/README.imx31///1238019725/
+/README.iomux///1238019725/
+/README.kmeter1///1238019726/
+/README.korat///1238019726/
+/README.lynxkdi///1238019726/
+/README.m52277evb///1238019726/
+/README.m5253evbe///1238019726/
+/README.m53017evb///1238019726/
+/README.m5373evb///1238019726/
+/README.m54455evb///1238019726/
+/README.m5475evb///1238019726/
+/README.m68k///1238019726/
+/README.marubun-pcmcia///1238019726/
+/README.mips///1238019726/
+/README.ml300///1238019726/
+/README.modnet50///1238019726/
+/README.mpc5xx///1238019726/
+/README.mpc7448hpc2///1238019726/
+/README.mpc74xx///1238019726/
+/README.mpc8313erdb///1238019726/
+/README.mpc8315erdb///1238019726/
+/README.mpc8323erdb///1238019726/
+/README.mpc832xemds///1238019726/
+/README.mpc8349itx///1238019726/
+/README.mpc8360emds///1238019726/
+/README.mpc837xemds///1238019726/
+/README.mpc837xerdb///1238019726/
+/README.mpc83xx.ddrecc///1238019726/
+/README.mpc83xxads///1238019726/
+/README.mpc8544ds///1238019726/
+/README.mpc8572ds///1238019726/
+/README.mpc85xxads///1238019726/
+/README.mpc85xxcds///1238019726/
+/README.mpc8610hpcd///1238019726/
+/README.mpc8641hpcn///1238019726/
+/README.mvbc_p///1238019726/
+/README.mvblm7///1238019726/
+/README.nand///1238019726/
+/README.nand-boot-ppc440///1238019726/
+/README.ne2000///1238019726/
+/README.nios///1238019726/
+/README.nios_CONFIG_SYS_NIOS_CPU///1238019726/
+/README.nios_DK///1238019726/
+/README.nmdk8815///1238019726/
+/README.ns9750dev///1238019726/
+/README.ocotea///1238019726/
+/README.ocotea-PIBS-to-U-Boot///1238019726/
+/README.omap3///1238019726/
+/README.omap730p2///1238019726/
+/README.ppc440///1238019726/
+/README.qemu_mips///1238019726/
+/README.sata///1238019726/
+/README.sbc8349///1238019726/
+/README.sbc8548///1238019726/
+/README.sbc8641d///1238019726/
+/README.sched///1238019726/
+/README.serial_multi///1238019726/
+/README.sh///1238019726/
+/README.sh7785lcr///1238019726/
+/README.sha1///1238019726/
+/README.silent///1238019726/
+/README.simpc8313///1238019726/
+/README.standalone///1238019726/
+/README.stxxtc///1238019726/
+/README.update///1238019726/
+/README.usb///1238019726/
+/README.video///1238019726/
+/README.xpedite1k///1238019726/
+/README.zeus///1238019726/
+/TODO-i386///1238019726/
+/feature-removal-schedule.txt///1238019725/
+D/uImage.FIT////
diff -Naur u-boot-2009.03_orig/doc/CVS/Entries.Old u-boot-2009.03/doc/CVS/Entries.Old
--- u-boot-2009.03_orig/doc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/CVS/Entries.Old 2009-03-25 15:25:26.000000000 -0700
@@ -0,0 +1,135 @@
+/I2C_Edge_Conditions/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README-i386/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README-integrator/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.440-DDR-performance/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.AMCC-eval-boards-cleanup/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.ARM-SoC/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.ARM-memory-map/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.AVR32/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.COBRA5272/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.EVB-64260-750CX/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.INCA-IP/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.IPHASE4539/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.IceCube/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.JFFS2/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.JFFS2_NAND/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.Lite5200B_low_power/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.MBX/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.MPC866/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.Modem/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.NetConsole/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.OFT/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.OXC/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.PIP405/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.POST/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.PXA_CF/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.PlanetCore/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.Purple/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.RPXClassic/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.RPXlite/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.SBC8560/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.SNTP/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.Sandpoint8240/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.TQM8260/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.VLAN/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.adnpesc1/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.adnpesc1_base32/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.alaska8220/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.amigaone/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.at91/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.atum8548/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.autoboot/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.bamboo/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.bedbug/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.blackfin/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.cmi/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.commands/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.commands.itest/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.console/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.db64360/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.db64460/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.dk1c20/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.dk1c20_std32/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.dk1s10/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.dk1s10_mldk20/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.dk1s10_std32/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.dk1s40_std32/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.dk20k200_std32/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.ebony/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.evb64260/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.fads/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.fsl-ddr/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.generic_usb_ohci/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.idma2intr/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.imx31/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.iomux/1.1.1.1/Wed Mar 25 22:22:05 2009//
+/README.kmeter1/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.korat/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.lynxkdi/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.m52277evb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.m5253evbe/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.m53017evb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.m5373evb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.m54455evb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.m5475evb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.m68k/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.marubun-pcmcia/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mips/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.ml300/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.modnet50/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc5xx/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc7448hpc2/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc74xx/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8313erdb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8315erdb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8323erdb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc832xemds/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8349itx/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8360emds/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc837xemds/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc837xerdb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc83xx.ddrecc/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc83xxads/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8544ds/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8572ds/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc85xxads/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc85xxcds/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8610hpcd/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mpc8641hpcn/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mvbc_p/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.mvblm7/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.nand/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.nand-boot-ppc440/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.ne2000/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.nios/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.nios_CONFIG_SYS_NIOS_CPU/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.nios_DK/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.nmdk8815/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.ns9750dev/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.ocotea/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.ocotea-PIBS-to-U-Boot/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.omap3/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.omap730p2/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.ppc440/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.qemu_mips/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sata/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sbc8349/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sbc8548/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sbc8641d/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sched/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.serial_multi/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sh/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sh7785lcr/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.sha1/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.silent/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.simpc8313/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.standalone/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.stxxtc/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.update/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.usb/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.video/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.xpedite1k/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/README.zeus/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/TODO-i386/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/feature-removal-schedule.txt/1.1.1.1/Wed Mar 25 22:22:05 2009//
+D/uImage.FIT////
diff -Naur u-boot-2009.03_orig/doc/CVS/Repository u-boot-2009.03/doc/CVS/Repository
--- u-boot-2009.03_orig/doc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/CVS/Repository 2009-03-25 15:25:24.853034200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/doc
diff -Naur u-boot-2009.03_orig/doc/CVS/Root u-boot-2009.03/doc/CVS/Root
--- u-boot-2009.03_orig/doc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/CVS/Root 2009-03-25 15:25:24.853034200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries u-boot-2009.03/doc/uImage.FIT/CVS/Entries
--- u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/uImage.FIT/CVS/Entries 2009-03-25 15:58:00.371768800 -0700
@@ -0,0 +1,9 @@
+/command_syntax_extensions.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/howto.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kernel.its/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kernel_fdt.its/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/multi.its/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/source_file_format.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/update3.its/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/update_uboot.its/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries.Extra u-boot-2009.03/doc/uImage.FIT/CVS/Entries.Extra
--- u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/uImage.FIT/CVS/Entries.Extra 2009-03-25 15:58:00.371768800 -0700
@@ -0,0 +1,8 @@
+/command_syntax_extensions.txt///1238019726/
+/howto.txt///1238019726/
+/kernel.its///1238019726/
+/kernel_fdt.its///1238019726/
+/multi.its///1238019726/
+/source_file_format.txt///1238019726/
+/update3.its///1238019726/
+/update_uboot.its///1238019726/
diff -Naur u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries.Extra.Old u-boot-2009.03/doc/uImage.FIT/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/uImage.FIT/CVS/Entries.Extra.Old 2009-03-25 15:25:26.000000000 -0700
@@ -0,0 +1,8 @@
+/command_syntax_extensions.txt///1238019726/
+/howto.txt///1238019726/
+/kernel.its///1238019726/
+/kernel_fdt.its///1238019726/
+/multi.its///1238019726/
+/source_file_format.txt///1238019726/
+/update3.its///1238019726/
+/update_uboot.its///1238019726/
diff -Naur u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries.Old u-boot-2009.03/doc/uImage.FIT/CVS/Entries.Old
--- u-boot-2009.03_orig/doc/uImage.FIT/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/uImage.FIT/CVS/Entries.Old 2009-03-25 15:25:26.000000000 -0700
@@ -0,0 +1,9 @@
+/command_syntax_extensions.txt/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/howto.txt/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/kernel.its/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/kernel_fdt.its/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/multi.its/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/source_file_format.txt/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/update3.its/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/update_uboot.its/1.1.1.1/Wed Mar 25 22:22:06 2009//
+D
diff -Naur u-boot-2009.03_orig/doc/uImage.FIT/CVS/Repository u-boot-2009.03/doc/uImage.FIT/CVS/Repository
--- u-boot-2009.03_orig/doc/uImage.FIT/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/uImage.FIT/CVS/Repository 2009-03-25 15:25:26.149900900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/doc/uImage.FIT
diff -Naur u-boot-2009.03_orig/doc/uImage.FIT/CVS/Root u-boot-2009.03/doc/uImage.FIT/CVS/Root
--- u-boot-2009.03_orig/doc/uImage.FIT/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/doc/uImage.FIT/CVS/Root 2009-03-25 15:25:26.149900900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/CVS/Entries u-boot-2009.03/drivers/CVS/Entries
--- u-boot-2009.03_orig/drivers/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/CVS/Entries 2009-03-25 15:25:33.852976600 -0700
@@ -0,0 +1,20 @@
+D/bios_emulator////
+D/block////
+D/dma////
+D/fpga////
+D/gpio////
+D/hwmon////
+D/i2c////
+D/input////
+D/misc////
+D/mmc////
+D/mtd////
+D/net////
+D/pci////
+D/pcmcia////
+D/qe////
+D/rtc////
+D/serial////
+D/spi////
+D/usb////
+D/video////
diff -Naur u-boot-2009.03_orig/drivers/CVS/Entries.Extra u-boot-2009.03/drivers/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/CVS/Entries.Extra 2009-03-25 15:25:33.868601500 -0700
@@ -0,0 +1,20 @@
+D/bios_emulator////
+D/block////
+D/dma////
+D/fpga////
+D/gpio////
+D/hwmon////
+D/i2c////
+D/input////
+D/misc////
+D/mmc////
+D/mtd////
+D/net////
+D/pci////
+D/pcmcia////
+D/qe////
+D/rtc////
+D/serial////
+D/spi////
+D/usb////
+D/video////
diff -Naur u-boot-2009.03_orig/drivers/CVS/Repository u-boot-2009.03/drivers/CVS/Repository
--- u-boot-2009.03_orig/drivers/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/CVS/Repository 2009-03-25 15:25:26.618647900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers
diff -Naur u-boot-2009.03_orig/drivers/CVS/Root u-boot-2009.03/drivers/CVS/Root
--- u-boot-2009.03_orig/drivers/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/CVS/Root 2009-03-25 15:25:26.618647900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries u-boot-2009.03/drivers/bios_emulator/CVS/Entries
--- u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/CVS/Entries 2009-03-25 15:58:00.809266000 -0700
@@ -0,0 +1,8 @@
+D/include////
+D/x86emu////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atibios.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/besys.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bios.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/biosemu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/biosemui.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries.Extra u-boot-2009.03/drivers/bios_emulator/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/CVS/Entries.Extra 2009-03-25 15:58:00.809266000 -0700
@@ -0,0 +1,8 @@
+D/include////
+D/x86emu////
+/Makefile///1238019726/
+/atibios.c///1238019726/
+/besys.c///1238019726/
+/bios.c///1238019726/
+/biosemu.c///1238019726/
+/biosemui.h///1238019726/
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries.Extra.Old u-boot-2009.03/drivers/bios_emulator/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019726/
+/atibios.c///1238019726/
+/besys.c///1238019726/
+/bios.c///1238019726/
+/biosemu.c///1238019726/
+/biosemui.h///1238019726/
+D/include////
+D/x86emu////
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries.Old u-boot-2009.03/drivers/bios_emulator/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/atibios.c/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/besys.c/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/bios.c/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/biosemu.c/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/biosemui.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+D/include////
+D/x86emu////
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/CVS/Repository u-boot-2009.03/drivers/bios_emulator/CVS/Repository
--- u-boot-2009.03_orig/drivers/bios_emulator/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/CVS/Repository 2009-03-25 15:25:26.696772400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/bios_emulator
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/CVS/Root u-boot-2009.03/drivers/bios_emulator/CVS/Root
--- u-boot-2009.03_orig/drivers/bios_emulator/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/CVS/Root 2009-03-25 15:25:26.696772400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries
--- u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries 2009-03-25 15:58:00.653017000 -0700
@@ -0,0 +1,3 @@
+D/x86emu////
+/biosemu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/x86emu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries.Extra u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries.Extra 2009-03-25 15:58:00.653017000 -0700
@@ -0,0 +1,3 @@
+D/x86emu////
+/biosemu.h///1238019726/
+/x86emu.h///1238019726/
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries.Extra.Old u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,3 @@
+/biosemu.h///1238019726/
+/x86emu.h///1238019726/
+D/x86emu////
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries.Old u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,3 @@
+/biosemu.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/x86emu.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+D/x86emu////
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Repository u-boot-2009.03/drivers/bios_emulator/include/CVS/Repository
--- u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/CVS/Repository 2009-03-25 15:25:26.853021400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/bios_emulator/include
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Root u-boot-2009.03/drivers/bios_emulator/include/CVS/Root
--- u-boot-2009.03_orig/drivers/bios_emulator/include/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/CVS/Root 2009-03-25 15:25:26.853021400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries
--- u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries 2009-03-25 15:58:00.590517400 -0700
@@ -0,0 +1,8 @@
+/debug.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/decode.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/prim_asm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/prim_ops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/x86emui.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra 2009-03-25 15:58:00.590517400 -0700
@@ -0,0 +1,7 @@
+/debug.h///1238019726/
+/decode.h///1238019726/
+/ops.h///1238019726/
+/prim_asm.h///1238019726/
+/prim_ops.h///1238019726/
+/regs.h///1238019726/
+/x86emui.h///1238019726/
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra.Old u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,7 @@
+/debug.h///1238019726/
+/decode.h///1238019726/
+/ops.h///1238019726/
+/prim_asm.h///1238019726/
+/prim_ops.h///1238019726/
+/regs.h///1238019726/
+/x86emui.h///1238019726/
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries.Old u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,8 @@
+/debug.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/decode.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/ops.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/prim_asm.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/prim_ops.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/regs.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/x86emui.h/1.1.1.1/Wed Mar 25 22:22:06 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Repository u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Repository
--- u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Repository 2009-03-25 15:25:26.931145900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/bios_emulator/include/x86emu
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Root u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Root
--- u-boot-2009.03_orig/drivers/bios_emulator/include/x86emu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/include/x86emu/CVS/Root 2009-03-25 15:25:26.915521000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries
--- u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries 2009-03-25 15:58:00.746766400 -0700
@@ -0,0 +1,7 @@
+/debug.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/decode.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ops.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ops2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/prim_ops.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries.Extra u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries.Extra 2009-03-25 15:58:00.746766400 -0700
@@ -0,0 +1,6 @@
+/debug.c///1238019726/
+/decode.c///1238019726/
+/ops.c///1238019727/
+/ops2.c///1238019727/
+/prim_ops.c///1238019727/
+/sys.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries.Extra.Old u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,6 @@
+/debug.c///1238019726/
+/decode.c///1238019726/
+/ops.c///1238019727/
+/ops2.c///1238019727/
+/prim_ops.c///1238019727/
+/sys.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries.Old u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,7 @@
+/debug.c/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/decode.c/1.1.1.1/Wed Mar 25 22:22:06 2009//
+/ops.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/ops2.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/prim_ops.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/sys.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Repository u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Repository
--- u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Repository 2009-03-25 15:25:27.134269600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/bios_emulator/x86emu
diff -Naur u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Root u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Root
--- u-boot-2009.03_orig/drivers/bios_emulator/x86emu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/bios_emulator/x86emu/CVS/Root 2009-03-25 15:25:27.118644700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/block/CVS/Entries u-boot-2009.03/drivers/block/CVS/Entries
--- u-boot-2009.03_orig/drivers/block/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/block/CVS/Entries 2009-03-25 15:58:00.918640300 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ahci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ata_piix.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ata_piix.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_sata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_sata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libata.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pata_bfin.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pata_bfin.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sata_sil3114.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sata_sil3114.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sil680.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sym53c8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/systemace.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/block/CVS/Entries.Extra u-boot-2009.03/drivers/block/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/block/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/block/CVS/Entries.Extra 2009-03-25 15:58:00.918640300 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019727/
+/ahci.c///1238019727/
+/ata_piix.c///1238019727/
+/ata_piix.h///1238019727/
+/fsl_sata.c///1238019727/
+/fsl_sata.h///1238019727/
+/libata.c///1238019727/
+/pata_bfin.c///1238019727/
+/pata_bfin.h///1238019727/
+/sata_sil3114.c///1238019727/
+/sata_sil3114.h///1238019727/
+/sil680.c///1238019727/
+/sym53c8xx.c///1238019727/
+/systemace.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/block/CVS/Entries.Extra.Old u-boot-2009.03/drivers/block/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/block/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/block/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019727/
+/ahci.c///1238019727/
+/ata_piix.c///1238019727/
+/ata_piix.h///1238019727/
+/fsl_sata.c///1238019727/
+/fsl_sata.h///1238019727/
+/libata.c///1238019727/
+/pata_bfin.c///1238019727/
+/pata_bfin.h///1238019727/
+/sata_sil3114.c///1238019727/
+/sata_sil3114.h///1238019727/
+/sil680.c///1238019727/
+/sym53c8xx.c///1238019727/
+/systemace.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/block/CVS/Entries.Old u-boot-2009.03/drivers/block/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/block/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/block/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/ahci.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/ata_piix.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/ata_piix.h/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/fsl_sata.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/fsl_sata.h/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/libata.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/pata_bfin.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/pata_bfin.h/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/sata_sil3114.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/sata_sil3114.h/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/sil680.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/sym53c8xx.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/systemace.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/block/CVS/Repository u-boot-2009.03/drivers/block/CVS/Repository
--- u-boot-2009.03_orig/drivers/block/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/block/CVS/Repository 2009-03-25 15:25:27.306143500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/block
diff -Naur u-boot-2009.03_orig/drivers/block/CVS/Root u-boot-2009.03/drivers/block/CVS/Root
--- u-boot-2009.03_orig/drivers/block/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/block/CVS/Root 2009-03-25 15:25:27.306143500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/dma/CVS/Entries u-boot-2009.03/drivers/dma/CVS/Entries
--- u-boot-2009.03_orig/drivers/dma/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/dma/CVS/Entries 2009-03-25 15:58:00.996764800 -0700
@@ -0,0 +1,5 @@
+/MCD_dmaApi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_tasks.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_tasksInit.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/dma/CVS/Entries.Extra u-boot-2009.03/drivers/dma/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/dma/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/dma/CVS/Entries.Extra 2009-03-25 15:58:01.012389700 -0700
@@ -0,0 +1,4 @@
+/MCD_dmaApi.c///1238019727/
+/MCD_tasks.c///1238019727/
+/MCD_tasksInit.c///1238019727/
+/Makefile///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/dma/CVS/Entries.Extra.Old u-boot-2009.03/drivers/dma/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/dma/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/dma/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,4 @@
+/MCD_dmaApi.c///1238019727/
+/MCD_tasks.c///1238019727/
+/MCD_tasksInit.c///1238019727/
+/Makefile///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/dma/CVS/Entries.Old u-boot-2009.03/drivers/dma/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/dma/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/dma/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,5 @@
+/MCD_dmaApi.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/MCD_tasks.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/MCD_tasksInit.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:22:07 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/dma/CVS/Repository u-boot-2009.03/drivers/dma/CVS/Repository
--- u-boot-2009.03_orig/drivers/dma/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/dma/CVS/Repository 2009-03-25 15:25:27.634266400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/dma
diff -Naur u-boot-2009.03_orig/drivers/dma/CVS/Root u-boot-2009.03/drivers/dma/CVS/Root
--- u-boot-2009.03_orig/drivers/dma/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/dma/CVS/Root 2009-03-25 15:25:27.634266400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/fpga/CVS/Entries u-boot-2009.03/drivers/fpga/CVS/Entries
--- u-boot-2009.03_orig/drivers/fpga/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/fpga/CVS/Entries 2009-03-25 15:58:01.199888500 -0700
@@ -0,0 +1,11 @@
+/ACEX1K.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/altera.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cyclon2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spartan2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spartan3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stratixII.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/virtex2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/fpga/CVS/Entries.Extra u-boot-2009.03/drivers/fpga/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/fpga/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/fpga/CVS/Entries.Extra 2009-03-25 15:58:01.199888500 -0700
@@ -0,0 +1,10 @@
+/ACEX1K.c///1238019727/
+/Makefile///1238019727/
+/altera.c///1238019727/
+/cyclon2.c///1238019727/
+/fpga.c///1238019727/
+/spartan2.c///1238019727/
+/spartan3.c///1238019727/
+/stratixII.c///1238019727/
+/virtex2.c///1238019727/
+/xilinx.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/fpga/CVS/Entries.Extra.Old u-boot-2009.03/drivers/fpga/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/fpga/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/fpga/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,10 @@
+/ACEX1K.c///1238019727/
+/Makefile///1238019727/
+/altera.c///1238019727/
+/cyclon2.c///1238019727/
+/fpga.c///1238019727/
+/spartan2.c///1238019727/
+/spartan3.c///1238019727/
+/stratixII.c///1238019727/
+/virtex2.c///1238019727/
+/xilinx.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/fpga/CVS/Entries.Old u-boot-2009.03/drivers/fpga/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/fpga/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/fpga/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,11 @@
+/ACEX1K.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/altera.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/cyclon2.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/spartan2.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/spartan3.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/stratixII.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/virtex2.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/xilinx.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/fpga/CVS/Repository u-boot-2009.03/drivers/fpga/CVS/Repository
--- u-boot-2009.03_orig/drivers/fpga/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/fpga/CVS/Repository 2009-03-25 15:25:27.759265600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/fpga
diff -Naur u-boot-2009.03_orig/drivers/fpga/CVS/Root u-boot-2009.03/drivers/fpga/CVS/Root
--- u-boot-2009.03_orig/drivers/fpga/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/fpga/CVS/Root 2009-03-25 15:25:27.743640700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/gpio/CVS/Entries u-boot-2009.03/drivers/gpio/CVS/Entries
--- u-boot-2009.03_orig/drivers/gpio/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/gpio/CVS/Entries 2009-03-25 15:58:01.278013000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx31_gpio.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pca953x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/gpio/CVS/Entries.Extra u-boot-2009.03/drivers/gpio/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/gpio/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/gpio/CVS/Entries.Extra 2009-03-25 15:58:01.278013000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019727/
+/mx31_gpio.c///1238019727/
+/pca953x.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/gpio/CVS/Entries.Extra.Old u-boot-2009.03/drivers/gpio/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/gpio/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/gpio/CVS/Entries.Extra.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019727/
+/mx31_gpio.c///1238019727/
+/pca953x.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/gpio/CVS/Entries.Old u-boot-2009.03/drivers/gpio/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/gpio/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/gpio/CVS/Entries.Old 2009-03-25 15:25:27.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/mx31_gpio.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/pca953x.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/gpio/CVS/Repository u-boot-2009.03/drivers/gpio/CVS/Repository
--- u-boot-2009.03_orig/drivers/gpio/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/gpio/CVS/Repository 2009-03-25 15:25:27.946764400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/gpio
diff -Naur u-boot-2009.03_orig/drivers/gpio/CVS/Root u-boot-2009.03/drivers/gpio/CVS/Root
--- u-boot-2009.03_orig/drivers/gpio/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/gpio/CVS/Root 2009-03-25 15:25:27.931139500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/hwmon/CVS/Entries u-boot-2009.03/drivers/hwmon/CVS/Entries
--- u-boot-2009.03_orig/drivers/hwmon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/hwmon/CVS/Entries 2009-03-25 15:58:01.356137500 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/adm1021.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/adt7460.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1621.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1722.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1775.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lm63.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lm73.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lm75.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lm81.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/hwmon/CVS/Entries.Extra u-boot-2009.03/drivers/hwmon/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/hwmon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/hwmon/CVS/Entries.Extra 2009-03-25 15:58:01.356137500 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019727/
+/adm1021.c///1238019727/
+/adt7460.c///1238019727/
+/ds1621.c///1238019727/
+/ds1722.c///1238019727/
+/ds1775.c///1238019727/
+/lm63.c///1238019727/
+/lm73.c///1238019727/
+/lm75.c///1238019727/
+/lm81.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/hwmon/CVS/Entries.Extra.Old u-boot-2009.03/drivers/hwmon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/hwmon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/hwmon/CVS/Entries.Extra.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019727/
+/adm1021.c///1238019727/
+/adt7460.c///1238019727/
+/ds1621.c///1238019727/
+/ds1722.c///1238019727/
+/ds1775.c///1238019727/
+/lm63.c///1238019727/
+/lm73.c///1238019727/
+/lm75.c///1238019727/
+/lm81.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/hwmon/CVS/Entries.Old u-boot-2009.03/drivers/hwmon/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/hwmon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/hwmon/CVS/Entries.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/adm1021.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/adt7460.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/ds1621.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/ds1722.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/ds1775.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/lm63.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/lm73.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/lm75.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/lm81.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/hwmon/CVS/Repository u-boot-2009.03/drivers/hwmon/CVS/Repository
--- u-boot-2009.03_orig/drivers/hwmon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/hwmon/CVS/Repository 2009-03-25 15:25:28.056138700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/hwmon
diff -Naur u-boot-2009.03_orig/drivers/hwmon/CVS/Root u-boot-2009.03/drivers/hwmon/CVS/Root
--- u-boot-2009.03_orig/drivers/hwmon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/hwmon/CVS/Root 2009-03-25 15:25:28.040513800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/i2c/CVS/Entries u-boot-2009.03/drivers/i2c/CVS/Entries
--- u-boot-2009.03_orig/drivers/i2c/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/i2c/CVS/Entries 2009-03-25 15:58:01.434262000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin-twi_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mxc_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1510_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap24xx_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/soft_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsi108_i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/i2c/CVS/Entries.Extra u-boot-2009.03/drivers/i2c/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/i2c/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/i2c/CVS/Entries.Extra 2009-03-25 15:58:01.449886900 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019727/
+/bfin-twi_i2c.c///1238019727/
+/fsl_i2c.c///1238019727/
+/mxc_i2c.c///1238019727/
+/omap1510_i2c.c///1238019727/
+/omap24xx_i2c.c///1238019727/
+/soft_i2c.c///1238019727/
+/tsi108_i2c.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/i2c/CVS/Entries.Extra.Old u-boot-2009.03/drivers/i2c/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/i2c/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/i2c/CVS/Entries.Extra.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019727/
+/bfin-twi_i2c.c///1238019727/
+/fsl_i2c.c///1238019727/
+/mxc_i2c.c///1238019727/
+/omap1510_i2c.c///1238019727/
+/omap24xx_i2c.c///1238019727/
+/soft_i2c.c///1238019727/
+/tsi108_i2c.c///1238019727/
diff -Naur u-boot-2009.03_orig/drivers/i2c/CVS/Entries.Old u-boot-2009.03/drivers/i2c/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/i2c/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/i2c/CVS/Entries.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/bfin-twi_i2c.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/fsl_i2c.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/mxc_i2c.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/omap1510_i2c.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/omap24xx_i2c.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/soft_i2c.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/tsi108_i2c.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/i2c/CVS/Repository u-boot-2009.03/drivers/i2c/CVS/Repository
--- u-boot-2009.03_orig/drivers/i2c/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/i2c/CVS/Repository 2009-03-25 15:25:28.196762800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/i2c
diff -Naur u-boot-2009.03_orig/drivers/i2c/CVS/Root u-boot-2009.03/drivers/i2c/CVS/Root
--- u-boot-2009.03_orig/drivers/i2c/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/i2c/CVS/Root 2009-03-25 15:25:28.196762800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/input/CVS/Entries u-boot-2009.03/drivers/input/CVS/Entries
--- u-boot-2009.03_orig/drivers/input/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/input/CVS/Entries 2009-03-25 15:58:01.512386500 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i8042.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/keyboard.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pc_keyb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ps2mult.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ps2ser.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/input/CVS/Entries.Extra u-boot-2009.03/drivers/input/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/input/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/input/CVS/Entries.Extra 2009-03-25 15:58:01.512386500 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019728/
+/i8042.c///1238019727/
+/keyboard.c///1238019728/
+/pc_keyb.c///1238019728/
+/ps2mult.c///1238019728/
+/ps2ser.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/input/CVS/Entries.Extra.Old u-boot-2009.03/drivers/input/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/input/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/input/CVS/Entries.Extra.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019728/
+/i8042.c///1238019727/
+/keyboard.c///1238019728/
+/pc_keyb.c///1238019728/
+/ps2mult.c///1238019728/
+/ps2ser.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/input/CVS/Entries.Old u-boot-2009.03/drivers/input/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/input/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/input/CVS/Entries.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/i8042.c/1.1.1.1/Wed Mar 25 22:22:07 2009//
+/keyboard.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/pc_keyb.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/ps2mult.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/ps2ser.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/input/CVS/Repository u-boot-2009.03/drivers/input/CVS/Repository
--- u-boot-2009.03_orig/drivers/input/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/input/CVS/Repository 2009-03-25 15:25:28.337386900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/input
diff -Naur u-boot-2009.03_orig/drivers/input/CVS/Root u-boot-2009.03/drivers/input/CVS/Root
--- u-boot-2009.03_orig/drivers/input/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/input/CVS/Root 2009-03-25 15:25:28.337386900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/misc/CVS/Entries u-boot-2009.03/drivers/misc/CVS/Entries
--- u-boot-2009.03_orig/drivers/misc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/misc/CVS/Entries 2009-03-25 15:58:01.590511000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ali512x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds4510.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_law.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns87308.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/status_led.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/misc/CVS/Entries.Extra u-boot-2009.03/drivers/misc/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/misc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/misc/CVS/Entries.Extra 2009-03-25 15:58:01.606135900 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019728/
+/ali512x.c///1238019728/
+/ds4510.c///1238019728/
+/fsl_law.c///1238019728/
+/ns87308.c///1238019728/
+/status_led.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/misc/CVS/Entries.Extra.Old u-boot-2009.03/drivers/misc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/misc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/misc/CVS/Entries.Extra.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019728/
+/ali512x.c///1238019728/
+/ds4510.c///1238019728/
+/fsl_law.c///1238019728/
+/ns87308.c///1238019728/
+/status_led.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/misc/CVS/Entries.Old u-boot-2009.03/drivers/misc/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/misc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/misc/CVS/Entries.Old 2009-03-25 15:25:28.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/ali512x.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/ds4510.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/fsl_law.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/ns87308.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/status_led.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/misc/CVS/Repository u-boot-2009.03/drivers/misc/CVS/Repository
--- u-boot-2009.03_orig/drivers/misc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/misc/CVS/Repository 2009-03-25 15:25:28.587385300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/misc
diff -Naur u-boot-2009.03_orig/drivers/misc/CVS/Root u-boot-2009.03/drivers/misc/CVS/Root
--- u-boot-2009.03_orig/drivers/misc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/misc/CVS/Root 2009-03-25 15:25:28.587385300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/mmc/CVS/Entries u-boot-2009.03/drivers/mmc/CVS/Entries
--- u-boot-2009.03_orig/drivers/mmc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mmc/CVS/Entries 2009-03-31 14:52:36.551450400 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_mci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_mci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_sdh.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_sdh.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_esdhc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_mmc.h/1.1.1.1/Tue Mar 31 21:52:36 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/drivers/mmc/CVS/Entries.Extra u-boot-2009.03/drivers/mmc/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/mmc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mmc/CVS/Entries.Extra 2009-03-31 14:52:36.567075200 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019728/
+/atmel_mci.c///1238019728/
+/atmel_mci.h///1238019728/
+/bfin_sdh.c///1238019728/
+/bfin_sdh.h///1238019728/
+/fsl_esdhc.c///1238019728/
+/mmc.c///1238019728/
+/omap3_mmc.c///1238019728/
+/pxa_mmc.c///1238019728/
+/pxa_mmc.h///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mmc/CVS/Entries.Extra.Old u-boot-2009.03/drivers/mmc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/mmc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mmc/CVS/Entries.Extra.Old 2009-03-25 17:51:43.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019728/
+/atmel_mci.c///1238019728/
+/atmel_mci.h///1238019728/
+/bfin_sdh.c///1238019728/
+/bfin_sdh.h///1238019728/
+/fsl_esdhc.c///1238019728/
+/mmc.c///1238019728/
+/omap3_mmc.c///1238019728/
+/pxa_mmc.c///1238019728/
+/pxa_mmc.h///1238028703/
diff -Naur u-boot-2009.03_orig/drivers/mmc/CVS/Entries.Old u-boot-2009.03/drivers/mmc/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/mmc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mmc/CVS/Entries.Old 2009-03-25 17:51:43.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_mci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_mci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_sdh.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_sdh.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_esdhc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_mmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_mmc.h/1.2/Thu Mar 26 00:51:43 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mmc/CVS/Repository u-boot-2009.03/drivers/mmc/CVS/Repository
--- u-boot-2009.03_orig/drivers/mmc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mmc/CVS/Repository 2009-03-25 15:25:28.728009400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/mmc
diff -Naur u-boot-2009.03_orig/drivers/mmc/CVS/Root u-boot-2009.03/drivers/mmc/CVS/Root
--- u-boot-2009.03_orig/drivers/mmc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mmc/CVS/Root 2009-03-25 15:25:28.728009400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/mmc/pxa_mmc.h u-boot-2009.03/drivers/mmc/pxa_mmc.h
--- u-boot-2009.03_orig/drivers/mmc/pxa_mmc.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/mmc/pxa_mmc.h 2009-03-31 14:52:36.395202400 -0700
@@ -1,138 +1,138 @@
-/*
- * linux/drivers/mmc/mmc_pxa.h
- *
- * Author: Vladimir Shebordaev, Igor Oblakov
- * Copyright: MontaVista Software Inc.
- *
- * $Id: mmc_pxa.h,v 0.3.1.6 2002/09/25 19:25:48 ted Exp ted $
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#ifndef __MMC_PXA_P_H__
-#define __MMC_PXA_P_H__
-
-/* PXA-250 MMC controller registers */
-
-/* MMC_STRPCL */
-#define MMC_STRPCL_STOP_CLK (0x0001UL)
-#define MMC_STRPCL_START_CLK (0x0002UL)
-
-/* MMC_STAT */
-#define MMC_STAT_END_CMD_RES (0x0001UL << 13)
-#define MMC_STAT_PRG_DONE (0x0001UL << 12)
-#define MMC_STAT_DATA_TRAN_DONE (0x0001UL << 11)
-#define MMC_STAT_CLK_EN (0x0001UL << 8)
-#define MMC_STAT_RECV_FIFO_FULL (0x0001UL << 7)
-#define MMC_STAT_XMIT_FIFO_EMPTY (0x0001UL << 6)
-#define MMC_STAT_RES_CRC_ERROR (0x0001UL << 5)
-#define MMC_STAT_SPI_READ_ERROR_TOKEN (0x0001UL << 4)
-#define MMC_STAT_CRC_READ_ERROR (0x0001UL << 3)
-#define MMC_STAT_CRC_WRITE_ERROR (0x0001UL << 2)
-#define MMC_STAT_TIME_OUT_RESPONSE (0x0001UL << 1)
-#define MMC_STAT_READ_TIME_OUT (0x0001UL)
-
-#define MMC_STAT_ERRORS (MMC_STAT_RES_CRC_ERROR|MMC_STAT_SPI_READ_ERROR_TOKEN\
- |MMC_STAT_CRC_READ_ERROR|MMC_STAT_TIME_OUT_RESPONSE\
- |MMC_STAT_READ_TIME_OUT|MMC_STAT_CRC_WRITE_ERROR)
-
-/* MMC_CLKRT */
-#define MMC_CLKRT_20MHZ (0x0000UL)
-#define MMC_CLKRT_10MHZ (0x0001UL)
-#define MMC_CLKRT_5MHZ (0x0002UL)
-#define MMC_CLKRT_2_5MHZ (0x0003UL)
-#define MMC_CLKRT_1_25MHZ (0x0004UL)
-#define MMC_CLKRT_0_625MHZ (0x0005UL)
-#define MMC_CLKRT_0_3125MHZ (0x0006UL)
-
-/* MMC_SPI */
-#define MMC_SPI_DISABLE (0x00UL)
-#define MMC_SPI_EN (0x01UL)
-#define MMC_SPI_CS_EN (0x01UL << 2)
-#define MMC_SPI_CS_ADDRESS (0x01UL << 3)
-#define MMC_SPI_CRC_ON (0x01UL << 1)
-
-/* MMC_CMDAT */
-#define MMC_CMDAT_SD_4DAT (0x0001UL << 8)
-#define MMC_CMDAT_MMC_DMA_EN (0x0001UL << 7)
-#define MMC_CMDAT_INIT (0x0001UL << 6)
-#define MMC_CMDAT_BUSY (0x0001UL << 5)
-#define MMC_CMDAT_BCR (0x0003UL << 5)
-#define MMC_CMDAT_STREAM (0x0001UL << 4)
-#define MMC_CMDAT_BLOCK (0x0000UL << 4)
-#define MMC_CMDAT_WRITE (0x0001UL << 3)
-#define MMC_CMDAT_READ (0x0000UL << 3)
-#define MMC_CMDAT_DATA_EN (0x0001UL << 2)
-#define MMC_CMDAT_R0 (0)
-#define MMC_CMDAT_R1 (0x0001UL)
-#define MMC_CMDAT_R2 (0x0002UL)
-#define MMC_CMDAT_R3 (0x0003UL)
-
-/* MMC_RESTO */
-#define MMC_RES_TO_MAX (0x007fUL) /* [6:0] */
-
-/* MMC_RDTO */
-#define MMC_READ_TO_MAX (0x0ffffUL) /* [15:0] */
-
-/* MMC_BLKLEN */
-#define MMC_BLK_LEN_MAX (0x03ffUL) /* [9:0] */
-
-/* MMC_PRTBUF */
-#define MMC_PRTBUF_BUF_PART_FULL (0x01UL)
-#define MMC_PRTBUF_BUF_FULL (0x00UL )
-
-/* MMC_I_MASK */
-#define MMC_I_MASK_TXFIFO_WR_REQ (0x01UL << 6)
-#define MMC_I_MASK_RXFIFO_RD_REQ (0x01UL << 5)
-#define MMC_I_MASK_CLK_IS_OFF (0x01UL << 4)
-#define MMC_I_MASK_STOP_CMD (0x01UL << 3)
-#define MMC_I_MASK_END_CMD_RES (0x01UL << 2)
-#define MMC_I_MASK_PRG_DONE (0x01UL << 1)
-#define MMC_I_MASK_DATA_TRAN_DONE (0x01UL)
-#define MMC_I_MASK_ALL (0x07fUL)
-
-
-/* MMC_I_REG */
-#define MMC_I_REG_TXFIFO_WR_REQ (0x01UL << 6)
-#define MMC_I_REG_RXFIFO_RD_REQ (0x01UL << 5)
-#define MMC_I_REG_CLK_IS_OFF (0x01UL << 4)
-#define MMC_I_REG_STOP_CMD (0x01UL << 3)
-#define MMC_I_REG_END_CMD_RES (0x01UL << 2)
-#define MMC_I_REG_PRG_DONE (0x01UL << 1)
-#define MMC_I_REG_DATA_TRAN_DONE (0x01UL)
-#define MMC_I_REG_ALL (0x007fUL)
-
-/* MMC_CMD */
-#define MMC_CMD_INDEX_MAX (0x006fUL) /* [5:0] */
-#define CMD(x) (x)
-
-#define MMC_DEFAULT_RCA 1
-
-#define MMC_BLOCK_SIZE 512
-#define MMC_MAX_BLOCK_SIZE 512
-
-#define MMC_R1_IDLE_STATE 0x01
-#define MMC_R1_ERASE_STATE 0x02
-#define MMC_R1_ILLEGAL_CMD 0x04
-#define MMC_R1_COM_CRC_ERR 0x08
-#define MMC_R1_ERASE_SEQ_ERR 0x01
-#define MMC_R1_ADDR_ERR 0x02
-#define MMC_R1_PARAM_ERR 0x04
-
-#define MMC_R1B_WP_ERASE_SKIP 0x0002
-#define MMC_R1B_ERR 0x0004
-#define MMC_R1B_CC_ERR 0x0008
-#define MMC_R1B_CARD_ECC_ERR 0x0010
-#define MMC_R1B_WP_VIOLATION 0x0020
-#define MMC_R1B_ERASE_PARAM 0x0040
-#define MMC_R1B_OOR 0x0080
-#define MMC_R1B_IDLE_STATE 0x0100
-#define MMC_R1B_ERASE_RESET 0x0200
-#define MMC_R1B_ILLEGAL_CMD 0x0400
-#define MMC_R1B_COM_CRC_ERR 0x0800
-#define MMC_R1B_ERASE_SEQ_ERR 0x1000
-#define MMC_R1B_ADDR_ERR 0x2000
-#define MMC_R1B_PARAM_ERR 0x4000
-
-#endif /* __MMC_PXA_P_H__ */
+/*
+ * linux/drivers/mmc/mmc_pxa.h
+ *
+ * Author: Vladimir Shebordaev, Igor Oblakov
+ * Copyright: MontaVista Software Inc.
+ *
+ * $Id: pxa_mmc.h,v 1.1.1.1 2009/03/25 22:22:08 kenagy Exp $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __MMC_PXA_P_H__
+#define __MMC_PXA_P_H__
+
+/* PXA-250 MMC controller registers */
+
+/* MMC_STRPCL */
+#define MMC_STRPCL_STOP_CLK (0x0001UL)
+#define MMC_STRPCL_START_CLK (0x0002UL)
+
+/* MMC_STAT */
+#define MMC_STAT_END_CMD_RES (0x0001UL << 13)
+#define MMC_STAT_PRG_DONE (0x0001UL << 12)
+#define MMC_STAT_DATA_TRAN_DONE (0x0001UL << 11)
+#define MMC_STAT_CLK_EN (0x0001UL << 8)
+#define MMC_STAT_RECV_FIFO_FULL (0x0001UL << 7)
+#define MMC_STAT_XMIT_FIFO_EMPTY (0x0001UL << 6)
+#define MMC_STAT_RES_CRC_ERROR (0x0001UL << 5)
+#define MMC_STAT_SPI_READ_ERROR_TOKEN (0x0001UL << 4)
+#define MMC_STAT_CRC_READ_ERROR (0x0001UL << 3)
+#define MMC_STAT_CRC_WRITE_ERROR (0x0001UL << 2)
+#define MMC_STAT_TIME_OUT_RESPONSE (0x0001UL << 1)
+#define MMC_STAT_READ_TIME_OUT (0x0001UL)
+
+#define MMC_STAT_ERRORS (MMC_STAT_RES_CRC_ERROR|MMC_STAT_SPI_READ_ERROR_TOKEN\
+ |MMC_STAT_CRC_READ_ERROR|MMC_STAT_TIME_OUT_RESPONSE\
+ |MMC_STAT_READ_TIME_OUT|MMC_STAT_CRC_WRITE_ERROR)
+
+/* MMC_CLKRT */
+#define MMC_CLKRT_20MHZ (0x0000UL)
+#define MMC_CLKRT_10MHZ (0x0001UL)
+#define MMC_CLKRT_5MHZ (0x0002UL)
+#define MMC_CLKRT_2_5MHZ (0x0003UL)
+#define MMC_CLKRT_1_25MHZ (0x0004UL)
+#define MMC_CLKRT_0_625MHZ (0x0005UL)
+#define MMC_CLKRT_0_3125MHZ (0x0006UL)
+
+/* MMC_SPI */
+#define MMC_SPI_DISABLE (0x00UL)
+#define MMC_SPI_EN (0x01UL)
+#define MMC_SPI_CS_EN (0x01UL << 2)
+#define MMC_SPI_CS_ADDRESS (0x01UL << 3)
+#define MMC_SPI_CRC_ON (0x01UL << 1)
+
+/* MMC_CMDAT */
+#define MMC_CMDAT_SD_4DAT (0x0001UL << 8)
+#define MMC_CMDAT_MMC_DMA_EN (0x0001UL << 7)
+#define MMC_CMDAT_INIT (0x0001UL << 6)
+#define MMC_CMDAT_BUSY (0x0001UL << 5)
+#define MMC_CMDAT_BCR (0x0003UL << 5)
+#define MMC_CMDAT_STREAM (0x0001UL << 4)
+#define MMC_CMDAT_BLOCK (0x0000UL << 4)
+#define MMC_CMDAT_WRITE (0x0001UL << 3)
+#define MMC_CMDAT_READ (0x0000UL << 3)
+#define MMC_CMDAT_DATA_EN (0x0001UL << 2)
+#define MMC_CMDAT_R0 (0)
+#define MMC_CMDAT_R1 (0x0001UL)
+#define MMC_CMDAT_R2 (0x0002UL)
+#define MMC_CMDAT_R3 (0x0003UL)
+
+/* MMC_RESTO */
+#define MMC_RES_TO_MAX (0x007fUL) /* [6:0] */
+
+/* MMC_RDTO */
+#define MMC_READ_TO_MAX (0x0ffffUL) /* [15:0] */
+
+/* MMC_BLKLEN */
+#define MMC_BLK_LEN_MAX (0x03ffUL) /* [9:0] */
+
+/* MMC_PRTBUF */
+#define MMC_PRTBUF_BUF_PART_FULL (0x01UL)
+#define MMC_PRTBUF_BUF_FULL (0x00UL )
+
+/* MMC_I_MASK */
+#define MMC_I_MASK_TXFIFO_WR_REQ (0x01UL << 6)
+#define MMC_I_MASK_RXFIFO_RD_REQ (0x01UL << 5)
+#define MMC_I_MASK_CLK_IS_OFF (0x01UL << 4)
+#define MMC_I_MASK_STOP_CMD (0x01UL << 3)
+#define MMC_I_MASK_END_CMD_RES (0x01UL << 2)
+#define MMC_I_MASK_PRG_DONE (0x01UL << 1)
+#define MMC_I_MASK_DATA_TRAN_DONE (0x01UL)
+#define MMC_I_MASK_ALL (0x07fUL)
+
+
+/* MMC_I_REG */
+#define MMC_I_REG_TXFIFO_WR_REQ (0x01UL << 6)
+#define MMC_I_REG_RXFIFO_RD_REQ (0x01UL << 5)
+#define MMC_I_REG_CLK_IS_OFF (0x01UL << 4)
+#define MMC_I_REG_STOP_CMD (0x01UL << 3)
+#define MMC_I_REG_END_CMD_RES (0x01UL << 2)
+#define MMC_I_REG_PRG_DONE (0x01UL << 1)
+#define MMC_I_REG_DATA_TRAN_DONE (0x01UL)
+#define MMC_I_REG_ALL (0x007fUL)
+
+/* MMC_CMD */
+#define MMC_CMD_INDEX_MAX (0x006fUL) /* [5:0] */
+#define CMD(x) (x)
+
+#define MMC_DEFAULT_RCA 1
+
+#define MMC_BLOCK_SIZE 512
+#define MMC_MAX_BLOCK_SIZE 512
+
+#define MMC_R1_IDLE_STATE 0x01
+#define MMC_R1_ERASE_STATE 0x02
+#define MMC_R1_ILLEGAL_CMD 0x04
+#define MMC_R1_COM_CRC_ERR 0x08
+#define MMC_R1_ERASE_SEQ_ERR 0x01
+#define MMC_R1_ADDR_ERR 0x02
+#define MMC_R1_PARAM_ERR 0x04
+
+#define MMC_R1B_WP_ERASE_SKIP 0x0002
+#define MMC_R1B_ERR 0x0004
+#define MMC_R1B_CC_ERR 0x0008
+#define MMC_R1B_CARD_ECC_ERR 0x0010
+#define MMC_R1B_WP_VIOLATION 0x0020
+#define MMC_R1B_ERASE_PARAM 0x0040
+#define MMC_R1B_OOR 0x0080
+#define MMC_R1B_IDLE_STATE 0x0100
+#define MMC_R1B_ERASE_RESET 0x0200
+#define MMC_R1B_ILLEGAL_CMD 0x0400
+#define MMC_R1B_COM_CRC_ERR 0x0800
+#define MMC_R1B_ERASE_SEQ_ERR 0x1000
+#define MMC_R1B_ADDR_ERR 0x2000
+#define MMC_R1B_PARAM_ERR 0x4000
+
+#endif /* __MMC_PXA_P_H__ */
diff -Naur u-boot-2009.03_orig/drivers/mtd/CVS/Entries u-boot-2009.03/drivers/mtd/CVS/Entries
--- u-boot-2009.03_orig/drivers/mtd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/CVS/Entries 2009-03-25 15:58:02.356131100 -0700
@@ -0,0 +1,14 @@
+D/nand////
+D/nand_legacy////
+D/onenand////
+D/spi////
+D/ubi////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at45.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cfi_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cfi_mtd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dataflash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jedec_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mtdcore.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mtdpart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mw_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/drivers/mtd/CVS/Entries.Extra u-boot-2009.03/drivers/mtd/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/mtd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/CVS/Entries.Extra 2009-03-25 15:58:02.356131100 -0700
@@ -0,0 +1,14 @@
+D/nand////
+D/nand_legacy////
+D/onenand////
+D/spi////
+D/ubi////
+/Makefile///1238019728/
+/at45.c///1238019728/
+/cfi_flash.c///1238019728/
+/cfi_mtd.c///1238019728/
+/dataflash.c///1238019728/
+/jedec_flash.c///1238019728/
+/mtdcore.c///1238019728/
+/mtdpart.c///1238019728/
+/mw_eeprom.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/CVS/Entries.Extra.Old u-boot-2009.03/drivers/mtd/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/mtd/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/CVS/Entries.Extra.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019728/
+/at45.c///1238019728/
+/cfi_flash.c///1238019728/
+/cfi_mtd.c///1238019728/
+/dataflash.c///1238019728/
+/jedec_flash.c///1238019728/
+/mtdcore.c///1238019728/
+/mtdpart.c///1238019728/
+/mw_eeprom.c///1238019728/
+D/nand////
+D/nand_legacy////
+D/onenand////
+D/spi////
+D/ubi////
diff -Naur u-boot-2009.03_orig/drivers/mtd/CVS/Entries.Old u-boot-2009.03/drivers/mtd/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/mtd/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/CVS/Entries.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/at45.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/cfi_flash.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/cfi_mtd.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/dataflash.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/jedec_flash.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/mtdcore.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/mtdpart.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/mw_eeprom.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D/nand////
+D/nand_legacy////
+D/onenand////
+D/spi////
+D/ubi////
diff -Naur u-boot-2009.03_orig/drivers/mtd/CVS/Repository u-boot-2009.03/drivers/mtd/CVS/Repository
--- u-boot-2009.03_orig/drivers/mtd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/CVS/Repository 2009-03-25 15:25:28.899883300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/mtd
diff -Naur u-boot-2009.03_orig/drivers/mtd/CVS/Root u-boot-2009.03/drivers/mtd/CVS/Root
--- u-boot-2009.03_orig/drivers/mtd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/CVS/Root 2009-03-25 15:25:28.899883300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries u-boot-2009.03/drivers/mtd/nand/CVS/Entries
--- u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand/CVS/Entries 2009-03-25 15:58:01.871759200 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/diskonchip.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_elbc_nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_upm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_base.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_bbt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_ecc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_ids.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_util.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nomadik.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap_gpmc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c64xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries.Extra u-boot-2009.03/drivers/mtd/nand/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand/CVS/Entries.Extra 2009-03-25 15:58:01.887384100 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019728/
+/bfin_nand.c///1238019728/
+/diskonchip.c///1238019728/
+/fsl_elbc_nand.c///1238019728/
+/fsl_upm.c///1238019728/
+/nand.c///1238019728/
+/nand_base.c///1238019728/
+/nand_bbt.c///1238019728/
+/nand_ecc.c///1238019728/
+/nand_ids.c///1238019728/
+/nand_util.c///1238019728/
+/nomadik.c///1238019728/
+/omap_gpmc.c///1238019728/
+/s3c64xx.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries.Extra.Old u-boot-2009.03/drivers/mtd/nand/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand/CVS/Entries.Extra.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019728/
+/bfin_nand.c///1238019728/
+/diskonchip.c///1238019728/
+/fsl_elbc_nand.c///1238019728/
+/fsl_upm.c///1238019728/
+/nand.c///1238019728/
+/nand_base.c///1238019728/
+/nand_bbt.c///1238019728/
+/nand_ecc.c///1238019728/
+/nand_ids.c///1238019728/
+/nand_util.c///1238019728/
+/nomadik.c///1238019728/
+/omap_gpmc.c///1238019728/
+/s3c64xx.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries.Old u-boot-2009.03/drivers/mtd/nand/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/mtd/nand/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand/CVS/Entries.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/bfin_nand.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/diskonchip.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/fsl_elbc_nand.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/fsl_upm.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nand.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nand_base.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nand_bbt.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nand_ecc.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nand_ids.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nand_util.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nomadik.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/omap_gpmc.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/s3c64xx.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand/CVS/Repository u-boot-2009.03/drivers/mtd/nand/CVS/Repository
--- u-boot-2009.03_orig/drivers/mtd/nand/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand/CVS/Repository 2009-03-25 15:25:29.009257600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/mtd/nand
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand/CVS/Root u-boot-2009.03/drivers/mtd/nand/CVS/Root
--- u-boot-2009.03_orig/drivers/mtd/nand/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand/CVS/Root 2009-03-25 15:25:29.009257600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries
--- u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries 2009-03-25 15:58:01.965508600 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_legacy.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries.Extra u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries.Extra 2009-03-25 15:58:01.965508600 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019728/
+/nand_legacy.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries.Extra.Old u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries.Extra.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019728/
+/nand_legacy.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries.Old u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Entries.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/nand_legacy.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Repository u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Repository
--- u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Repository 2009-03-25 15:25:29.259256000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/mtd/nand_legacy
diff -Naur u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Root u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Root
--- u-boot-2009.03_orig/drivers/mtd/nand_legacy/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/nand_legacy/CVS/Root 2009-03-25 15:25:29.259256000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries u-boot-2009.03/drivers/mtd/onenand/CVS/Entries
--- u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/onenand/CVS/Entries 2009-03-25 15:58:02.028008200 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_base.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_bbt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_uboot.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries.Extra u-boot-2009.03/drivers/mtd/onenand/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/onenand/CVS/Entries.Extra 2009-03-25 15:58:02.028008200 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019728/
+/onenand_base.c///1238019728/
+/onenand_bbt.c///1238019728/
+/onenand_uboot.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries.Extra.Old u-boot-2009.03/drivers/mtd/onenand/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/onenand/CVS/Entries.Extra.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019728/
+/onenand_base.c///1238019728/
+/onenand_bbt.c///1238019728/
+/onenand_uboot.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries.Old u-boot-2009.03/drivers/mtd/onenand/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/onenand/CVS/Entries.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/onenand_base.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/onenand_bbt.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/onenand_uboot.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Repository u-boot-2009.03/drivers/mtd/onenand/CVS/Repository
--- u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/onenand/CVS/Repository 2009-03-25 15:25:29.353005400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/mtd/onenand
diff -Naur u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Root u-boot-2009.03/drivers/mtd/onenand/CVS/Root
--- u-boot-2009.03_orig/drivers/mtd/onenand/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/onenand/CVS/Root 2009-03-25 15:25:29.337380500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries u-boot-2009.03/drivers/mtd/spi/CVS/Entries
--- u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/spi/CVS/Entries 2009-03-25 15:58:02.199882100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi_flash.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi_flash_internal.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stmicro.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries.Extra u-boot-2009.03/drivers/mtd/spi/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/spi/CVS/Entries.Extra 2009-03-25 15:58:02.199882100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019728/
+/atmel.c///1238019728/
+/spi_flash.c///1238019728/
+/spi_flash_internal.h///1238019728/
+/stmicro.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries.Extra.Old u-boot-2009.03/drivers/mtd/spi/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/spi/CVS/Entries.Extra.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019728/
+/atmel.c///1238019728/
+/spi_flash.c///1238019728/
+/spi_flash_internal.h///1238019728/
+/stmicro.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries.Old u-boot-2009.03/drivers/mtd/spi/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/mtd/spi/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/spi/CVS/Entries.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/atmel.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/spi_flash.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/spi_flash_internal.h/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/stmicro.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/spi/CVS/Repository u-boot-2009.03/drivers/mtd/spi/CVS/Repository
--- u-boot-2009.03_orig/drivers/mtd/spi/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/spi/CVS/Repository 2009-03-25 15:25:29.524879300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/mtd/spi
diff -Naur u-boot-2009.03_orig/drivers/mtd/spi/CVS/Root u-boot-2009.03/drivers/mtd/spi/CVS/Root
--- u-boot-2009.03_orig/drivers/mtd/spi/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/spi/CVS/Root 2009-03-25 15:25:29.524879300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries u-boot-2009.03/drivers/mtd/ubi/CVS/Entries
--- u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/ubi/CVS/Entries 2009-03-25 15:58:02.324881300 -0700
@@ -0,0 +1,20 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/build.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc32.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc32defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc32table.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/debug.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/debug.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eba.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kapi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/misc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scan.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scan.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubi-media.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/upd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vmt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vtbl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/wl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries.Extra u-boot-2009.03/drivers/mtd/ubi/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/ubi/CVS/Entries.Extra 2009-03-25 15:58:02.324881300 -0700
@@ -0,0 +1,19 @@
+/Makefile///1238019728/
+/build.c///1238019728/
+/crc32.c///1238019728/
+/crc32defs.h///1238019728/
+/crc32table.h///1238019728/
+/debug.c///1238019728/
+/debug.h///1238019728/
+/eba.c///1238019728/
+/io.c///1238019728/
+/kapi.c///1238019728/
+/misc.c///1238019728/
+/scan.c///1238019728/
+/scan.h///1238019728/
+/ubi-media.h///1238019728/
+/ubi.h///1238019728/
+/upd.c///1238019728/
+/vmt.c///1238019728/
+/vtbl.c///1238019728/
+/wl.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries.Extra.Old u-boot-2009.03/drivers/mtd/ubi/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/ubi/CVS/Entries.Extra.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,19 @@
+/Makefile///1238019728/
+/build.c///1238019728/
+/crc32.c///1238019728/
+/crc32defs.h///1238019728/
+/crc32table.h///1238019728/
+/debug.c///1238019728/
+/debug.h///1238019728/
+/eba.c///1238019728/
+/io.c///1238019728/
+/kapi.c///1238019728/
+/misc.c///1238019728/
+/scan.c///1238019728/
+/scan.h///1238019728/
+/ubi-media.h///1238019728/
+/ubi.h///1238019728/
+/upd.c///1238019728/
+/vmt.c///1238019728/
+/vtbl.c///1238019728/
+/wl.c///1238019728/
diff -Naur u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries.Old u-boot-2009.03/drivers/mtd/ubi/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/ubi/CVS/Entries.Old 2009-03-25 15:25:29.000000000 -0700
@@ -0,0 +1,20 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/build.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/crc32.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/crc32defs.h/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/crc32table.h/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/debug.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/debug.h/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/eba.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/io.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/kapi.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/misc.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/scan.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/scan.h/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/ubi-media.h/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/ubi.h/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/upd.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/vmt.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/vtbl.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+/wl.c/1.1.1.1/Wed Mar 25 22:22:08 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Repository u-boot-2009.03/drivers/mtd/ubi/CVS/Repository
--- u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/ubi/CVS/Repository 2009-03-25 15:25:29.649878500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/mtd/ubi
diff -Naur u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Root u-boot-2009.03/drivers/mtd/ubi/CVS/Root
--- u-boot-2009.03_orig/drivers/mtd/ubi/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/mtd/ubi/CVS/Root 2009-03-25 15:25:29.649878500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/net/CVS/Entries u-boot-2009.03/drivers/net/CVS/Entries
--- u-boot-2009.03_orig/drivers/net/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/CVS/Entries 2009-03-31 14:53:44.597454400 -0700
@@ -0,0 +1,83 @@
+D/phy////
+D/sk98lin////
+/3c589.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/3c589.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_enet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/5701rls.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/5701rls.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/8390.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88180.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88180.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88796.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88796.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_autoneg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_autoneg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_bits.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_debug.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_lm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_mm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_queue.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_mac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_mac.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cs8900.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cs8900.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dc2114x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dm9000x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dm9000x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dnet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dnet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/e1000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/e1000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eepro100.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/enc28j60.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_mcdmafec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/greth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/greth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inca-ip_sw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ks8695eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lan91c96.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lan91c96.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/macb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/macb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcffec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcfmii.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc512x_fec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc512x_fec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx_fec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx_fec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/natsemi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000_base.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000_base.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netconsole.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nicext.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns8382x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcnet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/plb2800_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8019.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8019.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8139.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8169.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c4510b_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc91111.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc91111.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc911x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc911x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tigon3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tigon3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsi108_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uli526x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vsc7385.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_emac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_emaclite.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns7520_eth.c/1.1.1.1/Tue Mar 31 21:53:34 2009//T1.1.1.1
+/ns9750_eth.c/1.1.1.1/Tue Mar 31 21:53:34 2009//T1.1.1.1
+/s3c4510b_eth.h/1.1.1.1/Tue Mar 31 21:53:44 2009//T1.1.1.1
diff -Naur u-boot-2009.03_orig/drivers/net/CVS/Entries.Extra u-boot-2009.03/drivers/net/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/net/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/CVS/Entries.Extra 2009-03-31 14:53:44.597454400 -0700
@@ -0,0 +1,83 @@
+D/phy////
+D/sk98lin////
+/3c589.c///1238019728/
+/3c589.h///1238019728/
+/4xx_enet.c///1238019728/
+/5701rls.c///1238019728/
+/5701rls.h///1238019728/
+/8390.h///1238019728/
+/Makefile///1238019729/
+/ax88180.c///1238019728/
+/ax88180.h///1238019728/
+/ax88796.c///1238019728/
+/ax88796.h///1238019728/
+/bcm570x.c///1238019728/
+/bcm570x_autoneg.c///1238019728/
+/bcm570x_autoneg.h///1238019728/
+/bcm570x_bits.h///1238019728/
+/bcm570x_debug.h///1238019728/
+/bcm570x_lm.h///1238019728/
+/bcm570x_mm.h///1238019728/
+/bcm570x_queue.h///1238019728/
+/bfin_mac.c///1238019728/
+/bfin_mac.h///1238019728/
+/cs8900.c///1238019728/
+/cs8900.h///1238019728/
+/dc2114x.c///1238019728/
+/dm9000x.c///1238019728/
+/dm9000x.h///1238019728/
+/dnet.c///1238019729/
+/dnet.h///1238019729/
+/e1000.c///1238019729/
+/e1000.h///1238019729/
+/eepro100.c///1238019729/
+/enc28j60.c///1238019729/
+/fsl_mcdmafec.c///1238019729/
+/greth.c///1238019729/
+/greth.h///1238019729/
+/inca-ip_sw.c///1238019729/
+/ks8695eth.c///1238019729/
+/lan91c96.c///1238019729/
+/lan91c96.h///1238019729/
+/macb.c///1238019729/
+/macb.h///1238019729/
+/mcffec.c///1238019729/
+/mcfmii.c///1238019729/
+/mpc512x_fec.c///1238019729/
+/mpc512x_fec.h///1238019729/
+/mpc5xxx_fec.c///1238019729/
+/mpc5xxx_fec.h///1238019729/
+/natsemi.c///1238019729/
+/ne2000.c///1238019729/
+/ne2000.h///1238019729/
+/ne2000_base.c///1238019729/
+/ne2000_base.h///1238019729/
+/netarm_eth.c///1238019729/
+/netarm_eth.h///1238019729/
+/netconsole.c///1238019729/
+/nicext.h///1238019729/
+/ns8382x.c///1238019729/
+/pcnet.c///1238019729/
+/plb2800_eth.c///1238019729/
+/rtl8019.c///1238019729/
+/rtl8019.h///1238019729/
+/rtl8139.c///1238019729/
+/rtl8169.c///1238019729/
+/s3c4510b_eth.c///1238019729/
+/sh_eth.c///1238019729/
+/sh_eth.h///1238019729/
+/smc91111.c///1238019729/
+/smc91111.h///1238019729/
+/smc911x.c///1238019729/
+/smc911x.h///1238019729/
+/tigon3.c///1238019729/
+/tigon3.h///1238019729/
+/tsec.c///1238019729/
+/tsi108_eth.c///1238019729/
+/uli526x.c///1238019729/
+/vsc7385.c///1238019729/
+/xilinx_emac.c///1238019729/
+/xilinx_emaclite.c///1238019729/
+/ns7520_eth.c///1238019729/
+/ns9750_eth.c///1238019729/
+/s3c4510b_eth.h///1238019729/
diff -Naur u-boot-2009.03_orig/drivers/net/CVS/Entries.Extra.Old u-boot-2009.03/drivers/net/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/net/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/CVS/Entries.Extra.Old 2009-03-31 14:53:34.000000000 -0700
@@ -0,0 +1,83 @@
+D/phy////
+D/sk98lin////
+/3c589.c///1238019728/
+/3c589.h///1238019728/
+/4xx_enet.c///1238019728/
+/5701rls.c///1238019728/
+/5701rls.h///1238019728/
+/8390.h///1238019728/
+/Makefile///1238019729/
+/ax88180.c///1238019728/
+/ax88180.h///1238019728/
+/ax88796.c///1238019728/
+/ax88796.h///1238019728/
+/bcm570x.c///1238019728/
+/bcm570x_autoneg.c///1238019728/
+/bcm570x_autoneg.h///1238019728/
+/bcm570x_bits.h///1238019728/
+/bcm570x_debug.h///1238019728/
+/bcm570x_lm.h///1238019728/
+/bcm570x_mm.h///1238019728/
+/bcm570x_queue.h///1238019728/
+/bfin_mac.c///1238019728/
+/bfin_mac.h///1238019728/
+/cs8900.c///1238019728/
+/cs8900.h///1238019728/
+/dc2114x.c///1238019728/
+/dm9000x.c///1238019728/
+/dm9000x.h///1238019728/
+/dnet.c///1238019729/
+/dnet.h///1238019729/
+/e1000.c///1238019729/
+/e1000.h///1238019729/
+/eepro100.c///1238019729/
+/enc28j60.c///1238019729/
+/fsl_mcdmafec.c///1238019729/
+/greth.c///1238019729/
+/greth.h///1238019729/
+/inca-ip_sw.c///1238019729/
+/ks8695eth.c///1238019729/
+/lan91c96.c///1238019729/
+/lan91c96.h///1238019729/
+/macb.c///1238019729/
+/macb.h///1238019729/
+/mcffec.c///1238019729/
+/mcfmii.c///1238019729/
+/mpc512x_fec.c///1238019729/
+/mpc512x_fec.h///1238019729/
+/mpc5xxx_fec.c///1238019729/
+/mpc5xxx_fec.h///1238019729/
+/natsemi.c///1238019729/
+/ne2000.c///1238019729/
+/ne2000.h///1238019729/
+/ne2000_base.c///1238019729/
+/ne2000_base.h///1238019729/
+/netarm_eth.c///1238019729/
+/netarm_eth.h///1238019729/
+/netconsole.c///1238019729/
+/nicext.h///1238019729/
+/ns8382x.c///1238019729/
+/pcnet.c///1238019729/
+/plb2800_eth.c///1238019729/
+/rtl8019.c///1238019729/
+/rtl8019.h///1238019729/
+/rtl8139.c///1238019729/
+/rtl8169.c///1238019729/
+/s3c4510b_eth.c///1238019729/
+/sh_eth.c///1238019729/
+/sh_eth.h///1238019729/
+/smc91111.c///1238019729/
+/smc91111.h///1238019729/
+/smc911x.c///1238019729/
+/smc911x.h///1238019729/
+/tigon3.c///1238019729/
+/tigon3.h///1238019729/
+/tsec.c///1238019729/
+/tsi108_eth.c///1238019729/
+/uli526x.c///1238019729/
+/vsc7385.c///1238019729/
+/xilinx_emac.c///1238019729/
+/xilinx_emaclite.c///1238019729/
+/s3c4510b_eth.h///1238028703/
+/ns7520_eth.c///1238019729/
+/ns9750_eth.c///1238019729/
diff -Naur u-boot-2009.03_orig/drivers/net/CVS/Entries.Old u-boot-2009.03/drivers/net/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/net/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/CVS/Entries.Old 2009-03-31 14:53:34.000000000 -0700
@@ -0,0 +1,83 @@
+D/phy////
+D/sk98lin////
+/3c589.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/3c589.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_enet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/5701rls.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/5701rls.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/8390.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88180.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88180.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88796.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ax88796.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_autoneg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_autoneg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_bits.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_debug.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_lm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_mm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm570x_queue.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_mac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_mac.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cs8900.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cs8900.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dc2114x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dm9000x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dm9000x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dnet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dnet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/e1000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/e1000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eepro100.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/enc28j60.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_mcdmafec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/greth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/greth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inca-ip_sw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ks8695eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lan91c96.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lan91c96.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/macb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/macb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcffec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcfmii.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc512x_fec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc512x_fec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx_fec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx_fec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/natsemi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000_base.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ne2000_base.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netconsole.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nicext.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns8382x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcnet.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/plb2800_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8019.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8019.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8139.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtl8169.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c4510b_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh_eth.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc91111.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc91111.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc911x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc911x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tigon3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tigon3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsi108_eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uli526x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vsc7385.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_emac.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_emaclite.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c4510b_eth.h/1.2/Thu Mar 26 00:51:43 2009//
+/ns7520_eth.c/1.1.1.1/Tue Mar 31 21:53:34 2009//T1.1.1.1
+/ns9750_eth.c/1.1.1.1/Tue Mar 31 21:53:34 2009//T1.1.1.1
diff -Naur u-boot-2009.03_orig/drivers/net/CVS/Repository u-boot-2009.03/drivers/net/CVS/Repository
--- u-boot-2009.03_orig/drivers/net/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/CVS/Repository 2009-03-25 15:25:29.931126700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/net
diff -Naur u-boot-2009.03_orig/drivers/net/CVS/Root u-boot-2009.03/drivers/net/CVS/Root
--- u-boot-2009.03_orig/drivers/net/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/CVS/Root 2009-03-25 15:25:29.931126700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/net/ns7520_eth.c u-boot-2009.03/drivers/net/ns7520_eth.c
--- u-boot-2009.03_orig/drivers/net/ns7520_eth.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/ns7520_eth.c 2009-03-31 14:53:34.097588800 -0700
@@ -1,850 +1,850 @@
-/***********************************************************************
- *
- * Copyright (C) 2005 by Videon Central, Inc.
- *
- * $Id$
- * @Author: Arthur Shipkowski
- * @Descr: Ethernet driver for the NS7520. Uses polled Ethernet, like
- * the older netarmeth driver. Note that attempting to filter
- * broadcast and multicast out in the SAFR register will cause
- * bad things due to released errata.
- * @References: [1] NS7520 Hardware Reference, December 2003
- * [2] Intel LXT971 Datasheet #249414 Rev. 02
- *
- ***********************************************************************/
-
-#include <common.h>
-
-#include <net.h> /* NetSendPacket */
-#include <asm/arch/netarm_registers.h>
-#include <asm/arch/netarm_dma_module.h>
-
-#include "ns7520_eth.h" /* for Ethernet and PHY */
-
-/**
- * Send an error message to the terminal.
- */
-#define ERROR(x) \
-do { \
- char *__foo = strrchr(__FILE__, '/'); \
- \
- printf("%s: %d: %s(): ", (__foo == NULL ? __FILE__ : (__foo + 1)), \
- __LINE__, __FUNCTION__); \
- printf x; printf("\n"); \
-} while (0);
-
-/* some definition to make transistion to linux easier */
-
-#define NS7520_DRIVER_NAME "eth"
-#define KERN_WARNING "Warning:"
-#define KERN_ERR "Error:"
-#define KERN_INFO "Info:"
-
-#if 1
-# define DEBUG
-#endif
-
-#ifdef DEBUG
-# define printk printf
-
-# define DEBUG_INIT 0x0001
-# define DEBUG_MINOR 0x0002
-# define DEBUG_RX 0x0004
-# define DEBUG_TX 0x0008
-# define DEBUG_INT 0x0010
-# define DEBUG_POLL 0x0020
-# define DEBUG_LINK 0x0040
-# define DEBUG_MII 0x0100
-# define DEBUG_MII_LOW 0x0200
-# define DEBUG_MEM 0x0400
-# define DEBUG_ERROR 0x4000
-# define DEBUG_ERROR_CRIT 0x8000
-
-static int nDebugLvl = DEBUG_ERROR_CRIT;
-
-# define DEBUG_ARGS0( FLG, a0 ) if( ( nDebugLvl & (FLG) ) == (FLG) ) \
- printf("%s: " a0, __FUNCTION__, 0, 0, 0, 0, 0, 0 )
-# define DEBUG_ARGS1( FLG, a0, a1 ) if( ( nDebugLvl & (FLG) ) == (FLG)) \
- printf("%s: " a0, __FUNCTION__, (int)(a1), 0, 0, 0, 0, 0 )
-# define DEBUG_ARGS2( FLG, a0, a1, a2 ) if( (nDebugLvl & (FLG)) ==(FLG))\
- printf("%s: " a0, __FUNCTION__, (int)(a1), (int)(a2), 0, 0,0,0 )
-# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 ) if((nDebugLvl &(FLG))==(FLG))\
- printf("%s: "a0,__FUNCTION__,(int)(a1),(int)(a2),(int)(a3),0,0,0)
-# define DEBUG_FN( FLG ) if( (nDebugLvl & (FLG)) == (FLG) ) \
- printf("\r%s:line %d\n", (int)__FUNCTION__, __LINE__, 0,0,0,0);
-# define ASSERT( expr, func ) if( !( expr ) ) { \
- printf( "Assertion failed! %s:line %d %s\n", \
- (int)__FUNCTION__,__LINE__,(int)(#expr),0,0,0); \
- func }
-#else /* DEBUG */
-# define printk(...)
-# define DEBUG_ARGS0( FLG, a0 )
-# define DEBUG_ARGS1( FLG, a0, a1 )
-# define DEBUG_ARGS2( FLG, a0, a1, a2 )
-# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 )
-# define DEBUG_FN( n )
-# define ASSERT(expr, func)
-#endif /* DEBUG */
-
-#define NS7520_MII_NEG_DELAY (5*CONFIG_SYS_HZ) /* in s */
-#define TX_TIMEOUT (5*CONFIG_SYS_HZ) /* in s */
-#define RX_STALL_WORKAROUND_CNT 100
-
-static int ns7520_eth_reset(void);
-
-static void ns7520_link_auto_negotiate(void);
-static void ns7520_link_update_egcr(void);
-static void ns7520_link_print_changed(void);
-
-/* the PHY stuff */
-
-static char ns7520_mii_identify_phy(void);
-static unsigned short ns7520_mii_read(unsigned short uiRegister);
-static void ns7520_mii_write(unsigned short uiRegister,
- unsigned short uiData);
-static unsigned int ns7520_mii_get_clock_divisor(unsigned int
- unMaxMDIOClk);
-static unsigned int ns7520_mii_poll_busy(void);
-
-static unsigned int nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
-static unsigned int uiLastLinkStatus;
-static PhyType phyDetected = PHY_NONE;
-
-/***********************************************************************
- * @Function: eth_init
- * @Return: -1 on failure otherwise 0
- * @Descr: Initializes the ethernet engine and uses either FS Forth's default
- * MAC addr or the one in environment
- ***********************************************************************/
-
-int eth_init(bd_t * pbis)
-{
- unsigned char aucMACAddr[6];
- char *pcTmp = getenv("ethaddr");
- char *pcEnd;
- int i;
-
- DEBUG_FN(DEBUG_INIT);
-
- /* no need to check for hardware */
-
- if (!ns7520_eth_reset())
- return -1;
-
- if (NULL == pcTmp)
- return -1;
-
- for (i = 0; i < 6; i++) {
- aucMACAddr[i] =
- pcTmp ? simple_strtoul(pcTmp, &pcEnd, 16) : 0;
- pcTmp = (*pcTmp) ? pcEnd + 1 : pcEnd;
- }
-
- /* configure ethernet address */
-
- *get_eth_reg_addr(NS7520_ETH_SA1) =
- aucMACAddr[5] << 8 | aucMACAddr[4];
- *get_eth_reg_addr(NS7520_ETH_SA2) =
- aucMACAddr[3] << 8 | aucMACAddr[2];
- *get_eth_reg_addr(NS7520_ETH_SA3) =
- aucMACAddr[1] << 8 | aucMACAddr[0];
-
- /* enable hardware */
-
- *get_eth_reg_addr(NS7520_ETH_MAC1) = NS7520_ETH_MAC1_RXEN;
- *get_eth_reg_addr(NS7520_ETH_SUPP) = NS7520_ETH_SUPP_JABBER;
- *get_eth_reg_addr(NS7520_ETH_MAC1) = NS7520_ETH_MAC1_RXEN;
-
- /* the linux kernel may give packets < 60 bytes, for example arp */
- *get_eth_reg_addr(NS7520_ETH_MAC2) = NS7520_ETH_MAC2_CRCEN |
- NS7520_ETH_MAC2_PADEN | NS7520_ETH_MAC2_HUGE;
-
- /* Broadcast/multicast allowed; if you don't set this even unicast chokes */
- /* Based on NS7520 errata documentation */
- *get_eth_reg_addr(NS7520_ETH_SAFR) =
- NS7520_ETH_SAFR_BROAD | NS7520_ETH_SAFR_PRM;
-
- /* enable receive and transmit FIFO, use 10/100 Mbps MII */
- *get_eth_reg_addr(NS7520_ETH_EGCR) |=
- NS7520_ETH_EGCR_ETXWM_75 |
- NS7520_ETH_EGCR_ERX |
- NS7520_ETH_EGCR_ERXREG |
- NS7520_ETH_EGCR_ERXBR | NS7520_ETH_EGCR_ETX;
-
- return 0;
-}
-
-/***********************************************************************
- * @Function: eth_send
- * @Return: -1 on timeout otherwise 1
- * @Descr: sends one frame by DMA
- ***********************************************************************/
-
-int eth_send(volatile void *pPacket, int nLen)
-{
- int i, length32, retval = 1;
- char *pa;
- unsigned int *pa32, lastp = 0, rest;
- unsigned int status;
-
- pa = (char *) pPacket;
- pa32 = (unsigned int *) pPacket;
- length32 = nLen / 4;
- rest = nLen % 4;
-
- /* make sure there's no garbage in the last word */
- switch (rest) {
- case 0:
- lastp = pa32[length32 - 1];
- length32--;
- break;
- case 1:
- lastp = pa32[length32] & 0x000000ff;
- break;
- case 2:
- lastp = pa32[length32] & 0x0000ffff;
- break;
- case 3:
- lastp = pa32[length32] & 0x00ffffff;
- break;
- }
-
- while (((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
- NS7520_ETH_EGSR_TXREGE)
- == 0) {
- }
-
- /* write to the fifo */
- for (i = 0; i < length32; i++)
- *get_eth_reg_addr(NS7520_ETH_FIFO) = pa32[i];
-
- /* the last word is written to an extra register, this
- starts the transmission */
- *get_eth_reg_addr(NS7520_ETH_FIFOL) = lastp;
-
- /* Wait for it to be done */
- while ((*get_eth_reg_addr(NS7520_ETH_EGSR) & NS7520_ETH_EGSR_TXBC)
- == 0) {
- }
- status = (*get_eth_reg_addr(NS7520_ETH_ETSR));
- *get_eth_reg_addr(NS7520_ETH_EGSR) = NS7520_ETH_EGSR_TXBC; /* Clear it now */
-
- if (status & NS7520_ETH_ETSR_TXOK) {
- retval = 0; /* We're OK! */
- } else if (status & NS7520_ETH_ETSR_TXDEF) {
- printf("Deferred, we'll see.\n");
- retval = 0;
- } else if (status & NS7520_ETH_ETSR_TXAL) {
- printf("Late collision error, %d collisions.\n",
- (*get_eth_reg_addr(NS7520_ETH_ETSR)) &
- NS7520_ETH_ETSR_TXCOLC);
- } else if (status & NS7520_ETH_ETSR_TXAEC) {
- printf("Excessive collisions: %d\n",
- (*get_eth_reg_addr(NS7520_ETH_ETSR)) &
- NS7520_ETH_ETSR_TXCOLC);
- } else if (status & NS7520_ETH_ETSR_TXAED) {
- printf("Excessive deferral on xmit.\n");
- } else if (status & NS7520_ETH_ETSR_TXAUR) {
- printf("Packet underrun.\n");
- } else if (status & NS7520_ETH_ETSR_TXAJ) {
- printf("Jumbo packet error.\n");
- } else {
- printf("Error: Should never get here.\n");
- }
-
- return (retval);
-}
-
-/***********************************************************************
- * @Function: eth_rx
- * @Return: size of last frame in bytes or 0 if no frame available
- * @Descr: gives one frame to U-Boot which has been copied by DMA engine already
- * to NetRxPackets[ 0 ].
- ***********************************************************************/
-
-int eth_rx(void)
-{
- int i;
- unsigned short rxlen;
- unsigned short totrxlen = 0;
- unsigned int *addr;
- unsigned int rxstatus, lastrxlen;
- char *pa;
-
- /* If RXBR is 1, data block was received */
- while (((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
- NS7520_ETH_EGSR_RXBR) == NS7520_ETH_EGSR_RXBR) {
-
- /* get status register and the length of received block */
- rxstatus = *get_eth_reg_addr(NS7520_ETH_ERSR);
- rxlen = (rxstatus & NS7520_ETH_ERSR_RXSIZE) >> 16;
-
- /* clear RXBR to make fifo available */
- *get_eth_reg_addr(NS7520_ETH_EGSR) = NS7520_ETH_EGSR_RXBR;
-
- if (rxstatus & NS7520_ETH_ERSR_ROVER) {
- printf("Receive overrun, resetting FIFO.\n");
- *get_eth_reg_addr(NS7520_ETH_EGCR) &=
- ~NS7520_ETH_EGCR_ERX;
- udelay(20);
- *get_eth_reg_addr(NS7520_ETH_EGCR) |=
- NS7520_ETH_EGCR_ERX;
- }
- if (rxlen == 0) {
- printf("Nothing.\n");
- return 0;
- }
-
- addr = (unsigned int *) NetRxPackets[0];
- pa = (char *) NetRxPackets[0];
-
- /* read the fifo */
- for (i = 0; i < rxlen / 4; i++) {
- *addr = *get_eth_reg_addr(NS7520_ETH_FIFO);
- addr++;
- }
-
- if ((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
- NS7520_ETH_EGSR_RXREGR) {
- /* RXFDB indicates wether the last word is 1,2,3 or 4 bytes long */
- lastrxlen =
- ((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
- NS7520_ETH_EGSR_RXFDB_MA) >> 28;
- *addr = *get_eth_reg_addr(NS7520_ETH_FIFO);
- switch (lastrxlen) {
- case 1:
- *addr &= 0xff000000;
- break;
- case 2:
- *addr &= 0xffff0000;
- break;
- case 3:
- *addr &= 0xffffff00;
- break;
- }
- }
-
- /* Pass the packet up to the protocol layers. */
- NetReceive(NetRxPackets[0], rxlen - 4);
- totrxlen += rxlen - 4;
- }
-
- return totrxlen;
-}
-
-/***********************************************************************
- * @Function: eth_halt
- * @Return: n/a
- * @Descr: stops the ethernet engine
- ***********************************************************************/
-
-void eth_halt(void)
-{
- DEBUG_FN(DEBUG_INIT);
-
- *get_eth_reg_addr(NS7520_ETH_MAC1) &= ~NS7520_ETH_MAC1_RXEN;
- *get_eth_reg_addr(NS7520_ETH_EGCR) &= ~(NS7520_ETH_EGCR_ERX |
- NS7520_ETH_EGCR_ERXDMA |
- NS7520_ETH_EGCR_ERXREG |
- NS7520_ETH_EGCR_ERXBR |
- NS7520_ETH_EGCR_ETX |
- NS7520_ETH_EGCR_ETXDMA);
-}
-
-/***********************************************************************
- * @Function: ns7520_eth_reset
- * @Return: 0 on failure otherwise 1
- * @Descr: resets the ethernet interface and the PHY,
- * performs auto negotiation or fixed modes
- ***********************************************************************/
-
-static int ns7520_eth_reset(void)
-{
- DEBUG_FN(DEBUG_MINOR);
-
- /* Reset important registers */
- *get_eth_reg_addr(NS7520_ETH_EGCR) = 0; /* Null it out! */
- *get_eth_reg_addr(NS7520_ETH_MAC1) &= NS7520_ETH_MAC1_SRST;
- *get_eth_reg_addr(NS7520_ETH_MAC2) = 0;
- /* Reset MAC */
- *get_eth_reg_addr(NS7520_ETH_EGCR) |= NS7520_ETH_EGCR_MAC_RES;
- udelay(5);
- *get_eth_reg_addr(NS7520_ETH_EGCR) &= ~NS7520_ETH_EGCR_MAC_RES;
-
- /* reset and initialize PHY */
-
- *get_eth_reg_addr(NS7520_ETH_MAC1) &= ~NS7520_ETH_MAC1_SRST;
-
- /* we don't support hot plugging of PHY, therefore we don't reset
- phyDetected and nPhyMaxMdioClock here. The risk is if the setting is
- incorrect the first open
- may detect the PHY correctly but succeding will fail
- For reseting the PHY and identifying we have to use the standard
- MDIO CLOCK value 2.5 MHz only after hardware reset
- After having identified the PHY we will do faster */
-
- *get_eth_reg_addr(NS7520_ETH_MCFG) =
- ns7520_mii_get_clock_divisor(nPhyMaxMdioClock);
-
- /* reset PHY */
- ns7520_mii_write(PHY_BMCR, PHY_BMCR_RESET);
- ns7520_mii_write(PHY_BMCR, 0);
-
- udelay(3000); /* [2] p.70 says at least 300us reset recovery time. */
-
- /* MII clock has been setup to default, ns7520_mii_identify_phy should
- work for all */
-
- if (!ns7520_mii_identify_phy()) {
- printk(KERN_ERR NS7520_DRIVER_NAME
- ": Unsupported PHY, aborting\n");
- return 0;
- }
-
- /* now take the highest MDIO clock possible after detection */
- *get_eth_reg_addr(NS7520_ETH_MCFG) =
- ns7520_mii_get_clock_divisor(nPhyMaxMdioClock);
-
- /* PHY has been detected, so there can be no abort reason and we can
- finish initializing ethernet */
-
- uiLastLinkStatus = 0xff; /* undefined */
-
- ns7520_link_auto_negotiate();
-
- if (phyDetected == PHY_LXT971A)
- /* set LED2 to link mode */
- ns7520_mii_write(PHY_LXT971_LED_CFG,
- (PHY_LXT971_LED_CFG_LINK_ACT <<
- PHY_LXT971_LED_CFG_SHIFT_LED2) |
- (PHY_LXT971_LED_CFG_TRANSMIT <<
- PHY_LXT971_LED_CFG_SHIFT_LED1));
-
- return 1;
-}
-
-/***********************************************************************
- * @Function: ns7520_link_auto_negotiate
- * @Return: void
- * @Descr: performs auto-negotation of link.
- ***********************************************************************/
-
-static void ns7520_link_auto_negotiate(void)
-{
- unsigned long ulStartJiffies;
- unsigned short uiStatus;
-
- DEBUG_FN(DEBUG_LINK);
-
- /* run auto-negotation */
- /* define what we are capable of */
- ns7520_mii_write(PHY_ANAR,
- PHY_ANLPAR_TXFD |
- PHY_ANLPAR_TX |
- PHY_ANLPAR_10FD |
- PHY_ANLPAR_10 |
- PHY_ANLPAR_PSB_802_3);
- /* start auto-negotiation */
- ns7520_mii_write(PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
-
- /* wait for completion */
-
- ulStartJiffies = get_timer(0);
- while (get_timer(0) < ulStartJiffies + NS7520_MII_NEG_DELAY) {
- uiStatus = ns7520_mii_read(PHY_BMSR);
- if ((uiStatus &
- (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) ==
- (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) {
- /* lucky we are, auto-negotiation succeeded */
- ns7520_link_print_changed();
- ns7520_link_update_egcr();
- return;
- }
- }
-
- DEBUG_ARGS0(DEBUG_LINK, "auto-negotiation timed out\n");
- /* ignore invalid link settings */
-}
-
-/***********************************************************************
- * @Function: ns7520_link_update_egcr
- * @Return: void
- * @Descr: updates the EGCR and MAC2 link status after mode change or
- * auto-negotation
- ***********************************************************************/
-
-static void ns7520_link_update_egcr(void)
-{
- unsigned int unEGCR;
- unsigned int unMAC2;
- unsigned int unIPGT;
-
- DEBUG_FN(DEBUG_LINK);
-
- unEGCR = *get_eth_reg_addr(NS7520_ETH_EGCR);
- unMAC2 = *get_eth_reg_addr(NS7520_ETH_MAC2);
- unIPGT =
- *get_eth_reg_addr(NS7520_ETH_IPGT) & ~NS7520_ETH_IPGT_IPGT;
-
- unEGCR &= ~NS7520_ETH_EGCR_EFULLD;
- unMAC2 &= ~NS7520_ETH_MAC2_FULLD;
- if ((uiLastLinkStatus & PHY_LXT971_STAT2_DUPLEX_MODE)
- == PHY_LXT971_STAT2_DUPLEX_MODE) {
- unEGCR |= NS7520_ETH_EGCR_EFULLD;
- unMAC2 |= NS7520_ETH_MAC2_FULLD;
- unIPGT |= 0x15; /* see [1] p. 167 */
- } else
- unIPGT |= 0x12; /* see [1] p. 167 */
-
- *get_eth_reg_addr(NS7520_ETH_MAC2) = unMAC2;
- *get_eth_reg_addr(NS7520_ETH_EGCR) = unEGCR;
- *get_eth_reg_addr(NS7520_ETH_IPGT) = unIPGT;
-}
-
-/***********************************************************************
- * @Function: ns7520_link_print_changed
- * @Return: void
- * @Descr: checks whether the link status has changed and if so prints
- * the new mode
- ***********************************************************************/
-
-static void ns7520_link_print_changed(void)
-{
- unsigned short uiStatus;
- unsigned short uiControl;
-
- DEBUG_FN(DEBUG_LINK);
-
- uiControl = ns7520_mii_read(PHY_BMCR);
-
- if ((uiControl & PHY_BMCR_AUTON) == PHY_BMCR_AUTON) {
- /* PHY_BMSR_LS is only set on autonegotiation */
- uiStatus = ns7520_mii_read(PHY_BMSR);
-
- if (!(uiStatus & PHY_BMSR_LS)) {
- printk(KERN_WARNING NS7520_DRIVER_NAME
- ": link down\n");
- /* @TODO Linux: carrier_off */
- } else {
- /* @TODO Linux: carrier_on */
- if (phyDetected == PHY_LXT971A) {
- uiStatus =
- ns7520_mii_read(PHY_LXT971_STAT2);
- uiStatus &=
- (PHY_LXT971_STAT2_100BTX |
- PHY_LXT971_STAT2_DUPLEX_MODE |
- PHY_LXT971_STAT2_AUTO_NEG);
-
- /* mask out all uninteresting parts */
- }
- /* other PHYs must store there link information in
- uiStatus as PHY_LXT971 */
- }
- } else {
- /* mode has been forced, so uiStatus should be the same as the
- last link status, enforce printing */
- uiStatus = uiLastLinkStatus;
- uiLastLinkStatus = 0xff;
- }
-
- if (uiStatus != uiLastLinkStatus) {
- /* save current link status */
- uiLastLinkStatus = uiStatus;
-
- /* print new link status */
-
- printk(KERN_INFO NS7520_DRIVER_NAME
- ": link mode %i Mbps %s duplex %s\n",
- (uiStatus & PHY_LXT971_STAT2_100BTX) ? 100 : 10,
- (uiStatus & PHY_LXT971_STAT2_DUPLEX_MODE) ? "full" :
- "half",
- (uiStatus & PHY_LXT971_STAT2_AUTO_NEG) ? "(auto)" :
- "");
- }
-}
-
-/***********************************************************************
- * the MII low level stuff
- ***********************************************************************/
-
-/***********************************************************************
- * @Function: ns7520_mii_identify_phy
- * @Return: 1 if supported PHY has been detected otherwise 0
- * @Descr: checks for supported PHY and prints the IDs.
- ***********************************************************************/
-
-static char ns7520_mii_identify_phy(void)
-{
- unsigned short uiID1;
- unsigned short uiID2;
- unsigned char *szName;
- char cRes = 0;
-
- DEBUG_FN(DEBUG_MII);
-
- phyDetected = (PhyType) uiID1 = ns7520_mii_read(PHY_PHYIDR1);
-
- switch (phyDetected) {
- case PHY_LXT971A:
- szName = "LXT971A";
- uiID2 = ns7520_mii_read(PHY_PHYIDR2);
- nPhyMaxMdioClock = PHY_LXT971_MDIO_MAX_CLK;
- cRes = 1;
- break;
- case PHY_NONE:
- default:
- /* in case uiID1 == 0 && uiID2 == 0 we may have the wrong
- address or reset sets the wrong NS7520_ETH_MCFG_CLKS */
-
- uiID2 = 0;
- szName = "unknown";
- nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
- phyDetected = PHY_NONE;
- }
-
- printk(KERN_INFO NS7520_DRIVER_NAME
- ": PHY (0x%x, 0x%x) = %s detected\n", uiID1, uiID2, szName);
-
- return cRes;
-}
-
-/***********************************************************************
- * @Function: ns7520_mii_read
- * @Return: the data read from PHY register uiRegister
- * @Descr: the data read may be invalid if timed out. If so, a message
- * is printed but the invalid data is returned.
- * The fixed device address is being used.
- ***********************************************************************/
-
-static unsigned short ns7520_mii_read(unsigned short uiRegister)
-{
- DEBUG_FN(DEBUG_MII_LOW);
-
- /* write MII register to be read */
- *get_eth_reg_addr(NS7520_ETH_MADR) =
- CONFIG_PHY_ADDR << 8 | uiRegister;
-
- *get_eth_reg_addr(NS7520_ETH_MCMD) = NS7520_ETH_MCMD_READ;
-
- if (!ns7520_mii_poll_busy())
- printk(KERN_WARNING NS7520_DRIVER_NAME
- ": MII still busy in read\n");
- /* continue to read */
-
- *get_eth_reg_addr(NS7520_ETH_MCMD) = 0;
-
- return (unsigned short) (*get_eth_reg_addr(NS7520_ETH_MRDD));
-}
-
-/***********************************************************************
- * @Function: ns7520_mii_write
- * @Return: nothing
- * @Descr: writes the data to the PHY register. In case of a timeout,
- * no special handling is performed but a message printed
- * The fixed device address is being used.
- ***********************************************************************/
-
-static void ns7520_mii_write(unsigned short uiRegister,
- unsigned short uiData)
-{
- DEBUG_FN(DEBUG_MII_LOW);
-
- /* write MII register to be written */
- *get_eth_reg_addr(NS7520_ETH_MADR) =
- CONFIG_PHY_ADDR << 8 | uiRegister;
-
- *get_eth_reg_addr(NS7520_ETH_MWTD) = uiData;
-
- if (!ns7520_mii_poll_busy()) {
- printf(KERN_WARNING NS7520_DRIVER_NAME
- ": MII still busy in write\n");
- }
-}
-
-/***********************************************************************
- * @Function: ns7520_mii_get_clock_divisor
- * @Return: the clock divisor that should be used in NS7520_ETH_MCFG_CLKS
- * @Descr: if no clock divisor can be calculated for the
- * current SYSCLK and the maximum MDIO Clock, a warning is printed
- * and the greatest divisor is taken
- ***********************************************************************/
-
-static unsigned int ns7520_mii_get_clock_divisor(unsigned int unMaxMDIOClk)
-{
- struct {
- unsigned int unSysClkDivisor;
- unsigned int unClks; /* field for NS7520_ETH_MCFG_CLKS */
- } PHYClockDivisors[] = {
- {
- 4, NS7520_ETH_MCFG_CLKS_4}, {
- 6, NS7520_ETH_MCFG_CLKS_6}, {
- 8, NS7520_ETH_MCFG_CLKS_8}, {
- 10, NS7520_ETH_MCFG_CLKS_10}, {
- 14, NS7520_ETH_MCFG_CLKS_14}, {
- 20, NS7520_ETH_MCFG_CLKS_20}, {
- 28, NS7520_ETH_MCFG_CLKS_28}
- };
-
- int nIndexSysClkDiv;
- int nArraySize =
- sizeof(PHYClockDivisors) / sizeof(PHYClockDivisors[0]);
- unsigned int unClks = NS7520_ETH_MCFG_CLKS_28; /* defaults to
- greatest div */
-
- DEBUG_FN(DEBUG_INIT);
-
- for (nIndexSysClkDiv = 0; nIndexSysClkDiv < nArraySize;
- nIndexSysClkDiv++) {
- /* find first sysclock divisor that isn't higher than 2.5 MHz
- clock */
- if (NETARM_XTAL_FREQ /
- PHYClockDivisors[nIndexSysClkDiv].unSysClkDivisor <=
- unMaxMDIOClk) {
- unClks = PHYClockDivisors[nIndexSysClkDiv].unClks;
- break;
- }
- }
-
- DEBUG_ARGS2(DEBUG_INIT,
- "Taking MDIO Clock bit mask 0x%0x for max clock %i\n",
- unClks, unMaxMDIOClk);
-
- /* return greatest divisor */
- return unClks;
-}
-
-/***********************************************************************
- * @Function: ns7520_mii_poll_busy
- * @Return: 0 if timed out otherwise the remaing timeout
- * @Descr: waits until the MII has completed a command or it times out
- * code may be interrupted by hard interrupts.
- * It is not checked what happens on multiple actions when
- * the first is still being busy and we timeout.
- ***********************************************************************/
-
-static unsigned int ns7520_mii_poll_busy(void)
-{
- unsigned int unTimeout = 1000;
-
- DEBUG_FN(DEBUG_MII_LOW);
-
- while (((*get_eth_reg_addr(NS7520_ETH_MIND) & NS7520_ETH_MIND_BUSY)
- == NS7520_ETH_MIND_BUSY) && unTimeout)
- unTimeout--;
-
- return unTimeout;
-}
-
-/* ----------------------------------------------------------------------------
- * Net+ARM ethernet MII functionality.
- */
-#if defined(CONFIG_MII)
-
-/**
- * Maximum MII address we support
- */
-#define MII_ADDRESS_MAX (31)
-
-/**
- * Maximum MII register address we support
- */
-#define MII_REGISTER_MAX (31)
-
-/**
- * Ethernet MII interface return values for public functions.
- */
-enum mii_status {
- MII_STATUS_SUCCESS = 0,
- MII_STATUS_FAILURE = 1,
-};
-
-/**
- * Read a 16-bit value from an MII register.
- */
-extern int ns7520_miiphy_read(char *devname, unsigned char const addr,
- unsigned char const reg, unsigned short *const value)
-{
- int ret = MII_STATUS_FAILURE;
-
- /* Parameter checks */
- if (addr > MII_ADDRESS_MAX) {
- ERROR(("invalid addr, 0x%02X", addr));
- goto miiphy_read_failed_0;
- }
-
- if (reg > MII_REGISTER_MAX) {
- ERROR(("invalid reg, 0x%02X", reg));
- goto miiphy_read_failed_0;
- }
-
- if (value == NULL) {
- ERROR(("NULL value"));
- goto miiphy_read_failed_0;
- }
-
- DEBUG_FN(DEBUG_MII_LOW);
-
- /* write MII register to be read */
- *get_eth_reg_addr(NS7520_ETH_MADR) = (addr << 8) | reg;
-
- *get_eth_reg_addr(NS7520_ETH_MCMD) = NS7520_ETH_MCMD_READ;
-
- if (!ns7520_mii_poll_busy())
- printk(KERN_WARNING NS7520_DRIVER_NAME
- ": MII still busy in read\n");
- /* continue to read */
-
- *get_eth_reg_addr(NS7520_ETH_MCMD) = 0;
-
- *value = (*get_eth_reg_addr(NS7520_ETH_MRDD));
- ret = MII_STATUS_SUCCESS;
- /* Fall through */
-
- miiphy_read_failed_0:
- return (ret);
-}
-
-/**
- * Write a 16-bit value to an MII register.
- */
-extern int ns7520_miiphy_write(char *devname, unsigned char const addr,
- unsigned char const reg, unsigned short const value)
-{
- int ret = MII_STATUS_FAILURE;
-
- /* Parameter checks */
- if (addr > MII_ADDRESS_MAX) {
- ERROR(("invalid addr, 0x%02X", addr));
- goto miiphy_write_failed_0;
- }
-
- if (reg > MII_REGISTER_MAX) {
- ERROR(("invalid reg, 0x%02X", reg));
- goto miiphy_write_failed_0;
- }
-
- /* write MII register to be written */
- *get_eth_reg_addr(NS7520_ETH_MADR) = (addr << 8) | reg;
-
- *get_eth_reg_addr(NS7520_ETH_MWTD) = value;
-
- if (!ns7520_mii_poll_busy()) {
- printf(KERN_WARNING NS7520_DRIVER_NAME
- ": MII still busy in write\n");
- }
-
- ret = MII_STATUS_SUCCESS;
- /* Fall through */
-
- miiphy_write_failed_0:
- return (ret);
-}
-#endif /* defined(CONFIG_MII) */
-
-int ns7520_miiphy_initialize(bd_t *bis)
-{
-#if defined(CONFIG_MII)
- miiphy_register("ns7520phy", ns7520_miiphy_read, ns7520_miiphy_write);
-#endif
- return 0;
-}
+/***********************************************************************
+ *
+ * Copyright (C) 2005 by Videon Central, Inc.
+ *
+ * $Id: ns7520_eth.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $
+ * @Author: Arthur Shipkowski
+ * @Descr: Ethernet driver for the NS7520. Uses polled Ethernet, like
+ * the older netarmeth driver. Note that attempting to filter
+ * broadcast and multicast out in the SAFR register will cause
+ * bad things due to released errata.
+ * @References: [1] NS7520 Hardware Reference, December 2003
+ * [2] Intel LXT971 Datasheet #249414 Rev. 02
+ *
+ ***********************************************************************/
+
+#include <common.h>
+
+#include <net.h> /* NetSendPacket */
+#include <asm/arch/netarm_registers.h>
+#include <asm/arch/netarm_dma_module.h>
+
+#include "ns7520_eth.h" /* for Ethernet and PHY */
+
+/**
+ * Send an error message to the terminal.
+ */
+#define ERROR(x) \
+do { \
+ char *__foo = strrchr(__FILE__, '/'); \
+ \
+ printf("%s: %d: %s(): ", (__foo == NULL ? __FILE__ : (__foo + 1)), \
+ __LINE__, __FUNCTION__); \
+ printf x; printf("\n"); \
+} while (0);
+
+/* some definition to make transistion to linux easier */
+
+#define NS7520_DRIVER_NAME "eth"
+#define KERN_WARNING "Warning:"
+#define KERN_ERR "Error:"
+#define KERN_INFO "Info:"
+
+#if 1
+# define DEBUG
+#endif
+
+#ifdef DEBUG
+# define printk printf
+
+# define DEBUG_INIT 0x0001
+# define DEBUG_MINOR 0x0002
+# define DEBUG_RX 0x0004
+# define DEBUG_TX 0x0008
+# define DEBUG_INT 0x0010
+# define DEBUG_POLL 0x0020
+# define DEBUG_LINK 0x0040
+# define DEBUG_MII 0x0100
+# define DEBUG_MII_LOW 0x0200
+# define DEBUG_MEM 0x0400
+# define DEBUG_ERROR 0x4000
+# define DEBUG_ERROR_CRIT 0x8000
+
+static int nDebugLvl = DEBUG_ERROR_CRIT;
+
+# define DEBUG_ARGS0( FLG, a0 ) if( ( nDebugLvl & (FLG) ) == (FLG) ) \
+ printf("%s: " a0, __FUNCTION__, 0, 0, 0, 0, 0, 0 )
+# define DEBUG_ARGS1( FLG, a0, a1 ) if( ( nDebugLvl & (FLG) ) == (FLG)) \
+ printf("%s: " a0, __FUNCTION__, (int)(a1), 0, 0, 0, 0, 0 )
+# define DEBUG_ARGS2( FLG, a0, a1, a2 ) if( (nDebugLvl & (FLG)) ==(FLG))\
+ printf("%s: " a0, __FUNCTION__, (int)(a1), (int)(a2), 0, 0,0,0 )
+# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 ) if((nDebugLvl &(FLG))==(FLG))\
+ printf("%s: "a0,__FUNCTION__,(int)(a1),(int)(a2),(int)(a3),0,0,0)
+# define DEBUG_FN( FLG ) if( (nDebugLvl & (FLG)) == (FLG) ) \
+ printf("\r%s:line %d\n", (int)__FUNCTION__, __LINE__, 0,0,0,0);
+# define ASSERT( expr, func ) if( !( expr ) ) { \
+ printf( "Assertion failed! %s:line %d %s\n", \
+ (int)__FUNCTION__,__LINE__,(int)(#expr),0,0,0); \
+ func }
+#else /* DEBUG */
+# define printk(...)
+# define DEBUG_ARGS0( FLG, a0 )
+# define DEBUG_ARGS1( FLG, a0, a1 )
+# define DEBUG_ARGS2( FLG, a0, a1, a2 )
+# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 )
+# define DEBUG_FN( n )
+# define ASSERT(expr, func)
+#endif /* DEBUG */
+
+#define NS7520_MII_NEG_DELAY (5*CONFIG_SYS_HZ) /* in s */
+#define TX_TIMEOUT (5*CONFIG_SYS_HZ) /* in s */
+#define RX_STALL_WORKAROUND_CNT 100
+
+static int ns7520_eth_reset(void);
+
+static void ns7520_link_auto_negotiate(void);
+static void ns7520_link_update_egcr(void);
+static void ns7520_link_print_changed(void);
+
+/* the PHY stuff */
+
+static char ns7520_mii_identify_phy(void);
+static unsigned short ns7520_mii_read(unsigned short uiRegister);
+static void ns7520_mii_write(unsigned short uiRegister,
+ unsigned short uiData);
+static unsigned int ns7520_mii_get_clock_divisor(unsigned int
+ unMaxMDIOClk);
+static unsigned int ns7520_mii_poll_busy(void);
+
+static unsigned int nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
+static unsigned int uiLastLinkStatus;
+static PhyType phyDetected = PHY_NONE;
+
+/***********************************************************************
+ * @Function: eth_init
+ * @Return: -1 on failure otherwise 0
+ * @Descr: Initializes the ethernet engine and uses either FS Forth's default
+ * MAC addr or the one in environment
+ ***********************************************************************/
+
+int eth_init(bd_t * pbis)
+{
+ unsigned char aucMACAddr[6];
+ char *pcTmp = getenv("ethaddr");
+ char *pcEnd;
+ int i;
+
+ DEBUG_FN(DEBUG_INIT);
+
+ /* no need to check for hardware */
+
+ if (!ns7520_eth_reset())
+ return -1;
+
+ if (NULL == pcTmp)
+ return -1;
+
+ for (i = 0; i < 6; i++) {
+ aucMACAddr[i] =
+ pcTmp ? simple_strtoul(pcTmp, &pcEnd, 16) : 0;
+ pcTmp = (*pcTmp) ? pcEnd + 1 : pcEnd;
+ }
+
+ /* configure ethernet address */
+
+ *get_eth_reg_addr(NS7520_ETH_SA1) =
+ aucMACAddr[5] << 8 | aucMACAddr[4];
+ *get_eth_reg_addr(NS7520_ETH_SA2) =
+ aucMACAddr[3] << 8 | aucMACAddr[2];
+ *get_eth_reg_addr(NS7520_ETH_SA3) =
+ aucMACAddr[1] << 8 | aucMACAddr[0];
+
+ /* enable hardware */
+
+ *get_eth_reg_addr(NS7520_ETH_MAC1) = NS7520_ETH_MAC1_RXEN;
+ *get_eth_reg_addr(NS7520_ETH_SUPP) = NS7520_ETH_SUPP_JABBER;
+ *get_eth_reg_addr(NS7520_ETH_MAC1) = NS7520_ETH_MAC1_RXEN;
+
+ /* the linux kernel may give packets < 60 bytes, for example arp */
+ *get_eth_reg_addr(NS7520_ETH_MAC2) = NS7520_ETH_MAC2_CRCEN |
+ NS7520_ETH_MAC2_PADEN | NS7520_ETH_MAC2_HUGE;
+
+ /* Broadcast/multicast allowed; if you don't set this even unicast chokes */
+ /* Based on NS7520 errata documentation */
+ *get_eth_reg_addr(NS7520_ETH_SAFR) =
+ NS7520_ETH_SAFR_BROAD | NS7520_ETH_SAFR_PRM;
+
+ /* enable receive and transmit FIFO, use 10/100 Mbps MII */
+ *get_eth_reg_addr(NS7520_ETH_EGCR) |=
+ NS7520_ETH_EGCR_ETXWM_75 |
+ NS7520_ETH_EGCR_ERX |
+ NS7520_ETH_EGCR_ERXREG |
+ NS7520_ETH_EGCR_ERXBR | NS7520_ETH_EGCR_ETX;
+
+ return 0;
+}
+
+/***********************************************************************
+ * @Function: eth_send
+ * @Return: -1 on timeout otherwise 1
+ * @Descr: sends one frame by DMA
+ ***********************************************************************/
+
+int eth_send(volatile void *pPacket, int nLen)
+{
+ int i, length32, retval = 1;
+ char *pa;
+ unsigned int *pa32, lastp = 0, rest;
+ unsigned int status;
+
+ pa = (char *) pPacket;
+ pa32 = (unsigned int *) pPacket;
+ length32 = nLen / 4;
+ rest = nLen % 4;
+
+ /* make sure there's no garbage in the last word */
+ switch (rest) {
+ case 0:
+ lastp = pa32[length32 - 1];
+ length32--;
+ break;
+ case 1:
+ lastp = pa32[length32] & 0x000000ff;
+ break;
+ case 2:
+ lastp = pa32[length32] & 0x0000ffff;
+ break;
+ case 3:
+ lastp = pa32[length32] & 0x00ffffff;
+ break;
+ }
+
+ while (((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+ NS7520_ETH_EGSR_TXREGE)
+ == 0) {
+ }
+
+ /* write to the fifo */
+ for (i = 0; i < length32; i++)
+ *get_eth_reg_addr(NS7520_ETH_FIFO) = pa32[i];
+
+ /* the last word is written to an extra register, this
+ starts the transmission */
+ *get_eth_reg_addr(NS7520_ETH_FIFOL) = lastp;
+
+ /* Wait for it to be done */
+ while ((*get_eth_reg_addr(NS7520_ETH_EGSR) & NS7520_ETH_EGSR_TXBC)
+ == 0) {
+ }
+ status = (*get_eth_reg_addr(NS7520_ETH_ETSR));
+ *get_eth_reg_addr(NS7520_ETH_EGSR) = NS7520_ETH_EGSR_TXBC; /* Clear it now */
+
+ if (status & NS7520_ETH_ETSR_TXOK) {
+ retval = 0; /* We're OK! */
+ } else if (status & NS7520_ETH_ETSR_TXDEF) {
+ printf("Deferred, we'll see.\n");
+ retval = 0;
+ } else if (status & NS7520_ETH_ETSR_TXAL) {
+ printf("Late collision error, %d collisions.\n",
+ (*get_eth_reg_addr(NS7520_ETH_ETSR)) &
+ NS7520_ETH_ETSR_TXCOLC);
+ } else if (status & NS7520_ETH_ETSR_TXAEC) {
+ printf("Excessive collisions: %d\n",
+ (*get_eth_reg_addr(NS7520_ETH_ETSR)) &
+ NS7520_ETH_ETSR_TXCOLC);
+ } else if (status & NS7520_ETH_ETSR_TXAED) {
+ printf("Excessive deferral on xmit.\n");
+ } else if (status & NS7520_ETH_ETSR_TXAUR) {
+ printf("Packet underrun.\n");
+ } else if (status & NS7520_ETH_ETSR_TXAJ) {
+ printf("Jumbo packet error.\n");
+ } else {
+ printf("Error: Should never get here.\n");
+ }
+
+ return (retval);
+}
+
+/***********************************************************************
+ * @Function: eth_rx
+ * @Return: size of last frame in bytes or 0 if no frame available
+ * @Descr: gives one frame to U-Boot which has been copied by DMA engine already
+ * to NetRxPackets[ 0 ].
+ ***********************************************************************/
+
+int eth_rx(void)
+{
+ int i;
+ unsigned short rxlen;
+ unsigned short totrxlen = 0;
+ unsigned int *addr;
+ unsigned int rxstatus, lastrxlen;
+ char *pa;
+
+ /* If RXBR is 1, data block was received */
+ while (((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+ NS7520_ETH_EGSR_RXBR) == NS7520_ETH_EGSR_RXBR) {
+
+ /* get status register and the length of received block */
+ rxstatus = *get_eth_reg_addr(NS7520_ETH_ERSR);
+ rxlen = (rxstatus & NS7520_ETH_ERSR_RXSIZE) >> 16;
+
+ /* clear RXBR to make fifo available */
+ *get_eth_reg_addr(NS7520_ETH_EGSR) = NS7520_ETH_EGSR_RXBR;
+
+ if (rxstatus & NS7520_ETH_ERSR_ROVER) {
+ printf("Receive overrun, resetting FIFO.\n");
+ *get_eth_reg_addr(NS7520_ETH_EGCR) &=
+ ~NS7520_ETH_EGCR_ERX;
+ udelay(20);
+ *get_eth_reg_addr(NS7520_ETH_EGCR) |=
+ NS7520_ETH_EGCR_ERX;
+ }
+ if (rxlen == 0) {
+ printf("Nothing.\n");
+ return 0;
+ }
+
+ addr = (unsigned int *) NetRxPackets[0];
+ pa = (char *) NetRxPackets[0];
+
+ /* read the fifo */
+ for (i = 0; i < rxlen / 4; i++) {
+ *addr = *get_eth_reg_addr(NS7520_ETH_FIFO);
+ addr++;
+ }
+
+ if ((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+ NS7520_ETH_EGSR_RXREGR) {
+ /* RXFDB indicates wether the last word is 1,2,3 or 4 bytes long */
+ lastrxlen =
+ ((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+ NS7520_ETH_EGSR_RXFDB_MA) >> 28;
+ *addr = *get_eth_reg_addr(NS7520_ETH_FIFO);
+ switch (lastrxlen) {
+ case 1:
+ *addr &= 0xff000000;
+ break;
+ case 2:
+ *addr &= 0xffff0000;
+ break;
+ case 3:
+ *addr &= 0xffffff00;
+ break;
+ }
+ }
+
+ /* Pass the packet up to the protocol layers. */
+ NetReceive(NetRxPackets[0], rxlen - 4);
+ totrxlen += rxlen - 4;
+ }
+
+ return totrxlen;
+}
+
+/***********************************************************************
+ * @Function: eth_halt
+ * @Return: n/a
+ * @Descr: stops the ethernet engine
+ ***********************************************************************/
+
+void eth_halt(void)
+{
+ DEBUG_FN(DEBUG_INIT);
+
+ *get_eth_reg_addr(NS7520_ETH_MAC1) &= ~NS7520_ETH_MAC1_RXEN;
+ *get_eth_reg_addr(NS7520_ETH_EGCR) &= ~(NS7520_ETH_EGCR_ERX |
+ NS7520_ETH_EGCR_ERXDMA |
+ NS7520_ETH_EGCR_ERXREG |
+ NS7520_ETH_EGCR_ERXBR |
+ NS7520_ETH_EGCR_ETX |
+ NS7520_ETH_EGCR_ETXDMA);
+}
+
+/***********************************************************************
+ * @Function: ns7520_eth_reset
+ * @Return: 0 on failure otherwise 1
+ * @Descr: resets the ethernet interface and the PHY,
+ * performs auto negotiation or fixed modes
+ ***********************************************************************/
+
+static int ns7520_eth_reset(void)
+{
+ DEBUG_FN(DEBUG_MINOR);
+
+ /* Reset important registers */
+ *get_eth_reg_addr(NS7520_ETH_EGCR) = 0; /* Null it out! */
+ *get_eth_reg_addr(NS7520_ETH_MAC1) &= NS7520_ETH_MAC1_SRST;
+ *get_eth_reg_addr(NS7520_ETH_MAC2) = 0;
+ /* Reset MAC */
+ *get_eth_reg_addr(NS7520_ETH_EGCR) |= NS7520_ETH_EGCR_MAC_RES;
+ udelay(5);
+ *get_eth_reg_addr(NS7520_ETH_EGCR) &= ~NS7520_ETH_EGCR_MAC_RES;
+
+ /* reset and initialize PHY */
+
+ *get_eth_reg_addr(NS7520_ETH_MAC1) &= ~NS7520_ETH_MAC1_SRST;
+
+ /* we don't support hot plugging of PHY, therefore we don't reset
+ phyDetected and nPhyMaxMdioClock here. The risk is if the setting is
+ incorrect the first open
+ may detect the PHY correctly but succeding will fail
+ For reseting the PHY and identifying we have to use the standard
+ MDIO CLOCK value 2.5 MHz only after hardware reset
+ After having identified the PHY we will do faster */
+
+ *get_eth_reg_addr(NS7520_ETH_MCFG) =
+ ns7520_mii_get_clock_divisor(nPhyMaxMdioClock);
+
+ /* reset PHY */
+ ns7520_mii_write(PHY_BMCR, PHY_BMCR_RESET);
+ ns7520_mii_write(PHY_BMCR, 0);
+
+ udelay(3000); /* [2] p.70 says at least 300us reset recovery time. */
+
+ /* MII clock has been setup to default, ns7520_mii_identify_phy should
+ work for all */
+
+ if (!ns7520_mii_identify_phy()) {
+ printk(KERN_ERR NS7520_DRIVER_NAME
+ ": Unsupported PHY, aborting\n");
+ return 0;
+ }
+
+ /* now take the highest MDIO clock possible after detection */
+ *get_eth_reg_addr(NS7520_ETH_MCFG) =
+ ns7520_mii_get_clock_divisor(nPhyMaxMdioClock);
+
+ /* PHY has been detected, so there can be no abort reason and we can
+ finish initializing ethernet */
+
+ uiLastLinkStatus = 0xff; /* undefined */
+
+ ns7520_link_auto_negotiate();
+
+ if (phyDetected == PHY_LXT971A)
+ /* set LED2 to link mode */
+ ns7520_mii_write(PHY_LXT971_LED_CFG,
+ (PHY_LXT971_LED_CFG_LINK_ACT <<
+ PHY_LXT971_LED_CFG_SHIFT_LED2) |
+ (PHY_LXT971_LED_CFG_TRANSMIT <<
+ PHY_LXT971_LED_CFG_SHIFT_LED1));
+
+ return 1;
+}
+
+/***********************************************************************
+ * @Function: ns7520_link_auto_negotiate
+ * @Return: void
+ * @Descr: performs auto-negotation of link.
+ ***********************************************************************/
+
+static void ns7520_link_auto_negotiate(void)
+{
+ unsigned long ulStartJiffies;
+ unsigned short uiStatus;
+
+ DEBUG_FN(DEBUG_LINK);
+
+ /* run auto-negotation */
+ /* define what we are capable of */
+ ns7520_mii_write(PHY_ANAR,
+ PHY_ANLPAR_TXFD |
+ PHY_ANLPAR_TX |
+ PHY_ANLPAR_10FD |
+ PHY_ANLPAR_10 |
+ PHY_ANLPAR_PSB_802_3);
+ /* start auto-negotiation */
+ ns7520_mii_write(PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+
+ /* wait for completion */
+
+ ulStartJiffies = get_timer(0);
+ while (get_timer(0) < ulStartJiffies + NS7520_MII_NEG_DELAY) {
+ uiStatus = ns7520_mii_read(PHY_BMSR);
+ if ((uiStatus &
+ (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) ==
+ (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) {
+ /* lucky we are, auto-negotiation succeeded */
+ ns7520_link_print_changed();
+ ns7520_link_update_egcr();
+ return;
+ }
+ }
+
+ DEBUG_ARGS0(DEBUG_LINK, "auto-negotiation timed out\n");
+ /* ignore invalid link settings */
+}
+
+/***********************************************************************
+ * @Function: ns7520_link_update_egcr
+ * @Return: void
+ * @Descr: updates the EGCR and MAC2 link status after mode change or
+ * auto-negotation
+ ***********************************************************************/
+
+static void ns7520_link_update_egcr(void)
+{
+ unsigned int unEGCR;
+ unsigned int unMAC2;
+ unsigned int unIPGT;
+
+ DEBUG_FN(DEBUG_LINK);
+
+ unEGCR = *get_eth_reg_addr(NS7520_ETH_EGCR);
+ unMAC2 = *get_eth_reg_addr(NS7520_ETH_MAC2);
+ unIPGT =
+ *get_eth_reg_addr(NS7520_ETH_IPGT) & ~NS7520_ETH_IPGT_IPGT;
+
+ unEGCR &= ~NS7520_ETH_EGCR_EFULLD;
+ unMAC2 &= ~NS7520_ETH_MAC2_FULLD;
+ if ((uiLastLinkStatus & PHY_LXT971_STAT2_DUPLEX_MODE)
+ == PHY_LXT971_STAT2_DUPLEX_MODE) {
+ unEGCR |= NS7520_ETH_EGCR_EFULLD;
+ unMAC2 |= NS7520_ETH_MAC2_FULLD;
+ unIPGT |= 0x15; /* see [1] p. 167 */
+ } else
+ unIPGT |= 0x12; /* see [1] p. 167 */
+
+ *get_eth_reg_addr(NS7520_ETH_MAC2) = unMAC2;
+ *get_eth_reg_addr(NS7520_ETH_EGCR) = unEGCR;
+ *get_eth_reg_addr(NS7520_ETH_IPGT) = unIPGT;
+}
+
+/***********************************************************************
+ * @Function: ns7520_link_print_changed
+ * @Return: void
+ * @Descr: checks whether the link status has changed and if so prints
+ * the new mode
+ ***********************************************************************/
+
+static void ns7520_link_print_changed(void)
+{
+ unsigned short uiStatus;
+ unsigned short uiControl;
+
+ DEBUG_FN(DEBUG_LINK);
+
+ uiControl = ns7520_mii_read(PHY_BMCR);
+
+ if ((uiControl & PHY_BMCR_AUTON) == PHY_BMCR_AUTON) {
+ /* PHY_BMSR_LS is only set on autonegotiation */
+ uiStatus = ns7520_mii_read(PHY_BMSR);
+
+ if (!(uiStatus & PHY_BMSR_LS)) {
+ printk(KERN_WARNING NS7520_DRIVER_NAME
+ ": link down\n");
+ /* @TODO Linux: carrier_off */
+ } else {
+ /* @TODO Linux: carrier_on */
+ if (phyDetected == PHY_LXT971A) {
+ uiStatus =
+ ns7520_mii_read(PHY_LXT971_STAT2);
+ uiStatus &=
+ (PHY_LXT971_STAT2_100BTX |
+ PHY_LXT971_STAT2_DUPLEX_MODE |
+ PHY_LXT971_STAT2_AUTO_NEG);
+
+ /* mask out all uninteresting parts */
+ }
+ /* other PHYs must store there link information in
+ uiStatus as PHY_LXT971 */
+ }
+ } else {
+ /* mode has been forced, so uiStatus should be the same as the
+ last link status, enforce printing */
+ uiStatus = uiLastLinkStatus;
+ uiLastLinkStatus = 0xff;
+ }
+
+ if (uiStatus != uiLastLinkStatus) {
+ /* save current link status */
+ uiLastLinkStatus = uiStatus;
+
+ /* print new link status */
+
+ printk(KERN_INFO NS7520_DRIVER_NAME
+ ": link mode %i Mbps %s duplex %s\n",
+ (uiStatus & PHY_LXT971_STAT2_100BTX) ? 100 : 10,
+ (uiStatus & PHY_LXT971_STAT2_DUPLEX_MODE) ? "full" :
+ "half",
+ (uiStatus & PHY_LXT971_STAT2_AUTO_NEG) ? "(auto)" :
+ "");
+ }
+}
+
+/***********************************************************************
+ * the MII low level stuff
+ ***********************************************************************/
+
+/***********************************************************************
+ * @Function: ns7520_mii_identify_phy
+ * @Return: 1 if supported PHY has been detected otherwise 0
+ * @Descr: checks for supported PHY and prints the IDs.
+ ***********************************************************************/
+
+static char ns7520_mii_identify_phy(void)
+{
+ unsigned short uiID1;
+ unsigned short uiID2;
+ unsigned char *szName;
+ char cRes = 0;
+
+ DEBUG_FN(DEBUG_MII);
+
+ phyDetected = (PhyType) uiID1 = ns7520_mii_read(PHY_PHYIDR1);
+
+ switch (phyDetected) {
+ case PHY_LXT971A:
+ szName = "LXT971A";
+ uiID2 = ns7520_mii_read(PHY_PHYIDR2);
+ nPhyMaxMdioClock = PHY_LXT971_MDIO_MAX_CLK;
+ cRes = 1;
+ break;
+ case PHY_NONE:
+ default:
+ /* in case uiID1 == 0 && uiID2 == 0 we may have the wrong
+ address or reset sets the wrong NS7520_ETH_MCFG_CLKS */
+
+ uiID2 = 0;
+ szName = "unknown";
+ nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
+ phyDetected = PHY_NONE;
+ }
+
+ printk(KERN_INFO NS7520_DRIVER_NAME
+ ": PHY (0x%x, 0x%x) = %s detected\n", uiID1, uiID2, szName);
+
+ return cRes;
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_read
+ * @Return: the data read from PHY register uiRegister
+ * @Descr: the data read may be invalid if timed out. If so, a message
+ * is printed but the invalid data is returned.
+ * The fixed device address is being used.
+ ***********************************************************************/
+
+static unsigned short ns7520_mii_read(unsigned short uiRegister)
+{
+ DEBUG_FN(DEBUG_MII_LOW);
+
+ /* write MII register to be read */
+ *get_eth_reg_addr(NS7520_ETH_MADR) =
+ CONFIG_PHY_ADDR << 8 | uiRegister;
+
+ *get_eth_reg_addr(NS7520_ETH_MCMD) = NS7520_ETH_MCMD_READ;
+
+ if (!ns7520_mii_poll_busy())
+ printk(KERN_WARNING NS7520_DRIVER_NAME
+ ": MII still busy in read\n");
+ /* continue to read */
+
+ *get_eth_reg_addr(NS7520_ETH_MCMD) = 0;
+
+ return (unsigned short) (*get_eth_reg_addr(NS7520_ETH_MRDD));
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_write
+ * @Return: nothing
+ * @Descr: writes the data to the PHY register. In case of a timeout,
+ * no special handling is performed but a message printed
+ * The fixed device address is being used.
+ ***********************************************************************/
+
+static void ns7520_mii_write(unsigned short uiRegister,
+ unsigned short uiData)
+{
+ DEBUG_FN(DEBUG_MII_LOW);
+
+ /* write MII register to be written */
+ *get_eth_reg_addr(NS7520_ETH_MADR) =
+ CONFIG_PHY_ADDR << 8 | uiRegister;
+
+ *get_eth_reg_addr(NS7520_ETH_MWTD) = uiData;
+
+ if (!ns7520_mii_poll_busy()) {
+ printf(KERN_WARNING NS7520_DRIVER_NAME
+ ": MII still busy in write\n");
+ }
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_get_clock_divisor
+ * @Return: the clock divisor that should be used in NS7520_ETH_MCFG_CLKS
+ * @Descr: if no clock divisor can be calculated for the
+ * current SYSCLK and the maximum MDIO Clock, a warning is printed
+ * and the greatest divisor is taken
+ ***********************************************************************/
+
+static unsigned int ns7520_mii_get_clock_divisor(unsigned int unMaxMDIOClk)
+{
+ struct {
+ unsigned int unSysClkDivisor;
+ unsigned int unClks; /* field for NS7520_ETH_MCFG_CLKS */
+ } PHYClockDivisors[] = {
+ {
+ 4, NS7520_ETH_MCFG_CLKS_4}, {
+ 6, NS7520_ETH_MCFG_CLKS_6}, {
+ 8, NS7520_ETH_MCFG_CLKS_8}, {
+ 10, NS7520_ETH_MCFG_CLKS_10}, {
+ 14, NS7520_ETH_MCFG_CLKS_14}, {
+ 20, NS7520_ETH_MCFG_CLKS_20}, {
+ 28, NS7520_ETH_MCFG_CLKS_28}
+ };
+
+ int nIndexSysClkDiv;
+ int nArraySize =
+ sizeof(PHYClockDivisors) / sizeof(PHYClockDivisors[0]);
+ unsigned int unClks = NS7520_ETH_MCFG_CLKS_28; /* defaults to
+ greatest div */
+
+ DEBUG_FN(DEBUG_INIT);
+
+ for (nIndexSysClkDiv = 0; nIndexSysClkDiv < nArraySize;
+ nIndexSysClkDiv++) {
+ /* find first sysclock divisor that isn't higher than 2.5 MHz
+ clock */
+ if (NETARM_XTAL_FREQ /
+ PHYClockDivisors[nIndexSysClkDiv].unSysClkDivisor <=
+ unMaxMDIOClk) {
+ unClks = PHYClockDivisors[nIndexSysClkDiv].unClks;
+ break;
+ }
+ }
+
+ DEBUG_ARGS2(DEBUG_INIT,
+ "Taking MDIO Clock bit mask 0x%0x for max clock %i\n",
+ unClks, unMaxMDIOClk);
+
+ /* return greatest divisor */
+ return unClks;
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_poll_busy
+ * @Return: 0 if timed out otherwise the remaing timeout
+ * @Descr: waits until the MII has completed a command or it times out
+ * code may be interrupted by hard interrupts.
+ * It is not checked what happens on multiple actions when
+ * the first is still being busy and we timeout.
+ ***********************************************************************/
+
+static unsigned int ns7520_mii_poll_busy(void)
+{
+ unsigned int unTimeout = 1000;
+
+ DEBUG_FN(DEBUG_MII_LOW);
+
+ while (((*get_eth_reg_addr(NS7520_ETH_MIND) & NS7520_ETH_MIND_BUSY)
+ == NS7520_ETH_MIND_BUSY) && unTimeout)
+ unTimeout--;
+
+ return unTimeout;
+}
+
+/* ----------------------------------------------------------------------------
+ * Net+ARM ethernet MII functionality.
+ */
+#if defined(CONFIG_MII)
+
+/**
+ * Maximum MII address we support
+ */
+#define MII_ADDRESS_MAX (31)
+
+/**
+ * Maximum MII register address we support
+ */
+#define MII_REGISTER_MAX (31)
+
+/**
+ * Ethernet MII interface return values for public functions.
+ */
+enum mii_status {
+ MII_STATUS_SUCCESS = 0,
+ MII_STATUS_FAILURE = 1,
+};
+
+/**
+ * Read a 16-bit value from an MII register.
+ */
+extern int ns7520_miiphy_read(char *devname, unsigned char const addr,
+ unsigned char const reg, unsigned short *const value)
+{
+ int ret = MII_STATUS_FAILURE;
+
+ /* Parameter checks */
+ if (addr > MII_ADDRESS_MAX) {
+ ERROR(("invalid addr, 0x%02X", addr));
+ goto miiphy_read_failed_0;
+ }
+
+ if (reg > MII_REGISTER_MAX) {
+ ERROR(("invalid reg, 0x%02X", reg));
+ goto miiphy_read_failed_0;
+ }
+
+ if (value == NULL) {
+ ERROR(("NULL value"));
+ goto miiphy_read_failed_0;
+ }
+
+ DEBUG_FN(DEBUG_MII_LOW);
+
+ /* write MII register to be read */
+ *get_eth_reg_addr(NS7520_ETH_MADR) = (addr << 8) | reg;
+
+ *get_eth_reg_addr(NS7520_ETH_MCMD) = NS7520_ETH_MCMD_READ;
+
+ if (!ns7520_mii_poll_busy())
+ printk(KERN_WARNING NS7520_DRIVER_NAME
+ ": MII still busy in read\n");
+ /* continue to read */
+
+ *get_eth_reg_addr(NS7520_ETH_MCMD) = 0;
+
+ *value = (*get_eth_reg_addr(NS7520_ETH_MRDD));
+ ret = MII_STATUS_SUCCESS;
+ /* Fall through */
+
+ miiphy_read_failed_0:
+ return (ret);
+}
+
+/**
+ * Write a 16-bit value to an MII register.
+ */
+extern int ns7520_miiphy_write(char *devname, unsigned char const addr,
+ unsigned char const reg, unsigned short const value)
+{
+ int ret = MII_STATUS_FAILURE;
+
+ /* Parameter checks */
+ if (addr > MII_ADDRESS_MAX) {
+ ERROR(("invalid addr, 0x%02X", addr));
+ goto miiphy_write_failed_0;
+ }
+
+ if (reg > MII_REGISTER_MAX) {
+ ERROR(("invalid reg, 0x%02X", reg));
+ goto miiphy_write_failed_0;
+ }
+
+ /* write MII register to be written */
+ *get_eth_reg_addr(NS7520_ETH_MADR) = (addr << 8) | reg;
+
+ *get_eth_reg_addr(NS7520_ETH_MWTD) = value;
+
+ if (!ns7520_mii_poll_busy()) {
+ printf(KERN_WARNING NS7520_DRIVER_NAME
+ ": MII still busy in write\n");
+ }
+
+ ret = MII_STATUS_SUCCESS;
+ /* Fall through */
+
+ miiphy_write_failed_0:
+ return (ret);
+}
+#endif /* defined(CONFIG_MII) */
+
+int ns7520_miiphy_initialize(bd_t *bis)
+{
+#if defined(CONFIG_MII)
+ miiphy_register("ns7520phy", ns7520_miiphy_read, ns7520_miiphy_write);
+#endif
+ return 0;
+}
diff -Naur u-boot-2009.03_orig/drivers/net/ns9750_eth.c u-boot-2009.03/drivers/net/ns9750_eth.c
--- u-boot-2009.03_orig/drivers/net/ns9750_eth.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/ns9750_eth.c 2009-03-31 14:53:34.253836800 -0700
@@ -1,790 +1,790 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_eth.c,v 1.2 2004/02/24 14:09:39 mpietrek Exp $
- * @Author: Markus Pietrek
- * @Descr: Ethernet driver for the NS9750. Uses DMA Engine with polling
- * interrupt status. But interrupts are not enabled.
- * Only one tx buffer descriptor and the RXA buffer descriptor are used
- * Currently no transmit lockup handling is included. eth_send has a 5s
- * timeout for sending frames. No retransmits are performed when an
- * error occurs.
- * @References: [1] NS9750 Hardware Reference, December 2003
- * [2] Intel LXT971 Datasheet #249414 Rev. 02
- * [3] NS7520 Linux Ethernet Driver
- *
- * 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
- *
- ***********************************************************************/
-
-#include <common.h>
-#include <net.h> /* NetSendPacket */
-
-#include "ns9750_eth.h" /* for Ethernet and PHY */
-
-/* some definition to make transition to linux easier */
-
-#define NS9750_DRIVER_NAME "eth"
-#define KERN_WARNING "Warning:"
-#define KERN_ERR "Error:"
-#define KERN_INFO "Info:"
-
-#if 0
-# define DEBUG
-#endif
-
-#ifdef DEBUG
-# define printk printf
-
-# define DEBUG_INIT 0x0001
-# define DEBUG_MINOR 0x0002
-# define DEBUG_RX 0x0004
-# define DEBUG_TX 0x0008
-# define DEBUG_INT 0x0010
-# define DEBUG_POLL 0x0020
-# define DEBUG_LINK 0x0040
-# define DEBUG_MII 0x0100
-# define DEBUG_MII_LOW 0x0200
-# define DEBUG_MEM 0x0400
-# define DEBUG_ERROR 0x4000
-# define DEBUG_ERROR_CRIT 0x8000
-
-static int nDebugLvl = DEBUG_ERROR_CRIT;
-
-# define DEBUG_ARGS0( FLG, a0 ) if( ( nDebugLvl & (FLG) ) == (FLG) ) \
- printf("%s: " a0, __FUNCTION__, 0, 0, 0, 0, 0, 0 )
-# define DEBUG_ARGS1( FLG, a0, a1 ) if( ( nDebugLvl & (FLG) ) == (FLG)) \
- printf("%s: " a0, __FUNCTION__, (int)(a1), 0, 0, 0, 0, 0 )
-# define DEBUG_ARGS2( FLG, a0, a1, a2 ) if( (nDebugLvl & (FLG)) ==(FLG))\
- printf("%s: " a0, __FUNCTION__, (int)(a1), (int)(a2), 0, 0,0,0 )
-# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 ) if((nDebugLvl &(FLG))==(FLG))\
- printf("%s: "a0,__FUNCTION__,(int)(a1),(int)(a2),(int)(a3),0,0,0)
-# define DEBUG_FN( FLG ) if( (nDebugLvl & (FLG)) == (FLG) ) \
- printf("\r%s:line %d\n", (int)__FUNCTION__, __LINE__, 0,0,0,0);
-# define ASSERT( expr, func ) if( !( expr ) ) { \
- printf( "Assertion failed! %s:line %d %s\n", \
- (int)__FUNCTION__,__LINE__,(int)(#expr),0,0,0); \
- func }
-#else /* DEBUG */
-# define printk(...)
-# define DEBUG_ARGS0( FLG, a0 )
-# define DEBUG_ARGS1( FLG, a0, a1 )
-# define DEBUG_ARGS2( FLG, a0, a1, a2 )
-# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 )
-# define DEBUG_FN( n )
-# define ASSERT(expr, func)
-#endif /* DEBUG */
-
-#define NS9750_MII_NEG_DELAY (5*CONFIG_SYS_HZ) /* in s */
-#define TX_TIMEOUT (5*CONFIG_SYS_HZ) /* in s */
-
-/* @TODO move it to eeprom.h */
-#define FS_EEPROM_AUTONEG_MASK 0x7
-#define FS_EEPROM_AUTONEG_SPEED_MASK 0x1
-#define FS_EEPROM_AUTONEG_SPEED_10 0x0
-#define FS_EEPROM_AUTONEG_SPEED_100 0x1
-#define FS_EEPROM_AUTONEG_DUPLEX_MASK 0x2
-#define FS_EEPROM_AUTONEG_DUPLEX_HALF 0x0
-#define FS_EEPROM_AUTONEG_DUPLEX_FULL 0x2
-#define FS_EEPROM_AUTONEG_ENABLE_MASK 0x4
-#define FS_EEPROM_AUTONEG_DISABLE 0x0
-#define FS_EEPROM_AUTONEG_ENABLE 0x4
-
-/* buffer descriptors taken from [1] p.306 */
-typedef struct
-{
- unsigned int* punSrc;
- unsigned int unLen; /* 11 bits */
- unsigned int* punDest; /* unused */
- union {
- unsigned int unReg;
- struct {
- unsigned uStatus : 16;
- unsigned uRes : 12;
- unsigned uFull : 1;
- unsigned uEnable : 1;
- unsigned uInt : 1;
- unsigned uWrap : 1;
- } bits;
- } s;
-} rx_buffer_desc_t;
-
-typedef struct
-{
- unsigned int* punSrc;
- unsigned int unLen; /* 10 bits */
- unsigned int* punDest; /* unused */
- union {
- unsigned int unReg; /* only 32bit accesses may done to NS9750
- * eth engine */
- struct {
- unsigned uStatus : 16;
- unsigned uRes : 12;
- unsigned uFull : 1;
- unsigned uLast : 1;
- unsigned uInt : 1;
- unsigned uWrap : 1;
- } bits;
- } s;
-} tx_buffer_desc_t;
-
-static int ns9750_eth_reset( void );
-
-static void ns9750_link_force( void );
-static void ns9750_link_auto_negotiate( void );
-static void ns9750_link_update_egcr( void );
-static void ns9750_link_print_changed( void );
-
-/* the PHY stuff */
-
-static char ns9750_mii_identify_phy( void );
-static unsigned short ns9750_mii_read( unsigned short uiRegister );
-static void ns9750_mii_write( unsigned short uiRegister, unsigned short uiData );
-static unsigned int ns9750_mii_get_clock_divisor( unsigned int unMaxMDIOClk );
-static unsigned int ns9750_mii_poll_busy( void );
-
-static unsigned int nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
-static unsigned char ucLinkMode = FS_EEPROM_AUTONEG_ENABLE;
-static unsigned int uiLastLinkStatus;
-static PhyType phyDetected = PHY_NONE;
-
-/* we use only one tx buffer descriptor */
-static tx_buffer_desc_t* pTxBufferDesc =
- (tx_buffer_desc_t*) get_eth_reg_addr( NS9750_ETH_TXBD );
-
-/* we use only one rx buffer descriptor of the 4 */
-static rx_buffer_desc_t aRxBufferDesc[ 4 ];
-
-/***********************************************************************
- * @Function: eth_init
- * @Return: -1 on failure otherwise 0
- * @Descr: Initializes the ethernet engine and uses either FS Forth's default
- * MAC addr or the one in environment
- ***********************************************************************/
-
-int eth_init (bd_t * pbis)
-{
- /* This default MAC Addr is reserved by FS Forth-Systeme for the case of
- EEPROM failures */
- unsigned char aucMACAddr[6] = { 0x00, 0x04, 0xf3, 0x00, 0x06, 0x35 };
- char *pcTmp = getenv ("ethaddr");
- char *pcEnd;
- int i;
-
- DEBUG_FN (DEBUG_INIT);
-
- /* no need to check for hardware */
-
- if (!ns9750_eth_reset ())
- return -1;
-
- if (pcTmp != NULL)
- for (i = 0; i < 6; i++) {
- aucMACAddr[i] =
- pcTmp ? simple_strtoul (pcTmp, &pcEnd,
- 16) : 0;
- pcTmp = (*pcTmp) ? pcEnd + 1 : pcEnd;
- }
-
- /* configure ethernet address */
-
- *get_eth_reg_addr (NS9750_ETH_SA1) =
- aucMACAddr[5] << 8 | aucMACAddr[4];
- *get_eth_reg_addr (NS9750_ETH_SA2) =
- aucMACAddr[3] << 8 | aucMACAddr[2];
- *get_eth_reg_addr (NS9750_ETH_SA3) =
- aucMACAddr[1] << 8 | aucMACAddr[0];
-
- /* enable hardware */
-
- *get_eth_reg_addr (NS9750_ETH_MAC1) = NS9750_ETH_MAC1_RXEN;
-
- /* the linux kernel may give packets < 60 bytes, for example arp */
- *get_eth_reg_addr (NS9750_ETH_MAC2) = NS9750_ETH_MAC2_CRCEN |
- NS9750_ETH_MAC2_PADEN | NS9750_ETH_MAC2_HUGE;
-
- /* enable receive and transmit FIFO, use 10/100 Mbps MII */
- *get_eth_reg_addr (NS9750_ETH_EGCR1) =
- NS9750_ETH_EGCR1_ETXWM |
- NS9750_ETH_EGCR1_ERX |
- NS9750_ETH_EGCR1_ERXDMA |
- NS9750_ETH_EGCR1_ETX |
- NS9750_ETH_EGCR1_ETXDMA | NS9750_ETH_EGCR1_ITXA;
-
- /* prepare DMA descriptors */
- for (i = 0; i < 4; i++) {
- aRxBufferDesc[i].punSrc = 0;
- aRxBufferDesc[i].unLen = 0;
- aRxBufferDesc[i].s.bits.uWrap = 1;
- aRxBufferDesc[i].s.bits.uInt = 1;
- aRxBufferDesc[i].s.bits.uEnable = 0;
- aRxBufferDesc[i].s.bits.uFull = 0;
- }
-
- /* NetRxPackets[ 0 ] is initialized before eth_init is called and never
- changes. NetRxPackets is 32bit aligned */
- aRxBufferDesc[0].punSrc = (unsigned int *) NetRxPackets[0];
- aRxBufferDesc[0].s.bits.uEnable = 1;
- aRxBufferDesc[0].unLen = 1522; /* as stated in [1] p.307 */
-
- *get_eth_reg_addr (NS9750_ETH_RXAPTR) =
- (unsigned int) &aRxBufferDesc[0];
-
- /* [1] Tab. 221 states less than 5us */
- *get_eth_reg_addr (NS9750_ETH_EGCR1) |= NS9750_ETH_EGCR1_ERXINIT;
- while (!
- (*get_eth_reg_addr (NS9750_ETH_EGSR) & NS9750_ETH_EGSR_RXINIT))
- /* wait for finish */
- udelay (1);
-
- /* @TODO do we need to clear RXINIT? */
- *get_eth_reg_addr (NS9750_ETH_EGCR1) &= ~NS9750_ETH_EGCR1_ERXINIT;
-
- *get_eth_reg_addr (NS9750_ETH_RXFREE) = 0x1;
-
- return 0;
-}
-
-/***********************************************************************
- * @Function: eth_send
- * @Return: -1 on timeout otherwise 1
- * @Descr: sends one frame by DMA
- ***********************************************************************/
-
-int eth_send (volatile void *pPacket, int nLen)
-{
- ulong ulTimeout;
-
- DEBUG_FN (DEBUG_TX);
-
- /* clear old status values */
- *get_eth_reg_addr (NS9750_ETH_EINTR) &=
- *get_eth_reg_addr (NS9750_ETH_EINTR) & NS9750_ETH_EINTR_TX_MA;
-
- /* prepare Tx Descriptors */
-
- pTxBufferDesc->punSrc = (unsigned int *) pPacket; /* pPacket is 32bit
- * aligned */
- pTxBufferDesc->unLen = nLen;
- /* only 32bit accesses allowed. wrap, full, interrupt and enabled to 1 */
- pTxBufferDesc->s.unReg = 0xf0000000;
- /* pTxBufferDesc is the first possible buffer descriptor */
- *get_eth_reg_addr (NS9750_ETH_TXPTR) = 0x0;
-
- /* enable processor for next frame */
-
- *get_eth_reg_addr (NS9750_ETH_EGCR2) &= ~NS9750_ETH_EGCR2_TCLER;
- *get_eth_reg_addr (NS9750_ETH_EGCR2) |= NS9750_ETH_EGCR2_TCLER;
-
- ulTimeout = get_timer (0);
-
- DEBUG_ARGS0 (DEBUG_TX | DEBUG_MINOR,
- "Waiting for transmission to finish\n");
- while (!
- (*get_eth_reg_addr (NS9750_ETH_EINTR) &
- (NS9750_ETH_EINTR_TXDONE | NS9750_ETH_EINTR_TXERR))) {
- /* do nothing, wait for completion */
- if (get_timer (0) - ulTimeout > TX_TIMEOUT) {
- DEBUG_ARGS0 (DEBUG_TX, "Transmit Timed out\n");
- return -1;
- }
- }
- DEBUG_ARGS0 (DEBUG_TX | DEBUG_MINOR, "transmitted...\n");
-
- return 0;
-}
-
-/***********************************************************************
- * @Function: eth_rx
- * @Return: size of last frame in bytes or 0 if no frame available
- * @Descr: gives one frame to U-Boot which has been copied by DMA engine already
- * to NetRxPackets[ 0 ].
- ***********************************************************************/
-
-int eth_rx (void)
-{
- int nLen = 0;
- unsigned int unStatus;
-
- unStatus =
- *get_eth_reg_addr (NS9750_ETH_EINTR) & NS9750_ETH_EINTR_RX_MA;
-
- if (!unStatus)
- /* no packet available, return immediately */
- return 0;
-
- DEBUG_FN (DEBUG_RX);
-
- /* unLen always < max(nLen) and discard checksum */
- nLen = (int) aRxBufferDesc[0].unLen - 4;
-
- /* acknowledge status register */
- *get_eth_reg_addr (NS9750_ETH_EINTR) = unStatus;
-
- aRxBufferDesc[0].unLen = 1522;
- aRxBufferDesc[0].s.bits.uFull = 0;
-
- /* Buffer A descriptor available again */
- *get_eth_reg_addr (NS9750_ETH_RXFREE) |= 0x1;
-
- /* NetReceive may call eth_send. Due to a possible bug of the NS9750 we
- * have to acknowledge the received frame before sending a new one */
- if (unStatus & NS9750_ETH_EINTR_RXDONEA)
- NetReceive (NetRxPackets[0], nLen);
-
- return nLen;
-}
-
-/***********************************************************************
- * @Function: eth_halt
- * @Return: n/a
- * @Descr: stops the ethernet engine
- ***********************************************************************/
-
-void eth_halt (void)
-{
- DEBUG_FN (DEBUG_INIT);
-
- *get_eth_reg_addr (NS9750_ETH_MAC1) &= ~NS9750_ETH_MAC1_RXEN;
- *get_eth_reg_addr (NS9750_ETH_EGCR1) &= ~(NS9750_ETH_EGCR1_ERX |
- NS9750_ETH_EGCR1_ERXDMA |
- NS9750_ETH_EGCR1_ETX |
- NS9750_ETH_EGCR1_ETXDMA);
-}
-
-/***********************************************************************
- * @Function: ns9750_eth_reset
- * @Return: 0 on failure otherwise 1
- * @Descr: resets the ethernet interface and the PHY,
- * performs auto negotiation or fixed modes
- ***********************************************************************/
-
-static int ns9750_eth_reset (void)
-{
- DEBUG_FN (DEBUG_MINOR);
-
- /* Reset MAC */
- *get_eth_reg_addr (NS9750_ETH_EGCR1) |= NS9750_ETH_EGCR1_MAC_HRST;
- udelay (5); /* according to [1], p.322 */
- *get_eth_reg_addr (NS9750_ETH_EGCR1) &= ~NS9750_ETH_EGCR1_MAC_HRST;
-
- /* reset and initialize PHY */
-
- *get_eth_reg_addr (NS9750_ETH_MAC1) &= ~NS9750_ETH_MAC1_SRST;
-
- /* we don't support hot plugging of PHY, therefore we don't reset
- phyDetected and nPhyMaxMdioClock here. The risk is if the setting is
- incorrect the first open
- may detect the PHY correctly but succeding will fail
- For reseting the PHY and identifying we have to use the standard
- MDIO CLOCK value 2.5 MHz only after hardware reset
- After having identified the PHY we will do faster */
-
- *get_eth_reg_addr (NS9750_ETH_MCFG) =
- ns9750_mii_get_clock_divisor (nPhyMaxMdioClock);
-
- /* reset PHY */
- ns9750_mii_write(PHY_BMCR, PHY_BMCR_RESET);
- ns9750_mii_write(PHY_BMCR, 0);
-
- /* @TODO check time */
- udelay (3000); /* [2] p.70 says at least 300us reset recovery time. But
- go sure, it didn't worked stable at higher timer
- frequencies under LxNETES-2.x */
-
- /* MII clock has been setup to default, ns9750_mii_identify_phy should
- work for all */
-
- if (!ns9750_mii_identify_phy ()) {
- printk (KERN_ERR NS9750_DRIVER_NAME
- ": Unsupported PHY, aborting\n");
- return 0;
- }
-
- /* now take the highest MDIO clock possible after detection */
- *get_eth_reg_addr (NS9750_ETH_MCFG) =
- ns9750_mii_get_clock_divisor (nPhyMaxMdioClock);
-
-
- /* PHY has been detected, so there can be no abort reason and we can
- finish initializing ethernet */
-
- uiLastLinkStatus = 0xff; /* undefined */
-
- if ((ucLinkMode & FS_EEPROM_AUTONEG_ENABLE_MASK) ==
- FS_EEPROM_AUTONEG_DISABLE)
- /* use parameters defined */
- ns9750_link_force ();
- else
- ns9750_link_auto_negotiate ();
-
- if (phyDetected == PHY_LXT971A)
- /* set LED2 to link mode */
- ns9750_mii_write (PHY_LXT971_LED_CFG,
- PHY_LXT971_LED_CFG_LINK_ACT <<
- PHY_LXT971_LED_CFG_SHIFT_LED2);
-
- return 1;
-}
-
-/***********************************************************************
- * @Function: ns9750_link_force
- * @Return: void
- * @Descr: configures eth and MII to use the link mode defined in
- * ucLinkMode
- ***********************************************************************/
-
-static void ns9750_link_force (void)
-{
- unsigned short uiControl;
-
- DEBUG_FN (DEBUG_LINK);
-
- uiControl = ns9750_mii_read(PHY_BMCR);
- uiControl &= ~(PHY_BMCR_SPEED_MASK |
- PHY_BMCR_AUTON | PHY_BMCR_DPLX);
-
- uiLastLinkStatus = 0;
-
- if ((ucLinkMode & FS_EEPROM_AUTONEG_SPEED_MASK) ==
- FS_EEPROM_AUTONEG_SPEED_100) {
- uiControl |= PHY_BMCR_100MB;
- uiLastLinkStatus |= PHY_LXT971_STAT2_100BTX;
- } else
- uiControl |= PHY_BMCR_10_MBPS;
-
- if ((ucLinkMode & FS_EEPROM_AUTONEG_DUPLEX_MASK) ==
- FS_EEPROM_AUTONEG_DUPLEX_FULL) {
- uiControl |= PHY_BMCR_DPLX;
- uiLastLinkStatus |= PHY_LXT971_STAT2_DUPLEX_MODE;
- }
-
- ns9750_mii_write(PHY_BMCR, uiControl);
-
- ns9750_link_print_changed ();
- ns9750_link_update_egcr ();
-}
-
-/***********************************************************************
- * @Function: ns9750_link_auto_negotiate
- * @Return: void
- * @Descr: performs auto-negotation of link.
- ***********************************************************************/
-
-static void ns9750_link_auto_negotiate (void)
-{
- unsigned long ulStartJiffies;
- unsigned short uiStatus;
-
- DEBUG_FN (DEBUG_LINK);
-
- /* run auto-negotation */
- /* define what we are capable of */
- ns9750_mii_write(PHY_ANAR,
- PHY_ANLPAR_TXFD |
- PHY_ANLPAR_TX |
- PHY_ANLPAR_10FD |
- PHY_ANLPAR_10 |
- PHY_ANLPAR_PSB_802_3);
- /* start auto-negotiation */
- ns9750_mii_write(PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
-
- /* wait for completion */
-
- ulStartJiffies = get_ticks ();
- while (get_ticks () < ulStartJiffies + NS9750_MII_NEG_DELAY) {
- uiStatus = ns9750_mii_read(PHY_BMSR);
- if ((uiStatus &
- (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) ==
- (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) {
- /* lucky we are, auto-negotiation succeeded */
- ns9750_link_print_changed ();
- ns9750_link_update_egcr ();
- return;
- }
- }
-
- DEBUG_ARGS0 (DEBUG_LINK, "auto-negotiation timed out\n");
- /* ignore invalid link settings */
-}
-
-/***********************************************************************
- * @Function: ns9750_link_update_egcr
- * @Return: void
- * @Descr: updates the EGCR and MAC2 link status after mode change or
- * auto-negotation
- ***********************************************************************/
-
-static void ns9750_link_update_egcr (void)
-{
- unsigned int unEGCR;
- unsigned int unMAC2;
- unsigned int unIPGT;
-
- DEBUG_FN (DEBUG_LINK);
-
- unEGCR = *get_eth_reg_addr (NS9750_ETH_EGCR1);
- unMAC2 = *get_eth_reg_addr (NS9750_ETH_MAC2);
- unIPGT = *get_eth_reg_addr (NS9750_ETH_IPGT) & ~NS9750_ETH_IPGT_MA;
-
- unMAC2 &= ~NS9750_ETH_MAC2_FULLD;
- if ((uiLastLinkStatus & PHY_LXT971_STAT2_DUPLEX_MODE)
- == PHY_LXT971_STAT2_DUPLEX_MODE) {
- unMAC2 |= NS9750_ETH_MAC2_FULLD;
- unIPGT |= 0x15; /* see [1] p. 339 */
- } else
- unIPGT |= 0x12; /* see [1] p. 339 */
-
- *get_eth_reg_addr (NS9750_ETH_MAC2) = unMAC2;
- *get_eth_reg_addr (NS9750_ETH_EGCR1) = unEGCR;
- *get_eth_reg_addr (NS9750_ETH_IPGT) = unIPGT;
-}
-
-/***********************************************************************
- * @Function: ns9750_link_print_changed
- * @Return: void
- * @Descr: checks whether the link status has changed and if so prints
- * the new mode
- ***********************************************************************/
-
-static void ns9750_link_print_changed (void)
-{
- unsigned short uiStatus;
- unsigned short uiControl;
-
- DEBUG_FN (DEBUG_LINK);
-
- uiControl = ns9750_mii_read(PHY_BMCR);
-
- if ((uiControl & PHY_BMCR_AUTON) == PHY_BMCR_AUTON) {
- /* PHY_BMSR_LS is only set on autonegotiation */
- uiStatus = ns9750_mii_read(PHY_BMSR);
-
- if (!(uiStatus & PHY_BMSR_LS)) {
- printk (KERN_WARNING NS9750_DRIVER_NAME
- ": link down\n");
- /* @TODO Linux: carrier_off */
- } else {
- /* @TODO Linux: carrier_on */
- if (phyDetected == PHY_LXT971A) {
- uiStatus = ns9750_mii_read (PHY_LXT971_STAT2);
- uiStatus &= (PHY_LXT971_STAT2_100BTX |
- PHY_LXT971_STAT2_DUPLEX_MODE |
- PHY_LXT971_STAT2_AUTO_NEG);
-
- /* mask out all uninteresting parts */
- }
- /* other PHYs must store their link information in
- uiStatus as PHY_LXT971 */
- }
- } else {
- /* mode has been forced, so uiStatus should be the same as the
- last link status, enforce printing */
- uiStatus = uiLastLinkStatus;
- uiLastLinkStatus = 0xff;
- }
-
- if (uiStatus != uiLastLinkStatus) {
- /* save current link status */
- uiLastLinkStatus = uiStatus;
-
- /* print new link status */
-
- printk (KERN_INFO NS9750_DRIVER_NAME
- ": link mode %i Mbps %s duplex %s\n",
- (uiStatus & PHY_LXT971_STAT2_100BTX) ? 100 : 10,
- (uiStatus & PHY_LXT971_STAT2_DUPLEX_MODE) ? "full" :
- "half",
- (uiStatus & PHY_LXT971_STAT2_AUTO_NEG) ? "(auto)" :
- "");
- }
-}
-
-/***********************************************************************
- * the MII low level stuff
- ***********************************************************************/
-
-/***********************************************************************
- * @Function: ns9750_mii_identify_phy
- * @Return: 1 if supported PHY has been detected otherwise 0
- * @Descr: checks for supported PHY and prints the IDs.
- ***********************************************************************/
-
-static char ns9750_mii_identify_phy (void)
-{
- unsigned short uiID1;
- unsigned short uiID2;
- unsigned char *szName;
- char cRes = 0;
-
- DEBUG_FN (DEBUG_MII);
-
- phyDetected = (PhyType) uiID1 = ns9750_mii_read(PHY_PHYIDR1);
-
- switch (phyDetected) {
- case PHY_LXT971A:
- szName = "LXT971A";
- uiID2 = ns9750_mii_read(PHY_PHYIDR2);
- nPhyMaxMdioClock = PHY_LXT971_MDIO_MAX_CLK;
- cRes = 1;
- break;
- case PHY_NONE:
- default:
- /* in case uiID1 == 0 && uiID2 == 0 we may have the wrong
- address or reset sets the wrong NS9750_ETH_MCFG_CLKS */
-
- uiID2 = 0;
- szName = "unknown";
- nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
- phyDetected = PHY_NONE;
- }
-
- printk (KERN_INFO NS9750_DRIVER_NAME
- ": PHY (0x%x, 0x%x) = %s detected\n", uiID1, uiID2, szName);
-
- return cRes;
-}
-
-/***********************************************************************
- * @Function: ns9750_mii_read
- * @Return: the data read from PHY register uiRegister
- * @Descr: the data read may be invalid if timed out. If so, a message
- * is printed but the invalid data is returned.
- * The fixed device address is being used.
- ***********************************************************************/
-
-static unsigned short ns9750_mii_read (unsigned short uiRegister)
-{
- DEBUG_FN (DEBUG_MII_LOW);
-
- /* write MII register to be read */
- *get_eth_reg_addr (NS9750_ETH_MADR) =
- NS9750_ETH_PHY_ADDRESS << 8 | uiRegister;
-
- *get_eth_reg_addr (NS9750_ETH_MCMD) = NS9750_ETH_MCMD_READ;
-
- if (!ns9750_mii_poll_busy ())
- printk (KERN_WARNING NS9750_DRIVER_NAME
- ": MII still busy in read\n");
- /* continue to read */
-
- *get_eth_reg_addr (NS9750_ETH_MCMD) = 0;
-
- return (unsigned short) (*get_eth_reg_addr (NS9750_ETH_MRDD));
-}
-
-
-/***********************************************************************
- * @Function: ns9750_mii_write
- * @Return: nothing
- * @Descr: writes the data to the PHY register. In case of a timeout,
- * no special handling is performed but a message printed
- * The fixed device address is being used.
- ***********************************************************************/
-
-static void ns9750_mii_write (unsigned short uiRegister,
- unsigned short uiData)
-{
- DEBUG_FN (DEBUG_MII_LOW);
-
- /* write MII register to be written */
- *get_eth_reg_addr (NS9750_ETH_MADR) =
- NS9750_ETH_PHY_ADDRESS << 8 | uiRegister;
-
- *get_eth_reg_addr (NS9750_ETH_MWTD) = uiData;
-
- if (!ns9750_mii_poll_busy ()) {
- printf (KERN_WARNING NS9750_DRIVER_NAME
- ": MII still busy in write\n");
- }
-}
-
-
-/***********************************************************************
- * @Function: ns9750_mii_get_clock_divisor
- * @Return: the clock divisor that should be used in NS9750_ETH_MCFG_CLKS
- * @Descr: if no clock divisor can be calculated for the
- * current SYSCLK and the maximum MDIO Clock, a warning is printed
- * and the greatest divisor is taken
- ***********************************************************************/
-
-static unsigned int ns9750_mii_get_clock_divisor (unsigned int unMaxMDIOClk)
-{
- struct {
- unsigned int unSysClkDivisor;
- unsigned int unClks; /* field for NS9750_ETH_MCFG_CLKS */
- } PHYClockDivisors[] = {
- {
- 4, NS9750_ETH_MCFG_CLKS_4}, {
- 6, NS9750_ETH_MCFG_CLKS_6}, {
- 8, NS9750_ETH_MCFG_CLKS_8}, {
- 10, NS9750_ETH_MCFG_CLKS_10}, {
- 20, NS9750_ETH_MCFG_CLKS_20}, {
- 30, NS9750_ETH_MCFG_CLKS_30}, {
- 40, NS9750_ETH_MCFG_CLKS_40}
- };
-
- int nIndexSysClkDiv;
- int nArraySize =
- sizeof (PHYClockDivisors) / sizeof (PHYClockDivisors[0]);
- unsigned int unClks = NS9750_ETH_MCFG_CLKS_40; /* defaults to
- greatest div */
-
- DEBUG_FN (DEBUG_INIT);
-
- for (nIndexSysClkDiv = 0; nIndexSysClkDiv < nArraySize;
- nIndexSysClkDiv++) {
- /* find first sysclock divisor that isn't higher than 2.5 MHz
- clock */
- if (AHB_CLK_FREQ /
- PHYClockDivisors[nIndexSysClkDiv].unSysClkDivisor <=
- unMaxMDIOClk) {
- unClks = PHYClockDivisors[nIndexSysClkDiv].unClks;
- break;
- }
- }
-
- DEBUG_ARGS2 (DEBUG_INIT,
- "Taking MDIO Clock bit mask 0x%0x for max clock %i\n",
- unClks, unMaxMDIOClk);
-
- /* return greatest divisor */
- return unClks;
-}
-
-/***********************************************************************
- * @Function: ns9750_mii_poll_busy
- * @Return: 0 if timed out otherwise the remaing timeout
- * @Descr: waits until the MII has completed a command or it times out
- * code may be interrupted by hard interrupts.
- * It is not checked what happens on multiple actions when
- * the first is still being busy and we timeout.
- ***********************************************************************/
-
-static unsigned int ns9750_mii_poll_busy (void)
-{
- unsigned int unTimeout = 10000;
-
- DEBUG_FN (DEBUG_MII_LOW);
-
- while (((*get_eth_reg_addr (NS9750_ETH_MIND) & NS9750_ETH_MIND_BUSY)
- == NS9750_ETH_MIND_BUSY) && unTimeout)
- unTimeout--;
-
- return unTimeout;
-}
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns9750_eth.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @Descr: Ethernet driver for the NS9750. Uses DMA Engine with polling
+ * interrupt status. But interrupts are not enabled.
+ * Only one tx buffer descriptor and the RXA buffer descriptor are used
+ * Currently no transmit lockup handling is included. eth_send has a 5s
+ * timeout for sending frames. No retransmits are performed when an
+ * error occurs.
+ * @References: [1] NS9750 Hardware Reference, December 2003
+ * [2] Intel LXT971 Datasheet #249414 Rev. 02
+ * [3] NS7520 Linux Ethernet Driver
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#include <common.h>
+#include <net.h> /* NetSendPacket */
+
+#include "ns9750_eth.h" /* for Ethernet and PHY */
+
+/* some definition to make transition to linux easier */
+
+#define NS9750_DRIVER_NAME "eth"
+#define KERN_WARNING "Warning:"
+#define KERN_ERR "Error:"
+#define KERN_INFO "Info:"
+
+#if 0
+# define DEBUG
+#endif
+
+#ifdef DEBUG
+# define printk printf
+
+# define DEBUG_INIT 0x0001
+# define DEBUG_MINOR 0x0002
+# define DEBUG_RX 0x0004
+# define DEBUG_TX 0x0008
+# define DEBUG_INT 0x0010
+# define DEBUG_POLL 0x0020
+# define DEBUG_LINK 0x0040
+# define DEBUG_MII 0x0100
+# define DEBUG_MII_LOW 0x0200
+# define DEBUG_MEM 0x0400
+# define DEBUG_ERROR 0x4000
+# define DEBUG_ERROR_CRIT 0x8000
+
+static int nDebugLvl = DEBUG_ERROR_CRIT;
+
+# define DEBUG_ARGS0( FLG, a0 ) if( ( nDebugLvl & (FLG) ) == (FLG) ) \
+ printf("%s: " a0, __FUNCTION__, 0, 0, 0, 0, 0, 0 )
+# define DEBUG_ARGS1( FLG, a0, a1 ) if( ( nDebugLvl & (FLG) ) == (FLG)) \
+ printf("%s: " a0, __FUNCTION__, (int)(a1), 0, 0, 0, 0, 0 )
+# define DEBUG_ARGS2( FLG, a0, a1, a2 ) if( (nDebugLvl & (FLG)) ==(FLG))\
+ printf("%s: " a0, __FUNCTION__, (int)(a1), (int)(a2), 0, 0,0,0 )
+# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 ) if((nDebugLvl &(FLG))==(FLG))\
+ printf("%s: "a0,__FUNCTION__,(int)(a1),(int)(a2),(int)(a3),0,0,0)
+# define DEBUG_FN( FLG ) if( (nDebugLvl & (FLG)) == (FLG) ) \
+ printf("\r%s:line %d\n", (int)__FUNCTION__, __LINE__, 0,0,0,0);
+# define ASSERT( expr, func ) if( !( expr ) ) { \
+ printf( "Assertion failed! %s:line %d %s\n", \
+ (int)__FUNCTION__,__LINE__,(int)(#expr),0,0,0); \
+ func }
+#else /* DEBUG */
+# define printk(...)
+# define DEBUG_ARGS0( FLG, a0 )
+# define DEBUG_ARGS1( FLG, a0, a1 )
+# define DEBUG_ARGS2( FLG, a0, a1, a2 )
+# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 )
+# define DEBUG_FN( n )
+# define ASSERT(expr, func)
+#endif /* DEBUG */
+
+#define NS9750_MII_NEG_DELAY (5*CONFIG_SYS_HZ) /* in s */
+#define TX_TIMEOUT (5*CONFIG_SYS_HZ) /* in s */
+
+/* @TODO move it to eeprom.h */
+#define FS_EEPROM_AUTONEG_MASK 0x7
+#define FS_EEPROM_AUTONEG_SPEED_MASK 0x1
+#define FS_EEPROM_AUTONEG_SPEED_10 0x0
+#define FS_EEPROM_AUTONEG_SPEED_100 0x1
+#define FS_EEPROM_AUTONEG_DUPLEX_MASK 0x2
+#define FS_EEPROM_AUTONEG_DUPLEX_HALF 0x0
+#define FS_EEPROM_AUTONEG_DUPLEX_FULL 0x2
+#define FS_EEPROM_AUTONEG_ENABLE_MASK 0x4
+#define FS_EEPROM_AUTONEG_DISABLE 0x0
+#define FS_EEPROM_AUTONEG_ENABLE 0x4
+
+/* buffer descriptors taken from [1] p.306 */
+typedef struct
+{
+ unsigned int* punSrc;
+ unsigned int unLen; /* 11 bits */
+ unsigned int* punDest; /* unused */
+ union {
+ unsigned int unReg;
+ struct {
+ unsigned uStatus : 16;
+ unsigned uRes : 12;
+ unsigned uFull : 1;
+ unsigned uEnable : 1;
+ unsigned uInt : 1;
+ unsigned uWrap : 1;
+ } bits;
+ } s;
+} rx_buffer_desc_t;
+
+typedef struct
+{
+ unsigned int* punSrc;
+ unsigned int unLen; /* 10 bits */
+ unsigned int* punDest; /* unused */
+ union {
+ unsigned int unReg; /* only 32bit accesses may done to NS9750
+ * eth engine */
+ struct {
+ unsigned uStatus : 16;
+ unsigned uRes : 12;
+ unsigned uFull : 1;
+ unsigned uLast : 1;
+ unsigned uInt : 1;
+ unsigned uWrap : 1;
+ } bits;
+ } s;
+} tx_buffer_desc_t;
+
+static int ns9750_eth_reset( void );
+
+static void ns9750_link_force( void );
+static void ns9750_link_auto_negotiate( void );
+static void ns9750_link_update_egcr( void );
+static void ns9750_link_print_changed( void );
+
+/* the PHY stuff */
+
+static char ns9750_mii_identify_phy( void );
+static unsigned short ns9750_mii_read( unsigned short uiRegister );
+static void ns9750_mii_write( unsigned short uiRegister, unsigned short uiData );
+static unsigned int ns9750_mii_get_clock_divisor( unsigned int unMaxMDIOClk );
+static unsigned int ns9750_mii_poll_busy( void );
+
+static unsigned int nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
+static unsigned char ucLinkMode = FS_EEPROM_AUTONEG_ENABLE;
+static unsigned int uiLastLinkStatus;
+static PhyType phyDetected = PHY_NONE;
+
+/* we use only one tx buffer descriptor */
+static tx_buffer_desc_t* pTxBufferDesc =
+ (tx_buffer_desc_t*) get_eth_reg_addr( NS9750_ETH_TXBD );
+
+/* we use only one rx buffer descriptor of the 4 */
+static rx_buffer_desc_t aRxBufferDesc[ 4 ];
+
+/***********************************************************************
+ * @Function: eth_init
+ * @Return: -1 on failure otherwise 0
+ * @Descr: Initializes the ethernet engine and uses either FS Forth's default
+ * MAC addr or the one in environment
+ ***********************************************************************/
+
+int eth_init (bd_t * pbis)
+{
+ /* This default MAC Addr is reserved by FS Forth-Systeme for the case of
+ EEPROM failures */
+ unsigned char aucMACAddr[6] = { 0x00, 0x04, 0xf3, 0x00, 0x06, 0x35 };
+ char *pcTmp = getenv ("ethaddr");
+ char *pcEnd;
+ int i;
+
+ DEBUG_FN (DEBUG_INIT);
+
+ /* no need to check for hardware */
+
+ if (!ns9750_eth_reset ())
+ return -1;
+
+ if (pcTmp != NULL)
+ for (i = 0; i < 6; i++) {
+ aucMACAddr[i] =
+ pcTmp ? simple_strtoul (pcTmp, &pcEnd,
+ 16) : 0;
+ pcTmp = (*pcTmp) ? pcEnd + 1 : pcEnd;
+ }
+
+ /* configure ethernet address */
+
+ *get_eth_reg_addr (NS9750_ETH_SA1) =
+ aucMACAddr[5] << 8 | aucMACAddr[4];
+ *get_eth_reg_addr (NS9750_ETH_SA2) =
+ aucMACAddr[3] << 8 | aucMACAddr[2];
+ *get_eth_reg_addr (NS9750_ETH_SA3) =
+ aucMACAddr[1] << 8 | aucMACAddr[0];
+
+ /* enable hardware */
+
+ *get_eth_reg_addr (NS9750_ETH_MAC1) = NS9750_ETH_MAC1_RXEN;
+
+ /* the linux kernel may give packets < 60 bytes, for example arp */
+ *get_eth_reg_addr (NS9750_ETH_MAC2) = NS9750_ETH_MAC2_CRCEN |
+ NS9750_ETH_MAC2_PADEN | NS9750_ETH_MAC2_HUGE;
+
+ /* enable receive and transmit FIFO, use 10/100 Mbps MII */
+ *get_eth_reg_addr (NS9750_ETH_EGCR1) =
+ NS9750_ETH_EGCR1_ETXWM |
+ NS9750_ETH_EGCR1_ERX |
+ NS9750_ETH_EGCR1_ERXDMA |
+ NS9750_ETH_EGCR1_ETX |
+ NS9750_ETH_EGCR1_ETXDMA | NS9750_ETH_EGCR1_ITXA;
+
+ /* prepare DMA descriptors */
+ for (i = 0; i < 4; i++) {
+ aRxBufferDesc[i].punSrc = 0;
+ aRxBufferDesc[i].unLen = 0;
+ aRxBufferDesc[i].s.bits.uWrap = 1;
+ aRxBufferDesc[i].s.bits.uInt = 1;
+ aRxBufferDesc[i].s.bits.uEnable = 0;
+ aRxBufferDesc[i].s.bits.uFull = 0;
+ }
+
+ /* NetRxPackets[ 0 ] is initialized before eth_init is called and never
+ changes. NetRxPackets is 32bit aligned */
+ aRxBufferDesc[0].punSrc = (unsigned int *) NetRxPackets[0];
+ aRxBufferDesc[0].s.bits.uEnable = 1;
+ aRxBufferDesc[0].unLen = 1522; /* as stated in [1] p.307 */
+
+ *get_eth_reg_addr (NS9750_ETH_RXAPTR) =
+ (unsigned int) &aRxBufferDesc[0];
+
+ /* [1] Tab. 221 states less than 5us */
+ *get_eth_reg_addr (NS9750_ETH_EGCR1) |= NS9750_ETH_EGCR1_ERXINIT;
+ while (!
+ (*get_eth_reg_addr (NS9750_ETH_EGSR) & NS9750_ETH_EGSR_RXINIT))
+ /* wait for finish */
+ udelay (1);
+
+ /* @TODO do we need to clear RXINIT? */
+ *get_eth_reg_addr (NS9750_ETH_EGCR1) &= ~NS9750_ETH_EGCR1_ERXINIT;
+
+ *get_eth_reg_addr (NS9750_ETH_RXFREE) = 0x1;
+
+ return 0;
+}
+
+/***********************************************************************
+ * @Function: eth_send
+ * @Return: -1 on timeout otherwise 1
+ * @Descr: sends one frame by DMA
+ ***********************************************************************/
+
+int eth_send (volatile void *pPacket, int nLen)
+{
+ ulong ulTimeout;
+
+ DEBUG_FN (DEBUG_TX);
+
+ /* clear old status values */
+ *get_eth_reg_addr (NS9750_ETH_EINTR) &=
+ *get_eth_reg_addr (NS9750_ETH_EINTR) & NS9750_ETH_EINTR_TX_MA;
+
+ /* prepare Tx Descriptors */
+
+ pTxBufferDesc->punSrc = (unsigned int *) pPacket; /* pPacket is 32bit
+ * aligned */
+ pTxBufferDesc->unLen = nLen;
+ /* only 32bit accesses allowed. wrap, full, interrupt and enabled to 1 */
+ pTxBufferDesc->s.unReg = 0xf0000000;
+ /* pTxBufferDesc is the first possible buffer descriptor */
+ *get_eth_reg_addr (NS9750_ETH_TXPTR) = 0x0;
+
+ /* enable processor for next frame */
+
+ *get_eth_reg_addr (NS9750_ETH_EGCR2) &= ~NS9750_ETH_EGCR2_TCLER;
+ *get_eth_reg_addr (NS9750_ETH_EGCR2) |= NS9750_ETH_EGCR2_TCLER;
+
+ ulTimeout = get_timer (0);
+
+ DEBUG_ARGS0 (DEBUG_TX | DEBUG_MINOR,
+ "Waiting for transmission to finish\n");
+ while (!
+ (*get_eth_reg_addr (NS9750_ETH_EINTR) &
+ (NS9750_ETH_EINTR_TXDONE | NS9750_ETH_EINTR_TXERR))) {
+ /* do nothing, wait for completion */
+ if (get_timer (0) - ulTimeout > TX_TIMEOUT) {
+ DEBUG_ARGS0 (DEBUG_TX, "Transmit Timed out\n");
+ return -1;
+ }
+ }
+ DEBUG_ARGS0 (DEBUG_TX | DEBUG_MINOR, "transmitted...\n");
+
+ return 0;
+}
+
+/***********************************************************************
+ * @Function: eth_rx
+ * @Return: size of last frame in bytes or 0 if no frame available
+ * @Descr: gives one frame to U-Boot which has been copied by DMA engine already
+ * to NetRxPackets[ 0 ].
+ ***********************************************************************/
+
+int eth_rx (void)
+{
+ int nLen = 0;
+ unsigned int unStatus;
+
+ unStatus =
+ *get_eth_reg_addr (NS9750_ETH_EINTR) & NS9750_ETH_EINTR_RX_MA;
+
+ if (!unStatus)
+ /* no packet available, return immediately */
+ return 0;
+
+ DEBUG_FN (DEBUG_RX);
+
+ /* unLen always < max(nLen) and discard checksum */
+ nLen = (int) aRxBufferDesc[0].unLen - 4;
+
+ /* acknowledge status register */
+ *get_eth_reg_addr (NS9750_ETH_EINTR) = unStatus;
+
+ aRxBufferDesc[0].unLen = 1522;
+ aRxBufferDesc[0].s.bits.uFull = 0;
+
+ /* Buffer A descriptor available again */
+ *get_eth_reg_addr (NS9750_ETH_RXFREE) |= 0x1;
+
+ /* NetReceive may call eth_send. Due to a possible bug of the NS9750 we
+ * have to acknowledge the received frame before sending a new one */
+ if (unStatus & NS9750_ETH_EINTR_RXDONEA)
+ NetReceive (NetRxPackets[0], nLen);
+
+ return nLen;
+}
+
+/***********************************************************************
+ * @Function: eth_halt
+ * @Return: n/a
+ * @Descr: stops the ethernet engine
+ ***********************************************************************/
+
+void eth_halt (void)
+{
+ DEBUG_FN (DEBUG_INIT);
+
+ *get_eth_reg_addr (NS9750_ETH_MAC1) &= ~NS9750_ETH_MAC1_RXEN;
+ *get_eth_reg_addr (NS9750_ETH_EGCR1) &= ~(NS9750_ETH_EGCR1_ERX |
+ NS9750_ETH_EGCR1_ERXDMA |
+ NS9750_ETH_EGCR1_ETX |
+ NS9750_ETH_EGCR1_ETXDMA);
+}
+
+/***********************************************************************
+ * @Function: ns9750_eth_reset
+ * @Return: 0 on failure otherwise 1
+ * @Descr: resets the ethernet interface and the PHY,
+ * performs auto negotiation or fixed modes
+ ***********************************************************************/
+
+static int ns9750_eth_reset (void)
+{
+ DEBUG_FN (DEBUG_MINOR);
+
+ /* Reset MAC */
+ *get_eth_reg_addr (NS9750_ETH_EGCR1) |= NS9750_ETH_EGCR1_MAC_HRST;
+ udelay (5); /* according to [1], p.322 */
+ *get_eth_reg_addr (NS9750_ETH_EGCR1) &= ~NS9750_ETH_EGCR1_MAC_HRST;
+
+ /* reset and initialize PHY */
+
+ *get_eth_reg_addr (NS9750_ETH_MAC1) &= ~NS9750_ETH_MAC1_SRST;
+
+ /* we don't support hot plugging of PHY, therefore we don't reset
+ phyDetected and nPhyMaxMdioClock here. The risk is if the setting is
+ incorrect the first open
+ may detect the PHY correctly but succeding will fail
+ For reseting the PHY and identifying we have to use the standard
+ MDIO CLOCK value 2.5 MHz only after hardware reset
+ After having identified the PHY we will do faster */
+
+ *get_eth_reg_addr (NS9750_ETH_MCFG) =
+ ns9750_mii_get_clock_divisor (nPhyMaxMdioClock);
+
+ /* reset PHY */
+ ns9750_mii_write(PHY_BMCR, PHY_BMCR_RESET);
+ ns9750_mii_write(PHY_BMCR, 0);
+
+ /* @TODO check time */
+ udelay (3000); /* [2] p.70 says at least 300us reset recovery time. But
+ go sure, it didn't worked stable at higher timer
+ frequencies under LxNETES-2.x */
+
+ /* MII clock has been setup to default, ns9750_mii_identify_phy should
+ work for all */
+
+ if (!ns9750_mii_identify_phy ()) {
+ printk (KERN_ERR NS9750_DRIVER_NAME
+ ": Unsupported PHY, aborting\n");
+ return 0;
+ }
+
+ /* now take the highest MDIO clock possible after detection */
+ *get_eth_reg_addr (NS9750_ETH_MCFG) =
+ ns9750_mii_get_clock_divisor (nPhyMaxMdioClock);
+
+
+ /* PHY has been detected, so there can be no abort reason and we can
+ finish initializing ethernet */
+
+ uiLastLinkStatus = 0xff; /* undefined */
+
+ if ((ucLinkMode & FS_EEPROM_AUTONEG_ENABLE_MASK) ==
+ FS_EEPROM_AUTONEG_DISABLE)
+ /* use parameters defined */
+ ns9750_link_force ();
+ else
+ ns9750_link_auto_negotiate ();
+
+ if (phyDetected == PHY_LXT971A)
+ /* set LED2 to link mode */
+ ns9750_mii_write (PHY_LXT971_LED_CFG,
+ PHY_LXT971_LED_CFG_LINK_ACT <<
+ PHY_LXT971_LED_CFG_SHIFT_LED2);
+
+ return 1;
+}
+
+/***********************************************************************
+ * @Function: ns9750_link_force
+ * @Return: void
+ * @Descr: configures eth and MII to use the link mode defined in
+ * ucLinkMode
+ ***********************************************************************/
+
+static void ns9750_link_force (void)
+{
+ unsigned short uiControl;
+
+ DEBUG_FN (DEBUG_LINK);
+
+ uiControl = ns9750_mii_read(PHY_BMCR);
+ uiControl &= ~(PHY_BMCR_SPEED_MASK |
+ PHY_BMCR_AUTON | PHY_BMCR_DPLX);
+
+ uiLastLinkStatus = 0;
+
+ if ((ucLinkMode & FS_EEPROM_AUTONEG_SPEED_MASK) ==
+ FS_EEPROM_AUTONEG_SPEED_100) {
+ uiControl |= PHY_BMCR_100MB;
+ uiLastLinkStatus |= PHY_LXT971_STAT2_100BTX;
+ } else
+ uiControl |= PHY_BMCR_10_MBPS;
+
+ if ((ucLinkMode & FS_EEPROM_AUTONEG_DUPLEX_MASK) ==
+ FS_EEPROM_AUTONEG_DUPLEX_FULL) {
+ uiControl |= PHY_BMCR_DPLX;
+ uiLastLinkStatus |= PHY_LXT971_STAT2_DUPLEX_MODE;
+ }
+
+ ns9750_mii_write(PHY_BMCR, uiControl);
+
+ ns9750_link_print_changed ();
+ ns9750_link_update_egcr ();
+}
+
+/***********************************************************************
+ * @Function: ns9750_link_auto_negotiate
+ * @Return: void
+ * @Descr: performs auto-negotation of link.
+ ***********************************************************************/
+
+static void ns9750_link_auto_negotiate (void)
+{
+ unsigned long ulStartJiffies;
+ unsigned short uiStatus;
+
+ DEBUG_FN (DEBUG_LINK);
+
+ /* run auto-negotation */
+ /* define what we are capable of */
+ ns9750_mii_write(PHY_ANAR,
+ PHY_ANLPAR_TXFD |
+ PHY_ANLPAR_TX |
+ PHY_ANLPAR_10FD |
+ PHY_ANLPAR_10 |
+ PHY_ANLPAR_PSB_802_3);
+ /* start auto-negotiation */
+ ns9750_mii_write(PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+
+ /* wait for completion */
+
+ ulStartJiffies = get_ticks ();
+ while (get_ticks () < ulStartJiffies + NS9750_MII_NEG_DELAY) {
+ uiStatus = ns9750_mii_read(PHY_BMSR);
+ if ((uiStatus &
+ (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) ==
+ (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)) {
+ /* lucky we are, auto-negotiation succeeded */
+ ns9750_link_print_changed ();
+ ns9750_link_update_egcr ();
+ return;
+ }
+ }
+
+ DEBUG_ARGS0 (DEBUG_LINK, "auto-negotiation timed out\n");
+ /* ignore invalid link settings */
+}
+
+/***********************************************************************
+ * @Function: ns9750_link_update_egcr
+ * @Return: void
+ * @Descr: updates the EGCR and MAC2 link status after mode change or
+ * auto-negotation
+ ***********************************************************************/
+
+static void ns9750_link_update_egcr (void)
+{
+ unsigned int unEGCR;
+ unsigned int unMAC2;
+ unsigned int unIPGT;
+
+ DEBUG_FN (DEBUG_LINK);
+
+ unEGCR = *get_eth_reg_addr (NS9750_ETH_EGCR1);
+ unMAC2 = *get_eth_reg_addr (NS9750_ETH_MAC2);
+ unIPGT = *get_eth_reg_addr (NS9750_ETH_IPGT) & ~NS9750_ETH_IPGT_MA;
+
+ unMAC2 &= ~NS9750_ETH_MAC2_FULLD;
+ if ((uiLastLinkStatus & PHY_LXT971_STAT2_DUPLEX_MODE)
+ == PHY_LXT971_STAT2_DUPLEX_MODE) {
+ unMAC2 |= NS9750_ETH_MAC2_FULLD;
+ unIPGT |= 0x15; /* see [1] p. 339 */
+ } else
+ unIPGT |= 0x12; /* see [1] p. 339 */
+
+ *get_eth_reg_addr (NS9750_ETH_MAC2) = unMAC2;
+ *get_eth_reg_addr (NS9750_ETH_EGCR1) = unEGCR;
+ *get_eth_reg_addr (NS9750_ETH_IPGT) = unIPGT;
+}
+
+/***********************************************************************
+ * @Function: ns9750_link_print_changed
+ * @Return: void
+ * @Descr: checks whether the link status has changed and if so prints
+ * the new mode
+ ***********************************************************************/
+
+static void ns9750_link_print_changed (void)
+{
+ unsigned short uiStatus;
+ unsigned short uiControl;
+
+ DEBUG_FN (DEBUG_LINK);
+
+ uiControl = ns9750_mii_read(PHY_BMCR);
+
+ if ((uiControl & PHY_BMCR_AUTON) == PHY_BMCR_AUTON) {
+ /* PHY_BMSR_LS is only set on autonegotiation */
+ uiStatus = ns9750_mii_read(PHY_BMSR);
+
+ if (!(uiStatus & PHY_BMSR_LS)) {
+ printk (KERN_WARNING NS9750_DRIVER_NAME
+ ": link down\n");
+ /* @TODO Linux: carrier_off */
+ } else {
+ /* @TODO Linux: carrier_on */
+ if (phyDetected == PHY_LXT971A) {
+ uiStatus = ns9750_mii_read (PHY_LXT971_STAT2);
+ uiStatus &= (PHY_LXT971_STAT2_100BTX |
+ PHY_LXT971_STAT2_DUPLEX_MODE |
+ PHY_LXT971_STAT2_AUTO_NEG);
+
+ /* mask out all uninteresting parts */
+ }
+ /* other PHYs must store their link information in
+ uiStatus as PHY_LXT971 */
+ }
+ } else {
+ /* mode has been forced, so uiStatus should be the same as the
+ last link status, enforce printing */
+ uiStatus = uiLastLinkStatus;
+ uiLastLinkStatus = 0xff;
+ }
+
+ if (uiStatus != uiLastLinkStatus) {
+ /* save current link status */
+ uiLastLinkStatus = uiStatus;
+
+ /* print new link status */
+
+ printk (KERN_INFO NS9750_DRIVER_NAME
+ ": link mode %i Mbps %s duplex %s\n",
+ (uiStatus & PHY_LXT971_STAT2_100BTX) ? 100 : 10,
+ (uiStatus & PHY_LXT971_STAT2_DUPLEX_MODE) ? "full" :
+ "half",
+ (uiStatus & PHY_LXT971_STAT2_AUTO_NEG) ? "(auto)" :
+ "");
+ }
+}
+
+/***********************************************************************
+ * the MII low level stuff
+ ***********************************************************************/
+
+/***********************************************************************
+ * @Function: ns9750_mii_identify_phy
+ * @Return: 1 if supported PHY has been detected otherwise 0
+ * @Descr: checks for supported PHY and prints the IDs.
+ ***********************************************************************/
+
+static char ns9750_mii_identify_phy (void)
+{
+ unsigned short uiID1;
+ unsigned short uiID2;
+ unsigned char *szName;
+ char cRes = 0;
+
+ DEBUG_FN (DEBUG_MII);
+
+ phyDetected = (PhyType) uiID1 = ns9750_mii_read(PHY_PHYIDR1);
+
+ switch (phyDetected) {
+ case PHY_LXT971A:
+ szName = "LXT971A";
+ uiID2 = ns9750_mii_read(PHY_PHYIDR2);
+ nPhyMaxMdioClock = PHY_LXT971_MDIO_MAX_CLK;
+ cRes = 1;
+ break;
+ case PHY_NONE:
+ default:
+ /* in case uiID1 == 0 && uiID2 == 0 we may have the wrong
+ address or reset sets the wrong NS9750_ETH_MCFG_CLKS */
+
+ uiID2 = 0;
+ szName = "unknown";
+ nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
+ phyDetected = PHY_NONE;
+ }
+
+ printk (KERN_INFO NS9750_DRIVER_NAME
+ ": PHY (0x%x, 0x%x) = %s detected\n", uiID1, uiID2, szName);
+
+ return cRes;
+}
+
+/***********************************************************************
+ * @Function: ns9750_mii_read
+ * @Return: the data read from PHY register uiRegister
+ * @Descr: the data read may be invalid if timed out. If so, a message
+ * is printed but the invalid data is returned.
+ * The fixed device address is being used.
+ ***********************************************************************/
+
+static unsigned short ns9750_mii_read (unsigned short uiRegister)
+{
+ DEBUG_FN (DEBUG_MII_LOW);
+
+ /* write MII register to be read */
+ *get_eth_reg_addr (NS9750_ETH_MADR) =
+ NS9750_ETH_PHY_ADDRESS << 8 | uiRegister;
+
+ *get_eth_reg_addr (NS9750_ETH_MCMD) = NS9750_ETH_MCMD_READ;
+
+ if (!ns9750_mii_poll_busy ())
+ printk (KERN_WARNING NS9750_DRIVER_NAME
+ ": MII still busy in read\n");
+ /* continue to read */
+
+ *get_eth_reg_addr (NS9750_ETH_MCMD) = 0;
+
+ return (unsigned short) (*get_eth_reg_addr (NS9750_ETH_MRDD));
+}
+
+
+/***********************************************************************
+ * @Function: ns9750_mii_write
+ * @Return: nothing
+ * @Descr: writes the data to the PHY register. In case of a timeout,
+ * no special handling is performed but a message printed
+ * The fixed device address is being used.
+ ***********************************************************************/
+
+static void ns9750_mii_write (unsigned short uiRegister,
+ unsigned short uiData)
+{
+ DEBUG_FN (DEBUG_MII_LOW);
+
+ /* write MII register to be written */
+ *get_eth_reg_addr (NS9750_ETH_MADR) =
+ NS9750_ETH_PHY_ADDRESS << 8 | uiRegister;
+
+ *get_eth_reg_addr (NS9750_ETH_MWTD) = uiData;
+
+ if (!ns9750_mii_poll_busy ()) {
+ printf (KERN_WARNING NS9750_DRIVER_NAME
+ ": MII still busy in write\n");
+ }
+}
+
+
+/***********************************************************************
+ * @Function: ns9750_mii_get_clock_divisor
+ * @Return: the clock divisor that should be used in NS9750_ETH_MCFG_CLKS
+ * @Descr: if no clock divisor can be calculated for the
+ * current SYSCLK and the maximum MDIO Clock, a warning is printed
+ * and the greatest divisor is taken
+ ***********************************************************************/
+
+static unsigned int ns9750_mii_get_clock_divisor (unsigned int unMaxMDIOClk)
+{
+ struct {
+ unsigned int unSysClkDivisor;
+ unsigned int unClks; /* field for NS9750_ETH_MCFG_CLKS */
+ } PHYClockDivisors[] = {
+ {
+ 4, NS9750_ETH_MCFG_CLKS_4}, {
+ 6, NS9750_ETH_MCFG_CLKS_6}, {
+ 8, NS9750_ETH_MCFG_CLKS_8}, {
+ 10, NS9750_ETH_MCFG_CLKS_10}, {
+ 20, NS9750_ETH_MCFG_CLKS_20}, {
+ 30, NS9750_ETH_MCFG_CLKS_30}, {
+ 40, NS9750_ETH_MCFG_CLKS_40}
+ };
+
+ int nIndexSysClkDiv;
+ int nArraySize =
+ sizeof (PHYClockDivisors) / sizeof (PHYClockDivisors[0]);
+ unsigned int unClks = NS9750_ETH_MCFG_CLKS_40; /* defaults to
+ greatest div */
+
+ DEBUG_FN (DEBUG_INIT);
+
+ for (nIndexSysClkDiv = 0; nIndexSysClkDiv < nArraySize;
+ nIndexSysClkDiv++) {
+ /* find first sysclock divisor that isn't higher than 2.5 MHz
+ clock */
+ if (AHB_CLK_FREQ /
+ PHYClockDivisors[nIndexSysClkDiv].unSysClkDivisor <=
+ unMaxMDIOClk) {
+ unClks = PHYClockDivisors[nIndexSysClkDiv].unClks;
+ break;
+ }
+ }
+
+ DEBUG_ARGS2 (DEBUG_INIT,
+ "Taking MDIO Clock bit mask 0x%0x for max clock %i\n",
+ unClks, unMaxMDIOClk);
+
+ /* return greatest divisor */
+ return unClks;
+}
+
+/***********************************************************************
+ * @Function: ns9750_mii_poll_busy
+ * @Return: 0 if timed out otherwise the remaing timeout
+ * @Descr: waits until the MII has completed a command or it times out
+ * code may be interrupted by hard interrupts.
+ * It is not checked what happens on multiple actions when
+ * the first is still being busy and we timeout.
+ ***********************************************************************/
+
+static unsigned int ns9750_mii_poll_busy (void)
+{
+ unsigned int unTimeout = 10000;
+
+ DEBUG_FN (DEBUG_MII_LOW);
+
+ while (((*get_eth_reg_addr (NS9750_ETH_MIND) & NS9750_ETH_MIND_BUSY)
+ == NS9750_ETH_MIND_BUSY) && unTimeout)
+ unTimeout--;
+
+ return unTimeout;
+}
diff -Naur u-boot-2009.03_orig/drivers/net/phy/CVS/Entries u-boot-2009.03/drivers/net/phy/CVS/Entries
--- u-boot-2009.03_orig/drivers/net/phy/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/phy/CVS/Entries 2009-03-25 15:58:02.715503800 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/miiphybb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/net/phy/CVS/Entries.Extra u-boot-2009.03/drivers/net/phy/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/net/phy/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/phy/CVS/Entries.Extra 2009-03-25 15:58:02.715503800 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019729/
+/miiphybb.c///1238019729/
diff -Naur u-boot-2009.03_orig/drivers/net/phy/CVS/Entries.Extra.Old u-boot-2009.03/drivers/net/phy/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/net/phy/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/phy/CVS/Entries.Extra.Old 2009-03-25 15:25:30.000000000 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019729/
+/miiphybb.c///1238019729/
diff -Naur u-boot-2009.03_orig/drivers/net/phy/CVS/Entries.Old u-boot-2009.03/drivers/net/phy/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/net/phy/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/phy/CVS/Entries.Old 2009-03-25 15:25:30.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:09 2009//
+/miiphybb.c/1.1.1.1/Wed Mar 25 22:22:09 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/net/phy/CVS/Repository u-boot-2009.03/drivers/net/phy/CVS/Repository
--- u-boot-2009.03_orig/drivers/net/phy/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/phy/CVS/Repository 2009-03-25 15:25:30.790496200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/net/phy
diff -Naur u-boot-2009.03_orig/drivers/net/phy/CVS/Root u-boot-2009.03/drivers/net/phy/CVS/Root
--- u-boot-2009.03_orig/drivers/net/phy/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/phy/CVS/Root 2009-03-25 15:25:30.790496200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/net/s3c4510b_eth.h u-boot-2009.03/drivers/net/s3c4510b_eth.h
--- u-boot-2009.03_orig/drivers/net/s3c4510b_eth.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/s3c4510b_eth.h 2009-03-31 14:53:44.441206400 -0700
@@ -1,302 +1,302 @@
-#ifndef __S3C4510B_ETH_H
-#define __S3C4510B_ETH_H
-/*
- * Copyright (c) 2004 Cucy Systems (http://www.cucy.com)
- * Curt Brune <curt@cucy.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- *
- * MODULE: $Id:$
- * Description: Ethernet interface
- * Runtime Env: ARM7TDMI
- * Change History:
- * 03-02-04 Create (Curt Brune) curt@cucy.com
- *
- */
-
-#define ETH_MAC_ADDR_SIZE (6) /* dst,src addr is 6bytes each */
-#define ETH_MaxTxFrames (16) /* Max number of Tx Frames */
-
-/* Buffered DMA Receiver Control Register */
-#define ETH_BRxBRST 0x0000F /* BDMA Rx Burst Size * BRxBRST */
- /* = Burst Data Size 16 */
-#define ETH_BRxSTSKO 0x00020 /* BDMA Rx Stop/Skip Frame or Interrupt(=1) */
- /* case of not OWNER the current Frame */
-#define ETH_BRxMAINC 0x00040 /* BDMA Rx Memory Address Inc/Dec */
-#define ETH_BRxDIE 0x00080 /* BDMA Rx Every Received Frame Interrupt Enable */
-#define ETH_BRxNLIE 0x00100 /* BDMA Rx NULL List Interrupt Enable */
-#define ETH_BRxNOIE 0x00200 /* BDMA Rx Not Owner Interrupt Enable */
-#define ETH_BRxMSOIE 0x00400 /* BDMA Rx Maximum Size over Interrupr Enable */
-#define ETH_BRxLittle 0x00800 /* BDMA Rx Big/Little Endian */
-#define ETH_BRxBig 0x00000 /* BDMA Rx Big/Little Endian */
-#define ETH_BRxWA01 0x01000 /* BDMA Rx Word Alignment- one invalid byte */
-#define ETH_BRxWA10 0x02000 /* BDMA Rx Word Alignment- two invalid byte */
-#define ETH_BRxWA11 0x03000 /* BDMA Rx Word Alignment- three invalid byte */
-#define ETH_BRxEn 0x04000 /* BDMA Rx Enable */
-#define ETH_BRxRS 0x08000 /* BDMA Rx Reset */
-#define ETH_RxEmpty 0x10000 /* BDMA Rx Buffer empty interrupt */
-#define ETH_BRxEarly 0x20000 /* BDMA Rx Early notify Interrupt */
-
-/* Buffered DMA Trasmit Control Register(BDMATXCON) */
-#define ETH_BTxBRST 0x0000F /* BDMA Tx Burst Size = 16 */
-#define ETH_BTxSTSKO 0x00020 /* BDMA Tx Stop/Skip Frame or Interrupt in case */
- /* of not Owner the current frame */
-#define ETH_BTxCPIE 0x00080 /* BDMA Tx Complete to send control */
- /* packet Enable */
-#define ETH_BTxNOIE 0x00200 /* BDMA Tx Buffer Not Owner */
-#define ETH_BTxEmpty 0x00400 /* BDMA Tx Buffer Empty Interrupt */
-
-/* BDMA Tx buffer can be moved to the MAC Tx IO when the new frame comes in. */
-#define ETH_BTxMSL000 0x00000 /* No wait to fill the BDMA */
-#define ETH_BTxMSL001 0x00800 /* wait to fill 1/8 of the BDMA */
-#define ETH_BTxMSL010 0x01000 /* wait to fill 2/8 of the BDMA */
-#define ETH_BTxMSL011 0x01800 /* wait to fill 3/8 of the BDMA */
-#define ETH_BTxMSL100 0x02000 /* wait to fill 4/8 of the BDMA */
-#define ETH_BTxMSL101 0x02800 /* wait to fill 5/8 of the BDMA */
-#define ETH_BTxMSL110 0x03000 /* wait to fill 6/8 of the BDMA */
-#define ETH_BTxMSL111 0x03800 /* wait to fill 7/8 of the BDMA */
-#define ETH_BTxEn 0x04000 /* BDMA Tx Enable */
-#define ETH_BTxRS 0x08000 /* BDMA Tx Reset */
-
-/* BDMA Status Register */
-#define ETH_S_BRxRDF 0x00001 /* BDMA Rx Done Every Received Frame */
-#define ETH_S_BRxNL 0x00002 /* BDMA Rx NULL List */
-#define ETH_S_BRxNO 0x00004 /* BDMA Rx Not Owner */
-#define ETH_S_BRxMSO 0x00008 /* BDMA Rx Maximum Size Over */
-#define ETH_S_BRxEmpty 0x00010 /* BDMA Rx Buffer Empty */
-#define ETH_S_BRxSEarly 0x00020 /* Early Notify */
-#define ETH_S_BRxFRF 0x00080 /* One more frame data in BDMA receive buffer */
-#define ETH_S_BTxCCP 0x10000 /* BDMA Tx Complete to send Control Packet */
-#define ETH_S_BTxNL 0x20000 /* BDMA Tx Null List */
-#define ETH_S_BTxNO 0x40000 /* BDMA Tx Not Owner */
-#define ETH_S_BTxEmpty 0x100000 /* BDMA Tx Buffer Empty */
-
-/* MAC Control Register */
-#define ETH_HaltReg 0x0001 /* stop transmission and reception */
- /* after completion of any current packets */
-#define ETH_HaltImm 0x0002 /* Stop transmission and reception immediately */
-#define ETH_SwReset 0x0004 /* reset all Ethernet controller state machines */
- /* and FIFOs */
-#define ETH_FullDup 0x0008 /* allow transmission to begin while reception */
- /* is occurring */
-#define ETH_MACLoop 0x0010 /* MAC loopback */
-#define ETH_ConnM00 0x0000 /* Automatic-default */
-#define ETH_ConnM01 0x0020 /* Force 10Mbits endec */
-#define ETH_ConnM10 0x0040 /* Force MII (rate determined by MII clock */
-#define ETH_MIIOFF 0x0040 /* Force MII (rate determined by MII clock */
-#define ETH_Loop10 0x0080 /* Loop 10Mbps */
-#define ETH_MissRoll 0x0400 /* Missed error counter rolled over */
-#define ETH_MDCOFF 0x1000 /* MII Station Management Clock Off */
-#define ETH_EnMissRoll 0x2000 /* Interrupt when missed error counter rolls */
- /* over */
-#define ETH_Link10 0x8000 /* Link status 10Mbps */
-
-/* CAM control register(CAMCON) */
-#define ETH_StationAcc 0x0001 /* Accept any packet with a unicast station */
- /* address */
-#define ETH_GroupAcc 0x0002 /* Accept any packet with multicast-group */
- /* station address */
-#define ETH_BroadAcc 0x0004 /* Accept any packet with a broadcast station */
- /* address */
-#define ETH_NegCAM 0x0008 /* 0: Accept packets CAM recognizes, */
- /* reject others */
- /* 1: reject packets CAM recognizes, */
- /* accept others */
-#define ETH_CompEn 0x0010 /* Compare Enable mode */
-
-/* Transmit Control Register(MACTXCON) */
-#define ETH_TxEn 0x0001 /* transmit Enable */
-#define ETH_TxHalt 0x0002 /* Transmit Halt Request */
-#define ETH_NoPad 0x0004 /* suppress Padding */
-#define ETH_NoCRC 0x0008 /* Suppress CRC */
-#define ETH_FBack 0x0010 /* Fast Back-off */
-#define ETH_NoDef 0x0020 /* Disable the defer counter */
-#define ETH_SdPause 0x0040 /* Send Pause */
-#define ETH_MII10En 0x0080 /* MII 10Mbps mode enable */
-#define ETH_EnUnder 0x0100 /* Enable Underrun */
-#define ETH_EnDefer 0x0200 /* Enable Deferral */
-#define ETH_EnNCarr 0x0400 /* Enable No Carrier */
-#define ETH_EnExColl 0x0800 /* interrupt if 16 collision occur */
- /* in the same packet */
-#define ETH_EnLateColl 0x1000 /* interrupt if collision occurs after */
- /* 512 bit times(64 bytes times) */
-#define ETH_EnTxPar 0x2000 /* interrupt if the MAC transmit FIFO */
- /* has a parity error */
-#define ETH_EnComp 0x4000 /* interrupt when the MAC transmits or */
- /* discards one packet */
-
-/* Transmit Status Register(MACTXSTAT) */
-#define ETH_ExColl 0x0010 /* Excessive collision */
-#define ETH_TxDeffered 0x0020 /* set if 16 collisions occur for same packet */
-#define ETH_Paused 0x0040 /* packet waited because of pause during */
- /* transmission */
-#define ETH_IntTx 0x0080 /* set if transmission of packet causes an */
- /* interrupt condiftion */
-#define ETH_Under 0x0100 /* MAC transmit FIFO becomes empty during */
- /* transmission */
-#define ETH_Defer 0x0200 /* MAC defers for MAC deferral */
-#define ETH_NCarr 0x0400 /* No carrier sense detected during the */
- /* transmission of a packet */
-#define ETH_SQE 0x0800 /* Signal Quality Error */
-#define ETH_LateColl 0x1000 /* a collision occures after 512 bit times */
-#define ETH_TxPar 0x2000 /* MAC transmit FIFO has detected a parity error */
-#define ETH_Comp 0x4000 /* MAC transmit or discards one packet */
-#define ETH_TxHalted 0x8000 /* Transmission was halted by clearing */
- /* TxEn or Halt immedite */
-
-/* Receive Control Register (MACRXCON) */
-#define ETH_RxEn 0x0001
-#define ETH_RxHalt 0x0002
-#define ETH_LongEn 0x0004
-#define ETH_ShortEn 0x0008
-#define ETH_StripCRC 0x0010
-#define ETH_PassCtl 0x0020
-#define ETH_IgnoreCRC 0x0040
-#define ETH_EnAlign 0x0100
-#define ETH_EnCRCErr 0x0200
-#define ETH_EnOver 0x0400
-#define ETH_EnLongErr 0x0800
-#define ETH_EnRxPar 0x2000
-#define ETH_EnGood 0x4000
-
-/* Receive Status Register(MACRXSTAT) */
-#define ETH_MCtlRecd 0x0020
-#define ETH_MIntRx 0x0040
-#define ETH_MRx10Stat 0x0080
-#define ETH_MAllignErr 0x0100
-#define ETH_MCRCErr 0x0200
-#define ETH_MOverflow 0x0400
-#define ETH_MLongErr 0x0800
-#define ETH_MRxPar 0x2000
-#define ETH_MRxGood 0x4000
-#define ETH_MRxHalted 0x8000
-
-/* type of ethernet packets */
-#define ETH_TYPE_ARP (0x0806)
-#define ETH_TYPE_IP (0x0800)
-
-#define ETH_HDR_SIZE (14)
-
-/* bit field for frame data pointer word */
-typedef struct __BF_FrameDataPtr {
- u32 dataPtr:31;
- u32 owner: 1;
-} BF_FrameDataPtr;
-
-typedef union _FrameDataPtr {
- u32 ui;
- BF_FrameDataPtr bf;
-} FrameDataPtr;
-
-typedef struct __BF_TX_Options {
- u32 no_padding: 1;
- u32 no_crc: 1;
- u32 macTxIrqEnbl: 1;
- u32 littleEndian: 1;
- u32 frameDataDir: 1;
- u32 widgetAlign: 2;
- u32 reserved:25;
-} BF_TX_Options;
-
-typedef union _TX_Options {
- u32 ui;
- BF_TX_Options bf;
-} TX_Options;
-
-typedef struct __BF_RX_Status {
- u32 len:16; /* frame length */
- u32 reserved1: 3;
- u32 overMax: 1;
- u32 reserved2: 1;
- u32 ctrlRcv: 1;
- u32 intRx: 1;
- u32 rx10stat: 1;
- u32 alignErr: 1;
- u32 crcErr: 1;
- u32 overFlow: 1;
- u32 longErr: 1;
- u32 reserved3: 1;
- u32 parityErr: 1;
- u32 good: 1;
- u32 halted: 1;
-} BF_RX_Status;
-
-typedef union _RX_Status {
- u32 ui;
- BF_RX_Status bf;
-} RX_Status;
-
-typedef struct __BF_TX_Status {
- u32 len:16; /* frame length */
- u32 txCollCnt: 4;
- u32 exColl: 1;
- u32 txDefer: 1;
- u32 paused: 1;
- u32 intTx: 1;
- u32 underRun: 1;
- u32 defer: 1;
- u32 noCarrier: 1;
- u32 SQErr: 1;
- u32 lateColl: 1;
- u32 parityErr: 1;
- u32 complete: 1;
- u32 halted: 1;
-} BF_TX_Status;
-
-typedef union _TX_Status {
- u32 ui;
- BF_TX_Status bf;
-} TX_Status;
-
-/* TX descriptor structure */
-typedef struct __TX_FrameDescriptor {
- volatile FrameDataPtr m_frameDataPtr;
- TX_Options m_opt;
- volatile TX_Status m_status;
- struct __TX_FrameDescriptor *m_nextFD;
-} TX_FrameDescriptor;
-
-/* RX descriptor structure */
-typedef struct __RX_FrameDescriptor {
- volatile FrameDataPtr m_frameDataPtr;
- u32 m_reserved;
- volatile RX_Status m_status;
- struct __RX_FrameDescriptor *m_nextFD;
-} RX_FrameDescriptor;
-
-/* MAC Frame Structure */
-struct __MACFrame {
- u8 m_dstAddr[6];
- u8 m_srcAddr[6];
- u16 m_lengthOrType;
- u8 m_payload[1506];
-} __attribute__ ((packed));
-
-typedef struct __MACFrame MACFrame;
-
-/* Ethernet Control block */
-typedef struct __ETH {
- TX_FrameDescriptor *m_curTX_FD; /* pointer to current TX frame descriptor */
- TX_FrameDescriptor *m_baseTX_FD; /* pointer to base TX frame descriptor */
- RX_FrameDescriptor *m_curRX_FD; /* pointer to current RX frame descriptor */
- RX_FrameDescriptor *m_baseRX_FD; /* pointer to base RX frame descriptor */
- u8 *m_mac; /* pointer to our MAC address */
-} ETH;
-
-#endif
+#ifndef __S3C4510B_ETH_H
+#define __S3C4510B_ETH_H
+/*
+ * Copyright (c) 2004 Cucy Systems (http://www.cucy.com)
+ * Curt Brune <curt@cucy.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ *
+ * MODULE: $Id: s3c4510b_eth.h,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $
+ * Description: Ethernet interface
+ * Runtime Env: ARM7TDMI
+ * Change History:
+ * 03-02-04 Create (Curt Brune) curt@cucy.com
+ *
+ */
+
+#define ETH_MAC_ADDR_SIZE (6) /* dst,src addr is 6bytes each */
+#define ETH_MaxTxFrames (16) /* Max number of Tx Frames */
+
+/* Buffered DMA Receiver Control Register */
+#define ETH_BRxBRST 0x0000F /* BDMA Rx Burst Size * BRxBRST */
+ /* = Burst Data Size 16 */
+#define ETH_BRxSTSKO 0x00020 /* BDMA Rx Stop/Skip Frame or Interrupt(=1) */
+ /* case of not OWNER the current Frame */
+#define ETH_BRxMAINC 0x00040 /* BDMA Rx Memory Address Inc/Dec */
+#define ETH_BRxDIE 0x00080 /* BDMA Rx Every Received Frame Interrupt Enable */
+#define ETH_BRxNLIE 0x00100 /* BDMA Rx NULL List Interrupt Enable */
+#define ETH_BRxNOIE 0x00200 /* BDMA Rx Not Owner Interrupt Enable */
+#define ETH_BRxMSOIE 0x00400 /* BDMA Rx Maximum Size over Interrupr Enable */
+#define ETH_BRxLittle 0x00800 /* BDMA Rx Big/Little Endian */
+#define ETH_BRxBig 0x00000 /* BDMA Rx Big/Little Endian */
+#define ETH_BRxWA01 0x01000 /* BDMA Rx Word Alignment- one invalid byte */
+#define ETH_BRxWA10 0x02000 /* BDMA Rx Word Alignment- two invalid byte */
+#define ETH_BRxWA11 0x03000 /* BDMA Rx Word Alignment- three invalid byte */
+#define ETH_BRxEn 0x04000 /* BDMA Rx Enable */
+#define ETH_BRxRS 0x08000 /* BDMA Rx Reset */
+#define ETH_RxEmpty 0x10000 /* BDMA Rx Buffer empty interrupt */
+#define ETH_BRxEarly 0x20000 /* BDMA Rx Early notify Interrupt */
+
+/* Buffered DMA Trasmit Control Register(BDMATXCON) */
+#define ETH_BTxBRST 0x0000F /* BDMA Tx Burst Size = 16 */
+#define ETH_BTxSTSKO 0x00020 /* BDMA Tx Stop/Skip Frame or Interrupt in case */
+ /* of not Owner the current frame */
+#define ETH_BTxCPIE 0x00080 /* BDMA Tx Complete to send control */
+ /* packet Enable */
+#define ETH_BTxNOIE 0x00200 /* BDMA Tx Buffer Not Owner */
+#define ETH_BTxEmpty 0x00400 /* BDMA Tx Buffer Empty Interrupt */
+
+/* BDMA Tx buffer can be moved to the MAC Tx IO when the new frame comes in. */
+#define ETH_BTxMSL000 0x00000 /* No wait to fill the BDMA */
+#define ETH_BTxMSL001 0x00800 /* wait to fill 1/8 of the BDMA */
+#define ETH_BTxMSL010 0x01000 /* wait to fill 2/8 of the BDMA */
+#define ETH_BTxMSL011 0x01800 /* wait to fill 3/8 of the BDMA */
+#define ETH_BTxMSL100 0x02000 /* wait to fill 4/8 of the BDMA */
+#define ETH_BTxMSL101 0x02800 /* wait to fill 5/8 of the BDMA */
+#define ETH_BTxMSL110 0x03000 /* wait to fill 6/8 of the BDMA */
+#define ETH_BTxMSL111 0x03800 /* wait to fill 7/8 of the BDMA */
+#define ETH_BTxEn 0x04000 /* BDMA Tx Enable */
+#define ETH_BTxRS 0x08000 /* BDMA Tx Reset */
+
+/* BDMA Status Register */
+#define ETH_S_BRxRDF 0x00001 /* BDMA Rx Done Every Received Frame */
+#define ETH_S_BRxNL 0x00002 /* BDMA Rx NULL List */
+#define ETH_S_BRxNO 0x00004 /* BDMA Rx Not Owner */
+#define ETH_S_BRxMSO 0x00008 /* BDMA Rx Maximum Size Over */
+#define ETH_S_BRxEmpty 0x00010 /* BDMA Rx Buffer Empty */
+#define ETH_S_BRxSEarly 0x00020 /* Early Notify */
+#define ETH_S_BRxFRF 0x00080 /* One more frame data in BDMA receive buffer */
+#define ETH_S_BTxCCP 0x10000 /* BDMA Tx Complete to send Control Packet */
+#define ETH_S_BTxNL 0x20000 /* BDMA Tx Null List */
+#define ETH_S_BTxNO 0x40000 /* BDMA Tx Not Owner */
+#define ETH_S_BTxEmpty 0x100000 /* BDMA Tx Buffer Empty */
+
+/* MAC Control Register */
+#define ETH_HaltReg 0x0001 /* stop transmission and reception */
+ /* after completion of any current packets */
+#define ETH_HaltImm 0x0002 /* Stop transmission and reception immediately */
+#define ETH_SwReset 0x0004 /* reset all Ethernet controller state machines */
+ /* and FIFOs */
+#define ETH_FullDup 0x0008 /* allow transmission to begin while reception */
+ /* is occurring */
+#define ETH_MACLoop 0x0010 /* MAC loopback */
+#define ETH_ConnM00 0x0000 /* Automatic-default */
+#define ETH_ConnM01 0x0020 /* Force 10Mbits endec */
+#define ETH_ConnM10 0x0040 /* Force MII (rate determined by MII clock */
+#define ETH_MIIOFF 0x0040 /* Force MII (rate determined by MII clock */
+#define ETH_Loop10 0x0080 /* Loop 10Mbps */
+#define ETH_MissRoll 0x0400 /* Missed error counter rolled over */
+#define ETH_MDCOFF 0x1000 /* MII Station Management Clock Off */
+#define ETH_EnMissRoll 0x2000 /* Interrupt when missed error counter rolls */
+ /* over */
+#define ETH_Link10 0x8000 /* Link status 10Mbps */
+
+/* CAM control register(CAMCON) */
+#define ETH_StationAcc 0x0001 /* Accept any packet with a unicast station */
+ /* address */
+#define ETH_GroupAcc 0x0002 /* Accept any packet with multicast-group */
+ /* station address */
+#define ETH_BroadAcc 0x0004 /* Accept any packet with a broadcast station */
+ /* address */
+#define ETH_NegCAM 0x0008 /* 0: Accept packets CAM recognizes, */
+ /* reject others */
+ /* 1: reject packets CAM recognizes, */
+ /* accept others */
+#define ETH_CompEn 0x0010 /* Compare Enable mode */
+
+/* Transmit Control Register(MACTXCON) */
+#define ETH_TxEn 0x0001 /* transmit Enable */
+#define ETH_TxHalt 0x0002 /* Transmit Halt Request */
+#define ETH_NoPad 0x0004 /* suppress Padding */
+#define ETH_NoCRC 0x0008 /* Suppress CRC */
+#define ETH_FBack 0x0010 /* Fast Back-off */
+#define ETH_NoDef 0x0020 /* Disable the defer counter */
+#define ETH_SdPause 0x0040 /* Send Pause */
+#define ETH_MII10En 0x0080 /* MII 10Mbps mode enable */
+#define ETH_EnUnder 0x0100 /* Enable Underrun */
+#define ETH_EnDefer 0x0200 /* Enable Deferral */
+#define ETH_EnNCarr 0x0400 /* Enable No Carrier */
+#define ETH_EnExColl 0x0800 /* interrupt if 16 collision occur */
+ /* in the same packet */
+#define ETH_EnLateColl 0x1000 /* interrupt if collision occurs after */
+ /* 512 bit times(64 bytes times) */
+#define ETH_EnTxPar 0x2000 /* interrupt if the MAC transmit FIFO */
+ /* has a parity error */
+#define ETH_EnComp 0x4000 /* interrupt when the MAC transmits or */
+ /* discards one packet */
+
+/* Transmit Status Register(MACTXSTAT) */
+#define ETH_ExColl 0x0010 /* Excessive collision */
+#define ETH_TxDeffered 0x0020 /* set if 16 collisions occur for same packet */
+#define ETH_Paused 0x0040 /* packet waited because of pause during */
+ /* transmission */
+#define ETH_IntTx 0x0080 /* set if transmission of packet causes an */
+ /* interrupt condiftion */
+#define ETH_Under 0x0100 /* MAC transmit FIFO becomes empty during */
+ /* transmission */
+#define ETH_Defer 0x0200 /* MAC defers for MAC deferral */
+#define ETH_NCarr 0x0400 /* No carrier sense detected during the */
+ /* transmission of a packet */
+#define ETH_SQE 0x0800 /* Signal Quality Error */
+#define ETH_LateColl 0x1000 /* a collision occures after 512 bit times */
+#define ETH_TxPar 0x2000 /* MAC transmit FIFO has detected a parity error */
+#define ETH_Comp 0x4000 /* MAC transmit or discards one packet */
+#define ETH_TxHalted 0x8000 /* Transmission was halted by clearing */
+ /* TxEn or Halt immedite */
+
+/* Receive Control Register (MACRXCON) */
+#define ETH_RxEn 0x0001
+#define ETH_RxHalt 0x0002
+#define ETH_LongEn 0x0004
+#define ETH_ShortEn 0x0008
+#define ETH_StripCRC 0x0010
+#define ETH_PassCtl 0x0020
+#define ETH_IgnoreCRC 0x0040
+#define ETH_EnAlign 0x0100
+#define ETH_EnCRCErr 0x0200
+#define ETH_EnOver 0x0400
+#define ETH_EnLongErr 0x0800
+#define ETH_EnRxPar 0x2000
+#define ETH_EnGood 0x4000
+
+/* Receive Status Register(MACRXSTAT) */
+#define ETH_MCtlRecd 0x0020
+#define ETH_MIntRx 0x0040
+#define ETH_MRx10Stat 0x0080
+#define ETH_MAllignErr 0x0100
+#define ETH_MCRCErr 0x0200
+#define ETH_MOverflow 0x0400
+#define ETH_MLongErr 0x0800
+#define ETH_MRxPar 0x2000
+#define ETH_MRxGood 0x4000
+#define ETH_MRxHalted 0x8000
+
+/* type of ethernet packets */
+#define ETH_TYPE_ARP (0x0806)
+#define ETH_TYPE_IP (0x0800)
+
+#define ETH_HDR_SIZE (14)
+
+/* bit field for frame data pointer word */
+typedef struct __BF_FrameDataPtr {
+ u32 dataPtr:31;
+ u32 owner: 1;
+} BF_FrameDataPtr;
+
+typedef union _FrameDataPtr {
+ u32 ui;
+ BF_FrameDataPtr bf;
+} FrameDataPtr;
+
+typedef struct __BF_TX_Options {
+ u32 no_padding: 1;
+ u32 no_crc: 1;
+ u32 macTxIrqEnbl: 1;
+ u32 littleEndian: 1;
+ u32 frameDataDir: 1;
+ u32 widgetAlign: 2;
+ u32 reserved:25;
+} BF_TX_Options;
+
+typedef union _TX_Options {
+ u32 ui;
+ BF_TX_Options bf;
+} TX_Options;
+
+typedef struct __BF_RX_Status {
+ u32 len:16; /* frame length */
+ u32 reserved1: 3;
+ u32 overMax: 1;
+ u32 reserved2: 1;
+ u32 ctrlRcv: 1;
+ u32 intRx: 1;
+ u32 rx10stat: 1;
+ u32 alignErr: 1;
+ u32 crcErr: 1;
+ u32 overFlow: 1;
+ u32 longErr: 1;
+ u32 reserved3: 1;
+ u32 parityErr: 1;
+ u32 good: 1;
+ u32 halted: 1;
+} BF_RX_Status;
+
+typedef union _RX_Status {
+ u32 ui;
+ BF_RX_Status bf;
+} RX_Status;
+
+typedef struct __BF_TX_Status {
+ u32 len:16; /* frame length */
+ u32 txCollCnt: 4;
+ u32 exColl: 1;
+ u32 txDefer: 1;
+ u32 paused: 1;
+ u32 intTx: 1;
+ u32 underRun: 1;
+ u32 defer: 1;
+ u32 noCarrier: 1;
+ u32 SQErr: 1;
+ u32 lateColl: 1;
+ u32 parityErr: 1;
+ u32 complete: 1;
+ u32 halted: 1;
+} BF_TX_Status;
+
+typedef union _TX_Status {
+ u32 ui;
+ BF_TX_Status bf;
+} TX_Status;
+
+/* TX descriptor structure */
+typedef struct __TX_FrameDescriptor {
+ volatile FrameDataPtr m_frameDataPtr;
+ TX_Options m_opt;
+ volatile TX_Status m_status;
+ struct __TX_FrameDescriptor *m_nextFD;
+} TX_FrameDescriptor;
+
+/* RX descriptor structure */
+typedef struct __RX_FrameDescriptor {
+ volatile FrameDataPtr m_frameDataPtr;
+ u32 m_reserved;
+ volatile RX_Status m_status;
+ struct __RX_FrameDescriptor *m_nextFD;
+} RX_FrameDescriptor;
+
+/* MAC Frame Structure */
+struct __MACFrame {
+ u8 m_dstAddr[6];
+ u8 m_srcAddr[6];
+ u16 m_lengthOrType;
+ u8 m_payload[1506];
+} __attribute__ ((packed));
+
+typedef struct __MACFrame MACFrame;
+
+/* Ethernet Control block */
+typedef struct __ETH {
+ TX_FrameDescriptor *m_curTX_FD; /* pointer to current TX frame descriptor */
+ TX_FrameDescriptor *m_baseTX_FD; /* pointer to base TX frame descriptor */
+ RX_FrameDescriptor *m_curRX_FD; /* pointer to current RX frame descriptor */
+ RX_FrameDescriptor *m_baseRX_FD; /* pointer to base RX frame descriptor */
+ u8 *m_mac; /* pointer to our MAC address */
+} ETH;
+
+#endif
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries u-boot-2009.03/drivers/net/sk98lin/CVS/Entries
--- u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/CVS/Entries 2009-03-31 14:54:29.893749600 -0700
@@ -0,0 +1,21 @@
+D/h////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot_compat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uboot_drv.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uboot_skb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/skaddr.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skcsum.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skge.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skgehwt.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skgeinit.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skgemib.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skgepnmi.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skgesirq.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/ski2c.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/sklm80.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skproc.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skqueue.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skrlmt.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/sktimer.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skvpd.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
+/skxmac2.c/1.1.1.1/Tue Mar 31 21:54:29 2009//T1.1.1.1
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries.Extra u-boot-2009.03/drivers/net/sk98lin/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/CVS/Entries.Extra 2009-03-31 14:54:29.893749600 -0700
@@ -0,0 +1,21 @@
+D/h////
+/Makefile///1238019729/
+/u-boot_compat.h///1238019729/
+/uboot_drv.c///1238019729/
+/uboot_skb.c///1238019729/
+/skaddr.c///1238019729/
+/skcsum.c///1238019729/
+/skge.c///1238019729/
+/skgehwt.c///1238019729/
+/skgeinit.c///1238019729/
+/skgemib.c///1238019729/
+/skgepnmi.c///1238019729/
+/skgesirq.c///1238019729/
+/ski2c.c///1238019729/
+/sklm80.c///1238019729/
+/skproc.c///1238019729/
+/skqueue.c///1238019729/
+/skrlmt.c///1238019729/
+/sktimer.c///1238019729/
+/skvpd.c///1238019729/
+/skxmac2.c///1238019729/
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries.Extra.Old u-boot-2009.03/drivers/net/sk98lin/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/CVS/Entries.Extra.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,21 @@
+D/h////
+/Makefile///1238019729/
+/u-boot_compat.h///1238019729/
+/uboot_drv.c///1238019729/
+/uboot_skb.c///1238019729/
+/skaddr.c///1238028704/
+/skcsum.c///1238028704/
+/skge.c///1238028704/
+/skgehwt.c///1238028704/
+/skgeinit.c///1238028704/
+/skgemib.c///1238028704/
+/skgepnmi.c///1238028704/
+/skgesirq.c///1238028704/
+/ski2c.c///1238028704/
+/sklm80.c///1238028704/
+/skproc.c///1238028704/
+/skqueue.c///1238028704/
+/skrlmt.c///1238028705/
+/sktimer.c///1238028705/
+/skvpd.c///1238028705/
+/skxmac2.c///1238028705/
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries.Old u-boot-2009.03/drivers/net/sk98lin/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/CVS/Entries.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,21 @@
+D/h////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot_compat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uboot_drv.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uboot_skb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/skaddr.c/1.2/Thu Mar 26 00:51:44 2009//
+/skcsum.c/1.2/Thu Mar 26 00:51:44 2009//
+/skge.c/1.2/Thu Mar 26 00:51:44 2009//
+/skgehwt.c/1.2/Thu Mar 26 00:51:44 2009//
+/skgeinit.c/1.2/Thu Mar 26 00:51:44 2009//
+/skgemib.c/1.2/Thu Mar 26 00:51:44 2009//
+/skgepnmi.c/1.2/Thu Mar 26 00:51:44 2009//
+/skgesirq.c/1.2/Thu Mar 26 00:51:44 2009//
+/ski2c.c/1.2/Thu Mar 26 00:51:44 2009//
+/sklm80.c/1.2/Thu Mar 26 00:51:44 2009//
+/skproc.c/1.2/Thu Mar 26 00:51:44 2009//
+/skqueue.c/1.2/Thu Mar 26 00:51:44 2009//
+/skrlmt.c/1.2/Thu Mar 26 00:51:45 2009//
+/sktimer.c/1.2/Thu Mar 26 00:51:45 2009//
+/skvpd.c/1.2/Thu Mar 26 00:51:45 2009//
+/skxmac2.c/1.2/Thu Mar 26 00:51:45 2009//
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Repository u-boot-2009.03/drivers/net/sk98lin/CVS/Repository
--- u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/CVS/Repository 2009-03-25 15:25:30.915495400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/net/sk98lin
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Root u-boot-2009.03/drivers/net/sk98lin/CVS/Root
--- u-boot-2009.03_orig/drivers/net/sk98lin/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/CVS/Root 2009-03-25 15:25:30.915495400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries 2009-03-31 14:54:46.284164800 -0700
@@ -0,0 +1,24 @@
+/lm80.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skaddr.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skcsum.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skdebug.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skdrv1st.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skdrv2nd.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skerror.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgedrv.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgehw.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgehwt.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgei2c.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgeinit.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgepnm2.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgepnmi.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/skgesirq.h/1.1.1.1/Tue Mar 31 21:54:45 2009//T1.1.1.1
+/ski2c.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+/skqueue.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+/skrlmt.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+/sktimer.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+/sktypes.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+/skversion.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+/skvpd.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+/xmac_ii.h/1.1.1.1/Tue Mar 31 21:54:46 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries.Extra u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries.Extra 2009-03-31 14:54:46.299789600 -0700
@@ -0,0 +1,23 @@
+/lm80.h///1238019729/
+/skaddr.h///1238019729/
+/skcsum.h///1238019729/
+/skdebug.h///1238019729/
+/skdrv1st.h///1238019729/
+/skdrv2nd.h///1238019729/
+/skerror.h///1238019729/
+/skgedrv.h///1238019729/
+/skgehw.h///1238019729/
+/skgehwt.h///1238019729/
+/skgei2c.h///1238019729/
+/skgeinit.h///1238019729/
+/skgepnm2.h///1238019729/
+/skgepnmi.h///1238019729/
+/skgesirq.h///1238019729/
+/ski2c.h///1238019729/
+/skqueue.h///1238019730/
+/skrlmt.h///1238019730/
+/sktimer.h///1238019730/
+/sktypes.h///1238019730/
+/skversion.h///1238019730/
+/skvpd.h///1238019730/
+/xmac_ii.h///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries.Extra.Old u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries.Extra.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,23 @@
+/lm80.h///1238028705/
+/skaddr.h///1238028705/
+/skcsum.h///1238028705/
+/skdebug.h///1238028705/
+/skdrv1st.h///1238028705/
+/skdrv2nd.h///1238028705/
+/skerror.h///1238028705/
+/skgedrv.h///1238028705/
+/skgehw.h///1238028706/
+/skgehwt.h///1238028706/
+/skgei2c.h///1238028706/
+/skgeinit.h///1238028706/
+/skgepnm2.h///1238028706/
+/skgepnmi.h///1238028706/
+/skgesirq.h///1238028706/
+/ski2c.h///1238028706/
+/skqueue.h///1238028706/
+/skrlmt.h///1238028706/
+/sktimer.h///1238028706/
+/sktypes.h///1238028706/
+/skversion.h///1238028706/
+/skvpd.h///1238028706/
+/xmac_ii.h///1238028706/
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries.Old u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/h/CVS/Entries.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,24 @@
+/lm80.h/1.2/Thu Mar 26 00:51:45 2009//
+/skaddr.h/1.2/Thu Mar 26 00:51:45 2009//
+/skcsum.h/1.2/Thu Mar 26 00:51:45 2009//
+/skdebug.h/1.2/Thu Mar 26 00:51:45 2009//
+/skdrv1st.h/1.2/Thu Mar 26 00:51:45 2009//
+/skdrv2nd.h/1.2/Thu Mar 26 00:51:45 2009//
+/skerror.h/1.2/Thu Mar 26 00:51:45 2009//
+/skgedrv.h/1.2/Thu Mar 26 00:51:45 2009//
+/skgehw.h/1.2/Thu Mar 26 00:51:46 2009//
+/skgehwt.h/1.2/Thu Mar 26 00:51:46 2009//
+/skgei2c.h/1.2/Thu Mar 26 00:51:46 2009//
+/skgeinit.h/1.2/Thu Mar 26 00:51:46 2009//
+/skgepnm2.h/1.2/Thu Mar 26 00:51:46 2009//
+/skgepnmi.h/1.2/Thu Mar 26 00:51:46 2009//
+/skgesirq.h/1.2/Thu Mar 26 00:51:46 2009//
+/ski2c.h/1.2/Thu Mar 26 00:51:46 2009//
+/skqueue.h/1.2/Thu Mar 26 00:51:46 2009//
+/skrlmt.h/1.2/Thu Mar 26 00:51:46 2009//
+/sktimer.h/1.2/Thu Mar 26 00:51:46 2009//
+/sktypes.h/1.2/Thu Mar 26 00:51:46 2009//
+/skversion.h/1.2/Thu Mar 26 00:51:46 2009//
+/skvpd.h/1.2/Thu Mar 26 00:51:46 2009//
+/xmac_ii.h/1.2/Thu Mar 26 00:51:46 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Repository u-boot-2009.03/drivers/net/sk98lin/h/CVS/Repository
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/h/CVS/Repository 2009-03-25 15:25:31.181118700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/net/sk98lin/h
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Root u-boot-2009.03/drivers/net/sk98lin/h/CVS/Root
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/net/sk98lin/h/CVS/Root 2009-03-25 15:25:31.181118700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/lm80.h u-boot-2009.03/drivers/net/sk98lin/h/lm80.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/lm80.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/lm80.h 2009-03-31 14:54:45.440425600 -0700
@@ -1,197 +1,200 @@
-/******************************************************************************
- *
- * Name: lm80.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.4 $
- * Date: $Date: 2002/04/25 11:04:10 $
- * Purpose: Contains all defines for the LM80 Chip
- * (National Semiconductor).
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- * $Log: lm80.h,v $
- * Revision 1.4 2002/04/25 11:04:10 rschmidt
- * Editorial changes
- *
- * Revision 1.3 1999/11/22 13:41:19 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.2 1999/03/12 13:26:51 malthoff
- * remove __STDC__.
- *
- * Revision 1.1 1998/06/19 09:28:31 malthoff
- * created.
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_LM80_H
-#define __INC_LM80_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* defines ********************************************************************/
-
-/*
- * LM80 register definition
- *
- * All registers are 8 bit wide
- */
-#define LM80_CFG 0x00 /* Configuration Register */
-#define LM80_ISRC_1 0x01 /* Interrupt Status Register 1 */
-#define LM80_ISRC_2 0x02 /* Interrupt Status Register 2 */
-#define LM80_IMSK_1 0x03 /* Interrupt Mask Register 1 */
-#define LM80_IMSK_2 0x04 /* Interrupt Mask Register 2 */
-#define LM80_FAN_CTRL 0x05 /* Fan Devisor/RST#/OS# Register */
-#define LM80_TEMP_CTRL 0x06 /* OS# Config, Temp Res. Reg */
- /* 0x07 - 0x1f reserved */
- /* current values */
-#define LM80_VT0_IN 0x20 /* current Voltage 0 value */
-#define LM80_VT1_IN 0x21 /* current Voltage 1 value */
-#define LM80_VT2_IN 0x22 /* current Voltage 2 value */
-#define LM80_VT3_IN 0x23 /* current Voltage 3 value */
-#define LM80_VT4_IN 0x24 /* current Voltage 4 value */
-#define LM80_VT5_IN 0x25 /* current Voltage 5 value */
-#define LM80_VT6_IN 0x26 /* current Voltage 6 value */
-#define LM80_TEMP_IN 0x27 /* current Temperature value */
-#define LM80_FAN1_IN 0x28 /* current Fan 1 count */
-#define LM80_FAN2_IN 0x29 /* current Fan 2 count */
- /* limit values */
-#define LM80_VT0_HIGH_LIM 0x2a /* high limit val for Voltage 0 */
-#define LM80_VT0_LOW_LIM 0x2b /* low limit val for Voltage 0 */
-#define LM80_VT1_HIGH_LIM 0x2c /* high limit val for Voltage 1 */
-#define LM80_VT1_LOW_LIM 0x2d /* low limit val for Voltage 1 */
-#define LM80_VT2_HIGH_LIM 0x2e /* high limit val for Voltage 2 */
-#define LM80_VT2_LOW_LIM 0x2f /* low limit val for Voltage 2 */
-#define LM80_VT3_HIGH_LIM 0x30 /* high limit val for Voltage 3 */
-#define LM80_VT3_LOW_LIM 0x31 /* low limit val for Voltage 3 */
-#define LM80_VT4_HIGH_LIM 0x32 /* high limit val for Voltage 4 */
-#define LM80_VT4_LOW_LIM 0x33 /* low limit val for Voltage 4 */
-#define LM80_VT5_HIGH_LIM 0x34 /* high limit val for Voltage 5 */
-#define LM80_VT5_LOW_LIM 0x35 /* low limit val for Voltage 5 */
-#define LM80_VT6_HIGH_LIM 0x36 /* high limit val for Voltage 6 */
-#define LM80_VT6_LOW_LIM 0x37 /* low limit val for Voltage 6 */
-#define LM80_THOT_LIM_UP 0x38 /* hot temperature limit (high) */
-#define LM80_THOT_LIM_LO 0x39 /* hot temperature limit (low) */
-#define LM80_TOS_LIM_UP 0x3a /* OS temperature limit (high) */
-#define LM80_TOS_LIM_LO 0x3b /* OS temperature limit (low) */
-#define LM80_FAN1_COUNT_LIM 0x3c /* Fan 1 count limit (high) */
-#define LM80_FAN2_COUNT_LIM 0x3d /* Fan 2 count limit (low) */
- /* 0x3e - 0x3f reserved */
-
-/*
- * LM80 bit definitions
- */
-
-/* LM80_CFG Configuration Register */
-#define LM80_CFG_START (1<<0) /* start monitoring operation */
-#define LM80_CFG_INT_ENA (1<<1) /* enables the INT# Interrupt output */
-#define LM80_CFG_INT_POL (1<<2) /* INT# pol: 0 act low, 1 act high */
-#define LM80_CFG_INT_CLR (1<<3) /* disables INT#/RST_OUT#/OS# outputs */
-#define LM80_CFG_RESET (1<<4) /* signals a reset */
-#define LM80_CFG_CHASS_CLR (1<<5) /* clears Chassis Intrusion (CI) pin */
-#define LM80_CFG_GPO (1<<6) /* drives the GPO# pin */
-#define LM80_CFG_INIT (1<<7) /* restore power on defaults */
-
-/* LM80_ISRC_1 Interrupt Status Register 1 */
-/* LM80_IMSK_1 Interrupt Mask Register 1 */
-#define LM80_IS_VT0 (1<<0) /* limit exceeded for Voltage 0 */
-#define LM80_IS_VT1 (1<<1) /* limit exceeded for Voltage 1 */
-#define LM80_IS_VT2 (1<<2) /* limit exceeded for Voltage 2 */
-#define LM80_IS_VT3 (1<<3) /* limit exceeded for Voltage 3 */
-#define LM80_IS_VT4 (1<<4) /* limit exceeded for Voltage 4 */
-#define LM80_IS_VT5 (1<<5) /* limit exceeded for Voltage 5 */
-#define LM80_IS_VT6 (1<<6) /* limit exceeded for Voltage 6 */
-#define LM80_IS_INT_IN (1<<7) /* state of INT_IN# */
-
-/* LM80_ISRC_2 Interrupt Status Register 2 */
-/* LM80_IMSK_2 Interrupt Mask Register 2 */
-#define LM80_IS_TEMP (1<<0) /* HOT temperature limit exceeded */
-#define LM80_IS_BTI (1<<1) /* state of BTI# pin */
-#define LM80_IS_FAN1 (1<<2) /* count limit exceeded for Fan 1 */
-#define LM80_IS_FAN2 (1<<3) /* count limit exceeded for Fan 2 */
-#define LM80_IS_CI (1<<4) /* Chassis Intrusion occured */
-#define LM80_IS_OS (1<<5) /* OS temperature limit exceeded */
- /* bit 6 and 7 are reserved in LM80_ISRC_2 */
-#define LM80_IS_HT_IRQ_MD (1<<6) /* Hot temperature interrupt mode */
-#define LM80_IS_OT_IRQ_MD (1<<7) /* OS temperature interrupt mode */
-
-/* LM80_FAN_CTRL Fan Devisor/RST#/OS# Register */
-#define LM80_FAN1_MD_SEL (1<<0) /* Fan 1 mode select */
-#define LM80_FAN2_MD_SEL (1<<1) /* Fan 2 mode select */
-#define LM80_FAN1_PRM_CTL (3<<2) /* Fan 1 speed control */
-#define LM80_FAN2_PRM_CTL (3<<4) /* Fan 2 speed control */
-#define LM80_FAN_OS_ENA (1<<6) /* enable OS mode on RST_OUT#/OS# pins*/
-#define LM80_FAN_RST_ENA (1<<7) /* sets RST_OUT#/OS# pins in RST mode */
-
-/* LM80_TEMP_CTRL OS# Config, Temp Res. Reg */
-#define LM80_TEMP_OS_STAT (1<<0) /* mirrors the state of RST_OUT#/OS# */
-#define LM80_TEMP_OS_POL (1<<1) /* select OS# polarity */
-#define LM80_TEMP_OS_MODE (1<<2) /* selects Interrupt mode */
-#define LM80_TEMP_RES (1<<3) /* selects 9 or 11 bit temp resulution*/
-#define LM80_TEMP_LSB (0xf<<4)/* 4 LSBs of 11 bit temp data */
-#define LM80_TEMP_LSB_9 (1<<7) /* LSB of 9 bit temperature data */
-
- /* 0x07 - 0x1f reserved */
-/* LM80_VT0_IN current Voltage 0 value */
-/* LM80_VT1_IN current Voltage 1 value */
-/* LM80_VT2_IN current Voltage 2 value */
-/* LM80_VT3_IN current Voltage 3 value */
-/* LM80_VT4_IN current Voltage 4 value */
-/* LM80_VT5_IN current Voltage 5 value */
-/* LM80_VT6_IN current Voltage 6 value */
-/* LM80_TEMP_IN current temperature value */
-/* LM80_FAN1_IN current Fan 1 count */
-/* LM80_FAN2_IN current Fan 2 count */
-/* LM80_VT0_HIGH_LIM high limit val for Voltage 0 */
-/* LM80_VT0_LOW_LIM low limit val for Voltage 0 */
-/* LM80_VT1_HIGH_LIM high limit val for Voltage 1 */
-/* LM80_VT1_LOW_LIM low limit val for Voltage 1 */
-/* LM80_VT2_HIGH_LIM high limit val for Voltage 2 */
-/* LM80_VT2_LOW_LIM low limit val for Voltage 2 */
-/* LM80_VT3_HIGH_LIM high limit val for Voltage 3 */
-/* LM80_VT3_LOW_LIM low limit val for Voltage 3 */
-/* LM80_VT4_HIGH_LIM high limit val for Voltage 4 */
-/* LM80_VT4_LOW_LIM low limit val for Voltage 4 */
-/* LM80_VT5_HIGH_LIM high limit val for Voltage 5 */
-/* LM80_VT5_LOW_LIM low limit val for Voltage 5 */
-/* LM80_VT6_HIGH_LIM high limit val for Voltage 6 */
-/* LM80_VT6_LOW_LIM low limit val for Voltage 6 */
-/* LM80_THOT_LIM_UP hot temperature limit (high) */
-/* LM80_THOT_LIM_LO hot temperature limit (low) */
-/* LM80_TOS_LIM_UP OS temperature limit (high) */
-/* LM80_TOS_LIM_LO OS temperature limit (low) */
-/* LM80_FAN1_COUNT_LIM Fan 1 count limit (high) */
-/* LM80_FAN2_COUNT_LIM Fan 2 count limit (low) */
- /* 0x3e - 0x3f reserved */
-
-#define LM80_ADDR 0x28 /* LM80 default addr */
-
-/* typedefs *******************************************************************/
-
-
-/* function prototypes ********************************************************/
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __INC_LM80_H */
+/******************************************************************************
+ *
+ * Name: lm80.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Contains all defines for the LM80 Chip
+ * (National Semiconductor).
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ * $Log: lm80.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.4 2002/04/25 11:04:10 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.3 1999/11/22 13:41:19 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.2 1999/03/12 13:26:51 malthoff
+ * remove __STDC__.
+ *
+ * Revision 1.1 1998/06/19 09:28:31 malthoff
+ * created.
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_LM80_H
+#define __INC_LM80_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* defines ********************************************************************/
+
+/*
+ * LM80 register definition
+ *
+ * All registers are 8 bit wide
+ */
+#define LM80_CFG 0x00 /* Configuration Register */
+#define LM80_ISRC_1 0x01 /* Interrupt Status Register 1 */
+#define LM80_ISRC_2 0x02 /* Interrupt Status Register 2 */
+#define LM80_IMSK_1 0x03 /* Interrupt Mask Register 1 */
+#define LM80_IMSK_2 0x04 /* Interrupt Mask Register 2 */
+#define LM80_FAN_CTRL 0x05 /* Fan Devisor/RST#/OS# Register */
+#define LM80_TEMP_CTRL 0x06 /* OS# Config, Temp Res. Reg */
+ /* 0x07 - 0x1f reserved */
+ /* current values */
+#define LM80_VT0_IN 0x20 /* current Voltage 0 value */
+#define LM80_VT1_IN 0x21 /* current Voltage 1 value */
+#define LM80_VT2_IN 0x22 /* current Voltage 2 value */
+#define LM80_VT3_IN 0x23 /* current Voltage 3 value */
+#define LM80_VT4_IN 0x24 /* current Voltage 4 value */
+#define LM80_VT5_IN 0x25 /* current Voltage 5 value */
+#define LM80_VT6_IN 0x26 /* current Voltage 6 value */
+#define LM80_TEMP_IN 0x27 /* current Temperature value */
+#define LM80_FAN1_IN 0x28 /* current Fan 1 count */
+#define LM80_FAN2_IN 0x29 /* current Fan 2 count */
+ /* limit values */
+#define LM80_VT0_HIGH_LIM 0x2a /* high limit val for Voltage 0 */
+#define LM80_VT0_LOW_LIM 0x2b /* low limit val for Voltage 0 */
+#define LM80_VT1_HIGH_LIM 0x2c /* high limit val for Voltage 1 */
+#define LM80_VT1_LOW_LIM 0x2d /* low limit val for Voltage 1 */
+#define LM80_VT2_HIGH_LIM 0x2e /* high limit val for Voltage 2 */
+#define LM80_VT2_LOW_LIM 0x2f /* low limit val for Voltage 2 */
+#define LM80_VT3_HIGH_LIM 0x30 /* high limit val for Voltage 3 */
+#define LM80_VT3_LOW_LIM 0x31 /* low limit val for Voltage 3 */
+#define LM80_VT4_HIGH_LIM 0x32 /* high limit val for Voltage 4 */
+#define LM80_VT4_LOW_LIM 0x33 /* low limit val for Voltage 4 */
+#define LM80_VT5_HIGH_LIM 0x34 /* high limit val for Voltage 5 */
+#define LM80_VT5_LOW_LIM 0x35 /* low limit val for Voltage 5 */
+#define LM80_VT6_HIGH_LIM 0x36 /* high limit val for Voltage 6 */
+#define LM80_VT6_LOW_LIM 0x37 /* low limit val for Voltage 6 */
+#define LM80_THOT_LIM_UP 0x38 /* hot temperature limit (high) */
+#define LM80_THOT_LIM_LO 0x39 /* hot temperature limit (low) */
+#define LM80_TOS_LIM_UP 0x3a /* OS temperature limit (high) */
+#define LM80_TOS_LIM_LO 0x3b /* OS temperature limit (low) */
+#define LM80_FAN1_COUNT_LIM 0x3c /* Fan 1 count limit (high) */
+#define LM80_FAN2_COUNT_LIM 0x3d /* Fan 2 count limit (low) */
+ /* 0x3e - 0x3f reserved */
+
+/*
+ * LM80 bit definitions
+ */
+
+/* LM80_CFG Configuration Register */
+#define LM80_CFG_START (1<<0) /* start monitoring operation */
+#define LM80_CFG_INT_ENA (1<<1) /* enables the INT# Interrupt output */
+#define LM80_CFG_INT_POL (1<<2) /* INT# pol: 0 act low, 1 act high */
+#define LM80_CFG_INT_CLR (1<<3) /* disables INT#/RST_OUT#/OS# outputs */
+#define LM80_CFG_RESET (1<<4) /* signals a reset */
+#define LM80_CFG_CHASS_CLR (1<<5) /* clears Chassis Intrusion (CI) pin */
+#define LM80_CFG_GPO (1<<6) /* drives the GPO# pin */
+#define LM80_CFG_INIT (1<<7) /* restore power on defaults */
+
+/* LM80_ISRC_1 Interrupt Status Register 1 */
+/* LM80_IMSK_1 Interrupt Mask Register 1 */
+#define LM80_IS_VT0 (1<<0) /* limit exceeded for Voltage 0 */
+#define LM80_IS_VT1 (1<<1) /* limit exceeded for Voltage 1 */
+#define LM80_IS_VT2 (1<<2) /* limit exceeded for Voltage 2 */
+#define LM80_IS_VT3 (1<<3) /* limit exceeded for Voltage 3 */
+#define LM80_IS_VT4 (1<<4) /* limit exceeded for Voltage 4 */
+#define LM80_IS_VT5 (1<<5) /* limit exceeded for Voltage 5 */
+#define LM80_IS_VT6 (1<<6) /* limit exceeded for Voltage 6 */
+#define LM80_IS_INT_IN (1<<7) /* state of INT_IN# */
+
+/* LM80_ISRC_2 Interrupt Status Register 2 */
+/* LM80_IMSK_2 Interrupt Mask Register 2 */
+#define LM80_IS_TEMP (1<<0) /* HOT temperature limit exceeded */
+#define LM80_IS_BTI (1<<1) /* state of BTI# pin */
+#define LM80_IS_FAN1 (1<<2) /* count limit exceeded for Fan 1 */
+#define LM80_IS_FAN2 (1<<3) /* count limit exceeded for Fan 2 */
+#define LM80_IS_CI (1<<4) /* Chassis Intrusion occured */
+#define LM80_IS_OS (1<<5) /* OS temperature limit exceeded */
+ /* bit 6 and 7 are reserved in LM80_ISRC_2 */
+#define LM80_IS_HT_IRQ_MD (1<<6) /* Hot temperature interrupt mode */
+#define LM80_IS_OT_IRQ_MD (1<<7) /* OS temperature interrupt mode */
+
+/* LM80_FAN_CTRL Fan Devisor/RST#/OS# Register */
+#define LM80_FAN1_MD_SEL (1<<0) /* Fan 1 mode select */
+#define LM80_FAN2_MD_SEL (1<<1) /* Fan 2 mode select */
+#define LM80_FAN1_PRM_CTL (3<<2) /* Fan 1 speed control */
+#define LM80_FAN2_PRM_CTL (3<<4) /* Fan 2 speed control */
+#define LM80_FAN_OS_ENA (1<<6) /* enable OS mode on RST_OUT#/OS# pins*/
+#define LM80_FAN_RST_ENA (1<<7) /* sets RST_OUT#/OS# pins in RST mode */
+
+/* LM80_TEMP_CTRL OS# Config, Temp Res. Reg */
+#define LM80_TEMP_OS_STAT (1<<0) /* mirrors the state of RST_OUT#/OS# */
+#define LM80_TEMP_OS_POL (1<<1) /* select OS# polarity */
+#define LM80_TEMP_OS_MODE (1<<2) /* selects Interrupt mode */
+#define LM80_TEMP_RES (1<<3) /* selects 9 or 11 bit temp resulution*/
+#define LM80_TEMP_LSB (0xf<<4)/* 4 LSBs of 11 bit temp data */
+#define LM80_TEMP_LSB_9 (1<<7) /* LSB of 9 bit temperature data */
+
+ /* 0x07 - 0x1f reserved */
+/* LM80_VT0_IN current Voltage 0 value */
+/* LM80_VT1_IN current Voltage 1 value */
+/* LM80_VT2_IN current Voltage 2 value */
+/* LM80_VT3_IN current Voltage 3 value */
+/* LM80_VT4_IN current Voltage 4 value */
+/* LM80_VT5_IN current Voltage 5 value */
+/* LM80_VT6_IN current Voltage 6 value */
+/* LM80_TEMP_IN current temperature value */
+/* LM80_FAN1_IN current Fan 1 count */
+/* LM80_FAN2_IN current Fan 2 count */
+/* LM80_VT0_HIGH_LIM high limit val for Voltage 0 */
+/* LM80_VT0_LOW_LIM low limit val for Voltage 0 */
+/* LM80_VT1_HIGH_LIM high limit val for Voltage 1 */
+/* LM80_VT1_LOW_LIM low limit val for Voltage 1 */
+/* LM80_VT2_HIGH_LIM high limit val for Voltage 2 */
+/* LM80_VT2_LOW_LIM low limit val for Voltage 2 */
+/* LM80_VT3_HIGH_LIM high limit val for Voltage 3 */
+/* LM80_VT3_LOW_LIM low limit val for Voltage 3 */
+/* LM80_VT4_HIGH_LIM high limit val for Voltage 4 */
+/* LM80_VT4_LOW_LIM low limit val for Voltage 4 */
+/* LM80_VT5_HIGH_LIM high limit val for Voltage 5 */
+/* LM80_VT5_LOW_LIM low limit val for Voltage 5 */
+/* LM80_VT6_HIGH_LIM high limit val for Voltage 6 */
+/* LM80_VT6_LOW_LIM low limit val for Voltage 6 */
+/* LM80_THOT_LIM_UP hot temperature limit (high) */
+/* LM80_THOT_LIM_LO hot temperature limit (low) */
+/* LM80_TOS_LIM_UP OS temperature limit (high) */
+/* LM80_TOS_LIM_LO OS temperature limit (low) */
+/* LM80_FAN1_COUNT_LIM Fan 1 count limit (high) */
+/* LM80_FAN2_COUNT_LIM Fan 2 count limit (low) */
+ /* 0x3e - 0x3f reserved */
+
+#define LM80_ADDR 0x28 /* LM80 default addr */
+
+/* typedefs *******************************************************************/
+
+
+/* function prototypes ********************************************************/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __INC_LM80_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skaddr.h u-boot-2009.03/drivers/net/sk98lin/h/skaddr.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skaddr.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skaddr.h 2009-03-31 14:54:45.549799200 -0700
@@ -1,425 +1,428 @@
-/******************************************************************************
- *
- * Name: skaddr.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.26 $
- * Date: $Date: 2002/11/15 07:24:42 $
- * Purpose: Header file for Address Management (MC, UC, Prom).
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2001 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skaddr.h,v $
- * Revision 1.26 2002/11/15 07:24:42 tschilli
- * SK_ADDR_EQUAL macro fixed.
- *
- * Revision 1.25 2002/06/10 13:55:18 tschilli
- * Changes for handling YUKON.
- * All changes are internally and not visible to the programmer
- * using this module.
- *
- * Revision 1.24 2001/01/22 13:41:34 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.23 2000/08/10 11:27:50 rassmann
- * Editorial changes.
- * Preserving 32-bit alignment in structs for the adapter context.
- *
- * Revision 1.22 2000/08/07 11:10:40 rassmann
- * Editorial changes.
- *
- * Revision 1.21 2000/05/04 09:39:59 rassmann
- * Editorial changes.
- * Corrected multicast address hashing.
- *
- * Revision 1.20 1999/11/22 13:46:14 cgoos
- * Changed license header to GPL.
- * Allowing overwrite for SK_ADDR_EQUAL.
- *
- * Revision 1.19 1999/05/28 10:56:07 rassmann
- * Editorial changes.
- *
- * Revision 1.18 1999/04/06 17:22:04 rassmann
- * Added private "ActivePort".
- *
- * Revision 1.17 1999/01/14 16:18:19 rassmann
- * Corrected multicast initialization.
- *
- * Revision 1.16 1999/01/04 10:30:36 rassmann
- * SkAddrOverride only possible after SK_INIT_IO phase.
- *
- * Revision 1.15 1998/12/29 13:13:11 rassmann
- * An address override is now preserved in the SK_INIT_IO phase.
- * All functions return an int now.
- * Extended parameter checking.
- *
- * Revision 1.14 1998/11/24 12:39:45 rassmann
- * Reserved multicast entry for BPDU address.
- * 13 multicast entries left for protocol.
- *
- * Revision 1.13 1998/11/13 17:24:32 rassmann
- * Changed return value of SkAddrOverride to int.
- *
- * Revision 1.12 1998/11/13 16:56:19 rassmann
- * Added macro SK_ADDR_COMPARE.
- * Changed return type of SkAddrOverride to SK_BOOL.
- *
- * Revision 1.11 1998/10/28 18:16:35 rassmann
- * Avoiding I/Os before SK_INIT_RUN level.
- * Aligning InexactFilter.
- *
- * Revision 1.10 1998/10/22 11:39:10 rassmann
- * Corrected signed/unsigned mismatches.
- *
- * Revision 1.9 1998/10/15 15:15:49 rassmann
- * Changed Flags Parameters from SK_U8 to int.
- * Checked with lint.
- *
- * Revision 1.8 1998/09/24 19:15:12 rassmann
- * Code cleanup.
- *
- * Revision 1.7 1998/09/18 20:22:13 rassmann
- * Added HW access.
- *
- * Revision 1.6 1998/09/04 19:40:20 rassmann
- * Interface enhancements.
- *
- * Revision 1.5 1998/09/04 12:40:57 rassmann
- * Interface cleanup.
- *
- * Revision 1.4 1998/09/04 12:14:13 rassmann
- * Interface cleanup.
- *
- * Revision 1.3 1998/09/02 16:56:40 rassmann
- * Updated interface.
- *
- * Revision 1.2 1998/08/27 14:26:09 rassmann
- * Updated interface.
- *
- * Revision 1.1 1998/08/21 08:31:08 rassmann
- * First public version.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * This module is intended to manage multicast addresses and promiscuous mode
- * on GEnesis adapters.
- *
- * Include File Hierarchy:
- *
- * "skdrv1st.h"
- * ...
- * "sktypes.h"
- * "skqueue.h"
- * "skaddr.h"
- * ...
- * "skdrv2nd.h"
- *
- ******************************************************************************/
-
-#ifndef __INC_SKADDR_H
-#define __INC_SKADDR_H
-
-#ifdef __cplusplus
-#error C++ is not yet supported.
-extern "C" {
-#endif /* cplusplus */
-
-/* defines ********************************************************************/
-
-#define SK_MAC_ADDR_LEN 6 /* Length of MAC address. */
-#define SK_MAX_ADDRS 14 /* #Addrs for exact match. */
-
-/* ----- Common return values ----- */
-
-#define SK_ADDR_SUCCESS 0 /* Function returned successfully. */
-#define SK_ADDR_ILLEGAL_PORT 100 /* Port number too high. */
-#define SK_ADDR_TOO_EARLY 101 /* Function called too early. */
-
-/* ----- Clear/Add flag bits ----- */
-
-#define SK_ADDR_PERMANENT 1 /* RLMT Address */
-
-/* ----- Additional Clear flag bits ----- */
-
-#define SK_MC_SW_ONLY 2 /* Do not update HW when clearing. */
-
-/* ----- Override flag bits ----- */
-
-#define SK_ADDR_LOGICAL_ADDRESS 0
-#define SK_ADDR_VIRTUAL_ADDRESS (SK_ADDR_LOGICAL_ADDRESS) /* old */
-#define SK_ADDR_PHYSICAL_ADDRESS 1
-#define SK_ADDR_CLEAR_LOGICAL 2
-#define SK_ADDR_SET_LOGICAL 4
-
-/* ----- Override return values ----- */
-
-#define SK_ADDR_OVERRIDE_SUCCESS (SK_ADDR_SUCCESS)
-#define SK_ADDR_DUPLICATE_ADDRESS 1
-#define SK_ADDR_MULTICAST_ADDRESS 2
-
-/* ----- Partitioning of excact match table ----- */
-
-#define SK_ADDR_EXACT_MATCHES 16 /* #Exact match entries. */
-
-#define SK_ADDR_FIRST_MATCH_RLMT 1
-#define SK_ADDR_LAST_MATCH_RLMT 2
-#define SK_ADDR_FIRST_MATCH_DRV 3
-#define SK_ADDR_LAST_MATCH_DRV (SK_ADDR_EXACT_MATCHES - 1)
-
-/* ----- SkAddrMcAdd/SkAddrMcUpdate return values ----- */
-
-#define SK_MC_FILTERING_EXACT 0 /* Exact filtering. */
-#define SK_MC_FILTERING_INEXACT 1 /* Inexact filtering. */
-
-/* ----- Additional SkAddrMcAdd return values ----- */
-
-#define SK_MC_ILLEGAL_ADDRESS 2 /* Illegal address. */
-#define SK_MC_ILLEGAL_PORT 3 /* Illegal port (not the active one). */
-#define SK_MC_RLMT_OVERFLOW 4 /* Too many RLMT mc addresses. */
-
-/* Promiscuous mode bits ----- */
-
-#define SK_PROM_MODE_NONE 0 /* Normal receive. */
-#define SK_PROM_MODE_LLC 1 /* Receive all LLC frames. */
-#define SK_PROM_MODE_ALL_MC 2 /* Receive all multicast frames. */
-/* #define SK_PROM_MODE_NON_LLC 4 */ /* Receive all non-LLC frames. */
-
-/* Macros */
-
-#if 0
-#ifndef SK_ADDR_EQUAL
-/*
- * "&" instead of "&&" allows better optimization on IA-64.
- * The replacement is safe here, as all bytes exist.
- */
-#ifndef SK_ADDR_DWORD_COMPARE
-#define SK_ADDR_EQUAL(A1,A2) ( \
- (((SK_U8 *)(A1))[5] == ((SK_U8 *)(A2))[5]) & \
- (((SK_U8 *)(A1))[4] == ((SK_U8 *)(A2))[4]) & \
- (((SK_U8 *)(A1))[3] == ((SK_U8 *)(A2))[3]) & \
- (((SK_U8 *)(A1))[2] == ((SK_U8 *)(A2))[2]) & \
- (((SK_U8 *)(A1))[1] == ((SK_U8 *)(A2))[1]) & \
- (((SK_U8 *)(A1))[0] == ((SK_U8 *)(A2))[0]))
-#else /* SK_ADDR_DWORD_COMPARE */
-#define SK_ADDR_EQUAL(A1,A2) ( \
- (*(SK_U32 *)&(((SK_U8 *)(A1))[2]) == *(SK_U32 *)&(((SK_U8 *)(A2))[2])) & \
- (*(SK_U32 *)&(((SK_U8 *)(A1))[0]) == *(SK_U32 *)&(((SK_U8 *)(A2))[0])))
-#endif /* SK_ADDR_DWORD_COMPARE */
-#endif /* SK_ADDR_EQUAL */
-#endif /* 0 */
-
-#ifndef SK_ADDR_EQUAL
-#ifndef SK_ADDR_DWORD_COMPARE
-#define SK_ADDR_EQUAL(A1,A2) ( \
- (((SK_U8 *)(A1))[5] == ((SK_U8 *)(A2))[5]) & \
- (((SK_U8 *)(A1))[4] == ((SK_U8 *)(A2))[4]) & \
- (((SK_U8 *)(A1))[3] == ((SK_U8 *)(A2))[3]) & \
- (((SK_U8 *)(A1))[2] == ((SK_U8 *)(A2))[2]) & \
- (((SK_U8 *)(A1))[1] == ((SK_U8 *)(A2))[1]) & \
- (((SK_U8 *)(A1))[0] == ((SK_U8 *)(A2))[0]))
-#else /* SK_ADDR_DWORD_COMPARE */
-#define SK_ADDR_EQUAL(A1,A2) ( \
- (*(SK_U16 *)&(((SK_U8 *)(A1))[4]) == *(SK_U16 *)&(((SK_U8 *)(A2))[4])) && \
- (*(SK_U32 *)&(((SK_U8 *)(A1))[0]) == *(SK_U32 *)&(((SK_U8 *)(A2))[0])))
-#endif /* SK_ADDR_DWORD_COMPARE */
-#endif /* SK_ADDR_EQUAL */
-
-/* typedefs *******************************************************************/
-
-typedef struct s_MacAddr {
- SK_U8 a[SK_MAC_ADDR_LEN];
-} SK_MAC_ADDR;
-
-
-/* SK_FILTER is used to ensure alignment of the filter. */
-typedef union s_InexactFilter {
- SK_U8 Bytes[8];
- SK_U64 Val; /* Dummy entry for alignment only. */
-} SK_FILTER64;
-
-
-typedef struct s_AddrNet SK_ADDR_NET;
-
-
-typedef struct s_AddrPort {
-
-/* ----- Public part (read-only) ----- */
-
- SK_MAC_ADDR CurrentMacAddress; /* Current physical MAC Address. */
- SK_MAC_ADDR PermanentMacAddress; /* Permanent physical MAC Address. */
- int PromMode; /* Promiscuous Mode. */
-
-/* ----- Private part ----- */
-
- SK_MAC_ADDR PreviousMacAddress; /* Prev. phys. MAC Address. */
- SK_BOOL CurrentMacAddressSet; /* CurrentMacAddress is set. */
- SK_U8 Align01;
-
- SK_U32 FirstExactMatchRlmt;
- SK_U32 NextExactMatchRlmt;
- SK_U32 FirstExactMatchDrv;
- SK_U32 NextExactMatchDrv;
- SK_MAC_ADDR Exact[SK_ADDR_EXACT_MATCHES];
- SK_FILTER64 InexactFilter; /* For 64-bit hash register. */
- SK_FILTER64 InexactRlmtFilter; /* For 64-bit hash register. */
- SK_FILTER64 InexactDrvFilter; /* For 64-bit hash register. */
-} SK_ADDR_PORT;
-
-
-struct s_AddrNet {
-/* ----- Public part (read-only) ----- */
-
- SK_MAC_ADDR CurrentMacAddress; /* Logical MAC Address. */
- SK_MAC_ADDR PermanentMacAddress; /* Logical MAC Address. */
-
-/* ----- Private part ----- */
-
- SK_U32 ActivePort; /* View of module ADDR. */
- SK_BOOL CurrentMacAddressSet; /* CurrentMacAddress is set. */
- SK_U8 Align01;
- SK_U16 Align02;
-};
-
-
-typedef struct s_Addr {
-
-/* ----- Public part (read-only) ----- */
-
- SK_ADDR_NET Net[SK_MAX_NETS];
- SK_ADDR_PORT Port[SK_MAX_MACS];
-
-/* ----- Private part ----- */
-} SK_ADDR;
-
-/* function prototypes ********************************************************/
-
-#ifndef SK_KR_PROTO
-
-/* Functions provided by SkAddr */
-
-/* ANSI/C++ compliant function prototypes */
-
-extern int SkAddrInit(
- SK_AC *pAC,
- SK_IOC IoC,
- int Level);
-
-extern int SkAddrMcClear(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- int Flags);
-
-extern int SkAddrXmacMcClear(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- int Flags);
-
-extern int SkAddrGmacMcClear(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- int Flags);
-
-extern int SkAddrMcAdd(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- SK_MAC_ADDR *pMc,
- int Flags);
-
-extern int SkAddrXmacMcAdd(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- SK_MAC_ADDR *pMc,
- int Flags);
-
-extern int SkAddrGmacMcAdd(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- SK_MAC_ADDR *pMc,
- int Flags);
-
-extern int SkAddrMcUpdate(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber);
-
-extern int SkAddrXmacMcUpdate(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber);
-
-extern int SkAddrGmacMcUpdate(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber);
-
-extern int SkAddrOverride(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- SK_MAC_ADDR *pNewAddr,
- int Flags);
-
-extern int SkAddrPromiscuousChange(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- int NewPromMode);
-
-extern int SkAddrXmacPromiscuousChange(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- int NewPromMode);
-
-extern int SkAddrGmacPromiscuousChange(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 PortNumber,
- int NewPromMode);
-
-extern int SkAddrSwap(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 FromPortNumber,
- SK_U32 ToPortNumber);
-
-#else /* defined(SK_KR_PROTO)) */
-
-/* Non-ANSI/C++ compliant function prototypes */
-
-#error KR-style prototypes are not yet provided.
-
-#endif /* defined(SK_KR_PROTO)) */
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __INC_SKADDR_H */
+/******************************************************************************
+ *
+ * Name: skaddr.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Header file for Address Management (MC, UC, Prom).
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2001 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skaddr.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.26 2002/11/15 07:24:42 tschilli
+ * SK_ADDR_EQUAL macro fixed.
+ *
+ * Revision 1.25 2002/06/10 13:55:18 tschilli
+ * Changes for handling YUKON.
+ * All changes are internally and not visible to the programmer
+ * using this module.
+ *
+ * Revision 1.24 2001/01/22 13:41:34 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.23 2000/08/10 11:27:50 rassmann
+ * Editorial changes.
+ * Preserving 32-bit alignment in structs for the adapter context.
+ *
+ * Revision 1.22 2000/08/07 11:10:40 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.21 2000/05/04 09:39:59 rassmann
+ * Editorial changes.
+ * Corrected multicast address hashing.
+ *
+ * Revision 1.20 1999/11/22 13:46:14 cgoos
+ * Changed license header to GPL.
+ * Allowing overwrite for SK_ADDR_EQUAL.
+ *
+ * Revision 1.19 1999/05/28 10:56:07 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.18 1999/04/06 17:22:04 rassmann
+ * Added private "ActivePort".
+ *
+ * Revision 1.17 1999/01/14 16:18:19 rassmann
+ * Corrected multicast initialization.
+ *
+ * Revision 1.16 1999/01/04 10:30:36 rassmann
+ * SkAddrOverride only possible after SK_INIT_IO phase.
+ *
+ * Revision 1.15 1998/12/29 13:13:11 rassmann
+ * An address override is now preserved in the SK_INIT_IO phase.
+ * All functions return an int now.
+ * Extended parameter checking.
+ *
+ * Revision 1.14 1998/11/24 12:39:45 rassmann
+ * Reserved multicast entry for BPDU address.
+ * 13 multicast entries left for protocol.
+ *
+ * Revision 1.13 1998/11/13 17:24:32 rassmann
+ * Changed return value of SkAddrOverride to int.
+ *
+ * Revision 1.12 1998/11/13 16:56:19 rassmann
+ * Added macro SK_ADDR_COMPARE.
+ * Changed return type of SkAddrOverride to SK_BOOL.
+ *
+ * Revision 1.11 1998/10/28 18:16:35 rassmann
+ * Avoiding I/Os before SK_INIT_RUN level.
+ * Aligning InexactFilter.
+ *
+ * Revision 1.10 1998/10/22 11:39:10 rassmann
+ * Corrected signed/unsigned mismatches.
+ *
+ * Revision 1.9 1998/10/15 15:15:49 rassmann
+ * Changed Flags Parameters from SK_U8 to int.
+ * Checked with lint.
+ *
+ * Revision 1.8 1998/09/24 19:15:12 rassmann
+ * Code cleanup.
+ *
+ * Revision 1.7 1998/09/18 20:22:13 rassmann
+ * Added HW access.
+ *
+ * Revision 1.6 1998/09/04 19:40:20 rassmann
+ * Interface enhancements.
+ *
+ * Revision 1.5 1998/09/04 12:40:57 rassmann
+ * Interface cleanup.
+ *
+ * Revision 1.4 1998/09/04 12:14:13 rassmann
+ * Interface cleanup.
+ *
+ * Revision 1.3 1998/09/02 16:56:40 rassmann
+ * Updated interface.
+ *
+ * Revision 1.2 1998/08/27 14:26:09 rassmann
+ * Updated interface.
+ *
+ * Revision 1.1 1998/08/21 08:31:08 rassmann
+ * First public version.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This module is intended to manage multicast addresses and promiscuous mode
+ * on GEnesis adapters.
+ *
+ * Include File Hierarchy:
+ *
+ * "skdrv1st.h"
+ * ...
+ * "sktypes.h"
+ * "skqueue.h"
+ * "skaddr.h"
+ * ...
+ * "skdrv2nd.h"
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKADDR_H
+#define __INC_SKADDR_H
+
+#ifdef __cplusplus
+#error C++ is not yet supported.
+extern "C" {
+#endif /* cplusplus */
+
+/* defines ********************************************************************/
+
+#define SK_MAC_ADDR_LEN 6 /* Length of MAC address. */
+#define SK_MAX_ADDRS 14 /* #Addrs for exact match. */
+
+/* ----- Common return values ----- */
+
+#define SK_ADDR_SUCCESS 0 /* Function returned successfully. */
+#define SK_ADDR_ILLEGAL_PORT 100 /* Port number too high. */
+#define SK_ADDR_TOO_EARLY 101 /* Function called too early. */
+
+/* ----- Clear/Add flag bits ----- */
+
+#define SK_ADDR_PERMANENT 1 /* RLMT Address */
+
+/* ----- Additional Clear flag bits ----- */
+
+#define SK_MC_SW_ONLY 2 /* Do not update HW when clearing. */
+
+/* ----- Override flag bits ----- */
+
+#define SK_ADDR_LOGICAL_ADDRESS 0
+#define SK_ADDR_VIRTUAL_ADDRESS (SK_ADDR_LOGICAL_ADDRESS) /* old */
+#define SK_ADDR_PHYSICAL_ADDRESS 1
+#define SK_ADDR_CLEAR_LOGICAL 2
+#define SK_ADDR_SET_LOGICAL 4
+
+/* ----- Override return values ----- */
+
+#define SK_ADDR_OVERRIDE_SUCCESS (SK_ADDR_SUCCESS)
+#define SK_ADDR_DUPLICATE_ADDRESS 1
+#define SK_ADDR_MULTICAST_ADDRESS 2
+
+/* ----- Partitioning of excact match table ----- */
+
+#define SK_ADDR_EXACT_MATCHES 16 /* #Exact match entries. */
+
+#define SK_ADDR_FIRST_MATCH_RLMT 1
+#define SK_ADDR_LAST_MATCH_RLMT 2
+#define SK_ADDR_FIRST_MATCH_DRV 3
+#define SK_ADDR_LAST_MATCH_DRV (SK_ADDR_EXACT_MATCHES - 1)
+
+/* ----- SkAddrMcAdd/SkAddrMcUpdate return values ----- */
+
+#define SK_MC_FILTERING_EXACT 0 /* Exact filtering. */
+#define SK_MC_FILTERING_INEXACT 1 /* Inexact filtering. */
+
+/* ----- Additional SkAddrMcAdd return values ----- */
+
+#define SK_MC_ILLEGAL_ADDRESS 2 /* Illegal address. */
+#define SK_MC_ILLEGAL_PORT 3 /* Illegal port (not the active one). */
+#define SK_MC_RLMT_OVERFLOW 4 /* Too many RLMT mc addresses. */
+
+/* Promiscuous mode bits ----- */
+
+#define SK_PROM_MODE_NONE 0 /* Normal receive. */
+#define SK_PROM_MODE_LLC 1 /* Receive all LLC frames. */
+#define SK_PROM_MODE_ALL_MC 2 /* Receive all multicast frames. */
+/* #define SK_PROM_MODE_NON_LLC 4 */ /* Receive all non-LLC frames. */
+
+/* Macros */
+
+#if 0
+#ifndef SK_ADDR_EQUAL
+/*
+ * "&" instead of "&&" allows better optimization on IA-64.
+ * The replacement is safe here, as all bytes exist.
+ */
+#ifndef SK_ADDR_DWORD_COMPARE
+#define SK_ADDR_EQUAL(A1,A2) ( \
+ (((SK_U8 *)(A1))[5] == ((SK_U8 *)(A2))[5]) & \
+ (((SK_U8 *)(A1))[4] == ((SK_U8 *)(A2))[4]) & \
+ (((SK_U8 *)(A1))[3] == ((SK_U8 *)(A2))[3]) & \
+ (((SK_U8 *)(A1))[2] == ((SK_U8 *)(A2))[2]) & \
+ (((SK_U8 *)(A1))[1] == ((SK_U8 *)(A2))[1]) & \
+ (((SK_U8 *)(A1))[0] == ((SK_U8 *)(A2))[0]))
+#else /* SK_ADDR_DWORD_COMPARE */
+#define SK_ADDR_EQUAL(A1,A2) ( \
+ (*(SK_U32 *)&(((SK_U8 *)(A1))[2]) == *(SK_U32 *)&(((SK_U8 *)(A2))[2])) & \
+ (*(SK_U32 *)&(((SK_U8 *)(A1))[0]) == *(SK_U32 *)&(((SK_U8 *)(A2))[0])))
+#endif /* SK_ADDR_DWORD_COMPARE */
+#endif /* SK_ADDR_EQUAL */
+#endif /* 0 */
+
+#ifndef SK_ADDR_EQUAL
+#ifndef SK_ADDR_DWORD_COMPARE
+#define SK_ADDR_EQUAL(A1,A2) ( \
+ (((SK_U8 *)(A1))[5] == ((SK_U8 *)(A2))[5]) & \
+ (((SK_U8 *)(A1))[4] == ((SK_U8 *)(A2))[4]) & \
+ (((SK_U8 *)(A1))[3] == ((SK_U8 *)(A2))[3]) & \
+ (((SK_U8 *)(A1))[2] == ((SK_U8 *)(A2))[2]) & \
+ (((SK_U8 *)(A1))[1] == ((SK_U8 *)(A2))[1]) & \
+ (((SK_U8 *)(A1))[0] == ((SK_U8 *)(A2))[0]))
+#else /* SK_ADDR_DWORD_COMPARE */
+#define SK_ADDR_EQUAL(A1,A2) ( \
+ (*(SK_U16 *)&(((SK_U8 *)(A1))[4]) == *(SK_U16 *)&(((SK_U8 *)(A2))[4])) && \
+ (*(SK_U32 *)&(((SK_U8 *)(A1))[0]) == *(SK_U32 *)&(((SK_U8 *)(A2))[0])))
+#endif /* SK_ADDR_DWORD_COMPARE */
+#endif /* SK_ADDR_EQUAL */
+
+/* typedefs *******************************************************************/
+
+typedef struct s_MacAddr {
+ SK_U8 a[SK_MAC_ADDR_LEN];
+} SK_MAC_ADDR;
+
+
+/* SK_FILTER is used to ensure alignment of the filter. */
+typedef union s_InexactFilter {
+ SK_U8 Bytes[8];
+ SK_U64 Val; /* Dummy entry for alignment only. */
+} SK_FILTER64;
+
+
+typedef struct s_AddrNet SK_ADDR_NET;
+
+
+typedef struct s_AddrPort {
+
+/* ----- Public part (read-only) ----- */
+
+ SK_MAC_ADDR CurrentMacAddress; /* Current physical MAC Address. */
+ SK_MAC_ADDR PermanentMacAddress; /* Permanent physical MAC Address. */
+ int PromMode; /* Promiscuous Mode. */
+
+/* ----- Private part ----- */
+
+ SK_MAC_ADDR PreviousMacAddress; /* Prev. phys. MAC Address. */
+ SK_BOOL CurrentMacAddressSet; /* CurrentMacAddress is set. */
+ SK_U8 Align01;
+
+ SK_U32 FirstExactMatchRlmt;
+ SK_U32 NextExactMatchRlmt;
+ SK_U32 FirstExactMatchDrv;
+ SK_U32 NextExactMatchDrv;
+ SK_MAC_ADDR Exact[SK_ADDR_EXACT_MATCHES];
+ SK_FILTER64 InexactFilter; /* For 64-bit hash register. */
+ SK_FILTER64 InexactRlmtFilter; /* For 64-bit hash register. */
+ SK_FILTER64 InexactDrvFilter; /* For 64-bit hash register. */
+} SK_ADDR_PORT;
+
+
+struct s_AddrNet {
+/* ----- Public part (read-only) ----- */
+
+ SK_MAC_ADDR CurrentMacAddress; /* Logical MAC Address. */
+ SK_MAC_ADDR PermanentMacAddress; /* Logical MAC Address. */
+
+/* ----- Private part ----- */
+
+ SK_U32 ActivePort; /* View of module ADDR. */
+ SK_BOOL CurrentMacAddressSet; /* CurrentMacAddress is set. */
+ SK_U8 Align01;
+ SK_U16 Align02;
+};
+
+
+typedef struct s_Addr {
+
+/* ----- Public part (read-only) ----- */
+
+ SK_ADDR_NET Net[SK_MAX_NETS];
+ SK_ADDR_PORT Port[SK_MAX_MACS];
+
+/* ----- Private part ----- */
+} SK_ADDR;
+
+/* function prototypes ********************************************************/
+
+#ifndef SK_KR_PROTO
+
+/* Functions provided by SkAddr */
+
+/* ANSI/C++ compliant function prototypes */
+
+extern int SkAddrInit(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Level);
+
+extern int SkAddrMcClear(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ int Flags);
+
+extern int SkAddrXmacMcClear(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ int Flags);
+
+extern int SkAddrGmacMcClear(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ int Flags);
+
+extern int SkAddrMcAdd(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ SK_MAC_ADDR *pMc,
+ int Flags);
+
+extern int SkAddrXmacMcAdd(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ SK_MAC_ADDR *pMc,
+ int Flags);
+
+extern int SkAddrGmacMcAdd(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ SK_MAC_ADDR *pMc,
+ int Flags);
+
+extern int SkAddrMcUpdate(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber);
+
+extern int SkAddrXmacMcUpdate(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber);
+
+extern int SkAddrGmacMcUpdate(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber);
+
+extern int SkAddrOverride(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ SK_MAC_ADDR *pNewAddr,
+ int Flags);
+
+extern int SkAddrPromiscuousChange(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ int NewPromMode);
+
+extern int SkAddrXmacPromiscuousChange(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ int NewPromMode);
+
+extern int SkAddrGmacPromiscuousChange(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 PortNumber,
+ int NewPromMode);
+
+extern int SkAddrSwap(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 FromPortNumber,
+ SK_U32 ToPortNumber);
+
+#else /* defined(SK_KR_PROTO)) */
+
+/* Non-ANSI/C++ compliant function prototypes */
+
+#error KR-style prototypes are not yet provided.
+
+#endif /* defined(SK_KR_PROTO)) */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __INC_SKADDR_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skcsum.h u-boot-2009.03/drivers/net/sk98lin/h/skcsum.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skcsum.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skcsum.h 2009-03-31 14:54:45.596673600 -0700
@@ -1,261 +1,264 @@
-/******************************************************************************
- *
- * Name: skcsum.h
- * Project: GEnesis - SysKonnect SK-NET Gigabit Ethernet (SK-98xx)
- * Version: $Revision: 1.9 $
- * Date: $Date: 2001/02/06 11:21:39 $
- * Purpose: Store/verify Internet checksum in send/receive packets.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2001 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skcsum.h,v $
- * Revision 1.9 2001/02/06 11:21:39 rassmann
- * Editorial changes.
- *
- * Revision 1.8 2001/02/06 11:15:36 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.7 2000/06/29 13:17:05 rassmann
- * Corrected reception of a packet with UDP checksum == 0 (which means there
- * is no UDP checksum).
- *
- * Revision 1.6 2000/02/28 12:33:44 cgoos
- * Changed C++ style comments to C style.
- *
- * Revision 1.5 2000/02/21 12:10:05 cgoos
- * Fixed license comment.
- *
- * Revision 1.4 2000/02/21 11:08:37 cgoos
- * Merged changes back into common source.
- *
- * Revision 1.1 1999/07/26 14:47:49 mkarl
- * changed from common source to windows specific source
- * added return SKCS_STATUS_IP_CSUM_ERROR_UDP and
- * SKCS_STATUS_IP_CSUM_ERROR_TCP to pass the NidsTester
- * changes for Tx csum offload
- *
- * Revision 1.2 1998/09/04 12:16:34 mhaveman
- * Checked in for Stephan to allow compilation.
- * -Added definition SK_CSUM_EVENT_CLEAR_PROTO_STATS to clear statistic
- * -Added prototype for SkCsEvent()
- *
- * Revision 1.1 1998/09/01 15:36:53 swolf
- * initial revision
- *
- * 01-Sep-1998 sw Created.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * Public header file for the "GEnesis" common module "CSUM".
- *
- * "GEnesis" is an abbreviation of "Gigabit Ethernet Network System in Silicon"
- * and is the code name of this SysKonnect project.
- *
- * Compilation Options:
- *
- * SK_USE_CSUM - Define if CSUM is to be used. Otherwise, CSUM will be an
- * empty module.
- *
- * SKCS_OVERWRITE_PROTO - Define to overwrite the default protocol id
- * definitions. In this case, all SKCS_PROTO_xxx definitions must be made
- * external.
- *
- * SKCS_OVERWRITE_STATUS - Define to overwrite the default return status
- * definitions. In this case, all SKCS_STATUS_xxx definitions must be made
- * external.
- *
- * Include File Hierarchy:
- *
- * "h/skcsum.h"
- * "h/sktypes.h"
- * "h/skqueue.h"
- *
- ******************************************************************************/
-
-#ifndef __INC_SKCSUM_H
-#define __INC_SKCSUM_H
-
-#include "h/sktypes.h"
-#include "h/skqueue.h"
-
-/* defines ********************************************************************/
-
-/*
- * Define the default bit flags for 'SKCS_PACKET_INFO.ProtocolFlags' if no user
- * overwrite.
- */
-#ifndef SKCS_OVERWRITE_PROTO /* User overwrite? */
-#define SKCS_PROTO_IP 0x1 /* IP (Internet Protocol version 4) */
-#define SKCS_PROTO_TCP 0x2 /* TCP (Transmission Control Protocol) */
-#define SKCS_PROTO_UDP 0x4 /* UDP (User Datagram Protocol) */
-
-/* Indices for protocol statistics. */
-#define SKCS_PROTO_STATS_IP 0
-#define SKCS_PROTO_STATS_UDP 1
-#define SKCS_PROTO_STATS_TCP 2
-#define SKCS_NUM_PROTOCOLS 3 /* Number of supported protocols. */
-#endif /* !SKCS_OVERWRITE_PROTO */
-
-/*
- * Define the default SKCS_STATUS type and values if no user overwrite.
- *
- * SKCS_STATUS_UNKNOWN_IP_VERSION - Not an IP v4 frame.
- * SKCS_STATUS_IP_CSUM_ERROR - IP checksum error.
- * SKCS_STATUS_IP_CSUM_ERROR_TCP - IP checksum error in TCP frame.
- * SKCS_STATUS_IP_CSUM_ERROR_UDP - IP checksum error in UDP frame
- * SKCS_STATUS_IP_FRAGMENT - IP fragment (IP checksum ok).
- * SKCS_STATUS_IP_CSUM_OK - IP checksum ok (not a TCP or UDP frame).
- * SKCS_STATUS_TCP_CSUM_ERROR - TCP checksum error (IP checksum ok).
- * SKCS_STATUS_UDP_CSUM_ERROR - UDP checksum error (IP checksum ok).
- * SKCS_STATUS_TCP_CSUM_OK - IP and TCP checksum ok.
- * SKCS_STATUS_UDP_CSUM_OK - IP and UDP checksum ok.
- * SKCS_STATUS_IP_CSUM_OK_NO_UDP - IP checksum OK and no UDP checksum.
- */
-#ifndef SKCS_OVERWRITE_STATUS /* User overwrite? */
-#define SKCS_STATUS int /* Define status type. */
-
-#define SKCS_STATUS_UNKNOWN_IP_VERSION 1
-#define SKCS_STATUS_IP_CSUM_ERROR 2
-#define SKCS_STATUS_IP_FRAGMENT 3
-#define SKCS_STATUS_IP_CSUM_OK 4
-#define SKCS_STATUS_TCP_CSUM_ERROR 5
-#define SKCS_STATUS_UDP_CSUM_ERROR 6
-#define SKCS_STATUS_TCP_CSUM_OK 7
-#define SKCS_STATUS_UDP_CSUM_OK 8
-/* needed for Microsoft */
-#define SKCS_STATUS_IP_CSUM_ERROR_UDP 9
-#define SKCS_STATUS_IP_CSUM_ERROR_TCP 10
-/* UDP checksum may be omitted */
-#define SKCS_STATUS_IP_CSUM_OK_NO_UDP 11
-#endif /* !SKCS_OVERWRITE_STATUS */
-
-/* Clear protocol statistics event. */
-#define SK_CSUM_EVENT_CLEAR_PROTO_STATS 1
-
-/*
- * Add two values in one's complement.
- *
- * Note: One of the two input values may be "longer" than 16-bit, but then the
- * resulting sum may be 17 bits long. In this case, add zero to the result using
- * SKCS_OC_ADD() again.
- *
- * Result = Value1 + Value2
- */
-#define SKCS_OC_ADD(Result, Value1, Value2) { \
- unsigned long Sum; \
- \
- Sum = (unsigned long) (Value1) + (unsigned long) (Value2); \
- /* Add-in any carry. */ \
- (Result) = (Sum & 0xffff) + (Sum >> 16); \
-}
-
-/*
- * Subtract two values in one's complement.
- *
- * Result = Value1 - Value2
- */
-#define SKCS_OC_SUB(Result, Value1, Value2) \
- SKCS_OC_ADD((Result), (Value1), ~(Value2) & 0xffff)
-
-/* typedefs *******************************************************************/
-
-/*
- * SKCS_PROTO_STATS - The CSUM protocol statistics structure.
- *
- * There is one instance of this structure for each protocol supported.
- */
-typedef struct s_CsProtocolStatistics {
- SK_U64 RxOkCts; /* Receive checksum ok. */
- SK_U64 RxUnableCts; /* Unable to verify receive checksum. */
- SK_U64 RxErrCts; /* Receive checksum error. */
- SK_U64 TxOkCts; /* Transmit checksum ok. */
- SK_U64 TxUnableCts; /* Unable to calculate checksum in hw. */
-} SKCS_PROTO_STATS;
-
-/*
- * s_Csum - The CSUM module context structure.
- */
-typedef struct s_Csum {
- /* Enabled receive SK_PROTO_XXX bit flags. */
- unsigned ReceiveFlags[SK_MAX_NETS];
-#ifdef TX_CSUM
- unsigned TransmitFlags[SK_MAX_NETS];
-#endif /* TX_CSUM */
-
- /* The protocol statistics structure; one per supported protocol. */
- SKCS_PROTO_STATS ProtoStats[SK_MAX_NETS][SKCS_NUM_PROTOCOLS];
-} SK_CSUM;
-
-/*
- * SKCS_PACKET_INFO - The packet information structure.
- */
-typedef struct s_CsPacketInfo {
- /* Bit field specifiying the desired/found protocols. */
- unsigned ProtocolFlags;
-
- /* Length of complete IP header, including any option fields. */
- unsigned IpHeaderLength;
-
- /* IP header checksum. */
- unsigned IpHeaderChecksum;
-
- /* TCP/UDP pseudo header checksum. */
- unsigned PseudoHeaderChecksum;
-} SKCS_PACKET_INFO;
-
-/* function prototypes ********************************************************/
-
-#ifndef SkCsCalculateChecksum
-extern unsigned SkCsCalculateChecksum(
- void *pData,
- unsigned Length);
-#endif
-
-extern int SkCsEvent(
- SK_AC *pAc,
- SK_IOC Ioc,
- SK_U32 Event,
- SK_EVPARA Param);
-
-extern SKCS_STATUS SkCsGetReceiveInfo(
- SK_AC *pAc,
- void *pIpHeader,
- unsigned Checksum1,
- unsigned Checksum2,
- int NetNumber);
-
-extern void SkCsGetSendInfo(
- SK_AC *pAc,
- void *pIpHeader,
- SKCS_PACKET_INFO *pPacketInfo,
- int NetNumber);
-
-extern void SkCsSetReceiveFlags(
- SK_AC *pAc,
- unsigned ReceiveFlags,
- unsigned *pChecksum1Offset,
- unsigned *pChecksum2Offset,
- int NetNumber);
-
-#endif /* __INC_SKCSUM_H */
+/******************************************************************************
+ *
+ * Name: skcsum.h
+ * Project: GEnesis - SysKonnect SK-NET Gigabit Ethernet (SK-98xx)
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Store/verify Internet checksum in send/receive packets.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2001 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skcsum.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.9 2001/02/06 11:21:39 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.8 2001/02/06 11:15:36 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.7 2000/06/29 13:17:05 rassmann
+ * Corrected reception of a packet with UDP checksum == 0 (which means there
+ * is no UDP checksum).
+ *
+ * Revision 1.6 2000/02/28 12:33:44 cgoos
+ * Changed C++ style comments to C style.
+ *
+ * Revision 1.5 2000/02/21 12:10:05 cgoos
+ * Fixed license comment.
+ *
+ * Revision 1.4 2000/02/21 11:08:37 cgoos
+ * Merged changes back into common source.
+ *
+ * Revision 1.1 1999/07/26 14:47:49 mkarl
+ * changed from common source to windows specific source
+ * added return SKCS_STATUS_IP_CSUM_ERROR_UDP and
+ * SKCS_STATUS_IP_CSUM_ERROR_TCP to pass the NidsTester
+ * changes for Tx csum offload
+ *
+ * Revision 1.2 1998/09/04 12:16:34 mhaveman
+ * Checked in for Stephan to allow compilation.
+ * -Added definition SK_CSUM_EVENT_CLEAR_PROTO_STATS to clear statistic
+ * -Added prototype for SkCsEvent()
+ *
+ * Revision 1.1 1998/09/01 15:36:53 swolf
+ * initial revision
+ *
+ * 01-Sep-1998 sw Created.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * Public header file for the "GEnesis" common module "CSUM".
+ *
+ * "GEnesis" is an abbreviation of "Gigabit Ethernet Network System in Silicon"
+ * and is the code name of this SysKonnect project.
+ *
+ * Compilation Options:
+ *
+ * SK_USE_CSUM - Define if CSUM is to be used. Otherwise, CSUM will be an
+ * empty module.
+ *
+ * SKCS_OVERWRITE_PROTO - Define to overwrite the default protocol id
+ * definitions. In this case, all SKCS_PROTO_xxx definitions must be made
+ * external.
+ *
+ * SKCS_OVERWRITE_STATUS - Define to overwrite the default return status
+ * definitions. In this case, all SKCS_STATUS_xxx definitions must be made
+ * external.
+ *
+ * Include File Hierarchy:
+ *
+ * "h/skcsum.h"
+ * "h/sktypes.h"
+ * "h/skqueue.h"
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKCSUM_H
+#define __INC_SKCSUM_H
+
+#include "h/sktypes.h"
+#include "h/skqueue.h"
+
+/* defines ********************************************************************/
+
+/*
+ * Define the default bit flags for 'SKCS_PACKET_INFO.ProtocolFlags' if no user
+ * overwrite.
+ */
+#ifndef SKCS_OVERWRITE_PROTO /* User overwrite? */
+#define SKCS_PROTO_IP 0x1 /* IP (Internet Protocol version 4) */
+#define SKCS_PROTO_TCP 0x2 /* TCP (Transmission Control Protocol) */
+#define SKCS_PROTO_UDP 0x4 /* UDP (User Datagram Protocol) */
+
+/* Indices for protocol statistics. */
+#define SKCS_PROTO_STATS_IP 0
+#define SKCS_PROTO_STATS_UDP 1
+#define SKCS_PROTO_STATS_TCP 2
+#define SKCS_NUM_PROTOCOLS 3 /* Number of supported protocols. */
+#endif /* !SKCS_OVERWRITE_PROTO */
+
+/*
+ * Define the default SKCS_STATUS type and values if no user overwrite.
+ *
+ * SKCS_STATUS_UNKNOWN_IP_VERSION - Not an IP v4 frame.
+ * SKCS_STATUS_IP_CSUM_ERROR - IP checksum error.
+ * SKCS_STATUS_IP_CSUM_ERROR_TCP - IP checksum error in TCP frame.
+ * SKCS_STATUS_IP_CSUM_ERROR_UDP - IP checksum error in UDP frame
+ * SKCS_STATUS_IP_FRAGMENT - IP fragment (IP checksum ok).
+ * SKCS_STATUS_IP_CSUM_OK - IP checksum ok (not a TCP or UDP frame).
+ * SKCS_STATUS_TCP_CSUM_ERROR - TCP checksum error (IP checksum ok).
+ * SKCS_STATUS_UDP_CSUM_ERROR - UDP checksum error (IP checksum ok).
+ * SKCS_STATUS_TCP_CSUM_OK - IP and TCP checksum ok.
+ * SKCS_STATUS_UDP_CSUM_OK - IP and UDP checksum ok.
+ * SKCS_STATUS_IP_CSUM_OK_NO_UDP - IP checksum OK and no UDP checksum.
+ */
+#ifndef SKCS_OVERWRITE_STATUS /* User overwrite? */
+#define SKCS_STATUS int /* Define status type. */
+
+#define SKCS_STATUS_UNKNOWN_IP_VERSION 1
+#define SKCS_STATUS_IP_CSUM_ERROR 2
+#define SKCS_STATUS_IP_FRAGMENT 3
+#define SKCS_STATUS_IP_CSUM_OK 4
+#define SKCS_STATUS_TCP_CSUM_ERROR 5
+#define SKCS_STATUS_UDP_CSUM_ERROR 6
+#define SKCS_STATUS_TCP_CSUM_OK 7
+#define SKCS_STATUS_UDP_CSUM_OK 8
+/* needed for Microsoft */
+#define SKCS_STATUS_IP_CSUM_ERROR_UDP 9
+#define SKCS_STATUS_IP_CSUM_ERROR_TCP 10
+/* UDP checksum may be omitted */
+#define SKCS_STATUS_IP_CSUM_OK_NO_UDP 11
+#endif /* !SKCS_OVERWRITE_STATUS */
+
+/* Clear protocol statistics event. */
+#define SK_CSUM_EVENT_CLEAR_PROTO_STATS 1
+
+/*
+ * Add two values in one's complement.
+ *
+ * Note: One of the two input values may be "longer" than 16-bit, but then the
+ * resulting sum may be 17 bits long. In this case, add zero to the result using
+ * SKCS_OC_ADD() again.
+ *
+ * Result = Value1 + Value2
+ */
+#define SKCS_OC_ADD(Result, Value1, Value2) { \
+ unsigned long Sum; \
+ \
+ Sum = (unsigned long) (Value1) + (unsigned long) (Value2); \
+ /* Add-in any carry. */ \
+ (Result) = (Sum & 0xffff) + (Sum >> 16); \
+}
+
+/*
+ * Subtract two values in one's complement.
+ *
+ * Result = Value1 - Value2
+ */
+#define SKCS_OC_SUB(Result, Value1, Value2) \
+ SKCS_OC_ADD((Result), (Value1), ~(Value2) & 0xffff)
+
+/* typedefs *******************************************************************/
+
+/*
+ * SKCS_PROTO_STATS - The CSUM protocol statistics structure.
+ *
+ * There is one instance of this structure for each protocol supported.
+ */
+typedef struct s_CsProtocolStatistics {
+ SK_U64 RxOkCts; /* Receive checksum ok. */
+ SK_U64 RxUnableCts; /* Unable to verify receive checksum. */
+ SK_U64 RxErrCts; /* Receive checksum error. */
+ SK_U64 TxOkCts; /* Transmit checksum ok. */
+ SK_U64 TxUnableCts; /* Unable to calculate checksum in hw. */
+} SKCS_PROTO_STATS;
+
+/*
+ * s_Csum - The CSUM module context structure.
+ */
+typedef struct s_Csum {
+ /* Enabled receive SK_PROTO_XXX bit flags. */
+ unsigned ReceiveFlags[SK_MAX_NETS];
+#ifdef TX_CSUM
+ unsigned TransmitFlags[SK_MAX_NETS];
+#endif /* TX_CSUM */
+
+ /* The protocol statistics structure; one per supported protocol. */
+ SKCS_PROTO_STATS ProtoStats[SK_MAX_NETS][SKCS_NUM_PROTOCOLS];
+} SK_CSUM;
+
+/*
+ * SKCS_PACKET_INFO - The packet information structure.
+ */
+typedef struct s_CsPacketInfo {
+ /* Bit field specifiying the desired/found protocols. */
+ unsigned ProtocolFlags;
+
+ /* Length of complete IP header, including any option fields. */
+ unsigned IpHeaderLength;
+
+ /* IP header checksum. */
+ unsigned IpHeaderChecksum;
+
+ /* TCP/UDP pseudo header checksum. */
+ unsigned PseudoHeaderChecksum;
+} SKCS_PACKET_INFO;
+
+/* function prototypes ********************************************************/
+
+#ifndef SkCsCalculateChecksum
+extern unsigned SkCsCalculateChecksum(
+ void *pData,
+ unsigned Length);
+#endif
+
+extern int SkCsEvent(
+ SK_AC *pAc,
+ SK_IOC Ioc,
+ SK_U32 Event,
+ SK_EVPARA Param);
+
+extern SKCS_STATUS SkCsGetReceiveInfo(
+ SK_AC *pAc,
+ void *pIpHeader,
+ unsigned Checksum1,
+ unsigned Checksum2,
+ int NetNumber);
+
+extern void SkCsGetSendInfo(
+ SK_AC *pAc,
+ void *pIpHeader,
+ SKCS_PACKET_INFO *pPacketInfo,
+ int NetNumber);
+
+extern void SkCsSetReceiveFlags(
+ SK_AC *pAc,
+ unsigned ReceiveFlags,
+ unsigned *pChecksum1Offset,
+ unsigned *pChecksum2Offset,
+ int NetNumber);
+
+#endif /* __INC_SKCSUM_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skdebug.h u-boot-2009.03/drivers/net/sk98lin/h/skdebug.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skdebug.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skdebug.h 2009-03-31 14:54:45.627923200 -0700
@@ -1,119 +1,122 @@
-/******************************************************************************
- *
- * Name: skdebug.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.12 $
- * Date: $Date: 2002/07/15 15:37:13 $
- * Purpose: SK specific DEBUG support
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- * $Log: skdebug.h,v $
- * Revision 1.12 2002/07/15 15:37:13 rschmidt
- * Power Management support
- * Editorial changes
- *
- * Revision 1.11 2002/04/25 11:04:39 rschmidt
- * Editorial changes
- *
- * Revision 1.10 1999/11/22 13:47:40 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.9 1999/09/14 14:02:43 rwahl
- * Added SK_DBGMOD_PECP.
- *
- * Revision 1.8 1998/11/25 08:31:54 gklug
- * fix: no C++ comments allowed in common sources
- *
- * Revision 1.7 1998/11/24 16:47:24 swolf
- * Driver may now define its own SK_DBG_MSG() (eg. in "h/skdrv1st.h").
- *
- * Revision 1.6 1998/10/28 10:23:55 rassmann
- * ADDED SK_DBGMOD_ADDR.
- *
- * Revision 1.5 1998/10/22 09:43:55 gklug
- * add: CSUM module
- *
- * Revision 1.4 1998/10/01 07:54:44 gklug
- * add: PNMI debug module
- *
- * Revision 1.3 1998/09/18 08:32:34 afischer
- * Macros changed according ssr-spec.:
- * SK_DBG_MODCHK -> SK_DBG_CHKMOD
- * SK_DBG_CATCHK -> SK_DBG_CHKCAT
- *
- * Revision 1.2 1998/07/03 14:38:25 malthoff
- * Add category SK_DBGCAT_FATAL.
- *
- * Revision 1.1 1998/06/19 13:39:01 malthoff
- * created.
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_SKDEBUG_H
-#define __INC_SKDEBUG_H
-
-#ifdef DEBUG
-#ifndef SK_DBG_MSG
-#define SK_DBG_MSG(pAC,comp,cat,arg) \
- if ( ((comp) & SK_DBG_CHKMOD(pAC)) && \
- ((cat) & SK_DBG_CHKCAT(pAC)) ) { \
- SK_DBG_PRINTF arg ; \
- }
-#endif
-#else
-#define SK_DBG_MSG(pAC,comp,lev,arg)
-#endif
-
-/* PLS NOTE:
- * =========
- * Due to any restrictions of kernel printf routines do not use other
- * format identifiers as: %x %d %c %s .
- * Never use any combined format identifiers such as: %lx %ld in your
- * printf - argument (arg) because some OS specific kernel printfs may
- * only support some basic identifiers.
- */
-
-/* Debug modules */
-
-#define SK_DBGMOD_MERR 0x00000001L /* general module error indication */
-#define SK_DBGMOD_HWM 0x00000002L /* Hardware init module */
-#define SK_DBGMOD_RLMT 0x00000004L /* RLMT module */
-#define SK_DBGMOD_VPD 0x00000008L /* VPD module */
-#define SK_DBGMOD_I2C 0x00000010L /* I2C module */
-#define SK_DBGMOD_PNMI 0x00000020L /* PNMI module */
-#define SK_DBGMOD_CSUM 0x00000040L /* CSUM module */
-#define SK_DBGMOD_ADDR 0x00000080L /* ADDR module */
-#define SK_DBGMOD_PECP 0x00000100L /* PECP module */
-#define SK_DBGMOD_POWM 0x00000200L /* Power Management module */
-
-/* Debug events */
-
-#define SK_DBGCAT_INIT 0x00000001L /* module/driver initialization */
-#define SK_DBGCAT_CTRL 0x00000002L /* controlling devices */
-#define SK_DBGCAT_ERR 0x00000004L /* error handling paths */
-#define SK_DBGCAT_TX 0x00000008L /* transmit path */
-#define SK_DBGCAT_RX 0x00000010L /* receive path */
-#define SK_DBGCAT_IRQ 0x00000020L /* general IRQ handling */
-#define SK_DBGCAT_QUEUE 0x00000040L /* any queue management */
-#define SK_DBGCAT_DUMP 0x00000080L /* large data output e.g. hex dump */
-#define SK_DBGCAT_FATAL 0x00000100L /* fatal error */
-
-#endif /* __INC_SKDEBUG_H */
+/******************************************************************************
+ *
+ * Name: skdebug.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: SK specific DEBUG support
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ * $Log: skdebug.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.12 2002/07/15 15:37:13 rschmidt
+ * Power Management support
+ * Editorial changes
+ *
+ * Revision 1.11 2002/04/25 11:04:39 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.10 1999/11/22 13:47:40 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.9 1999/09/14 14:02:43 rwahl
+ * Added SK_DBGMOD_PECP.
+ *
+ * Revision 1.8 1998/11/25 08:31:54 gklug
+ * fix: no C++ comments allowed in common sources
+ *
+ * Revision 1.7 1998/11/24 16:47:24 swolf
+ * Driver may now define its own SK_DBG_MSG() (eg. in "h/skdrv1st.h").
+ *
+ * Revision 1.6 1998/10/28 10:23:55 rassmann
+ * ADDED SK_DBGMOD_ADDR.
+ *
+ * Revision 1.5 1998/10/22 09:43:55 gklug
+ * add: CSUM module
+ *
+ * Revision 1.4 1998/10/01 07:54:44 gklug
+ * add: PNMI debug module
+ *
+ * Revision 1.3 1998/09/18 08:32:34 afischer
+ * Macros changed according ssr-spec.:
+ * SK_DBG_MODCHK -> SK_DBG_CHKMOD
+ * SK_DBG_CATCHK -> SK_DBG_CHKCAT
+ *
+ * Revision 1.2 1998/07/03 14:38:25 malthoff
+ * Add category SK_DBGCAT_FATAL.
+ *
+ * Revision 1.1 1998/06/19 13:39:01 malthoff
+ * created.
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKDEBUG_H
+#define __INC_SKDEBUG_H
+
+#ifdef DEBUG
+#ifndef SK_DBG_MSG
+#define SK_DBG_MSG(pAC,comp,cat,arg) \
+ if ( ((comp) & SK_DBG_CHKMOD(pAC)) && \
+ ((cat) & SK_DBG_CHKCAT(pAC)) ) { \
+ SK_DBG_PRINTF arg ; \
+ }
+#endif
+#else
+#define SK_DBG_MSG(pAC,comp,lev,arg)
+#endif
+
+/* PLS NOTE:
+ * =========
+ * Due to any restrictions of kernel printf routines do not use other
+ * format identifiers as: %x %d %c %s .
+ * Never use any combined format identifiers such as: %lx %ld in your
+ * printf - argument (arg) because some OS specific kernel printfs may
+ * only support some basic identifiers.
+ */
+
+/* Debug modules */
+
+#define SK_DBGMOD_MERR 0x00000001L /* general module error indication */
+#define SK_DBGMOD_HWM 0x00000002L /* Hardware init module */
+#define SK_DBGMOD_RLMT 0x00000004L /* RLMT module */
+#define SK_DBGMOD_VPD 0x00000008L /* VPD module */
+#define SK_DBGMOD_I2C 0x00000010L /* I2C module */
+#define SK_DBGMOD_PNMI 0x00000020L /* PNMI module */
+#define SK_DBGMOD_CSUM 0x00000040L /* CSUM module */
+#define SK_DBGMOD_ADDR 0x00000080L /* ADDR module */
+#define SK_DBGMOD_PECP 0x00000100L /* PECP module */
+#define SK_DBGMOD_POWM 0x00000200L /* Power Management module */
+
+/* Debug events */
+
+#define SK_DBGCAT_INIT 0x00000001L /* module/driver initialization */
+#define SK_DBGCAT_CTRL 0x00000002L /* controlling devices */
+#define SK_DBGCAT_ERR 0x00000004L /* error handling paths */
+#define SK_DBGCAT_TX 0x00000008L /* transmit path */
+#define SK_DBGCAT_RX 0x00000010L /* receive path */
+#define SK_DBGCAT_IRQ 0x00000020L /* general IRQ handling */
+#define SK_DBGCAT_QUEUE 0x00000040L /* any queue management */
+#define SK_DBGCAT_DUMP 0x00000080L /* large data output e.g. hex dump */
+#define SK_DBGCAT_FATAL 0x00000100L /* fatal error */
+
+#endif /* __INC_SKDEBUG_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skdrv1st.h u-boot-2009.03/drivers/net/sk98lin/h/skdrv1st.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skdrv1st.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skdrv1st.h 2009-03-31 14:54:45.659172800 -0700
@@ -1,264 +1,267 @@
-/******************************************************************************
- *
- * Name: skdrv1st.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.11 $
- * Date: $Date: 2003/02/25 14:16:40 $
- * Purpose: First header file for driver and all other modules
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skdrv1st.h,v $
- * Revision 1.11 2003/02/25 14:16:40 mlindner
- * Fix: Copyright statement
- *
- * Revision 1.10 2002/10/02 12:46:02 mlindner
- * Add: Support for Yukon
- *
- * Revision 1.9.2.2 2001/12/07 12:06:42 mlindner
- * Fix: malloc -> slab changes
- *
- * Revision 1.9.2.1 2001/03/12 16:50:59 mlindner
- * chg: kernel 2.4 adaption
- *
- * Revision 1.9 2001/01/22 14:16:04 mlindner
- * added ProcFs functionality
- * Dual Net functionality integrated
- * Rlmt networks added
- *
- * Revision 1.8 2000/02/21 12:19:18 cgoos
- * Added default for SK_DEBUG_CHKMOD/_CHKCAT
- *
- * Revision 1.7 1999/11/22 13:50:00 cgoos
- * Changed license header to GPL.
- * Added overwrite for several functions.
- * Removed linux 2.0.x definitions.
- * Removed PCI vendor ID definition (now in kernel).
- *
- * Revision 1.6 1999/07/27 08:03:33 cgoos
- * Changed SK_IN/OUT macros to readX/writeX instead of memory
- * accesses (necessary for ALPHA).
- *
- * Revision 1.5 1999/07/23 12:10:21 cgoos
- * Removed SK_RLMT_SLOW_LOOKAHEAD define.
- *
- * Revision 1.4 1999/07/14 12:31:13 cgoos
- * Added SK_RLMT_SLOW_LOOKAHEAD define.
- *
- * Revision 1.3 1999/04/07 10:12:54 cgoos
- * Added check for KERNEL and OPTIMIZATION defines.
- *
- * Revision 1.2 1999/03/01 08:51:47 cgoos
- * Fixed pcibios_read/write definitions.
- *
- * Revision 1.1 1999/02/16 07:40:49 cgoos
- * First version.
- *
- *
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * This is the first include file of the driver, which includes all
- * neccessary system header files and some of the GEnesis header files.
- * It also defines some basic items.
- *
- * Include File Hierarchy:
- *
- * see skge.c
- *
- ******************************************************************************/
-
-#ifndef __INC_SKDRV1ST_H
-#define __INC_SKDRV1ST_H
-
-#if 0
-/* Check kernel version */
-#include <linux/version.h>
-#if (LINUX_VERSION_CODE > 0x020300)
-#endif
-#endif
-
-typedef struct s_AC SK_AC;
-
-/* override some default functions with optimized linux functions */
-
-#define SK_PNMI_STORE_U16(p,v) memcpy((char*)(p),(char*)&(v),2)
-#define SK_PNMI_STORE_U32(p,v) memcpy((char*)(p),(char*)&(v),4)
-#define SK_PNMI_STORE_U64(p,v) memcpy((char*)(p),(char*)&(v),8)
-#define SK_PNMI_READ_U16(p,v) memcpy((char*)&(v),(char*)(p),2)
-#define SK_PNMI_READ_U32(p,v) memcpy((char*)&(v),(char*)(p),2)
-#define SK_PNMI_READ_U64(p,v) memcpy((char*)&(v),(char*)(p),2)
-
-#define SkCsCalculateChecksum(p,l) ((~ip_compute_csum(p, l)) & 0xffff)
-
-#define SK_ADDR_EQUAL(a1,a2) (!memcmp(a1,a2,6))
-
-
-#if !defined(__OPTIMIZE__) || !defined(__KERNEL__)
-#warning You must compile this file with the correct options!
-#warning See the last lines of the source file.
-#error You must compile this driver with "-O".
-#endif
-
-#if 0
-#include <linux/version.h>
-#endif
-#include <linux/types.h>
-#if 0
-#include <linux/kernel.h>
-#endif
-#include <linux/string.h>
-#if 0
-#include <linux/errno.h>
-#include <linux/ioport.h>
-#include <linux/slab.h>
-#include <linux/interrupt.h>
-#include <linux/pci.h>
-#endif
-#include <asm/byteorder.h>
-#include <asm/bitops.h>
-#include <asm/io.h>
-#if 0
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-
-#include <linux/init.h>
-#include <asm/uaccess.h>
-#include <net/checksum.h>
-#endif
-
-#include "h/sktypes.h"
-#include "h/skerror.h"
-#include "h/skdebug.h"
-#include "h/lm80.h"
-#include "h/xmac_ii.h"
-
-#include "u-boot_compat.h"
-
-#ifdef __LITTLE_ENDIAN
-#define SK_LITTLE_ENDIAN
-#else
-#define SK_BIG_ENDIAN
-#endif
-
-#if 0
-#define SK_NET_DEVICE net_device
-#else
-#define SK_NET_DEVICE eth_device
-#endif
-
-
-/* we use gethrtime(), return unit: nanoseconds */
-#if 0
-#define SK_TICKS_PER_SEC HZ
-#else
-#define SK_TICKS_PER_SEC CONFIG_SYS_HZ
-#endif
-
-#define SK_MEM_MAPPED_IO
-
-/* #define SK_RLMT_SLOW_LOOKAHEAD */
-
-#define SK_MAX_MACS 2
-#define SK_MAX_NETS 2
-
-#define SK_IOC char*
-
-typedef struct s_DrvRlmtMbuf SK_MBUF;
-
-#define SK_CONST64 INT64_C
-#define SK_CONSTU64 UINT64_C
-
-#define SK_MEMCPY(dest,src,size) memcpy(dest,src,size)
-#define SK_MEMCMP(s1,s2,size) memcmp(s1,s2,size)
-#define SK_MEMSET(dest,val,size) memset(dest,val,size)
-#define SK_STRLEN(pStr) strlen((char*)(pStr))
-#define SK_STRNCPY(pDest,pSrc,size) strncpy((char*)(pDest),(char*)(pSrc),size)
-#define SK_STRCMP(pStr1,pStr2) strcmp((char*)(pStr1),(char*)(pStr2))
-
-/* macros to access the adapter */
-#define SK_OUT8(b,a,v) writeb((v), ((b)+(a)))
-#define SK_OUT16(b,a,v) writew((v), ((b)+(a)))
-#define SK_OUT32(b,a,v) writel((v), ((b)+(a)))
-#define SK_IN8(b,a,pv) (*(pv) = readb((b)+(a)))
-#define SK_IN16(b,a,pv) (*(pv) = readw((b)+(a)))
-#define SK_IN32(b,a,pv) (*(pv) = readl((b)+(a)))
-
-#define int8_t char
-#define int16_t short
-#define int32_t long
-#define int64_t long long
-#define uint8_t u_char
-#define uint16_t u_short
-#define uint32_t u_long
-#define uint64_t unsigned long long
-#define t_scalar_t int
-#define t_uscalar_t unsigned int
-#define uintptr_t unsigned long
-
-#define __CONCAT__(A,B) A##B
-
-#define INT32_C(a) __CONCAT__(a,L)
-#define INT64_C(a) __CONCAT__(a,LL)
-#define UINT32_C(a) __CONCAT__(a,UL)
-#define UINT64_C(a) __CONCAT__(a,ULL)
-
-#ifdef DEBUG
-#define SK_DBG_PRINTF printk
-#ifndef SK_DEBUG_CHKMOD
-#define SK_DEBUG_CHKMOD 0
-#endif
-#ifndef SK_DEBUG_CHKCAT
-#define SK_DEBUG_CHKCAT 0
-#endif
-/* those come from the makefile */
-#define SK_DBG_CHKMOD(pAC) (SK_DEBUG_CHKMOD)
-#define SK_DBG_CHKCAT(pAC) (SK_DEBUG_CHKCAT)
-
-extern void SkDbgPrintf(const char *format,...);
-
-#define SK_DBGMOD_DRV 0x00010000
-
-/**** possible driver debug categories ********************************/
-#define SK_DBGCAT_DRV_ENTRY 0x00010000
-#define SK_DBGCAT_DRV_SAP 0x00020000
-#define SK_DBGCAT_DRV_MCA 0x00040000
-#define SK_DBGCAT_DRV_TX_PROGRESS 0x00080000
-#define SK_DBGCAT_DRV_RX_PROGRESS 0x00100000
-#define SK_DBGCAT_DRV_PROGRESS 0x00200000
-#define SK_DBGCAT_DRV_MSG 0x00400000
-#define SK_DBGCAT_DRV_PROM 0x00800000
-#define SK_DBGCAT_DRV_TX_FRAME 0x01000000
-#define SK_DBGCAT_DRV_ERROR 0x02000000
-#define SK_DBGCAT_DRV_INT_SRC 0x04000000
-#define SK_DBGCAT_DRV_EVENT 0x08000000
-
-#endif
-
-#define SK_ERR_LOG SkErrorLog
-
-extern void SkErrorLog(SK_AC*, int, int, char*);
-
-#endif
+/******************************************************************************
+ *
+ * Name: skdrv1st.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: First header file for driver and all other modules
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skdrv1st.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.11 2003/02/25 14:16:40 mlindner
+ * Fix: Copyright statement
+ *
+ * Revision 1.10 2002/10/02 12:46:02 mlindner
+ * Add: Support for Yukon
+ *
+ * Revision 1.9.2.2 2001/12/07 12:06:42 mlindner
+ * Fix: malloc -> slab changes
+ *
+ * Revision 1.9.2.1 2001/03/12 16:50:59 mlindner
+ * chg: kernel 2.4 adaption
+ *
+ * Revision 1.9 2001/01/22 14:16:04 mlindner
+ * added ProcFs functionality
+ * Dual Net functionality integrated
+ * Rlmt networks added
+ *
+ * Revision 1.8 2000/02/21 12:19:18 cgoos
+ * Added default for SK_DEBUG_CHKMOD/_CHKCAT
+ *
+ * Revision 1.7 1999/11/22 13:50:00 cgoos
+ * Changed license header to GPL.
+ * Added overwrite for several functions.
+ * Removed linux 2.0.x definitions.
+ * Removed PCI vendor ID definition (now in kernel).
+ *
+ * Revision 1.6 1999/07/27 08:03:33 cgoos
+ * Changed SK_IN/OUT macros to readX/writeX instead of memory
+ * accesses (necessary for ALPHA).
+ *
+ * Revision 1.5 1999/07/23 12:10:21 cgoos
+ * Removed SK_RLMT_SLOW_LOOKAHEAD define.
+ *
+ * Revision 1.4 1999/07/14 12:31:13 cgoos
+ * Added SK_RLMT_SLOW_LOOKAHEAD define.
+ *
+ * Revision 1.3 1999/04/07 10:12:54 cgoos
+ * Added check for KERNEL and OPTIMIZATION defines.
+ *
+ * Revision 1.2 1999/03/01 08:51:47 cgoos
+ * Fixed pcibios_read/write definitions.
+ *
+ * Revision 1.1 1999/02/16 07:40:49 cgoos
+ * First version.
+ *
+ *
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This is the first include file of the driver, which includes all
+ * neccessary system header files and some of the GEnesis header files.
+ * It also defines some basic items.
+ *
+ * Include File Hierarchy:
+ *
+ * see skge.c
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKDRV1ST_H
+#define __INC_SKDRV1ST_H
+
+#if 0
+/* Check kernel version */
+#include <linux/version.h>
+#if (LINUX_VERSION_CODE > 0x020300)
+#endif
+#endif
+
+typedef struct s_AC SK_AC;
+
+/* override some default functions with optimized linux functions */
+
+#define SK_PNMI_STORE_U16(p,v) memcpy((char*)(p),(char*)&(v),2)
+#define SK_PNMI_STORE_U32(p,v) memcpy((char*)(p),(char*)&(v),4)
+#define SK_PNMI_STORE_U64(p,v) memcpy((char*)(p),(char*)&(v),8)
+#define SK_PNMI_READ_U16(p,v) memcpy((char*)&(v),(char*)(p),2)
+#define SK_PNMI_READ_U32(p,v) memcpy((char*)&(v),(char*)(p),2)
+#define SK_PNMI_READ_U64(p,v) memcpy((char*)&(v),(char*)(p),2)
+
+#define SkCsCalculateChecksum(p,l) ((~ip_compute_csum(p, l)) & 0xffff)
+
+#define SK_ADDR_EQUAL(a1,a2) (!memcmp(a1,a2,6))
+
+
+#if !defined(__OPTIMIZE__) || !defined(__KERNEL__)
+#warning You must compile this file with the correct options!
+#warning See the last lines of the source file.
+#error You must compile this driver with "-O".
+#endif
+
+#if 0
+#include <linux/version.h>
+#endif
+#include <linux/types.h>
+#if 0
+#include <linux/kernel.h>
+#endif
+#include <linux/string.h>
+#if 0
+#include <linux/errno.h>
+#include <linux/ioport.h>
+#include <linux/slab.h>
+#include <linux/interrupt.h>
+#include <linux/pci.h>
+#endif
+#include <asm/byteorder.h>
+#include <asm/bitops.h>
+#include <asm/io.h>
+#if 0
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include <linux/init.h>
+#include <asm/uaccess.h>
+#include <net/checksum.h>
+#endif
+
+#include "h/sktypes.h"
+#include "h/skerror.h"
+#include "h/skdebug.h"
+#include "h/lm80.h"
+#include "h/xmac_ii.h"
+
+#include "u-boot_compat.h"
+
+#ifdef __LITTLE_ENDIAN
+#define SK_LITTLE_ENDIAN
+#else
+#define SK_BIG_ENDIAN
+#endif
+
+#if 0
+#define SK_NET_DEVICE net_device
+#else
+#define SK_NET_DEVICE eth_device
+#endif
+
+
+/* we use gethrtime(), return unit: nanoseconds */
+#if 0
+#define SK_TICKS_PER_SEC HZ
+#else
+#define SK_TICKS_PER_SEC CONFIG_SYS_HZ
+#endif
+
+#define SK_MEM_MAPPED_IO
+
+/* #define SK_RLMT_SLOW_LOOKAHEAD */
+
+#define SK_MAX_MACS 2
+#define SK_MAX_NETS 2
+
+#define SK_IOC char*
+
+typedef struct s_DrvRlmtMbuf SK_MBUF;
+
+#define SK_CONST64 INT64_C
+#define SK_CONSTU64 UINT64_C
+
+#define SK_MEMCPY(dest,src,size) memcpy(dest,src,size)
+#define SK_MEMCMP(s1,s2,size) memcmp(s1,s2,size)
+#define SK_MEMSET(dest,val,size) memset(dest,val,size)
+#define SK_STRLEN(pStr) strlen((char*)(pStr))
+#define SK_STRNCPY(pDest,pSrc,size) strncpy((char*)(pDest),(char*)(pSrc),size)
+#define SK_STRCMP(pStr1,pStr2) strcmp((char*)(pStr1),(char*)(pStr2))
+
+/* macros to access the adapter */
+#define SK_OUT8(b,a,v) writeb((v), ((b)+(a)))
+#define SK_OUT16(b,a,v) writew((v), ((b)+(a)))
+#define SK_OUT32(b,a,v) writel((v), ((b)+(a)))
+#define SK_IN8(b,a,pv) (*(pv) = readb((b)+(a)))
+#define SK_IN16(b,a,pv) (*(pv) = readw((b)+(a)))
+#define SK_IN32(b,a,pv) (*(pv) = readl((b)+(a)))
+
+#define int8_t char
+#define int16_t short
+#define int32_t long
+#define int64_t long long
+#define uint8_t u_char
+#define uint16_t u_short
+#define uint32_t u_long
+#define uint64_t unsigned long long
+#define t_scalar_t int
+#define t_uscalar_t unsigned int
+#define uintptr_t unsigned long
+
+#define __CONCAT__(A,B) A##B
+
+#define INT32_C(a) __CONCAT__(a,L)
+#define INT64_C(a) __CONCAT__(a,LL)
+#define UINT32_C(a) __CONCAT__(a,UL)
+#define UINT64_C(a) __CONCAT__(a,ULL)
+
+#ifdef DEBUG
+#define SK_DBG_PRINTF printk
+#ifndef SK_DEBUG_CHKMOD
+#define SK_DEBUG_CHKMOD 0
+#endif
+#ifndef SK_DEBUG_CHKCAT
+#define SK_DEBUG_CHKCAT 0
+#endif
+/* those come from the makefile */
+#define SK_DBG_CHKMOD(pAC) (SK_DEBUG_CHKMOD)
+#define SK_DBG_CHKCAT(pAC) (SK_DEBUG_CHKCAT)
+
+extern void SkDbgPrintf(const char *format,...);
+
+#define SK_DBGMOD_DRV 0x00010000
+
+/**** possible driver debug categories ********************************/
+#define SK_DBGCAT_DRV_ENTRY 0x00010000
+#define SK_DBGCAT_DRV_SAP 0x00020000
+#define SK_DBGCAT_DRV_MCA 0x00040000
+#define SK_DBGCAT_DRV_TX_PROGRESS 0x00080000
+#define SK_DBGCAT_DRV_RX_PROGRESS 0x00100000
+#define SK_DBGCAT_DRV_PROGRESS 0x00200000
+#define SK_DBGCAT_DRV_MSG 0x00400000
+#define SK_DBGCAT_DRV_PROM 0x00800000
+#define SK_DBGCAT_DRV_TX_FRAME 0x01000000
+#define SK_DBGCAT_DRV_ERROR 0x02000000
+#define SK_DBGCAT_DRV_INT_SRC 0x04000000
+#define SK_DBGCAT_DRV_EVENT 0x08000000
+
+#endif
+
+#define SK_ERR_LOG SkErrorLog
+
+extern void SkErrorLog(SK_AC*, int, int, char*);
+
+#endif
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skdrv2nd.h u-boot-2009.03/drivers/net/sk98lin/h/skdrv2nd.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skdrv2nd.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skdrv2nd.h 2009-03-31 14:54:45.690422400 -0700
@@ -1,561 +1,564 @@
-/******************************************************************************
- *
- * Name: skdrv2nd.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.15 $
- * Date: $Date: 2003/02/25 14:16:40 $
- * Purpose: Second header file for driver and all other modules
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skdrv2nd.h,v $
- * Revision 1.15 2003/02/25 14:16:40 mlindner
- * Fix: Copyright statement
- *
- * Revision 1.14 2003/02/25 13:26:26 mlindner
- * Add: Support for various vendors
- *
- * Revision 1.13 2002/10/02 12:46:02 mlindner
- * Add: Support for Yukon
- *
- * Revision 1.12.2.2 2001/09/05 12:14:50 mlindner
- * add: New hardware revision int
- *
- * Revision 1.12.2.1 2001/03/12 16:50:59 mlindner
- * chg: kernel 2.4 adaption
- *
- * Revision 1.12 2001/03/01 12:52:15 mlindner
- * Fixed ring size
- *
- * Revision 1.11 2001/02/19 13:28:02 mlindner
- * Changed PNMI parameter values
- *
- * Revision 1.10 2001/01/22 14:16:04 mlindner
- * added ProcFs functionality
- * Dual Net functionality integrated
- * Rlmt networks added
- *
- * Revision 1.1 2000/10/05 19:46:50 phargrov
- * Add directory src/vipk_devs_nonlbl/vipk_sk98lin/
- * This is the SysKonnect SK-98xx Gigabit Ethernet driver,
- * contributed by SysKonnect.
- *
- * Revision 1.9 2000/02/21 10:39:55 cgoos
- * Added flag for jumbo support usage.
- *
- * Revision 1.8 1999/11/22 13:50:44 cgoos
- * Changed license header to GPL.
- * Fixed two comments.
- *
- * Revision 1.7 1999/09/28 12:38:21 cgoos
- * Added CheckQueue to SK_AC.
- *
- * Revision 1.6 1999/07/27 08:04:05 cgoos
- * Added checksumming variables to SK_AC.
- *
- * Revision 1.5 1999/03/29 12:33:26 cgoos
- * Rreversed to fine lock granularity.
- *
- * Revision 1.4 1999/03/15 12:14:02 cgoos
- * Added DriverLock to SK_AC.
- * Removed other locks.
- *
- * Revision 1.3 1999/03/01 08:52:27 cgoos
- * Changed pAC->PciDev declaration.
- *
- * Revision 1.2 1999/02/18 10:57:14 cgoos
- * Removed SkDrvTimeStamp prototype.
- * Fixed SkGeOsGetTime prototype.
- *
- * Revision 1.1 1999/02/16 07:41:01 cgoos
- * First version.
- *
- *
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * This is the second include file of the driver, which includes all other
- * neccessary files and defines all structures and constants used by the
- * driver and the common modules.
- *
- * Include File Hierarchy:
- *
- * see skge.c
- *
- ******************************************************************************/
-
-#ifndef __INC_SKDRV2ND_H
-#define __INC_SKDRV2ND_H
-
-#include "h/skqueue.h"
-#include "h/skgehwt.h"
-#include "h/sktimer.h"
-#include "h/ski2c.h"
-#include "h/skgepnmi.h"
-#include "h/skvpd.h"
-#include "h/skgehw.h"
-#include "h/skgeinit.h"
-#include "h/skaddr.h"
-#include "h/skgesirq.h"
-#include "h/skcsum.h"
-#include "h/skrlmt.h"
-#include "h/skgedrv.h"
-
-#define SK_PCI_ISCOMPLIANT(result, pdev) { \
- result = SK_FALSE; /* default */ \
- /* 3Com (0x10b7) */ \
- if (pdev->vendor == 0x10b7) { \
- /* Gigabit Ethernet Adapter (0x1700) */ \
- if ((pdev->device == 0x1700)) { \
- result = SK_TRUE; \
- } \
- /* SysKonnect (0x1148) */ \
- } else if (pdev->vendor == 0x1148) { \
- /* SK-98xx Gigabit Ethernet Server Adapter (0x4300) */ \
- /* SK-98xx V2 Gigabit Ethernet Adapter (0x4320) */ \
- if ((pdev->device == 0x4300) || \
- (pdev->device == 0x4320)) { \
- result = SK_TRUE; \
- } \
- /* D-Link (0x1186) */ \
- } else if (pdev->vendor == 0x1186) { \
- /* Gigabit Ethernet Adapter (0x4c00) */ \
- if ((pdev->device == 0x4c00)) { \
- result = SK_TRUE; \
- } \
- /* CNet (0x1371) */ \
- } else if (pdev->vendor == 0x1371) { \
- /* GigaCard Network Adapter (0x434e) */ \
- if ((pdev->device == 0x434e)) { \
- result = SK_TRUE; \
- } \
- /* Linksys (0x1737) */ \
- } else if (pdev->vendor == 0x1737) { \
- /* Gigabit Network Adapter (0x1032) */ \
- /* Gigabit Network Adapter (0x1064) */ \
- if ((pdev->device == 0x1032) || \
- (pdev->device == 0x1064)) { \
- result = SK_TRUE; \
- } \
- } else { \
- result = SK_FALSE; \
- } \
-}
-
-
-extern SK_MBUF *SkDrvAllocRlmtMbuf(SK_AC*, SK_IOC, unsigned);
-extern void SkDrvFreeRlmtMbuf(SK_AC*, SK_IOC, SK_MBUF*);
-extern SK_U64 SkOsGetTime(SK_AC*);
-extern int SkPciReadCfgDWord(SK_AC*, int, SK_U32*);
-extern int SkPciReadCfgWord(SK_AC*, int, SK_U16*);
-extern int SkPciReadCfgByte(SK_AC*, int, SK_U8*);
-extern int SkPciWriteCfgDWord(SK_AC*, int, SK_U32);
-extern int SkPciWriteCfgWord(SK_AC*, int, SK_U16);
-extern int SkPciWriteCfgByte(SK_AC*, int, SK_U8);
-extern int SkDrvEvent(SK_AC*, SK_IOC IoC, SK_U32, SK_EVPARA);
-
-struct s_DrvRlmtMbuf {
- SK_MBUF *pNext; /* Pointer to next RLMT Mbuf. */
- SK_U8 *pData; /* Data buffer (virtually contig.). */
- unsigned Size; /* Data buffer size. */
- unsigned Length; /* Length of packet (<= Size). */
- SK_U32 PortIdx; /* Receiving/transmitting port. */
-#ifdef SK_RLMT_MBUF_PRIVATE
- SK_RLMT_MBUF Rlmt; /* Private part for RLMT. */
-#endif /* SK_RLMT_MBUF_PRIVATE */
- struct sk_buff *pOs; /* Pointer to message block */
-};
-
-
-/*
- * ioctl definitions
- */
-#define SK_IOCTL_BASE (SIOCDEVPRIVATE)
-#define SK_IOCTL_GETMIB (SK_IOCTL_BASE + 0)
-#define SK_IOCTL_SETMIB (SK_IOCTL_BASE + 1)
-#define SK_IOCTL_PRESETMIB (SK_IOCTL_BASE + 2)
-
-typedef struct s_IOCTL SK_GE_IOCTL;
-
-struct s_IOCTL {
- char* pData;
- unsigned int Len;
-};
-
-
-/*
- * define sizes of descriptor rings in bytes
- */
-
-#if 0
-#define TX_RING_SIZE (8*1024)
-#define RX_RING_SIZE (24*1024)
-#else
-#define TX_RING_SIZE (10 * 40)
-#define RX_RING_SIZE (10 * 40)
-#endif
-
-/*
- * Buffer size for ethernet packets
- */
-#define ETH_BUF_SIZE 1540
-#define ETH_MAX_MTU 1514
-#define ETH_MIN_MTU 60
-#define ETH_MULTICAST_BIT 0x01
-#define SK_JUMBO_MTU 9000
-
-/*
- * transmit priority selects the queue: LOW=asynchron, HIGH=synchron
- */
-#define TX_PRIO_LOW 0
-#define TX_PRIO_HIGH 1
-
-/*
- * alignment of rx/tx descriptors
- */
-#define DESCR_ALIGN 8
-
-/*
- * definitions for pnmi. TODO
- */
-#define SK_DRIVER_RESET(pAC, IoC) 0
-#define SK_DRIVER_SENDEVENT(pAC, IoC) 0
-#define SK_DRIVER_SELFTEST(pAC, IoC) 0
-/* For get mtu you must add an own function */
-#define SK_DRIVER_GET_MTU(pAc,IoC,i) 0
-#define SK_DRIVER_SET_MTU(pAc,IoC,i,v) 0
-#define SK_DRIVER_PRESET_MTU(pAc,IoC,i,v) 0
-
-
-/* TX and RX descriptors *****************************************************/
-
-typedef struct s_RxD RXD; /* the receive descriptor */
-
-struct s_RxD {
- volatile SK_U32 RBControl; /* Receive Buffer Control */
- SK_U32 VNextRxd; /* Next receive descriptor,low dword */
- SK_U32 VDataLow; /* Receive buffer Addr, low dword */
- SK_U32 VDataHigh; /* Receive buffer Addr, high dword */
- SK_U32 FrameStat; /* Receive Frame Status word */
- SK_U32 TimeStamp; /* Time stamp from XMAC */
- SK_U32 TcpSums; /* TCP Sum 2 / TCP Sum 1 */
- SK_U32 TcpSumStarts; /* TCP Sum Start 2 / TCP Sum Start 1 */
- RXD *pNextRxd; /* Pointer to next Rxd */
- struct sk_buff *pMBuf; /* Pointer to Linux' socket buffer */
-};
-
-typedef struct s_TxD TXD; /* the transmit descriptor */
-
-struct s_TxD {
- volatile SK_U32 TBControl; /* Transmit Buffer Control */
- SK_U32 VNextTxd; /* Next transmit descriptor,low dword */
- SK_U32 VDataLow; /* Transmit Buffer Addr, low dword */
- SK_U32 VDataHigh; /* Transmit Buffer Addr, high dword */
- SK_U32 FrameStat; /* Transmit Frame Status Word */
- SK_U32 TcpSumOfs; /* Reserved / TCP Sum Offset */
- SK_U16 TcpSumSt; /* TCP Sum Start */
- SK_U16 TcpSumWr; /* TCP Sum Write */
- SK_U32 TcpReserved; /* not used */
- TXD *pNextTxd; /* Pointer to next Txd */
- struct sk_buff *pMBuf; /* Pointer to Linux' socket buffer */
-};
-
-
-/* definition of flags in descriptor control field */
-#define RX_CTRL_OWN_BMU UINT32_C(0x80000000)
-#define RX_CTRL_STF UINT32_C(0x40000000)
-#define RX_CTRL_EOF UINT32_C(0x20000000)
-#define RX_CTRL_EOB_IRQ UINT32_C(0x10000000)
-#define RX_CTRL_EOF_IRQ UINT32_C(0x08000000)
-#define RX_CTRL_DEV_NULL UINT32_C(0x04000000)
-#define RX_CTRL_STAT_VALID UINT32_C(0x02000000)
-#define RX_CTRL_TIME_VALID UINT32_C(0x01000000)
-#define RX_CTRL_CHECK_DEFAULT UINT32_C(0x00550000)
-#define RX_CTRL_CHECK_CSUM UINT32_C(0x00560000)
-#define RX_CTRL_LEN_MASK UINT32_C(0x0000FFFF)
-
-#define TX_CTRL_OWN_BMU UINT32_C(0x80000000)
-#define TX_CTRL_STF UINT32_C(0x40000000)
-#define TX_CTRL_EOF UINT32_C(0x20000000)
-#define TX_CTRL_EOB_IRQ UINT32_C(0x10000000)
-#define TX_CTRL_EOF_IRQ UINT32_C(0x08000000)
-#define TX_CTRL_ST_FWD UINT32_C(0x04000000)
-#define TX_CTRL_DISAB_CRC UINT32_C(0x02000000)
-#define TX_CTRL_SOFTWARE UINT32_C(0x01000000)
-#define TX_CTRL_CHECK_DEFAULT UINT32_C(0x00550000)
-#define TX_CTRL_CHECK_CSUM UINT32_C(0x00560000)
-#define TX_CTRL_LEN_MASK UINT32_C(0x0000FFFF)
-
-
-/* The offsets of registers in the TX and RX queue control io area ***********/
-
-#define RX_Q_BUF_CTRL_CNT 0x00
-#define RX_Q_NEXT_DESCR_LOW 0x04
-#define RX_Q_BUF_ADDR_LOW 0x08
-#define RX_Q_BUF_ADDR_HIGH 0x0c
-#define RX_Q_FRAME_STAT 0x10
-#define RX_Q_TIME_STAMP 0x14
-#define RX_Q_CSUM_1_2 0x18
-#define RX_Q_CSUM_START_1_2 0x1c
-#define RX_Q_CUR_DESCR_LOW 0x20
-#define RX_Q_DESCR_HIGH 0x24
-#define RX_Q_CUR_ADDR_LOW 0x28
-#define RX_Q_CUR_ADDR_HIGH 0x2c
-#define RX_Q_CUR_BYTE_CNT 0x30
-#define RX_Q_CTRL 0x34
-#define RX_Q_FLAG 0x38
-#define RX_Q_TEST1 0x3c
-#define RX_Q_TEST2 0x40
-#define RX_Q_TEST3 0x44
-
-#define TX_Q_BUF_CTRL_CNT 0x00
-#define TX_Q_NEXT_DESCR_LOW 0x04
-#define TX_Q_BUF_ADDR_LOW 0x08
-#define TX_Q_BUF_ADDR_HIGH 0x0c
-#define TX_Q_FRAME_STAT 0x10
-#define TX_Q_CSUM_START 0x14
-#define TX_Q_CSUM_START_POS 0x18
-#define TX_Q_RESERVED 0x1c
-#define TX_Q_CUR_DESCR_LOW 0x20
-#define TX_Q_DESCR_HIGH 0x24
-#define TX_Q_CUR_ADDR_LOW 0x28
-#define TX_Q_CUR_ADDR_HIGH 0x2c
-#define TX_Q_CUR_BYTE_CNT 0x30
-#define TX_Q_CTRL 0x34
-#define TX_Q_FLAG 0x38
-#define TX_Q_TEST1 0x3c
-#define TX_Q_TEST2 0x40
-#define TX_Q_TEST3 0x44
-
-/* definition of flags in the queue control field */
-#define RX_Q_CTRL_POLL_ON 0x00000080
-#define RX_Q_CTRL_POLL_OFF 0x00000040
-#define RX_Q_CTRL_STOP 0x00000020
-#define RX_Q_CTRL_START 0x00000010
-#define RX_Q_CTRL_CLR_I_PAR 0x00000008
-#define RX_Q_CTRL_CLR_I_EOB 0x00000004
-#define RX_Q_CTRL_CLR_I_EOF 0x00000002
-#define RX_Q_CTRL_CLR_I_ERR 0x00000001
-
-#define TX_Q_CTRL_POLL_ON 0x00000080
-#define TX_Q_CTRL_POLL_OFF 0x00000040
-#define TX_Q_CTRL_STOP 0x00000020
-#define TX_Q_CTRL_START 0x00000010
-#define TX_Q_CTRL_CLR_I_EOB 0x00000004
-#define TX_Q_CTRL_CLR_I_EOF 0x00000002
-#define TX_Q_CTRL_CLR_I_ERR 0x00000001
-
-
-/* Interrupt bits in the interrupts source register **************************/
-#define IRQ_HW_ERROR 0x80000000
-#define IRQ_RESERVED 0x40000000
-#define IRQ_PKT_TOUT_RX1 0x20000000
-#define IRQ_PKT_TOUT_RX2 0x10000000
-#define IRQ_PKT_TOUT_TX1 0x08000000
-#define IRQ_PKT_TOUT_TX2 0x04000000
-#define IRQ_I2C_READY 0x02000000
-#define IRQ_SW 0x01000000
-#define IRQ_EXTERNAL_REG 0x00800000
-#define IRQ_TIMER 0x00400000
-#define IRQ_MAC1 0x00200000
-#define IRQ_LINK_SYNC_C_M1 0x00100000
-#define IRQ_MAC2 0x00080000
-#define IRQ_LINK_SYNC_C_M2 0x00040000
-#define IRQ_EOB_RX1 0x00020000
-#define IRQ_EOF_RX1 0x00010000
-#define IRQ_CHK_RX1 0x00008000
-#define IRQ_EOB_RX2 0x00004000
-#define IRQ_EOF_RX2 0x00002000
-#define IRQ_CHK_RX2 0x00001000
-#define IRQ_EOB_SY_TX1 0x00000800
-#define IRQ_EOF_SY_TX1 0x00000400
-#define IRQ_CHK_SY_TX1 0x00000200
-#define IRQ_EOB_AS_TX1 0x00000100
-#define IRQ_EOF_AS_TX1 0x00000080
-#define IRQ_CHK_AS_TX1 0x00000040
-#define IRQ_EOB_SY_TX2 0x00000020
-#define IRQ_EOF_SY_TX2 0x00000010
-#define IRQ_CHK_SY_TX2 0x00000008
-#define IRQ_EOB_AS_TX2 0x00000004
-#define IRQ_EOF_AS_TX2 0x00000002
-#define IRQ_CHK_AS_TX2 0x00000001
-
-#define DRIVER_IRQS (IRQ_SW | IRQ_EOF_RX1 | IRQ_EOF_RX2 | \
- IRQ_EOF_SY_TX1 | IRQ_EOF_AS_TX1 | \
- IRQ_EOF_SY_TX2 | IRQ_EOF_AS_TX2)
-
-#define SPECIAL_IRQS (IRQ_HW_ERROR | IRQ_PKT_TOUT_RX1 | IRQ_PKT_TOUT_RX2 | \
- IRQ_PKT_TOUT_TX1 | IRQ_PKT_TOUT_TX2 | \
- IRQ_I2C_READY | IRQ_EXTERNAL_REG | IRQ_TIMER | \
- IRQ_MAC1 | IRQ_LINK_SYNC_C_M1 | \
- IRQ_MAC2 | IRQ_LINK_SYNC_C_M2 | \
- IRQ_CHK_RX1 | IRQ_CHK_RX2 | \
- IRQ_CHK_SY_TX1 | IRQ_CHK_AS_TX1 | \
- IRQ_CHK_SY_TX2 | IRQ_CHK_AS_TX2)
-
-#define IRQ_MASK (IRQ_SW | IRQ_EOB_RX1 | IRQ_EOF_RX1 | \
- IRQ_EOB_RX2 | IRQ_EOF_RX2 | \
- IRQ_EOB_SY_TX1 | IRQ_EOF_SY_TX1 | \
- IRQ_EOB_AS_TX1 | IRQ_EOF_AS_TX1 | \
- IRQ_EOB_SY_TX2 | IRQ_EOF_SY_TX2 | \
- IRQ_EOB_AS_TX2 | IRQ_EOF_AS_TX2 | \
- IRQ_HW_ERROR | IRQ_PKT_TOUT_RX1 | IRQ_PKT_TOUT_RX2 | \
- IRQ_PKT_TOUT_TX1 | IRQ_PKT_TOUT_TX2 | \
- IRQ_I2C_READY | IRQ_EXTERNAL_REG | IRQ_TIMER | \
- IRQ_MAC1 | \
- IRQ_MAC2 | \
- IRQ_CHK_RX1 | IRQ_CHK_RX2 | \
- IRQ_CHK_SY_TX1 | IRQ_CHK_AS_TX1 | \
- IRQ_CHK_SY_TX2 | IRQ_CHK_AS_TX2)
-
-#define IRQ_HWE_MASK 0x00000FFF /* enable all HW irqs */
-
-typedef struct s_DevNet DEV_NET;
-
-struct s_DevNet {
- int PortNr;
- int NetNr;
- int Mtu;
- int Up;
- SK_AC *pAC;
-};
-
-typedef struct s_TxPort TX_PORT;
-
-struct s_TxPort {
- /* the transmit descriptor rings */
- caddr_t pTxDescrRing; /* descriptor area memory */
- SK_U64 VTxDescrRing; /* descr. area bus virt. addr. */
- TXD *pTxdRingHead; /* Head of Tx rings */
- TXD *pTxdRingTail; /* Tail of Tx rings */
- TXD *pTxdRingPrev; /* descriptor sent previously */
- int TxdRingFree; /* # of free entrys */
-#if 0
- spinlock_t TxDesRingLock; /* serialize descriptor accesses */
-#endif
- caddr_t HwAddr; /* bmu registers address */
- int PortIndex; /* index number of port (0 or 1) */
-};
-
-typedef struct s_RxPort RX_PORT;
-
-struct s_RxPort {
- /* the receive descriptor rings */
- caddr_t pRxDescrRing; /* descriptor area memory */
- SK_U64 VRxDescrRing; /* descr. area bus virt. addr. */
- RXD *pRxdRingHead; /* Head of Rx rings */
- RXD *pRxdRingTail; /* Tail of Rx rings */
- RXD *pRxdRingPrev; /* descriptor given to BMU previously */
- int RxdRingFree; /* # of free entrys */
-#if 0
- spinlock_t RxDesRingLock; /* serialize descriptor accesses */
-#endif
- int RxFillLimit; /* limit for buffers in ring */
- caddr_t HwAddr; /* bmu registers address */
- int PortIndex; /* index number of port (0 or 1) */
-};
-
-typedef struct s_PerStrm PER_STRM;
-
-#define SK_ALLOC_IRQ 0x00000001
-
-/****************************************************************************
- * Per board structure / Adapter Context structure:
- * Allocated within attach(9e) and freed within detach(9e).
- * Contains all 'per device' necessary handles, flags, locks etc.:
- */
-struct s_AC {
- SK_GEINIT GIni; /* GE init struct */
- SK_PNMI Pnmi; /* PNMI data struct */
- SK_VPD vpd; /* vpd data struct */
- SK_QUEUE Event; /* Event queue */
- SK_HWT Hwt; /* Hardware Timer control struct */
- SK_TIMCTRL Tim; /* Software Timer control struct */
- SK_I2C I2c; /* I2C relevant data structure */
- SK_ADDR Addr; /* for Address module */
- SK_CSUM Csum; /* for checksum module */
- SK_RLMT Rlmt; /* for rlmt module */
-#if 0
- spinlock_t SlowPathLock; /* Normal IRQ lock */
-#endif
- SK_PNMI_STRUCT_DATA PnmiStruct; /* structure to get all Pnmi-Data */
- int RlmtMode; /* link check mode to set */
- int RlmtNets; /* Number of nets */
-
- SK_IOC IoBase; /* register set of adapter */
- int BoardLevel; /* level of active hw init (0-2) */
- char DeviceStr[80]; /* adapter string from vpd */
- SK_U32 AllocFlag; /* flag allocation of resources */
-#if 0
- struct pci_dev *PciDev; /* for access to pci config space */
- SK_U32 PciDevId; /* pci device id */
-#else
- int PciDev;
-#endif
- struct SK_NET_DEVICE *dev[2]; /* pointer to device struct */
- char Name[30]; /* driver name */
- struct SK_NET_DEVICE *Next; /* link all devices (for clearing) */
- int RxBufSize; /* length of receive buffers */
-#if 0
- struct net_device_stats stats; /* linux 'netstat -i' statistics */
-#endif
- int Index; /* internal board index number */
-
- /* adapter RAM sizes for queues of active port */
- int RxQueueSize; /* memory used for receive queue */
- int TxSQueueSize; /* memory used for sync. tx queue */
- int TxAQueueSize; /* memory used for async. tx queue */
-
- int PromiscCount; /* promiscuous mode counter */
- int AllMultiCount; /* allmulticast mode counter */
- int MulticCount; /* number of different MC */
- /* addresses for this board */
- /* (may be more than HW can)*/
-
- int HWRevision; /* Hardware revision */
- int ActivePort; /* the active XMAC port */
- int MaxPorts; /* number of activated ports */
- int TxDescrPerRing; /* # of descriptors per tx ring */
- int RxDescrPerRing; /* # of descriptors per rx ring */
-
- caddr_t pDescrMem; /* Pointer to the descriptor area */
- dma_addr_t pDescrMemDMA; /* PCI DMA address of area */
-
- /* the port structures with descriptor rings */
- TX_PORT TxPort[SK_MAX_MACS][2];
- RX_PORT RxPort[SK_MAX_MACS];
-
- unsigned int CsOfs1; /* for checksum calculation */
- unsigned int CsOfs2; /* for checksum calculation */
- SK_U32 CsOfs; /* for checksum calculation */
-
- SK_BOOL CheckQueue; /* check event queue soon */
-
- /* Only for tests */
- int PortUp;
- int PortDown;
-
-};
-
-#endif /* __INC_SKDRV2ND_H */
+/******************************************************************************
+ *
+ * Name: skdrv2nd.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Second header file for driver and all other modules
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skdrv2nd.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.15 2003/02/25 14:16:40 mlindner
+ * Fix: Copyright statement
+ *
+ * Revision 1.14 2003/02/25 13:26:26 mlindner
+ * Add: Support for various vendors
+ *
+ * Revision 1.13 2002/10/02 12:46:02 mlindner
+ * Add: Support for Yukon
+ *
+ * Revision 1.12.2.2 2001/09/05 12:14:50 mlindner
+ * add: New hardware revision int
+ *
+ * Revision 1.12.2.1 2001/03/12 16:50:59 mlindner
+ * chg: kernel 2.4 adaption
+ *
+ * Revision 1.12 2001/03/01 12:52:15 mlindner
+ * Fixed ring size
+ *
+ * Revision 1.11 2001/02/19 13:28:02 mlindner
+ * Changed PNMI parameter values
+ *
+ * Revision 1.10 2001/01/22 14:16:04 mlindner
+ * added ProcFs functionality
+ * Dual Net functionality integrated
+ * Rlmt networks added
+ *
+ * Revision 1.1 2000/10/05 19:46:50 phargrov
+ * Add directory src/vipk_devs_nonlbl/vipk_sk98lin/
+ * This is the SysKonnect SK-98xx Gigabit Ethernet driver,
+ * contributed by SysKonnect.
+ *
+ * Revision 1.9 2000/02/21 10:39:55 cgoos
+ * Added flag for jumbo support usage.
+ *
+ * Revision 1.8 1999/11/22 13:50:44 cgoos
+ * Changed license header to GPL.
+ * Fixed two comments.
+ *
+ * Revision 1.7 1999/09/28 12:38:21 cgoos
+ * Added CheckQueue to SK_AC.
+ *
+ * Revision 1.6 1999/07/27 08:04:05 cgoos
+ * Added checksumming variables to SK_AC.
+ *
+ * Revision 1.5 1999/03/29 12:33:26 cgoos
+ * Rreversed to fine lock granularity.
+ *
+ * Revision 1.4 1999/03/15 12:14:02 cgoos
+ * Added DriverLock to SK_AC.
+ * Removed other locks.
+ *
+ * Revision 1.3 1999/03/01 08:52:27 cgoos
+ * Changed pAC->PciDev declaration.
+ *
+ * Revision 1.2 1999/02/18 10:57:14 cgoos
+ * Removed SkDrvTimeStamp prototype.
+ * Fixed SkGeOsGetTime prototype.
+ *
+ * Revision 1.1 1999/02/16 07:41:01 cgoos
+ * First version.
+ *
+ *
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This is the second include file of the driver, which includes all other
+ * neccessary files and defines all structures and constants used by the
+ * driver and the common modules.
+ *
+ * Include File Hierarchy:
+ *
+ * see skge.c
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKDRV2ND_H
+#define __INC_SKDRV2ND_H
+
+#include "h/skqueue.h"
+#include "h/skgehwt.h"
+#include "h/sktimer.h"
+#include "h/ski2c.h"
+#include "h/skgepnmi.h"
+#include "h/skvpd.h"
+#include "h/skgehw.h"
+#include "h/skgeinit.h"
+#include "h/skaddr.h"
+#include "h/skgesirq.h"
+#include "h/skcsum.h"
+#include "h/skrlmt.h"
+#include "h/skgedrv.h"
+
+#define SK_PCI_ISCOMPLIANT(result, pdev) { \
+ result = SK_FALSE; /* default */ \
+ /* 3Com (0x10b7) */ \
+ if (pdev->vendor == 0x10b7) { \
+ /* Gigabit Ethernet Adapter (0x1700) */ \
+ if ((pdev->device == 0x1700)) { \
+ result = SK_TRUE; \
+ } \
+ /* SysKonnect (0x1148) */ \
+ } else if (pdev->vendor == 0x1148) { \
+ /* SK-98xx Gigabit Ethernet Server Adapter (0x4300) */ \
+ /* SK-98xx V2 Gigabit Ethernet Adapter (0x4320) */ \
+ if ((pdev->device == 0x4300) || \
+ (pdev->device == 0x4320)) { \
+ result = SK_TRUE; \
+ } \
+ /* D-Link (0x1186) */ \
+ } else if (pdev->vendor == 0x1186) { \
+ /* Gigabit Ethernet Adapter (0x4c00) */ \
+ if ((pdev->device == 0x4c00)) { \
+ result = SK_TRUE; \
+ } \
+ /* CNet (0x1371) */ \
+ } else if (pdev->vendor == 0x1371) { \
+ /* GigaCard Network Adapter (0x434e) */ \
+ if ((pdev->device == 0x434e)) { \
+ result = SK_TRUE; \
+ } \
+ /* Linksys (0x1737) */ \
+ } else if (pdev->vendor == 0x1737) { \
+ /* Gigabit Network Adapter (0x1032) */ \
+ /* Gigabit Network Adapter (0x1064) */ \
+ if ((pdev->device == 0x1032) || \
+ (pdev->device == 0x1064)) { \
+ result = SK_TRUE; \
+ } \
+ } else { \
+ result = SK_FALSE; \
+ } \
+}
+
+
+extern SK_MBUF *SkDrvAllocRlmtMbuf(SK_AC*, SK_IOC, unsigned);
+extern void SkDrvFreeRlmtMbuf(SK_AC*, SK_IOC, SK_MBUF*);
+extern SK_U64 SkOsGetTime(SK_AC*);
+extern int SkPciReadCfgDWord(SK_AC*, int, SK_U32*);
+extern int SkPciReadCfgWord(SK_AC*, int, SK_U16*);
+extern int SkPciReadCfgByte(SK_AC*, int, SK_U8*);
+extern int SkPciWriteCfgDWord(SK_AC*, int, SK_U32);
+extern int SkPciWriteCfgWord(SK_AC*, int, SK_U16);
+extern int SkPciWriteCfgByte(SK_AC*, int, SK_U8);
+extern int SkDrvEvent(SK_AC*, SK_IOC IoC, SK_U32, SK_EVPARA);
+
+struct s_DrvRlmtMbuf {
+ SK_MBUF *pNext; /* Pointer to next RLMT Mbuf. */
+ SK_U8 *pData; /* Data buffer (virtually contig.). */
+ unsigned Size; /* Data buffer size. */
+ unsigned Length; /* Length of packet (<= Size). */
+ SK_U32 PortIdx; /* Receiving/transmitting port. */
+#ifdef SK_RLMT_MBUF_PRIVATE
+ SK_RLMT_MBUF Rlmt; /* Private part for RLMT. */
+#endif /* SK_RLMT_MBUF_PRIVATE */
+ struct sk_buff *pOs; /* Pointer to message block */
+};
+
+
+/*
+ * ioctl definitions
+ */
+#define SK_IOCTL_BASE (SIOCDEVPRIVATE)
+#define SK_IOCTL_GETMIB (SK_IOCTL_BASE + 0)
+#define SK_IOCTL_SETMIB (SK_IOCTL_BASE + 1)
+#define SK_IOCTL_PRESETMIB (SK_IOCTL_BASE + 2)
+
+typedef struct s_IOCTL SK_GE_IOCTL;
+
+struct s_IOCTL {
+ char* pData;
+ unsigned int Len;
+};
+
+
+/*
+ * define sizes of descriptor rings in bytes
+ */
+
+#if 0
+#define TX_RING_SIZE (8*1024)
+#define RX_RING_SIZE (24*1024)
+#else
+#define TX_RING_SIZE (10 * 40)
+#define RX_RING_SIZE (10 * 40)
+#endif
+
+/*
+ * Buffer size for ethernet packets
+ */
+#define ETH_BUF_SIZE 1540
+#define ETH_MAX_MTU 1514
+#define ETH_MIN_MTU 60
+#define ETH_MULTICAST_BIT 0x01
+#define SK_JUMBO_MTU 9000
+
+/*
+ * transmit priority selects the queue: LOW=asynchron, HIGH=synchron
+ */
+#define TX_PRIO_LOW 0
+#define TX_PRIO_HIGH 1
+
+/*
+ * alignment of rx/tx descriptors
+ */
+#define DESCR_ALIGN 8
+
+/*
+ * definitions for pnmi. TODO
+ */
+#define SK_DRIVER_RESET(pAC, IoC) 0
+#define SK_DRIVER_SENDEVENT(pAC, IoC) 0
+#define SK_DRIVER_SELFTEST(pAC, IoC) 0
+/* For get mtu you must add an own function */
+#define SK_DRIVER_GET_MTU(pAc,IoC,i) 0
+#define SK_DRIVER_SET_MTU(pAc,IoC,i,v) 0
+#define SK_DRIVER_PRESET_MTU(pAc,IoC,i,v) 0
+
+
+/* TX and RX descriptors *****************************************************/
+
+typedef struct s_RxD RXD; /* the receive descriptor */
+
+struct s_RxD {
+ volatile SK_U32 RBControl; /* Receive Buffer Control */
+ SK_U32 VNextRxd; /* Next receive descriptor,low dword */
+ SK_U32 VDataLow; /* Receive buffer Addr, low dword */
+ SK_U32 VDataHigh; /* Receive buffer Addr, high dword */
+ SK_U32 FrameStat; /* Receive Frame Status word */
+ SK_U32 TimeStamp; /* Time stamp from XMAC */
+ SK_U32 TcpSums; /* TCP Sum 2 / TCP Sum 1 */
+ SK_U32 TcpSumStarts; /* TCP Sum Start 2 / TCP Sum Start 1 */
+ RXD *pNextRxd; /* Pointer to next Rxd */
+ struct sk_buff *pMBuf; /* Pointer to Linux' socket buffer */
+};
+
+typedef struct s_TxD TXD; /* the transmit descriptor */
+
+struct s_TxD {
+ volatile SK_U32 TBControl; /* Transmit Buffer Control */
+ SK_U32 VNextTxd; /* Next transmit descriptor,low dword */
+ SK_U32 VDataLow; /* Transmit Buffer Addr, low dword */
+ SK_U32 VDataHigh; /* Transmit Buffer Addr, high dword */
+ SK_U32 FrameStat; /* Transmit Frame Status Word */
+ SK_U32 TcpSumOfs; /* Reserved / TCP Sum Offset */
+ SK_U16 TcpSumSt; /* TCP Sum Start */
+ SK_U16 TcpSumWr; /* TCP Sum Write */
+ SK_U32 TcpReserved; /* not used */
+ TXD *pNextTxd; /* Pointer to next Txd */
+ struct sk_buff *pMBuf; /* Pointer to Linux' socket buffer */
+};
+
+
+/* definition of flags in descriptor control field */
+#define RX_CTRL_OWN_BMU UINT32_C(0x80000000)
+#define RX_CTRL_STF UINT32_C(0x40000000)
+#define RX_CTRL_EOF UINT32_C(0x20000000)
+#define RX_CTRL_EOB_IRQ UINT32_C(0x10000000)
+#define RX_CTRL_EOF_IRQ UINT32_C(0x08000000)
+#define RX_CTRL_DEV_NULL UINT32_C(0x04000000)
+#define RX_CTRL_STAT_VALID UINT32_C(0x02000000)
+#define RX_CTRL_TIME_VALID UINT32_C(0x01000000)
+#define RX_CTRL_CHECK_DEFAULT UINT32_C(0x00550000)
+#define RX_CTRL_CHECK_CSUM UINT32_C(0x00560000)
+#define RX_CTRL_LEN_MASK UINT32_C(0x0000FFFF)
+
+#define TX_CTRL_OWN_BMU UINT32_C(0x80000000)
+#define TX_CTRL_STF UINT32_C(0x40000000)
+#define TX_CTRL_EOF UINT32_C(0x20000000)
+#define TX_CTRL_EOB_IRQ UINT32_C(0x10000000)
+#define TX_CTRL_EOF_IRQ UINT32_C(0x08000000)
+#define TX_CTRL_ST_FWD UINT32_C(0x04000000)
+#define TX_CTRL_DISAB_CRC UINT32_C(0x02000000)
+#define TX_CTRL_SOFTWARE UINT32_C(0x01000000)
+#define TX_CTRL_CHECK_DEFAULT UINT32_C(0x00550000)
+#define TX_CTRL_CHECK_CSUM UINT32_C(0x00560000)
+#define TX_CTRL_LEN_MASK UINT32_C(0x0000FFFF)
+
+
+/* The offsets of registers in the TX and RX queue control io area ***********/
+
+#define RX_Q_BUF_CTRL_CNT 0x00
+#define RX_Q_NEXT_DESCR_LOW 0x04
+#define RX_Q_BUF_ADDR_LOW 0x08
+#define RX_Q_BUF_ADDR_HIGH 0x0c
+#define RX_Q_FRAME_STAT 0x10
+#define RX_Q_TIME_STAMP 0x14
+#define RX_Q_CSUM_1_2 0x18
+#define RX_Q_CSUM_START_1_2 0x1c
+#define RX_Q_CUR_DESCR_LOW 0x20
+#define RX_Q_DESCR_HIGH 0x24
+#define RX_Q_CUR_ADDR_LOW 0x28
+#define RX_Q_CUR_ADDR_HIGH 0x2c
+#define RX_Q_CUR_BYTE_CNT 0x30
+#define RX_Q_CTRL 0x34
+#define RX_Q_FLAG 0x38
+#define RX_Q_TEST1 0x3c
+#define RX_Q_TEST2 0x40
+#define RX_Q_TEST3 0x44
+
+#define TX_Q_BUF_CTRL_CNT 0x00
+#define TX_Q_NEXT_DESCR_LOW 0x04
+#define TX_Q_BUF_ADDR_LOW 0x08
+#define TX_Q_BUF_ADDR_HIGH 0x0c
+#define TX_Q_FRAME_STAT 0x10
+#define TX_Q_CSUM_START 0x14
+#define TX_Q_CSUM_START_POS 0x18
+#define TX_Q_RESERVED 0x1c
+#define TX_Q_CUR_DESCR_LOW 0x20
+#define TX_Q_DESCR_HIGH 0x24
+#define TX_Q_CUR_ADDR_LOW 0x28
+#define TX_Q_CUR_ADDR_HIGH 0x2c
+#define TX_Q_CUR_BYTE_CNT 0x30
+#define TX_Q_CTRL 0x34
+#define TX_Q_FLAG 0x38
+#define TX_Q_TEST1 0x3c
+#define TX_Q_TEST2 0x40
+#define TX_Q_TEST3 0x44
+
+/* definition of flags in the queue control field */
+#define RX_Q_CTRL_POLL_ON 0x00000080
+#define RX_Q_CTRL_POLL_OFF 0x00000040
+#define RX_Q_CTRL_STOP 0x00000020
+#define RX_Q_CTRL_START 0x00000010
+#define RX_Q_CTRL_CLR_I_PAR 0x00000008
+#define RX_Q_CTRL_CLR_I_EOB 0x00000004
+#define RX_Q_CTRL_CLR_I_EOF 0x00000002
+#define RX_Q_CTRL_CLR_I_ERR 0x00000001
+
+#define TX_Q_CTRL_POLL_ON 0x00000080
+#define TX_Q_CTRL_POLL_OFF 0x00000040
+#define TX_Q_CTRL_STOP 0x00000020
+#define TX_Q_CTRL_START 0x00000010
+#define TX_Q_CTRL_CLR_I_EOB 0x00000004
+#define TX_Q_CTRL_CLR_I_EOF 0x00000002
+#define TX_Q_CTRL_CLR_I_ERR 0x00000001
+
+
+/* Interrupt bits in the interrupts source register **************************/
+#define IRQ_HW_ERROR 0x80000000
+#define IRQ_RESERVED 0x40000000
+#define IRQ_PKT_TOUT_RX1 0x20000000
+#define IRQ_PKT_TOUT_RX2 0x10000000
+#define IRQ_PKT_TOUT_TX1 0x08000000
+#define IRQ_PKT_TOUT_TX2 0x04000000
+#define IRQ_I2C_READY 0x02000000
+#define IRQ_SW 0x01000000
+#define IRQ_EXTERNAL_REG 0x00800000
+#define IRQ_TIMER 0x00400000
+#define IRQ_MAC1 0x00200000
+#define IRQ_LINK_SYNC_C_M1 0x00100000
+#define IRQ_MAC2 0x00080000
+#define IRQ_LINK_SYNC_C_M2 0x00040000
+#define IRQ_EOB_RX1 0x00020000
+#define IRQ_EOF_RX1 0x00010000
+#define IRQ_CHK_RX1 0x00008000
+#define IRQ_EOB_RX2 0x00004000
+#define IRQ_EOF_RX2 0x00002000
+#define IRQ_CHK_RX2 0x00001000
+#define IRQ_EOB_SY_TX1 0x00000800
+#define IRQ_EOF_SY_TX1 0x00000400
+#define IRQ_CHK_SY_TX1 0x00000200
+#define IRQ_EOB_AS_TX1 0x00000100
+#define IRQ_EOF_AS_TX1 0x00000080
+#define IRQ_CHK_AS_TX1 0x00000040
+#define IRQ_EOB_SY_TX2 0x00000020
+#define IRQ_EOF_SY_TX2 0x00000010
+#define IRQ_CHK_SY_TX2 0x00000008
+#define IRQ_EOB_AS_TX2 0x00000004
+#define IRQ_EOF_AS_TX2 0x00000002
+#define IRQ_CHK_AS_TX2 0x00000001
+
+#define DRIVER_IRQS (IRQ_SW | IRQ_EOF_RX1 | IRQ_EOF_RX2 | \
+ IRQ_EOF_SY_TX1 | IRQ_EOF_AS_TX1 | \
+ IRQ_EOF_SY_TX2 | IRQ_EOF_AS_TX2)
+
+#define SPECIAL_IRQS (IRQ_HW_ERROR | IRQ_PKT_TOUT_RX1 | IRQ_PKT_TOUT_RX2 | \
+ IRQ_PKT_TOUT_TX1 | IRQ_PKT_TOUT_TX2 | \
+ IRQ_I2C_READY | IRQ_EXTERNAL_REG | IRQ_TIMER | \
+ IRQ_MAC1 | IRQ_LINK_SYNC_C_M1 | \
+ IRQ_MAC2 | IRQ_LINK_SYNC_C_M2 | \
+ IRQ_CHK_RX1 | IRQ_CHK_RX2 | \
+ IRQ_CHK_SY_TX1 | IRQ_CHK_AS_TX1 | \
+ IRQ_CHK_SY_TX2 | IRQ_CHK_AS_TX2)
+
+#define IRQ_MASK (IRQ_SW | IRQ_EOB_RX1 | IRQ_EOF_RX1 | \
+ IRQ_EOB_RX2 | IRQ_EOF_RX2 | \
+ IRQ_EOB_SY_TX1 | IRQ_EOF_SY_TX1 | \
+ IRQ_EOB_AS_TX1 | IRQ_EOF_AS_TX1 | \
+ IRQ_EOB_SY_TX2 | IRQ_EOF_SY_TX2 | \
+ IRQ_EOB_AS_TX2 | IRQ_EOF_AS_TX2 | \
+ IRQ_HW_ERROR | IRQ_PKT_TOUT_RX1 | IRQ_PKT_TOUT_RX2 | \
+ IRQ_PKT_TOUT_TX1 | IRQ_PKT_TOUT_TX2 | \
+ IRQ_I2C_READY | IRQ_EXTERNAL_REG | IRQ_TIMER | \
+ IRQ_MAC1 | \
+ IRQ_MAC2 | \
+ IRQ_CHK_RX1 | IRQ_CHK_RX2 | \
+ IRQ_CHK_SY_TX1 | IRQ_CHK_AS_TX1 | \
+ IRQ_CHK_SY_TX2 | IRQ_CHK_AS_TX2)
+
+#define IRQ_HWE_MASK 0x00000FFF /* enable all HW irqs */
+
+typedef struct s_DevNet DEV_NET;
+
+struct s_DevNet {
+ int PortNr;
+ int NetNr;
+ int Mtu;
+ int Up;
+ SK_AC *pAC;
+};
+
+typedef struct s_TxPort TX_PORT;
+
+struct s_TxPort {
+ /* the transmit descriptor rings */
+ caddr_t pTxDescrRing; /* descriptor area memory */
+ SK_U64 VTxDescrRing; /* descr. area bus virt. addr. */
+ TXD *pTxdRingHead; /* Head of Tx rings */
+ TXD *pTxdRingTail; /* Tail of Tx rings */
+ TXD *pTxdRingPrev; /* descriptor sent previously */
+ int TxdRingFree; /* # of free entrys */
+#if 0
+ spinlock_t TxDesRingLock; /* serialize descriptor accesses */
+#endif
+ caddr_t HwAddr; /* bmu registers address */
+ int PortIndex; /* index number of port (0 or 1) */
+};
+
+typedef struct s_RxPort RX_PORT;
+
+struct s_RxPort {
+ /* the receive descriptor rings */
+ caddr_t pRxDescrRing; /* descriptor area memory */
+ SK_U64 VRxDescrRing; /* descr. area bus virt. addr. */
+ RXD *pRxdRingHead; /* Head of Rx rings */
+ RXD *pRxdRingTail; /* Tail of Rx rings */
+ RXD *pRxdRingPrev; /* descriptor given to BMU previously */
+ int RxdRingFree; /* # of free entrys */
+#if 0
+ spinlock_t RxDesRingLock; /* serialize descriptor accesses */
+#endif
+ int RxFillLimit; /* limit for buffers in ring */
+ caddr_t HwAddr; /* bmu registers address */
+ int PortIndex; /* index number of port (0 or 1) */
+};
+
+typedef struct s_PerStrm PER_STRM;
+
+#define SK_ALLOC_IRQ 0x00000001
+
+/****************************************************************************
+ * Per board structure / Adapter Context structure:
+ * Allocated within attach(9e) and freed within detach(9e).
+ * Contains all 'per device' necessary handles, flags, locks etc.:
+ */
+struct s_AC {
+ SK_GEINIT GIni; /* GE init struct */
+ SK_PNMI Pnmi; /* PNMI data struct */
+ SK_VPD vpd; /* vpd data struct */
+ SK_QUEUE Event; /* Event queue */
+ SK_HWT Hwt; /* Hardware Timer control struct */
+ SK_TIMCTRL Tim; /* Software Timer control struct */
+ SK_I2C I2c; /* I2C relevant data structure */
+ SK_ADDR Addr; /* for Address module */
+ SK_CSUM Csum; /* for checksum module */
+ SK_RLMT Rlmt; /* for rlmt module */
+#if 0
+ spinlock_t SlowPathLock; /* Normal IRQ lock */
+#endif
+ SK_PNMI_STRUCT_DATA PnmiStruct; /* structure to get all Pnmi-Data */
+ int RlmtMode; /* link check mode to set */
+ int RlmtNets; /* Number of nets */
+
+ SK_IOC IoBase; /* register set of adapter */
+ int BoardLevel; /* level of active hw init (0-2) */
+ char DeviceStr[80]; /* adapter string from vpd */
+ SK_U32 AllocFlag; /* flag allocation of resources */
+#if 0
+ struct pci_dev *PciDev; /* for access to pci config space */
+ SK_U32 PciDevId; /* pci device id */
+#else
+ int PciDev;
+#endif
+ struct SK_NET_DEVICE *dev[2]; /* pointer to device struct */
+ char Name[30]; /* driver name */
+ struct SK_NET_DEVICE *Next; /* link all devices (for clearing) */
+ int RxBufSize; /* length of receive buffers */
+#if 0
+ struct net_device_stats stats; /* linux 'netstat -i' statistics */
+#endif
+ int Index; /* internal board index number */
+
+ /* adapter RAM sizes for queues of active port */
+ int RxQueueSize; /* memory used for receive queue */
+ int TxSQueueSize; /* memory used for sync. tx queue */
+ int TxAQueueSize; /* memory used for async. tx queue */
+
+ int PromiscCount; /* promiscuous mode counter */
+ int AllMultiCount; /* allmulticast mode counter */
+ int MulticCount; /* number of different MC */
+ /* addresses for this board */
+ /* (may be more than HW can)*/
+
+ int HWRevision; /* Hardware revision */
+ int ActivePort; /* the active XMAC port */
+ int MaxPorts; /* number of activated ports */
+ int TxDescrPerRing; /* # of descriptors per tx ring */
+ int RxDescrPerRing; /* # of descriptors per rx ring */
+
+ caddr_t pDescrMem; /* Pointer to the descriptor area */
+ dma_addr_t pDescrMemDMA; /* PCI DMA address of area */
+
+ /* the port structures with descriptor rings */
+ TX_PORT TxPort[SK_MAX_MACS][2];
+ RX_PORT RxPort[SK_MAX_MACS];
+
+ unsigned int CsOfs1; /* for checksum calculation */
+ unsigned int CsOfs2; /* for checksum calculation */
+ SK_U32 CsOfs; /* for checksum calculation */
+
+ SK_BOOL CheckQueue; /* check event queue soon */
+
+ /* Only for tests */
+ int PortUp;
+ int PortDown;
+
+};
+
+#endif /* __INC_SKDRV2ND_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skerror.h u-boot-2009.03/drivers/net/sk98lin/h/skerror.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skerror.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skerror.h 2009-03-31 14:54:45.721672000 -0700
@@ -1,80 +1,83 @@
-/******************************************************************************
- *
- * Name: skerror.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.5 $
- * Date: $Date: 2002/04/25 11:05:10 $
- * Purpose: SK specific Error log support
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- * $Log: skerror.h,v $
- * Revision 1.5 2002/04/25 11:05:10 rschmidt
- * Editorial changes
- *
- * Revision 1.4 1999/11/22 13:51:59 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.3 1999/09/14 14:04:42 rwahl
- * Added error base SK_ERRBASE_PECP.
- * Changed error base for driver.
- *
- * Revision 1.2 1998/08/11 11:15:41 gklug
- * chg: comments
- *
- * Revision 1.1 1998/08/11 11:09:38 gklug
- * add: error bases
- * add: error Classes
- * first version
- *
- *
- *
- ******************************************************************************/
-
-#ifndef _INC_SKERROR_H_
-#define _INC_SKERROR_H_
-
-/*
- * Define Error Classes
- */
-#define SK_ERRCL_OTHER (0) /* Other error */
-#define SK_ERRCL_CONFIG (1L<<0) /* Configuration error */
-#define SK_ERRCL_INIT (1L<<1) /* Initialization error */
-#define SK_ERRCL_NORES (1L<<2) /* Out of Resources error */
-#define SK_ERRCL_SW (1L<<3) /* Internal Software error */
-#define SK_ERRCL_HW (1L<<4) /* Hardware Failure */
-#define SK_ERRCL_COMM (1L<<5) /* Communication error */
-
-
-/*
- * Define Error Code Bases
- */
-#define SK_ERRBASE_RLMT 100 /* Base Error number for RLMT */
-#define SK_ERRBASE_HWINIT 200 /* Base Error number for HWInit */
-#define SK_ERRBASE_VPD 300 /* Base Error number for VPD */
-#define SK_ERRBASE_PNMI 400 /* Base Error number for PNMI */
-#define SK_ERRBASE_CSUM 500 /* Base Error number for Checksum */
-#define SK_ERRBASE_SIRQ 600 /* Base Error number for Special IRQ */
-#define SK_ERRBASE_I2C 700 /* Base Error number for I2C module */
-#define SK_ERRBASE_QUEUE 800 /* Base Error number for Scheduler */
-#define SK_ERRBASE_ADDR 900 /* Base Error number for Address module */
-#define SK_ERRBASE_PECP 1000 /* Base Error number for PECP */
-#define SK_ERRBASE_DRV 1100 /* Base Error number for Driver */
-
-#endif /* _INC_SKERROR_H_ */
+/******************************************************************************
+ *
+ * Name: skerror.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: SK specific Error log support
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ * $Log: skerror.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.5 2002/04/25 11:05:10 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.4 1999/11/22 13:51:59 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.3 1999/09/14 14:04:42 rwahl
+ * Added error base SK_ERRBASE_PECP.
+ * Changed error base for driver.
+ *
+ * Revision 1.2 1998/08/11 11:15:41 gklug
+ * chg: comments
+ *
+ * Revision 1.1 1998/08/11 11:09:38 gklug
+ * add: error bases
+ * add: error Classes
+ * first version
+ *
+ *
+ *
+ ******************************************************************************/
+
+#ifndef _INC_SKERROR_H_
+#define _INC_SKERROR_H_
+
+/*
+ * Define Error Classes
+ */
+#define SK_ERRCL_OTHER (0) /* Other error */
+#define SK_ERRCL_CONFIG (1L<<0) /* Configuration error */
+#define SK_ERRCL_INIT (1L<<1) /* Initialization error */
+#define SK_ERRCL_NORES (1L<<2) /* Out of Resources error */
+#define SK_ERRCL_SW (1L<<3) /* Internal Software error */
+#define SK_ERRCL_HW (1L<<4) /* Hardware Failure */
+#define SK_ERRCL_COMM (1L<<5) /* Communication error */
+
+
+/*
+ * Define Error Code Bases
+ */
+#define SK_ERRBASE_RLMT 100 /* Base Error number for RLMT */
+#define SK_ERRBASE_HWINIT 200 /* Base Error number for HWInit */
+#define SK_ERRBASE_VPD 300 /* Base Error number for VPD */
+#define SK_ERRBASE_PNMI 400 /* Base Error number for PNMI */
+#define SK_ERRBASE_CSUM 500 /* Base Error number for Checksum */
+#define SK_ERRBASE_SIRQ 600 /* Base Error number for Special IRQ */
+#define SK_ERRBASE_I2C 700 /* Base Error number for I2C module */
+#define SK_ERRBASE_QUEUE 800 /* Base Error number for Scheduler */
+#define SK_ERRBASE_ADDR 900 /* Base Error number for Address module */
+#define SK_ERRBASE_PECP 1000 /* Base Error number for PECP */
+#define SK_ERRBASE_DRV 1100 /* Base Error number for Driver */
+
+#endif /* _INC_SKERROR_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgedrv.h u-boot-2009.03/drivers/net/sk98lin/h/skgedrv.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgedrv.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgedrv.h 2009-03-31 14:54:45.752921600 -0700
@@ -1,72 +1,75 @@
-/******************************************************************************
- *
- * Name: skgedrv.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.6 $
- * Date: $Date: 2002/07/15 15:38:01 $
- * Purpose: Interface with the driver
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skgedrv.h,v $
- * Revision 1.6 2002/07/15 15:38:01 rschmidt
- * Power Management support
- * Editorial changes
- *
- * Revision 1.5 2002/04/25 11:05:47 rschmidt
- * Editorial changes
- *
- * Revision 1.4 1999/11/22 13:52:46 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.3 1998/12/01 13:31:39 cgoos
- * SWITCH INTERN Event added.
- *
- * Revision 1.2 1998/11/25 08:28:38 gklug
- * rmv: PORT SWITCH Event
- *
- * Revision 1.1 1998/09/29 06:14:07 gklug
- * add: driver events (initial version)
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_SKGEDRV_H_
-#define __INC_SKGEDRV_H_
-
-/* defines ********************************************************************/
-
-/*
- * Define the driver events.
- * Usually the events are defined by the destination module.
- * In case of the driver we put the definition of the events here.
- */
-#define SK_DRV_PORT_RESET 1 /* The port needs to be reset */
-#define SK_DRV_NET_UP 2 /* The net is operational */
-#define SK_DRV_NET_DOWN 3 /* The net is down */
-#define SK_DRV_SWITCH_SOFT 4 /* Ports switch with both links connected */
-#define SK_DRV_SWITCH_HARD 5 /* Port switch due to link failure */
-#define SK_DRV_RLMT_SEND 6 /* Send a RLMT packet */
-#define SK_DRV_ADAP_FAIL 7 /* The whole adapter fails */
-#define SK_DRV_PORT_FAIL 8 /* One port fails */
-#define SK_DRV_SWITCH_INTERN 9 /* Port switch by the driver itself */
-#define SK_DRV_POWER_DOWN 10 /* Power down mode */
-
-#endif /* __INC_SKGEDRV_H_ */
+/******************************************************************************
+ *
+ * Name: skgedrv.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Interface with the driver
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgedrv.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.6 2002/07/15 15:38:01 rschmidt
+ * Power Management support
+ * Editorial changes
+ *
+ * Revision 1.5 2002/04/25 11:05:47 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.4 1999/11/22 13:52:46 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.3 1998/12/01 13:31:39 cgoos
+ * SWITCH INTERN Event added.
+ *
+ * Revision 1.2 1998/11/25 08:28:38 gklug
+ * rmv: PORT SWITCH Event
+ *
+ * Revision 1.1 1998/09/29 06:14:07 gklug
+ * add: driver events (initial version)
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKGEDRV_H_
+#define __INC_SKGEDRV_H_
+
+/* defines ********************************************************************/
+
+/*
+ * Define the driver events.
+ * Usually the events are defined by the destination module.
+ * In case of the driver we put the definition of the events here.
+ */
+#define SK_DRV_PORT_RESET 1 /* The port needs to be reset */
+#define SK_DRV_NET_UP 2 /* The net is operational */
+#define SK_DRV_NET_DOWN 3 /* The net is down */
+#define SK_DRV_SWITCH_SOFT 4 /* Ports switch with both links connected */
+#define SK_DRV_SWITCH_HARD 5 /* Port switch due to link failure */
+#define SK_DRV_RLMT_SEND 6 /* Send a RLMT packet */
+#define SK_DRV_ADAP_FAIL 7 /* The whole adapter fails */
+#define SK_DRV_PORT_FAIL 8 /* One port fails */
+#define SK_DRV_SWITCH_INTERN 9 /* Port switch by the driver itself */
+#define SK_DRV_POWER_DOWN 10 /* Power down mode */
+
+#endif /* __INC_SKGEDRV_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgehw.h u-boot-2009.03/drivers/net/sk98lin/h/skgehw.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgehw.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgehw.h 2009-03-31 14:54:45.784171200 -0700
@@ -1,2336 +1,2339 @@
-/******************************************************************************
- *
- * Name: skgehw.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.49 $
- * Date: $Date: 2003/01/28 09:43:49 $
- * Purpose: Defines and Macros for the Gigabit Ethernet Adapter Product Family
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- * $Log: skgehw.h,v $
- * Revision 1.49 2003/01/28 09:43:49 rschmidt
- * Added defines for PCI-Spec. 2.3 IRQ
- * Added defines for CLK_RUN (YUKON-Lite)
- * Editorial changes
- *
- * Revision 1.48 2002/12/05 10:25:11 rschmidt
- * Added defines for Half Duplex Burst Mode On/Off
- * Added defines for Rx GMAC FIFO Flush feature
- * Editorial changes
- *
- * Revision 1.47 2002/11/12 17:01:31 rschmidt
- * Added defines for WOL_CTL_DEFAULT
- * Editorial changes
- *
- * Revision 1.46 2002/10/14 14:47:57 rschmidt
- * Corrected bit mask for HW self test results
- * Added defines for WOL Registers
- * Editorial changes
- *
- * Revision 1.45 2002/10/11 09:25:22 mkarl
- * Added bit mask for HW self test results.
- *
- * Revision 1.44 2002/08/16 14:44:36 rschmidt
- * Added define GPC_HWCFG_GMII_FIB for YUKON Fiber
- *
- * Revision 1.43 2002/08/12 13:31:50 rschmidt
- * Corrected macros for GMAC Address Registers: GM_INADDR(),
- * GM_OUTADDR(), GM_INHASH, GM_OUTHASH.
- * Editorial changes
- *
- * Revision 1.42 2002/08/08 15:37:56 rschmidt
- * Added defines for Power Management Capabilities
- * Editorial changes
- *
- * Revision 1.41 2002/07/23 16:02:25 rschmidt
- * Added macro WOL_REG() to access WOL reg. (HW-Bug in YUKON 1st rev.)
- *
- * Revision 1.40 2002/07/15 15:41:37 rschmidt
- * Added new defines for Power Management Cap. & Control
- * Editorial changes
- *
- * Revision 1.39 2002/06/10 09:37:07 rschmidt
- * Added macros for the ADDR-Modul
- *
- * Revision 1.38 2002/06/05 08:15:19 rschmidt
- * Added defines for WOL Registers
- * Editorial changes
- *
- * Revision 1.37 2002/04/25 11:39:23 rschmidt
- * Added new defines for PCI Our Register 1
- * Added new registers and defines for YUKON (Rx FIFO, Tx FIFO,
- * Time Stamp Timer, GMAC Control, GPHY Control,Link Control,
- * GMAC IRQ Source and Mask, Wake-up Frame Pattern Match);
- * Added new defines for Control/Status (VAUX available)
- * Added Chip ID for YUKON
- * Added define for descriptors with UDP ext. for YUKON
- * Added macros to access the GMAC
- * Added new Phy Type for Marvell 88E1011S (GPHY)
- * Editorial changes
- *
- * Revision 1.36 2000/11/09 12:32:49 rassmann
- * Renamed variables.
- *
- * Revision 1.35 2000/05/19 10:17:13 cgoos
- * Added inactivity check in PHY_READ (in DEBUG mode only).
- *
- * Revision 1.34 1999/11/22 13:53:40 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.33 1999/08/27 11:17:10 malthoff
- * It's more savely to put brackets around macro parameters.
- * Brackets added for PHY_READ and PHY_WRITE.
- *
- * Revision 1.32 1999/05/19 07:31:01 cgoos
- * Changes for 1000Base-T.
- * Added HWAC_LINK_LED macro.
- *
- * Revision 1.31 1999/03/12 13:27:40 malthoff
- * Remove __STDC__.
- *
- * Revision 1.30 1999/02/09 09:28:20 malthoff
- * Add PCI_ERRBITS.
- *
- * Revision 1.29 1999/01/26 08:55:48 malthoff
- * Bugfix: The 16 bit field relations inside the descriptor are
- * endianess dependend if the descriptor reversal feature
- * (PCI_REV_DESC bit in PCI_OUR_REG_2) is enabled.
- * Drivers which use this feature has to set the define
- * SK_USE_REV_DESC.
- *
- * Revision 1.28 1998/12/10 11:10:22 malthoff
- * bug fix: IS_IRQ_STAT and IS_IRQ_MST_ERR has been twisted.
- *
- * Revision 1.27 1998/11/13 14:19:21 malthoff
- * Bug Fix: The bit definition of B3_PA_CTRL has completely
- * changed from HW Spec v1.3 to v1.5.
- *
- * Revision 1.26 1998/11/04 08:31:48 cgoos
- * Fixed byte ordering in XM_OUTADDR/XM_OUTHASH macros.
- *
- * Revision 1.25 1998/11/04 07:16:25 cgoos
- * Changed byte ordering in XM_INADDR/XM_INHASH again.
- *
- * Revision 1.24 1998/11/02 11:08:43 malthoff
- * RxCtrl and TxCtrl must be volatile.
- *
- * Revision 1.23 1998/10/28 13:50:45 malthoff
- * Fix: Endian support missing in XM_IN/OUT-ADDR/HASH macros.
- *
- * Revision 1.22 1998/10/26 08:01:36 malthoff
- * RX_MFF_CTRL1 is split up into RX_MFF_CTRL1,
- * RX_MFF_STAT_TO, and RX_MFF_TIST_TO.
- * TX_MFF_CTRL1 is split up TX_MFF_CTRL1 and TX_MFF_WAF.
- *
- * Revision 1.21 1998/10/20 07:43:10 malthoff
- * Fix: XM_IN/OUT/ADDR/HASH macros:
- * The pointer must be casted.
- *
- * Revision 1.20 1998/10/19 15:53:59 malthoff
- * Remove ML proto definitions.
- *
- * Revision 1.19 1998/10/16 14:40:17 gklug
- * fix: typo B0_XM_IMSK regs
- *
- * Revision 1.18 1998/10/16 09:46:54 malthoff
- * Remove temp defines for ML diag prototype.
- * Fix register definition for B0_XM1_PHY_DATA, B0_XM1_PHY_DATA
- * B0_XM2_PHY_DATA, B0_XM2_PHY_ADDR, B0_XA1_CSR, B0_XS1_CSR,
- * B0_XS2_CSR, and B0_XA2_CSR.
- *
- * Revision 1.17 1998/10/14 06:03:14 cgoos
- * Changed shifted constant to ULONG.
- *
- * Revision 1.16 1998/10/09 07:05:41 malthoff
- * Rename ALL_PA_ENA_TO to PA_ENA_TO_ALL.
- *
- * Revision 1.15 1998/10/05 07:54:23 malthoff
- * Split up RB_CTRL and it's bit definition into
- * RB_CTRL, RB_TST1, and RB_TST2.
- * Rename RB_RX_HTPP to RB_RX_LTPP.
- * Add ALL_PA_ENA_TO. Modify F_WATER_MARK
- * according to HW Spec. v1.5.
- * Add MFF_TX_CTRL_DEF.
- *
- * Revision 1.14 1998/09/28 13:31:16 malthoff
- * bug fix: B2_MAC_3 is 0x110 not 0x114
- *
- * Revision 1.13 1998/09/24 14:42:56 malthoff
- * Split the RX_MFF_TST into RX_MFF_CTRL2,
- * RX_MFF_TST1, and RX_MFF_TST2.
- * Rename RX_MFF_CTRL to RX_MFF_CTRL1.
- * Add BMU bit CSR_SV_IDLE.
- * Add macros PHY_READ() and PHY_WRITE().
- * Rename macro SK_ADDR() to SK_HW_ADDR()
- * because of conflicts with the Address Module.
- *
- * Revision 1.12 1998/09/16 07:25:33 malthoff
- * Change the parameter order in the XM_INxx and XM_OUTxx macros,
- * to have the IoC as first parameter.
- *
- * Revision 1.11 1998/09/03 09:58:41 malthoff
- * Rework the XM_xxx macros. Use {} instead of () to
- * be compatible with SK_xxx macros which are defined
- * with {}.
- *
- * Revision 1.10 1998/09/02 11:16:39 malthoff
- * Temporary modify B2_I2C_SW to make tests with
- * the GE/ML prototype.
- *
- * Revision 1.9 1998/08/19 09:11:49 gklug
- * fix: struct are removed from c-source (see CCC)
- * add: typedefs for all structs
- *
- * Revision 1.8 1998/08/18 08:27:27 malthoff
- * Add some temporary workarounds to test GE
- * sources with the ML.
- *
- * Revision 1.7 1998/07/03 14:42:26 malthoff
- * bug fix: Correct macro XMA().
- * Add temporary workaround to access the PCI config space over I/O
- *
- * Revision 1.6 1998/06/23 11:30:36 malthoff
- * Remove ';' with ',' in macors.
- *
- * Revision 1.5 1998/06/22 14:20:57 malthoff
- * Add macro SK_ADDR(Base,Addr).
- *
- * Revision 1.4 1998/06/19 13:35:43 malthoff
- * change 'pGec' with 'pAC'
- *
- * Revision 1.3 1998/06/17 14:58:16 cvs
- * Lost keywords reinserted.
- *
- * Revision 1.1 1998/06/17 14:16:36 cvs
- * created
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_SKGEHW_H
-#define __INC_SKGEHW_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* defines ********************************************************************/
-
-#define BIT_31 (1UL << 31)
-#define BIT_30 (1L << 30)
-#define BIT_29 (1L << 29)
-#define BIT_28 (1L << 28)
-#define BIT_27 (1L << 27)
-#define BIT_26 (1L << 26)
-#define BIT_25 (1L << 25)
-#define BIT_24 (1L << 24)
-#define BIT_23 (1L << 23)
-#define BIT_22 (1L << 22)
-#define BIT_21 (1L << 21)
-#define BIT_20 (1L << 20)
-#define BIT_19 (1L << 19)
-#define BIT_18 (1L << 18)
-#define BIT_17 (1L << 17)
-#define BIT_16 (1L << 16)
-#define BIT_15 (1L << 15)
-#define BIT_14 (1L << 14)
-#define BIT_13 (1L << 13)
-#define BIT_12 (1L << 12)
-#define BIT_11 (1L << 11)
-#define BIT_10 (1L << 10)
-#define BIT_9 (1L << 9)
-#define BIT_8 (1L << 8)
-#define BIT_7 (1L << 7)
-#define BIT_6 (1L << 6)
-#define BIT_5 (1L << 5)
-#define BIT_4 (1L << 4)
-#define BIT_3 (1L << 3)
-#define BIT_2 (1L << 2)
-#define BIT_1 (1L << 1)
-#define BIT_0 1L
-
-#define BIT_15S (1U << 15)
-#define BIT_14S (1 << 14)
-#define BIT_13S (1 << 13)
-#define BIT_12S (1 << 12)
-#define BIT_11S (1 << 11)
-#define BIT_10S (1 << 10)
-#define BIT_9S (1 << 9)
-#define BIT_8S (1 << 8)
-#define BIT_7S (1 << 7)
-#define BIT_6S (1 << 6)
-#define BIT_5S (1 << 5)
-#define BIT_4S (1 << 4)
-#define BIT_3S (1 << 3)
-#define BIT_2S (1 << 2)
-#define BIT_1S (1 << 1)
-#define BIT_0S 1
-
-#define SHIFT31(x) ((x) << 31)
-#define SHIFT30(x) ((x) << 30)
-#define SHIFT29(x) ((x) << 29)
-#define SHIFT28(x) ((x) << 28)
-#define SHIFT27(x) ((x) << 27)
-#define SHIFT26(x) ((x) << 26)
-#define SHIFT25(x) ((x) << 25)
-#define SHIFT24(x) ((x) << 24)
-#define SHIFT23(x) ((x) << 23)
-#define SHIFT22(x) ((x) << 22)
-#define SHIFT21(x) ((x) << 21)
-#define SHIFT20(x) ((x) << 20)
-#define SHIFT19(x) ((x) << 19)
-#define SHIFT18(x) ((x) << 18)
-#define SHIFT17(x) ((x) << 17)
-#define SHIFT16(x) ((x) << 16)
-#define SHIFT15(x) ((x) << 15)
-#define SHIFT14(x) ((x) << 14)
-#define SHIFT13(x) ((x) << 13)
-#define SHIFT12(x) ((x) << 12)
-#define SHIFT11(x) ((x) << 11)
-#define SHIFT10(x) ((x) << 10)
-#define SHIFT9(x) ((x) << 9)
-#define SHIFT8(x) ((x) << 8)
-#define SHIFT7(x) ((x) << 7)
-#define SHIFT6(x) ((x) << 6)
-#define SHIFT5(x) ((x) << 5)
-#define SHIFT4(x) ((x) << 4)
-#define SHIFT3(x) ((x) << 3)
-#define SHIFT2(x) ((x) << 2)
-#define SHIFT1(x) ((x) << 1)
-#define SHIFT0(x) ((x) << 0)
-
-/*
- * Configuration Space header
- * Since this module is used for different OS', those may be
- * duplicate on some of them (e.g. Linux). But to keep the
- * common source, we have to live with this...
- */
-#define PCI_VENDOR_ID 0x00 /* 16 bit Vendor ID */
-#define PCI_DEVICE_ID 0x02 /* 16 bit Device ID */
-#define PCI_COMMAND 0x04 /* 16 bit Command */
-#define PCI_STATUS 0x06 /* 16 bit Status */
-#define PCI_REV_ID 0x08 /* 8 bit Revision ID */
-#if 0
-#define PCI_CLASS_CODE 0x09 /* 24 bit Class Code */
-#endif
-#define PCI_CACHE_LSZ 0x0c /* 8 bit Cache Line Size */
-#define PCI_LAT_TIM 0x0d /* 8 bit Latency Timer */
-#define PCI_HEADER_T 0x0e /* 8 bit Header Type */
-#define PCI_BIST 0x0f /* 8 bit Built-in selftest */
-#define PCI_BASE_1ST 0x10 /* 32 bit 1st Base address */
-#define PCI_BASE_2ND 0x14 /* 32 bit 2nd Base address */
- /* Byte 0x18..0x2b: reserved */
-#define PCI_SUB_VID 0x2c /* 16 bit Subsystem Vendor ID */
-#define PCI_SUB_ID 0x2e /* 16 bit Subsystem ID */
-#define PCI_BASE_ROM 0x30 /* 32 bit Expansion ROM Base Address */
-#define PCI_CAP_PTR 0x34 /* 8 bit Capabilities Ptr */
- /* Byte 35..3b: reserved */
-#define PCI_IRQ_LINE 0x3c /* 8 bit Interrupt Line */
-#define PCI_IRQ_PIN 0x3d /* 8 bit Interrupt Pin */
-#define PCI_MIN_GNT 0x3e /* 8 bit Min_Gnt */
-#define PCI_MAX_LAT 0x3f /* 8 bit Max_Lat */
- /* Device Dependent Region */
-#define PCI_OUR_REG_1 0x40 /* 32 bit Our Register 1 */
-#define PCI_OUR_REG_2 0x44 /* 32 bit Our Register 2 */
- /* Power Management Region */
-#define PCI_PM_CAP_ID 0x48 /* 8 bit Power Management Cap. ID */
-#define PCI_PM_NITEM 0x49 /* 8 bit Next Item Ptr */
-#define PCI_PM_CAP_REG 0x4a /* 16 bit Power Management Capabilities */
-#define PCI_PM_CTL_STS 0x4c /* 16 bit Power Manag. Control/Status */
- /* Byte 0x4e: reserved */
-#define PCI_PM_DAT_REG 0x4f /* 8 bit Power Manag. Data Register */
- /* VPD Region */
-#define PCI_VPD_CAP_ID 0x50 /* 8 bit VPD Cap. ID */
-#define PCI_VPD_NITEM 0x51 /* 8 bit Next Item Ptr */
-#define PCI_VPD_ADR_REG 0x52 /* 16 bit VPD Address Register */
-#define PCI_VPD_DAT_REG 0x54 /* 32 bit VPD Data Register */
- /* Byte 0x58..0xff: reserved */
-
-/*
- * I2C Address (PCI Config)
- *
- * Note: The temperature and voltage sensors are relocated on a different
- * I2C bus.
- */
-#define I2C_ADDR_VPD 0xA0 /* I2C address for the VPD EEPROM */
-
-/*
- * Define Bits and Values of the registers
- */
-/* PCI_COMMAND 16 bit Command */
- /* Bit 15..11: reserved */
-#define PCI_INT_DIS BIT_10S /* Interrupt INTx# disable (PCI 2.3) */
-#define PCI_FBTEN BIT_9S /* Fast Back-To-Back enable */
-#define PCI_SERREN BIT_8S /* SERR enable */
-#define PCI_ADSTEP BIT_7S /* Address Stepping */
-#define PCI_PERREN BIT_6S /* Parity Report Response enable */
-#define PCI_VGA_SNOOP BIT_5S /* VGA palette snoop */
-#define PCI_MWIEN BIT_4S /* Memory write an inv cycl ena */
-#define PCI_SCYCEN BIT_3S /* Special Cycle enable */
-#define PCI_BMEN BIT_2S /* Bus Master enable */
-#define PCI_MEMEN BIT_1S /* Memory Space Access enable */
-#define PCI_IOEN BIT_0S /* I/O Space Access enable */
-
-#define PCI_COMMAND_VAL (PCI_FBTEN | PCI_SERREN | PCI_PERREN | PCI_MWIEN |\
- PCI_BMEN | PCI_MEMEN | PCI_IOEN)
-
-/* PCI_STATUS 16 bit Status */
-#define PCI_PERR BIT_15S /* Parity Error */
-#define PCI_SERR BIT_14S /* Signaled SERR */
-#define PCI_RMABORT BIT_13S /* Received Master Abort */
-#define PCI_RTABORT BIT_12S /* Received Target Abort */
- /* Bit 11: reserved */
-#define PCI_DEVSEL (3<<9) /* Bit 10.. 9: DEVSEL Timing */
-#define PCI_DEV_FAST (0<<9) /* fast */
-#define PCI_DEV_MEDIUM (1<<9) /* medium */
-#define PCI_DEV_SLOW (2<<9) /* slow */
-#define PCI_DATAPERR BIT_8S /* DATA Parity error detected */
-#define PCI_FB2BCAP BIT_7S /* Fast Back-to-Back Capability */
-#define PCI_UDF BIT_6S /* User Defined Features */
-#define PCI_66MHZCAP BIT_5S /* 66 MHz PCI bus clock capable */
-#define PCI_NEWCAP BIT_4S /* New cap. list implemented */
-#define PCI_INT_STAT BIT_3S /* Interrupt INTx# Status (PCI 2.3) */
- /* Bit 2.. 0: reserved */
-
-#define PCI_ERRBITS (PCI_PERR | PCI_SERR | PCI_RMABORT | PCI_RTABORT |\
- PCI_DATAPERR)
-
-/* PCI_CLASS_CODE 24 bit Class Code */
-/* Byte 2: Base Class (02) */
-/* Byte 1: SubClass (00) */
-/* Byte 0: Programming Interface (00) */
-
-/* PCI_CACHE_LSZ 8 bit Cache Line Size */
-/* Possible values: 0,2,4,8,16,32,64,128 */
-
-/* PCI_HEADER_T 8 bit Header Type */
-#define PCI_HD_MF_DEV BIT_7S /* 0= single, 1= multi-func dev */
-#define PCI_HD_TYPE 0x7f /* Bit 6..0: Header Layout 0= normal */
-
-/* PCI_BIST 8 bit Built-in selftest */
-/* Built-in Self test not supported (optional) */
-
-/* PCI_BASE_1ST 32 bit 1st Base address */
-#define PCI_MEMSIZE 0x4000L /* use 16 kB Memory Base */
-#define PCI_MEMBASE_MSK 0xffffc000L /* Bit 31..14: Memory Base Address */
-#define PCI_MEMSIZE_MSK 0x00003ff0L /* Bit 13.. 4: Memory Size Req. */
-#define PCI_PREFEN BIT_3 /* Prefetchable */
-#define PCI_MEM_TYP (3L<<2) /* Bit 2.. 1: Memory Type */
-#define PCI_MEM32BIT (0L<<1) /* Base addr anywhere in 32 Bit range */
-#define PCI_MEM1M (1L<<1) /* Base addr below 1 MegaByte */
-#define PCI_MEM64BIT (2L<<1) /* Base addr anywhere in 64 Bit range */
-#define PCI_MEMSPACE BIT_0 /* Memory Space Indic. */
-
-/* PCI_BASE_2ND 32 bit 2nd Base address */
-#define PCI_IOBASE 0xffffff00L /* Bit 31.. 8: I/O Base address */
-#define PCI_IOSIZE 0x000000fcL /* Bit 7.. 2: I/O Size Requirements */
- /* Bit 1: reserved */
-#define PCI_IOSPACE BIT_0 /* I/O Space Indicator */
-
-/* PCI_BASE_ROM 32 bit Expansion ROM Base Address */
-#define PCI_ROMBASE 0xfffe0000L /* Bit 31..17: ROM BASE address (1st)*/
-#define PCI_ROMBASZ (0x1cL<<14) /* Bit 16..14: Treat as BASE or SIZE */
-#define PCI_ROMSIZE (0x38L<<11) /* Bit 13..11: ROM Size Requirements */
- /* Bit 10.. 1: reserved */
-#define PCI_ROMEN BIT_0 /* Address Decode enable */
-
-/* Device Dependent Region */
-/* PCI_OUR_REG_1 32 bit Our Register 1 */
- /* Bit 31..29: reserved */
-#define PCI_PHY_COMA BIT_28 /* Set PHY to Coma Mode */
-#define PCI_EN_CAL BIT_27 /* Enable PCI buffer strength calibr. */
-#define PCI_DIS_CAL BIT_26 /* Disable PCI buffer strength calibr. */
-#define PCI_VIO BIT_25 /* PCI I/O Voltage, 0 = 3.3V, 1 = 5V */
-#define PCI_DIS_BOOT BIT_24 /* Disable BOOT via ROM */
-#define PCI_EN_IO BIT_23 /* Mapping to I/O space */
-#define PCI_EN_FPROM BIT_22 /* Enable FLASH mapping to memory */
- /* 1 = Map Flash to memory */
- /* 0 = Disable addr. dec */
-#define PCI_PAGESIZE (3L<<20) /* Bit 21..20: FLASH Page Size */
-#define PCI_PAGE_16 (0L<<20) /* 16 k pages */
-#define PCI_PAGE_32K (1L<<20) /* 32 k pages */
-#define PCI_PAGE_64K (2L<<20) /* 64 k pages */
-#define PCI_PAGE_128K (3L<<20) /* 128 k pages */
- /* Bit 19: reserved */
-#define PCI_PAGEREG (7L<<16) /* Bit 18..16: Page Register */
-#define PCI_NOTAR BIT_15 /* No turnaround cycle */
-#define PCI_FORCE_BE BIT_14 /* Assert all BEs on MR */
-#define PCI_DIS_MRL BIT_13 /* Disable Mem Read Line */
-#define PCI_DIS_MRM BIT_12 /* Disable Mem Read Multiple */
-#define PCI_DIS_MWI BIT_11 /* Disable Mem Write & Invalidate */
-#define PCI_DISC_CLS BIT_10 /* Disc: cacheLsz bound */
-#define PCI_BURST_DIS BIT_9 /* Burst Disable */
-#define PCI_DIS_PCI_CLK BIT_8 /* Disable PCI clock driving */
-#define PCI_SKEW_DAS (0xfL<<4) /* Bit 7.. 4: Skew Ctrl, DAS Ext */
-#define PCI_SKEW_BASE 0xfL /* Bit 3.. 0: Skew Ctrl, Base */
-
-
-/* PCI_OUR_REG_2 32 bit Our Register 2 */
-#define PCI_VPD_WR_THR (0xffL<<24) /* Bit 31..24: VPD Write Threshold */
-#define PCI_DEV_SEL (0x7fL<<17) /* Bit 23..17: EEPROM Device Select */
-#define PCI_VPD_ROM_SZ (7L<<14) /* Bit 16..14: VPD ROM Size */
- /* Bit 13..12: reserved */
-#define PCI_PATCH_DIR (0xfL<<8) /* Bit 11.. 8: Ext Patches dir 3..0 */
-#define PCI_PATCH_DIR_3 BIT_11
-#define PCI_PATCH_DIR_2 BIT_10
-#define PCI_PATCH_DIR_1 BIT_9
-#define PCI_PATCH_DIR_0 BIT_8
-#define PCI_EXT_PATCHS (0xfL<<4) /* Bit 7.. 4: Extended Patches 3..0 */
-#define PCI_EXT_PATCH_3 BIT_7
-#define PCI_EXT_PATCH_2 BIT_6
-#define PCI_EXT_PATCH_1 BIT_5
-#define PCI_EXT_PATCH_0 BIT_4
-#define PCI_EN_DUMMY_RD BIT_3 /* Enable Dummy Read */
-#define PCI_REV_DESC BIT_2 /* Reverse Desc. Bytes */
- /* Bit 1: reserved */
-#define PCI_USEDATA64 BIT_0 /* Use 64Bit Data bus ext */
-
-
-/* Power Management Region */
-/* PCI_PM_CAP_REG 16 bit Power Management Capabilities */
-#define PCI_PME_SUP_MSK (0x1f<<11) /* Bit 15..11: PM Event Support Mask */
-#define PCI_PME_D3C_SUP BIT_15S /* PME from D3cold Support (if Vaux) */
-#define PCI_PME_D3H_SUP BIT_14S /* PME from D3hot Support */
-#define PCI_PME_D2_SUP BIT_13S /* PME from D2 Support */
-#define PCI_PME_D1_SUP BIT_12S /* PME from D1 Support */
-#define PCI_PME_D0_SUP BIT_11S /* PME from D0 Support */
-#define PCI_PM_D2_SUP BIT_10S /* D2 Support in 33 MHz mode */
-#define PCI_PM_D1_SUP BIT_9S /* D1 Support */
- /* Bit 8.. 6: reserved */
-#define PCI_PM_DSI BIT_5S /* Device Specific Initialization */
-#define PCI_PM_APS BIT_4S /* Auxialiary Power Source */
-#define PCI_PME_CLOCK BIT_3S /* PM Event Clock */
-#define PCI_PM_VER_MSK 7 /* Bit 2.. 0: PM PCI Spec. version */
-
-/* PCI_PM_CTL_STS 16 bit Power Management Control/Status */
-#define PCI_PME_STATUS BIT_15S /* PME Status (YUKON only) */
-#define PCI_PM_DAT_SCL (3<<13) /* Bit 14..13: Data Reg. scaling factor */
-#define PCI_PM_DAT_SEL (0xf<<9) /* Bit 12.. 9: PM data selector field */
-#define PCI_PME_EN BIT_8S /* Enable PME# generation (YUKON only) */
- /* Bit 7.. 2: reserved */
-#define PCI_PM_STATE_MSK 3 /* Bit 1.. 0: Power Management State */
-
-#define PCI_PM_STATE_D0 0 /* D0: Operational (default) */
-#define PCI_PM_STATE_D1 1 /* D1: (YUKON only) */
-#define PCI_PM_STATE_D2 2 /* D2: (YUKON only) */
-#define PCI_PM_STATE_D3 3 /* D3: HOT, Power Down and Reset */
-
-/* VPD Region */
-/* PCI_VPD_ADR_REG 16 bit VPD Address Register */
-#define PCI_VPD_FLAG BIT_15S /* starts VPD rd/wr cycle */
-#define PCI_VPD_ADR_MSK 0x7fffL /* Bit 14.. 0: VPD address mask */
-
-/* Control Register File (Address Map) */
-
-/*
- * Bank 0
- */
-#define B0_RAP 0x0000 /* 8 bit Register Address Port */
- /* 0x0001 - 0x0003: reserved */
-#define B0_CTST 0x0004 /* 16 bit Control/Status register */
-#define B0_LED 0x0006 /* 8 Bit LED register */
-#define B0_POWER_CTRL 0x0007 /* 8 Bit Power Control reg (YUKON only) */
-#define B0_ISRC 0x0008 /* 32 bit Interrupt Source Register */
-#define B0_IMSK 0x000c /* 32 bit Interrupt Mask Register */
-#define B0_HWE_ISRC 0x0010 /* 32 bit HW Error Interrupt Src Reg */
-#define B0_HWE_IMSK 0x0014 /* 32 bit HW Error Interrupt Mask Reg */
-#define B0_SP_ISRC 0x0018 /* 32 bit Special Interrupt Source Reg */
- /* 0x001c: reserved */
-
-/* B0 XMAC 1 registers (GENESIS only) */
-#define B0_XM1_IMSK 0x0020 /* 16 bit r/w XMAC 1 Interrupt Mask Register*/
- /* 0x0022 - 0x0027: reserved */
-#define B0_XM1_ISRC 0x0028 /* 16 bit ro XMAC 1 Interrupt Status Reg */
- /* 0x002a - 0x002f: reserved */
-#define B0_XM1_PHY_ADDR 0x0030 /* 16 bit r/w XMAC 1 PHY Address Register */
- /* 0x0032 - 0x0033: reserved */
-#define B0_XM1_PHY_DATA 0x0034 /* 16 bit r/w XMAC 1 PHY Data Register */
- /* 0x0036 - 0x003f: reserved */
-
-/* B0 XMAC 2 registers (GENESIS only) */
-#define B0_XM2_IMSK 0x0040 /* 16 bit r/w XMAC 2 Interrupt Mask Register*/
- /* 0x0042 - 0x0047: reserved */
-#define B0_XM2_ISRC 0x0048 /* 16 bit ro XMAC 2 Interrupt Status Reg */
- /* 0x004a - 0x004f: reserved */
-#define B0_XM2_PHY_ADDR 0x0050 /* 16 bit r/w XMAC 2 PHY Address Register */
- /* 0x0052 - 0x0053: reserved */
-#define B0_XM2_PHY_DATA 0x0054 /* 16 bit r/w XMAC 2 PHY Data Register */
- /* 0x0056 - 0x005f: reserved */
-
-/* BMU Control Status Registers */
-#define B0_R1_CSR 0x0060 /* 32 bit BMU Ctrl/Stat Rx Queue 1 */
-#define B0_R2_CSR 0x0064 /* 32 bit BMU Ctrl/Stat Rx Queue 2 */
-#define B0_XS1_CSR 0x0068 /* 32 bit BMU Ctrl/Stat Sync Tx Queue 1 */
-#define B0_XA1_CSR 0x006c /* 32 bit BMU Ctrl/Stat Async Tx Queue 1*/
-#define B0_XS2_CSR 0x0070 /* 32 bit BMU Ctrl/Stat Sync Tx Queue 2 */
-#define B0_XA2_CSR 0x0074 /* 32 bit BMU Ctrl/Stat Async Tx Queue 2*/
- /* 0x0078 - 0x007f: reserved */
-
-/*
- * Bank 1
- * - completely empty (this is the RAP Block window)
- * Note: if RAP = 1 this page is reserved
- */
-
-/*
- * Bank 2
- */
-/* NA reg = 48 bit Network Address Register, 3x16 or 8x8 bit readable */
-#define B2_MAC_1 0x0100 /* NA reg MAC Address 1 */
- /* 0x0106 - 0x0107: reserved */
-#define B2_MAC_2 0x0108 /* NA reg MAC Address 2 */
- /* 0x010e - 0x010f: reserved */
-#define B2_MAC_3 0x0110 /* NA reg MAC Address 3 */
- /* 0x0116 - 0x0117: reserved */
-#define B2_CONN_TYP 0x0118 /* 8 bit Connector type */
-#define B2_PMD_TYP 0x0119 /* 8 bit PMD type */
-#define B2_MAC_CFG 0x011a /* 8 bit MAC Configuration / Chip Revision */
-#define B2_CHIP_ID 0x011b /* 8 bit Chip Identification Number */
- /* Eprom registers are currently of no use */
-#define B2_E_0 0x011c /* 8 bit EPROM Byte 0 (ext. SRAM size */
-#define B2_E_1 0x011d /* 8 bit EPROM Byte 1 (PHY type) */
-#define B2_E_2 0x011e /* 8 bit EPROM Byte 2 */
-#define B2_E_3 0x011f /* 8 bit EPROM Byte 3 */
-#define B2_FAR 0x0120 /* 32 bit Flash-Prom Addr Reg/Cnt */
-#define B2_FDP 0x0124 /* 8 bit Flash-Prom Data Port */
- /* 0x0125 - 0x0127: reserved */
-#define B2_LD_CRTL 0x0128 /* 8 bit EPROM loader control register */
-#define B2_LD_TEST 0x0129 /* 8 bit EPROM loader test register */
- /* 0x012a - 0x012f: reserved */
-#define B2_TI_INI 0x0130 /* 32 bit Timer Init Value */
-#define B2_TI_VAL 0x0134 /* 32 bit Timer Value */
-#define B2_TI_CRTL 0x0138 /* 8 bit Timer Control */
-#define B2_TI_TEST 0x0139 /* 8 Bit Timer Test */
- /* 0x013a - 0x013f: reserved */
-#define B2_IRQM_INI 0x0140 /* 32 bit IRQ Moderation Timer Init Reg.*/
-#define B2_IRQM_VAL 0x0144 /* 32 bit IRQ Moderation Timer Value */
-#define B2_IRQM_CTRL 0x0148 /* 8 bit IRQ Moderation Timer Control */
-#define B2_IRQM_TEST 0x0149 /* 8 bit IRQ Moderation Timer Test */
-#define B2_IRQM_MSK 0x014c /* 32 bit IRQ Moderation Mask */
-#define B2_IRQM_HWE_MSK 0x0150 /* 32 bit IRQ Moderation HW Error Mask */
- /* 0x0154 - 0x0157: reserved */
-#define B2_TST_CTRL1 0x0158 /* 8 bit Test Control Register 1 */
-#define B2_TST_CTRL2 0x0159 /* 8 bit Test Control Register 2 */
- /* 0x015a - 0x015b: reserved */
-#define B2_GP_IO 0x015c /* 32 bit General Purpose I/O Register */
-#define B2_I2C_CTRL 0x0160 /* 32 bit I2C HW Control Register */
-#define B2_I2C_DATA 0x0164 /* 32 bit I2C HW Data Register */
-#define B2_I2C_IRQ 0x0168 /* 32 bit I2C HW IRQ Register */
-#define B2_I2C_SW 0x016c /* 32 bit I2C SW Port Register */
-
-/* Blink Source Counter (GENESIS only) */
-#define B2_BSC_INI 0x0170 /* 32 bit Blink Source Counter Init Val */
-#define B2_BSC_VAL 0x0174 /* 32 bit Blink Source Counter Value */
-#define B2_BSC_CTRL 0x0178 /* 8 bit Blink Source Counter Control */
-#define B2_BSC_STAT 0x0179 /* 8 bit Blink Source Counter Status */
-#define B2_BSC_TST 0x017a /* 16 bit Blink Source Counter Test Reg */
- /* 0x017c - 0x017f: reserved */
-
-/*
- * Bank 3
- */
-/* RAM Random Registers */
-#define B3_RAM_ADDR 0x0180 /* 32 bit RAM Address, to read or write */
-#define B3_RAM_DATA_LO 0x0184 /* 32 bit RAM Data Word (low dWord) */
-#define B3_RAM_DATA_HI 0x0188 /* 32 bit RAM Data Word (high dWord) */
- /* 0x018c - 0x018f: reserved */
-
-/* RAM Interface Registers */
-/*
- * The HW-Spec. calls this registers Timeout Value 0..11. But this names are
- * not usable in SW. Please notice these are NOT real timeouts, these are
- * the number of qWords transferred continuously.
- */
-#define B3_RI_WTO_R1 0x0190 /* 8 bit WR Timeout Queue R1 (TO0) */
-#define B3_RI_WTO_XA1 0x0191 /* 8 bit WR Timeout Queue XA1 (TO1) */
-#define B3_RI_WTO_XS1 0x0192 /* 8 bit WR Timeout Queue XS1 (TO2) */
-#define B3_RI_RTO_R1 0x0193 /* 8 bit RD Timeout Queue R1 (TO3) */
-#define B3_RI_RTO_XA1 0x0194 /* 8 bit RD Timeout Queue XA1 (TO4) */
-#define B3_RI_RTO_XS1 0x0195 /* 8 bit RD Timeout Queue XS1 (TO5) */
-#define B3_RI_WTO_R2 0x0196 /* 8 bit WR Timeout Queue R2 (TO6) */
-#define B3_RI_WTO_XA2 0x0197 /* 8 bit WR Timeout Queue XA2 (TO7) */
-#define B3_RI_WTO_XS2 0x0198 /* 8 bit WR Timeout Queue XS2 (TO8) */
-#define B3_RI_RTO_R2 0x0199 /* 8 bit RD Timeout Queue R2 (TO9) */
-#define B3_RI_RTO_XA2 0x019a /* 8 bit RD Timeout Queue XA2 (TO10)*/
-#define B3_RI_RTO_XS2 0x019b /* 8 bit RD Timeout Queue XS2 (TO11)*/
-#define B3_RI_TO_VAL 0x019c /* 8 bit Current Timeout Count Val */
- /* 0x019d - 0x019f: reserved */
-#define B3_RI_CTRL 0x01a0 /* 16 bit RAM Interface Control Register */
-#define B3_RI_TEST 0x01a2 /* 8 bit RAM Interface Test Register */
- /* 0x01a3 - 0x01af: reserved */
-
-/* MAC Arbiter Registers (GENESIS only) */
-/* these are the no. of qWord transferred continuously and NOT real timeouts */
-#define B3_MA_TOINI_RX1 0x01b0 /* 8 bit Timeout Init Val Rx Path MAC 1 */
-#define B3_MA_TOINI_RX2 0x01b1 /* 8 bit Timeout Init Val Rx Path MAC 2 */
-#define B3_MA_TOINI_TX1 0x01b2 /* 8 bit Timeout Init Val Tx Path MAC 1 */
-#define B3_MA_TOINI_TX2 0x01b3 /* 8 bit Timeout Init Val Tx Path MAC 2 */
-#define B3_MA_TOVAL_RX1 0x01b4 /* 8 bit Timeout Value Rx Path MAC 1 */
-#define B3_MA_TOVAL_RX2 0x01b5 /* 8 bit Timeout Value Rx Path MAC 1 */
-#define B3_MA_TOVAL_TX1 0x01b6 /* 8 bit Timeout Value Tx Path MAC 2 */
-#define B3_MA_TOVAL_TX2 0x01b7 /* 8 bit Timeout Value Tx Path MAC 2 */
-#define B3_MA_TO_CTRL 0x01b8 /* 16 bit MAC Arbiter Timeout Ctrl Reg */
-#define B3_MA_TO_TEST 0x01ba /* 16 bit MAC Arbiter Timeout Test Reg */
- /* 0x01bc - 0x01bf: reserved */
-#define B3_MA_RCINI_RX1 0x01c0 /* 8 bit Recovery Init Val Rx Path MAC 1 */
-#define B3_MA_RCINI_RX2 0x01c1 /* 8 bit Recovery Init Val Rx Path MAC 2 */
-#define B3_MA_RCINI_TX1 0x01c2 /* 8 bit Recovery Init Val Tx Path MAC 1 */
-#define B3_MA_RCINI_TX2 0x01c3 /* 8 bit Recovery Init Val Tx Path MAC 2 */
-#define B3_MA_RCVAL_RX1 0x01c4 /* 8 bit Recovery Value Rx Path MAC 1 */
-#define B3_MA_RCVAL_RX2 0x01c5 /* 8 bit Recovery Value Rx Path MAC 1 */
-#define B3_MA_RCVAL_TX1 0x01c6 /* 8 bit Recovery Value Tx Path MAC 2 */
-#define B3_MA_RCVAL_TX2 0x01c7 /* 8 bit Recovery Value Tx Path MAC 2 */
-#define B3_MA_RC_CTRL 0x01c8 /* 16 bit MAC Arbiter Recovery Ctrl Reg */
-#define B3_MA_RC_TEST 0x01ca /* 16 bit MAC Arbiter Recovery Test Reg */
- /* 0x01cc - 0x01cf: reserved */
-
-/* Packet Arbiter Registers (GENESIS only) */
-/* these are real timeouts */
-#define B3_PA_TOINI_RX1 0x01d0 /* 16 bit Timeout Init Val Rx Path MAC 1 */
- /* 0x01d2 - 0x01d3: reserved */
-#define B3_PA_TOINI_RX2 0x01d4 /* 16 bit Timeout Init Val Rx Path MAC 2 */
- /* 0x01d6 - 0x01d7: reserved */
-#define B3_PA_TOINI_TX1 0x01d8 /* 16 bit Timeout Init Val Tx Path MAC 1 */
- /* 0x01da - 0x01db: reserved */
-#define B3_PA_TOINI_TX2 0x01dc /* 16 bit Timeout Init Val Tx Path MAC 2 */
- /* 0x01de - 0x01df: reserved */
-#define B3_PA_TOVAL_RX1 0x01e0 /* 16 bit Timeout Val Rx Path MAC 1 */
- /* 0x01e2 - 0x01e3: reserved */
-#define B3_PA_TOVAL_RX2 0x01e4 /* 16 bit Timeout Val Rx Path MAC 2 */
- /* 0x01e6 - 0x01e7: reserved */
-#define B3_PA_TOVAL_TX1 0x01e8 /* 16 bit Timeout Val Tx Path MAC 1 */
- /* 0x01ea - 0x01eb: reserved */
-#define B3_PA_TOVAL_TX2 0x01ec /* 16 bit Timeout Val Tx Path MAC 2 */
- /* 0x01ee - 0x01ef: reserved */
-#define B3_PA_CTRL 0x01f0 /* 16 bit Packet Arbiter Ctrl Register */
-#define B3_PA_TEST 0x01f2 /* 16 bit Packet Arbiter Test Register */
- /* 0x01f4 - 0x01ff: reserved */
-
-/*
- * Bank 4 - 5
- */
-/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
-#define TXA_ITI_INI 0x0200 /* 32 bit Tx Arb Interval Timer Init Val*/
-#define TXA_ITI_VAL 0x0204 /* 32 bit Tx Arb Interval Timer Value */
-#define TXA_LIM_INI 0x0208 /* 32 bit Tx Arb Limit Counter Init Val */
-#define TXA_LIM_VAL 0x020c /* 32 bit Tx Arb Limit Counter Value */
-#define TXA_CTRL 0x0210 /* 8 bit Tx Arbiter Control Register */
-#define TXA_TEST 0x0211 /* 8 bit Tx Arbiter Test Register */
-#define TXA_STAT 0x0212 /* 8 bit Tx Arbiter Status Register */
- /* 0x0213 - 0x027f: reserved */
- /* 0x0280 - 0x0292: MAC 2 */
- /* 0x0213 - 0x027f: reserved */
-
-/*
- * Bank 6
- */
-/* External registers (GENESIS only) */
-#define B6_EXT_REG 0x0300
-
-/*
- * Bank 7
- */
-/* This is a copy of the Configuration register file (lower half) */
-#define B7_CFG_SPC 0x0380
-
-/*
- * Bank 8 - 15
- */
-/* Receive and Transmit Queue Registers, use Q_ADDR() to access */
-#define B8_Q_REGS 0x0400
-
-/* Queue Register Offsets, use Q_ADDR() to access */
-#define Q_D 0x00 /* 8*32 bit Current Descriptor */
-#define Q_DA_L 0x20 /* 32 bit Current Descriptor Address Low dWord */
-#define Q_DA_H 0x24 /* 32 bit Current Descriptor Address High dWord */
-#define Q_AC_L 0x28 /* 32 bit Current Address Counter Low dWord */
-#define Q_AC_H 0x2c /* 32 bit Current Address Counter High dWord */
-#define Q_BC 0x30 /* 32 bit Current Byte Counter */
-#define Q_CSR 0x34 /* 32 bit BMU Control/Status Register */
-#define Q_F 0x38 /* 32 bit Flag Register */
-#define Q_T1 0x3c /* 32 bit Test Register 1 */
-#define Q_T1_TR 0x3c /* 8 bit Test Register 1 Transfer SM */
-#define Q_T1_WR 0x3d /* 8 bit Test Register 1 Write Descriptor SM */
-#define Q_T1_RD 0x3e /* 8 bit Test Register 1 Read Descriptor SM */
-#define Q_T1_SV 0x3f /* 8 bit Test Register 1 Supervisor SM */
-#define Q_T2 0x40 /* 32 bit Test Register 2 */
-#define Q_T3 0x44 /* 32 bit Test Register 3 */
- /* 0x48 - 0x7f: reserved */
-
-/*
- * Bank 16 - 23
- */
-/* RAM Buffer Registers */
-#define B16_RAM_REGS 0x0800
-
-/* RAM Buffer Register Offsets, use RB_ADDR() to access */
-#define RB_START 0x00 /* 32 bit RAM Buffer Start Address */
-#define RB_END 0x04 /* 32 bit RAM Buffer End Address */
-#define RB_WP 0x08 /* 32 bit RAM Buffer Write Pointer */
-#define RB_RP 0x0c /* 32 bit RAM Buffer Read Pointer */
-#define RB_RX_UTPP 0x10 /* 32 bit Rx Upper Threshold, Pause Pack */
-#define RB_RX_LTPP 0x14 /* 32 bit Rx Lower Threshold, Pause Pack */
-#define RB_RX_UTHP 0x18 /* 32 bit Rx Upper Threshold, High Prio */
-#define RB_RX_LTHP 0x1c /* 32 bit Rx Lower Threshold, High Prio */
- /* 0x10 - 0x1f: reserved at Tx RAM Buffer Registers */
-#define RB_PC 0x20 /* 32 bit RAM Buffer Packet Counter */
-#define RB_LEV 0x24 /* 32 bit RAM Buffer Level Register */
-#define RB_CTRL 0x28 /* 8 bit RAM Buffer Control Register */
-#define RB_TST1 0x29 /* 8 bit RAM Buffer Test Register 1 */
-#define RB_TST2 0x2A /* 8 bit RAM Buffer Test Register 2 */
- /* 0x2c - 0x7f: reserved */
-
-/*
- * Bank 24
- */
-/*
- * Receive MAC FIFO, Receive LED, and Link_Sync regs (GENESIS only)
- * use MR_ADDR() to access
- */
-#define RX_MFF_EA 0x0c00 /* 32 bit Receive MAC FIFO End Address */
-#define RX_MFF_WP 0x0c04 /* 32 bit Receive MAC FIFO Write Pointer */
- /* 0x0c08 - 0x0c0b: reserved */
-#define RX_MFF_RP 0x0c0c /* 32 bit Receive MAC FIFO Read Pointer */
-#define RX_MFF_PC 0x0c10 /* 32 bit Receive MAC FIFO Packet Cnt */
-#define RX_MFF_LEV 0x0c14 /* 32 bit Receive MAC FIFO Level */
-#define RX_MFF_CTRL1 0x0c18 /* 16 bit Receive MAC FIFO Control Reg 1*/
-#define RX_MFF_STAT_TO 0x0c1a /* 8 bit Receive MAC Status Timeout */
-#define RX_MFF_TIST_TO 0x0c1b /* 8 bit Receive MAC Time Stamp Timeout */
-#define RX_MFF_CTRL2 0x0c1c /* 8 bit Receive MAC FIFO Control Reg 2*/
-#define RX_MFF_TST1 0x0c1d /* 8 bit Receive MAC FIFO Test Reg 1 */
-#define RX_MFF_TST2 0x0c1e /* 8 bit Receive MAC FIFO Test Reg 2 */
- /* 0x0c1f: reserved */
-#define RX_LED_INI 0x0c20 /* 32 bit Receive LED Cnt Init Value */
-#define RX_LED_VAL 0x0c24 /* 32 bit Receive LED Cnt Current Value */
-#define RX_LED_CTRL 0x0c28 /* 8 bit Receive LED Cnt Control Reg */
-#define RX_LED_TST 0x0c29 /* 8 bit Receive LED Cnt Test Register */
- /* 0x0c2a - 0x0c2f: reserved */
-#define LNK_SYNC_INI 0x0c30 /* 32 bit Link Sync Cnt Init Value */
-#define LNK_SYNC_VAL 0x0c34 /* 32 bit Link Sync Cnt Current Value */
-#define LNK_SYNC_CTRL 0x0c38 /* 8 bit Link Sync Cnt Control Register */
-#define LNK_SYNC_TST 0x0c39 /* 8 bit Link Sync Cnt Test Register */
- /* 0x0c3a - 0x0c3b: reserved */
-#define LNK_LED_REG 0x0c3c /* 8 bit Link LED Register */
- /* 0x0c3d - 0x0c3f: reserved */
-
-/* Receive GMAC FIFO (YUKON only), use MR_ADDR() to access */
-#define RX_GMF_EA 0x0c40 /* 32 bit Rx GMAC FIFO End Address */
-#define RX_GMF_AF_THR 0x0c44 /* 32 bit Rx GMAC FIFO Almost Full Thresh. */
-#define RX_GMF_CTRL_T 0x0c48 /* 32 bit Rx GMAC FIFO Control/Test */
-#define RX_GMF_FL_MSK 0x0c4c /* 32 bit Rx GMAC FIFO Flush Mask */
-#define RX_GMF_FL_THR 0x0c50 /* 32 bit Rx GMAC FIFO Flush Threshold */
- /* 0x0c54 - 0x0c5f: reserved */
-#define RX_GMF_WP 0x0c60 /* 32 bit Rx GMAC FIFO Write Pointer */
- /* 0x0c64 - 0x0c67: reserved */
-#define RX_GMF_WLEV 0x0c68 /* 32 bit Rx GMAC FIFO Write Level */
- /* 0x0c6c - 0x0c6f: reserved */
-#define RX_GMF_RP 0x0c70 /* 32 bit Rx GMAC FIFO Read Pointer */
- /* 0x0c74 - 0x0c77: reserved */
-#define RX_GMF_RLEV 0x0c78 /* 32 bit Rx GMAC FIFO Read Level */
- /* 0x0c7c - 0x0c7f: reserved */
-
-/*
- * Bank 25
- */
- /* 0x0c80 - 0x0cbf: MAC 2 */
- /* 0x0cc0 - 0x0cff: reserved */
-
-/*
- * Bank 26
- */
-/*
- * Transmit MAC FIFO and Transmit LED Registers (GENESIS only),
- * use MR_ADDR() to access
- */
-#define TX_MFF_EA 0x0d00 /* 32 bit Transmit MAC FIFO End Address */
-#define TX_MFF_WP 0x0d04 /* 32 bit Transmit MAC FIFO WR Pointer */
-#define TX_MFF_WSP 0x0d08 /* 32 bit Transmit MAC FIFO WR Shadow Ptr */
-#define TX_MFF_RP 0x0d0c /* 32 bit Transmit MAC FIFO RD Pointer */
-#define TX_MFF_PC 0x0d10 /* 32 bit Transmit MAC FIFO Packet Cnt */
-#define TX_MFF_LEV 0x0d14 /* 32 bit Transmit MAC FIFO Level */
-#define TX_MFF_CTRL1 0x0d18 /* 16 bit Transmit MAC FIFO Ctrl Reg 1 */
-#define TX_MFF_WAF 0x0d1a /* 8 bit Transmit MAC Wait after flush */
- /* 0x0c1b: reserved */
-#define TX_MFF_CTRL2 0x0d1c /* 8 bit Transmit MAC FIFO Ctrl Reg 2 */
-#define TX_MFF_TST1 0x0d1d /* 8 bit Transmit MAC FIFO Test Reg 1 */
-#define TX_MFF_TST2 0x0d1e /* 8 bit Transmit MAC FIFO Test Reg 2 */
- /* 0x0d1f: reserved */
-#define TX_LED_INI 0x0d20 /* 32 bit Transmit LED Cnt Init Value */
-#define TX_LED_VAL 0x0d24 /* 32 bit Transmit LED Cnt Current Val */
-#define TX_LED_CTRL 0x0d28 /* 8 bit Transmit LED Cnt Control Reg */
-#define TX_LED_TST 0x0d29 /* 8 bit Transmit LED Cnt Test Reg */
- /* 0x0d2a - 0x0d3f: reserved */
-
-/* Transmit GMAC FIFO (YUKON only), use MR_ADDR() to access */
-#define TX_GMF_EA 0x0d40 /* 32 bit Tx GMAC FIFO End Address */
-#define TX_GMF_AE_THR 0x0d44 /* 32 bit Tx GMAC FIFO Almost Empty Thresh.*/
-#define TX_GMF_CTRL_T 0x0d48 /* 32 bit Tx GMAC FIFO Control/Test */
- /* 0x0d4c - 0x0d5f: reserved */
-#define TX_GMF_WP 0x0d60 /* 32 bit Tx GMAC FIFO Write Pointer */
-#define TX_GMF_WSP 0x0d64 /* 32 bit Tx GMAC FIFO Write Shadow Ptr. */
-#define TX_GMF_WLEV 0x0d68 /* 32 bit Tx GMAC FIFO Write Level */
- /* 0x0d6c - 0x0d6f: reserved */
-#define TX_GMF_RP 0x0d70 /* 32 bit Tx GMAC FIFO Read Pointer */
-#define TX_GMF_RSTP 0x0d74 /* 32 bit Tx GMAC FIFO Restart Pointer */
-#define TX_GMF_RLEV 0x0d78 /* 32 bit Tx GMAC FIFO Read Level */
- /* 0x0d7c - 0x0d7f: reserved */
-
-/*
- * Bank 27
- */
- /* 0x0d80 - 0x0dbf: MAC 2 */
- /* 0x0daa - 0x0dff: reserved */
-
-/*
- * Bank 28
- */
-/* Descriptor Poll Timer Registers */
-#define B28_DPT_INI 0x0e00 /* 24 bit Descriptor Poll Timer Init Val */
-#define B28_DPT_VAL 0x0e04 /* 24 bit Descriptor Poll Timer Curr Val */
-#define B28_DPT_CTRL 0x0e08 /* 8 bit Descriptor Poll Timer Ctrl Reg */
- /* 0x0e09: reserved */
-#define B28_DPT_TST 0x0e0a /* 8 bit Descriptor Poll Timer Test Reg */
- /* 0x0e0b: reserved */
-
-/* Time Stamp Timer Registers (YUKON only) */
- /* 0x0e10: reserved */
-#define GMAC_TI_ST_VAL 0x0e14 /* 32 bit Time Stamp Timer Curr Val */
-#define GMAC_TI_ST_CTRL 0x0e18 /* 8 bit Time Stamp Timer Ctrl Reg */
- /* 0x0e19: reserved */
-#define GMAC_TI_ST_TST 0x0e1a /* 8 bit Time Stamp Timer Test Reg */
- /* 0x0e1b - 0x0e7f: reserved */
-
-/*
- * Bank 29
- */
- /* 0x0e80 - 0x0efc: reserved */
-
-/*
- * Bank 30
- */
-/* GMAC and GPHY Control Registers (YUKON only) */
-#define GMAC_CTRL 0x0f00 /* 32 bit GMAC Control Reg */
-#define GPHY_CTRL 0x0f04 /* 32 bit GPHY Control Reg */
-#define GMAC_IRQ_SRC 0x0f08 /* 8 bit GMAC Interrupt Source Reg */
- /* 0x0f09 - 0x0f0b: reserved */
-#define GMAC_IRQ_MSK 0x0f0c /* 8 bit GMAC Interrupt Mask Reg */
- /* 0x0f0d - 0x0f0f: reserved */
-#define GMAC_LINK_CTRL 0x0f10 /* 16 bit Link Control Reg */
- /* 0x0f14 - 0x0f1f: reserved */
-
-/* Wake-up Frame Pattern Match Control Registers (YUKON only) */
-
-#define WOL_REG_OFFS 0x20 /* HW-Bug: Address is + 0x20 against spec. */
-
-#define WOL_CTRL_STAT 0x0f20 /* 16 bit WOL Control/Status Reg */
-#define WOL_MATCH_CTL 0x0f22 /* 8 bit WOL Match Control Reg */
-#define WOL_MATCH_RES 0x0f23 /* 8 bit WOL Match Result Reg */
-#define WOL_MAC_ADDR_LO 0x0f24 /* 32 bit WOL MAC Address Low */
-#define WOL_MAC_ADDR_HI 0x0f28 /* 16 bit WOL MAC Address High */
-#define WOL_PATT_RPTR 0x0f2c /* 8 bit WOL Pattern Read Ptr */
-
-/* use this macro to access above registers */
-#define WOL_REG(Reg) ((Reg) + (pAC->GIni.GIWolOffs))
-
-
-/* WOL Pattern Length Registers (YUKON only) */
-
-#define WOL_PATT_LEN_LO 0x0f30 /* 32 bit WOL Pattern Length 3..0 */
-#define WOL_PATT_LEN_HI 0x0f34 /* 24 bit WOL Pattern Length 6..4 */
-
-/* WOL Pattern Counter Registers (YUKON only) */
-
-#define WOL_PATT_CNT_0 0x0f38 /* 32 bit WOL Pattern Counter 3..0 */
-#define WOL_PATT_CNT_4 0x0f3c /* 24 bit WOL Pattern Counter 6..4 */
- /* 0x0f40 - 0x0f7f: reserved */
-
-/*
- * Bank 31
- */
-/* 0x0f80 - 0x0fff: reserved */
-
-/*
- * Bank 32 - 33
- */
-#define WOL_PATT_RAM_1 0x1000 /* WOL Pattern RAM Link 1 */
-
-/*
- * Bank 0x22 - 0x3f
- */
-/* 0x1100 - 0x1fff: reserved */
-
-/*
- * Bank 0x40 - 0x4f
- */
-#define BASE_XMAC_1 0x2000 /* XMAC 1 registers */
-
-/*
- * Bank 0x50 - 0x5f
- */
-
-#define BASE_GMAC_1 0x2800 /* GMAC 1 registers */
-
-/*
- * Bank 0x60 - 0x6f
- */
-#define BASE_XMAC_2 0x3000 /* XMAC 2 registers */
-
-/*
- * Bank 0x70 - 0x7f
- */
-#define BASE_GMAC_2 0x3800 /* GMAC 2 registers */
-
-/*
- * Control Register Bit Definitions:
- */
-/* B0_RAP 8 bit Register Address Port */
- /* Bit 7: reserved */
-#define RAP_RAP 0x3f /* Bit 6..0: 0 = block 0,..,6f = block 6f */
-
-/* B0_CTST 16 bit Control/Status register */
- /* Bit 15..14: reserved */
-#define CS_CLK_RUN_HOT BIT_13S /* CLK_RUN hot m. (YUKON-Lite only) */
-#define CS_CLK_RUN_RST BIT_12S /* CLK_RUN reset (YUKON-Lite only) */
-#define CS_CLK_RUN_ENA BIT_11S /* CLK_RUN enable (YUKON-Lite only) */
-#define CS_VAUX_AVAIL BIT_10S /* VAUX available (YUKON only) */
-#define CS_BUS_CLOCK BIT_9S /* Bus Clock 0/1 = 33/66 MHz */
-#define CS_BUS_SLOT_SZ BIT_8S /* Slot Size 0/1 = 32/64 bit slot */
-#define CS_ST_SW_IRQ BIT_7S /* Set IRQ SW Request */
-#define CS_CL_SW_IRQ BIT_6S /* Clear IRQ SW Request */
-#define CS_STOP_DONE BIT_5S /* Stop Master is finished */
-#define CS_STOP_MAST BIT_4S /* Command Bit to stop the master */
-#define CS_MRST_CLR BIT_3S /* Clear Master reset */
-#define CS_MRST_SET BIT_2S /* Set Master reset */
-#define CS_RST_CLR BIT_1S /* Clear Software reset */
-#define CS_RST_SET BIT_0S /* Set Software reset */
-
-/* B0_LED 8 Bit LED register */
- /* Bit 7.. 2: reserved */
-#define LED_STAT_ON BIT_1S /* Status LED on */
-#define LED_STAT_OFF BIT_0S /* Status LED off */
-
-/* B0_POWER_CTRL 8 Bit Power Control reg (YUKON only) */
-#define PC_VAUX_ENA BIT_7 /* Switch VAUX Enable */
-#define PC_VAUX_DIS BIT_6 /* Switch VAUX Disable */
-#define PC_VCC_ENA BIT_5 /* Switch VCC Enable */
-#define PC_VCC_DIS BIT_4 /* Switch VCC Disable */
-#define PC_VAUX_ON BIT_3 /* Switch VAUX On */
-#define PC_VAUX_OFF BIT_2 /* Switch VAUX Off */
-#define PC_VCC_ON BIT_1 /* Switch VCC On */
-#define PC_VCC_OFF BIT_0 /* Switch VCC Off */
-
-/* B0_ISRC 32 bit Interrupt Source Register */
-/* B0_IMSK 32 bit Interrupt Mask Register */
-/* B0_SP_ISRC 32 bit Special Interrupt Source Reg */
-/* B2_IRQM_MSK 32 bit IRQ Moderation Mask */
-#define IS_ALL_MSK 0xbfffffffL /* All Interrupt bits */
-#define IS_HW_ERR BIT_31 /* Interrupt HW Error */
- /* Bit 30: reserved */
-#define IS_PA_TO_RX1 BIT_29 /* Packet Arb Timeout Rx1 */
-#define IS_PA_TO_RX2 BIT_28 /* Packet Arb Timeout Rx2 */
-#define IS_PA_TO_TX1 BIT_27 /* Packet Arb Timeout Tx1 */
-#define IS_PA_TO_TX2 BIT_26 /* Packet Arb Timeout Tx2 */
-#define IS_I2C_READY BIT_25 /* IRQ on end of I2C Tx */
-#define IS_IRQ_SW BIT_24 /* SW forced IRQ */
-#define IS_EXT_REG BIT_23 /* IRQ from LM80 or PHY (GENESIS only) */
- /* IRQ from PHY (YUKON only) */
-#define IS_TIMINT BIT_22 /* IRQ from Timer */
-#define IS_MAC1 BIT_21 /* IRQ from MAC 1 */
-#define IS_LNK_SYNC_M1 BIT_20 /* Link Sync Cnt wrap MAC 1 */
-#define IS_MAC2 BIT_19 /* IRQ from MAC 2 */
-#define IS_LNK_SYNC_M2 BIT_18 /* Link Sync Cnt wrap MAC 2 */
-/* Receive Queue 1 */
-#define IS_R1_B BIT_17 /* Q_R1 End of Buffer */
-#define IS_R1_F BIT_16 /* Q_R1 End of Frame */
-#define IS_R1_C BIT_15 /* Q_R1 Encoding Error */
-/* Receive Queue 2 */
-#define IS_R2_B BIT_14 /* Q_R2 End of Buffer */
-#define IS_R2_F BIT_13 /* Q_R2 End of Frame */
-#define IS_R2_C BIT_12 /* Q_R2 Encoding Error */
-/* Synchronous Transmit Queue 1 */
-#define IS_XS1_B BIT_11 /* Q_XS1 End of Buffer */
-#define IS_XS1_F BIT_10 /* Q_XS1 End of Frame */
-#define IS_XS1_C BIT_9 /* Q_XS1 Encoding Error */
-/* Asynchronous Transmit Queue 1 */
-#define IS_XA1_B BIT_8 /* Q_XA1 End of Buffer */
-#define IS_XA1_F BIT_7 /* Q_XA1 End of Frame */
-#define IS_XA1_C BIT_6 /* Q_XA1 Encoding Error */
-/* Synchronous Transmit Queue 2 */
-#define IS_XS2_B BIT_5 /* Q_XS2 End of Buffer */
-#define IS_XS2_F BIT_4 /* Q_XS2 End of Frame */
-#define IS_XS2_C BIT_3 /* Q_XS2 Encoding Error */
-/* Asynchronous Transmit Queue 2 */
-#define IS_XA2_B BIT_2 /* Q_XA2 End of Buffer */
-#define IS_XA2_F BIT_1 /* Q_XA2 End of Frame */
-#define IS_XA2_C BIT_0 /* Q_XA2 Encoding Error */
-
-
-/* B0_HWE_ISRC 32 bit HW Error Interrupt Src Reg */
-/* B0_HWE_IMSK 32 bit HW Error Interrupt Mask Reg */
-/* B2_IRQM_HWE_MSK 32 bit IRQ Moderation HW Error Mask */
-#define IS_ERR_MSK 0x00000fffL /* All Error bits */
- /* Bit 31..14: reserved */
-#define IS_IRQ_TIST_OV BIT_13 /* Time Stamp Timer Overflow (YUKON only) */
-#define IS_IRQ_SENSOR BIT_12 /* IRQ from Sensor (YUKON only) */
-#define IS_IRQ_MST_ERR BIT_11 /* IRQ master error detected */
-#define IS_IRQ_STAT BIT_10 /* IRQ status exception */
-#define IS_NO_STAT_M1 BIT_9 /* No Rx Status from MAC 1 */
-#define IS_NO_STAT_M2 BIT_8 /* No Rx Status from MAC 2 */
-#define IS_NO_TIST_M1 BIT_7 /* No Time Stamp from MAC 1 */
-#define IS_NO_TIST_M2 BIT_6 /* No Time Stamp from MAC 2 */
-#define IS_RAM_RD_PAR BIT_5 /* RAM Read Parity Error */
-#define IS_RAM_WR_PAR BIT_4 /* RAM Write Parity Error */
-#define IS_M1_PAR_ERR BIT_3 /* MAC 1 Parity Error */
-#define IS_M2_PAR_ERR BIT_2 /* MAC 2 Parity Error */
-#define IS_R1_PAR_ERR BIT_1 /* Queue R1 Parity Error */
-#define IS_R2_PAR_ERR BIT_0 /* Queue R2 Parity Error */
-
-/* B2_CONN_TYP 8 bit Connector type */
-/* B2_PMD_TYP 8 bit PMD type */
-/* Values of connector and PMD type comply to SysKonnect internal std */
-
-/* B2_MAC_CFG 8 bit MAC Configuration / Chip Revision */
-#define CONFIG_SYS_CHIP_R_MSK (0xf<<4) /* Bit 7.. 4: Chip Revision */
- /* Bit 3.. 2: reserved */
-#define CONFIG_SYS_DIS_M2_CLK BIT_1S /* Disable Clock for 2nd MAC */
-#define CONFIG_SYS_SNG_MAC BIT_0S /* MAC Config: 0=2 MACs / 1=1 MAC*/
-
-/* B2_CHIP_ID 8 bit Chip Identification Number */
-#define CHIP_ID_GENESIS 0x0a /* Chip ID for GENESIS */
-#define CHIP_ID_YUKON 0xb0 /* Chip ID for YUKON */
-
-/* B2_FAR 32 bit Flash-Prom Addr Reg/Cnt */
-#define FAR_ADDR 0x1ffffL /* Bit 16.. 0: FPROM Address mask */
-
-/* B2_LD_CRTL 8 bit EPROM loader control register */
-/* Bits are currently reserved */
-
-/* B2_LD_TEST 8 bit EPROM loader test register */
- /* Bit 7.. 4: reserved */
-#define LD_T_ON BIT_3S /* Loader Test mode on */
-#define LD_T_OFF BIT_2S /* Loader Test mode off */
-#define LD_T_STEP BIT_1S /* Decrement FPROM addr. Counter */
-#define LD_START BIT_0S /* Start loading FPROM */
-
-/*
- * Timer Section
- */
-/* B2_TI_CRTL 8 bit Timer control */
-/* B2_IRQM_CTRL 8 bit IRQ Moderation Timer Control */
- /* Bit 7.. 3: reserved */
-#define TIM_START BIT_2S /* Start Timer */
-#define TIM_STOP BIT_1S /* Stop Timer */
-#define TIM_CLR_IRQ BIT_0S /* Clear Timer IRQ (!IRQM) */
-
-/* B2_TI_TEST 8 Bit Timer Test */
-/* B2_IRQM_TEST 8 bit IRQ Moderation Timer Test */
-/* B28_DPT_TST 8 bit Descriptor Poll Timer Test Reg */
- /* Bit 7.. 3: reserved */
-#define TIM_T_ON BIT_2S /* Test mode on */
-#define TIM_T_OFF BIT_1S /* Test mode off */
-#define TIM_T_STEP BIT_0S /* Test step */
-
-/* B28_DPT_INI 32 bit Descriptor Poll Timer Init Val */
-/* B28_DPT_VAL 32 bit Descriptor Poll Timer Curr Val */
- /* Bit 31..24: reserved */
-#define DPT_MSK 0x00ffffffL /* Bit 23.. 0: Desc Poll Timer Bits */
-
-/* B28_DPT_CTRL 8 bit Descriptor Poll Timer Ctrl Reg */
- /* Bit 7.. 2: reserved */
-#define DPT_START BIT_1S /* Start Descriptor Poll Timer */
-#define DPT_STOP BIT_0S /* Stop Descriptor Poll Timer */
-
-/* B2_E_3 8 bit lower 4 bits used for HW self test result */
-#define B2_E3_RES_MASK 0x0f
-
-/* B2_TST_CTRL1 8 bit Test Control Register 1 */
-#define TST_FRC_DPERR_MR BIT_7S /* force DATAPERR on MST RD */
-#define TST_FRC_DPERR_MW BIT_6S /* force DATAPERR on MST WR */
-#define TST_FRC_DPERR_TR BIT_5S /* force DATAPERR on TRG RD */
-#define TST_FRC_DPERR_TW BIT_4S /* force DATAPERR on TRG WR */
-#define TST_FRC_APERR_M BIT_3S /* force ADDRPERR on MST */
-#define TST_FRC_APERR_T BIT_2S /* force ADDRPERR on TRG */
-#define TST_CFG_WRITE_ON BIT_1S /* Enable Config Reg WR */
-#define TST_CFG_WRITE_OFF BIT_0S /* Disable Config Reg WR */
-
-/* B2_TST_CTRL2 8 bit Test Control Register 2 */
- /* Bit 7.. 4: reserved */
- /* force the following error on the next master read/write */
-#define TST_FRC_DPERR_MR64 BIT_3S /* DataPERR RD 64 */
-#define TST_FRC_DPERR_MW64 BIT_2S /* DataPERR WR 64 */
-#define TST_FRC_APERR_1M64 BIT_1S /* AddrPERR on 1. phase */
-#define TST_FRC_APERR_2M64 BIT_0S /* AddrPERR on 2. phase */
-
-/* B2_GP_IO 32 bit General Purpose I/O Register */
- /* Bit 31..26: reserved */
-#define GP_DIR_9 BIT_25 /* IO_9 direct, 0=I/1=O */
-#define GP_DIR_8 BIT_24 /* IO_8 direct, 0=I/1=O */
-#define GP_DIR_7 BIT_23 /* IO_7 direct, 0=I/1=O */
-#define GP_DIR_6 BIT_22 /* IO_6 direct, 0=I/1=O */
-#define GP_DIR_5 BIT_21 /* IO_5 direct, 0=I/1=O */
-#define GP_DIR_4 BIT_20 /* IO_4 direct, 0=I/1=O */
-#define GP_DIR_3 BIT_19 /* IO_3 direct, 0=I/1=O */
-#define GP_DIR_2 BIT_18 /* IO_2 direct, 0=I/1=O */
-#define GP_DIR_1 BIT_17 /* IO_1 direct, 0=I/1=O */
-#define GP_DIR_0 BIT_16 /* IO_0 direct, 0=I/1=O */
- /* Bit 15..10: reserved */
-#define GP_IO_9 BIT_9 /* IO_9 pin */
-#define GP_IO_8 BIT_8 /* IO_8 pin */
-#define GP_IO_7 BIT_7 /* IO_7 pin */
-#define GP_IO_6 BIT_6 /* IO_6 pin */
-#define GP_IO_5 BIT_5 /* IO_5 pin */
-#define GP_IO_4 BIT_4 /* IO_4 pin */
-#define GP_IO_3 BIT_3 /* IO_3 pin */
-#define GP_IO_2 BIT_2 /* IO_2 pin */
-#define GP_IO_1 BIT_1 /* IO_1 pin */
-#define GP_IO_0 BIT_0 /* IO_0 pin */
-
-/* B2_I2C_CTRL 32 bit I2C HW Control Register */
-#define I2C_FLAG BIT_31 /* Start read/write if WR */
-#define I2C_ADDR (0x7fffL<<16) /* Bit 30..16: Addr to be RD/WR */
-#define I2C_DEV_SEL (0x7fL<<9) /* Bit 15.. 9: I2C Device Select */
- /* Bit 8.. 5: reserved */
-#define I2C_BURST_LEN BIT_4 /* Burst Len, 1/4 bytes */
-#define I2C_DEV_SIZE (7L<<1) /* Bit 3.. 1: I2C Device Size */
-#define I2C_025K_DEV (0L<<1) /* 0: 256 Bytes or smal. */
-#define I2C_05K_DEV (1L<<1) /* 1: 512 Bytes */
-#define I2C_1K_DEV (2L<<1) /* 2: 1024 Bytes */
-#define I2C_2K_DEV (3L<<1) /* 3: 2048 Bytes */
-#define I2C_4K_DEV (4L<<1) /* 4: 4096 Bytes */
-#define I2C_8K_DEV (5L<<1) /* 5: 8192 Bytes */
-#define I2C_16K_DEV (6L<<1) /* 6: 16384 Bytes */
-#define I2C_32K_DEV (7L<<1) /* 7: 32768 Bytes */
-#define I2C_STOP BIT_0 /* Interrupt I2C transfer */
-
-/* B2_I2C_IRQ 32 bit I2C HW IRQ Register */
- /* Bit 31.. 1 reserved */
-#define I2C_CLR_IRQ BIT_0 /* Clear I2C IRQ */
-
-/* B2_I2C_SW 32 bit (8 bit access) I2C HW SW Port Register */
- /* Bit 7.. 3: reserved */
-#define I2C_DATA_DIR BIT_2S /* direction of I2C_DATA */
-#define I2C_DATA BIT_1S /* I2C Data Port */
-#define I2C_CLK BIT_0S /* I2C Clock Port */
-
-/*
- * I2C Address
- */
-#define I2C_SENS_ADDR LM80_ADDR /* I2C Sensor Address, (Volt and Temp)*/
-
-
-/* B2_BSC_CTRL 8 bit Blink Source Counter Control */
- /* Bit 7.. 2: reserved */
-#define BSC_START BIT_1S /* Start Blink Source Counter */
-#define BSC_STOP BIT_0S /* Stop Blink Source Counter */
-
-/* B2_BSC_STAT 8 bit Blink Source Counter Status */
- /* Bit 7.. 1: reserved */
-#define BSC_SRC BIT_0S /* Blink Source, 0=Off / 1=On */
-
-/* B2_BSC_TST 16 bit Blink Source Counter Test Reg */
-#define BSC_T_ON BIT_2S /* Test mode on */
-#define BSC_T_OFF BIT_1S /* Test mode off */
-#define BSC_T_STEP BIT_0S /* Test step */
-
-
-/* B3_RAM_ADDR 32 bit RAM Address, to read or write */
- /* Bit 31..19: reserved */
-#define RAM_ADR_RAN 0x0007ffffL /* Bit 18.. 0: RAM Address Range */
-
-/* RAM Interface Registers */
-/* B3_RI_CTRL 16 bit RAM Iface Control Register */
- /* Bit 15..10: reserved */
-#define RI_CLR_RD_PERR BIT_9S /* Clear IRQ RAM Read Parity Err */
-#define RI_CLR_WR_PERR BIT_8S /* Clear IRQ RAM Write Parity Err*/
- /* Bit 7.. 2: reserved */
-#define RI_RST_CLR BIT_1S /* Clear RAM Interface Reset */
-#define RI_RST_SET BIT_0S /* Set RAM Interface Reset */
-
-/* B3_RI_TEST 8 bit RAM Iface Test Register */
- /* Bit 15.. 4: reserved */
-#define RI_T_EV BIT_3S /* Timeout Event occured */
-#define RI_T_ON BIT_2S /* Timeout Timer Test On */
-#define RI_T_OFF BIT_1S /* Timeout Timer Test Off */
-#define RI_T_STEP BIT_0S /* Timeout Timer Step */
-
-/* MAC Arbiter Registers */
-/* B3_MA_TO_CTRL 16 bit MAC Arbiter Timeout Ctrl Reg */
- /* Bit 15.. 4: reserved */
-#define MA_FOE_ON BIT_3S /* XMAC Fast Output Enable ON */
-#define MA_FOE_OFF BIT_2S /* XMAC Fast Output Enable OFF */
-#define MA_RST_CLR BIT_1S /* Clear MAC Arbiter Reset */
-#define MA_RST_SET BIT_0S /* Set MAC Arbiter Reset */
-
-/* B3_MA_RC_CTRL 16 bit MAC Arbiter Recovery Ctrl Reg */
- /* Bit 15.. 8: reserved */
-#define MA_ENA_REC_TX2 BIT_7S /* Enable Recovery Timer TX2 */
-#define MA_DIS_REC_TX2 BIT_6S /* Disable Recovery Timer TX2 */
-#define MA_ENA_REC_TX1 BIT_5S /* Enable Recovery Timer TX1 */
-#define MA_DIS_REC_TX1 BIT_4S /* Disable Recovery Timer TX1 */
-#define MA_ENA_REC_RX2 BIT_3S /* Enable Recovery Timer RX2 */
-#define MA_DIS_REC_RX2 BIT_2S /* Disable Recovery Timer RX2 */
-#define MA_ENA_REC_RX1 BIT_1S /* Enable Recovery Timer RX1 */
-#define MA_DIS_REC_RX1 BIT_0S /* Disable Recovery Timer RX1 */
-
-/* Packet Arbiter Registers */
-/* B3_PA_CTRL 16 bit Packet Arbiter Ctrl Register */
- /* Bit 15..14: reserved */
-#define PA_CLR_TO_TX2 BIT_13S /* Clear IRQ Packet Timeout TX2 */
-#define PA_CLR_TO_TX1 BIT_12S /* Clear IRQ Packet Timeout TX1 */
-#define PA_CLR_TO_RX2 BIT_11S /* Clear IRQ Packet Timeout RX2 */
-#define PA_CLR_TO_RX1 BIT_10S /* Clear IRQ Packet Timeout RX1 */
-#define PA_ENA_TO_TX2 BIT_9S /* Enable Timeout Timer TX2 */
-#define PA_DIS_TO_TX2 BIT_8S /* Disable Timeout Timer TX2 */
-#define PA_ENA_TO_TX1 BIT_7S /* Enable Timeout Timer TX1 */
-#define PA_DIS_TO_TX1 BIT_6S /* Disable Timeout Timer TX1 */
-#define PA_ENA_TO_RX2 BIT_5S /* Enable Timeout Timer RX2 */
-#define PA_DIS_TO_RX2 BIT_4S /* Disable Timeout Timer RX2 */
-#define PA_ENA_TO_RX1 BIT_3S /* Enable Timeout Timer RX1 */
-#define PA_DIS_TO_RX1 BIT_2S /* Disable Timeout Timer RX1 */
-#define PA_RST_CLR BIT_1S /* Clear MAC Arbiter Reset */
-#define PA_RST_SET BIT_0S /* Set MAC Arbiter Reset */
-
-#define PA_ENA_TO_ALL (PA_ENA_TO_RX1 | PA_ENA_TO_RX2 |\
- PA_ENA_TO_TX1 | PA_ENA_TO_TX2)
-
-/* Rx/Tx Path related Arbiter Test Registers */
-/* B3_MA_TO_TEST 16 bit MAC Arbiter Timeout Test Reg */
-/* B3_MA_RC_TEST 16 bit MAC Arbiter Recovery Test Reg */
-/* B3_PA_TEST 16 bit Packet Arbiter Test Register */
-/* Bit 15, 11, 7, and 3 are reserved in B3_PA_TEST */
-#define TX2_T_EV BIT_15S /* TX2 Timeout/Recv Event occured */
-#define TX2_T_ON BIT_14S /* TX2 Timeout/Recv Timer Test On */
-#define TX2_T_OFF BIT_13S /* TX2 Timeout/Recv Timer Tst Off */
-#define TX2_T_STEP BIT_12S /* TX2 Timeout/Recv Timer Step */
-#define TX1_T_EV BIT_11S /* TX1 Timeout/Recv Event occured */
-#define TX1_T_ON BIT_10S /* TX1 Timeout/Recv Timer Test On */
-#define TX1_T_OFF BIT_9S /* TX1 Timeout/Recv Timer Tst Off */
-#define TX1_T_STEP BIT_8S /* TX1 Timeout/Recv Timer Step */
-#define RX2_T_EV BIT_7S /* RX2 Timeout/Recv Event occured */
-#define RX2_T_ON BIT_6S /* RX2 Timeout/Recv Timer Test On */
-#define RX2_T_OFF BIT_5S /* RX2 Timeout/Recv Timer Tst Off */
-#define RX2_T_STEP BIT_4S /* RX2 Timeout/Recv Timer Step */
-#define RX1_T_EV BIT_3S /* RX1 Timeout/Recv Event occured */
-#define RX1_T_ON BIT_2S /* RX1 Timeout/Recv Timer Test On */
-#define RX1_T_OFF BIT_1S /* RX1 Timeout/Recv Timer Tst Off */
-#define RX1_T_STEP BIT_0S /* RX1 Timeout/Recv Timer Step */
-
-
-/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
-/* TXA_ITI_INI 32 bit Tx Arb Interval Timer Init Val */
-/* TXA_ITI_VAL 32 bit Tx Arb Interval Timer Value */
-/* TXA_LIM_INI 32 bit Tx Arb Limit Counter Init Val */
-/* TXA_LIM_VAL 32 bit Tx Arb Limit Counter Value */
- /* Bit 31..24: reserved */
-#define TXA_MAX_VAL 0x00ffffffL /* Bit 23.. 0: Max TXA Timer/Cnt Val */
-
-/* TXA_CTRL 8 bit Tx Arbiter Control Register */
-#define TXA_ENA_FSYNC BIT_7S /* Enable force of sync Tx queue */
-#define TXA_DIS_FSYNC BIT_6S /* Disable force of sync Tx queue */
-#define TXA_ENA_ALLOC BIT_5S /* Enable alloc of free bandwidth */
-#define TXA_DIS_ALLOC BIT_4S /* Disable alloc of free bandwidth */
-#define TXA_START_RC BIT_3S /* Start sync Rate Control */
-#define TXA_STOP_RC BIT_2S /* Stop sync Rate Control */
-#define TXA_ENA_ARB BIT_1S /* Enable Tx Arbiter */
-#define TXA_DIS_ARB BIT_0S /* Disable Tx Arbiter */
-
-/* TXA_TEST 8 bit Tx Arbiter Test Register */
- /* Bit 7.. 6: reserved */
-#define TXA_INT_T_ON BIT_5S /* Tx Arb Interval Timer Test On */
-#define TXA_INT_T_OFF BIT_4S /* Tx Arb Interval Timer Test Off */
-#define TXA_INT_T_STEP BIT_3S /* Tx Arb Interval Timer Step */
-#define TXA_LIM_T_ON BIT_2S /* Tx Arb Limit Timer Test On */
-#define TXA_LIM_T_OFF BIT_1S /* Tx Arb Limit Timer Test Off */
-#define TXA_LIM_T_STEP BIT_0S /* Tx Arb Limit Timer Step */
-
-/* TXA_STAT 8 bit Tx Arbiter Status Register */
- /* Bit 7.. 1: reserved */
-#define TXA_PRIO_XS BIT_0S /* sync queue has prio to send */
-
-/* Q_BC 32 bit Current Byte Counter */
- /* Bit 31..16: reserved */
-#define BC_MAX 0xffff /* Bit 15.. 0: Byte counter */
-
-/* BMU Control Status Registers */
-/* B0_R1_CSR 32 bit BMU Ctrl/Stat Rx Queue 1 */
-/* B0_R2_CSR 32 bit BMU Ctrl/Stat Rx Queue 2 */
-/* B0_XA1_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 1 */
-/* B0_XS1_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 1 */
-/* B0_XA2_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 2 */
-/* B0_XS2_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 2 */
-/* Q_CSR 32 bit BMU Control/Status Register */
- /* Bit 31..25: reserved */
-#define CSR_SV_IDLE BIT_24 /* BMU SM Idle */
- /* Bit 23..22: reserved */
-#define CSR_DESC_CLR BIT_21 /* Clear Reset for Descr */
-#define CSR_DESC_SET BIT_20 /* Set Reset for Descr */
-#define CSR_FIFO_CLR BIT_19 /* Clear Reset for FIFO */
-#define CSR_FIFO_SET BIT_18 /* Set Reset for FIFO */
-#define CSR_HPI_RUN BIT_17 /* Release HPI SM */
-#define CSR_HPI_RST BIT_16 /* Reset HPI SM to Idle */
-#define CSR_SV_RUN BIT_15 /* Release Supervisor SM */
-#define CSR_SV_RST BIT_14 /* Reset Supervisor SM */
-#define CSR_DREAD_RUN BIT_13 /* Release Descr Read SM */
-#define CSR_DREAD_RST BIT_12 /* Reset Descr Read SM */
-#define CSR_DWRITE_RUN BIT_11 /* Release Descr Write SM */
-#define CSR_DWRITE_RST BIT_10 /* Reset Descr Write SM */
-#define CSR_TRANS_RUN BIT_9 /* Release Transfer SM */
-#define CSR_TRANS_RST BIT_8 /* Reset Transfer SM */
-#define CSR_ENA_POL BIT_7 /* Enable Descr Polling */
-#define CSR_DIS_POL BIT_6 /* Disable Descr Polling */
-#define CSR_STOP BIT_5 /* Stop Rx/Tx Queue */
-#define CSR_START BIT_4 /* Start Rx/Tx Queue */
-#define CSR_IRQ_CL_P BIT_3 /* (Rx) Clear Parity IRQ */
-#define CSR_IRQ_CL_B BIT_2 /* Clear EOB IRQ */
-#define CSR_IRQ_CL_F BIT_1 /* Clear EOF IRQ */
-#define CSR_IRQ_CL_C BIT_0 /* Clear ERR IRQ */
-
-#define CSR_SET_RESET (CSR_DESC_SET | CSR_FIFO_SET | CSR_HPI_RST |\
- CSR_SV_RST | CSR_DREAD_RST | CSR_DWRITE_RST |\
- CSR_TRANS_RST)
-#define CSR_CLR_RESET (CSR_DESC_CLR | CSR_FIFO_CLR | CSR_HPI_RUN |\
- CSR_SV_RUN | CSR_DREAD_RUN | CSR_DWRITE_RUN |\
- CSR_TRANS_RUN)
-
-/* Q_F 32 bit Flag Register */
- /* Bit 31..28: reserved */
-#define F_ALM_FULL BIT_27 /* Rx FIFO: almost full */
-#define F_EMPTY BIT_27 /* Tx FIFO: empty flag */
-#define F_FIFO_EOF BIT_26 /* Tag (EOF Flag) bit in FIFO */
-#define F_WM_REACHED BIT_25 /* Watermark reached */
- /* reserved */
-#define F_FIFO_LEVEL (0x1fL<<16) /* Bit 23..16: # of Qwords in FIFO */
- /* Bit 15..11: reserved */
-#define F_WATER_MARK 0x0007ffL /* Bit 10.. 0: Watermark */
-
-/* Q_T1 32 bit Test Register 1 */
-/* Holds four State Machine control Bytes */
-#define SM_CRTL_SV_MSK (0xffL<<24) /* Bit 31..24: Control Supervisor SM */
-#define SM_CRTL_RD_MSK (0xffL<<16) /* Bit 23..16: Control Read Desc SM */
-#define SM_CRTL_WR_MSK (0xffL<<8) /* Bit 15.. 8: Control Write Desc SM */
-#define SM_CRTL_TR_MSK 0xffL /* Bit 7.. 0: Control Transfer SM */
-
-/* Q_T1_TR 8 bit Test Register 1 Transfer SM */
-/* Q_T1_WR 8 bit Test Register 1 Write Descriptor SM */
-/* Q_T1_RD 8 bit Test Register 1 Read Descriptor SM */
-/* Q_T1_SV 8 bit Test Register 1 Supervisor SM */
-
-/* The control status byte of each machine looks like ... */
-#define SM_STATE 0xf0 /* Bit 7.. 4: State which shall be loaded */
-#define SM_LOAD BIT_3S /* Load the SM with SM_STATE */
-#define SM_TEST_ON BIT_2S /* Switch on SM Test Mode */
-#define SM_TEST_OFF BIT_1S /* Go off the Test Mode */
-#define SM_STEP BIT_0S /* Step the State Machine */
-/* The encoding of the states is not supported by the Diagnostics Tool */
-
-/* Q_T2 32 bit Test Register 2 */
- /* Bit 31.. 8: reserved */
-#define T2_AC_T_ON BIT_7 /* Address Counter Test Mode on */
-#define T2_AC_T_OFF BIT_6 /* Address Counter Test Mode off */
-#define T2_BC_T_ON BIT_5 /* Byte Counter Test Mode on */
-#define T2_BC_T_OFF BIT_4 /* Byte Counter Test Mode off */
-#define T2_STEP04 BIT_3 /* Inc AC/Dec BC by 4 */
-#define T2_STEP03 BIT_2 /* Inc AC/Dec BC by 3 */
-#define T2_STEP02 BIT_1 /* Inc AC/Dec BC by 2 */
-#define T2_STEP01 BIT_0 /* Inc AC/Dec BC by 1 */
-
-/* Q_T3 32 bit Test Register 3 */
- /* Bit 31.. 7: reserved */
-#define T3_MUX_MSK (7<<4) /* Bit 6.. 4: Mux Position */
- /* Bit 3: reserved */
-#define T3_VRAM_MSK 7 /* Bit 2.. 0: Virtual RAM Buffer Address */
-
-/* RAM Buffer Register Offsets, use RB_ADDR(Queue, Offs) to access */
-/* RB_START 32 bit RAM Buffer Start Address */
-/* RB_END 32 bit RAM Buffer End Address */
-/* RB_WP 32 bit RAM Buffer Write Pointer */
-/* RB_RP 32 bit RAM Buffer Read Pointer */
-/* RB_RX_UTPP 32 bit Rx Upper Threshold, Pause Pack */
-/* RB_RX_LTPP 32 bit Rx Lower Threshold, Pause Pack */
-/* RB_RX_UTHP 32 bit Rx Upper Threshold, High Prio */
-/* RB_RX_LTHP 32 bit Rx Lower Threshold, High Prio */
-/* RB_PC 32 bit RAM Buffer Packet Counter */
-/* RB_LEV 32 bit RAM Buffer Level Register */
- /* Bit 31..19: reserved */
-#define RB_MSK 0x0007ffff /* Bit 18.. 0: RAM Buffer Pointer Bits */
-
-/* RB_TST2 8 bit RAM Buffer Test Register 2 */
- /* Bit 7.. 4: reserved */
-#define RB_PC_DEC BIT_3S /* Packet Counter Decrem */
-#define RB_PC_T_ON BIT_2S /* Packet Counter Test On */
-#define RB_PC_T_OFF BIT_1S /* Packet Counter Tst Off */
-#define RB_PC_INC BIT_0S /* Packet Counter Increm */
-
-/* RB_TST1 8 bit RAM Buffer Test Register 1 */
- /* Bit 7: reserved */
-#define RB_WP_T_ON BIT_6S /* Write Pointer Test On */
-#define RB_WP_T_OFF BIT_5S /* Write Pointer Test Off */
-#define RB_WP_INC BIT_4S /* Write Pointer Increm */
- /* Bit 3: reserved */
-#define RB_RP_T_ON BIT_2S /* Read Pointer Test On */
-#define RB_RP_T_OFF BIT_1S /* Read Pointer Test Off */
-#define RB_RP_DEC BIT_0S /* Read Pointer Decrement */
-
-/* RB_CTRL 8 bit RAM Buffer Control Register */
- /* Bit 7.. 6: reserved */
-#define RB_ENA_STFWD BIT_5S /* Enable Store & Forward */
-#define RB_DIS_STFWD BIT_4S /* Disable Store & Forward */
-#define RB_ENA_OP_MD BIT_3S /* Enable Operation Mode */
-#define RB_DIS_OP_MD BIT_2S /* Disable Operation Mode */
-#define RB_RST_CLR BIT_1S /* Clear RAM Buf STM Reset */
-#define RB_RST_SET BIT_0S /* Set RAM Buf STM Reset */
-
-
-/* Receive and Transmit MAC FIFO Registers (GENESIS only) */
-
-/* RX_MFF_EA 32 bit Receive MAC FIFO End Address */
-/* RX_MFF_WP 32 bit Receive MAC FIFO Write Pointer */
-/* RX_MFF_RP 32 bit Receive MAC FIFO Read Pointer */
-/* RX_MFF_PC 32 bit Receive MAC FIFO Packet Counter */
-/* RX_MFF_LEV 32 bit Receive MAC FIFO Level */
-/* TX_MFF_EA 32 bit Transmit MAC FIFO End Address */
-/* TX_MFF_WP 32 bit Transmit MAC FIFO Write Pointer */
-/* TX_MFF_WSP 32 bit Transmit MAC FIFO WR Shadow Pointer */
-/* TX_MFF_RP 32 bit Transmit MAC FIFO Read Pointer */
-/* TX_MFF_PC 32 bit Transmit MAC FIFO Packet Cnt */
-/* TX_MFF_LEV 32 bit Transmit MAC FIFO Level */
- /* Bit 31.. 6: reserved */
-#define MFF_MSK 0x007fL /* Bit 5.. 0: MAC FIFO Address/Ptr Bits */
-
-/* RX_MFF_CTRL1 16 bit Receive MAC FIFO Control Reg 1 */
- /* Bit 15..14: reserved */
-#define MFF_ENA_RDY_PAT BIT_13S /* Enable Ready Patch */
-#define MFF_DIS_RDY_PAT BIT_12S /* Disable Ready Patch */
-#define MFF_ENA_TIM_PAT BIT_11S /* Enable Timing Patch */
-#define MFF_DIS_TIM_PAT BIT_10S /* Disable Timing Patch */
-#define MFF_ENA_ALM_FUL BIT_9S /* Enable AlmostFull Sign */
-#define MFF_DIS_ALM_FUL BIT_8S /* Disable AlmostFull Sign */
-#define MFF_ENA_PAUSE BIT_7S /* Enable Pause Signaling */
-#define MFF_DIS_PAUSE BIT_6S /* Disable Pause Signaling */
-#define MFF_ENA_FLUSH BIT_5S /* Enable Frame Flushing */
-#define MFF_DIS_FLUSH BIT_4S /* Disable Frame Flushing */
-#define MFF_ENA_TIST BIT_3S /* Enable Time Stamp Gener */
-#define MFF_DIS_TIST BIT_2S /* Disable Time Stamp Gener */
-#define MFF_CLR_INTIST BIT_1S /* Clear IRQ No Time Stamp */
-#define MFF_CLR_INSTAT BIT_0S /* Clear IRQ No Status */
-
-#define MFF_RX_CTRL_DEF MFF_ENA_TIM_PAT
-
-/* TX_MFF_CTRL1 16 bit Transmit MAC FIFO Control Reg 1 */
-#define MFF_CLR_PERR BIT_15S /* Clear Parity Error IRQ */
- /* Bit 14: reserved */
-#define MFF_ENA_PKT_REC BIT_13S /* Enable Packet Recovery */
-#define MFF_DIS_PKT_REC BIT_12S /* Disable Packet Recovery */
-/* MFF_ENA_TIM_PAT (see RX_MFF_CTRL1) Bit 11: Enable Timing Patch */
-/* MFF_DIS_TIM_PAT (see RX_MFF_CTRL1) Bit 10: Disable Timing Patch */
-/* MFF_ENA_ALM_FUL (see RX_MFF_CTRL1) Bit 9: Enable Almost Full Sign */
-/* MFF_DIS_ALM_FUL (see RX_MFF_CTRL1) Bit 8: Disable Almost Full Sign */
-#define MFF_ENA_W4E BIT_7S /* Enable Wait for Empty */
-#define MFF_DIS_W4E BIT_6S /* Disable Wait for Empty */
-/* MFF_ENA_FLUSH (see RX_MFF_CTRL1) Bit 5: Enable Frame Flushing */
-/* MFF_DIS_FLUSH (see RX_MFF_CTRL1) Bit 4: Disable Frame Flushing */
-#define MFF_ENA_LOOPB BIT_3S /* Enable Loopback */
-#define MFF_DIS_LOOPB BIT_2S /* Disable Loopback */
-#define MFF_CLR_MAC_RST BIT_1S /* Clear XMAC Reset */
-#define MFF_SET_MAC_RST BIT_0S /* Set XMAC Reset */
-
-#define MFF_TX_CTRL_DEF (MFF_ENA_PKT_REC | MFF_ENA_TIM_PAT | MFF_ENA_FLUSH)
-
-/* RX_MFF_TST2 8 bit Receive MAC FIFO Test Register 2 */
-/* TX_MFF_TST2 8 bit Transmit MAC FIFO Test Register 2 */
- /* Bit 7: reserved */
-#define MFF_WSP_T_ON BIT_6S /* Tx: Write Shadow Ptr TestOn */
-#define MFF_WSP_T_OFF BIT_5S /* Tx: Write Shadow Ptr TstOff */
-#define MFF_WSP_INC BIT_4S /* Tx: Write Shadow Ptr Increment */
-#define MFF_PC_DEC BIT_3S /* Packet Counter Decrement */
-#define MFF_PC_T_ON BIT_2S /* Packet Counter Test On */
-#define MFF_PC_T_OFF BIT_1S /* Packet Counter Test Off */
-#define MFF_PC_INC BIT_0S /* Packet Counter Increment */
-
-/* RX_MFF_TST1 8 bit Receive MAC FIFO Test Register 1 */
-/* TX_MFF_TST1 8 bit Transmit MAC FIFO Test Register 1 */
- /* Bit 7: reserved */
-#define MFF_WP_T_ON BIT_6S /* Write Pointer Test On */
-#define MFF_WP_T_OFF BIT_5S /* Write Pointer Test Off */
-#define MFF_WP_INC BIT_4S /* Write Pointer Increm */
- /* Bit 3: reserved */
-#define MFF_RP_T_ON BIT_2S /* Read Pointer Test On */
-#define MFF_RP_T_OFF BIT_1S /* Read Pointer Test Off */
-#define MFF_RP_DEC BIT_0S /* Read Pointer Decrement */
-
-/* RX_MFF_CTRL2 8 bit Receive MAC FIFO Control Reg 2 */
-/* TX_MFF_CTRL2 8 bit Transmit MAC FIFO Control Reg 2 */
- /* Bit 7..4: reserved */
-#define MFF_ENA_OP_MD BIT_3S /* Enable Operation Mode */
-#define MFF_DIS_OP_MD BIT_2S /* Disable Operation Mode */
-#define MFF_RST_CLR BIT_1S /* Clear MAC FIFO Reset */
-#define MFF_RST_SET BIT_0S /* Set MAC FIFO Reset */
-
-
-/* Link LED Counter Registers (GENESIS only) */
-
-/* RX_LED_CTRL 8 bit Receive LED Cnt Control Reg */
-/* TX_LED_CTRL 8 bit Transmit LED Cnt Control Reg */
-/* LNK_SYNC_CTRL 8 bit Link Sync Cnt Control Register */
- /* Bit 7.. 3: reserved */
-#define LED_START BIT_2S /* Start Timer */
-#define LED_STOP BIT_1S /* Stop Timer */
-#define LED_STATE BIT_0S /* Rx/Tx: LED State, 1=LED on */
-#define LED_CLR_IRQ BIT_0S /* Lnk: Clear Link IRQ */
-
-/* RX_LED_TST 8 bit Receive LED Cnt Test Register */
-/* TX_LED_TST 8 bit Transmit LED Cnt Test Register */
-/* LNK_SYNC_TST 8 bit Link Sync Cnt Test Register */
- /* Bit 7.. 3: reserved */
-#define LED_T_ON BIT_2S /* LED Counter Test mode On */
-#define LED_T_OFF BIT_1S /* LED Counter Test mode Off */
-#define LED_T_STEP BIT_0S /* LED Counter Step */
-
-/* LNK_LED_REG 8 bit Link LED Register */
- /* Bit 7.. 6: reserved */
-#define LED_BLK_ON BIT_5S /* Link LED Blinking On */
-#define LED_BLK_OFF BIT_4S /* Link LED Blinking Off */
-#define LED_SYNC_ON BIT_3S /* Use Sync Wire to switch LED */
-#define LED_SYNC_OFF BIT_2S /* Disable Sync Wire Input */
-#define LED_ON BIT_1S /* switch LED on */
-#define LED_OFF BIT_0S /* switch LED off */
-
-/* Receive and Transmit GMAC FIFO Registers (YUKON only) */
-
-/* RX_GMF_EA 32 bit Rx GMAC FIFO End Address */
-/* RX_GMF_AF_THR 32 bit Rx GMAC FIFO Almost Full Thresh. */
-/* RX_GMF_WP 32 bit Rx GMAC FIFO Write Pointer */
-/* RX_GMF_WLEV 32 bit Rx GMAC FIFO Write Level */
-/* RX_GMF_RP 32 bit Rx GMAC FIFO Read Pointer */
-/* RX_GMF_RLEV 32 bit Rx GMAC FIFO Read Level */
-/* TX_GMF_EA 32 bit Tx GMAC FIFO End Address */
-/* TX_GMF_AE_THR 32 bit Tx GMAC FIFO Almost Empty Thresh.*/
-/* TX_GMF_WP 32 bit Tx GMAC FIFO Write Pointer */
-/* TX_GMF_WSP 32 bit Tx GMAC FIFO Write Shadow Ptr. */
-/* TX_GMF_WLEV 32 bit Tx GMAC FIFO Write Level */
-/* TX_GMF_RP 32 bit Tx GMAC FIFO Read Pointer */
-/* TX_GMF_RSTP 32 bit Tx GMAC FIFO Restart Pointer */
-/* TX_GMF_RLEV 32 bit Tx GMAC FIFO Read Level */
-
-/* RX_GMF_CTRL_T 32 bit Rx GMAC FIFO Control/Test */
- /* Bits 31..15: reserved */
-#define GMF_WP_TST_ON BIT_14 /* Write Pointer Test On */
-#define GMF_WP_TST_OFF BIT_13 /* Write Pointer Test Off */
-#define GMF_WP_STEP BIT_12 /* Write Pointer Step/Increment */
- /* Bit 11: reserved */
-#define GMF_RP_TST_ON BIT_10 /* Read Pointer Test On */
-#define GMF_RP_TST_OFF BIT_9 /* Read Pointer Test Off */
-#define GMF_RP_STEP BIT_8 /* Read Pointer Step/Increment */
-#define GMF_RX_F_FL_ON BIT_7 /* Rx FIFO Flush Mode On */
-#define GMF_RX_F_FL_OFF BIT_6 /* Rx FIFO Flush Mode Off */
-#define GMF_CLI_RX_FO BIT_5 /* Clear IRQ Rx FIFO Overrun */
-#define GMF_CLI_RX_FC BIT_4 /* Clear IRQ Rx Frame Complete */
-#define GMF_OPER_ON BIT_3 /* Operational Mode On */
-#define GMF_OPER_OFF BIT_2 /* Operational Mode Off */
-#define GMF_RST_CLR BIT_1 /* Clear GMAC FIFO Reset */
-#define GMF_RST_SET BIT_0 /* Set GMAC FIFO Reset */
-
-/* TX_GMF_CTRL_T 32 bit Tx GMAC FIFO Control/Test */
- /* Bits 31..19: reserved */
-#define GMF_WSP_TST_ON BIT_18 /* Write Shadow Pointer Test On */
-#define GMF_WSP_TST_OFF BIT_17 /* Write Shadow Pointer Test Off */
-#define GMF_WSP_STEP BIT_16 /* Write Shadow Pointer Step/Increment */
- /* Bits 15..7: same as for RX_GMF_CTRL_T */
-#define GMF_CLI_TX_FU BIT_6 /* Clear IRQ Tx FIFO Underrun */
-#define GMF_CLI_TX_FC BIT_5 /* Clear IRQ Tx Frame Complete */
-#define GMF_CLI_TX_PE BIT_4 /* Clear IRQ Tx Parity Error */
- /* Bits 3..0: same as for RX_GMF_CTRL_T */
-
-#define GMF_RX_CTRL_DEF (GMF_OPER_ON | GMF_RX_F_FL_ON)
-#define GMF_TX_CTRL_DEF GMF_OPER_ON
-
-#define RX_GMF_FL_THR_DEF 0x0a /* Rx GMAC FIFO Flush Threshold default */
-
-/* GMAC_TI_ST_CTRL 8 bit Time Stamp Timer Ctrl Reg (YUKON only) */
- /* Bit 7.. 3: reserved */
-#define GMT_ST_START BIT_2S /* Start Time Stamp Timer */
-#define GMT_ST_STOP BIT_1S /* Stop Time Stamp Timer */
-#define GMT_ST_CLR_IRQ BIT_0S /* Clear Time Stamp Timer IRQ */
-
-/* GMAC_CTRL 32 bit GMAC Control Reg (YUKON only) */
- /* Bits 31.. 8: reserved */
-#define GMC_H_BURST_ON BIT_7 /* Half Duplex Burst Mode On */
-#define GMC_H_BURST_OFF BIT_6 /* Half Duplex Burst Mode Off */
-#define GMC_F_LOOPB_ON BIT_5 /* FIFO Loopback On */
-#define GMC_F_LOOPB_OFF BIT_4 /* FIFO Loopback Off */
-#define GMC_PAUSE_ON BIT_3 /* Pause On */
-#define GMC_PAUSE_OFF BIT_2 /* Pause Off */
-#define GMC_RST_CLR BIT_1 /* Clear GMAC Reset */
-#define GMC_RST_SET BIT_0 /* Set GMAC Reset */
-
-/* GPHY_CTRL 32 bit GPHY Control Reg (YUKON only) */
- /* Bits 31..29: reserved */
-#define GPC_SEL_BDT BIT_28 /* Select Bi-Dir. Transfer for MDC/MDIO */
-#define GPC_INT_POL_HI BIT_27 /* IRQ Polarity is Active HIGH */
-#define GPC_75_OHM BIT_26 /* Use 75 Ohm Termination instead of 50 */
-#define GPC_DIS_FC BIT_25 /* Disable Automatic Fiber/Copper Detection */
-#define GPC_DIS_SLEEP BIT_24 /* Disable Energy Detect */
-#define GPC_HWCFG_M_3 BIT_23 /* HWCFG_MODE[3] */
-#define GPC_HWCFG_M_2 BIT_22 /* HWCFG_MODE[2] */
-#define GPC_HWCFG_M_1 BIT_21 /* HWCFG_MODE[1] */
-#define GPC_HWCFG_M_0 BIT_20 /* HWCFG_MODE[0] */
-#define GPC_ANEG_0 BIT_19 /* ANEG[0] */
-#define GPC_ENA_XC BIT_18 /* Enable MDI crossover */
-#define GPC_DIS_125 BIT_17 /* Disable 125 MHz clock */
-#define GPC_ANEG_3 BIT_16 /* ANEG[3] */
-#define GPC_ANEG_2 BIT_15 /* ANEG[2] */
-#define GPC_ANEG_1 BIT_14 /* ANEG[1] */
-#define GPC_ENA_PAUSE BIT_13 /* Enable Pause (SYM_OR_REM) */
-#define GPC_PHYADDR_4 BIT_12 /* Bit 4 of Phy Addr */
-#define GPC_PHYADDR_3 BIT_11 /* Bit 3 of Phy Addr */
-#define GPC_PHYADDR_2 BIT_10 /* Bit 2 of Phy Addr */
-#define GPC_PHYADDR_1 BIT_9 /* Bit 1 of Phy Addr */
-#define GPC_PHYADDR_0 BIT_8 /* Bit 0 of Phy Addr */
- /* Bits 7..2: reserved */
-#define GPC_RST_CLR BIT_1 /* Clear GPHY Reset */
-#define GPC_RST_SET BIT_0 /* Set GPHY Reset */
-
-#define GPC_HWCFG_GMII_COP (GPC_HWCFG_M_3 | GPC_HWCFG_M_2 | \
- GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
-
-#define GPC_HWCFG_GMII_FIB ( GPC_HWCFG_M_2 | \
- GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
-
-#define GPC_ANEG_ADV_ALL_M (GPC_ANEG_3 | GPC_ANEG_2 | \
- GPC_ANEG_1 | GPC_ANEG_0)
-
-/* forced speed and duplex mode (don't mix with other ANEG bits) */
-#define GPC_FRC10MBIT_HALF 0
-#define GPC_FRC10MBIT_FULL GPC_ANEG_0
-#define GPC_FRC100MBIT_HALF GPC_ANEG_1
-#define GPC_FRC100MBIT_FULL (GPC_ANEG_0 | GPC_ANEG_1)
-
-/* auto-negotiation with limited advertised speeds */
-/* mix only with master/slave settings (for copper) */
-#define GPC_ADV_1000_HALF GPC_ANEG_2
-#define GPC_ADV_1000_FULL GPC_ANEG_3
-#define GPC_ADV_ALL (GPC_ANEG_2 | GPC_ANEG_3)
-
-/* master/slave settings */
-/* only for copper with 1000 Mbps */
-#define GPC_FORCE_MASTER 0
-#define GPC_FORCE_SLAVE GPC_ANEG_0
-#define GPC_PREF_MASTER GPC_ANEG_1
-#define GPC_PREF_SLAVE (GPC_ANEG_1 | GPC_ANEG_0)
-
-/* GMAC_IRQ_SRC 8 bit GMAC Interrupt Source Reg (YUKON only) */
-/* GMAC_IRQ_MSK 8 bit GMAC Interrupt Mask Reg (YUKON only) */
-#define GM_IS_TX_CO_OV BIT_5 /* Transmit Counter Overflow IRQ */
-#define GM_IS_RX_CO_OV BIT_4 /* Receive Counter Overflow IRQ */
-#define GM_IS_TX_FF_UR BIT_3 /* Transmit FIFO Underrun */
-#define GM_IS_TX_COMPL BIT_2 /* Frame Transmission Complete */
-#define GM_IS_RX_FF_OR BIT_1 /* Receive FIFO Overrun */
-#define GM_IS_RX_COMPL BIT_0 /* Frame Reception Complete */
-
-#define GMAC_DEF_MSK (GM_IS_TX_CO_OV | GM_IS_RX_CO_OV | \
- GM_IS_TX_FF_UR)
-
-/* GMAC_LINK_CTRL 16 bit GMAC Link Control Reg (YUKON only) */
- /* Bits 15.. 2: reserved */
-#define GMLC_RST_CLR BIT_1S /* Clear GMAC Link Reset */
-#define GMLC_RST_SET BIT_0S /* Set GMAC Link Reset */
-
-
-/* WOL_CTRL_STAT 16 bit WOL Control/Status Reg */
-#define WOL_CTL_LINK_CHG_OCC BIT_15S
-#define WOL_CTL_MAGIC_PKT_OCC BIT_14S
-#define WOL_CTL_PATTERN_OCC BIT_13S
-
-#define WOL_CTL_CLEAR_RESULT BIT_12S
-
-#define WOL_CTL_ENA_PME_ON_LINK_CHG BIT_11S
-#define WOL_CTL_DIS_PME_ON_LINK_CHG BIT_10S
-#define WOL_CTL_ENA_PME_ON_MAGIC_PKT BIT_9S
-#define WOL_CTL_DIS_PME_ON_MAGIC_PKT BIT_8S
-#define WOL_CTL_ENA_PME_ON_PATTERN BIT_7S
-#define WOL_CTL_DIS_PME_ON_PATTERN BIT_6S
-
-#define WOL_CTL_ENA_LINK_CHG_UNIT BIT_5S
-#define WOL_CTL_DIS_LINK_CHG_UNIT BIT_4S
-#define WOL_CTL_ENA_MAGIC_PKT_UNIT BIT_3S
-#define WOL_CTL_DIS_MAGIC_PKT_UNIT BIT_2S
-#define WOL_CTL_ENA_PATTERN_UNIT BIT_1S
-#define WOL_CTL_DIS_PATTERN_UNIT BIT_0S
-
-#define WOL_CTL_DEFAULT \
- (WOL_CTL_DIS_PME_ON_LINK_CHG | \
- WOL_CTL_DIS_PME_ON_PATTERN | \
- WOL_CTL_DIS_PME_ON_MAGIC_PKT | \
- WOL_CTL_DIS_LINK_CHG_UNIT | \
- WOL_CTL_DIS_PATTERN_UNIT | \
- WOL_CTL_DIS_MAGIC_PKT_UNIT)
-
-/* WOL_MATCH_CTL 8 bit WOL Match Control Reg */
-#define WOL_CTL_PATT_ENA(x) (BIT_0 << (x))
-
-#define SK_NUM_WOL_PATTERN 7
-#define SK_PATTERN_PER_WORD 4
-#define SK_BITMASK_PATTERN 7
-#define SK_POW_PATTERN_LENGTH 128
-
-#define WOL_LENGTH_MSK 0x7f
-#define WOL_LENGTH_SHIFT 8
-
-
-/* Receive and Transmit Descriptors ******************************************/
-
-/* Transmit Descriptor struct */
-typedef struct s_HwTxd {
- SK_U32 volatile TxCtrl; /* Transmit Buffer Control Field */
- SK_U32 TxNext; /* Physical Address Pointer to the next TxD */
- SK_U32 TxAdrLo; /* Physical Tx Buffer Address lower dword */
- SK_U32 TxAdrHi; /* Physical Tx Buffer Address upper dword */
- SK_U32 TxStat; /* Transmit Frame Status Word */
-#ifndef SK_USE_REV_DESC
- SK_U16 TxTcpOffs; /* TCP Checksum Calculation Start Value */
- SK_U16 TxRes1; /* 16 bit reserved field */
- SK_U16 TxTcpWp; /* TCP Checksum Write Position */
- SK_U16 TxTcpSp; /* TCP Checksum Calculation Start Position */
-#else /* SK_USE_REV_DESC */
- SK_U16 TxRes1; /* 16 bit reserved field */
- SK_U16 TxTcpOffs; /* TCP Checksum Calculation Start Value */
- SK_U16 TxTcpSp; /* TCP Checksum Calculation Start Position */
- SK_U16 TxTcpWp; /* TCP Checksum Write Position */
-#endif /* SK_USE_REV_DESC */
- SK_U32 TxRes2; /* 32 bit reserved field */
-} SK_HWTXD;
-
-/* Receive Descriptor struct */
-typedef struct s_HwRxd {
- SK_U32 volatile RxCtrl; /* Receive Buffer Control Field */
- SK_U32 RxNext; /* Physical Address Pointer to the next RxD */
- SK_U32 RxAdrLo; /* Physical Rx Buffer Address lower dword */
- SK_U32 RxAdrHi; /* Physical Rx Buffer Address upper dword */
- SK_U32 RxStat; /* Receive Frame Status Word */
- SK_U32 RxTiSt; /* Receive Time Stamp (from XMAC on GENESIS) */
-#ifndef SK_USE_REV_DESC
- SK_U16 RxTcpSum1; /* TCP Checksum 1 */
- SK_U16 RxTcpSum2; /* TCP Checksum 2 */
- SK_U16 RxTcpSp1; /* TCP Checksum Calculation Start Position 1 */
- SK_U16 RxTcpSp2; /* TCP Checksum Calculation Start Position 2 */
-#else /* SK_USE_REV_DESC */
- SK_U16 RxTcpSum2; /* TCP Checksum 2 */
- SK_U16 RxTcpSum1; /* TCP Checksum 1 */
- SK_U16 RxTcpSp2; /* TCP Checksum Calculation Start Position 2 */
- SK_U16 RxTcpSp1; /* TCP Checksum Calculation Start Position 1 */
-#endif /* SK_USE_REV_DESC */
-} SK_HWRXD;
-
-/*
- * Drivers which use the reverse descriptor feature (PCI_OUR_REG_2)
- * should set the define SK_USE_REV_DESC.
- * Structures are 'normaly' not endianess dependent. But in
- * this case the SK_U16 fields are bound to bit positions inside the
- * descriptor. RxTcpSum1 e.g. must start at bit 0 within the 6.th DWord.
- * The bit positions inside a DWord are of course endianess dependent and
- * swaps if the DWord is swapped by the hardware.
- */
-
-
-/* Descriptor Bit Definition */
-/* TxCtrl Transmit Buffer Control Field */
-/* RxCtrl Receive Buffer Control Field */
-#define BMU_OWN BIT_31 /* OWN bit: 0=host/1=BMU */
-#define BMU_STF BIT_30 /* Start of Frame */
-#define BMU_EOF BIT_29 /* End of Frame */
-#define BMU_IRQ_EOB BIT_28 /* Req "End of Buffer" IRQ */
-#define BMU_IRQ_EOF BIT_27 /* Req "End of Frame" IRQ */
-/* TxCtrl specific bits */
-#define BMU_STFWD BIT_26 /* (Tx) Store & Forward Frame */
-#define BMU_NO_FCS BIT_25 /* (Tx) Disable MAC FCS (CRC) generation */
-#define BMU_SW BIT_24 /* (Tx) 1 bit res. for SW use */
-/* RxCtrl specific bits */
-#define BMU_DEV_0 BIT_26 /* (Rx) Transfer data to Dev0 */
-#define BMU_STAT_VAL BIT_25 /* (Rx) Rx Status Valid */
-#define BMU_TIST_VAL BIT_24 /* (Rx) Rx TimeStamp Valid */
- /* Bit 23..16: BMU Check Opcodes */
-#define BMU_CHECK (0x55L<<16) /* Default BMU check */
-#define BMU_TCP_CHECK (0x56L<<16) /* Descr with TCP ext */
-#define BMU_UDP_CHECK (0x57L<<16) /* Descr with UDP ext (YUKON only) */
-#define BMU_BBC 0xFFFFL /* Bit 15.. 0: Buffer Byte Counter */
-
-/* TxStat Transmit Frame Status Word */
-/* RxStat Receive Frame Status Word */
-/*
- *Note: TxStat is reserved for ASIC loopback mode only
- *
- * The Bits of the Status words are defined in xmac_ii.h
- * (see XMR_FS bits)
- */
-
-/* other defines *************************************************************/
-
-/*
- * FlashProm specification
- */
-#define MAX_PAGES 0x20000L /* Every byte has a single page */
-#define MAX_FADDR 1 /* 1 byte per page */
-#define SKFDDI_PSZ 8 /* address PROM size */
-
-/* macros ********************************************************************/
-
-/*
- * Receive and Transmit Queues
- */
-#define Q_R1 0x0000 /* Receive Queue 1 */
-#define Q_R2 0x0080 /* Receive Queue 2 */
-#define Q_XS1 0x0200 /* Synchronous Transmit Queue 1 */
-#define Q_XA1 0x0280 /* Asynchronous Transmit Queue 1 */
-#define Q_XS2 0x0300 /* Synchronous Transmit Queue 2 */
-#define Q_XA2 0x0380 /* Asynchronous Transmit Queue 2 */
-
-/*
- * Macro Q_ADDR()
- *
- * Use this macro to access the Receive and Transmit Queue Registers.
- *
- * para:
- * Queue Queue to access.
- * Values: Q_R1, Q_R2, Q_XS1, Q_XA1, Q_XS2, and Q_XA2
- * Offs Queue register offset.
- * Values: Q_D, Q_DA_L ... Q_T2, Q_T3
- *
- * usage SK_IN32(pAC, Q_ADDR(Q_R2, Q_BC), pVal)
- */
-#define Q_ADDR(Queue, Offs) (B8_Q_REGS + (Queue) + (Offs))
-
-/*
- * Macro RB_ADDR()
- *
- * Use this macro to access the RAM Buffer Registers.
- *
- * para:
- * Queue Queue to access.
- * Values: Q_R1, Q_R2, Q_XS1, Q_XA1, Q_XS2, and Q_XA2
- * Offs Queue register offset.
- * Values: RB_START, RB_END ... RB_LEV, RB_CTRL
- *
- * usage SK_IN32(pAC, RB_ADDR(Q_R2, RB_RP), pVal)
- */
-#define RB_ADDR(Queue, Offs) (B16_RAM_REGS + (Queue) + (Offs))
-
-
-/*
- * MAC Related Registers
- */
-#define MAC_1 0 /* belongs to the port near the slot */
-#define MAC_2 1 /* belongs to the port far away from the slot */
-
-/*
- * Macro MR_ADDR()
- *
- * Use this macro to access a MAC Related Registers inside the ASIC.
- *
- * para:
- * Mac MAC to access.
- * Values: MAC_1, MAC_2
- * Offs MAC register offset.
- * Values: RX_MFF_EA, RX_MFF_WP ... LNK_LED_REG,
- * TX_MFF_EA, TX_MFF_WP ... TX_LED_TST
- *
- * usage SK_IN32(pAC, MR_ADDR(MAC_1, TX_MFF_EA), pVal)
- */
-#define MR_ADDR(Mac, Offs) (((Mac) << 7) + (Offs))
-
-#ifdef SK_LITTLE_ENDIAN
-#define XM_WORD_LO 0
-#define XM_WORD_HI 1
-#else /* !SK_LITTLE_ENDIAN */
-#define XM_WORD_LO 1
-#define XM_WORD_HI 0
-#endif /* !SK_LITTLE_ENDIAN */
-
-
-/*
- * macros to access the XMAC (GENESIS only)
- *
- * XM_IN16(), to read a 16 bit register (e.g. XM_MMU_CMD)
- * XM_OUT16(), to write a 16 bit register (e.g. XM_MMU_CMD)
- * XM_IN32(), to read a 32 bit register (e.g. XM_TX_EV_CNT)
- * XM_OUT32(), to write a 32 bit register (e.g. XM_TX_EV_CNT)
- * XM_INADDR(), to read a network address register (e.g. XM_SRC_CHK)
- * XM_OUTADDR(), to write a network address register (e.g. XM_SRC_CHK)
- * XM_INHASH(), to read the XM_HSM_CHK register
- * XM_OUTHASH() to write the XM_HSM_CHK register
- *
- * para:
- * Mac XMAC to access values: MAC_1 or MAC_2
- * IoC I/O context needed for SK I/O macros
- * Reg XMAC Register to read or write
- * (p)Val Value or pointer to the value which should be read or written
- *
- * usage: XM_OUT16(IoC, MAC_1, XM_MMU_CMD, Value);
- */
-
-#define XMA(Mac, Reg) \
- ((BASE_XMAC_1 + (Mac) * (BASE_XMAC_2 - BASE_XMAC_1)) | ((Reg) << 1))
-
-#define XM_IN16(IoC, Mac, Reg, pVal) \
- SK_IN16((IoC), XMA((Mac), (Reg)), (pVal))
-
-#define XM_OUT16(IoC, Mac, Reg, Val) \
- SK_OUT16((IoC), XMA((Mac), (Reg)), (Val))
-
-#define XM_IN32(IoC, Mac, Reg, pVal) { \
- SK_IN16((IoC), XMA((Mac), (Reg)), \
- (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_LO]); \
- SK_IN16((IoC), XMA((Mac), (Reg+2)), \
- (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_HI]); \
-}
-
-#define XM_OUT32(IoC, Mac, Reg, Val) { \
- SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16)((Val) & 0xffffL)); \
- SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16)(((Val) >> 16) & 0xffffL));\
-}
-
-/* Remember: we are always writing to / reading from LITTLE ENDIAN memory */
-
-#define XM_INADDR(IoC, Mac, Reg, pVal) { \
- SK_U16 Word; \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_IN16((IoC), XMA((Mac), (Reg)), &Word); \
- pByte[0] = (SK_U8)(Word & 0x00ff); \
- pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), XMA((Mac), (Reg+2)), &Word); \
- pByte[2] = (SK_U8)(Word & 0x00ff); \
- pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), XMA((Mac), (Reg+4)), &Word); \
- pByte[4] = (SK_U8)(Word & 0x00ff); \
- pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
-}
-
-#define XM_OUTADDR(IoC, Mac, Reg, pVal) { \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16) \
- (((SK_U16)(pByte[0]) & 0x00ff) | \
- (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
- SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16) \
- (((SK_U16)(pByte[2]) & 0x00ff) | \
- (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
- SK_OUT16((IoC), XMA((Mac), (Reg+4)), (SK_U16) \
- (((SK_U16)(pByte[4]) & 0x00ff) | \
- (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
-}
-
-#define XM_INHASH(IoC, Mac, Reg, pVal) { \
- SK_U16 Word; \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_IN16((IoC), XMA((Mac), (Reg)), &Word); \
- pByte[0] = (SK_U8)(Word & 0x00ff); \
- pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), XMA((Mac), (Reg+2)), &Word); \
- pByte[2] = (SK_U8)(Word & 0x00ff); \
- pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), XMA((Mac), (Reg+4)), &Word); \
- pByte[4] = (SK_U8)(Word & 0x00ff); \
- pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), XMA((Mac), (Reg+6)), &Word); \
- pByte[6] = (SK_U8)(Word & 0x00ff); \
- pByte[7] = (SK_U8)((Word >> 8) & 0x00ff); \
-}
-
-#define XM_OUTHASH(IoC, Mac, Reg, pVal) { \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16) \
- (((SK_U16)(pByte[0]) & 0x00ff)| \
- (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
- SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16) \
- (((SK_U16)(pByte[2]) & 0x00ff)| \
- (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
- SK_OUT16((IoC), XMA((Mac), (Reg+4)), (SK_U16) \
- (((SK_U16)(pByte[4]) & 0x00ff)| \
- (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
- SK_OUT16((IoC), XMA((Mac), (Reg+6)), (SK_U16) \
- (((SK_U16)(pByte[6]) & 0x00ff)| \
- (((SK_U16)(pByte[7]) << 8) & 0xff00))); \
-}
-
-/*
- * macros to access the GMAC (YUKON only)
- *
- * GM_IN16(), to read a 16 bit register (e.g. GM_GP_STAT)
- * GM_OUT16(), to write a 16 bit register (e.g. GM_GP_CTRL)
- * GM_IN32(), to read a 32 bit register (e.g. GM_)
- * GM_OUT32(), to write a 32 bit register (e.g. GM_)
- * GM_INADDR(), to read a network address register (e.g. GM_SRC_ADDR_1L)
- * GM_OUTADDR(), to write a network address register (e.g. GM_SRC_ADDR_2L)
- * GM_INHASH(), to read the GM_MC_ADDR_H1 register
- * GM_OUTHASH() to write the GM_MC_ADDR_H1 register
- *
- * para:
- * Mac GMAC to access values: MAC_1 or MAC_2
- * IoC I/O context needed for SK I/O macros
- * Reg GMAC Register to read or write
- * (p)Val Value or pointer to the value which should be read or written
- *
- * usage: GM_OUT16(IoC, MAC_1, GM_GP_CTRL, Value);
- */
-
-#define GMA(Mac, Reg) \
- ((BASE_GMAC_1 + (Mac) * (BASE_GMAC_2 - BASE_GMAC_1)) | (Reg))
-
-#define GM_IN16(IoC, Mac, Reg, pVal) \
- SK_IN16((IoC), GMA((Mac), (Reg)), (pVal))
-
-#define GM_OUT16(IoC, Mac, Reg, Val) \
- SK_OUT16((IoC), GMA((Mac), (Reg)), (Val))
-
-#define GM_IN32(IoC, Mac, Reg, pVal) { \
- SK_IN16((IoC), GMA((Mac), (Reg)), \
- (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_LO]); \
- SK_IN16((IoC), GMA((Mac), (Reg+4)), \
- (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_HI]); \
-}
-
-#define GM_OUT32(IoC, Mac, Reg, Val) { \
- SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16)((Val) & 0xffffL)); \
- SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16)(((Val) >> 16) & 0xffffL));\
-}
-
-#define GM_INADDR(IoC, Mac, Reg, pVal) { \
- SK_U16 Word; \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_IN16((IoC), GMA((Mac), (Reg)), &Word); \
- pByte[0] = (SK_U8)(Word & 0x00ff); \
- pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), GMA((Mac), (Reg+4)), &Word); \
- pByte[2] = (SK_U8)(Word & 0x00ff); \
- pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), GMA((Mac), (Reg+8)), &Word); \
- pByte[4] = (SK_U8)(Word & 0x00ff); \
- pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
-}
-
-#define GM_OUTADDR(IoC, Mac, Reg, pVal) { \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16) \
- (((SK_U16)(pByte[0]) & 0x00ff) | \
- (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
- SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16) \
- (((SK_U16)(pByte[2]) & 0x00ff) | \
- (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
- SK_OUT16((IoC), GMA((Mac), (Reg+8)), (SK_U16) \
- (((SK_U16)(pByte[4]) & 0x00ff) | \
- (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
-}
-
-#define GM_INHASH(IoC, Mac, Reg, pVal) { \
- SK_U16 Word; \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_IN16((IoC), GMA((Mac), (Reg)), &Word); \
- pByte[0] = (SK_U8)(Word & 0x00ff); \
- pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), GMA((Mac), (Reg+4)), &Word); \
- pByte[2] = (SK_U8)(Word & 0x00ff); \
- pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), GMA((Mac), (Reg+8)), &Word); \
- pByte[4] = (SK_U8)(Word & 0x00ff); \
- pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
- SK_IN16((IoC), GMA((Mac), (Reg+12)), &Word); \
- pByte[6] = (SK_U8)(Word & 0x00ff); \
- pByte[7] = (SK_U8)((Word >> 8) & 0x00ff); \
-}
-
-#define GM_OUTHASH(IoC, Mac, Reg, pVal) { \
- SK_U8 *pByte; \
- pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
- SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16) \
- (((SK_U16)(pByte[0]) & 0x00ff)| \
- (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
- SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16) \
- (((SK_U16)(pByte[2]) & 0x00ff)| \
- (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
- SK_OUT16((IoC), GMA((Mac), (Reg+8)), (SK_U16) \
- (((SK_U16)(pByte[4]) & 0x00ff)| \
- (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
- SK_OUT16((IoC), GMA((Mac), (Reg+12)), (SK_U16) \
- (((SK_U16)(pByte[6]) & 0x00ff)| \
- (((SK_U16)(pByte[7]) << 8) & 0xff00))); \
-}
-
-/*
- * Different MAC Types
- */
-#define SK_MAC_XMAC 0 /* Xaqti XMAC II */
-#define SK_MAC_GMAC 1 /* Marvell GMAC */
-
-/*
- * Different PHY Types
- */
-#define SK_PHY_XMAC 0 /* integrated in XMAC II */
-#define SK_PHY_BCOM 1 /* Broadcom BCM5400 */
-#define SK_PHY_LONE 2 /* Level One LXT1000 */
-#define SK_PHY_NAT 3 /* National DP83891 */
-#define SK_PHY_MARV_COPPER 4 /* Marvell 88E1011S */
-#define SK_PHY_MARV_FIBER 5 /* Marvell 88E1011S working on fiber */
-
-/*
- * PHY addresses (bits 12..8 of PHY address reg)
- */
-#define PHY_ADDR_XMAC (0<<8)
-#define PHY_ADDR_BCOM (1<<8)
-#define PHY_ADDR_LONE (3<<8)
-#define PHY_ADDR_NAT (0<<8)
-
-/* GPHY address (bits 15..11 of SMI control reg) */
-#define PHY_ADDR_MARV 0
-
-/*
- * macros to access the PHY
- *
- * PHY_READ() read a 16 bit value from the PHY
- * PHY_WRITE() write a 16 bit value to the PHY
- *
- * para:
- * IoC I/O context needed for SK I/O macros
- * pPort Pointer to port struct for PhyAddr
- * Mac XMAC to access values: MAC_1 or MAC_2
- * PhyReg PHY Register to read or write
- * (p)Val Value or pointer to the value which should be read or
- * written.
- *
- * usage: PHY_READ(IoC, pPort, MAC_1, PHY_CTRL, Value);
- * Warning: a PHY_READ on an uninitialized PHY (PHY still in reset) never
- * comes back. This is checked in DEBUG mode.
- */
-#ifndef DEBUG
-#define PHY_READ(IoC, pPort, Mac, PhyReg, pVal) { \
- SK_U16 Mmu; \
- \
- XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr); \
- XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
- if ((pPort)->PhyType != SK_PHY_XMAC) { \
- do { \
- XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
- } while ((Mmu & XM_MMU_PHY_RDY) == 0); \
- XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
- } \
-}
-#else
-#define PHY_READ(IoC, pPort, Mac, PhyReg, pVal) { \
- SK_U16 Mmu; \
- int __i = 0; \
- \
- XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr); \
- XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
- if ((pPort)->PhyType != SK_PHY_XMAC) { \
- do { \
- XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
- __i++; \
- if (__i > 100000) { \
- SK_DBG_PRINTF("*****************************\n"); \
- SK_DBG_PRINTF("PHY_READ on uninitialized PHY\n"); \
- SK_DBG_PRINTF("*****************************\n"); \
- break; \
- } \
- } while ((Mmu & XM_MMU_PHY_RDY) == 0); \
- XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
- } \
-}
-#endif /* DEBUG */
-
-#define PHY_WRITE(IoC, pPort, Mac, PhyReg, Val) { \
- SK_U16 Mmu; \
- \
- if ((pPort)->PhyType != SK_PHY_XMAC) { \
- do { \
- XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
- } while ((Mmu & XM_MMU_PHY_BUSY) != 0); \
- } \
- XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr); \
- XM_OUT16((IoC), (Mac), XM_PHY_DATA, (Val)); \
- if ((pPort)->PhyType != SK_PHY_XMAC) { \
- do { \
- XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
- } while ((Mmu & XM_MMU_PHY_BUSY) != 0); \
- } \
-}
-
-/*
- * Macro PCI_C()
- *
- * Use this macro to access PCI config register from the I/O space.
- *
- * para:
- * Addr PCI configuration register to access.
- * Values: PCI_VENDOR_ID ... PCI_VPD_ADR_REG,
- *
- * usage SK_IN16(pAC, PCI_C(PCI_VENDOR_ID), pVal);
- */
-#define PCI_C(Addr) (B7_CFG_SPC + (Addr)) /* PCI Config Space */
-
-/*
- * Macro SK_HW_ADDR(Base, Addr)
- *
- * Calculates the effective HW address
- *
- * para:
- * Base I/O or memory base address
- * Addr Address offset
- *
- * usage: May be used in SK_INxx and SK_OUTxx macros
- * #define SK_IN8(pAC, Addr, pVal) ...\
- * *pVal = (SK_U8)inp(SK_HW_ADDR(pAC->Hw.Iop, Addr)))
- */
-#ifdef SK_MEM_MAPPED_IO
-#define SK_HW_ADDR(Base, Addr) ((Base) + (Addr))
-#else /* SK_MEM_MAPPED_IO */
-#define SK_HW_ADDR(Base, Addr) \
- ((Base) + (((Addr) & 0x7f) | (((Addr) >> 7 > 0) ? 0x80 : 0)))
-#endif /* SK_MEM_MAPPED_IO */
-
-#define SZ_LONG (sizeof(SK_U32))
-
-/*
- * Macro SK_HWAC_LINK_LED()
- *
- * Use this macro to set the link LED mode.
- * para:
- * pAC Pointer to adapter context struct
- * IoC I/O context needed for SK I/O macros
- * Port Port number
- * Mode Mode to set for this LED
- */
-#define SK_HWAC_LINK_LED(pAC, IoC, Port, Mode) \
- SK_OUT8(IoC, MR_ADDR(Port, LNK_LED_REG), Mode);
-
-
-/* typedefs *******************************************************************/
-
-
-/* function prototypes ********************************************************/
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __INC_SKGEHW_H */
+/******************************************************************************
+ *
+ * Name: skgehw.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Defines and Macros for the Gigabit Ethernet Adapter Product Family
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ * $Log: skgehw.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.49 2003/01/28 09:43:49 rschmidt
+ * Added defines for PCI-Spec. 2.3 IRQ
+ * Added defines for CLK_RUN (YUKON-Lite)
+ * Editorial changes
+ *
+ * Revision 1.48 2002/12/05 10:25:11 rschmidt
+ * Added defines for Half Duplex Burst Mode On/Off
+ * Added defines for Rx GMAC FIFO Flush feature
+ * Editorial changes
+ *
+ * Revision 1.47 2002/11/12 17:01:31 rschmidt
+ * Added defines for WOL_CTL_DEFAULT
+ * Editorial changes
+ *
+ * Revision 1.46 2002/10/14 14:47:57 rschmidt
+ * Corrected bit mask for HW self test results
+ * Added defines for WOL Registers
+ * Editorial changes
+ *
+ * Revision 1.45 2002/10/11 09:25:22 mkarl
+ * Added bit mask for HW self test results.
+ *
+ * Revision 1.44 2002/08/16 14:44:36 rschmidt
+ * Added define GPC_HWCFG_GMII_FIB for YUKON Fiber
+ *
+ * Revision 1.43 2002/08/12 13:31:50 rschmidt
+ * Corrected macros for GMAC Address Registers: GM_INADDR(),
+ * GM_OUTADDR(), GM_INHASH, GM_OUTHASH.
+ * Editorial changes
+ *
+ * Revision 1.42 2002/08/08 15:37:56 rschmidt
+ * Added defines for Power Management Capabilities
+ * Editorial changes
+ *
+ * Revision 1.41 2002/07/23 16:02:25 rschmidt
+ * Added macro WOL_REG() to access WOL reg. (HW-Bug in YUKON 1st rev.)
+ *
+ * Revision 1.40 2002/07/15 15:41:37 rschmidt
+ * Added new defines for Power Management Cap. & Control
+ * Editorial changes
+ *
+ * Revision 1.39 2002/06/10 09:37:07 rschmidt
+ * Added macros for the ADDR-Modul
+ *
+ * Revision 1.38 2002/06/05 08:15:19 rschmidt
+ * Added defines for WOL Registers
+ * Editorial changes
+ *
+ * Revision 1.37 2002/04/25 11:39:23 rschmidt
+ * Added new defines for PCI Our Register 1
+ * Added new registers and defines for YUKON (Rx FIFO, Tx FIFO,
+ * Time Stamp Timer, GMAC Control, GPHY Control,Link Control,
+ * GMAC IRQ Source and Mask, Wake-up Frame Pattern Match);
+ * Added new defines for Control/Status (VAUX available)
+ * Added Chip ID for YUKON
+ * Added define for descriptors with UDP ext. for YUKON
+ * Added macros to access the GMAC
+ * Added new Phy Type for Marvell 88E1011S (GPHY)
+ * Editorial changes
+ *
+ * Revision 1.36 2000/11/09 12:32:49 rassmann
+ * Renamed variables.
+ *
+ * Revision 1.35 2000/05/19 10:17:13 cgoos
+ * Added inactivity check in PHY_READ (in DEBUG mode only).
+ *
+ * Revision 1.34 1999/11/22 13:53:40 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.33 1999/08/27 11:17:10 malthoff
+ * It's more savely to put brackets around macro parameters.
+ * Brackets added for PHY_READ and PHY_WRITE.
+ *
+ * Revision 1.32 1999/05/19 07:31:01 cgoos
+ * Changes for 1000Base-T.
+ * Added HWAC_LINK_LED macro.
+ *
+ * Revision 1.31 1999/03/12 13:27:40 malthoff
+ * Remove __STDC__.
+ *
+ * Revision 1.30 1999/02/09 09:28:20 malthoff
+ * Add PCI_ERRBITS.
+ *
+ * Revision 1.29 1999/01/26 08:55:48 malthoff
+ * Bugfix: The 16 bit field relations inside the descriptor are
+ * endianess dependend if the descriptor reversal feature
+ * (PCI_REV_DESC bit in PCI_OUR_REG_2) is enabled.
+ * Drivers which use this feature has to set the define
+ * SK_USE_REV_DESC.
+ *
+ * Revision 1.28 1998/12/10 11:10:22 malthoff
+ * bug fix: IS_IRQ_STAT and IS_IRQ_MST_ERR has been twisted.
+ *
+ * Revision 1.27 1998/11/13 14:19:21 malthoff
+ * Bug Fix: The bit definition of B3_PA_CTRL has completely
+ * changed from HW Spec v1.3 to v1.5.
+ *
+ * Revision 1.26 1998/11/04 08:31:48 cgoos
+ * Fixed byte ordering in XM_OUTADDR/XM_OUTHASH macros.
+ *
+ * Revision 1.25 1998/11/04 07:16:25 cgoos
+ * Changed byte ordering in XM_INADDR/XM_INHASH again.
+ *
+ * Revision 1.24 1998/11/02 11:08:43 malthoff
+ * RxCtrl and TxCtrl must be volatile.
+ *
+ * Revision 1.23 1998/10/28 13:50:45 malthoff
+ * Fix: Endian support missing in XM_IN/OUT-ADDR/HASH macros.
+ *
+ * Revision 1.22 1998/10/26 08:01:36 malthoff
+ * RX_MFF_CTRL1 is split up into RX_MFF_CTRL1,
+ * RX_MFF_STAT_TO, and RX_MFF_TIST_TO.
+ * TX_MFF_CTRL1 is split up TX_MFF_CTRL1 and TX_MFF_WAF.
+ *
+ * Revision 1.21 1998/10/20 07:43:10 malthoff
+ * Fix: XM_IN/OUT/ADDR/HASH macros:
+ * The pointer must be casted.
+ *
+ * Revision 1.20 1998/10/19 15:53:59 malthoff
+ * Remove ML proto definitions.
+ *
+ * Revision 1.19 1998/10/16 14:40:17 gklug
+ * fix: typo B0_XM_IMSK regs
+ *
+ * Revision 1.18 1998/10/16 09:46:54 malthoff
+ * Remove temp defines for ML diag prototype.
+ * Fix register definition for B0_XM1_PHY_DATA, B0_XM1_PHY_DATA
+ * B0_XM2_PHY_DATA, B0_XM2_PHY_ADDR, B0_XA1_CSR, B0_XS1_CSR,
+ * B0_XS2_CSR, and B0_XA2_CSR.
+ *
+ * Revision 1.17 1998/10/14 06:03:14 cgoos
+ * Changed shifted constant to ULONG.
+ *
+ * Revision 1.16 1998/10/09 07:05:41 malthoff
+ * Rename ALL_PA_ENA_TO to PA_ENA_TO_ALL.
+ *
+ * Revision 1.15 1998/10/05 07:54:23 malthoff
+ * Split up RB_CTRL and it's bit definition into
+ * RB_CTRL, RB_TST1, and RB_TST2.
+ * Rename RB_RX_HTPP to RB_RX_LTPP.
+ * Add ALL_PA_ENA_TO. Modify F_WATER_MARK
+ * according to HW Spec. v1.5.
+ * Add MFF_TX_CTRL_DEF.
+ *
+ * Revision 1.14 1998/09/28 13:31:16 malthoff
+ * bug fix: B2_MAC_3 is 0x110 not 0x114
+ *
+ * Revision 1.13 1998/09/24 14:42:56 malthoff
+ * Split the RX_MFF_TST into RX_MFF_CTRL2,
+ * RX_MFF_TST1, and RX_MFF_TST2.
+ * Rename RX_MFF_CTRL to RX_MFF_CTRL1.
+ * Add BMU bit CSR_SV_IDLE.
+ * Add macros PHY_READ() and PHY_WRITE().
+ * Rename macro SK_ADDR() to SK_HW_ADDR()
+ * because of conflicts with the Address Module.
+ *
+ * Revision 1.12 1998/09/16 07:25:33 malthoff
+ * Change the parameter order in the XM_INxx and XM_OUTxx macros,
+ * to have the IoC as first parameter.
+ *
+ * Revision 1.11 1998/09/03 09:58:41 malthoff
+ * Rework the XM_xxx macros. Use {} instead of () to
+ * be compatible with SK_xxx macros which are defined
+ * with {}.
+ *
+ * Revision 1.10 1998/09/02 11:16:39 malthoff
+ * Temporary modify B2_I2C_SW to make tests with
+ * the GE/ML prototype.
+ *
+ * Revision 1.9 1998/08/19 09:11:49 gklug
+ * fix: struct are removed from c-source (see CCC)
+ * add: typedefs for all structs
+ *
+ * Revision 1.8 1998/08/18 08:27:27 malthoff
+ * Add some temporary workarounds to test GE
+ * sources with the ML.
+ *
+ * Revision 1.7 1998/07/03 14:42:26 malthoff
+ * bug fix: Correct macro XMA().
+ * Add temporary workaround to access the PCI config space over I/O
+ *
+ * Revision 1.6 1998/06/23 11:30:36 malthoff
+ * Remove ';' with ',' in macors.
+ *
+ * Revision 1.5 1998/06/22 14:20:57 malthoff
+ * Add macro SK_ADDR(Base,Addr).
+ *
+ * Revision 1.4 1998/06/19 13:35:43 malthoff
+ * change 'pGec' with 'pAC'
+ *
+ * Revision 1.3 1998/06/17 14:58:16 cvs
+ * Lost keywords reinserted.
+ *
+ * Revision 1.1 1998/06/17 14:16:36 cvs
+ * created
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKGEHW_H
+#define __INC_SKGEHW_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* defines ********************************************************************/
+
+#define BIT_31 (1UL << 31)
+#define BIT_30 (1L << 30)
+#define BIT_29 (1L << 29)
+#define BIT_28 (1L << 28)
+#define BIT_27 (1L << 27)
+#define BIT_26 (1L << 26)
+#define BIT_25 (1L << 25)
+#define BIT_24 (1L << 24)
+#define BIT_23 (1L << 23)
+#define BIT_22 (1L << 22)
+#define BIT_21 (1L << 21)
+#define BIT_20 (1L << 20)
+#define BIT_19 (1L << 19)
+#define BIT_18 (1L << 18)
+#define BIT_17 (1L << 17)
+#define BIT_16 (1L << 16)
+#define BIT_15 (1L << 15)
+#define BIT_14 (1L << 14)
+#define BIT_13 (1L << 13)
+#define BIT_12 (1L << 12)
+#define BIT_11 (1L << 11)
+#define BIT_10 (1L << 10)
+#define BIT_9 (1L << 9)
+#define BIT_8 (1L << 8)
+#define BIT_7 (1L << 7)
+#define BIT_6 (1L << 6)
+#define BIT_5 (1L << 5)
+#define BIT_4 (1L << 4)
+#define BIT_3 (1L << 3)
+#define BIT_2 (1L << 2)
+#define BIT_1 (1L << 1)
+#define BIT_0 1L
+
+#define BIT_15S (1U << 15)
+#define BIT_14S (1 << 14)
+#define BIT_13S (1 << 13)
+#define BIT_12S (1 << 12)
+#define BIT_11S (1 << 11)
+#define BIT_10S (1 << 10)
+#define BIT_9S (1 << 9)
+#define BIT_8S (1 << 8)
+#define BIT_7S (1 << 7)
+#define BIT_6S (1 << 6)
+#define BIT_5S (1 << 5)
+#define BIT_4S (1 << 4)
+#define BIT_3S (1 << 3)
+#define BIT_2S (1 << 2)
+#define BIT_1S (1 << 1)
+#define BIT_0S 1
+
+#define SHIFT31(x) ((x) << 31)
+#define SHIFT30(x) ((x) << 30)
+#define SHIFT29(x) ((x) << 29)
+#define SHIFT28(x) ((x) << 28)
+#define SHIFT27(x) ((x) << 27)
+#define SHIFT26(x) ((x) << 26)
+#define SHIFT25(x) ((x) << 25)
+#define SHIFT24(x) ((x) << 24)
+#define SHIFT23(x) ((x) << 23)
+#define SHIFT22(x) ((x) << 22)
+#define SHIFT21(x) ((x) << 21)
+#define SHIFT20(x) ((x) << 20)
+#define SHIFT19(x) ((x) << 19)
+#define SHIFT18(x) ((x) << 18)
+#define SHIFT17(x) ((x) << 17)
+#define SHIFT16(x) ((x) << 16)
+#define SHIFT15(x) ((x) << 15)
+#define SHIFT14(x) ((x) << 14)
+#define SHIFT13(x) ((x) << 13)
+#define SHIFT12(x) ((x) << 12)
+#define SHIFT11(x) ((x) << 11)
+#define SHIFT10(x) ((x) << 10)
+#define SHIFT9(x) ((x) << 9)
+#define SHIFT8(x) ((x) << 8)
+#define SHIFT7(x) ((x) << 7)
+#define SHIFT6(x) ((x) << 6)
+#define SHIFT5(x) ((x) << 5)
+#define SHIFT4(x) ((x) << 4)
+#define SHIFT3(x) ((x) << 3)
+#define SHIFT2(x) ((x) << 2)
+#define SHIFT1(x) ((x) << 1)
+#define SHIFT0(x) ((x) << 0)
+
+/*
+ * Configuration Space header
+ * Since this module is used for different OS', those may be
+ * duplicate on some of them (e.g. Linux). But to keep the
+ * common source, we have to live with this...
+ */
+#define PCI_VENDOR_ID 0x00 /* 16 bit Vendor ID */
+#define PCI_DEVICE_ID 0x02 /* 16 bit Device ID */
+#define PCI_COMMAND 0x04 /* 16 bit Command */
+#define PCI_STATUS 0x06 /* 16 bit Status */
+#define PCI_REV_ID 0x08 /* 8 bit Revision ID */
+#if 0
+#define PCI_CLASS_CODE 0x09 /* 24 bit Class Code */
+#endif
+#define PCI_CACHE_LSZ 0x0c /* 8 bit Cache Line Size */
+#define PCI_LAT_TIM 0x0d /* 8 bit Latency Timer */
+#define PCI_HEADER_T 0x0e /* 8 bit Header Type */
+#define PCI_BIST 0x0f /* 8 bit Built-in selftest */
+#define PCI_BASE_1ST 0x10 /* 32 bit 1st Base address */
+#define PCI_BASE_2ND 0x14 /* 32 bit 2nd Base address */
+ /* Byte 0x18..0x2b: reserved */
+#define PCI_SUB_VID 0x2c /* 16 bit Subsystem Vendor ID */
+#define PCI_SUB_ID 0x2e /* 16 bit Subsystem ID */
+#define PCI_BASE_ROM 0x30 /* 32 bit Expansion ROM Base Address */
+#define PCI_CAP_PTR 0x34 /* 8 bit Capabilities Ptr */
+ /* Byte 35..3b: reserved */
+#define PCI_IRQ_LINE 0x3c /* 8 bit Interrupt Line */
+#define PCI_IRQ_PIN 0x3d /* 8 bit Interrupt Pin */
+#define PCI_MIN_GNT 0x3e /* 8 bit Min_Gnt */
+#define PCI_MAX_LAT 0x3f /* 8 bit Max_Lat */
+ /* Device Dependent Region */
+#define PCI_OUR_REG_1 0x40 /* 32 bit Our Register 1 */
+#define PCI_OUR_REG_2 0x44 /* 32 bit Our Register 2 */
+ /* Power Management Region */
+#define PCI_PM_CAP_ID 0x48 /* 8 bit Power Management Cap. ID */
+#define PCI_PM_NITEM 0x49 /* 8 bit Next Item Ptr */
+#define PCI_PM_CAP_REG 0x4a /* 16 bit Power Management Capabilities */
+#define PCI_PM_CTL_STS 0x4c /* 16 bit Power Manag. Control/Status */
+ /* Byte 0x4e: reserved */
+#define PCI_PM_DAT_REG 0x4f /* 8 bit Power Manag. Data Register */
+ /* VPD Region */
+#define PCI_VPD_CAP_ID 0x50 /* 8 bit VPD Cap. ID */
+#define PCI_VPD_NITEM 0x51 /* 8 bit Next Item Ptr */
+#define PCI_VPD_ADR_REG 0x52 /* 16 bit VPD Address Register */
+#define PCI_VPD_DAT_REG 0x54 /* 32 bit VPD Data Register */
+ /* Byte 0x58..0xff: reserved */
+
+/*
+ * I2C Address (PCI Config)
+ *
+ * Note: The temperature and voltage sensors are relocated on a different
+ * I2C bus.
+ */
+#define I2C_ADDR_VPD 0xA0 /* I2C address for the VPD EEPROM */
+
+/*
+ * Define Bits and Values of the registers
+ */
+/* PCI_COMMAND 16 bit Command */
+ /* Bit 15..11: reserved */
+#define PCI_INT_DIS BIT_10S /* Interrupt INTx# disable (PCI 2.3) */
+#define PCI_FBTEN BIT_9S /* Fast Back-To-Back enable */
+#define PCI_SERREN BIT_8S /* SERR enable */
+#define PCI_ADSTEP BIT_7S /* Address Stepping */
+#define PCI_PERREN BIT_6S /* Parity Report Response enable */
+#define PCI_VGA_SNOOP BIT_5S /* VGA palette snoop */
+#define PCI_MWIEN BIT_4S /* Memory write an inv cycl ena */
+#define PCI_SCYCEN BIT_3S /* Special Cycle enable */
+#define PCI_BMEN BIT_2S /* Bus Master enable */
+#define PCI_MEMEN BIT_1S /* Memory Space Access enable */
+#define PCI_IOEN BIT_0S /* I/O Space Access enable */
+
+#define PCI_COMMAND_VAL (PCI_FBTEN | PCI_SERREN | PCI_PERREN | PCI_MWIEN |\
+ PCI_BMEN | PCI_MEMEN | PCI_IOEN)
+
+/* PCI_STATUS 16 bit Status */
+#define PCI_PERR BIT_15S /* Parity Error */
+#define PCI_SERR BIT_14S /* Signaled SERR */
+#define PCI_RMABORT BIT_13S /* Received Master Abort */
+#define PCI_RTABORT BIT_12S /* Received Target Abort */
+ /* Bit 11: reserved */
+#define PCI_DEVSEL (3<<9) /* Bit 10.. 9: DEVSEL Timing */
+#define PCI_DEV_FAST (0<<9) /* fast */
+#define PCI_DEV_MEDIUM (1<<9) /* medium */
+#define PCI_DEV_SLOW (2<<9) /* slow */
+#define PCI_DATAPERR BIT_8S /* DATA Parity error detected */
+#define PCI_FB2BCAP BIT_7S /* Fast Back-to-Back Capability */
+#define PCI_UDF BIT_6S /* User Defined Features */
+#define PCI_66MHZCAP BIT_5S /* 66 MHz PCI bus clock capable */
+#define PCI_NEWCAP BIT_4S /* New cap. list implemented */
+#define PCI_INT_STAT BIT_3S /* Interrupt INTx# Status (PCI 2.3) */
+ /* Bit 2.. 0: reserved */
+
+#define PCI_ERRBITS (PCI_PERR | PCI_SERR | PCI_RMABORT | PCI_RTABORT |\
+ PCI_DATAPERR)
+
+/* PCI_CLASS_CODE 24 bit Class Code */
+/* Byte 2: Base Class (02) */
+/* Byte 1: SubClass (00) */
+/* Byte 0: Programming Interface (00) */
+
+/* PCI_CACHE_LSZ 8 bit Cache Line Size */
+/* Possible values: 0,2,4,8,16,32,64,128 */
+
+/* PCI_HEADER_T 8 bit Header Type */
+#define PCI_HD_MF_DEV BIT_7S /* 0= single, 1= multi-func dev */
+#define PCI_HD_TYPE 0x7f /* Bit 6..0: Header Layout 0= normal */
+
+/* PCI_BIST 8 bit Built-in selftest */
+/* Built-in Self test not supported (optional) */
+
+/* PCI_BASE_1ST 32 bit 1st Base address */
+#define PCI_MEMSIZE 0x4000L /* use 16 kB Memory Base */
+#define PCI_MEMBASE_MSK 0xffffc000L /* Bit 31..14: Memory Base Address */
+#define PCI_MEMSIZE_MSK 0x00003ff0L /* Bit 13.. 4: Memory Size Req. */
+#define PCI_PREFEN BIT_3 /* Prefetchable */
+#define PCI_MEM_TYP (3L<<2) /* Bit 2.. 1: Memory Type */
+#define PCI_MEM32BIT (0L<<1) /* Base addr anywhere in 32 Bit range */
+#define PCI_MEM1M (1L<<1) /* Base addr below 1 MegaByte */
+#define PCI_MEM64BIT (2L<<1) /* Base addr anywhere in 64 Bit range */
+#define PCI_MEMSPACE BIT_0 /* Memory Space Indic. */
+
+/* PCI_BASE_2ND 32 bit 2nd Base address */
+#define PCI_IOBASE 0xffffff00L /* Bit 31.. 8: I/O Base address */
+#define PCI_IOSIZE 0x000000fcL /* Bit 7.. 2: I/O Size Requirements */
+ /* Bit 1: reserved */
+#define PCI_IOSPACE BIT_0 /* I/O Space Indicator */
+
+/* PCI_BASE_ROM 32 bit Expansion ROM Base Address */
+#define PCI_ROMBASE 0xfffe0000L /* Bit 31..17: ROM BASE address (1st)*/
+#define PCI_ROMBASZ (0x1cL<<14) /* Bit 16..14: Treat as BASE or SIZE */
+#define PCI_ROMSIZE (0x38L<<11) /* Bit 13..11: ROM Size Requirements */
+ /* Bit 10.. 1: reserved */
+#define PCI_ROMEN BIT_0 /* Address Decode enable */
+
+/* Device Dependent Region */
+/* PCI_OUR_REG_1 32 bit Our Register 1 */
+ /* Bit 31..29: reserved */
+#define PCI_PHY_COMA BIT_28 /* Set PHY to Coma Mode */
+#define PCI_EN_CAL BIT_27 /* Enable PCI buffer strength calibr. */
+#define PCI_DIS_CAL BIT_26 /* Disable PCI buffer strength calibr. */
+#define PCI_VIO BIT_25 /* PCI I/O Voltage, 0 = 3.3V, 1 = 5V */
+#define PCI_DIS_BOOT BIT_24 /* Disable BOOT via ROM */
+#define PCI_EN_IO BIT_23 /* Mapping to I/O space */
+#define PCI_EN_FPROM BIT_22 /* Enable FLASH mapping to memory */
+ /* 1 = Map Flash to memory */
+ /* 0 = Disable addr. dec */
+#define PCI_PAGESIZE (3L<<20) /* Bit 21..20: FLASH Page Size */
+#define PCI_PAGE_16 (0L<<20) /* 16 k pages */
+#define PCI_PAGE_32K (1L<<20) /* 32 k pages */
+#define PCI_PAGE_64K (2L<<20) /* 64 k pages */
+#define PCI_PAGE_128K (3L<<20) /* 128 k pages */
+ /* Bit 19: reserved */
+#define PCI_PAGEREG (7L<<16) /* Bit 18..16: Page Register */
+#define PCI_NOTAR BIT_15 /* No turnaround cycle */
+#define PCI_FORCE_BE BIT_14 /* Assert all BEs on MR */
+#define PCI_DIS_MRL BIT_13 /* Disable Mem Read Line */
+#define PCI_DIS_MRM BIT_12 /* Disable Mem Read Multiple */
+#define PCI_DIS_MWI BIT_11 /* Disable Mem Write & Invalidate */
+#define PCI_DISC_CLS BIT_10 /* Disc: cacheLsz bound */
+#define PCI_BURST_DIS BIT_9 /* Burst Disable */
+#define PCI_DIS_PCI_CLK BIT_8 /* Disable PCI clock driving */
+#define PCI_SKEW_DAS (0xfL<<4) /* Bit 7.. 4: Skew Ctrl, DAS Ext */
+#define PCI_SKEW_BASE 0xfL /* Bit 3.. 0: Skew Ctrl, Base */
+
+
+/* PCI_OUR_REG_2 32 bit Our Register 2 */
+#define PCI_VPD_WR_THR (0xffL<<24) /* Bit 31..24: VPD Write Threshold */
+#define PCI_DEV_SEL (0x7fL<<17) /* Bit 23..17: EEPROM Device Select */
+#define PCI_VPD_ROM_SZ (7L<<14) /* Bit 16..14: VPD ROM Size */
+ /* Bit 13..12: reserved */
+#define PCI_PATCH_DIR (0xfL<<8) /* Bit 11.. 8: Ext Patches dir 3..0 */
+#define PCI_PATCH_DIR_3 BIT_11
+#define PCI_PATCH_DIR_2 BIT_10
+#define PCI_PATCH_DIR_1 BIT_9
+#define PCI_PATCH_DIR_0 BIT_8
+#define PCI_EXT_PATCHS (0xfL<<4) /* Bit 7.. 4: Extended Patches 3..0 */
+#define PCI_EXT_PATCH_3 BIT_7
+#define PCI_EXT_PATCH_2 BIT_6
+#define PCI_EXT_PATCH_1 BIT_5
+#define PCI_EXT_PATCH_0 BIT_4
+#define PCI_EN_DUMMY_RD BIT_3 /* Enable Dummy Read */
+#define PCI_REV_DESC BIT_2 /* Reverse Desc. Bytes */
+ /* Bit 1: reserved */
+#define PCI_USEDATA64 BIT_0 /* Use 64Bit Data bus ext */
+
+
+/* Power Management Region */
+/* PCI_PM_CAP_REG 16 bit Power Management Capabilities */
+#define PCI_PME_SUP_MSK (0x1f<<11) /* Bit 15..11: PM Event Support Mask */
+#define PCI_PME_D3C_SUP BIT_15S /* PME from D3cold Support (if Vaux) */
+#define PCI_PME_D3H_SUP BIT_14S /* PME from D3hot Support */
+#define PCI_PME_D2_SUP BIT_13S /* PME from D2 Support */
+#define PCI_PME_D1_SUP BIT_12S /* PME from D1 Support */
+#define PCI_PME_D0_SUP BIT_11S /* PME from D0 Support */
+#define PCI_PM_D2_SUP BIT_10S /* D2 Support in 33 MHz mode */
+#define PCI_PM_D1_SUP BIT_9S /* D1 Support */
+ /* Bit 8.. 6: reserved */
+#define PCI_PM_DSI BIT_5S /* Device Specific Initialization */
+#define PCI_PM_APS BIT_4S /* Auxialiary Power Source */
+#define PCI_PME_CLOCK BIT_3S /* PM Event Clock */
+#define PCI_PM_VER_MSK 7 /* Bit 2.. 0: PM PCI Spec. version */
+
+/* PCI_PM_CTL_STS 16 bit Power Management Control/Status */
+#define PCI_PME_STATUS BIT_15S /* PME Status (YUKON only) */
+#define PCI_PM_DAT_SCL (3<<13) /* Bit 14..13: Data Reg. scaling factor */
+#define PCI_PM_DAT_SEL (0xf<<9) /* Bit 12.. 9: PM data selector field */
+#define PCI_PME_EN BIT_8S /* Enable PME# generation (YUKON only) */
+ /* Bit 7.. 2: reserved */
+#define PCI_PM_STATE_MSK 3 /* Bit 1.. 0: Power Management State */
+
+#define PCI_PM_STATE_D0 0 /* D0: Operational (default) */
+#define PCI_PM_STATE_D1 1 /* D1: (YUKON only) */
+#define PCI_PM_STATE_D2 2 /* D2: (YUKON only) */
+#define PCI_PM_STATE_D3 3 /* D3: HOT, Power Down and Reset */
+
+/* VPD Region */
+/* PCI_VPD_ADR_REG 16 bit VPD Address Register */
+#define PCI_VPD_FLAG BIT_15S /* starts VPD rd/wr cycle */
+#define PCI_VPD_ADR_MSK 0x7fffL /* Bit 14.. 0: VPD address mask */
+
+/* Control Register File (Address Map) */
+
+/*
+ * Bank 0
+ */
+#define B0_RAP 0x0000 /* 8 bit Register Address Port */
+ /* 0x0001 - 0x0003: reserved */
+#define B0_CTST 0x0004 /* 16 bit Control/Status register */
+#define B0_LED 0x0006 /* 8 Bit LED register */
+#define B0_POWER_CTRL 0x0007 /* 8 Bit Power Control reg (YUKON only) */
+#define B0_ISRC 0x0008 /* 32 bit Interrupt Source Register */
+#define B0_IMSK 0x000c /* 32 bit Interrupt Mask Register */
+#define B0_HWE_ISRC 0x0010 /* 32 bit HW Error Interrupt Src Reg */
+#define B0_HWE_IMSK 0x0014 /* 32 bit HW Error Interrupt Mask Reg */
+#define B0_SP_ISRC 0x0018 /* 32 bit Special Interrupt Source Reg */
+ /* 0x001c: reserved */
+
+/* B0 XMAC 1 registers (GENESIS only) */
+#define B0_XM1_IMSK 0x0020 /* 16 bit r/w XMAC 1 Interrupt Mask Register*/
+ /* 0x0022 - 0x0027: reserved */
+#define B0_XM1_ISRC 0x0028 /* 16 bit ro XMAC 1 Interrupt Status Reg */
+ /* 0x002a - 0x002f: reserved */
+#define B0_XM1_PHY_ADDR 0x0030 /* 16 bit r/w XMAC 1 PHY Address Register */
+ /* 0x0032 - 0x0033: reserved */
+#define B0_XM1_PHY_DATA 0x0034 /* 16 bit r/w XMAC 1 PHY Data Register */
+ /* 0x0036 - 0x003f: reserved */
+
+/* B0 XMAC 2 registers (GENESIS only) */
+#define B0_XM2_IMSK 0x0040 /* 16 bit r/w XMAC 2 Interrupt Mask Register*/
+ /* 0x0042 - 0x0047: reserved */
+#define B0_XM2_ISRC 0x0048 /* 16 bit ro XMAC 2 Interrupt Status Reg */
+ /* 0x004a - 0x004f: reserved */
+#define B0_XM2_PHY_ADDR 0x0050 /* 16 bit r/w XMAC 2 PHY Address Register */
+ /* 0x0052 - 0x0053: reserved */
+#define B0_XM2_PHY_DATA 0x0054 /* 16 bit r/w XMAC 2 PHY Data Register */
+ /* 0x0056 - 0x005f: reserved */
+
+/* BMU Control Status Registers */
+#define B0_R1_CSR 0x0060 /* 32 bit BMU Ctrl/Stat Rx Queue 1 */
+#define B0_R2_CSR 0x0064 /* 32 bit BMU Ctrl/Stat Rx Queue 2 */
+#define B0_XS1_CSR 0x0068 /* 32 bit BMU Ctrl/Stat Sync Tx Queue 1 */
+#define B0_XA1_CSR 0x006c /* 32 bit BMU Ctrl/Stat Async Tx Queue 1*/
+#define B0_XS2_CSR 0x0070 /* 32 bit BMU Ctrl/Stat Sync Tx Queue 2 */
+#define B0_XA2_CSR 0x0074 /* 32 bit BMU Ctrl/Stat Async Tx Queue 2*/
+ /* 0x0078 - 0x007f: reserved */
+
+/*
+ * Bank 1
+ * - completely empty (this is the RAP Block window)
+ * Note: if RAP = 1 this page is reserved
+ */
+
+/*
+ * Bank 2
+ */
+/* NA reg = 48 bit Network Address Register, 3x16 or 8x8 bit readable */
+#define B2_MAC_1 0x0100 /* NA reg MAC Address 1 */
+ /* 0x0106 - 0x0107: reserved */
+#define B2_MAC_2 0x0108 /* NA reg MAC Address 2 */
+ /* 0x010e - 0x010f: reserved */
+#define B2_MAC_3 0x0110 /* NA reg MAC Address 3 */
+ /* 0x0116 - 0x0117: reserved */
+#define B2_CONN_TYP 0x0118 /* 8 bit Connector type */
+#define B2_PMD_TYP 0x0119 /* 8 bit PMD type */
+#define B2_MAC_CFG 0x011a /* 8 bit MAC Configuration / Chip Revision */
+#define B2_CHIP_ID 0x011b /* 8 bit Chip Identification Number */
+ /* Eprom registers are currently of no use */
+#define B2_E_0 0x011c /* 8 bit EPROM Byte 0 (ext. SRAM size */
+#define B2_E_1 0x011d /* 8 bit EPROM Byte 1 (PHY type) */
+#define B2_E_2 0x011e /* 8 bit EPROM Byte 2 */
+#define B2_E_3 0x011f /* 8 bit EPROM Byte 3 */
+#define B2_FAR 0x0120 /* 32 bit Flash-Prom Addr Reg/Cnt */
+#define B2_FDP 0x0124 /* 8 bit Flash-Prom Data Port */
+ /* 0x0125 - 0x0127: reserved */
+#define B2_LD_CRTL 0x0128 /* 8 bit EPROM loader control register */
+#define B2_LD_TEST 0x0129 /* 8 bit EPROM loader test register */
+ /* 0x012a - 0x012f: reserved */
+#define B2_TI_INI 0x0130 /* 32 bit Timer Init Value */
+#define B2_TI_VAL 0x0134 /* 32 bit Timer Value */
+#define B2_TI_CRTL 0x0138 /* 8 bit Timer Control */
+#define B2_TI_TEST 0x0139 /* 8 Bit Timer Test */
+ /* 0x013a - 0x013f: reserved */
+#define B2_IRQM_INI 0x0140 /* 32 bit IRQ Moderation Timer Init Reg.*/
+#define B2_IRQM_VAL 0x0144 /* 32 bit IRQ Moderation Timer Value */
+#define B2_IRQM_CTRL 0x0148 /* 8 bit IRQ Moderation Timer Control */
+#define B2_IRQM_TEST 0x0149 /* 8 bit IRQ Moderation Timer Test */
+#define B2_IRQM_MSK 0x014c /* 32 bit IRQ Moderation Mask */
+#define B2_IRQM_HWE_MSK 0x0150 /* 32 bit IRQ Moderation HW Error Mask */
+ /* 0x0154 - 0x0157: reserved */
+#define B2_TST_CTRL1 0x0158 /* 8 bit Test Control Register 1 */
+#define B2_TST_CTRL2 0x0159 /* 8 bit Test Control Register 2 */
+ /* 0x015a - 0x015b: reserved */
+#define B2_GP_IO 0x015c /* 32 bit General Purpose I/O Register */
+#define B2_I2C_CTRL 0x0160 /* 32 bit I2C HW Control Register */
+#define B2_I2C_DATA 0x0164 /* 32 bit I2C HW Data Register */
+#define B2_I2C_IRQ 0x0168 /* 32 bit I2C HW IRQ Register */
+#define B2_I2C_SW 0x016c /* 32 bit I2C SW Port Register */
+
+/* Blink Source Counter (GENESIS only) */
+#define B2_BSC_INI 0x0170 /* 32 bit Blink Source Counter Init Val */
+#define B2_BSC_VAL 0x0174 /* 32 bit Blink Source Counter Value */
+#define B2_BSC_CTRL 0x0178 /* 8 bit Blink Source Counter Control */
+#define B2_BSC_STAT 0x0179 /* 8 bit Blink Source Counter Status */
+#define B2_BSC_TST 0x017a /* 16 bit Blink Source Counter Test Reg */
+ /* 0x017c - 0x017f: reserved */
+
+/*
+ * Bank 3
+ */
+/* RAM Random Registers */
+#define B3_RAM_ADDR 0x0180 /* 32 bit RAM Address, to read or write */
+#define B3_RAM_DATA_LO 0x0184 /* 32 bit RAM Data Word (low dWord) */
+#define B3_RAM_DATA_HI 0x0188 /* 32 bit RAM Data Word (high dWord) */
+ /* 0x018c - 0x018f: reserved */
+
+/* RAM Interface Registers */
+/*
+ * The HW-Spec. calls this registers Timeout Value 0..11. But this names are
+ * not usable in SW. Please notice these are NOT real timeouts, these are
+ * the number of qWords transferred continuously.
+ */
+#define B3_RI_WTO_R1 0x0190 /* 8 bit WR Timeout Queue R1 (TO0) */
+#define B3_RI_WTO_XA1 0x0191 /* 8 bit WR Timeout Queue XA1 (TO1) */
+#define B3_RI_WTO_XS1 0x0192 /* 8 bit WR Timeout Queue XS1 (TO2) */
+#define B3_RI_RTO_R1 0x0193 /* 8 bit RD Timeout Queue R1 (TO3) */
+#define B3_RI_RTO_XA1 0x0194 /* 8 bit RD Timeout Queue XA1 (TO4) */
+#define B3_RI_RTO_XS1 0x0195 /* 8 bit RD Timeout Queue XS1 (TO5) */
+#define B3_RI_WTO_R2 0x0196 /* 8 bit WR Timeout Queue R2 (TO6) */
+#define B3_RI_WTO_XA2 0x0197 /* 8 bit WR Timeout Queue XA2 (TO7) */
+#define B3_RI_WTO_XS2 0x0198 /* 8 bit WR Timeout Queue XS2 (TO8) */
+#define B3_RI_RTO_R2 0x0199 /* 8 bit RD Timeout Queue R2 (TO9) */
+#define B3_RI_RTO_XA2 0x019a /* 8 bit RD Timeout Queue XA2 (TO10)*/
+#define B3_RI_RTO_XS2 0x019b /* 8 bit RD Timeout Queue XS2 (TO11)*/
+#define B3_RI_TO_VAL 0x019c /* 8 bit Current Timeout Count Val */
+ /* 0x019d - 0x019f: reserved */
+#define B3_RI_CTRL 0x01a0 /* 16 bit RAM Interface Control Register */
+#define B3_RI_TEST 0x01a2 /* 8 bit RAM Interface Test Register */
+ /* 0x01a3 - 0x01af: reserved */
+
+/* MAC Arbiter Registers (GENESIS only) */
+/* these are the no. of qWord transferred continuously and NOT real timeouts */
+#define B3_MA_TOINI_RX1 0x01b0 /* 8 bit Timeout Init Val Rx Path MAC 1 */
+#define B3_MA_TOINI_RX2 0x01b1 /* 8 bit Timeout Init Val Rx Path MAC 2 */
+#define B3_MA_TOINI_TX1 0x01b2 /* 8 bit Timeout Init Val Tx Path MAC 1 */
+#define B3_MA_TOINI_TX2 0x01b3 /* 8 bit Timeout Init Val Tx Path MAC 2 */
+#define B3_MA_TOVAL_RX1 0x01b4 /* 8 bit Timeout Value Rx Path MAC 1 */
+#define B3_MA_TOVAL_RX2 0x01b5 /* 8 bit Timeout Value Rx Path MAC 1 */
+#define B3_MA_TOVAL_TX1 0x01b6 /* 8 bit Timeout Value Tx Path MAC 2 */
+#define B3_MA_TOVAL_TX2 0x01b7 /* 8 bit Timeout Value Tx Path MAC 2 */
+#define B3_MA_TO_CTRL 0x01b8 /* 16 bit MAC Arbiter Timeout Ctrl Reg */
+#define B3_MA_TO_TEST 0x01ba /* 16 bit MAC Arbiter Timeout Test Reg */
+ /* 0x01bc - 0x01bf: reserved */
+#define B3_MA_RCINI_RX1 0x01c0 /* 8 bit Recovery Init Val Rx Path MAC 1 */
+#define B3_MA_RCINI_RX2 0x01c1 /* 8 bit Recovery Init Val Rx Path MAC 2 */
+#define B3_MA_RCINI_TX1 0x01c2 /* 8 bit Recovery Init Val Tx Path MAC 1 */
+#define B3_MA_RCINI_TX2 0x01c3 /* 8 bit Recovery Init Val Tx Path MAC 2 */
+#define B3_MA_RCVAL_RX1 0x01c4 /* 8 bit Recovery Value Rx Path MAC 1 */
+#define B3_MA_RCVAL_RX2 0x01c5 /* 8 bit Recovery Value Rx Path MAC 1 */
+#define B3_MA_RCVAL_TX1 0x01c6 /* 8 bit Recovery Value Tx Path MAC 2 */
+#define B3_MA_RCVAL_TX2 0x01c7 /* 8 bit Recovery Value Tx Path MAC 2 */
+#define B3_MA_RC_CTRL 0x01c8 /* 16 bit MAC Arbiter Recovery Ctrl Reg */
+#define B3_MA_RC_TEST 0x01ca /* 16 bit MAC Arbiter Recovery Test Reg */
+ /* 0x01cc - 0x01cf: reserved */
+
+/* Packet Arbiter Registers (GENESIS only) */
+/* these are real timeouts */
+#define B3_PA_TOINI_RX1 0x01d0 /* 16 bit Timeout Init Val Rx Path MAC 1 */
+ /* 0x01d2 - 0x01d3: reserved */
+#define B3_PA_TOINI_RX2 0x01d4 /* 16 bit Timeout Init Val Rx Path MAC 2 */
+ /* 0x01d6 - 0x01d7: reserved */
+#define B3_PA_TOINI_TX1 0x01d8 /* 16 bit Timeout Init Val Tx Path MAC 1 */
+ /* 0x01da - 0x01db: reserved */
+#define B3_PA_TOINI_TX2 0x01dc /* 16 bit Timeout Init Val Tx Path MAC 2 */
+ /* 0x01de - 0x01df: reserved */
+#define B3_PA_TOVAL_RX1 0x01e0 /* 16 bit Timeout Val Rx Path MAC 1 */
+ /* 0x01e2 - 0x01e3: reserved */
+#define B3_PA_TOVAL_RX2 0x01e4 /* 16 bit Timeout Val Rx Path MAC 2 */
+ /* 0x01e6 - 0x01e7: reserved */
+#define B3_PA_TOVAL_TX1 0x01e8 /* 16 bit Timeout Val Tx Path MAC 1 */
+ /* 0x01ea - 0x01eb: reserved */
+#define B3_PA_TOVAL_TX2 0x01ec /* 16 bit Timeout Val Tx Path MAC 2 */
+ /* 0x01ee - 0x01ef: reserved */
+#define B3_PA_CTRL 0x01f0 /* 16 bit Packet Arbiter Ctrl Register */
+#define B3_PA_TEST 0x01f2 /* 16 bit Packet Arbiter Test Register */
+ /* 0x01f4 - 0x01ff: reserved */
+
+/*
+ * Bank 4 - 5
+ */
+/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
+#define TXA_ITI_INI 0x0200 /* 32 bit Tx Arb Interval Timer Init Val*/
+#define TXA_ITI_VAL 0x0204 /* 32 bit Tx Arb Interval Timer Value */
+#define TXA_LIM_INI 0x0208 /* 32 bit Tx Arb Limit Counter Init Val */
+#define TXA_LIM_VAL 0x020c /* 32 bit Tx Arb Limit Counter Value */
+#define TXA_CTRL 0x0210 /* 8 bit Tx Arbiter Control Register */
+#define TXA_TEST 0x0211 /* 8 bit Tx Arbiter Test Register */
+#define TXA_STAT 0x0212 /* 8 bit Tx Arbiter Status Register */
+ /* 0x0213 - 0x027f: reserved */
+ /* 0x0280 - 0x0292: MAC 2 */
+ /* 0x0213 - 0x027f: reserved */
+
+/*
+ * Bank 6
+ */
+/* External registers (GENESIS only) */
+#define B6_EXT_REG 0x0300
+
+/*
+ * Bank 7
+ */
+/* This is a copy of the Configuration register file (lower half) */
+#define B7_CFG_SPC 0x0380
+
+/*
+ * Bank 8 - 15
+ */
+/* Receive and Transmit Queue Registers, use Q_ADDR() to access */
+#define B8_Q_REGS 0x0400
+
+/* Queue Register Offsets, use Q_ADDR() to access */
+#define Q_D 0x00 /* 8*32 bit Current Descriptor */
+#define Q_DA_L 0x20 /* 32 bit Current Descriptor Address Low dWord */
+#define Q_DA_H 0x24 /* 32 bit Current Descriptor Address High dWord */
+#define Q_AC_L 0x28 /* 32 bit Current Address Counter Low dWord */
+#define Q_AC_H 0x2c /* 32 bit Current Address Counter High dWord */
+#define Q_BC 0x30 /* 32 bit Current Byte Counter */
+#define Q_CSR 0x34 /* 32 bit BMU Control/Status Register */
+#define Q_F 0x38 /* 32 bit Flag Register */
+#define Q_T1 0x3c /* 32 bit Test Register 1 */
+#define Q_T1_TR 0x3c /* 8 bit Test Register 1 Transfer SM */
+#define Q_T1_WR 0x3d /* 8 bit Test Register 1 Write Descriptor SM */
+#define Q_T1_RD 0x3e /* 8 bit Test Register 1 Read Descriptor SM */
+#define Q_T1_SV 0x3f /* 8 bit Test Register 1 Supervisor SM */
+#define Q_T2 0x40 /* 32 bit Test Register 2 */
+#define Q_T3 0x44 /* 32 bit Test Register 3 */
+ /* 0x48 - 0x7f: reserved */
+
+/*
+ * Bank 16 - 23
+ */
+/* RAM Buffer Registers */
+#define B16_RAM_REGS 0x0800
+
+/* RAM Buffer Register Offsets, use RB_ADDR() to access */
+#define RB_START 0x00 /* 32 bit RAM Buffer Start Address */
+#define RB_END 0x04 /* 32 bit RAM Buffer End Address */
+#define RB_WP 0x08 /* 32 bit RAM Buffer Write Pointer */
+#define RB_RP 0x0c /* 32 bit RAM Buffer Read Pointer */
+#define RB_RX_UTPP 0x10 /* 32 bit Rx Upper Threshold, Pause Pack */
+#define RB_RX_LTPP 0x14 /* 32 bit Rx Lower Threshold, Pause Pack */
+#define RB_RX_UTHP 0x18 /* 32 bit Rx Upper Threshold, High Prio */
+#define RB_RX_LTHP 0x1c /* 32 bit Rx Lower Threshold, High Prio */
+ /* 0x10 - 0x1f: reserved at Tx RAM Buffer Registers */
+#define RB_PC 0x20 /* 32 bit RAM Buffer Packet Counter */
+#define RB_LEV 0x24 /* 32 bit RAM Buffer Level Register */
+#define RB_CTRL 0x28 /* 8 bit RAM Buffer Control Register */
+#define RB_TST1 0x29 /* 8 bit RAM Buffer Test Register 1 */
+#define RB_TST2 0x2A /* 8 bit RAM Buffer Test Register 2 */
+ /* 0x2c - 0x7f: reserved */
+
+/*
+ * Bank 24
+ */
+/*
+ * Receive MAC FIFO, Receive LED, and Link_Sync regs (GENESIS only)
+ * use MR_ADDR() to access
+ */
+#define RX_MFF_EA 0x0c00 /* 32 bit Receive MAC FIFO End Address */
+#define RX_MFF_WP 0x0c04 /* 32 bit Receive MAC FIFO Write Pointer */
+ /* 0x0c08 - 0x0c0b: reserved */
+#define RX_MFF_RP 0x0c0c /* 32 bit Receive MAC FIFO Read Pointer */
+#define RX_MFF_PC 0x0c10 /* 32 bit Receive MAC FIFO Packet Cnt */
+#define RX_MFF_LEV 0x0c14 /* 32 bit Receive MAC FIFO Level */
+#define RX_MFF_CTRL1 0x0c18 /* 16 bit Receive MAC FIFO Control Reg 1*/
+#define RX_MFF_STAT_TO 0x0c1a /* 8 bit Receive MAC Status Timeout */
+#define RX_MFF_TIST_TO 0x0c1b /* 8 bit Receive MAC Time Stamp Timeout */
+#define RX_MFF_CTRL2 0x0c1c /* 8 bit Receive MAC FIFO Control Reg 2*/
+#define RX_MFF_TST1 0x0c1d /* 8 bit Receive MAC FIFO Test Reg 1 */
+#define RX_MFF_TST2 0x0c1e /* 8 bit Receive MAC FIFO Test Reg 2 */
+ /* 0x0c1f: reserved */
+#define RX_LED_INI 0x0c20 /* 32 bit Receive LED Cnt Init Value */
+#define RX_LED_VAL 0x0c24 /* 32 bit Receive LED Cnt Current Value */
+#define RX_LED_CTRL 0x0c28 /* 8 bit Receive LED Cnt Control Reg */
+#define RX_LED_TST 0x0c29 /* 8 bit Receive LED Cnt Test Register */
+ /* 0x0c2a - 0x0c2f: reserved */
+#define LNK_SYNC_INI 0x0c30 /* 32 bit Link Sync Cnt Init Value */
+#define LNK_SYNC_VAL 0x0c34 /* 32 bit Link Sync Cnt Current Value */
+#define LNK_SYNC_CTRL 0x0c38 /* 8 bit Link Sync Cnt Control Register */
+#define LNK_SYNC_TST 0x0c39 /* 8 bit Link Sync Cnt Test Register */
+ /* 0x0c3a - 0x0c3b: reserved */
+#define LNK_LED_REG 0x0c3c /* 8 bit Link LED Register */
+ /* 0x0c3d - 0x0c3f: reserved */
+
+/* Receive GMAC FIFO (YUKON only), use MR_ADDR() to access */
+#define RX_GMF_EA 0x0c40 /* 32 bit Rx GMAC FIFO End Address */
+#define RX_GMF_AF_THR 0x0c44 /* 32 bit Rx GMAC FIFO Almost Full Thresh. */
+#define RX_GMF_CTRL_T 0x0c48 /* 32 bit Rx GMAC FIFO Control/Test */
+#define RX_GMF_FL_MSK 0x0c4c /* 32 bit Rx GMAC FIFO Flush Mask */
+#define RX_GMF_FL_THR 0x0c50 /* 32 bit Rx GMAC FIFO Flush Threshold */
+ /* 0x0c54 - 0x0c5f: reserved */
+#define RX_GMF_WP 0x0c60 /* 32 bit Rx GMAC FIFO Write Pointer */
+ /* 0x0c64 - 0x0c67: reserved */
+#define RX_GMF_WLEV 0x0c68 /* 32 bit Rx GMAC FIFO Write Level */
+ /* 0x0c6c - 0x0c6f: reserved */
+#define RX_GMF_RP 0x0c70 /* 32 bit Rx GMAC FIFO Read Pointer */
+ /* 0x0c74 - 0x0c77: reserved */
+#define RX_GMF_RLEV 0x0c78 /* 32 bit Rx GMAC FIFO Read Level */
+ /* 0x0c7c - 0x0c7f: reserved */
+
+/*
+ * Bank 25
+ */
+ /* 0x0c80 - 0x0cbf: MAC 2 */
+ /* 0x0cc0 - 0x0cff: reserved */
+
+/*
+ * Bank 26
+ */
+/*
+ * Transmit MAC FIFO and Transmit LED Registers (GENESIS only),
+ * use MR_ADDR() to access
+ */
+#define TX_MFF_EA 0x0d00 /* 32 bit Transmit MAC FIFO End Address */
+#define TX_MFF_WP 0x0d04 /* 32 bit Transmit MAC FIFO WR Pointer */
+#define TX_MFF_WSP 0x0d08 /* 32 bit Transmit MAC FIFO WR Shadow Ptr */
+#define TX_MFF_RP 0x0d0c /* 32 bit Transmit MAC FIFO RD Pointer */
+#define TX_MFF_PC 0x0d10 /* 32 bit Transmit MAC FIFO Packet Cnt */
+#define TX_MFF_LEV 0x0d14 /* 32 bit Transmit MAC FIFO Level */
+#define TX_MFF_CTRL1 0x0d18 /* 16 bit Transmit MAC FIFO Ctrl Reg 1 */
+#define TX_MFF_WAF 0x0d1a /* 8 bit Transmit MAC Wait after flush */
+ /* 0x0c1b: reserved */
+#define TX_MFF_CTRL2 0x0d1c /* 8 bit Transmit MAC FIFO Ctrl Reg 2 */
+#define TX_MFF_TST1 0x0d1d /* 8 bit Transmit MAC FIFO Test Reg 1 */
+#define TX_MFF_TST2 0x0d1e /* 8 bit Transmit MAC FIFO Test Reg 2 */
+ /* 0x0d1f: reserved */
+#define TX_LED_INI 0x0d20 /* 32 bit Transmit LED Cnt Init Value */
+#define TX_LED_VAL 0x0d24 /* 32 bit Transmit LED Cnt Current Val */
+#define TX_LED_CTRL 0x0d28 /* 8 bit Transmit LED Cnt Control Reg */
+#define TX_LED_TST 0x0d29 /* 8 bit Transmit LED Cnt Test Reg */
+ /* 0x0d2a - 0x0d3f: reserved */
+
+/* Transmit GMAC FIFO (YUKON only), use MR_ADDR() to access */
+#define TX_GMF_EA 0x0d40 /* 32 bit Tx GMAC FIFO End Address */
+#define TX_GMF_AE_THR 0x0d44 /* 32 bit Tx GMAC FIFO Almost Empty Thresh.*/
+#define TX_GMF_CTRL_T 0x0d48 /* 32 bit Tx GMAC FIFO Control/Test */
+ /* 0x0d4c - 0x0d5f: reserved */
+#define TX_GMF_WP 0x0d60 /* 32 bit Tx GMAC FIFO Write Pointer */
+#define TX_GMF_WSP 0x0d64 /* 32 bit Tx GMAC FIFO Write Shadow Ptr. */
+#define TX_GMF_WLEV 0x0d68 /* 32 bit Tx GMAC FIFO Write Level */
+ /* 0x0d6c - 0x0d6f: reserved */
+#define TX_GMF_RP 0x0d70 /* 32 bit Tx GMAC FIFO Read Pointer */
+#define TX_GMF_RSTP 0x0d74 /* 32 bit Tx GMAC FIFO Restart Pointer */
+#define TX_GMF_RLEV 0x0d78 /* 32 bit Tx GMAC FIFO Read Level */
+ /* 0x0d7c - 0x0d7f: reserved */
+
+/*
+ * Bank 27
+ */
+ /* 0x0d80 - 0x0dbf: MAC 2 */
+ /* 0x0daa - 0x0dff: reserved */
+
+/*
+ * Bank 28
+ */
+/* Descriptor Poll Timer Registers */
+#define B28_DPT_INI 0x0e00 /* 24 bit Descriptor Poll Timer Init Val */
+#define B28_DPT_VAL 0x0e04 /* 24 bit Descriptor Poll Timer Curr Val */
+#define B28_DPT_CTRL 0x0e08 /* 8 bit Descriptor Poll Timer Ctrl Reg */
+ /* 0x0e09: reserved */
+#define B28_DPT_TST 0x0e0a /* 8 bit Descriptor Poll Timer Test Reg */
+ /* 0x0e0b: reserved */
+
+/* Time Stamp Timer Registers (YUKON only) */
+ /* 0x0e10: reserved */
+#define GMAC_TI_ST_VAL 0x0e14 /* 32 bit Time Stamp Timer Curr Val */
+#define GMAC_TI_ST_CTRL 0x0e18 /* 8 bit Time Stamp Timer Ctrl Reg */
+ /* 0x0e19: reserved */
+#define GMAC_TI_ST_TST 0x0e1a /* 8 bit Time Stamp Timer Test Reg */
+ /* 0x0e1b - 0x0e7f: reserved */
+
+/*
+ * Bank 29
+ */
+ /* 0x0e80 - 0x0efc: reserved */
+
+/*
+ * Bank 30
+ */
+/* GMAC and GPHY Control Registers (YUKON only) */
+#define GMAC_CTRL 0x0f00 /* 32 bit GMAC Control Reg */
+#define GPHY_CTRL 0x0f04 /* 32 bit GPHY Control Reg */
+#define GMAC_IRQ_SRC 0x0f08 /* 8 bit GMAC Interrupt Source Reg */
+ /* 0x0f09 - 0x0f0b: reserved */
+#define GMAC_IRQ_MSK 0x0f0c /* 8 bit GMAC Interrupt Mask Reg */
+ /* 0x0f0d - 0x0f0f: reserved */
+#define GMAC_LINK_CTRL 0x0f10 /* 16 bit Link Control Reg */
+ /* 0x0f14 - 0x0f1f: reserved */
+
+/* Wake-up Frame Pattern Match Control Registers (YUKON only) */
+
+#define WOL_REG_OFFS 0x20 /* HW-Bug: Address is + 0x20 against spec. */
+
+#define WOL_CTRL_STAT 0x0f20 /* 16 bit WOL Control/Status Reg */
+#define WOL_MATCH_CTL 0x0f22 /* 8 bit WOL Match Control Reg */
+#define WOL_MATCH_RES 0x0f23 /* 8 bit WOL Match Result Reg */
+#define WOL_MAC_ADDR_LO 0x0f24 /* 32 bit WOL MAC Address Low */
+#define WOL_MAC_ADDR_HI 0x0f28 /* 16 bit WOL MAC Address High */
+#define WOL_PATT_RPTR 0x0f2c /* 8 bit WOL Pattern Read Ptr */
+
+/* use this macro to access above registers */
+#define WOL_REG(Reg) ((Reg) + (pAC->GIni.GIWolOffs))
+
+
+/* WOL Pattern Length Registers (YUKON only) */
+
+#define WOL_PATT_LEN_LO 0x0f30 /* 32 bit WOL Pattern Length 3..0 */
+#define WOL_PATT_LEN_HI 0x0f34 /* 24 bit WOL Pattern Length 6..4 */
+
+/* WOL Pattern Counter Registers (YUKON only) */
+
+#define WOL_PATT_CNT_0 0x0f38 /* 32 bit WOL Pattern Counter 3..0 */
+#define WOL_PATT_CNT_4 0x0f3c /* 24 bit WOL Pattern Counter 6..4 */
+ /* 0x0f40 - 0x0f7f: reserved */
+
+/*
+ * Bank 31
+ */
+/* 0x0f80 - 0x0fff: reserved */
+
+/*
+ * Bank 32 - 33
+ */
+#define WOL_PATT_RAM_1 0x1000 /* WOL Pattern RAM Link 1 */
+
+/*
+ * Bank 0x22 - 0x3f
+ */
+/* 0x1100 - 0x1fff: reserved */
+
+/*
+ * Bank 0x40 - 0x4f
+ */
+#define BASE_XMAC_1 0x2000 /* XMAC 1 registers */
+
+/*
+ * Bank 0x50 - 0x5f
+ */
+
+#define BASE_GMAC_1 0x2800 /* GMAC 1 registers */
+
+/*
+ * Bank 0x60 - 0x6f
+ */
+#define BASE_XMAC_2 0x3000 /* XMAC 2 registers */
+
+/*
+ * Bank 0x70 - 0x7f
+ */
+#define BASE_GMAC_2 0x3800 /* GMAC 2 registers */
+
+/*
+ * Control Register Bit Definitions:
+ */
+/* B0_RAP 8 bit Register Address Port */
+ /* Bit 7: reserved */
+#define RAP_RAP 0x3f /* Bit 6..0: 0 = block 0,..,6f = block 6f */
+
+/* B0_CTST 16 bit Control/Status register */
+ /* Bit 15..14: reserved */
+#define CS_CLK_RUN_HOT BIT_13S /* CLK_RUN hot m. (YUKON-Lite only) */
+#define CS_CLK_RUN_RST BIT_12S /* CLK_RUN reset (YUKON-Lite only) */
+#define CS_CLK_RUN_ENA BIT_11S /* CLK_RUN enable (YUKON-Lite only) */
+#define CS_VAUX_AVAIL BIT_10S /* VAUX available (YUKON only) */
+#define CS_BUS_CLOCK BIT_9S /* Bus Clock 0/1 = 33/66 MHz */
+#define CS_BUS_SLOT_SZ BIT_8S /* Slot Size 0/1 = 32/64 bit slot */
+#define CS_ST_SW_IRQ BIT_7S /* Set IRQ SW Request */
+#define CS_CL_SW_IRQ BIT_6S /* Clear IRQ SW Request */
+#define CS_STOP_DONE BIT_5S /* Stop Master is finished */
+#define CS_STOP_MAST BIT_4S /* Command Bit to stop the master */
+#define CS_MRST_CLR BIT_3S /* Clear Master reset */
+#define CS_MRST_SET BIT_2S /* Set Master reset */
+#define CS_RST_CLR BIT_1S /* Clear Software reset */
+#define CS_RST_SET BIT_0S /* Set Software reset */
+
+/* B0_LED 8 Bit LED register */
+ /* Bit 7.. 2: reserved */
+#define LED_STAT_ON BIT_1S /* Status LED on */
+#define LED_STAT_OFF BIT_0S /* Status LED off */
+
+/* B0_POWER_CTRL 8 Bit Power Control reg (YUKON only) */
+#define PC_VAUX_ENA BIT_7 /* Switch VAUX Enable */
+#define PC_VAUX_DIS BIT_6 /* Switch VAUX Disable */
+#define PC_VCC_ENA BIT_5 /* Switch VCC Enable */
+#define PC_VCC_DIS BIT_4 /* Switch VCC Disable */
+#define PC_VAUX_ON BIT_3 /* Switch VAUX On */
+#define PC_VAUX_OFF BIT_2 /* Switch VAUX Off */
+#define PC_VCC_ON BIT_1 /* Switch VCC On */
+#define PC_VCC_OFF BIT_0 /* Switch VCC Off */
+
+/* B0_ISRC 32 bit Interrupt Source Register */
+/* B0_IMSK 32 bit Interrupt Mask Register */
+/* B0_SP_ISRC 32 bit Special Interrupt Source Reg */
+/* B2_IRQM_MSK 32 bit IRQ Moderation Mask */
+#define IS_ALL_MSK 0xbfffffffL /* All Interrupt bits */
+#define IS_HW_ERR BIT_31 /* Interrupt HW Error */
+ /* Bit 30: reserved */
+#define IS_PA_TO_RX1 BIT_29 /* Packet Arb Timeout Rx1 */
+#define IS_PA_TO_RX2 BIT_28 /* Packet Arb Timeout Rx2 */
+#define IS_PA_TO_TX1 BIT_27 /* Packet Arb Timeout Tx1 */
+#define IS_PA_TO_TX2 BIT_26 /* Packet Arb Timeout Tx2 */
+#define IS_I2C_READY BIT_25 /* IRQ on end of I2C Tx */
+#define IS_IRQ_SW BIT_24 /* SW forced IRQ */
+#define IS_EXT_REG BIT_23 /* IRQ from LM80 or PHY (GENESIS only) */
+ /* IRQ from PHY (YUKON only) */
+#define IS_TIMINT BIT_22 /* IRQ from Timer */
+#define IS_MAC1 BIT_21 /* IRQ from MAC 1 */
+#define IS_LNK_SYNC_M1 BIT_20 /* Link Sync Cnt wrap MAC 1 */
+#define IS_MAC2 BIT_19 /* IRQ from MAC 2 */
+#define IS_LNK_SYNC_M2 BIT_18 /* Link Sync Cnt wrap MAC 2 */
+/* Receive Queue 1 */
+#define IS_R1_B BIT_17 /* Q_R1 End of Buffer */
+#define IS_R1_F BIT_16 /* Q_R1 End of Frame */
+#define IS_R1_C BIT_15 /* Q_R1 Encoding Error */
+/* Receive Queue 2 */
+#define IS_R2_B BIT_14 /* Q_R2 End of Buffer */
+#define IS_R2_F BIT_13 /* Q_R2 End of Frame */
+#define IS_R2_C BIT_12 /* Q_R2 Encoding Error */
+/* Synchronous Transmit Queue 1 */
+#define IS_XS1_B BIT_11 /* Q_XS1 End of Buffer */
+#define IS_XS1_F BIT_10 /* Q_XS1 End of Frame */
+#define IS_XS1_C BIT_9 /* Q_XS1 Encoding Error */
+/* Asynchronous Transmit Queue 1 */
+#define IS_XA1_B BIT_8 /* Q_XA1 End of Buffer */
+#define IS_XA1_F BIT_7 /* Q_XA1 End of Frame */
+#define IS_XA1_C BIT_6 /* Q_XA1 Encoding Error */
+/* Synchronous Transmit Queue 2 */
+#define IS_XS2_B BIT_5 /* Q_XS2 End of Buffer */
+#define IS_XS2_F BIT_4 /* Q_XS2 End of Frame */
+#define IS_XS2_C BIT_3 /* Q_XS2 Encoding Error */
+/* Asynchronous Transmit Queue 2 */
+#define IS_XA2_B BIT_2 /* Q_XA2 End of Buffer */
+#define IS_XA2_F BIT_1 /* Q_XA2 End of Frame */
+#define IS_XA2_C BIT_0 /* Q_XA2 Encoding Error */
+
+
+/* B0_HWE_ISRC 32 bit HW Error Interrupt Src Reg */
+/* B0_HWE_IMSK 32 bit HW Error Interrupt Mask Reg */
+/* B2_IRQM_HWE_MSK 32 bit IRQ Moderation HW Error Mask */
+#define IS_ERR_MSK 0x00000fffL /* All Error bits */
+ /* Bit 31..14: reserved */
+#define IS_IRQ_TIST_OV BIT_13 /* Time Stamp Timer Overflow (YUKON only) */
+#define IS_IRQ_SENSOR BIT_12 /* IRQ from Sensor (YUKON only) */
+#define IS_IRQ_MST_ERR BIT_11 /* IRQ master error detected */
+#define IS_IRQ_STAT BIT_10 /* IRQ status exception */
+#define IS_NO_STAT_M1 BIT_9 /* No Rx Status from MAC 1 */
+#define IS_NO_STAT_M2 BIT_8 /* No Rx Status from MAC 2 */
+#define IS_NO_TIST_M1 BIT_7 /* No Time Stamp from MAC 1 */
+#define IS_NO_TIST_M2 BIT_6 /* No Time Stamp from MAC 2 */
+#define IS_RAM_RD_PAR BIT_5 /* RAM Read Parity Error */
+#define IS_RAM_WR_PAR BIT_4 /* RAM Write Parity Error */
+#define IS_M1_PAR_ERR BIT_3 /* MAC 1 Parity Error */
+#define IS_M2_PAR_ERR BIT_2 /* MAC 2 Parity Error */
+#define IS_R1_PAR_ERR BIT_1 /* Queue R1 Parity Error */
+#define IS_R2_PAR_ERR BIT_0 /* Queue R2 Parity Error */
+
+/* B2_CONN_TYP 8 bit Connector type */
+/* B2_PMD_TYP 8 bit PMD type */
+/* Values of connector and PMD type comply to SysKonnect internal std */
+
+/* B2_MAC_CFG 8 bit MAC Configuration / Chip Revision */
+#define CONFIG_SYS_CHIP_R_MSK (0xf<<4) /* Bit 7.. 4: Chip Revision */
+ /* Bit 3.. 2: reserved */
+#define CONFIG_SYS_DIS_M2_CLK BIT_1S /* Disable Clock for 2nd MAC */
+#define CONFIG_SYS_SNG_MAC BIT_0S /* MAC Config: 0=2 MACs / 1=1 MAC*/
+
+/* B2_CHIP_ID 8 bit Chip Identification Number */
+#define CHIP_ID_GENESIS 0x0a /* Chip ID for GENESIS */
+#define CHIP_ID_YUKON 0xb0 /* Chip ID for YUKON */
+
+/* B2_FAR 32 bit Flash-Prom Addr Reg/Cnt */
+#define FAR_ADDR 0x1ffffL /* Bit 16.. 0: FPROM Address mask */
+
+/* B2_LD_CRTL 8 bit EPROM loader control register */
+/* Bits are currently reserved */
+
+/* B2_LD_TEST 8 bit EPROM loader test register */
+ /* Bit 7.. 4: reserved */
+#define LD_T_ON BIT_3S /* Loader Test mode on */
+#define LD_T_OFF BIT_2S /* Loader Test mode off */
+#define LD_T_STEP BIT_1S /* Decrement FPROM addr. Counter */
+#define LD_START BIT_0S /* Start loading FPROM */
+
+/*
+ * Timer Section
+ */
+/* B2_TI_CRTL 8 bit Timer control */
+/* B2_IRQM_CTRL 8 bit IRQ Moderation Timer Control */
+ /* Bit 7.. 3: reserved */
+#define TIM_START BIT_2S /* Start Timer */
+#define TIM_STOP BIT_1S /* Stop Timer */
+#define TIM_CLR_IRQ BIT_0S /* Clear Timer IRQ (!IRQM) */
+
+/* B2_TI_TEST 8 Bit Timer Test */
+/* B2_IRQM_TEST 8 bit IRQ Moderation Timer Test */
+/* B28_DPT_TST 8 bit Descriptor Poll Timer Test Reg */
+ /* Bit 7.. 3: reserved */
+#define TIM_T_ON BIT_2S /* Test mode on */
+#define TIM_T_OFF BIT_1S /* Test mode off */
+#define TIM_T_STEP BIT_0S /* Test step */
+
+/* B28_DPT_INI 32 bit Descriptor Poll Timer Init Val */
+/* B28_DPT_VAL 32 bit Descriptor Poll Timer Curr Val */
+ /* Bit 31..24: reserved */
+#define DPT_MSK 0x00ffffffL /* Bit 23.. 0: Desc Poll Timer Bits */
+
+/* B28_DPT_CTRL 8 bit Descriptor Poll Timer Ctrl Reg */
+ /* Bit 7.. 2: reserved */
+#define DPT_START BIT_1S /* Start Descriptor Poll Timer */
+#define DPT_STOP BIT_0S /* Stop Descriptor Poll Timer */
+
+/* B2_E_3 8 bit lower 4 bits used for HW self test result */
+#define B2_E3_RES_MASK 0x0f
+
+/* B2_TST_CTRL1 8 bit Test Control Register 1 */
+#define TST_FRC_DPERR_MR BIT_7S /* force DATAPERR on MST RD */
+#define TST_FRC_DPERR_MW BIT_6S /* force DATAPERR on MST WR */
+#define TST_FRC_DPERR_TR BIT_5S /* force DATAPERR on TRG RD */
+#define TST_FRC_DPERR_TW BIT_4S /* force DATAPERR on TRG WR */
+#define TST_FRC_APERR_M BIT_3S /* force ADDRPERR on MST */
+#define TST_FRC_APERR_T BIT_2S /* force ADDRPERR on TRG */
+#define TST_CFG_WRITE_ON BIT_1S /* Enable Config Reg WR */
+#define TST_CFG_WRITE_OFF BIT_0S /* Disable Config Reg WR */
+
+/* B2_TST_CTRL2 8 bit Test Control Register 2 */
+ /* Bit 7.. 4: reserved */
+ /* force the following error on the next master read/write */
+#define TST_FRC_DPERR_MR64 BIT_3S /* DataPERR RD 64 */
+#define TST_FRC_DPERR_MW64 BIT_2S /* DataPERR WR 64 */
+#define TST_FRC_APERR_1M64 BIT_1S /* AddrPERR on 1. phase */
+#define TST_FRC_APERR_2M64 BIT_0S /* AddrPERR on 2. phase */
+
+/* B2_GP_IO 32 bit General Purpose I/O Register */
+ /* Bit 31..26: reserved */
+#define GP_DIR_9 BIT_25 /* IO_9 direct, 0=I/1=O */
+#define GP_DIR_8 BIT_24 /* IO_8 direct, 0=I/1=O */
+#define GP_DIR_7 BIT_23 /* IO_7 direct, 0=I/1=O */
+#define GP_DIR_6 BIT_22 /* IO_6 direct, 0=I/1=O */
+#define GP_DIR_5 BIT_21 /* IO_5 direct, 0=I/1=O */
+#define GP_DIR_4 BIT_20 /* IO_4 direct, 0=I/1=O */
+#define GP_DIR_3 BIT_19 /* IO_3 direct, 0=I/1=O */
+#define GP_DIR_2 BIT_18 /* IO_2 direct, 0=I/1=O */
+#define GP_DIR_1 BIT_17 /* IO_1 direct, 0=I/1=O */
+#define GP_DIR_0 BIT_16 /* IO_0 direct, 0=I/1=O */
+ /* Bit 15..10: reserved */
+#define GP_IO_9 BIT_9 /* IO_9 pin */
+#define GP_IO_8 BIT_8 /* IO_8 pin */
+#define GP_IO_7 BIT_7 /* IO_7 pin */
+#define GP_IO_6 BIT_6 /* IO_6 pin */
+#define GP_IO_5 BIT_5 /* IO_5 pin */
+#define GP_IO_4 BIT_4 /* IO_4 pin */
+#define GP_IO_3 BIT_3 /* IO_3 pin */
+#define GP_IO_2 BIT_2 /* IO_2 pin */
+#define GP_IO_1 BIT_1 /* IO_1 pin */
+#define GP_IO_0 BIT_0 /* IO_0 pin */
+
+/* B2_I2C_CTRL 32 bit I2C HW Control Register */
+#define I2C_FLAG BIT_31 /* Start read/write if WR */
+#define I2C_ADDR (0x7fffL<<16) /* Bit 30..16: Addr to be RD/WR */
+#define I2C_DEV_SEL (0x7fL<<9) /* Bit 15.. 9: I2C Device Select */
+ /* Bit 8.. 5: reserved */
+#define I2C_BURST_LEN BIT_4 /* Burst Len, 1/4 bytes */
+#define I2C_DEV_SIZE (7L<<1) /* Bit 3.. 1: I2C Device Size */
+#define I2C_025K_DEV (0L<<1) /* 0: 256 Bytes or smal. */
+#define I2C_05K_DEV (1L<<1) /* 1: 512 Bytes */
+#define I2C_1K_DEV (2L<<1) /* 2: 1024 Bytes */
+#define I2C_2K_DEV (3L<<1) /* 3: 2048 Bytes */
+#define I2C_4K_DEV (4L<<1) /* 4: 4096 Bytes */
+#define I2C_8K_DEV (5L<<1) /* 5: 8192 Bytes */
+#define I2C_16K_DEV (6L<<1) /* 6: 16384 Bytes */
+#define I2C_32K_DEV (7L<<1) /* 7: 32768 Bytes */
+#define I2C_STOP BIT_0 /* Interrupt I2C transfer */
+
+/* B2_I2C_IRQ 32 bit I2C HW IRQ Register */
+ /* Bit 31.. 1 reserved */
+#define I2C_CLR_IRQ BIT_0 /* Clear I2C IRQ */
+
+/* B2_I2C_SW 32 bit (8 bit access) I2C HW SW Port Register */
+ /* Bit 7.. 3: reserved */
+#define I2C_DATA_DIR BIT_2S /* direction of I2C_DATA */
+#define I2C_DATA BIT_1S /* I2C Data Port */
+#define I2C_CLK BIT_0S /* I2C Clock Port */
+
+/*
+ * I2C Address
+ */
+#define I2C_SENS_ADDR LM80_ADDR /* I2C Sensor Address, (Volt and Temp)*/
+
+
+/* B2_BSC_CTRL 8 bit Blink Source Counter Control */
+ /* Bit 7.. 2: reserved */
+#define BSC_START BIT_1S /* Start Blink Source Counter */
+#define BSC_STOP BIT_0S /* Stop Blink Source Counter */
+
+/* B2_BSC_STAT 8 bit Blink Source Counter Status */
+ /* Bit 7.. 1: reserved */
+#define BSC_SRC BIT_0S /* Blink Source, 0=Off / 1=On */
+
+/* B2_BSC_TST 16 bit Blink Source Counter Test Reg */
+#define BSC_T_ON BIT_2S /* Test mode on */
+#define BSC_T_OFF BIT_1S /* Test mode off */
+#define BSC_T_STEP BIT_0S /* Test step */
+
+
+/* B3_RAM_ADDR 32 bit RAM Address, to read or write */
+ /* Bit 31..19: reserved */
+#define RAM_ADR_RAN 0x0007ffffL /* Bit 18.. 0: RAM Address Range */
+
+/* RAM Interface Registers */
+/* B3_RI_CTRL 16 bit RAM Iface Control Register */
+ /* Bit 15..10: reserved */
+#define RI_CLR_RD_PERR BIT_9S /* Clear IRQ RAM Read Parity Err */
+#define RI_CLR_WR_PERR BIT_8S /* Clear IRQ RAM Write Parity Err*/
+ /* Bit 7.. 2: reserved */
+#define RI_RST_CLR BIT_1S /* Clear RAM Interface Reset */
+#define RI_RST_SET BIT_0S /* Set RAM Interface Reset */
+
+/* B3_RI_TEST 8 bit RAM Iface Test Register */
+ /* Bit 15.. 4: reserved */
+#define RI_T_EV BIT_3S /* Timeout Event occured */
+#define RI_T_ON BIT_2S /* Timeout Timer Test On */
+#define RI_T_OFF BIT_1S /* Timeout Timer Test Off */
+#define RI_T_STEP BIT_0S /* Timeout Timer Step */
+
+/* MAC Arbiter Registers */
+/* B3_MA_TO_CTRL 16 bit MAC Arbiter Timeout Ctrl Reg */
+ /* Bit 15.. 4: reserved */
+#define MA_FOE_ON BIT_3S /* XMAC Fast Output Enable ON */
+#define MA_FOE_OFF BIT_2S /* XMAC Fast Output Enable OFF */
+#define MA_RST_CLR BIT_1S /* Clear MAC Arbiter Reset */
+#define MA_RST_SET BIT_0S /* Set MAC Arbiter Reset */
+
+/* B3_MA_RC_CTRL 16 bit MAC Arbiter Recovery Ctrl Reg */
+ /* Bit 15.. 8: reserved */
+#define MA_ENA_REC_TX2 BIT_7S /* Enable Recovery Timer TX2 */
+#define MA_DIS_REC_TX2 BIT_6S /* Disable Recovery Timer TX2 */
+#define MA_ENA_REC_TX1 BIT_5S /* Enable Recovery Timer TX1 */
+#define MA_DIS_REC_TX1 BIT_4S /* Disable Recovery Timer TX1 */
+#define MA_ENA_REC_RX2 BIT_3S /* Enable Recovery Timer RX2 */
+#define MA_DIS_REC_RX2 BIT_2S /* Disable Recovery Timer RX2 */
+#define MA_ENA_REC_RX1 BIT_1S /* Enable Recovery Timer RX1 */
+#define MA_DIS_REC_RX1 BIT_0S /* Disable Recovery Timer RX1 */
+
+/* Packet Arbiter Registers */
+/* B3_PA_CTRL 16 bit Packet Arbiter Ctrl Register */
+ /* Bit 15..14: reserved */
+#define PA_CLR_TO_TX2 BIT_13S /* Clear IRQ Packet Timeout TX2 */
+#define PA_CLR_TO_TX1 BIT_12S /* Clear IRQ Packet Timeout TX1 */
+#define PA_CLR_TO_RX2 BIT_11S /* Clear IRQ Packet Timeout RX2 */
+#define PA_CLR_TO_RX1 BIT_10S /* Clear IRQ Packet Timeout RX1 */
+#define PA_ENA_TO_TX2 BIT_9S /* Enable Timeout Timer TX2 */
+#define PA_DIS_TO_TX2 BIT_8S /* Disable Timeout Timer TX2 */
+#define PA_ENA_TO_TX1 BIT_7S /* Enable Timeout Timer TX1 */
+#define PA_DIS_TO_TX1 BIT_6S /* Disable Timeout Timer TX1 */
+#define PA_ENA_TO_RX2 BIT_5S /* Enable Timeout Timer RX2 */
+#define PA_DIS_TO_RX2 BIT_4S /* Disable Timeout Timer RX2 */
+#define PA_ENA_TO_RX1 BIT_3S /* Enable Timeout Timer RX1 */
+#define PA_DIS_TO_RX1 BIT_2S /* Disable Timeout Timer RX1 */
+#define PA_RST_CLR BIT_1S /* Clear MAC Arbiter Reset */
+#define PA_RST_SET BIT_0S /* Set MAC Arbiter Reset */
+
+#define PA_ENA_TO_ALL (PA_ENA_TO_RX1 | PA_ENA_TO_RX2 |\
+ PA_ENA_TO_TX1 | PA_ENA_TO_TX2)
+
+/* Rx/Tx Path related Arbiter Test Registers */
+/* B3_MA_TO_TEST 16 bit MAC Arbiter Timeout Test Reg */
+/* B3_MA_RC_TEST 16 bit MAC Arbiter Recovery Test Reg */
+/* B3_PA_TEST 16 bit Packet Arbiter Test Register */
+/* Bit 15, 11, 7, and 3 are reserved in B3_PA_TEST */
+#define TX2_T_EV BIT_15S /* TX2 Timeout/Recv Event occured */
+#define TX2_T_ON BIT_14S /* TX2 Timeout/Recv Timer Test On */
+#define TX2_T_OFF BIT_13S /* TX2 Timeout/Recv Timer Tst Off */
+#define TX2_T_STEP BIT_12S /* TX2 Timeout/Recv Timer Step */
+#define TX1_T_EV BIT_11S /* TX1 Timeout/Recv Event occured */
+#define TX1_T_ON BIT_10S /* TX1 Timeout/Recv Timer Test On */
+#define TX1_T_OFF BIT_9S /* TX1 Timeout/Recv Timer Tst Off */
+#define TX1_T_STEP BIT_8S /* TX1 Timeout/Recv Timer Step */
+#define RX2_T_EV BIT_7S /* RX2 Timeout/Recv Event occured */
+#define RX2_T_ON BIT_6S /* RX2 Timeout/Recv Timer Test On */
+#define RX2_T_OFF BIT_5S /* RX2 Timeout/Recv Timer Tst Off */
+#define RX2_T_STEP BIT_4S /* RX2 Timeout/Recv Timer Step */
+#define RX1_T_EV BIT_3S /* RX1 Timeout/Recv Event occured */
+#define RX1_T_ON BIT_2S /* RX1 Timeout/Recv Timer Test On */
+#define RX1_T_OFF BIT_1S /* RX1 Timeout/Recv Timer Tst Off */
+#define RX1_T_STEP BIT_0S /* RX1 Timeout/Recv Timer Step */
+
+
+/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
+/* TXA_ITI_INI 32 bit Tx Arb Interval Timer Init Val */
+/* TXA_ITI_VAL 32 bit Tx Arb Interval Timer Value */
+/* TXA_LIM_INI 32 bit Tx Arb Limit Counter Init Val */
+/* TXA_LIM_VAL 32 bit Tx Arb Limit Counter Value */
+ /* Bit 31..24: reserved */
+#define TXA_MAX_VAL 0x00ffffffL /* Bit 23.. 0: Max TXA Timer/Cnt Val */
+
+/* TXA_CTRL 8 bit Tx Arbiter Control Register */
+#define TXA_ENA_FSYNC BIT_7S /* Enable force of sync Tx queue */
+#define TXA_DIS_FSYNC BIT_6S /* Disable force of sync Tx queue */
+#define TXA_ENA_ALLOC BIT_5S /* Enable alloc of free bandwidth */
+#define TXA_DIS_ALLOC BIT_4S /* Disable alloc of free bandwidth */
+#define TXA_START_RC BIT_3S /* Start sync Rate Control */
+#define TXA_STOP_RC BIT_2S /* Stop sync Rate Control */
+#define TXA_ENA_ARB BIT_1S /* Enable Tx Arbiter */
+#define TXA_DIS_ARB BIT_0S /* Disable Tx Arbiter */
+
+/* TXA_TEST 8 bit Tx Arbiter Test Register */
+ /* Bit 7.. 6: reserved */
+#define TXA_INT_T_ON BIT_5S /* Tx Arb Interval Timer Test On */
+#define TXA_INT_T_OFF BIT_4S /* Tx Arb Interval Timer Test Off */
+#define TXA_INT_T_STEP BIT_3S /* Tx Arb Interval Timer Step */
+#define TXA_LIM_T_ON BIT_2S /* Tx Arb Limit Timer Test On */
+#define TXA_LIM_T_OFF BIT_1S /* Tx Arb Limit Timer Test Off */
+#define TXA_LIM_T_STEP BIT_0S /* Tx Arb Limit Timer Step */
+
+/* TXA_STAT 8 bit Tx Arbiter Status Register */
+ /* Bit 7.. 1: reserved */
+#define TXA_PRIO_XS BIT_0S /* sync queue has prio to send */
+
+/* Q_BC 32 bit Current Byte Counter */
+ /* Bit 31..16: reserved */
+#define BC_MAX 0xffff /* Bit 15.. 0: Byte counter */
+
+/* BMU Control Status Registers */
+/* B0_R1_CSR 32 bit BMU Ctrl/Stat Rx Queue 1 */
+/* B0_R2_CSR 32 bit BMU Ctrl/Stat Rx Queue 2 */
+/* B0_XA1_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 1 */
+/* B0_XS1_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 1 */
+/* B0_XA2_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 2 */
+/* B0_XS2_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 2 */
+/* Q_CSR 32 bit BMU Control/Status Register */
+ /* Bit 31..25: reserved */
+#define CSR_SV_IDLE BIT_24 /* BMU SM Idle */
+ /* Bit 23..22: reserved */
+#define CSR_DESC_CLR BIT_21 /* Clear Reset for Descr */
+#define CSR_DESC_SET BIT_20 /* Set Reset for Descr */
+#define CSR_FIFO_CLR BIT_19 /* Clear Reset for FIFO */
+#define CSR_FIFO_SET BIT_18 /* Set Reset for FIFO */
+#define CSR_HPI_RUN BIT_17 /* Release HPI SM */
+#define CSR_HPI_RST BIT_16 /* Reset HPI SM to Idle */
+#define CSR_SV_RUN BIT_15 /* Release Supervisor SM */
+#define CSR_SV_RST BIT_14 /* Reset Supervisor SM */
+#define CSR_DREAD_RUN BIT_13 /* Release Descr Read SM */
+#define CSR_DREAD_RST BIT_12 /* Reset Descr Read SM */
+#define CSR_DWRITE_RUN BIT_11 /* Release Descr Write SM */
+#define CSR_DWRITE_RST BIT_10 /* Reset Descr Write SM */
+#define CSR_TRANS_RUN BIT_9 /* Release Transfer SM */
+#define CSR_TRANS_RST BIT_8 /* Reset Transfer SM */
+#define CSR_ENA_POL BIT_7 /* Enable Descr Polling */
+#define CSR_DIS_POL BIT_6 /* Disable Descr Polling */
+#define CSR_STOP BIT_5 /* Stop Rx/Tx Queue */
+#define CSR_START BIT_4 /* Start Rx/Tx Queue */
+#define CSR_IRQ_CL_P BIT_3 /* (Rx) Clear Parity IRQ */
+#define CSR_IRQ_CL_B BIT_2 /* Clear EOB IRQ */
+#define CSR_IRQ_CL_F BIT_1 /* Clear EOF IRQ */
+#define CSR_IRQ_CL_C BIT_0 /* Clear ERR IRQ */
+
+#define CSR_SET_RESET (CSR_DESC_SET | CSR_FIFO_SET | CSR_HPI_RST |\
+ CSR_SV_RST | CSR_DREAD_RST | CSR_DWRITE_RST |\
+ CSR_TRANS_RST)
+#define CSR_CLR_RESET (CSR_DESC_CLR | CSR_FIFO_CLR | CSR_HPI_RUN |\
+ CSR_SV_RUN | CSR_DREAD_RUN | CSR_DWRITE_RUN |\
+ CSR_TRANS_RUN)
+
+/* Q_F 32 bit Flag Register */
+ /* Bit 31..28: reserved */
+#define F_ALM_FULL BIT_27 /* Rx FIFO: almost full */
+#define F_EMPTY BIT_27 /* Tx FIFO: empty flag */
+#define F_FIFO_EOF BIT_26 /* Tag (EOF Flag) bit in FIFO */
+#define F_WM_REACHED BIT_25 /* Watermark reached */
+ /* reserved */
+#define F_FIFO_LEVEL (0x1fL<<16) /* Bit 23..16: # of Qwords in FIFO */
+ /* Bit 15..11: reserved */
+#define F_WATER_MARK 0x0007ffL /* Bit 10.. 0: Watermark */
+
+/* Q_T1 32 bit Test Register 1 */
+/* Holds four State Machine control Bytes */
+#define SM_CRTL_SV_MSK (0xffL<<24) /* Bit 31..24: Control Supervisor SM */
+#define SM_CRTL_RD_MSK (0xffL<<16) /* Bit 23..16: Control Read Desc SM */
+#define SM_CRTL_WR_MSK (0xffL<<8) /* Bit 15.. 8: Control Write Desc SM */
+#define SM_CRTL_TR_MSK 0xffL /* Bit 7.. 0: Control Transfer SM */
+
+/* Q_T1_TR 8 bit Test Register 1 Transfer SM */
+/* Q_T1_WR 8 bit Test Register 1 Write Descriptor SM */
+/* Q_T1_RD 8 bit Test Register 1 Read Descriptor SM */
+/* Q_T1_SV 8 bit Test Register 1 Supervisor SM */
+
+/* The control status byte of each machine looks like ... */
+#define SM_STATE 0xf0 /* Bit 7.. 4: State which shall be loaded */
+#define SM_LOAD BIT_3S /* Load the SM with SM_STATE */
+#define SM_TEST_ON BIT_2S /* Switch on SM Test Mode */
+#define SM_TEST_OFF BIT_1S /* Go off the Test Mode */
+#define SM_STEP BIT_0S /* Step the State Machine */
+/* The encoding of the states is not supported by the Diagnostics Tool */
+
+/* Q_T2 32 bit Test Register 2 */
+ /* Bit 31.. 8: reserved */
+#define T2_AC_T_ON BIT_7 /* Address Counter Test Mode on */
+#define T2_AC_T_OFF BIT_6 /* Address Counter Test Mode off */
+#define T2_BC_T_ON BIT_5 /* Byte Counter Test Mode on */
+#define T2_BC_T_OFF BIT_4 /* Byte Counter Test Mode off */
+#define T2_STEP04 BIT_3 /* Inc AC/Dec BC by 4 */
+#define T2_STEP03 BIT_2 /* Inc AC/Dec BC by 3 */
+#define T2_STEP02 BIT_1 /* Inc AC/Dec BC by 2 */
+#define T2_STEP01 BIT_0 /* Inc AC/Dec BC by 1 */
+
+/* Q_T3 32 bit Test Register 3 */
+ /* Bit 31.. 7: reserved */
+#define T3_MUX_MSK (7<<4) /* Bit 6.. 4: Mux Position */
+ /* Bit 3: reserved */
+#define T3_VRAM_MSK 7 /* Bit 2.. 0: Virtual RAM Buffer Address */
+
+/* RAM Buffer Register Offsets, use RB_ADDR(Queue, Offs) to access */
+/* RB_START 32 bit RAM Buffer Start Address */
+/* RB_END 32 bit RAM Buffer End Address */
+/* RB_WP 32 bit RAM Buffer Write Pointer */
+/* RB_RP 32 bit RAM Buffer Read Pointer */
+/* RB_RX_UTPP 32 bit Rx Upper Threshold, Pause Pack */
+/* RB_RX_LTPP 32 bit Rx Lower Threshold, Pause Pack */
+/* RB_RX_UTHP 32 bit Rx Upper Threshold, High Prio */
+/* RB_RX_LTHP 32 bit Rx Lower Threshold, High Prio */
+/* RB_PC 32 bit RAM Buffer Packet Counter */
+/* RB_LEV 32 bit RAM Buffer Level Register */
+ /* Bit 31..19: reserved */
+#define RB_MSK 0x0007ffff /* Bit 18.. 0: RAM Buffer Pointer Bits */
+
+/* RB_TST2 8 bit RAM Buffer Test Register 2 */
+ /* Bit 7.. 4: reserved */
+#define RB_PC_DEC BIT_3S /* Packet Counter Decrem */
+#define RB_PC_T_ON BIT_2S /* Packet Counter Test On */
+#define RB_PC_T_OFF BIT_1S /* Packet Counter Tst Off */
+#define RB_PC_INC BIT_0S /* Packet Counter Increm */
+
+/* RB_TST1 8 bit RAM Buffer Test Register 1 */
+ /* Bit 7: reserved */
+#define RB_WP_T_ON BIT_6S /* Write Pointer Test On */
+#define RB_WP_T_OFF BIT_5S /* Write Pointer Test Off */
+#define RB_WP_INC BIT_4S /* Write Pointer Increm */
+ /* Bit 3: reserved */
+#define RB_RP_T_ON BIT_2S /* Read Pointer Test On */
+#define RB_RP_T_OFF BIT_1S /* Read Pointer Test Off */
+#define RB_RP_DEC BIT_0S /* Read Pointer Decrement */
+
+/* RB_CTRL 8 bit RAM Buffer Control Register */
+ /* Bit 7.. 6: reserved */
+#define RB_ENA_STFWD BIT_5S /* Enable Store & Forward */
+#define RB_DIS_STFWD BIT_4S /* Disable Store & Forward */
+#define RB_ENA_OP_MD BIT_3S /* Enable Operation Mode */
+#define RB_DIS_OP_MD BIT_2S /* Disable Operation Mode */
+#define RB_RST_CLR BIT_1S /* Clear RAM Buf STM Reset */
+#define RB_RST_SET BIT_0S /* Set RAM Buf STM Reset */
+
+
+/* Receive and Transmit MAC FIFO Registers (GENESIS only) */
+
+/* RX_MFF_EA 32 bit Receive MAC FIFO End Address */
+/* RX_MFF_WP 32 bit Receive MAC FIFO Write Pointer */
+/* RX_MFF_RP 32 bit Receive MAC FIFO Read Pointer */
+/* RX_MFF_PC 32 bit Receive MAC FIFO Packet Counter */
+/* RX_MFF_LEV 32 bit Receive MAC FIFO Level */
+/* TX_MFF_EA 32 bit Transmit MAC FIFO End Address */
+/* TX_MFF_WP 32 bit Transmit MAC FIFO Write Pointer */
+/* TX_MFF_WSP 32 bit Transmit MAC FIFO WR Shadow Pointer */
+/* TX_MFF_RP 32 bit Transmit MAC FIFO Read Pointer */
+/* TX_MFF_PC 32 bit Transmit MAC FIFO Packet Cnt */
+/* TX_MFF_LEV 32 bit Transmit MAC FIFO Level */
+ /* Bit 31.. 6: reserved */
+#define MFF_MSK 0x007fL /* Bit 5.. 0: MAC FIFO Address/Ptr Bits */
+
+/* RX_MFF_CTRL1 16 bit Receive MAC FIFO Control Reg 1 */
+ /* Bit 15..14: reserved */
+#define MFF_ENA_RDY_PAT BIT_13S /* Enable Ready Patch */
+#define MFF_DIS_RDY_PAT BIT_12S /* Disable Ready Patch */
+#define MFF_ENA_TIM_PAT BIT_11S /* Enable Timing Patch */
+#define MFF_DIS_TIM_PAT BIT_10S /* Disable Timing Patch */
+#define MFF_ENA_ALM_FUL BIT_9S /* Enable AlmostFull Sign */
+#define MFF_DIS_ALM_FUL BIT_8S /* Disable AlmostFull Sign */
+#define MFF_ENA_PAUSE BIT_7S /* Enable Pause Signaling */
+#define MFF_DIS_PAUSE BIT_6S /* Disable Pause Signaling */
+#define MFF_ENA_FLUSH BIT_5S /* Enable Frame Flushing */
+#define MFF_DIS_FLUSH BIT_4S /* Disable Frame Flushing */
+#define MFF_ENA_TIST BIT_3S /* Enable Time Stamp Gener */
+#define MFF_DIS_TIST BIT_2S /* Disable Time Stamp Gener */
+#define MFF_CLR_INTIST BIT_1S /* Clear IRQ No Time Stamp */
+#define MFF_CLR_INSTAT BIT_0S /* Clear IRQ No Status */
+
+#define MFF_RX_CTRL_DEF MFF_ENA_TIM_PAT
+
+/* TX_MFF_CTRL1 16 bit Transmit MAC FIFO Control Reg 1 */
+#define MFF_CLR_PERR BIT_15S /* Clear Parity Error IRQ */
+ /* Bit 14: reserved */
+#define MFF_ENA_PKT_REC BIT_13S /* Enable Packet Recovery */
+#define MFF_DIS_PKT_REC BIT_12S /* Disable Packet Recovery */
+/* MFF_ENA_TIM_PAT (see RX_MFF_CTRL1) Bit 11: Enable Timing Patch */
+/* MFF_DIS_TIM_PAT (see RX_MFF_CTRL1) Bit 10: Disable Timing Patch */
+/* MFF_ENA_ALM_FUL (see RX_MFF_CTRL1) Bit 9: Enable Almost Full Sign */
+/* MFF_DIS_ALM_FUL (see RX_MFF_CTRL1) Bit 8: Disable Almost Full Sign */
+#define MFF_ENA_W4E BIT_7S /* Enable Wait for Empty */
+#define MFF_DIS_W4E BIT_6S /* Disable Wait for Empty */
+/* MFF_ENA_FLUSH (see RX_MFF_CTRL1) Bit 5: Enable Frame Flushing */
+/* MFF_DIS_FLUSH (see RX_MFF_CTRL1) Bit 4: Disable Frame Flushing */
+#define MFF_ENA_LOOPB BIT_3S /* Enable Loopback */
+#define MFF_DIS_LOOPB BIT_2S /* Disable Loopback */
+#define MFF_CLR_MAC_RST BIT_1S /* Clear XMAC Reset */
+#define MFF_SET_MAC_RST BIT_0S /* Set XMAC Reset */
+
+#define MFF_TX_CTRL_DEF (MFF_ENA_PKT_REC | MFF_ENA_TIM_PAT | MFF_ENA_FLUSH)
+
+/* RX_MFF_TST2 8 bit Receive MAC FIFO Test Register 2 */
+/* TX_MFF_TST2 8 bit Transmit MAC FIFO Test Register 2 */
+ /* Bit 7: reserved */
+#define MFF_WSP_T_ON BIT_6S /* Tx: Write Shadow Ptr TestOn */
+#define MFF_WSP_T_OFF BIT_5S /* Tx: Write Shadow Ptr TstOff */
+#define MFF_WSP_INC BIT_4S /* Tx: Write Shadow Ptr Increment */
+#define MFF_PC_DEC BIT_3S /* Packet Counter Decrement */
+#define MFF_PC_T_ON BIT_2S /* Packet Counter Test On */
+#define MFF_PC_T_OFF BIT_1S /* Packet Counter Test Off */
+#define MFF_PC_INC BIT_0S /* Packet Counter Increment */
+
+/* RX_MFF_TST1 8 bit Receive MAC FIFO Test Register 1 */
+/* TX_MFF_TST1 8 bit Transmit MAC FIFO Test Register 1 */
+ /* Bit 7: reserved */
+#define MFF_WP_T_ON BIT_6S /* Write Pointer Test On */
+#define MFF_WP_T_OFF BIT_5S /* Write Pointer Test Off */
+#define MFF_WP_INC BIT_4S /* Write Pointer Increm */
+ /* Bit 3: reserved */
+#define MFF_RP_T_ON BIT_2S /* Read Pointer Test On */
+#define MFF_RP_T_OFF BIT_1S /* Read Pointer Test Off */
+#define MFF_RP_DEC BIT_0S /* Read Pointer Decrement */
+
+/* RX_MFF_CTRL2 8 bit Receive MAC FIFO Control Reg 2 */
+/* TX_MFF_CTRL2 8 bit Transmit MAC FIFO Control Reg 2 */
+ /* Bit 7..4: reserved */
+#define MFF_ENA_OP_MD BIT_3S /* Enable Operation Mode */
+#define MFF_DIS_OP_MD BIT_2S /* Disable Operation Mode */
+#define MFF_RST_CLR BIT_1S /* Clear MAC FIFO Reset */
+#define MFF_RST_SET BIT_0S /* Set MAC FIFO Reset */
+
+
+/* Link LED Counter Registers (GENESIS only) */
+
+/* RX_LED_CTRL 8 bit Receive LED Cnt Control Reg */
+/* TX_LED_CTRL 8 bit Transmit LED Cnt Control Reg */
+/* LNK_SYNC_CTRL 8 bit Link Sync Cnt Control Register */
+ /* Bit 7.. 3: reserved */
+#define LED_START BIT_2S /* Start Timer */
+#define LED_STOP BIT_1S /* Stop Timer */
+#define LED_STATE BIT_0S /* Rx/Tx: LED State, 1=LED on */
+#define LED_CLR_IRQ BIT_0S /* Lnk: Clear Link IRQ */
+
+/* RX_LED_TST 8 bit Receive LED Cnt Test Register */
+/* TX_LED_TST 8 bit Transmit LED Cnt Test Register */
+/* LNK_SYNC_TST 8 bit Link Sync Cnt Test Register */
+ /* Bit 7.. 3: reserved */
+#define LED_T_ON BIT_2S /* LED Counter Test mode On */
+#define LED_T_OFF BIT_1S /* LED Counter Test mode Off */
+#define LED_T_STEP BIT_0S /* LED Counter Step */
+
+/* LNK_LED_REG 8 bit Link LED Register */
+ /* Bit 7.. 6: reserved */
+#define LED_BLK_ON BIT_5S /* Link LED Blinking On */
+#define LED_BLK_OFF BIT_4S /* Link LED Blinking Off */
+#define LED_SYNC_ON BIT_3S /* Use Sync Wire to switch LED */
+#define LED_SYNC_OFF BIT_2S /* Disable Sync Wire Input */
+#define LED_ON BIT_1S /* switch LED on */
+#define LED_OFF BIT_0S /* switch LED off */
+
+/* Receive and Transmit GMAC FIFO Registers (YUKON only) */
+
+/* RX_GMF_EA 32 bit Rx GMAC FIFO End Address */
+/* RX_GMF_AF_THR 32 bit Rx GMAC FIFO Almost Full Thresh. */
+/* RX_GMF_WP 32 bit Rx GMAC FIFO Write Pointer */
+/* RX_GMF_WLEV 32 bit Rx GMAC FIFO Write Level */
+/* RX_GMF_RP 32 bit Rx GMAC FIFO Read Pointer */
+/* RX_GMF_RLEV 32 bit Rx GMAC FIFO Read Level */
+/* TX_GMF_EA 32 bit Tx GMAC FIFO End Address */
+/* TX_GMF_AE_THR 32 bit Tx GMAC FIFO Almost Empty Thresh.*/
+/* TX_GMF_WP 32 bit Tx GMAC FIFO Write Pointer */
+/* TX_GMF_WSP 32 bit Tx GMAC FIFO Write Shadow Ptr. */
+/* TX_GMF_WLEV 32 bit Tx GMAC FIFO Write Level */
+/* TX_GMF_RP 32 bit Tx GMAC FIFO Read Pointer */
+/* TX_GMF_RSTP 32 bit Tx GMAC FIFO Restart Pointer */
+/* TX_GMF_RLEV 32 bit Tx GMAC FIFO Read Level */
+
+/* RX_GMF_CTRL_T 32 bit Rx GMAC FIFO Control/Test */
+ /* Bits 31..15: reserved */
+#define GMF_WP_TST_ON BIT_14 /* Write Pointer Test On */
+#define GMF_WP_TST_OFF BIT_13 /* Write Pointer Test Off */
+#define GMF_WP_STEP BIT_12 /* Write Pointer Step/Increment */
+ /* Bit 11: reserved */
+#define GMF_RP_TST_ON BIT_10 /* Read Pointer Test On */
+#define GMF_RP_TST_OFF BIT_9 /* Read Pointer Test Off */
+#define GMF_RP_STEP BIT_8 /* Read Pointer Step/Increment */
+#define GMF_RX_F_FL_ON BIT_7 /* Rx FIFO Flush Mode On */
+#define GMF_RX_F_FL_OFF BIT_6 /* Rx FIFO Flush Mode Off */
+#define GMF_CLI_RX_FO BIT_5 /* Clear IRQ Rx FIFO Overrun */
+#define GMF_CLI_RX_FC BIT_4 /* Clear IRQ Rx Frame Complete */
+#define GMF_OPER_ON BIT_3 /* Operational Mode On */
+#define GMF_OPER_OFF BIT_2 /* Operational Mode Off */
+#define GMF_RST_CLR BIT_1 /* Clear GMAC FIFO Reset */
+#define GMF_RST_SET BIT_0 /* Set GMAC FIFO Reset */
+
+/* TX_GMF_CTRL_T 32 bit Tx GMAC FIFO Control/Test */
+ /* Bits 31..19: reserved */
+#define GMF_WSP_TST_ON BIT_18 /* Write Shadow Pointer Test On */
+#define GMF_WSP_TST_OFF BIT_17 /* Write Shadow Pointer Test Off */
+#define GMF_WSP_STEP BIT_16 /* Write Shadow Pointer Step/Increment */
+ /* Bits 15..7: same as for RX_GMF_CTRL_T */
+#define GMF_CLI_TX_FU BIT_6 /* Clear IRQ Tx FIFO Underrun */
+#define GMF_CLI_TX_FC BIT_5 /* Clear IRQ Tx Frame Complete */
+#define GMF_CLI_TX_PE BIT_4 /* Clear IRQ Tx Parity Error */
+ /* Bits 3..0: same as for RX_GMF_CTRL_T */
+
+#define GMF_RX_CTRL_DEF (GMF_OPER_ON | GMF_RX_F_FL_ON)
+#define GMF_TX_CTRL_DEF GMF_OPER_ON
+
+#define RX_GMF_FL_THR_DEF 0x0a /* Rx GMAC FIFO Flush Threshold default */
+
+/* GMAC_TI_ST_CTRL 8 bit Time Stamp Timer Ctrl Reg (YUKON only) */
+ /* Bit 7.. 3: reserved */
+#define GMT_ST_START BIT_2S /* Start Time Stamp Timer */
+#define GMT_ST_STOP BIT_1S /* Stop Time Stamp Timer */
+#define GMT_ST_CLR_IRQ BIT_0S /* Clear Time Stamp Timer IRQ */
+
+/* GMAC_CTRL 32 bit GMAC Control Reg (YUKON only) */
+ /* Bits 31.. 8: reserved */
+#define GMC_H_BURST_ON BIT_7 /* Half Duplex Burst Mode On */
+#define GMC_H_BURST_OFF BIT_6 /* Half Duplex Burst Mode Off */
+#define GMC_F_LOOPB_ON BIT_5 /* FIFO Loopback On */
+#define GMC_F_LOOPB_OFF BIT_4 /* FIFO Loopback Off */
+#define GMC_PAUSE_ON BIT_3 /* Pause On */
+#define GMC_PAUSE_OFF BIT_2 /* Pause Off */
+#define GMC_RST_CLR BIT_1 /* Clear GMAC Reset */
+#define GMC_RST_SET BIT_0 /* Set GMAC Reset */
+
+/* GPHY_CTRL 32 bit GPHY Control Reg (YUKON only) */
+ /* Bits 31..29: reserved */
+#define GPC_SEL_BDT BIT_28 /* Select Bi-Dir. Transfer for MDC/MDIO */
+#define GPC_INT_POL_HI BIT_27 /* IRQ Polarity is Active HIGH */
+#define GPC_75_OHM BIT_26 /* Use 75 Ohm Termination instead of 50 */
+#define GPC_DIS_FC BIT_25 /* Disable Automatic Fiber/Copper Detection */
+#define GPC_DIS_SLEEP BIT_24 /* Disable Energy Detect */
+#define GPC_HWCFG_M_3 BIT_23 /* HWCFG_MODE[3] */
+#define GPC_HWCFG_M_2 BIT_22 /* HWCFG_MODE[2] */
+#define GPC_HWCFG_M_1 BIT_21 /* HWCFG_MODE[1] */
+#define GPC_HWCFG_M_0 BIT_20 /* HWCFG_MODE[0] */
+#define GPC_ANEG_0 BIT_19 /* ANEG[0] */
+#define GPC_ENA_XC BIT_18 /* Enable MDI crossover */
+#define GPC_DIS_125 BIT_17 /* Disable 125 MHz clock */
+#define GPC_ANEG_3 BIT_16 /* ANEG[3] */
+#define GPC_ANEG_2 BIT_15 /* ANEG[2] */
+#define GPC_ANEG_1 BIT_14 /* ANEG[1] */
+#define GPC_ENA_PAUSE BIT_13 /* Enable Pause (SYM_OR_REM) */
+#define GPC_PHYADDR_4 BIT_12 /* Bit 4 of Phy Addr */
+#define GPC_PHYADDR_3 BIT_11 /* Bit 3 of Phy Addr */
+#define GPC_PHYADDR_2 BIT_10 /* Bit 2 of Phy Addr */
+#define GPC_PHYADDR_1 BIT_9 /* Bit 1 of Phy Addr */
+#define GPC_PHYADDR_0 BIT_8 /* Bit 0 of Phy Addr */
+ /* Bits 7..2: reserved */
+#define GPC_RST_CLR BIT_1 /* Clear GPHY Reset */
+#define GPC_RST_SET BIT_0 /* Set GPHY Reset */
+
+#define GPC_HWCFG_GMII_COP (GPC_HWCFG_M_3 | GPC_HWCFG_M_2 | \
+ GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
+
+#define GPC_HWCFG_GMII_FIB ( GPC_HWCFG_M_2 | \
+ GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
+
+#define GPC_ANEG_ADV_ALL_M (GPC_ANEG_3 | GPC_ANEG_2 | \
+ GPC_ANEG_1 | GPC_ANEG_0)
+
+/* forced speed and duplex mode (don't mix with other ANEG bits) */
+#define GPC_FRC10MBIT_HALF 0
+#define GPC_FRC10MBIT_FULL GPC_ANEG_0
+#define GPC_FRC100MBIT_HALF GPC_ANEG_1
+#define GPC_FRC100MBIT_FULL (GPC_ANEG_0 | GPC_ANEG_1)
+
+/* auto-negotiation with limited advertised speeds */
+/* mix only with master/slave settings (for copper) */
+#define GPC_ADV_1000_HALF GPC_ANEG_2
+#define GPC_ADV_1000_FULL GPC_ANEG_3
+#define GPC_ADV_ALL (GPC_ANEG_2 | GPC_ANEG_3)
+
+/* master/slave settings */
+/* only for copper with 1000 Mbps */
+#define GPC_FORCE_MASTER 0
+#define GPC_FORCE_SLAVE GPC_ANEG_0
+#define GPC_PREF_MASTER GPC_ANEG_1
+#define GPC_PREF_SLAVE (GPC_ANEG_1 | GPC_ANEG_0)
+
+/* GMAC_IRQ_SRC 8 bit GMAC Interrupt Source Reg (YUKON only) */
+/* GMAC_IRQ_MSK 8 bit GMAC Interrupt Mask Reg (YUKON only) */
+#define GM_IS_TX_CO_OV BIT_5 /* Transmit Counter Overflow IRQ */
+#define GM_IS_RX_CO_OV BIT_4 /* Receive Counter Overflow IRQ */
+#define GM_IS_TX_FF_UR BIT_3 /* Transmit FIFO Underrun */
+#define GM_IS_TX_COMPL BIT_2 /* Frame Transmission Complete */
+#define GM_IS_RX_FF_OR BIT_1 /* Receive FIFO Overrun */
+#define GM_IS_RX_COMPL BIT_0 /* Frame Reception Complete */
+
+#define GMAC_DEF_MSK (GM_IS_TX_CO_OV | GM_IS_RX_CO_OV | \
+ GM_IS_TX_FF_UR)
+
+/* GMAC_LINK_CTRL 16 bit GMAC Link Control Reg (YUKON only) */
+ /* Bits 15.. 2: reserved */
+#define GMLC_RST_CLR BIT_1S /* Clear GMAC Link Reset */
+#define GMLC_RST_SET BIT_0S /* Set GMAC Link Reset */
+
+
+/* WOL_CTRL_STAT 16 bit WOL Control/Status Reg */
+#define WOL_CTL_LINK_CHG_OCC BIT_15S
+#define WOL_CTL_MAGIC_PKT_OCC BIT_14S
+#define WOL_CTL_PATTERN_OCC BIT_13S
+
+#define WOL_CTL_CLEAR_RESULT BIT_12S
+
+#define WOL_CTL_ENA_PME_ON_LINK_CHG BIT_11S
+#define WOL_CTL_DIS_PME_ON_LINK_CHG BIT_10S
+#define WOL_CTL_ENA_PME_ON_MAGIC_PKT BIT_9S
+#define WOL_CTL_DIS_PME_ON_MAGIC_PKT BIT_8S
+#define WOL_CTL_ENA_PME_ON_PATTERN BIT_7S
+#define WOL_CTL_DIS_PME_ON_PATTERN BIT_6S
+
+#define WOL_CTL_ENA_LINK_CHG_UNIT BIT_5S
+#define WOL_CTL_DIS_LINK_CHG_UNIT BIT_4S
+#define WOL_CTL_ENA_MAGIC_PKT_UNIT BIT_3S
+#define WOL_CTL_DIS_MAGIC_PKT_UNIT BIT_2S
+#define WOL_CTL_ENA_PATTERN_UNIT BIT_1S
+#define WOL_CTL_DIS_PATTERN_UNIT BIT_0S
+
+#define WOL_CTL_DEFAULT \
+ (WOL_CTL_DIS_PME_ON_LINK_CHG | \
+ WOL_CTL_DIS_PME_ON_PATTERN | \
+ WOL_CTL_DIS_PME_ON_MAGIC_PKT | \
+ WOL_CTL_DIS_LINK_CHG_UNIT | \
+ WOL_CTL_DIS_PATTERN_UNIT | \
+ WOL_CTL_DIS_MAGIC_PKT_UNIT)
+
+/* WOL_MATCH_CTL 8 bit WOL Match Control Reg */
+#define WOL_CTL_PATT_ENA(x) (BIT_0 << (x))
+
+#define SK_NUM_WOL_PATTERN 7
+#define SK_PATTERN_PER_WORD 4
+#define SK_BITMASK_PATTERN 7
+#define SK_POW_PATTERN_LENGTH 128
+
+#define WOL_LENGTH_MSK 0x7f
+#define WOL_LENGTH_SHIFT 8
+
+
+/* Receive and Transmit Descriptors ******************************************/
+
+/* Transmit Descriptor struct */
+typedef struct s_HwTxd {
+ SK_U32 volatile TxCtrl; /* Transmit Buffer Control Field */
+ SK_U32 TxNext; /* Physical Address Pointer to the next TxD */
+ SK_U32 TxAdrLo; /* Physical Tx Buffer Address lower dword */
+ SK_U32 TxAdrHi; /* Physical Tx Buffer Address upper dword */
+ SK_U32 TxStat; /* Transmit Frame Status Word */
+#ifndef SK_USE_REV_DESC
+ SK_U16 TxTcpOffs; /* TCP Checksum Calculation Start Value */
+ SK_U16 TxRes1; /* 16 bit reserved field */
+ SK_U16 TxTcpWp; /* TCP Checksum Write Position */
+ SK_U16 TxTcpSp; /* TCP Checksum Calculation Start Position */
+#else /* SK_USE_REV_DESC */
+ SK_U16 TxRes1; /* 16 bit reserved field */
+ SK_U16 TxTcpOffs; /* TCP Checksum Calculation Start Value */
+ SK_U16 TxTcpSp; /* TCP Checksum Calculation Start Position */
+ SK_U16 TxTcpWp; /* TCP Checksum Write Position */
+#endif /* SK_USE_REV_DESC */
+ SK_U32 TxRes2; /* 32 bit reserved field */
+} SK_HWTXD;
+
+/* Receive Descriptor struct */
+typedef struct s_HwRxd {
+ SK_U32 volatile RxCtrl; /* Receive Buffer Control Field */
+ SK_U32 RxNext; /* Physical Address Pointer to the next RxD */
+ SK_U32 RxAdrLo; /* Physical Rx Buffer Address lower dword */
+ SK_U32 RxAdrHi; /* Physical Rx Buffer Address upper dword */
+ SK_U32 RxStat; /* Receive Frame Status Word */
+ SK_U32 RxTiSt; /* Receive Time Stamp (from XMAC on GENESIS) */
+#ifndef SK_USE_REV_DESC
+ SK_U16 RxTcpSum1; /* TCP Checksum 1 */
+ SK_U16 RxTcpSum2; /* TCP Checksum 2 */
+ SK_U16 RxTcpSp1; /* TCP Checksum Calculation Start Position 1 */
+ SK_U16 RxTcpSp2; /* TCP Checksum Calculation Start Position 2 */
+#else /* SK_USE_REV_DESC */
+ SK_U16 RxTcpSum2; /* TCP Checksum 2 */
+ SK_U16 RxTcpSum1; /* TCP Checksum 1 */
+ SK_U16 RxTcpSp2; /* TCP Checksum Calculation Start Position 2 */
+ SK_U16 RxTcpSp1; /* TCP Checksum Calculation Start Position 1 */
+#endif /* SK_USE_REV_DESC */
+} SK_HWRXD;
+
+/*
+ * Drivers which use the reverse descriptor feature (PCI_OUR_REG_2)
+ * should set the define SK_USE_REV_DESC.
+ * Structures are 'normaly' not endianess dependent. But in
+ * this case the SK_U16 fields are bound to bit positions inside the
+ * descriptor. RxTcpSum1 e.g. must start at bit 0 within the 6.th DWord.
+ * The bit positions inside a DWord are of course endianess dependent and
+ * swaps if the DWord is swapped by the hardware.
+ */
+
+
+/* Descriptor Bit Definition */
+/* TxCtrl Transmit Buffer Control Field */
+/* RxCtrl Receive Buffer Control Field */
+#define BMU_OWN BIT_31 /* OWN bit: 0=host/1=BMU */
+#define BMU_STF BIT_30 /* Start of Frame */
+#define BMU_EOF BIT_29 /* End of Frame */
+#define BMU_IRQ_EOB BIT_28 /* Req "End of Buffer" IRQ */
+#define BMU_IRQ_EOF BIT_27 /* Req "End of Frame" IRQ */
+/* TxCtrl specific bits */
+#define BMU_STFWD BIT_26 /* (Tx) Store & Forward Frame */
+#define BMU_NO_FCS BIT_25 /* (Tx) Disable MAC FCS (CRC) generation */
+#define BMU_SW BIT_24 /* (Tx) 1 bit res. for SW use */
+/* RxCtrl specific bits */
+#define BMU_DEV_0 BIT_26 /* (Rx) Transfer data to Dev0 */
+#define BMU_STAT_VAL BIT_25 /* (Rx) Rx Status Valid */
+#define BMU_TIST_VAL BIT_24 /* (Rx) Rx TimeStamp Valid */
+ /* Bit 23..16: BMU Check Opcodes */
+#define BMU_CHECK (0x55L<<16) /* Default BMU check */
+#define BMU_TCP_CHECK (0x56L<<16) /* Descr with TCP ext */
+#define BMU_UDP_CHECK (0x57L<<16) /* Descr with UDP ext (YUKON only) */
+#define BMU_BBC 0xFFFFL /* Bit 15.. 0: Buffer Byte Counter */
+
+/* TxStat Transmit Frame Status Word */
+/* RxStat Receive Frame Status Word */
+/*
+ *Note: TxStat is reserved for ASIC loopback mode only
+ *
+ * The Bits of the Status words are defined in xmac_ii.h
+ * (see XMR_FS bits)
+ */
+
+/* other defines *************************************************************/
+
+/*
+ * FlashProm specification
+ */
+#define MAX_PAGES 0x20000L /* Every byte has a single page */
+#define MAX_FADDR 1 /* 1 byte per page */
+#define SKFDDI_PSZ 8 /* address PROM size */
+
+/* macros ********************************************************************/
+
+/*
+ * Receive and Transmit Queues
+ */
+#define Q_R1 0x0000 /* Receive Queue 1 */
+#define Q_R2 0x0080 /* Receive Queue 2 */
+#define Q_XS1 0x0200 /* Synchronous Transmit Queue 1 */
+#define Q_XA1 0x0280 /* Asynchronous Transmit Queue 1 */
+#define Q_XS2 0x0300 /* Synchronous Transmit Queue 2 */
+#define Q_XA2 0x0380 /* Asynchronous Transmit Queue 2 */
+
+/*
+ * Macro Q_ADDR()
+ *
+ * Use this macro to access the Receive and Transmit Queue Registers.
+ *
+ * para:
+ * Queue Queue to access.
+ * Values: Q_R1, Q_R2, Q_XS1, Q_XA1, Q_XS2, and Q_XA2
+ * Offs Queue register offset.
+ * Values: Q_D, Q_DA_L ... Q_T2, Q_T3
+ *
+ * usage SK_IN32(pAC, Q_ADDR(Q_R2, Q_BC), pVal)
+ */
+#define Q_ADDR(Queue, Offs) (B8_Q_REGS + (Queue) + (Offs))
+
+/*
+ * Macro RB_ADDR()
+ *
+ * Use this macro to access the RAM Buffer Registers.
+ *
+ * para:
+ * Queue Queue to access.
+ * Values: Q_R1, Q_R2, Q_XS1, Q_XA1, Q_XS2, and Q_XA2
+ * Offs Queue register offset.
+ * Values: RB_START, RB_END ... RB_LEV, RB_CTRL
+ *
+ * usage SK_IN32(pAC, RB_ADDR(Q_R2, RB_RP), pVal)
+ */
+#define RB_ADDR(Queue, Offs) (B16_RAM_REGS + (Queue) + (Offs))
+
+
+/*
+ * MAC Related Registers
+ */
+#define MAC_1 0 /* belongs to the port near the slot */
+#define MAC_2 1 /* belongs to the port far away from the slot */
+
+/*
+ * Macro MR_ADDR()
+ *
+ * Use this macro to access a MAC Related Registers inside the ASIC.
+ *
+ * para:
+ * Mac MAC to access.
+ * Values: MAC_1, MAC_2
+ * Offs MAC register offset.
+ * Values: RX_MFF_EA, RX_MFF_WP ... LNK_LED_REG,
+ * TX_MFF_EA, TX_MFF_WP ... TX_LED_TST
+ *
+ * usage SK_IN32(pAC, MR_ADDR(MAC_1, TX_MFF_EA), pVal)
+ */
+#define MR_ADDR(Mac, Offs) (((Mac) << 7) + (Offs))
+
+#ifdef SK_LITTLE_ENDIAN
+#define XM_WORD_LO 0
+#define XM_WORD_HI 1
+#else /* !SK_LITTLE_ENDIAN */
+#define XM_WORD_LO 1
+#define XM_WORD_HI 0
+#endif /* !SK_LITTLE_ENDIAN */
+
+
+/*
+ * macros to access the XMAC (GENESIS only)
+ *
+ * XM_IN16(), to read a 16 bit register (e.g. XM_MMU_CMD)
+ * XM_OUT16(), to write a 16 bit register (e.g. XM_MMU_CMD)
+ * XM_IN32(), to read a 32 bit register (e.g. XM_TX_EV_CNT)
+ * XM_OUT32(), to write a 32 bit register (e.g. XM_TX_EV_CNT)
+ * XM_INADDR(), to read a network address register (e.g. XM_SRC_CHK)
+ * XM_OUTADDR(), to write a network address register (e.g. XM_SRC_CHK)
+ * XM_INHASH(), to read the XM_HSM_CHK register
+ * XM_OUTHASH() to write the XM_HSM_CHK register
+ *
+ * para:
+ * Mac XMAC to access values: MAC_1 or MAC_2
+ * IoC I/O context needed for SK I/O macros
+ * Reg XMAC Register to read or write
+ * (p)Val Value or pointer to the value which should be read or written
+ *
+ * usage: XM_OUT16(IoC, MAC_1, XM_MMU_CMD, Value);
+ */
+
+#define XMA(Mac, Reg) \
+ ((BASE_XMAC_1 + (Mac) * (BASE_XMAC_2 - BASE_XMAC_1)) | ((Reg) << 1))
+
+#define XM_IN16(IoC, Mac, Reg, pVal) \
+ SK_IN16((IoC), XMA((Mac), (Reg)), (pVal))
+
+#define XM_OUT16(IoC, Mac, Reg, Val) \
+ SK_OUT16((IoC), XMA((Mac), (Reg)), (Val))
+
+#define XM_IN32(IoC, Mac, Reg, pVal) { \
+ SK_IN16((IoC), XMA((Mac), (Reg)), \
+ (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_LO]); \
+ SK_IN16((IoC), XMA((Mac), (Reg+2)), \
+ (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_HI]); \
+}
+
+#define XM_OUT32(IoC, Mac, Reg, Val) { \
+ SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16)((Val) & 0xffffL)); \
+ SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16)(((Val) >> 16) & 0xffffL));\
+}
+
+/* Remember: we are always writing to / reading from LITTLE ENDIAN memory */
+
+#define XM_INADDR(IoC, Mac, Reg, pVal) { \
+ SK_U16 Word; \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_IN16((IoC), XMA((Mac), (Reg)), &Word); \
+ pByte[0] = (SK_U8)(Word & 0x00ff); \
+ pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), XMA((Mac), (Reg+2)), &Word); \
+ pByte[2] = (SK_U8)(Word & 0x00ff); \
+ pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), XMA((Mac), (Reg+4)), &Word); \
+ pByte[4] = (SK_U8)(Word & 0x00ff); \
+ pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
+}
+
+#define XM_OUTADDR(IoC, Mac, Reg, pVal) { \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16) \
+ (((SK_U16)(pByte[0]) & 0x00ff) | \
+ (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16) \
+ (((SK_U16)(pByte[2]) & 0x00ff) | \
+ (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), XMA((Mac), (Reg+4)), (SK_U16) \
+ (((SK_U16)(pByte[4]) & 0x00ff) | \
+ (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
+}
+
+#define XM_INHASH(IoC, Mac, Reg, pVal) { \
+ SK_U16 Word; \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_IN16((IoC), XMA((Mac), (Reg)), &Word); \
+ pByte[0] = (SK_U8)(Word & 0x00ff); \
+ pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), XMA((Mac), (Reg+2)), &Word); \
+ pByte[2] = (SK_U8)(Word & 0x00ff); \
+ pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), XMA((Mac), (Reg+4)), &Word); \
+ pByte[4] = (SK_U8)(Word & 0x00ff); \
+ pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), XMA((Mac), (Reg+6)), &Word); \
+ pByte[6] = (SK_U8)(Word & 0x00ff); \
+ pByte[7] = (SK_U8)((Word >> 8) & 0x00ff); \
+}
+
+#define XM_OUTHASH(IoC, Mac, Reg, pVal) { \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_OUT16((IoC), XMA((Mac), (Reg)), (SK_U16) \
+ (((SK_U16)(pByte[0]) & 0x00ff)| \
+ (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), XMA((Mac), (Reg+2)), (SK_U16) \
+ (((SK_U16)(pByte[2]) & 0x00ff)| \
+ (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), XMA((Mac), (Reg+4)), (SK_U16) \
+ (((SK_U16)(pByte[4]) & 0x00ff)| \
+ (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), XMA((Mac), (Reg+6)), (SK_U16) \
+ (((SK_U16)(pByte[6]) & 0x00ff)| \
+ (((SK_U16)(pByte[7]) << 8) & 0xff00))); \
+}
+
+/*
+ * macros to access the GMAC (YUKON only)
+ *
+ * GM_IN16(), to read a 16 bit register (e.g. GM_GP_STAT)
+ * GM_OUT16(), to write a 16 bit register (e.g. GM_GP_CTRL)
+ * GM_IN32(), to read a 32 bit register (e.g. GM_)
+ * GM_OUT32(), to write a 32 bit register (e.g. GM_)
+ * GM_INADDR(), to read a network address register (e.g. GM_SRC_ADDR_1L)
+ * GM_OUTADDR(), to write a network address register (e.g. GM_SRC_ADDR_2L)
+ * GM_INHASH(), to read the GM_MC_ADDR_H1 register
+ * GM_OUTHASH() to write the GM_MC_ADDR_H1 register
+ *
+ * para:
+ * Mac GMAC to access values: MAC_1 or MAC_2
+ * IoC I/O context needed for SK I/O macros
+ * Reg GMAC Register to read or write
+ * (p)Val Value or pointer to the value which should be read or written
+ *
+ * usage: GM_OUT16(IoC, MAC_1, GM_GP_CTRL, Value);
+ */
+
+#define GMA(Mac, Reg) \
+ ((BASE_GMAC_1 + (Mac) * (BASE_GMAC_2 - BASE_GMAC_1)) | (Reg))
+
+#define GM_IN16(IoC, Mac, Reg, pVal) \
+ SK_IN16((IoC), GMA((Mac), (Reg)), (pVal))
+
+#define GM_OUT16(IoC, Mac, Reg, Val) \
+ SK_OUT16((IoC), GMA((Mac), (Reg)), (Val))
+
+#define GM_IN32(IoC, Mac, Reg, pVal) { \
+ SK_IN16((IoC), GMA((Mac), (Reg)), \
+ (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_LO]); \
+ SK_IN16((IoC), GMA((Mac), (Reg+4)), \
+ (SK_U16 *)&((SK_U16 *)(pVal))[XM_WORD_HI]); \
+}
+
+#define GM_OUT32(IoC, Mac, Reg, Val) { \
+ SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16)((Val) & 0xffffL)); \
+ SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16)(((Val) >> 16) & 0xffffL));\
+}
+
+#define GM_INADDR(IoC, Mac, Reg, pVal) { \
+ SK_U16 Word; \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_IN16((IoC), GMA((Mac), (Reg)), &Word); \
+ pByte[0] = (SK_U8)(Word & 0x00ff); \
+ pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), GMA((Mac), (Reg+4)), &Word); \
+ pByte[2] = (SK_U8)(Word & 0x00ff); \
+ pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), GMA((Mac), (Reg+8)), &Word); \
+ pByte[4] = (SK_U8)(Word & 0x00ff); \
+ pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
+}
+
+#define GM_OUTADDR(IoC, Mac, Reg, pVal) { \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16) \
+ (((SK_U16)(pByte[0]) & 0x00ff) | \
+ (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16) \
+ (((SK_U16)(pByte[2]) & 0x00ff) | \
+ (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), GMA((Mac), (Reg+8)), (SK_U16) \
+ (((SK_U16)(pByte[4]) & 0x00ff) | \
+ (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
+}
+
+#define GM_INHASH(IoC, Mac, Reg, pVal) { \
+ SK_U16 Word; \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_IN16((IoC), GMA((Mac), (Reg)), &Word); \
+ pByte[0] = (SK_U8)(Word & 0x00ff); \
+ pByte[1] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), GMA((Mac), (Reg+4)), &Word); \
+ pByte[2] = (SK_U8)(Word & 0x00ff); \
+ pByte[3] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), GMA((Mac), (Reg+8)), &Word); \
+ pByte[4] = (SK_U8)(Word & 0x00ff); \
+ pByte[5] = (SK_U8)((Word >> 8) & 0x00ff); \
+ SK_IN16((IoC), GMA((Mac), (Reg+12)), &Word); \
+ pByte[6] = (SK_U8)(Word & 0x00ff); \
+ pByte[7] = (SK_U8)((Word >> 8) & 0x00ff); \
+}
+
+#define GM_OUTHASH(IoC, Mac, Reg, pVal) { \
+ SK_U8 *pByte; \
+ pByte = (SK_U8 *)&((SK_U8 *)(pVal))[0]; \
+ SK_OUT16((IoC), GMA((Mac), (Reg)), (SK_U16) \
+ (((SK_U16)(pByte[0]) & 0x00ff)| \
+ (((SK_U16)(pByte[1]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), GMA((Mac), (Reg+4)), (SK_U16) \
+ (((SK_U16)(pByte[2]) & 0x00ff)| \
+ (((SK_U16)(pByte[3]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), GMA((Mac), (Reg+8)), (SK_U16) \
+ (((SK_U16)(pByte[4]) & 0x00ff)| \
+ (((SK_U16)(pByte[5]) << 8) & 0xff00))); \
+ SK_OUT16((IoC), GMA((Mac), (Reg+12)), (SK_U16) \
+ (((SK_U16)(pByte[6]) & 0x00ff)| \
+ (((SK_U16)(pByte[7]) << 8) & 0xff00))); \
+}
+
+/*
+ * Different MAC Types
+ */
+#define SK_MAC_XMAC 0 /* Xaqti XMAC II */
+#define SK_MAC_GMAC 1 /* Marvell GMAC */
+
+/*
+ * Different PHY Types
+ */
+#define SK_PHY_XMAC 0 /* integrated in XMAC II */
+#define SK_PHY_BCOM 1 /* Broadcom BCM5400 */
+#define SK_PHY_LONE 2 /* Level One LXT1000 */
+#define SK_PHY_NAT 3 /* National DP83891 */
+#define SK_PHY_MARV_COPPER 4 /* Marvell 88E1011S */
+#define SK_PHY_MARV_FIBER 5 /* Marvell 88E1011S working on fiber */
+
+/*
+ * PHY addresses (bits 12..8 of PHY address reg)
+ */
+#define PHY_ADDR_XMAC (0<<8)
+#define PHY_ADDR_BCOM (1<<8)
+#define PHY_ADDR_LONE (3<<8)
+#define PHY_ADDR_NAT (0<<8)
+
+/* GPHY address (bits 15..11 of SMI control reg) */
+#define PHY_ADDR_MARV 0
+
+/*
+ * macros to access the PHY
+ *
+ * PHY_READ() read a 16 bit value from the PHY
+ * PHY_WRITE() write a 16 bit value to the PHY
+ *
+ * para:
+ * IoC I/O context needed for SK I/O macros
+ * pPort Pointer to port struct for PhyAddr
+ * Mac XMAC to access values: MAC_1 or MAC_2
+ * PhyReg PHY Register to read or write
+ * (p)Val Value or pointer to the value which should be read or
+ * written.
+ *
+ * usage: PHY_READ(IoC, pPort, MAC_1, PHY_CTRL, Value);
+ * Warning: a PHY_READ on an uninitialized PHY (PHY still in reset) never
+ * comes back. This is checked in DEBUG mode.
+ */
+#ifndef DEBUG
+#define PHY_READ(IoC, pPort, Mac, PhyReg, pVal) { \
+ SK_U16 Mmu; \
+ \
+ XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr); \
+ XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
+ if ((pPort)->PhyType != SK_PHY_XMAC) { \
+ do { \
+ XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
+ } while ((Mmu & XM_MMU_PHY_RDY) == 0); \
+ XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
+ } \
+}
+#else
+#define PHY_READ(IoC, pPort, Mac, PhyReg, pVal) { \
+ SK_U16 Mmu; \
+ int __i = 0; \
+ \
+ XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr); \
+ XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
+ if ((pPort)->PhyType != SK_PHY_XMAC) { \
+ do { \
+ XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
+ __i++; \
+ if (__i > 100000) { \
+ SK_DBG_PRINTF("*****************************\n"); \
+ SK_DBG_PRINTF("PHY_READ on uninitialized PHY\n"); \
+ SK_DBG_PRINTF("*****************************\n"); \
+ break; \
+ } \
+ } while ((Mmu & XM_MMU_PHY_RDY) == 0); \
+ XM_IN16((IoC), (Mac), XM_PHY_DATA, (pVal)); \
+ } \
+}
+#endif /* DEBUG */
+
+#define PHY_WRITE(IoC, pPort, Mac, PhyReg, Val) { \
+ SK_U16 Mmu; \
+ \
+ if ((pPort)->PhyType != SK_PHY_XMAC) { \
+ do { \
+ XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
+ } while ((Mmu & XM_MMU_PHY_BUSY) != 0); \
+ } \
+ XM_OUT16((IoC), (Mac), XM_PHY_ADDR, (PhyReg) | (pPort)->PhyAddr); \
+ XM_OUT16((IoC), (Mac), XM_PHY_DATA, (Val)); \
+ if ((pPort)->PhyType != SK_PHY_XMAC) { \
+ do { \
+ XM_IN16((IoC), (Mac), XM_MMU_CMD, &Mmu); \
+ } while ((Mmu & XM_MMU_PHY_BUSY) != 0); \
+ } \
+}
+
+/*
+ * Macro PCI_C()
+ *
+ * Use this macro to access PCI config register from the I/O space.
+ *
+ * para:
+ * Addr PCI configuration register to access.
+ * Values: PCI_VENDOR_ID ... PCI_VPD_ADR_REG,
+ *
+ * usage SK_IN16(pAC, PCI_C(PCI_VENDOR_ID), pVal);
+ */
+#define PCI_C(Addr) (B7_CFG_SPC + (Addr)) /* PCI Config Space */
+
+/*
+ * Macro SK_HW_ADDR(Base, Addr)
+ *
+ * Calculates the effective HW address
+ *
+ * para:
+ * Base I/O or memory base address
+ * Addr Address offset
+ *
+ * usage: May be used in SK_INxx and SK_OUTxx macros
+ * #define SK_IN8(pAC, Addr, pVal) ...\
+ * *pVal = (SK_U8)inp(SK_HW_ADDR(pAC->Hw.Iop, Addr)))
+ */
+#ifdef SK_MEM_MAPPED_IO
+#define SK_HW_ADDR(Base, Addr) ((Base) + (Addr))
+#else /* SK_MEM_MAPPED_IO */
+#define SK_HW_ADDR(Base, Addr) \
+ ((Base) + (((Addr) & 0x7f) | (((Addr) >> 7 > 0) ? 0x80 : 0)))
+#endif /* SK_MEM_MAPPED_IO */
+
+#define SZ_LONG (sizeof(SK_U32))
+
+/*
+ * Macro SK_HWAC_LINK_LED()
+ *
+ * Use this macro to set the link LED mode.
+ * para:
+ * pAC Pointer to adapter context struct
+ * IoC I/O context needed for SK I/O macros
+ * Port Port number
+ * Mode Mode to set for this LED
+ */
+#define SK_HWAC_LINK_LED(pAC, IoC, Port, Mode) \
+ SK_OUT8(IoC, MR_ADDR(Port, LNK_LED_REG), Mode);
+
+
+/* typedefs *******************************************************************/
+
+
+/* function prototypes ********************************************************/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __INC_SKGEHW_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgehwt.h u-boot-2009.03/drivers/net/sk98lin/h/skgehwt.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgehwt.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgehwt.h 2009-03-31 14:54:45.815420800 -0700
@@ -1,74 +1,77 @@
-/******************************************************************************
- *
- * Name: skhwt.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.5 $
- * Date: $Date: 1999/11/22 13:54:24 $
- * Purpose: Defines for the hardware timer functions
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998,1999 SysKonnect,
- * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skgehwt.h,v $
- * Revision 1.5 1999/11/22 13:54:24 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.4 1998/08/19 09:50:58 gklug
- * fix: remove struct keyword from c-code (see CCC) add typedefs
- *
- * Revision 1.3 1998/08/14 07:09:29 gklug
- * fix: chg pAc -> pAC
- *
- * Revision 1.2 1998/08/07 12:54:21 gklug
- * fix: first compiled version
- *
- * Revision 1.1 1998/08/07 09:32:58 gklug
- * first version
- *
- *
- *
- *
- *
- ******************************************************************************/
-
-/*
- * SKGEHWT.H contains all defines and types for the timer functions
- */
-
-#ifndef _SKGEHWT_H_
-#define _SKGEHWT_H_
-
-/*
- * SK Hardware Timer
- * - needed wherever the HWT module is used
- * - use in Adapters context name pAC->Hwt
- */
-typedef struct s_Hwt {
- SK_U32 TStart ; /* HWT start */
- SK_U32 TStop ; /* HWT stop */
- int TActive ; /* HWT: flag : active/inactive */
-} SK_HWT;
-
-extern void SkHwtInit(SK_AC *pAC, SK_IOC Ioc);
-extern void SkHwtStart(SK_AC *pAC, SK_IOC Ioc, SK_U32 Time);
-extern void SkHwtStop(SK_AC *pAC, SK_IOC Ioc);
-extern SK_U32 SkHwtRead(SK_AC *pAC,SK_IOC Ioc);
-extern void SkHwtIsr(SK_AC *pAC, SK_IOC Ioc);
-#endif /* _SKGEHWT_H_ */
+/******************************************************************************
+ *
+ * Name: skhwt.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Defines for the hardware timer functions
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998,1999 SysKonnect,
+ * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgehwt.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.5 1999/11/22 13:54:24 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.4 1998/08/19 09:50:58 gklug
+ * fix: remove struct keyword from c-code (see CCC) add typedefs
+ *
+ * Revision 1.3 1998/08/14 07:09:29 gklug
+ * fix: chg pAc -> pAC
+ *
+ * Revision 1.2 1998/08/07 12:54:21 gklug
+ * fix: first compiled version
+ *
+ * Revision 1.1 1998/08/07 09:32:58 gklug
+ * first version
+ *
+ *
+ *
+ *
+ *
+ ******************************************************************************/
+
+/*
+ * SKGEHWT.H contains all defines and types for the timer functions
+ */
+
+#ifndef _SKGEHWT_H_
+#define _SKGEHWT_H_
+
+/*
+ * SK Hardware Timer
+ * - needed wherever the HWT module is used
+ * - use in Adapters context name pAC->Hwt
+ */
+typedef struct s_Hwt {
+ SK_U32 TStart ; /* HWT start */
+ SK_U32 TStop ; /* HWT stop */
+ int TActive ; /* HWT: flag : active/inactive */
+} SK_HWT;
+
+extern void SkHwtInit(SK_AC *pAC, SK_IOC Ioc);
+extern void SkHwtStart(SK_AC *pAC, SK_IOC Ioc, SK_U32 Time);
+extern void SkHwtStop(SK_AC *pAC, SK_IOC Ioc);
+extern SK_U32 SkHwtRead(SK_AC *pAC,SK_IOC Ioc);
+extern void SkHwtIsr(SK_AC *pAC, SK_IOC Ioc);
+#endif /* _SKGEHWT_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgei2c.h u-boot-2009.03/drivers/net/sk98lin/h/skgei2c.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgei2c.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgei2c.h 2009-03-31 14:54:45.846670400 -0700
@@ -1,299 +1,302 @@
-/******************************************************************************
- *
- * Name: skgei2c.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.23 $
- * Date: $Date: 2002/12/19 14:34:27 $
- * Purpose: Special GEnesis defines for TWSI
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skgei2c.h,v $
- * Revision 1.23 2002/12/19 14:34:27 rschmidt
- * Added cast in macros SK_I2C_SET_BIT() and SK_I2C_CLR_BIT()
- * Editorial changes (TWSI)
- *
- * Revision 1.22 2002/10/14 16:45:56 rschmidt
- * Editorial changes (TWSI)
- *
- * Revision 1.21 2002/08/13 08:42:24 rschmidt
- * Changed define for SK_MIN_SENSORS back to 5
- * Merged defines for PHY PLL 3V3 voltage (A and B)
- * Editorial changes
- *
- * Revision 1.20 2002/08/06 09:43:56 jschmalz
- * Extensions and changes for Yukon
- *
- * Revision 1.19 2002/08/02 12:00:08 rschmidt
- * Added defines for YUKON sensors
- * Editorial changes
- *
- * Revision 1.18 2001/08/16 12:44:33 afischer
- * LM80 sensor init values corrected
- *
- * Revision 1.17 1999/11/22 13:55:25 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.16 1999/11/12 08:24:10 malthoff
- * Change voltage warning and error limits
- * (warning +-5%, error +-10%).
- *
- * Revision 1.15 1999/09/14 14:14:43 malthoff
- * The 1000BT Dual Link adapter has got only one Fan.
- * The second Fan has been removed.
- *
- * Revision 1.14 1999/05/27 13:40:50 malthoff
- * Fan Divisor = 1. Assuming fan with 6500 rpm.
- *
- * Revision 1.13 1999/05/20 14:56:55 malthoff
- * Bug Fix: Missing brace in SK_LM80_FAN_FAKTOR.
- *
- * Revision 1.12 1999/05/20 09:22:00 cgoos
- * Changes for 1000Base-T (Fan sensors).
- *
- * Revision 1.11 1998/10/14 05:57:22 cgoos
- * Fixed compilation warnings.
- *
- * Revision 1.10 1998/09/04 08:37:00 malthoff
- * bugfix: correct the SK_I2C_GET_CTL() macro.
- *
- * Revision 1.9 1998/08/25 06:10:03 gklug
- * add: thresholds for all sensors
- *
- * Revision 1.8 1998/08/20 11:37:42 gklug
- * chg: change Ioc to IoC
- *
- * Revision 1.7 1998/08/20 08:53:11 gklug
- * fix: compiler errors
- * add: Threshold values
- *
- * Revision 1.6 1998/08/17 11:37:09 malthoff
- * Bugfix in SK_I2C_CTL macro. The parameter 'dev'
- * has to be shifted 9 bits.
- *
- * Revision 1.5 1998/08/17 06:52:21 malthoff
- * Remove unrequired macros.
- * Add macros for accessing TWSI SW register.
- *
- * Revision 1.4 1998/08/13 08:30:18 gklug
- * add: conversion factors for read values
- * add: new state SEN_VALEXT to read extension value of temperature sensor
- *
- * Revision 1.3 1998/08/12 13:37:56 gklug
- * rmv: error numbers and messages
- *
- * Revision 1.2 1998/08/11 07:54:38 gklug
- * add: sensor states for GE sensors
- * add: Macro to access TWSI hardware register
- * chg: Error messages for TWSI errors
- *
- * Revision 1.1 1998/07/17 11:27:56 gklug
- * Created.
- *
- *
- *
- ******************************************************************************/
-
-/*
- * SKGEI2C.H contains all SK-98xx specific defines for the TWSI handling
- */
-
-#ifndef _INC_SKGEI2C_H_
-#define _INC_SKGEI2C_H_
-
-/*
- * Macros to access the B2_I2C_CTRL
- */
-#define SK_I2C_CTL(IoC, flag, dev, reg, burst) \
- SK_OUT32(IoC, B2_I2C_CTRL,\
- (flag ? 0x80000000UL : 0x0L) | \
- (((SK_U32) reg << 16) & I2C_ADDR) | \
- (((SK_U32) dev << 9) & I2C_DEV_SEL) | \
- (( burst << 4) & I2C_BURST_LEN))
-
-#define SK_I2C_STOP(IoC) { \
- SK_U32 I2cCtrl; \
- SK_IN32(IoC, B2_I2C_CTRL, &I2cCtrl); \
- SK_OUT32(IoC, B2_I2C_CTRL, I2cCtrl | I2C_STOP); \
-}
-
-#define SK_I2C_GET_CTL(IoC, pI2cCtrl) SK_IN32(IoC, B2_I2C_CTRL, pI2cCtrl)
-
-/*
- * Macros to access the TWSI SW Registers
- */
-#define SK_I2C_SET_BIT(IoC, SetBits) { \
- SK_U8 OrgBits; \
- SK_IN8(IoC, B2_I2C_SW, &OrgBits); \
- SK_OUT8(IoC, B2_I2C_SW, OrgBits | (SK_U8)(SetBits)); \
-}
-
-#define SK_I2C_CLR_BIT(IoC, ClrBits) { \
- SK_U8 OrgBits; \
- SK_IN8(IoC, B2_I2C_SW, &OrgBits); \
- SK_OUT8(IoC, B2_I2C_SW, OrgBits & ~((SK_U8)(ClrBits))); \
-}
-
-#define SK_I2C_GET_SW(IoC, pI2cSw) SK_IN8(IoC, B2_I2C_SW, pI2cSw)
-
-/*
- * define the possible sensor states
- */
-#define SK_SEN_IDLE 0 /* Idle: sensor not read */
-#define SK_SEN_VALUE 1 /* Value Read cycle */
-#define SK_SEN_VALEXT 2 /* Extended Value Read cycle */
-
-/*
- * Conversion factor to convert read Voltage sensor to milli Volt
- * Conversion factor to convert read Temperature sensor to 10th degree Celsius
- */
-#define SK_LM80_VT_LSB 22 /* 22mV LSB resolution */
-#define SK_LM80_TEMP_LSB 10 /* 1 degree LSB resolution */
-#define SK_LM80_TEMPEXT_LSB 5 /* 0.5 degree LSB resolution for the
- * extension value
- */
-#define SK_LM80_FAN_FAKTOR ((22500L*60)/(1*2))
-/* formula: counter = (22500*60)/(rpm * divisor * pulses/2)
- * assuming: 6500rpm, 4 pulses, divisor 1
- */
-
-/*
- * Define sensor management data
- * Maximum is reached on copperfield with dual Broadcom.
- * Board specific maximum is in pAC->I2c.MaxSens
- */
-#define SK_MAX_SENSORS 8 /* maximal no. of installed sensors */
-#define SK_MIN_SENSORS 5 /* minimal no. of installed sensors */
-
-/*
- * To watch the statemachine (JS) use the timer in two ways instead of one as hitherto
- */
-#define SK_TIMER_WATCH_STATEMACHINE 0 /* Watch the statemachine to finish in a specific time */
-#define SK_TIMER_NEW_GAUGING 1 /* Start a new gauging when timer expires */
-
-
-/*
- * Defines for the individual Thresholds
- */
-
-/* Temperature sensor */
-#define SK_SEN_TEMP_HIGH_ERR 800 /* Temperature High Err Threshold */
-#define SK_SEN_TEMP_HIGH_WARN 700 /* Temperature High Warn Threshold */
-#define SK_SEN_TEMP_LOW_WARN 100 /* Temperature Low Warn Threshold */
-#define SK_SEN_TEMP_LOW_ERR 0 /* Temperature Low Err Threshold */
-
-/* VCC which should be 5 V */
-#define SK_SEN_PCI_5V_HIGH_ERR 5588 /* Voltage PCI High Err Threshold */
-#define SK_SEN_PCI_5V_HIGH_WARN 5346 /* Voltage PCI High Warn Threshold */
-#define SK_SEN_PCI_5V_LOW_WARN 4664 /* Voltage PCI Low Warn Threshold */
-#define SK_SEN_PCI_5V_LOW_ERR 4422 /* Voltage PCI Low Err Threshold */
-
-/*
- * VIO may be 5 V or 3.3 V. Initialization takes two parts:
- * 1. Initialize lowest lower limit and highest higher limit.
- * 2. After the first value is read correct the upper or the lower limit to
- * the appropriate C constant.
- *
- * Warning limits are +-5% of the exepected voltage.
- * Error limits are +-10% of the expected voltage.
- */
-
-/* Bug fix AF: 16.Aug.2001: Correct the init base of LM80 sensor */
-
-#define SK_SEN_PCI_IO_5V_HIGH_ERR 5566 /* + 10% V PCI-IO High Err Threshold */
-#define SK_SEN_PCI_IO_5V_HIGH_WARN 5324 /* + 5% V PCI-IO High Warn Threshold */
- /* 5000 mVolt */
-#define SK_SEN_PCI_IO_5V_LOW_WARN 4686 /* - 5% V PCI-IO Low Warn Threshold */
-#define SK_SEN_PCI_IO_5V_LOW_ERR 4444 /* - 10% V PCI-IO Low Err Threshold */
-
-#define SK_SEN_PCI_IO_RANGE_LIMITER 4000 /* 4000 mV range delimiter */
-
-/* correction values for the second pass */
-#define SK_SEN_PCI_IO_3V3_HIGH_ERR 3850 /* + 15% V PCI-IO High Err Threshold */
-#define SK_SEN_PCI_IO_3V3_HIGH_WARN 3674 /* + 10% V PCI-IO High Warn Threshold */
- /* 3300 mVolt */
-#define SK_SEN_PCI_IO_3V3_LOW_WARN 2926 /* - 10% V PCI-IO Low Warn Threshold */
-#define SK_SEN_PCI_IO_3V3_LOW_ERR 2772 /* - 15% V PCI-IO Low Err Threshold */
-
-
-/*
- * VDD voltage
- */
-#define SK_SEN_VDD_HIGH_ERR 3630 /* Voltage ASIC High Err Threshold */
-#define SK_SEN_VDD_HIGH_WARN 3476 /* Voltage ASIC High Warn Threshold */
-#define SK_SEN_VDD_LOW_WARN 3146 /* Voltage ASIC Low Warn Threshold */
-#define SK_SEN_VDD_LOW_ERR 2970 /* Voltage ASIC Low Err Threshold */
-
-/*
- * PHY PLL 3V3 voltage
- */
-#define SK_SEN_PLL_3V3_HIGH_ERR 3630 /* Voltage PMA High Err Threshold */
-#define SK_SEN_PLL_3V3_HIGH_WARN 3476 /* Voltage PMA High Warn Threshold */
-#define SK_SEN_PLL_3V3_LOW_WARN 3146 /* Voltage PMA Low Warn Threshold */
-#define SK_SEN_PLL_3V3_LOW_ERR 2970 /* Voltage PMA Low Err Threshold */
-
-/*
- * VAUX (YUKON only)
- */
-#define SK_SEN_VAUX_3V3_HIGH_ERR 3630 /* Voltage VAUX High Err Threshold */
-#define SK_SEN_VAUX_3V3_HIGH_WARN 3476 /* Voltage VAUX High Warn Threshold */
-#define SK_SEN_VAUX_3V3_LOW_WARN 3146 /* Voltage VAUX Low Warn Threshold */
-#define SK_SEN_VAUX_3V3_LOW_ERR 2970 /* Voltage VAUX Low Err Threshold */
-#define SK_SEN_VAUX_0V_WARN_ERR 0 /* if VAUX not present */
-#define SK_SEN_VAUX_RANGE_LIMITER 1000 /* 1000 mV range delimiter */
-
-/*
- * PHY 2V5 voltage
- */
-#define SK_SEN_PHY_2V5_HIGH_ERR 2750 /* Voltage PHY High Err Threshold */
-#define SK_SEN_PHY_2V5_HIGH_WARN 2640 /* Voltage PHY High Warn Threshold */
-#define SK_SEN_PHY_2V5_LOW_WARN 2376 /* Voltage PHY Low Warn Threshold */
-#define SK_SEN_PHY_2V5_LOW_ERR 2222 /* Voltage PHY Low Err Threshold */
-
-/*
- * ASIC Core 1V5 voltage (YUKON only)
- */
-#define SK_SEN_CORE_1V5_HIGH_ERR 1650 /* Voltage ASIC Core High Err Threshold */
-#define SK_SEN_CORE_1V5_HIGH_WARN 1575 /* Voltage ASIC Core High Warn Threshold */
-#define SK_SEN_CORE_1V5_LOW_WARN 1425 /* Voltage ASIC Core Low Warn Threshold */
-#define SK_SEN_CORE_1V5_LOW_ERR 1350 /* Voltage ASIC Core Low Err Threshold */
-
-/*
- * FAN 1 speed
- */
-/* assuming: 6500rpm +-15%, 4 pulses,
- * warning at: 80 %
- * error at: 70 %
- * no upper limit
- */
-#define SK_SEN_FAN_HIGH_ERR 20000 /* FAN Speed High Err Threshold */
-#define SK_SEN_FAN_HIGH_WARN 20000 /* FAN Speed High Warn Threshold */
-#define SK_SEN_FAN_LOW_WARN 5200 /* FAN Speed Low Warn Threshold */
-#define SK_SEN_FAN_LOW_ERR 4550 /* FAN Speed Low Err Threshold */
-
-/*
- * Some Voltages need dynamic thresholds
- */
-#define SK_SEN_DYN_INIT_NONE 0 /* No dynamic init of thresholds */
-#define SK_SEN_DYN_INIT_PCI_IO 10 /* Init PCI-IO with new thresholds */
-#define SK_SEN_DYN_INIT_VAUX 11 /* Init VAUX with new thresholds */
-
-extern int SkLm80ReadSensor(SK_AC *pAC, SK_IOC IoC, SK_SENSOR *pSen);
-#endif /* n_INC_SKGEI2C_H */
+/******************************************************************************
+ *
+ * Name: skgei2c.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Special GEnesis defines for TWSI
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgei2c.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.23 2002/12/19 14:34:27 rschmidt
+ * Added cast in macros SK_I2C_SET_BIT() and SK_I2C_CLR_BIT()
+ * Editorial changes (TWSI)
+ *
+ * Revision 1.22 2002/10/14 16:45:56 rschmidt
+ * Editorial changes (TWSI)
+ *
+ * Revision 1.21 2002/08/13 08:42:24 rschmidt
+ * Changed define for SK_MIN_SENSORS back to 5
+ * Merged defines for PHY PLL 3V3 voltage (A and B)
+ * Editorial changes
+ *
+ * Revision 1.20 2002/08/06 09:43:56 jschmalz
+ * Extensions and changes for Yukon
+ *
+ * Revision 1.19 2002/08/02 12:00:08 rschmidt
+ * Added defines for YUKON sensors
+ * Editorial changes
+ *
+ * Revision 1.18 2001/08/16 12:44:33 afischer
+ * LM80 sensor init values corrected
+ *
+ * Revision 1.17 1999/11/22 13:55:25 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.16 1999/11/12 08:24:10 malthoff
+ * Change voltage warning and error limits
+ * (warning +-5%, error +-10%).
+ *
+ * Revision 1.15 1999/09/14 14:14:43 malthoff
+ * The 1000BT Dual Link adapter has got only one Fan.
+ * The second Fan has been removed.
+ *
+ * Revision 1.14 1999/05/27 13:40:50 malthoff
+ * Fan Divisor = 1. Assuming fan with 6500 rpm.
+ *
+ * Revision 1.13 1999/05/20 14:56:55 malthoff
+ * Bug Fix: Missing brace in SK_LM80_FAN_FAKTOR.
+ *
+ * Revision 1.12 1999/05/20 09:22:00 cgoos
+ * Changes for 1000Base-T (Fan sensors).
+ *
+ * Revision 1.11 1998/10/14 05:57:22 cgoos
+ * Fixed compilation warnings.
+ *
+ * Revision 1.10 1998/09/04 08:37:00 malthoff
+ * bugfix: correct the SK_I2C_GET_CTL() macro.
+ *
+ * Revision 1.9 1998/08/25 06:10:03 gklug
+ * add: thresholds for all sensors
+ *
+ * Revision 1.8 1998/08/20 11:37:42 gklug
+ * chg: change Ioc to IoC
+ *
+ * Revision 1.7 1998/08/20 08:53:11 gklug
+ * fix: compiler errors
+ * add: Threshold values
+ *
+ * Revision 1.6 1998/08/17 11:37:09 malthoff
+ * Bugfix in SK_I2C_CTL macro. The parameter 'dev'
+ * has to be shifted 9 bits.
+ *
+ * Revision 1.5 1998/08/17 06:52:21 malthoff
+ * Remove unrequired macros.
+ * Add macros for accessing TWSI SW register.
+ *
+ * Revision 1.4 1998/08/13 08:30:18 gklug
+ * add: conversion factors for read values
+ * add: new state SEN_VALEXT to read extension value of temperature sensor
+ *
+ * Revision 1.3 1998/08/12 13:37:56 gklug
+ * rmv: error numbers and messages
+ *
+ * Revision 1.2 1998/08/11 07:54:38 gklug
+ * add: sensor states for GE sensors
+ * add: Macro to access TWSI hardware register
+ * chg: Error messages for TWSI errors
+ *
+ * Revision 1.1 1998/07/17 11:27:56 gklug
+ * Created.
+ *
+ *
+ *
+ ******************************************************************************/
+
+/*
+ * SKGEI2C.H contains all SK-98xx specific defines for the TWSI handling
+ */
+
+#ifndef _INC_SKGEI2C_H_
+#define _INC_SKGEI2C_H_
+
+/*
+ * Macros to access the B2_I2C_CTRL
+ */
+#define SK_I2C_CTL(IoC, flag, dev, reg, burst) \
+ SK_OUT32(IoC, B2_I2C_CTRL,\
+ (flag ? 0x80000000UL : 0x0L) | \
+ (((SK_U32) reg << 16) & I2C_ADDR) | \
+ (((SK_U32) dev << 9) & I2C_DEV_SEL) | \
+ (( burst << 4) & I2C_BURST_LEN))
+
+#define SK_I2C_STOP(IoC) { \
+ SK_U32 I2cCtrl; \
+ SK_IN32(IoC, B2_I2C_CTRL, &I2cCtrl); \
+ SK_OUT32(IoC, B2_I2C_CTRL, I2cCtrl | I2C_STOP); \
+}
+
+#define SK_I2C_GET_CTL(IoC, pI2cCtrl) SK_IN32(IoC, B2_I2C_CTRL, pI2cCtrl)
+
+/*
+ * Macros to access the TWSI SW Registers
+ */
+#define SK_I2C_SET_BIT(IoC, SetBits) { \
+ SK_U8 OrgBits; \
+ SK_IN8(IoC, B2_I2C_SW, &OrgBits); \
+ SK_OUT8(IoC, B2_I2C_SW, OrgBits | (SK_U8)(SetBits)); \
+}
+
+#define SK_I2C_CLR_BIT(IoC, ClrBits) { \
+ SK_U8 OrgBits; \
+ SK_IN8(IoC, B2_I2C_SW, &OrgBits); \
+ SK_OUT8(IoC, B2_I2C_SW, OrgBits & ~((SK_U8)(ClrBits))); \
+}
+
+#define SK_I2C_GET_SW(IoC, pI2cSw) SK_IN8(IoC, B2_I2C_SW, pI2cSw)
+
+/*
+ * define the possible sensor states
+ */
+#define SK_SEN_IDLE 0 /* Idle: sensor not read */
+#define SK_SEN_VALUE 1 /* Value Read cycle */
+#define SK_SEN_VALEXT 2 /* Extended Value Read cycle */
+
+/*
+ * Conversion factor to convert read Voltage sensor to milli Volt
+ * Conversion factor to convert read Temperature sensor to 10th degree Celsius
+ */
+#define SK_LM80_VT_LSB 22 /* 22mV LSB resolution */
+#define SK_LM80_TEMP_LSB 10 /* 1 degree LSB resolution */
+#define SK_LM80_TEMPEXT_LSB 5 /* 0.5 degree LSB resolution for the
+ * extension value
+ */
+#define SK_LM80_FAN_FAKTOR ((22500L*60)/(1*2))
+/* formula: counter = (22500*60)/(rpm * divisor * pulses/2)
+ * assuming: 6500rpm, 4 pulses, divisor 1
+ */
+
+/*
+ * Define sensor management data
+ * Maximum is reached on copperfield with dual Broadcom.
+ * Board specific maximum is in pAC->I2c.MaxSens
+ */
+#define SK_MAX_SENSORS 8 /* maximal no. of installed sensors */
+#define SK_MIN_SENSORS 5 /* minimal no. of installed sensors */
+
+/*
+ * To watch the statemachine (JS) use the timer in two ways instead of one as hitherto
+ */
+#define SK_TIMER_WATCH_STATEMACHINE 0 /* Watch the statemachine to finish in a specific time */
+#define SK_TIMER_NEW_GAUGING 1 /* Start a new gauging when timer expires */
+
+
+/*
+ * Defines for the individual Thresholds
+ */
+
+/* Temperature sensor */
+#define SK_SEN_TEMP_HIGH_ERR 800 /* Temperature High Err Threshold */
+#define SK_SEN_TEMP_HIGH_WARN 700 /* Temperature High Warn Threshold */
+#define SK_SEN_TEMP_LOW_WARN 100 /* Temperature Low Warn Threshold */
+#define SK_SEN_TEMP_LOW_ERR 0 /* Temperature Low Err Threshold */
+
+/* VCC which should be 5 V */
+#define SK_SEN_PCI_5V_HIGH_ERR 5588 /* Voltage PCI High Err Threshold */
+#define SK_SEN_PCI_5V_HIGH_WARN 5346 /* Voltage PCI High Warn Threshold */
+#define SK_SEN_PCI_5V_LOW_WARN 4664 /* Voltage PCI Low Warn Threshold */
+#define SK_SEN_PCI_5V_LOW_ERR 4422 /* Voltage PCI Low Err Threshold */
+
+/*
+ * VIO may be 5 V or 3.3 V. Initialization takes two parts:
+ * 1. Initialize lowest lower limit and highest higher limit.
+ * 2. After the first value is read correct the upper or the lower limit to
+ * the appropriate C constant.
+ *
+ * Warning limits are +-5% of the exepected voltage.
+ * Error limits are +-10% of the expected voltage.
+ */
+
+/* Bug fix AF: 16.Aug.2001: Correct the init base of LM80 sensor */
+
+#define SK_SEN_PCI_IO_5V_HIGH_ERR 5566 /* + 10% V PCI-IO High Err Threshold */
+#define SK_SEN_PCI_IO_5V_HIGH_WARN 5324 /* + 5% V PCI-IO High Warn Threshold */
+ /* 5000 mVolt */
+#define SK_SEN_PCI_IO_5V_LOW_WARN 4686 /* - 5% V PCI-IO Low Warn Threshold */
+#define SK_SEN_PCI_IO_5V_LOW_ERR 4444 /* - 10% V PCI-IO Low Err Threshold */
+
+#define SK_SEN_PCI_IO_RANGE_LIMITER 4000 /* 4000 mV range delimiter */
+
+/* correction values for the second pass */
+#define SK_SEN_PCI_IO_3V3_HIGH_ERR 3850 /* + 15% V PCI-IO High Err Threshold */
+#define SK_SEN_PCI_IO_3V3_HIGH_WARN 3674 /* + 10% V PCI-IO High Warn Threshold */
+ /* 3300 mVolt */
+#define SK_SEN_PCI_IO_3V3_LOW_WARN 2926 /* - 10% V PCI-IO Low Warn Threshold */
+#define SK_SEN_PCI_IO_3V3_LOW_ERR 2772 /* - 15% V PCI-IO Low Err Threshold */
+
+
+/*
+ * VDD voltage
+ */
+#define SK_SEN_VDD_HIGH_ERR 3630 /* Voltage ASIC High Err Threshold */
+#define SK_SEN_VDD_HIGH_WARN 3476 /* Voltage ASIC High Warn Threshold */
+#define SK_SEN_VDD_LOW_WARN 3146 /* Voltage ASIC Low Warn Threshold */
+#define SK_SEN_VDD_LOW_ERR 2970 /* Voltage ASIC Low Err Threshold */
+
+/*
+ * PHY PLL 3V3 voltage
+ */
+#define SK_SEN_PLL_3V3_HIGH_ERR 3630 /* Voltage PMA High Err Threshold */
+#define SK_SEN_PLL_3V3_HIGH_WARN 3476 /* Voltage PMA High Warn Threshold */
+#define SK_SEN_PLL_3V3_LOW_WARN 3146 /* Voltage PMA Low Warn Threshold */
+#define SK_SEN_PLL_3V3_LOW_ERR 2970 /* Voltage PMA Low Err Threshold */
+
+/*
+ * VAUX (YUKON only)
+ */
+#define SK_SEN_VAUX_3V3_HIGH_ERR 3630 /* Voltage VAUX High Err Threshold */
+#define SK_SEN_VAUX_3V3_HIGH_WARN 3476 /* Voltage VAUX High Warn Threshold */
+#define SK_SEN_VAUX_3V3_LOW_WARN 3146 /* Voltage VAUX Low Warn Threshold */
+#define SK_SEN_VAUX_3V3_LOW_ERR 2970 /* Voltage VAUX Low Err Threshold */
+#define SK_SEN_VAUX_0V_WARN_ERR 0 /* if VAUX not present */
+#define SK_SEN_VAUX_RANGE_LIMITER 1000 /* 1000 mV range delimiter */
+
+/*
+ * PHY 2V5 voltage
+ */
+#define SK_SEN_PHY_2V5_HIGH_ERR 2750 /* Voltage PHY High Err Threshold */
+#define SK_SEN_PHY_2V5_HIGH_WARN 2640 /* Voltage PHY High Warn Threshold */
+#define SK_SEN_PHY_2V5_LOW_WARN 2376 /* Voltage PHY Low Warn Threshold */
+#define SK_SEN_PHY_2V5_LOW_ERR 2222 /* Voltage PHY Low Err Threshold */
+
+/*
+ * ASIC Core 1V5 voltage (YUKON only)
+ */
+#define SK_SEN_CORE_1V5_HIGH_ERR 1650 /* Voltage ASIC Core High Err Threshold */
+#define SK_SEN_CORE_1V5_HIGH_WARN 1575 /* Voltage ASIC Core High Warn Threshold */
+#define SK_SEN_CORE_1V5_LOW_WARN 1425 /* Voltage ASIC Core Low Warn Threshold */
+#define SK_SEN_CORE_1V5_LOW_ERR 1350 /* Voltage ASIC Core Low Err Threshold */
+
+/*
+ * FAN 1 speed
+ */
+/* assuming: 6500rpm +-15%, 4 pulses,
+ * warning at: 80 %
+ * error at: 70 %
+ * no upper limit
+ */
+#define SK_SEN_FAN_HIGH_ERR 20000 /* FAN Speed High Err Threshold */
+#define SK_SEN_FAN_HIGH_WARN 20000 /* FAN Speed High Warn Threshold */
+#define SK_SEN_FAN_LOW_WARN 5200 /* FAN Speed Low Warn Threshold */
+#define SK_SEN_FAN_LOW_ERR 4550 /* FAN Speed Low Err Threshold */
+
+/*
+ * Some Voltages need dynamic thresholds
+ */
+#define SK_SEN_DYN_INIT_NONE 0 /* No dynamic init of thresholds */
+#define SK_SEN_DYN_INIT_PCI_IO 10 /* Init PCI-IO with new thresholds */
+#define SK_SEN_DYN_INIT_VAUX 11 /* Init VAUX with new thresholds */
+
+extern int SkLm80ReadSensor(SK_AC *pAC, SK_IOC IoC, SK_SENSOR *pSen);
+#endif /* n_INC_SKGEI2C_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgeinit.h u-boot-2009.03/drivers/net/sk98lin/h/skgeinit.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgeinit.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgeinit.h 2009-03-31 14:54:45.877920000 -0700
@@ -1,1113 +1,1116 @@
-/******************************************************************************
- *
- * Name: skgeinit.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.75 $
- * Date: $Date: 2003/02/05 13:36:39 $
- * Purpose: Structures and prototypes for the GE Init Module
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skgeinit.h,v $
- * Revision 1.75 2003/02/05 13:36:39 rschmidt
- * Added define SK_FACT_78 for YUKON's Host Clock of 78.12 MHz
- * Editorial changes
- *
- * Revision 1.74 2003/01/28 09:39:16 rschmidt
- * Added entry GIYukonLite in s_GeInit structure
- * Editorial changes
- *
- * Revision 1.73 2002/11/15 12:47:25 rschmidt
- * Replaced error message SKERR_HWI_E024 for Cable Diagnostic with
- * Rx queue error in SkGeStopPort().
- *
- * Revision 1.72 2002/11/12 17:08:35 rschmidt
- * Added entries for Cable Diagnostic to Port structure
- * Added entries GIPciSlot64 and GIPciClock66 in s_GeInit structure
- * Added error message for Cable Diagnostic
- * Added prototypes for SkGmCableDiagStatus()
- * Editorial changes
- *
- * Revision 1.71 2002/10/21 11:26:10 mkarl
- * Changed interface of SkGeInitAssignRamToQueues().
- *
- * Revision 1.70 2002/10/14 08:21:32 rschmidt
- * Changed type of GICopperType, GIVauxAvail to SK_BOOL
- * Added entry PRxOverCnt to Port structure
- * Added entry GIYukon32Bit in s_GeInit structure
- * Editorial changes
- *
- * Revision 1.69 2002/10/09 16:57:15 mkarl
- * Added some constants and macros for SkGeInitAssignRamToQueues().
- *
- * Revision 1.68 2002/09/12 08:58:51 rwahl
- * Retrieve counters needed for XMAC errata workarounds directly because
- * PNMI returns corrected counter values (e.g. #10620).
- *
- * Revision 1.67 2002/08/16 14:40:30 rschmidt
- * Added entries GIGenesis and GICopperType in s_GeInit structure
- * Added prototypes for SkMacHashing()
- * Editorial changes
- *
- * Revision 1.66 2002/08/12 13:27:21 rschmidt
- * Added defines for Link speed capabilities
- * Added entry PLinkSpeedCap to Port structure
- * Added entry GIVauxAvail in s_GeInit structure
- * Added prototypes for SkMacPromiscMode()
- * Editorial changes
- *
- * Revision 1.65 2002/08/08 15:46:18 rschmidt
- * Added define SK_PHY_ACC_TO for PHY access timeout
- * Added define SK_XM_RX_HI_WM for XMAC Rx High Watermark
- * Added define SK_MIN_TXQ_SIZE for Min RAM Buffer Tx Queue Size
- * Added entry PhyId1 to Port structure
- *
- * Revision 1.64 2002/07/23 16:02:56 rschmidt
- * Added entry GIWolOffs in s_GeInit struct (HW-Bug in YUKON 1st rev.)
- * Added prototypes for: SkGePhyRead(), SkGePhyWrite()
- *
- * Revision 1.63 2002/07/18 08:17:38 rwahl
- * Corrected definitions for SK_LSPEED_xxx & SK_LSPEED_STAT_xxx.
- *
- * Revision 1.62 2002/07/17 18:21:55 rwahl
- * Added SK_LSPEED_INDETERMINATED define.
- *
- * Revision 1.61 2002/07/17 17:16:03 rwahl
- * - MacType now member of GIni struct.
- * - Struct alignment to 32bit.
- * - Editorial change.
- *
- * Revision 1.60 2002/07/15 18:23:39 rwahl
- * Added GeMacFunc to GE Init structure.
- * Added prototypes for SkXmUpdateStats(), SkGmUpdateStats(),
- * SkXmMacStatistic(), SkGmMacStatistic(), SkXmResetCounter(),
- * SkGmResetCounter(), SkXmOverflowStatus(), SkGmOverflowStatus().
- * Added defines for current link speed state.
- * Added ERRMSG defintions for MacUpdateStat() & MacStatistics().
- *
- * Revision 1.59 2002/07/15 15:40:22 rschmidt
- * Added entry PLinkSpeedUsed to Port structure
- * Editorial changes
- *
- * Revision 1.58 2002/06/10 09:36:30 rschmidt
- * Editorial changes.
- *
- * Revision 1.57 2002/06/05 08:18:00 rschmidt
- * Corrected alignment in Port Structure
- * Added new prototypes for GMAC
- * Editorial changes
- *
- * Revision 1.56 2002/04/25 11:38:12 rschmidt
- * Added defines for Link speed values
- * Added defines for Loopback parameters for MAC and PHY
- * Removed entry PRxCmd from Port structure
- * Added entry PLinkSpeed to Port structure
- * Added entries GIChipId and GIChipRev to GE Init structure
- * Removed entry GIAnyPortAct from GE Init structure
- * Added prototypes for: SkMacInit(), SkMacInitPhy(),
- * SkMacRxTxDisable(), SkMacSoftRst(), SkMacHardRst(), SkMacIrq(),
- * SkMacIrqDisable(), SkMacFlushTxFifo(), SkMacFlushRxFifo(),
- * SkMacAutoNegDone(), SkMacAutoNegLipaPhy(), SkMacSetRxTxEn(),
- * SkXmPhyRead(), SkXmPhyRead(), SkGmPhyWrite(), SkGmPhyWrite();
- * Removed prototypes for static functions in SkXmac2.c
- * Editorial changes
- *
- * Revision 1.55 2002/02/26 15:24:53 rwahl
- * Fix: no link with manual configuration (#10673). The previous fix for
- * #10639 was removed. So for RLMT mode = CLS the RLMT may switch to
- * misconfigured port. It should not occur for the other RLMT modes.
- *
- * Revision 1.54 2002/01/18 16:52:52 rwahl
- * Editorial corrections.
- *
- * Revision 1.53 2001/11/20 09:19:58 rwahl
- * Reworked bugfix #10639 (no dependency to RLMT mode).
- *
- * Revision 1.52 2001/10/26 07:52:23 afischer
- * Port switching bug in `check local link` mode
- *
- * Revision 1.51 2001/02/09 12:26:38 cgoos
- * Inserted #ifdef DIAG for half duplex workaround timer.
- *
- * Revision 1.50 2001/02/07 07:56:40 rassmann
- * Corrected copyright.
- *
- * Revision 1.49 2001/01/31 15:32:18 gklug
- * fix: problem with autosensing an SR8800 switch
- * add: counter for autoneg timeouts
- *
- * Revision 1.48 2000/11/09 11:30:10 rassmann
- * WA: Waiting after releasing reset until BCom chip is accessible.
- *
- * Revision 1.47 2000/10/18 12:22:40 cgoos
- * Added workaround for half duplex hangup.
- *
- * Revision 1.46 2000/08/10 11:28:00 rassmann
- * Editorial changes.
- * Preserving 32-bit alignment in structs for the adapter context.
- *
- * Revision 1.45 1999/11/22 13:56:19 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.44 1999/10/26 07:34:15 malthoff
- * The define SK_LNK_ON has been lost in v1.41.
- *
- * Revision 1.43 1999/10/06 09:30:16 cgoos
- * Changed SK_XM_THR_JUMBO.
- *
- * Revision 1.42 1999/09/16 12:58:26 cgoos
- * Changed SK_LED_STANDY macro to be independent of HW link sync.
- *
- * Revision 1.41 1999/07/30 06:56:14 malthoff
- * Correct comment for SK_MS_STAT_UNSET.
- *
- * Revision 1.40 1999/05/27 13:38:46 cgoos
- * Added SK_BMU_TX_WM.
- * Made SK_BMU_TX_WM and SK_BMU_RX_WM user-definable.
- * Changed XMAC Tx treshold to max. values.
- *
- * Revision 1.39 1999/05/20 14:35:26 malthoff
- * Remove prototypes for SkGeLinkLED().
- *
- * Revision 1.38 1999/05/19 11:59:12 cgoos
- * Added SK_MS_CAP_INDETERMINATED define.
- *
- * Revision 1.37 1999/05/19 07:32:33 cgoos
- * Changes for 1000Base-T.
- * LED-defines for HWAC_LINK_LED macro.
- *
- * Revision 1.36 1999/04/08 14:00:24 gklug
- * add:Port struct field PLinkResCt
- *
- * Revision 1.35 1999/03/25 07:43:07 malthoff
- * Add error string for SKERR_HWI_E018MSG.
- *
- * Revision 1.34 1999/03/12 16:25:57 malthoff
- * Remove PPollRxD and PPollTxD.
- * Add SKERR_HWI_E017MSG. and SK_DPOLL_MAX.
- *
- * Revision 1.33 1999/03/12 13:34:41 malthoff
- * Add Autonegotiation error codes.
- * Change defines for parameter Mode in SkXmSetRxCmd().
- * Replace __STDC__ by SK_KR_PROTO.
- *
- * Revision 1.32 1999/01/25 14:40:20 mhaveman
- * Added new return states for the virtual management port if multiple
- * ports are active but differently configured.
- *
- * Revision 1.31 1998/12/11 15:17:02 gklug
- * add: Link partnet autoneg states : Unknown Manual and Auto-negotiation
- *
- * Revision 1.30 1998/12/07 12:17:04 gklug
- * add: Link Partner auto-negotiation flag
- *
- * Revision 1.29 1998/12/01 10:54:42 gklug
- * add: variables for XMAC Errata
- *
- * Revision 1.28 1998/12/01 10:14:15 gklug
- * add: PIsave saves the Interrupt status word
- *
- * Revision 1.27 1998/11/26 15:24:52 mhaveman
- * Added link status states SK_LMODE_STAT_AUTOHALF and
- * SK_LMODE_STAT_AUTOFULL which are used by PNMI.
- *
- * Revision 1.26 1998/11/26 14:53:01 gklug
- * add:autoNeg Timeout variable
- *
- * Revision 1.25 1998/11/26 08:58:50 gklug
- * add: Link Mode configuration (AUTO Sense mode)
- *
- * Revision 1.24 1998/11/24 13:30:27 gklug
- * add: PCheckPar to port struct
- *
- * Revision 1.23 1998/11/18 13:23:26 malthoff
- * Add SK_PKT_TO_MAX.
- *
- * Revision 1.22 1998/11/18 13:19:54 gklug
- * add: PPrevShorts and PLinkBroken to port struct for WA XMAC Errata #C1
- *
- * Revision 1.21 1998/10/26 08:02:57 malthoff
- * Add GIRamOffs.
- *
- * Revision 1.20 1998/10/19 07:28:37 malthoff
- * Add prototype for SkGeInitRamIface().
- *
- * Revision 1.19 1998/10/14 14:47:48 malthoff
- * SK_TIMER should not be defined for Diagnostics.
- * Add SKERR_HWI_E015MSG and SKERR_HWI_E016MSG.
- *
- * Revision 1.18 1998/10/14 14:00:03 gklug
- * add: timer to port struct for workaround of Errata #2
- *
- * Revision 1.17 1998/10/14 11:23:09 malthoff
- * Add prototype for SkXmAutoNegDone().
- * Fix SkXmSetRxCmd() prototype statement.
- *
- * Revision 1.16 1998/10/14 05:42:29 gklug
- * add: HWLinkUp flag to Port struct
- *
- * Revision 1.15 1998/10/09 08:26:33 malthoff
- * Rename SK_RB_ULPP_B to SK_RB_LLPP_B.
- *
- * Revision 1.14 1998/10/09 07:11:13 malthoff
- * bug fix: SK_FACT_53 is 85 not 117.
- * Rework time out init values.
- * Add GIPortUsage and corresponding defines.
- * Add some error log messages.
- *
- * Revision 1.13 1998/10/06 14:13:14 malthoff
- * Add prototype for SkGeLoadLnkSyncCnt().
- *
- * Revision 1.12 1998/10/05 11:29:53 malthoff
- * bug fix: A comment was not closed.
- *
- * Revision 1.11 1998/10/05 08:01:59 malthoff
- * Add default Timeout- Threshold- and
- * Watermark constants. Add QRam start and end
- * variables. Also add vars to store the polling
- * mode and receive command. Add new Error Log
- * Messages and function prototypes.
- *
- * Revision 1.10 1998/09/28 13:34:48 malthoff
- * Add mode bits for LED functions.
- * Move Autoneg and Flow Ctrl bits from shgesirq.h
- * Add the required Error Log Entries
- * and Function Prototypes.
- *
- * Revision 1.9 1998/09/16 14:38:41 malthoff
- * Rework the SK_LNK_xxx defines.
- * Add error log message defines.
- * Add prototypes for skxmac2.c
- *
- * Revision 1.8 1998/09/11 05:29:18 gklug
- * add: init state of a port
- *
- * Revision 1.7 1998/09/08 08:35:52 gklug
- * add: defines of the Init Levels
- *
- * Revision 1.6 1998/09/03 13:48:42 gklug
- * add: Link strati, capabilities to Port struct
- *
- * Revision 1.5 1998/09/03 13:30:59 malthoff
- * Add SK_LNK_BLINK and SK_LNK_PERM.
- *
- * Revision 1.4 1998/09/03 09:55:31 malthoff
- * Add constants for parameters Dir and RstMode
- * when calling SkGeStopPort().
- * Rework the prototype section.
- * Add Queue Address offsets PRxQOff, PXsQOff, and PXaQOff.
- * Remove Ioc with IoC.
- *
- * Revision 1.3 1998/08/19 09:11:54 gklug
- * fix: struct are removed from c-source (see CCC)
- * add: typedefs for all structs
- *
- * Revision 1.2 1998/07/28 12:38:26 malthoff
- * The prototypes got the parameter 'IoC'.
- *
- * Revision 1.1 1998/07/23 09:50:24 malthoff
- * Created.
- *
- ******************************************************************************/
-
-#ifndef __INC_SKGEINIT_H_
-#define __INC_SKGEINIT_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* defines ********************************************************************/
-
-/* modifying Link LED behaviour (used with SkGeLinkLED()) */
-#define SK_LNK_OFF LED_OFF
-#define SK_LNK_ON (LED_ON | LED_BLK_OFF | LED_SYNC_OFF)
-#define SK_LNK_BLINK (LED_ON | LED_BLK_ON | LED_SYNC_ON)
-#define SK_LNK_PERM (LED_ON | LED_BLK_OFF | LED_SYNC_ON)
-#define SK_LNK_TST (LED_ON | LED_BLK_ON | LED_SYNC_OFF)
-
-/* parameter 'Mode' when calling SK_HWAC_LINK_LED() */
-#define SK_LED_OFF LED_OFF
-#define SK_LED_ACTIVE (LED_ON | LED_BLK_OFF | LED_SYNC_OFF)
-#define SK_LED_STANDBY (LED_ON | LED_BLK_ON | LED_SYNC_OFF)
-
-/* addressing LED Registers in SkGeXmitLED() */
-#define XMIT_LED_INI 0
-#define XMIT_LED_CNT (RX_LED_VAL - RX_LED_INI)
-#define XMIT_LED_CTRL (RX_LED_CTRL- RX_LED_INI)
-#define XMIT_LED_TST (RX_LED_TST - RX_LED_INI)
-
-/* parameter 'Mode' when calling SkGeXmitLED() */
-#define SK_LED_DIS 0
-#define SK_LED_ENA 1
-#define SK_LED_TST 2
-
-/* Counter and Timer constants, for a host clock of 62.5 MHz */
-#define SK_XMIT_DUR 0x002faf08L /* 50 ms */
-#define SK_BLK_DUR 0x01dcd650L /* 500 ms */
-
-#define SK_DPOLL_DEF 0x00ee6b28L /* 250 ms at 62.5 MHz */
-
-#define SK_DPOLL_MAX 0x00ffffffL /* 268 ms at 62.5 MHz */
- /* 215 ms at 78.12 MHz */
-
-#define SK_FACT_62 100 /* is given in percent */
-#define SK_FACT_53 85 /* on GENESIS: 53.12 MHz */
-#define SK_FACT_78 125 /* on YUKON: 78.12 MHz */
-
-/* Timeout values */
-#define SK_MAC_TO_53 72 /* MAC arbiter timeout */
-#define SK_PKT_TO_53 0x2000 /* Packet arbiter timeout */
-#define SK_PKT_TO_MAX 0xffff /* Maximum value */
-#define SK_RI_TO_53 36 /* RAM interface timeout */
-
-#define SK_PHY_ACC_TO 600000 /* PHY access timeout */
-
-/* RAM Buffer High Pause Threshold values */
-#define SK_RB_ULPP ( 8 * 1024) /* Upper Level in kB/8 */
-#define SK_RB_LLPP_S (10 * 1024) /* Lower Level for small Queues */
-#define SK_RB_LLPP_B (16 * 1024) /* Lower Level for big Queues */
-
-#ifndef SK_BMU_RX_WM
-#define SK_BMU_RX_WM 0x600 /* BMU Rx Watermark */
-#endif
-#ifndef SK_BMU_TX_WM
-#define SK_BMU_TX_WM 0x600 /* BMU Tx Watermark */
-#endif
-
-/* XMAC II Rx High Watermark */
-#define SK_XM_RX_HI_WM 0x05aa /* 1450 */
-
-/* XMAC II Tx Threshold */
-#define SK_XM_THR_REDL 0x01fb /* .. for redundant link usage */
-#define SK_XM_THR_SL 0x01fb /* .. for single link adapters */
-#define SK_XM_THR_MULL 0x01fb /* .. for multiple link usage */
-#define SK_XM_THR_JUMBO 0x03fc /* .. for jumbo frame usage */
-
-/* values for GIPortUsage */
-#define SK_RED_LINK 1 /* redundant link usage */
-#define SK_MUL_LINK 2 /* multiple link usage */
-#define SK_JUMBO_LINK 3 /* driver uses jumbo frames */
-
-/* Minimum RAM Buffer Rx Queue Size */
-#define SK_MIN_RXQ_SIZE 16 /* 16 kB */
-
-/* Minimum RAM Buffer Tx Queue Size */
-#define SK_MIN_TXQ_SIZE 16 /* 16 kB */
-
-/* Queue Size units */
-#define QZ_UNITS 0x7
-#define QZ_STEP 8
-
-/* Percentage of queue size from whole memory */
-/* 80 % for receive */
-#define RAM_QUOTA_RX 80L
-/* 0% for sync transfer */
-#define RAM_QUOTA_SYNC 0L
-/* the rest (20%) is taken for async transfer */
-
-/* Get the rounded queue size in Bytes in 8k steps */
-#define ROUND_QUEUE_SIZE(SizeInBytes) \
- ((((unsigned long) (SizeInBytes) + (QZ_STEP*1024L)-1) / 1024) & \
- ~(QZ_STEP-1))
-
-/* Get the rounded queue size in KBytes in 8k steps */
-#define ROUND_QUEUE_SIZE_KB(Kilobytes) \
- ROUND_QUEUE_SIZE((Kilobytes) * 1024L)
-
-/* Types of RAM Buffer Queues */
-#define SK_RX_SRAM_Q 1 /* small receive queue */
-#define SK_RX_BRAM_Q 2 /* big receive queue */
-#define SK_TX_RAM_Q 3 /* small or big transmit queue */
-
-/* parameter 'Dir' when calling SkGeStopPort() */
-#define SK_STOP_TX 1 /* Stops the transmit path, resets the XMAC */
-#define SK_STOP_RX 2 /* Stops the receive path */
-#define SK_STOP_ALL 3 /* Stops Rx and Tx path, resets the XMAC */
-
-/* parameter 'RstMode' when calling SkGeStopPort() */
-#define SK_SOFT_RST 1 /* perform a software reset */
-#define SK_HARD_RST 2 /* perform a hardware reset */
-
-/* Init Levels */
-#define SK_INIT_DATA 0 /* Init level 0: init data structures */
-#define SK_INIT_IO 1 /* Init level 1: init with IOs */
-#define SK_INIT_RUN 2 /* Init level 2: init for run time */
-
-/* Link Mode Parameter */
-#define SK_LMODE_HALF 1 /* Half Duplex Mode */
-#define SK_LMODE_FULL 2 /* Full Duplex Mode */
-#define SK_LMODE_AUTOHALF 3 /* AutoHalf Duplex Mode */
-#define SK_LMODE_AUTOFULL 4 /* AutoFull Duplex Mode */
-#define SK_LMODE_AUTOBOTH 5 /* AutoBoth Duplex Mode */
-#define SK_LMODE_AUTOSENSE 6 /* configured mode auto sensing */
-#define SK_LMODE_INDETERMINATED 7 /* indeterminated */
-
-/* Auto-negotiation timeout in 100ms granularity */
-#define SK_AND_MAX_TO 6 /* Wait 600 msec before link comes up */
-
-/* Auto-negotiation error codes */
-#define SK_AND_OK 0 /* no error */
-#define SK_AND_OTHER 1 /* other error than below */
-#define SK_AND_DUP_CAP 2 /* Duplex capabilities error */
-
-
-/* Link Speed Capabilities */
-#define SK_LSPEED_CAP_AUTO (1<<0) /* Automatic resolution */
-#define SK_LSPEED_CAP_10MBPS (1<<1) /* 10 Mbps */
-#define SK_LSPEED_CAP_100MBPS (1<<2) /* 100 Mbps */
-#define SK_LSPEED_CAP_1000MBPS (1<<3) /* 1000 Mbps */
-#define SK_LSPEED_CAP_INDETERMINATED (1<<4) /* indeterminated */
-
-/* Link Speed Parameter */
-#define SK_LSPEED_AUTO 1 /* Automatic resolution */
-#define SK_LSPEED_10MBPS 2 /* 10 Mbps */
-#define SK_LSPEED_100MBPS 3 /* 100 Mbps */
-#define SK_LSPEED_1000MBPS 4 /* 1000 Mbps */
-#define SK_LSPEED_INDETERMINATED 5 /* indeterminated */
-
-/* Link Speed Current State */
-#define SK_LSPEED_STAT_UNKNOWN 1
-#define SK_LSPEED_STAT_10MBPS 2
-#define SK_LSPEED_STAT_100MBPS 3
-#define SK_LSPEED_STAT_1000MBPS 4
-#define SK_LSPEED_STAT_INDETERMINATED 5
-
-
-/* Link Capability Parameter */
-#define SK_LMODE_CAP_HALF (1<<0) /* Half Duplex Mode */
-#define SK_LMODE_CAP_FULL (1<<1) /* Full Duplex Mode */
-#define SK_LMODE_CAP_AUTOHALF (1<<2) /* AutoHalf Duplex Mode */
-#define SK_LMODE_CAP_AUTOFULL (1<<3) /* AutoFull Duplex Mode */
-#define SK_LMODE_CAP_INDETERMINATED (1<<4) /* indeterminated */
-
-/* Link Mode Current State */
-#define SK_LMODE_STAT_UNKNOWN 1 /* Unknown Duplex Mode */
-#define SK_LMODE_STAT_HALF 2 /* Half Duplex Mode */
-#define SK_LMODE_STAT_FULL 3 /* Full Duplex Mode */
-#define SK_LMODE_STAT_AUTOHALF 4 /* Half Duplex Mode obtained by Auto-Neg */
-#define SK_LMODE_STAT_AUTOFULL 5 /* Full Duplex Mode obtained by Auto-Neg */
-#define SK_LMODE_STAT_INDETERMINATED 6 /* indeterminated */
-
-/* Flow Control Mode Parameter (and capabilities) */
-#define SK_FLOW_MODE_NONE 1 /* No Flow-Control */
-#define SK_FLOW_MODE_LOC_SEND 2 /* Local station sends PAUSE */
-#define SK_FLOW_MODE_SYMMETRIC 3 /* Both stations may send PAUSE */
-#define SK_FLOW_MODE_SYM_OR_REM 4 /* Both stations may send PAUSE or
- * just the remote station may send PAUSE
- */
-#define SK_FLOW_MODE_INDETERMINATED 5 /* indeterminated */
-
-/* Flow Control Status Parameter */
-#define SK_FLOW_STAT_NONE 1 /* No Flow Control */
-#define SK_FLOW_STAT_REM_SEND 2 /* Remote Station sends PAUSE */
-#define SK_FLOW_STAT_LOC_SEND 3 /* Local station sends PAUSE */
-#define SK_FLOW_STAT_SYMMETRIC 4 /* Both station may send PAUSE */
-#define SK_FLOW_STAT_INDETERMINATED 5 /* indeterminated */
-
-/* Master/Slave Mode Capabilities */
-#define SK_MS_CAP_AUTO (1<<0) /* Automatic resolution */
-#define SK_MS_CAP_MASTER (1<<1) /* This station is master */
-#define SK_MS_CAP_SLAVE (1<<2) /* This station is slave */
-#define SK_MS_CAP_INDETERMINATED (1<<3) /* indeterminated */
-
-/* Set Master/Slave Mode Parameter (and capabilities) */
-#define SK_MS_MODE_AUTO 1 /* Automatic resolution */
-#define SK_MS_MODE_MASTER 2 /* This station is master */
-#define SK_MS_MODE_SLAVE 3 /* This station is slave */
-#define SK_MS_MODE_INDETERMINATED 4 /* indeterminated */
-
-/* Master/Slave Status Parameter */
-#define SK_MS_STAT_UNSET 1 /* The M/S status is not set */
-#define SK_MS_STAT_MASTER 2 /* This station is Master */
-#define SK_MS_STAT_SLAVE 3 /* This station is Dlave */
-#define SK_MS_STAT_FAULT 4 /* M/S resolution failed */
-#define SK_MS_STAT_INDETERMINATED 5 /* indeterminated */
-
-/* parameter 'Mode' when calling SkXmSetRxCmd() */
-#define SK_STRIP_FCS_ON (1<<0) /* Enable FCS stripping of Rx frames */
-#define SK_STRIP_FCS_OFF (1<<1) /* Disable FCS stripping of Rx frames */
-#define SK_STRIP_PAD_ON (1<<2) /* Enable pad byte stripping of Rx fr */
-#define SK_STRIP_PAD_OFF (1<<3) /* Disable pad byte stripping of Rx fr */
-#define SK_LENERR_OK_ON (1<<4) /* Don't chk fr for in range len error */
-#define SK_LENERR_OK_OFF (1<<5) /* Check frames for in range len error */
-#define SK_BIG_PK_OK_ON (1<<6) /* Don't set Rx Error bit for big frames */
-#define SK_BIG_PK_OK_OFF (1<<7) /* Set Rx Error bit for big frames */
-#define SK_SELF_RX_ON (1<<8) /* Enable Rx of own packets */
-#define SK_SELF_RX_OFF (1<<9) /* Disable Rx of own packets */
-
-/* parameter 'Para' when calling SkMacSetRxTxEn() */
-#define SK_MAC_LOOPB_ON (1<<0) /* Enable MAC Loopback Mode */
-#define SK_MAC_LOOPB_OFF (1<<1) /* Disable MAC Loopback Mode */
-#define SK_PHY_LOOPB_ON (1<<2) /* Enable PHY Loopback Mode */
-#define SK_PHY_LOOPB_OFF (1<<3) /* Disable PHY Loopback Mode */
-#define SK_PHY_FULLD_ON (1<<4) /* Enable GMII Full Duplex */
-#define SK_PHY_FULLD_OFF (1<<5) /* Disable GMII Full Duplex */
-
-/* States of PState */
-#define SK_PRT_RESET 0 /* the port is reset */
-#define SK_PRT_STOP 1 /* the port is stopped (similar to SW reset) */
-#define SK_PRT_INIT 2 /* the port is initialized */
-#define SK_PRT_RUN 3 /* the port has an active link */
-
-/* Default receive frame limit for Workaround of XMAC Errata */
-#define SK_DEF_RX_WA_LIM SK_CONSTU64(100)
-
-/* Link Partner Status */
-#define SK_LIPA_UNKNOWN 0 /* Link partner is in unknown state */
-#define SK_LIPA_MANUAL 1 /* Link partner is in detected manual state */
-#define SK_LIPA_AUTO 2 /* Link partner is in auto-negotiation state */
-
-/* Maximum Restarts before restart is ignored (3Com WA) */
-#define SK_MAX_LRESTART 3 /* Max. 3 times the link is restarted */
-
-/* Max. Auto-neg. timeouts before link detection in sense mode is reset */
-#define SK_MAX_ANEG_TO 10 /* Max. 10 times the sense mode is reset */
-
-/* structures *****************************************************************/
-
-/*
- * MAC specific functions
- */
-typedef struct s_GeMacFunc {
- int (*pFnMacUpdateStats)(SK_AC *pAC, SK_IOC IoC, unsigned int Port);
- int (*pFnMacStatistic)(SK_AC *pAC, SK_IOC IoC, unsigned int Port,
- SK_U16 StatAddr, SK_U32 *pVal);
- int (*pFnMacResetCounter)(SK_AC *pAC, SK_IOC IoC, unsigned int Port);
- int (*pFnMacOverflow)(SK_AC *pAC, SK_IOC IoC, unsigned int Port,
- SK_U16 IStatus, SK_U64 *pVal);
-} SK_GEMACFUNC;
-
-/*
- * Port Structure
- */
-typedef struct s_GePort {
-#ifndef SK_DIAG
- SK_TIMER PWaTimer; /* Workaround Timer */
- SK_TIMER HalfDupChkTimer;
-#endif /* SK_DIAG */
- SK_U32 PPrevShorts; /* Previous short Counter checking */
- SK_U32 PPrevFcs; /* Previous FCS Error Counter checking */
- SK_U64 PPrevRx; /* Previous RxOk Counter checking */
- SK_U64 PRxLim; /* Previous RxOk Counter checking */
- SK_U64 LastOctets; /* For half duplex hang check */
- int PLinkResCt; /* Link Restart Counter */
- int PAutoNegTimeOut;/* Auto-negotiation timeout current value */
- int PAutoNegTOCt; /* Auto-negotiation Timeout Counter */
- int PRxQSize; /* Port Rx Queue Size in kB */
- int PXSQSize; /* Port Synchronous Transmit Queue Size in kB */
- int PXAQSize; /* Port Asynchronous Transmit Queue Size in kB */
- SK_U32 PRxQRamStart; /* Receive Queue RAM Buffer Start Address */
- SK_U32 PRxQRamEnd; /* Receive Queue RAM Buffer End Address */
- SK_U32 PXsQRamStart; /* Sync Tx Queue RAM Buffer Start Address */
- SK_U32 PXsQRamEnd; /* Sync Tx Queue RAM Buffer End Address */
- SK_U32 PXaQRamStart; /* Async Tx Queue RAM Buffer Start Address */
- SK_U32 PXaQRamEnd; /* Async Tx Queue RAM Buffer End Address */
- SK_U32 PRxOverCnt; /* Receive Overflow Counter */
- int PRxQOff; /* Rx Queue Address Offset */
- int PXsQOff; /* Synchronous Tx Queue Address Offset */
- int PXaQOff; /* Asynchronous Tx Queue Address Offset */
- int PhyType; /* PHY used on this port */
- SK_U16 PhyId1; /* PHY Id1 on this port */
- SK_U16 PhyAddr; /* MDIO/MDC PHY address */
- SK_U16 PIsave; /* Saved Interrupt status word */
- SK_U16 PSsave; /* Saved PHY status word */
- SK_BOOL PHWLinkUp; /* The hardware Link is up (wiring) */
- SK_BOOL PState; /* Is port initialized ? */
- SK_BOOL PLinkBroken; /* Is Link broken ? */
- SK_BOOL PCheckPar; /* Do we check for parity errors ? */
- SK_BOOL HalfDupTimerActive;
- SK_U8 PLinkCap; /* Link Capabilities */
- SK_U8 PLinkModeConf; /* Link Mode configured */
- SK_U8 PLinkMode; /* Link Mode currently used */
- SK_U8 PLinkModeStatus;/* Link Mode Status */
- SK_U8 PLinkSpeedCap; /* Link Speed Capabilities(10/100/1000 Mbps) */
- SK_U8 PLinkSpeed; /* configured Link Speed (10/100/1000 Mbps) */
- SK_U8 PLinkSpeedUsed; /* current Link Speed (10/100/1000 Mbps) */
- SK_U8 PFlowCtrlCap; /* Flow Control Capabilities */
- SK_U8 PFlowCtrlMode; /* Flow Control Mode */
- SK_U8 PFlowCtrlStatus;/* Flow Control Status */
- SK_U8 PMSCap; /* Master/Slave Capabilities */
- SK_U8 PMSMode; /* Master/Slave Mode */
- SK_U8 PMSStatus; /* Master/Slave Status */
- SK_U8 PAutoNegFail; /* Auto-negotiation fail flag */
- SK_U8 PLipaAutoNeg; /* Auto-negotiation possible with Link Partner */
- SK_U8 PCableLen; /* Cable Length */
- SK_U8 PMdiPairLen[4]; /* MDI[0..3] Pair Length */
- SK_U8 PMdiPairSts[4]; /* MDI[0..3] Pair Diagnostic Status */
-} SK_GEPORT;
-
-/*
- * Gigabit Ethernet Initialization Struct
- * (has to be included in the adapter context)
- */
-typedef struct s_GeInit {
- SK_U8 GIPciHwRev; /* PCI HW Revision Number */
- SK_U8 GIChipId; /* Chip Identification Number */
- SK_U8 GIChipRev; /* Chip Revision Number */
- SK_BOOL GIGenesis; /* Genesis adapter ? */
- SK_BOOL GICopperType; /* Copper Type adapter ? */
- SK_BOOL GIPciSlot64; /* 64-bit PCI Slot */
- SK_BOOL GIPciClock66; /* 66 MHz PCI Clock */
- SK_BOOL GIVauxAvail; /* VAUX available (YUKON) */
- SK_BOOL GIYukon32Bit; /* 32-Bit YUKON adapter */
- SK_BOOL GIYukonLite; /* YUKON-Lite chip */
- int GIMacsFound; /* Number of MACs found on this adapter */
- int GIMacType; /* MAC Type used on this adapter */
- int GIHstClkFact; /* Host Clock Factor (62.5 / HstClk * 100) */
- int GIPortUsage; /* Driver Port Usage */
- int GILevel; /* Initialization Level completed */
- int GIRamSize; /* The RAM size of the adapter in kB */
- int GIWolOffs; /* WOL Register Offset (HW-Bug in Rev. A) */
- SK_U32 GIRamOffs; /* RAM Address Offset for addr calculation */
- SK_U32 GIPollTimerVal; /* Descr. Poll Timer Init Val (HstClk ticks) */
- SK_GEPORT GP[SK_MAX_MACS];/* Port Dependent Information */
- SK_GEMACFUNC GIFunc; /* MAC depedent functions */
-} SK_GEINIT;
-
-/*
- * Error numbers and messages for skxmac2.c and skgeinit.c
- */
-#define SKERR_HWI_E001 (SK_ERRBASE_HWINIT)
-#define SKERR_HWI_E001MSG "SkXmClrExactAddr() has got illegal parameters"
-#define SKERR_HWI_E002 (SKERR_HWI_E001+1)
-#define SKERR_HWI_E002MSG "SkGeInit(): Level 1 call missing"
-#define SKERR_HWI_E003 (SKERR_HWI_E002+1)
-#define SKERR_HWI_E003MSG "SkGeInit() called with illegal init Level"
-#define SKERR_HWI_E004 (SKERR_HWI_E003+1)
-#define SKERR_HWI_E004MSG "SkGeInitPort(): Queue Size illegal configured"
-#define SKERR_HWI_E005 (SKERR_HWI_E004+1)
-#define SKERR_HWI_E005MSG "SkGeInitPort(): cannot init running ports"
-#define SKERR_HWI_E006 (SKERR_HWI_E005+1)
-#define SKERR_HWI_E006MSG "SkGeMacInit(): PState does not match HW state"
-#define SKERR_HWI_E007 (SKERR_HWI_E006+1)
-#define SKERR_HWI_E007MSG "SkXmInitDupMd() called with invalid Dup Mode"
-#define SKERR_HWI_E008 (SKERR_HWI_E007+1)
-#define SKERR_HWI_E008MSG "SkXmSetRxCmd() called with invalid Mode"
-#define SKERR_HWI_E009 (SKERR_HWI_E008+1)
-#define SKERR_HWI_E009MSG "SkGeCfgSync() called although PXSQSize zero"
-#define SKERR_HWI_E010 (SKERR_HWI_E009+1)
-#define SKERR_HWI_E010MSG "SkGeCfgSync() called with invalid parameters"
-#define SKERR_HWI_E011 (SKERR_HWI_E010+1)
-#define SKERR_HWI_E011MSG "SkGeInitPort(): Receive Queue Size too small"
-#define SKERR_HWI_E012 (SKERR_HWI_E011+1)
-#define SKERR_HWI_E012MSG "SkGeInitPort(): invalid Queue Size specified"
-#define SKERR_HWI_E013 (SKERR_HWI_E012+1)
-#define SKERR_HWI_E013MSG "SkGeInitPort(): cfg changed for running queue"
-#define SKERR_HWI_E014 (SKERR_HWI_E013+1)
-#define SKERR_HWI_E014MSG "SkGeInitPort(): unknown GIPortUsage specified"
-#define SKERR_HWI_E015 (SKERR_HWI_E014+1)
-#define SKERR_HWI_E015MSG "Illegal Link mode parameter"
-#define SKERR_HWI_E016 (SKERR_HWI_E015+1)
-#define SKERR_HWI_E016MSG "Illegal Flow control mode parameter"
-#define SKERR_HWI_E017 (SKERR_HWI_E016+1)
-#define SKERR_HWI_E017MSG "Illegal value specified for GIPollTimerVal"
-#define SKERR_HWI_E018 (SKERR_HWI_E017+1)
-#define SKERR_HWI_E018MSG "FATAL: SkGeStopPort() does not terminate (Tx)"
-#define SKERR_HWI_E019 (SKERR_HWI_E018+1)
-#define SKERR_HWI_E019MSG "Illegal Speed parameter"
-#define SKERR_HWI_E020 (SKERR_HWI_E019+1)
-#define SKERR_HWI_E020MSG "Illegal Master/Slave parameter"
-#define SKERR_HWI_E021 (SKERR_HWI_E020+1)
-#define SKERR_HWI_E021MSG "MacUpdateStats(): cannot update statistic counter"
-#define SKERR_HWI_E022 (SKERR_HWI_E021+1)
-#define SKERR_HWI_E022MSG "MacStatistic(): illegal statistic base address"
-#define SKERR_HWI_E023 (SKERR_HWI_E022+1)
-#define SKERR_HWI_E023MSG "SkGeInitPort(): Transmit Queue Size too small"
-#define SKERR_HWI_E024 (SKERR_HWI_E023+1)
-#define SKERR_HWI_E024MSG "FATAL: SkGeStopPort() does not terminate (Rx)"
-#define SKERR_HWI_E025 (SKERR_HWI_E024+1)
-#define SKERR_HWI_E025MSG ""
-
-/* function prototypes ********************************************************/
-
-#ifndef SK_KR_PROTO
-
-/*
- * public functions in skgeinit.c
- */
-extern void SkGePollRxD(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL PollRxD);
-
-extern void SkGePollTxD(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL PollTxD);
-
-extern void SkGeYellowLED(
- SK_AC *pAC,
- SK_IOC IoC,
- int State);
-
-extern int SkGeCfgSync(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_U32 IntTime,
- SK_U32 LimCount,
- int SyncMode);
-
-extern void SkGeLoadLnkSyncCnt(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_U32 CntVal);
-
-extern void SkGeStopPort(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Dir,
- int RstMode);
-
-extern int SkGeInit(
- SK_AC *pAC,
- SK_IOC IoC,
- int Level);
-
-extern void SkGeDeInit(
- SK_AC *pAC,
- SK_IOC IoC);
-
-extern int SkGeInitPort(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkGeXmitLED(
- SK_AC *pAC,
- SK_IOC IoC,
- int Led,
- int Mode);
-
-extern void SkGeInitRamIface(
- SK_AC *pAC,
- SK_IOC IoC);
-
-extern int SkGeInitAssignRamToQueues(
- SK_AC *pAC,
- int ActivePort,
- SK_BOOL DualNet);
-
-/*
- * public functions in skxmac2.c
- */
-extern void SkMacRxTxDisable(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacSoftRst(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacHardRst(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkXmInitMac(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkGmInitMac(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacInitPhy(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL DoLoop);
-
-extern void SkMacIrqDisable(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacFlushTxFifo(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacFlushRxFifo(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacIrq(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern int SkMacAutoNegDone(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacAutoNegLipaPhy(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_U16 IStatus);
-
-extern void SkMacSetRxTxEn(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Para);
-
-extern int SkMacRxTxEnable(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkMacPromiscMode(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL Enable);
-
-extern void SkMacHashing(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL Enable);
-
-extern void SkXmPhyRead(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Addr,
- SK_U16 *pVal);
-
-extern void SkXmPhyWrite(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Addr,
- SK_U16 Val);
-
-extern void SkGmPhyRead(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Addr,
- SK_U16 *pVal);
-
-extern void SkGmPhyWrite(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Addr,
- SK_U16 Val);
-
-extern void SkGePhyRead(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Addr,
- SK_U16 *pVal);
-
-extern void SkGePhyWrite(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Addr,
- SK_U16 Val);
-
-extern void SkXmClrExactAddr(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int StartNum,
- int StopNum);
-
-extern void SkXmInitDupMd(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkXmInitPauseMd(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port);
-
-extern void SkXmAutoNegLipaXmac(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_U16 IStatus);
-
-extern int SkXmUpdateStats(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port);
-
-extern int SkGmUpdateStats(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port);
-
-extern int SkXmMacStatistic(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port,
- SK_U16 StatAddr,
- SK_U32 *pVal);
-
-extern int SkGmMacStatistic(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port,
- SK_U16 StatAddr,
- SK_U32 *pVal);
-
-extern int SkXmResetCounter(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port);
-
-extern int SkGmResetCounter(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port);
-
-extern int SkXmOverflowStatus(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port,
- SK_U16 IStatus,
- SK_U64 *pStatus);
-
-extern int SkGmOverflowStatus(
- SK_AC *pAC,
- SK_IOC IoC,
- unsigned int Port,
- SK_U16 MacStatus,
- SK_U64 *pStatus);
-
-extern int SkGmCableDiagStatus(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL StartTest);
-
-#ifdef SK_DIAG
-extern void SkMacSetRxCmd(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- int Mode);
-extern void SkMacCrcGener(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL Enable);
-extern void SkMacTimeStamp(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL Enable);
-extern void SkXmSendCont(
- SK_AC *pAC,
- SK_IOC IoC,
- int Port,
- SK_BOOL Enable);
-#endif /* SK_DIAG */
-
-#else /* SK_KR_PROTO */
-
-/*
- * public functions in skgeinit.c
- */
-extern void SkGePollRxD();
-extern void SkGePollTxD();
-extern void SkGeYellowLED();
-extern int SkGeCfgSync();
-extern void SkGeLoadLnkSyncCnt();
-extern void SkGeStopPort();
-extern int SkGeInit();
-extern void SkGeDeInit();
-extern int SkGeInitPort();
-extern void SkGeXmitLED();
-extern void SkGeInitRamIface();
-extern int SkGeInitAssignRamToQueues();
-
-/*
- * public functions in skxmac2.c
- */
-extern void SkMacRxTxDisable();
-extern void SkMacSoftRst();
-extern void SkMacHardRst();
-extern void SkMacInitPhy();
-extern int SkMacRxTxEnable();
-extern void SkMacPromiscMode();
-extern void SkMacHashing();
-extern void SkMacIrqDisable();
-extern void SkMacFlushTxFifo();
-extern void SkMacFlushRxFifo();
-extern void SkMacIrq();
-extern int SkMacAutoNegDone();
-extern void SkMacAutoNegLipaPhy();
-extern void SkMacSetRxTxEn();
-extern void SkGePhyRead();
-extern void SkGePhyWrite();
-extern void SkXmInitMac();
-extern void SkXmPhyRead();
-extern void SkXmPhyWrite();
-extern void SkGmInitMac();
-extern void SkGmPhyRead();
-extern void SkGmPhyWrite();
-extern void SkXmClrExactAddr();
-extern void SkXmInitDupMd();
-extern void SkXmInitPauseMd();
-extern void SkXmAutoNegLipaXmac();
-extern int SkXmUpdateStats();
-extern int SkGmUpdateStats();
-extern int SkXmMacStatistic();
-extern int SkGmMacStatistic();
-extern int SkXmResetCounter();
-extern int SkGmResetCounter();
-extern int SkXmOverflowStatus();
-extern int SkGmOverflowStatus();
-extern int SkGmCableDiagStatus();
-
-#ifdef SK_DIAG
-extern void SkMacSetRxCmd();
-extern void SkMacCrcGener();
-extern void SkMacTimeStamp();
-extern void SkXmSendCont();
-#endif /* SK_DIAG */
-
-#endif /* SK_KR_PROTO */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __INC_SKGEINIT_H_ */
+/******************************************************************************
+ *
+ * Name: skgeinit.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Structures and prototypes for the GE Init Module
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgeinit.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.75 2003/02/05 13:36:39 rschmidt
+ * Added define SK_FACT_78 for YUKON's Host Clock of 78.12 MHz
+ * Editorial changes
+ *
+ * Revision 1.74 2003/01/28 09:39:16 rschmidt
+ * Added entry GIYukonLite in s_GeInit structure
+ * Editorial changes
+ *
+ * Revision 1.73 2002/11/15 12:47:25 rschmidt
+ * Replaced error message SKERR_HWI_E024 for Cable Diagnostic with
+ * Rx queue error in SkGeStopPort().
+ *
+ * Revision 1.72 2002/11/12 17:08:35 rschmidt
+ * Added entries for Cable Diagnostic to Port structure
+ * Added entries GIPciSlot64 and GIPciClock66 in s_GeInit structure
+ * Added error message for Cable Diagnostic
+ * Added prototypes for SkGmCableDiagStatus()
+ * Editorial changes
+ *
+ * Revision 1.71 2002/10/21 11:26:10 mkarl
+ * Changed interface of SkGeInitAssignRamToQueues().
+ *
+ * Revision 1.70 2002/10/14 08:21:32 rschmidt
+ * Changed type of GICopperType, GIVauxAvail to SK_BOOL
+ * Added entry PRxOverCnt to Port structure
+ * Added entry GIYukon32Bit in s_GeInit structure
+ * Editorial changes
+ *
+ * Revision 1.69 2002/10/09 16:57:15 mkarl
+ * Added some constants and macros for SkGeInitAssignRamToQueues().
+ *
+ * Revision 1.68 2002/09/12 08:58:51 rwahl
+ * Retrieve counters needed for XMAC errata workarounds directly because
+ * PNMI returns corrected counter values (e.g. #10620).
+ *
+ * Revision 1.67 2002/08/16 14:40:30 rschmidt
+ * Added entries GIGenesis and GICopperType in s_GeInit structure
+ * Added prototypes for SkMacHashing()
+ * Editorial changes
+ *
+ * Revision 1.66 2002/08/12 13:27:21 rschmidt
+ * Added defines for Link speed capabilities
+ * Added entry PLinkSpeedCap to Port structure
+ * Added entry GIVauxAvail in s_GeInit structure
+ * Added prototypes for SkMacPromiscMode()
+ * Editorial changes
+ *
+ * Revision 1.65 2002/08/08 15:46:18 rschmidt
+ * Added define SK_PHY_ACC_TO for PHY access timeout
+ * Added define SK_XM_RX_HI_WM for XMAC Rx High Watermark
+ * Added define SK_MIN_TXQ_SIZE for Min RAM Buffer Tx Queue Size
+ * Added entry PhyId1 to Port structure
+ *
+ * Revision 1.64 2002/07/23 16:02:56 rschmidt
+ * Added entry GIWolOffs in s_GeInit struct (HW-Bug in YUKON 1st rev.)
+ * Added prototypes for: SkGePhyRead(), SkGePhyWrite()
+ *
+ * Revision 1.63 2002/07/18 08:17:38 rwahl
+ * Corrected definitions for SK_LSPEED_xxx & SK_LSPEED_STAT_xxx.
+ *
+ * Revision 1.62 2002/07/17 18:21:55 rwahl
+ * Added SK_LSPEED_INDETERMINATED define.
+ *
+ * Revision 1.61 2002/07/17 17:16:03 rwahl
+ * - MacType now member of GIni struct.
+ * - Struct alignment to 32bit.
+ * - Editorial change.
+ *
+ * Revision 1.60 2002/07/15 18:23:39 rwahl
+ * Added GeMacFunc to GE Init structure.
+ * Added prototypes for SkXmUpdateStats(), SkGmUpdateStats(),
+ * SkXmMacStatistic(), SkGmMacStatistic(), SkXmResetCounter(),
+ * SkGmResetCounter(), SkXmOverflowStatus(), SkGmOverflowStatus().
+ * Added defines for current link speed state.
+ * Added ERRMSG defintions for MacUpdateStat() & MacStatistics().
+ *
+ * Revision 1.59 2002/07/15 15:40:22 rschmidt
+ * Added entry PLinkSpeedUsed to Port structure
+ * Editorial changes
+ *
+ * Revision 1.58 2002/06/10 09:36:30 rschmidt
+ * Editorial changes.
+ *
+ * Revision 1.57 2002/06/05 08:18:00 rschmidt
+ * Corrected alignment in Port Structure
+ * Added new prototypes for GMAC
+ * Editorial changes
+ *
+ * Revision 1.56 2002/04/25 11:38:12 rschmidt
+ * Added defines for Link speed values
+ * Added defines for Loopback parameters for MAC and PHY
+ * Removed entry PRxCmd from Port structure
+ * Added entry PLinkSpeed to Port structure
+ * Added entries GIChipId and GIChipRev to GE Init structure
+ * Removed entry GIAnyPortAct from GE Init structure
+ * Added prototypes for: SkMacInit(), SkMacInitPhy(),
+ * SkMacRxTxDisable(), SkMacSoftRst(), SkMacHardRst(), SkMacIrq(),
+ * SkMacIrqDisable(), SkMacFlushTxFifo(), SkMacFlushRxFifo(),
+ * SkMacAutoNegDone(), SkMacAutoNegLipaPhy(), SkMacSetRxTxEn(),
+ * SkXmPhyRead(), SkXmPhyRead(), SkGmPhyWrite(), SkGmPhyWrite();
+ * Removed prototypes for static functions in SkXmac2.c
+ * Editorial changes
+ *
+ * Revision 1.55 2002/02/26 15:24:53 rwahl
+ * Fix: no link with manual configuration (#10673). The previous fix for
+ * #10639 was removed. So for RLMT mode = CLS the RLMT may switch to
+ * misconfigured port. It should not occur for the other RLMT modes.
+ *
+ * Revision 1.54 2002/01/18 16:52:52 rwahl
+ * Editorial corrections.
+ *
+ * Revision 1.53 2001/11/20 09:19:58 rwahl
+ * Reworked bugfix #10639 (no dependency to RLMT mode).
+ *
+ * Revision 1.52 2001/10/26 07:52:23 afischer
+ * Port switching bug in `check local link` mode
+ *
+ * Revision 1.51 2001/02/09 12:26:38 cgoos
+ * Inserted #ifdef DIAG for half duplex workaround timer.
+ *
+ * Revision 1.50 2001/02/07 07:56:40 rassmann
+ * Corrected copyright.
+ *
+ * Revision 1.49 2001/01/31 15:32:18 gklug
+ * fix: problem with autosensing an SR8800 switch
+ * add: counter for autoneg timeouts
+ *
+ * Revision 1.48 2000/11/09 11:30:10 rassmann
+ * WA: Waiting after releasing reset until BCom chip is accessible.
+ *
+ * Revision 1.47 2000/10/18 12:22:40 cgoos
+ * Added workaround for half duplex hangup.
+ *
+ * Revision 1.46 2000/08/10 11:28:00 rassmann
+ * Editorial changes.
+ * Preserving 32-bit alignment in structs for the adapter context.
+ *
+ * Revision 1.45 1999/11/22 13:56:19 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.44 1999/10/26 07:34:15 malthoff
+ * The define SK_LNK_ON has been lost in v1.41.
+ *
+ * Revision 1.43 1999/10/06 09:30:16 cgoos
+ * Changed SK_XM_THR_JUMBO.
+ *
+ * Revision 1.42 1999/09/16 12:58:26 cgoos
+ * Changed SK_LED_STANDY macro to be independent of HW link sync.
+ *
+ * Revision 1.41 1999/07/30 06:56:14 malthoff
+ * Correct comment for SK_MS_STAT_UNSET.
+ *
+ * Revision 1.40 1999/05/27 13:38:46 cgoos
+ * Added SK_BMU_TX_WM.
+ * Made SK_BMU_TX_WM and SK_BMU_RX_WM user-definable.
+ * Changed XMAC Tx treshold to max. values.
+ *
+ * Revision 1.39 1999/05/20 14:35:26 malthoff
+ * Remove prototypes for SkGeLinkLED().
+ *
+ * Revision 1.38 1999/05/19 11:59:12 cgoos
+ * Added SK_MS_CAP_INDETERMINATED define.
+ *
+ * Revision 1.37 1999/05/19 07:32:33 cgoos
+ * Changes for 1000Base-T.
+ * LED-defines for HWAC_LINK_LED macro.
+ *
+ * Revision 1.36 1999/04/08 14:00:24 gklug
+ * add:Port struct field PLinkResCt
+ *
+ * Revision 1.35 1999/03/25 07:43:07 malthoff
+ * Add error string for SKERR_HWI_E018MSG.
+ *
+ * Revision 1.34 1999/03/12 16:25:57 malthoff
+ * Remove PPollRxD and PPollTxD.
+ * Add SKERR_HWI_E017MSG. and SK_DPOLL_MAX.
+ *
+ * Revision 1.33 1999/03/12 13:34:41 malthoff
+ * Add Autonegotiation error codes.
+ * Change defines for parameter Mode in SkXmSetRxCmd().
+ * Replace __STDC__ by SK_KR_PROTO.
+ *
+ * Revision 1.32 1999/01/25 14:40:20 mhaveman
+ * Added new return states for the virtual management port if multiple
+ * ports are active but differently configured.
+ *
+ * Revision 1.31 1998/12/11 15:17:02 gklug
+ * add: Link partnet autoneg states : Unknown Manual and Auto-negotiation
+ *
+ * Revision 1.30 1998/12/07 12:17:04 gklug
+ * add: Link Partner auto-negotiation flag
+ *
+ * Revision 1.29 1998/12/01 10:54:42 gklug
+ * add: variables for XMAC Errata
+ *
+ * Revision 1.28 1998/12/01 10:14:15 gklug
+ * add: PIsave saves the Interrupt status word
+ *
+ * Revision 1.27 1998/11/26 15:24:52 mhaveman
+ * Added link status states SK_LMODE_STAT_AUTOHALF and
+ * SK_LMODE_STAT_AUTOFULL which are used by PNMI.
+ *
+ * Revision 1.26 1998/11/26 14:53:01 gklug
+ * add:autoNeg Timeout variable
+ *
+ * Revision 1.25 1998/11/26 08:58:50 gklug
+ * add: Link Mode configuration (AUTO Sense mode)
+ *
+ * Revision 1.24 1998/11/24 13:30:27 gklug
+ * add: PCheckPar to port struct
+ *
+ * Revision 1.23 1998/11/18 13:23:26 malthoff
+ * Add SK_PKT_TO_MAX.
+ *
+ * Revision 1.22 1998/11/18 13:19:54 gklug
+ * add: PPrevShorts and PLinkBroken to port struct for WA XMAC Errata #C1
+ *
+ * Revision 1.21 1998/10/26 08:02:57 malthoff
+ * Add GIRamOffs.
+ *
+ * Revision 1.20 1998/10/19 07:28:37 malthoff
+ * Add prototype for SkGeInitRamIface().
+ *
+ * Revision 1.19 1998/10/14 14:47:48 malthoff
+ * SK_TIMER should not be defined for Diagnostics.
+ * Add SKERR_HWI_E015MSG and SKERR_HWI_E016MSG.
+ *
+ * Revision 1.18 1998/10/14 14:00:03 gklug
+ * add: timer to port struct for workaround of Errata #2
+ *
+ * Revision 1.17 1998/10/14 11:23:09 malthoff
+ * Add prototype for SkXmAutoNegDone().
+ * Fix SkXmSetRxCmd() prototype statement.
+ *
+ * Revision 1.16 1998/10/14 05:42:29 gklug
+ * add: HWLinkUp flag to Port struct
+ *
+ * Revision 1.15 1998/10/09 08:26:33 malthoff
+ * Rename SK_RB_ULPP_B to SK_RB_LLPP_B.
+ *
+ * Revision 1.14 1998/10/09 07:11:13 malthoff
+ * bug fix: SK_FACT_53 is 85 not 117.
+ * Rework time out init values.
+ * Add GIPortUsage and corresponding defines.
+ * Add some error log messages.
+ *
+ * Revision 1.13 1998/10/06 14:13:14 malthoff
+ * Add prototype for SkGeLoadLnkSyncCnt().
+ *
+ * Revision 1.12 1998/10/05 11:29:53 malthoff
+ * bug fix: A comment was not closed.
+ *
+ * Revision 1.11 1998/10/05 08:01:59 malthoff
+ * Add default Timeout- Threshold- and
+ * Watermark constants. Add QRam start and end
+ * variables. Also add vars to store the polling
+ * mode and receive command. Add new Error Log
+ * Messages and function prototypes.
+ *
+ * Revision 1.10 1998/09/28 13:34:48 malthoff
+ * Add mode bits for LED functions.
+ * Move Autoneg and Flow Ctrl bits from shgesirq.h
+ * Add the required Error Log Entries
+ * and Function Prototypes.
+ *
+ * Revision 1.9 1998/09/16 14:38:41 malthoff
+ * Rework the SK_LNK_xxx defines.
+ * Add error log message defines.
+ * Add prototypes for skxmac2.c
+ *
+ * Revision 1.8 1998/09/11 05:29:18 gklug
+ * add: init state of a port
+ *
+ * Revision 1.7 1998/09/08 08:35:52 gklug
+ * add: defines of the Init Levels
+ *
+ * Revision 1.6 1998/09/03 13:48:42 gklug
+ * add: Link strati, capabilities to Port struct
+ *
+ * Revision 1.5 1998/09/03 13:30:59 malthoff
+ * Add SK_LNK_BLINK and SK_LNK_PERM.
+ *
+ * Revision 1.4 1998/09/03 09:55:31 malthoff
+ * Add constants for parameters Dir and RstMode
+ * when calling SkGeStopPort().
+ * Rework the prototype section.
+ * Add Queue Address offsets PRxQOff, PXsQOff, and PXaQOff.
+ * Remove Ioc with IoC.
+ *
+ * Revision 1.3 1998/08/19 09:11:54 gklug
+ * fix: struct are removed from c-source (see CCC)
+ * add: typedefs for all structs
+ *
+ * Revision 1.2 1998/07/28 12:38:26 malthoff
+ * The prototypes got the parameter 'IoC'.
+ *
+ * Revision 1.1 1998/07/23 09:50:24 malthoff
+ * Created.
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKGEINIT_H_
+#define __INC_SKGEINIT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* defines ********************************************************************/
+
+/* modifying Link LED behaviour (used with SkGeLinkLED()) */
+#define SK_LNK_OFF LED_OFF
+#define SK_LNK_ON (LED_ON | LED_BLK_OFF | LED_SYNC_OFF)
+#define SK_LNK_BLINK (LED_ON | LED_BLK_ON | LED_SYNC_ON)
+#define SK_LNK_PERM (LED_ON | LED_BLK_OFF | LED_SYNC_ON)
+#define SK_LNK_TST (LED_ON | LED_BLK_ON | LED_SYNC_OFF)
+
+/* parameter 'Mode' when calling SK_HWAC_LINK_LED() */
+#define SK_LED_OFF LED_OFF
+#define SK_LED_ACTIVE (LED_ON | LED_BLK_OFF | LED_SYNC_OFF)
+#define SK_LED_STANDBY (LED_ON | LED_BLK_ON | LED_SYNC_OFF)
+
+/* addressing LED Registers in SkGeXmitLED() */
+#define XMIT_LED_INI 0
+#define XMIT_LED_CNT (RX_LED_VAL - RX_LED_INI)
+#define XMIT_LED_CTRL (RX_LED_CTRL- RX_LED_INI)
+#define XMIT_LED_TST (RX_LED_TST - RX_LED_INI)
+
+/* parameter 'Mode' when calling SkGeXmitLED() */
+#define SK_LED_DIS 0
+#define SK_LED_ENA 1
+#define SK_LED_TST 2
+
+/* Counter and Timer constants, for a host clock of 62.5 MHz */
+#define SK_XMIT_DUR 0x002faf08L /* 50 ms */
+#define SK_BLK_DUR 0x01dcd650L /* 500 ms */
+
+#define SK_DPOLL_DEF 0x00ee6b28L /* 250 ms at 62.5 MHz */
+
+#define SK_DPOLL_MAX 0x00ffffffL /* 268 ms at 62.5 MHz */
+ /* 215 ms at 78.12 MHz */
+
+#define SK_FACT_62 100 /* is given in percent */
+#define SK_FACT_53 85 /* on GENESIS: 53.12 MHz */
+#define SK_FACT_78 125 /* on YUKON: 78.12 MHz */
+
+/* Timeout values */
+#define SK_MAC_TO_53 72 /* MAC arbiter timeout */
+#define SK_PKT_TO_53 0x2000 /* Packet arbiter timeout */
+#define SK_PKT_TO_MAX 0xffff /* Maximum value */
+#define SK_RI_TO_53 36 /* RAM interface timeout */
+
+#define SK_PHY_ACC_TO 600000 /* PHY access timeout */
+
+/* RAM Buffer High Pause Threshold values */
+#define SK_RB_ULPP ( 8 * 1024) /* Upper Level in kB/8 */
+#define SK_RB_LLPP_S (10 * 1024) /* Lower Level for small Queues */
+#define SK_RB_LLPP_B (16 * 1024) /* Lower Level for big Queues */
+
+#ifndef SK_BMU_RX_WM
+#define SK_BMU_RX_WM 0x600 /* BMU Rx Watermark */
+#endif
+#ifndef SK_BMU_TX_WM
+#define SK_BMU_TX_WM 0x600 /* BMU Tx Watermark */
+#endif
+
+/* XMAC II Rx High Watermark */
+#define SK_XM_RX_HI_WM 0x05aa /* 1450 */
+
+/* XMAC II Tx Threshold */
+#define SK_XM_THR_REDL 0x01fb /* .. for redundant link usage */
+#define SK_XM_THR_SL 0x01fb /* .. for single link adapters */
+#define SK_XM_THR_MULL 0x01fb /* .. for multiple link usage */
+#define SK_XM_THR_JUMBO 0x03fc /* .. for jumbo frame usage */
+
+/* values for GIPortUsage */
+#define SK_RED_LINK 1 /* redundant link usage */
+#define SK_MUL_LINK 2 /* multiple link usage */
+#define SK_JUMBO_LINK 3 /* driver uses jumbo frames */
+
+/* Minimum RAM Buffer Rx Queue Size */
+#define SK_MIN_RXQ_SIZE 16 /* 16 kB */
+
+/* Minimum RAM Buffer Tx Queue Size */
+#define SK_MIN_TXQ_SIZE 16 /* 16 kB */
+
+/* Queue Size units */
+#define QZ_UNITS 0x7
+#define QZ_STEP 8
+
+/* Percentage of queue size from whole memory */
+/* 80 % for receive */
+#define RAM_QUOTA_RX 80L
+/* 0% for sync transfer */
+#define RAM_QUOTA_SYNC 0L
+/* the rest (20%) is taken for async transfer */
+
+/* Get the rounded queue size in Bytes in 8k steps */
+#define ROUND_QUEUE_SIZE(SizeInBytes) \
+ ((((unsigned long) (SizeInBytes) + (QZ_STEP*1024L)-1) / 1024) & \
+ ~(QZ_STEP-1))
+
+/* Get the rounded queue size in KBytes in 8k steps */
+#define ROUND_QUEUE_SIZE_KB(Kilobytes) \
+ ROUND_QUEUE_SIZE((Kilobytes) * 1024L)
+
+/* Types of RAM Buffer Queues */
+#define SK_RX_SRAM_Q 1 /* small receive queue */
+#define SK_RX_BRAM_Q 2 /* big receive queue */
+#define SK_TX_RAM_Q 3 /* small or big transmit queue */
+
+/* parameter 'Dir' when calling SkGeStopPort() */
+#define SK_STOP_TX 1 /* Stops the transmit path, resets the XMAC */
+#define SK_STOP_RX 2 /* Stops the receive path */
+#define SK_STOP_ALL 3 /* Stops Rx and Tx path, resets the XMAC */
+
+/* parameter 'RstMode' when calling SkGeStopPort() */
+#define SK_SOFT_RST 1 /* perform a software reset */
+#define SK_HARD_RST 2 /* perform a hardware reset */
+
+/* Init Levels */
+#define SK_INIT_DATA 0 /* Init level 0: init data structures */
+#define SK_INIT_IO 1 /* Init level 1: init with IOs */
+#define SK_INIT_RUN 2 /* Init level 2: init for run time */
+
+/* Link Mode Parameter */
+#define SK_LMODE_HALF 1 /* Half Duplex Mode */
+#define SK_LMODE_FULL 2 /* Full Duplex Mode */
+#define SK_LMODE_AUTOHALF 3 /* AutoHalf Duplex Mode */
+#define SK_LMODE_AUTOFULL 4 /* AutoFull Duplex Mode */
+#define SK_LMODE_AUTOBOTH 5 /* AutoBoth Duplex Mode */
+#define SK_LMODE_AUTOSENSE 6 /* configured mode auto sensing */
+#define SK_LMODE_INDETERMINATED 7 /* indeterminated */
+
+/* Auto-negotiation timeout in 100ms granularity */
+#define SK_AND_MAX_TO 6 /* Wait 600 msec before link comes up */
+
+/* Auto-negotiation error codes */
+#define SK_AND_OK 0 /* no error */
+#define SK_AND_OTHER 1 /* other error than below */
+#define SK_AND_DUP_CAP 2 /* Duplex capabilities error */
+
+
+/* Link Speed Capabilities */
+#define SK_LSPEED_CAP_AUTO (1<<0) /* Automatic resolution */
+#define SK_LSPEED_CAP_10MBPS (1<<1) /* 10 Mbps */
+#define SK_LSPEED_CAP_100MBPS (1<<2) /* 100 Mbps */
+#define SK_LSPEED_CAP_1000MBPS (1<<3) /* 1000 Mbps */
+#define SK_LSPEED_CAP_INDETERMINATED (1<<4) /* indeterminated */
+
+/* Link Speed Parameter */
+#define SK_LSPEED_AUTO 1 /* Automatic resolution */
+#define SK_LSPEED_10MBPS 2 /* 10 Mbps */
+#define SK_LSPEED_100MBPS 3 /* 100 Mbps */
+#define SK_LSPEED_1000MBPS 4 /* 1000 Mbps */
+#define SK_LSPEED_INDETERMINATED 5 /* indeterminated */
+
+/* Link Speed Current State */
+#define SK_LSPEED_STAT_UNKNOWN 1
+#define SK_LSPEED_STAT_10MBPS 2
+#define SK_LSPEED_STAT_100MBPS 3
+#define SK_LSPEED_STAT_1000MBPS 4
+#define SK_LSPEED_STAT_INDETERMINATED 5
+
+
+/* Link Capability Parameter */
+#define SK_LMODE_CAP_HALF (1<<0) /* Half Duplex Mode */
+#define SK_LMODE_CAP_FULL (1<<1) /* Full Duplex Mode */
+#define SK_LMODE_CAP_AUTOHALF (1<<2) /* AutoHalf Duplex Mode */
+#define SK_LMODE_CAP_AUTOFULL (1<<3) /* AutoFull Duplex Mode */
+#define SK_LMODE_CAP_INDETERMINATED (1<<4) /* indeterminated */
+
+/* Link Mode Current State */
+#define SK_LMODE_STAT_UNKNOWN 1 /* Unknown Duplex Mode */
+#define SK_LMODE_STAT_HALF 2 /* Half Duplex Mode */
+#define SK_LMODE_STAT_FULL 3 /* Full Duplex Mode */
+#define SK_LMODE_STAT_AUTOHALF 4 /* Half Duplex Mode obtained by Auto-Neg */
+#define SK_LMODE_STAT_AUTOFULL 5 /* Full Duplex Mode obtained by Auto-Neg */
+#define SK_LMODE_STAT_INDETERMINATED 6 /* indeterminated */
+
+/* Flow Control Mode Parameter (and capabilities) */
+#define SK_FLOW_MODE_NONE 1 /* No Flow-Control */
+#define SK_FLOW_MODE_LOC_SEND 2 /* Local station sends PAUSE */
+#define SK_FLOW_MODE_SYMMETRIC 3 /* Both stations may send PAUSE */
+#define SK_FLOW_MODE_SYM_OR_REM 4 /* Both stations may send PAUSE or
+ * just the remote station may send PAUSE
+ */
+#define SK_FLOW_MODE_INDETERMINATED 5 /* indeterminated */
+
+/* Flow Control Status Parameter */
+#define SK_FLOW_STAT_NONE 1 /* No Flow Control */
+#define SK_FLOW_STAT_REM_SEND 2 /* Remote Station sends PAUSE */
+#define SK_FLOW_STAT_LOC_SEND 3 /* Local station sends PAUSE */
+#define SK_FLOW_STAT_SYMMETRIC 4 /* Both station may send PAUSE */
+#define SK_FLOW_STAT_INDETERMINATED 5 /* indeterminated */
+
+/* Master/Slave Mode Capabilities */
+#define SK_MS_CAP_AUTO (1<<0) /* Automatic resolution */
+#define SK_MS_CAP_MASTER (1<<1) /* This station is master */
+#define SK_MS_CAP_SLAVE (1<<2) /* This station is slave */
+#define SK_MS_CAP_INDETERMINATED (1<<3) /* indeterminated */
+
+/* Set Master/Slave Mode Parameter (and capabilities) */
+#define SK_MS_MODE_AUTO 1 /* Automatic resolution */
+#define SK_MS_MODE_MASTER 2 /* This station is master */
+#define SK_MS_MODE_SLAVE 3 /* This station is slave */
+#define SK_MS_MODE_INDETERMINATED 4 /* indeterminated */
+
+/* Master/Slave Status Parameter */
+#define SK_MS_STAT_UNSET 1 /* The M/S status is not set */
+#define SK_MS_STAT_MASTER 2 /* This station is Master */
+#define SK_MS_STAT_SLAVE 3 /* This station is Dlave */
+#define SK_MS_STAT_FAULT 4 /* M/S resolution failed */
+#define SK_MS_STAT_INDETERMINATED 5 /* indeterminated */
+
+/* parameter 'Mode' when calling SkXmSetRxCmd() */
+#define SK_STRIP_FCS_ON (1<<0) /* Enable FCS stripping of Rx frames */
+#define SK_STRIP_FCS_OFF (1<<1) /* Disable FCS stripping of Rx frames */
+#define SK_STRIP_PAD_ON (1<<2) /* Enable pad byte stripping of Rx fr */
+#define SK_STRIP_PAD_OFF (1<<3) /* Disable pad byte stripping of Rx fr */
+#define SK_LENERR_OK_ON (1<<4) /* Don't chk fr for in range len error */
+#define SK_LENERR_OK_OFF (1<<5) /* Check frames for in range len error */
+#define SK_BIG_PK_OK_ON (1<<6) /* Don't set Rx Error bit for big frames */
+#define SK_BIG_PK_OK_OFF (1<<7) /* Set Rx Error bit for big frames */
+#define SK_SELF_RX_ON (1<<8) /* Enable Rx of own packets */
+#define SK_SELF_RX_OFF (1<<9) /* Disable Rx of own packets */
+
+/* parameter 'Para' when calling SkMacSetRxTxEn() */
+#define SK_MAC_LOOPB_ON (1<<0) /* Enable MAC Loopback Mode */
+#define SK_MAC_LOOPB_OFF (1<<1) /* Disable MAC Loopback Mode */
+#define SK_PHY_LOOPB_ON (1<<2) /* Enable PHY Loopback Mode */
+#define SK_PHY_LOOPB_OFF (1<<3) /* Disable PHY Loopback Mode */
+#define SK_PHY_FULLD_ON (1<<4) /* Enable GMII Full Duplex */
+#define SK_PHY_FULLD_OFF (1<<5) /* Disable GMII Full Duplex */
+
+/* States of PState */
+#define SK_PRT_RESET 0 /* the port is reset */
+#define SK_PRT_STOP 1 /* the port is stopped (similar to SW reset) */
+#define SK_PRT_INIT 2 /* the port is initialized */
+#define SK_PRT_RUN 3 /* the port has an active link */
+
+/* Default receive frame limit for Workaround of XMAC Errata */
+#define SK_DEF_RX_WA_LIM SK_CONSTU64(100)
+
+/* Link Partner Status */
+#define SK_LIPA_UNKNOWN 0 /* Link partner is in unknown state */
+#define SK_LIPA_MANUAL 1 /* Link partner is in detected manual state */
+#define SK_LIPA_AUTO 2 /* Link partner is in auto-negotiation state */
+
+/* Maximum Restarts before restart is ignored (3Com WA) */
+#define SK_MAX_LRESTART 3 /* Max. 3 times the link is restarted */
+
+/* Max. Auto-neg. timeouts before link detection in sense mode is reset */
+#define SK_MAX_ANEG_TO 10 /* Max. 10 times the sense mode is reset */
+
+/* structures *****************************************************************/
+
+/*
+ * MAC specific functions
+ */
+typedef struct s_GeMacFunc {
+ int (*pFnMacUpdateStats)(SK_AC *pAC, SK_IOC IoC, unsigned int Port);
+ int (*pFnMacStatistic)(SK_AC *pAC, SK_IOC IoC, unsigned int Port,
+ SK_U16 StatAddr, SK_U32 *pVal);
+ int (*pFnMacResetCounter)(SK_AC *pAC, SK_IOC IoC, unsigned int Port);
+ int (*pFnMacOverflow)(SK_AC *pAC, SK_IOC IoC, unsigned int Port,
+ SK_U16 IStatus, SK_U64 *pVal);
+} SK_GEMACFUNC;
+
+/*
+ * Port Structure
+ */
+typedef struct s_GePort {
+#ifndef SK_DIAG
+ SK_TIMER PWaTimer; /* Workaround Timer */
+ SK_TIMER HalfDupChkTimer;
+#endif /* SK_DIAG */
+ SK_U32 PPrevShorts; /* Previous short Counter checking */
+ SK_U32 PPrevFcs; /* Previous FCS Error Counter checking */
+ SK_U64 PPrevRx; /* Previous RxOk Counter checking */
+ SK_U64 PRxLim; /* Previous RxOk Counter checking */
+ SK_U64 LastOctets; /* For half duplex hang check */
+ int PLinkResCt; /* Link Restart Counter */
+ int PAutoNegTimeOut;/* Auto-negotiation timeout current value */
+ int PAutoNegTOCt; /* Auto-negotiation Timeout Counter */
+ int PRxQSize; /* Port Rx Queue Size in kB */
+ int PXSQSize; /* Port Synchronous Transmit Queue Size in kB */
+ int PXAQSize; /* Port Asynchronous Transmit Queue Size in kB */
+ SK_U32 PRxQRamStart; /* Receive Queue RAM Buffer Start Address */
+ SK_U32 PRxQRamEnd; /* Receive Queue RAM Buffer End Address */
+ SK_U32 PXsQRamStart; /* Sync Tx Queue RAM Buffer Start Address */
+ SK_U32 PXsQRamEnd; /* Sync Tx Queue RAM Buffer End Address */
+ SK_U32 PXaQRamStart; /* Async Tx Queue RAM Buffer Start Address */
+ SK_U32 PXaQRamEnd; /* Async Tx Queue RAM Buffer End Address */
+ SK_U32 PRxOverCnt; /* Receive Overflow Counter */
+ int PRxQOff; /* Rx Queue Address Offset */
+ int PXsQOff; /* Synchronous Tx Queue Address Offset */
+ int PXaQOff; /* Asynchronous Tx Queue Address Offset */
+ int PhyType; /* PHY used on this port */
+ SK_U16 PhyId1; /* PHY Id1 on this port */
+ SK_U16 PhyAddr; /* MDIO/MDC PHY address */
+ SK_U16 PIsave; /* Saved Interrupt status word */
+ SK_U16 PSsave; /* Saved PHY status word */
+ SK_BOOL PHWLinkUp; /* The hardware Link is up (wiring) */
+ SK_BOOL PState; /* Is port initialized ? */
+ SK_BOOL PLinkBroken; /* Is Link broken ? */
+ SK_BOOL PCheckPar; /* Do we check for parity errors ? */
+ SK_BOOL HalfDupTimerActive;
+ SK_U8 PLinkCap; /* Link Capabilities */
+ SK_U8 PLinkModeConf; /* Link Mode configured */
+ SK_U8 PLinkMode; /* Link Mode currently used */
+ SK_U8 PLinkModeStatus;/* Link Mode Status */
+ SK_U8 PLinkSpeedCap; /* Link Speed Capabilities(10/100/1000 Mbps) */
+ SK_U8 PLinkSpeed; /* configured Link Speed (10/100/1000 Mbps) */
+ SK_U8 PLinkSpeedUsed; /* current Link Speed (10/100/1000 Mbps) */
+ SK_U8 PFlowCtrlCap; /* Flow Control Capabilities */
+ SK_U8 PFlowCtrlMode; /* Flow Control Mode */
+ SK_U8 PFlowCtrlStatus;/* Flow Control Status */
+ SK_U8 PMSCap; /* Master/Slave Capabilities */
+ SK_U8 PMSMode; /* Master/Slave Mode */
+ SK_U8 PMSStatus; /* Master/Slave Status */
+ SK_U8 PAutoNegFail; /* Auto-negotiation fail flag */
+ SK_U8 PLipaAutoNeg; /* Auto-negotiation possible with Link Partner */
+ SK_U8 PCableLen; /* Cable Length */
+ SK_U8 PMdiPairLen[4]; /* MDI[0..3] Pair Length */
+ SK_U8 PMdiPairSts[4]; /* MDI[0..3] Pair Diagnostic Status */
+} SK_GEPORT;
+
+/*
+ * Gigabit Ethernet Initialization Struct
+ * (has to be included in the adapter context)
+ */
+typedef struct s_GeInit {
+ SK_U8 GIPciHwRev; /* PCI HW Revision Number */
+ SK_U8 GIChipId; /* Chip Identification Number */
+ SK_U8 GIChipRev; /* Chip Revision Number */
+ SK_BOOL GIGenesis; /* Genesis adapter ? */
+ SK_BOOL GICopperType; /* Copper Type adapter ? */
+ SK_BOOL GIPciSlot64; /* 64-bit PCI Slot */
+ SK_BOOL GIPciClock66; /* 66 MHz PCI Clock */
+ SK_BOOL GIVauxAvail; /* VAUX available (YUKON) */
+ SK_BOOL GIYukon32Bit; /* 32-Bit YUKON adapter */
+ SK_BOOL GIYukonLite; /* YUKON-Lite chip */
+ int GIMacsFound; /* Number of MACs found on this adapter */
+ int GIMacType; /* MAC Type used on this adapter */
+ int GIHstClkFact; /* Host Clock Factor (62.5 / HstClk * 100) */
+ int GIPortUsage; /* Driver Port Usage */
+ int GILevel; /* Initialization Level completed */
+ int GIRamSize; /* The RAM size of the adapter in kB */
+ int GIWolOffs; /* WOL Register Offset (HW-Bug in Rev. A) */
+ SK_U32 GIRamOffs; /* RAM Address Offset for addr calculation */
+ SK_U32 GIPollTimerVal; /* Descr. Poll Timer Init Val (HstClk ticks) */
+ SK_GEPORT GP[SK_MAX_MACS];/* Port Dependent Information */
+ SK_GEMACFUNC GIFunc; /* MAC depedent functions */
+} SK_GEINIT;
+
+/*
+ * Error numbers and messages for skxmac2.c and skgeinit.c
+ */
+#define SKERR_HWI_E001 (SK_ERRBASE_HWINIT)
+#define SKERR_HWI_E001MSG "SkXmClrExactAddr() has got illegal parameters"
+#define SKERR_HWI_E002 (SKERR_HWI_E001+1)
+#define SKERR_HWI_E002MSG "SkGeInit(): Level 1 call missing"
+#define SKERR_HWI_E003 (SKERR_HWI_E002+1)
+#define SKERR_HWI_E003MSG "SkGeInit() called with illegal init Level"
+#define SKERR_HWI_E004 (SKERR_HWI_E003+1)
+#define SKERR_HWI_E004MSG "SkGeInitPort(): Queue Size illegal configured"
+#define SKERR_HWI_E005 (SKERR_HWI_E004+1)
+#define SKERR_HWI_E005MSG "SkGeInitPort(): cannot init running ports"
+#define SKERR_HWI_E006 (SKERR_HWI_E005+1)
+#define SKERR_HWI_E006MSG "SkGeMacInit(): PState does not match HW state"
+#define SKERR_HWI_E007 (SKERR_HWI_E006+1)
+#define SKERR_HWI_E007MSG "SkXmInitDupMd() called with invalid Dup Mode"
+#define SKERR_HWI_E008 (SKERR_HWI_E007+1)
+#define SKERR_HWI_E008MSG "SkXmSetRxCmd() called with invalid Mode"
+#define SKERR_HWI_E009 (SKERR_HWI_E008+1)
+#define SKERR_HWI_E009MSG "SkGeCfgSync() called although PXSQSize zero"
+#define SKERR_HWI_E010 (SKERR_HWI_E009+1)
+#define SKERR_HWI_E010MSG "SkGeCfgSync() called with invalid parameters"
+#define SKERR_HWI_E011 (SKERR_HWI_E010+1)
+#define SKERR_HWI_E011MSG "SkGeInitPort(): Receive Queue Size too small"
+#define SKERR_HWI_E012 (SKERR_HWI_E011+1)
+#define SKERR_HWI_E012MSG "SkGeInitPort(): invalid Queue Size specified"
+#define SKERR_HWI_E013 (SKERR_HWI_E012+1)
+#define SKERR_HWI_E013MSG "SkGeInitPort(): cfg changed for running queue"
+#define SKERR_HWI_E014 (SKERR_HWI_E013+1)
+#define SKERR_HWI_E014MSG "SkGeInitPort(): unknown GIPortUsage specified"
+#define SKERR_HWI_E015 (SKERR_HWI_E014+1)
+#define SKERR_HWI_E015MSG "Illegal Link mode parameter"
+#define SKERR_HWI_E016 (SKERR_HWI_E015+1)
+#define SKERR_HWI_E016MSG "Illegal Flow control mode parameter"
+#define SKERR_HWI_E017 (SKERR_HWI_E016+1)
+#define SKERR_HWI_E017MSG "Illegal value specified for GIPollTimerVal"
+#define SKERR_HWI_E018 (SKERR_HWI_E017+1)
+#define SKERR_HWI_E018MSG "FATAL: SkGeStopPort() does not terminate (Tx)"
+#define SKERR_HWI_E019 (SKERR_HWI_E018+1)
+#define SKERR_HWI_E019MSG "Illegal Speed parameter"
+#define SKERR_HWI_E020 (SKERR_HWI_E019+1)
+#define SKERR_HWI_E020MSG "Illegal Master/Slave parameter"
+#define SKERR_HWI_E021 (SKERR_HWI_E020+1)
+#define SKERR_HWI_E021MSG "MacUpdateStats(): cannot update statistic counter"
+#define SKERR_HWI_E022 (SKERR_HWI_E021+1)
+#define SKERR_HWI_E022MSG "MacStatistic(): illegal statistic base address"
+#define SKERR_HWI_E023 (SKERR_HWI_E022+1)
+#define SKERR_HWI_E023MSG "SkGeInitPort(): Transmit Queue Size too small"
+#define SKERR_HWI_E024 (SKERR_HWI_E023+1)
+#define SKERR_HWI_E024MSG "FATAL: SkGeStopPort() does not terminate (Rx)"
+#define SKERR_HWI_E025 (SKERR_HWI_E024+1)
+#define SKERR_HWI_E025MSG ""
+
+/* function prototypes ********************************************************/
+
+#ifndef SK_KR_PROTO
+
+/*
+ * public functions in skgeinit.c
+ */
+extern void SkGePollRxD(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL PollRxD);
+
+extern void SkGePollTxD(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL PollTxD);
+
+extern void SkGeYellowLED(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int State);
+
+extern int SkGeCfgSync(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_U32 IntTime,
+ SK_U32 LimCount,
+ int SyncMode);
+
+extern void SkGeLoadLnkSyncCnt(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_U32 CntVal);
+
+extern void SkGeStopPort(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Dir,
+ int RstMode);
+
+extern int SkGeInit(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Level);
+
+extern void SkGeDeInit(
+ SK_AC *pAC,
+ SK_IOC IoC);
+
+extern int SkGeInitPort(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkGeXmitLED(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Led,
+ int Mode);
+
+extern void SkGeInitRamIface(
+ SK_AC *pAC,
+ SK_IOC IoC);
+
+extern int SkGeInitAssignRamToQueues(
+ SK_AC *pAC,
+ int ActivePort,
+ SK_BOOL DualNet);
+
+/*
+ * public functions in skxmac2.c
+ */
+extern void SkMacRxTxDisable(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacSoftRst(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacHardRst(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkXmInitMac(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkGmInitMac(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacInitPhy(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL DoLoop);
+
+extern void SkMacIrqDisable(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacFlushTxFifo(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacFlushRxFifo(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacIrq(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern int SkMacAutoNegDone(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacAutoNegLipaPhy(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_U16 IStatus);
+
+extern void SkMacSetRxTxEn(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Para);
+
+extern int SkMacRxTxEnable(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkMacPromiscMode(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL Enable);
+
+extern void SkMacHashing(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL Enable);
+
+extern void SkXmPhyRead(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Addr,
+ SK_U16 *pVal);
+
+extern void SkXmPhyWrite(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Addr,
+ SK_U16 Val);
+
+extern void SkGmPhyRead(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Addr,
+ SK_U16 *pVal);
+
+extern void SkGmPhyWrite(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Addr,
+ SK_U16 Val);
+
+extern void SkGePhyRead(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Addr,
+ SK_U16 *pVal);
+
+extern void SkGePhyWrite(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Addr,
+ SK_U16 Val);
+
+extern void SkXmClrExactAddr(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int StartNum,
+ int StopNum);
+
+extern void SkXmInitDupMd(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkXmInitPauseMd(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port);
+
+extern void SkXmAutoNegLipaXmac(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_U16 IStatus);
+
+extern int SkXmUpdateStats(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port);
+
+extern int SkGmUpdateStats(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port);
+
+extern int SkXmMacStatistic(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port,
+ SK_U16 StatAddr,
+ SK_U32 *pVal);
+
+extern int SkGmMacStatistic(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port,
+ SK_U16 StatAddr,
+ SK_U32 *pVal);
+
+extern int SkXmResetCounter(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port);
+
+extern int SkGmResetCounter(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port);
+
+extern int SkXmOverflowStatus(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port,
+ SK_U16 IStatus,
+ SK_U64 *pStatus);
+
+extern int SkGmOverflowStatus(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ unsigned int Port,
+ SK_U16 MacStatus,
+ SK_U64 *pStatus);
+
+extern int SkGmCableDiagStatus(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL StartTest);
+
+#ifdef SK_DIAG
+extern void SkMacSetRxCmd(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ int Mode);
+extern void SkMacCrcGener(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL Enable);
+extern void SkMacTimeStamp(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL Enable);
+extern void SkXmSendCont(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Port,
+ SK_BOOL Enable);
+#endif /* SK_DIAG */
+
+#else /* SK_KR_PROTO */
+
+/*
+ * public functions in skgeinit.c
+ */
+extern void SkGePollRxD();
+extern void SkGePollTxD();
+extern void SkGeYellowLED();
+extern int SkGeCfgSync();
+extern void SkGeLoadLnkSyncCnt();
+extern void SkGeStopPort();
+extern int SkGeInit();
+extern void SkGeDeInit();
+extern int SkGeInitPort();
+extern void SkGeXmitLED();
+extern void SkGeInitRamIface();
+extern int SkGeInitAssignRamToQueues();
+
+/*
+ * public functions in skxmac2.c
+ */
+extern void SkMacRxTxDisable();
+extern void SkMacSoftRst();
+extern void SkMacHardRst();
+extern void SkMacInitPhy();
+extern int SkMacRxTxEnable();
+extern void SkMacPromiscMode();
+extern void SkMacHashing();
+extern void SkMacIrqDisable();
+extern void SkMacFlushTxFifo();
+extern void SkMacFlushRxFifo();
+extern void SkMacIrq();
+extern int SkMacAutoNegDone();
+extern void SkMacAutoNegLipaPhy();
+extern void SkMacSetRxTxEn();
+extern void SkGePhyRead();
+extern void SkGePhyWrite();
+extern void SkXmInitMac();
+extern void SkXmPhyRead();
+extern void SkXmPhyWrite();
+extern void SkGmInitMac();
+extern void SkGmPhyRead();
+extern void SkGmPhyWrite();
+extern void SkXmClrExactAddr();
+extern void SkXmInitDupMd();
+extern void SkXmInitPauseMd();
+extern void SkXmAutoNegLipaXmac();
+extern int SkXmUpdateStats();
+extern int SkGmUpdateStats();
+extern int SkXmMacStatistic();
+extern int SkGmMacStatistic();
+extern int SkXmResetCounter();
+extern int SkGmResetCounter();
+extern int SkXmOverflowStatus();
+extern int SkGmOverflowStatus();
+extern int SkGmCableDiagStatus();
+
+#ifdef SK_DIAG
+extern void SkMacSetRxCmd();
+extern void SkMacCrcGener();
+extern void SkMacTimeStamp();
+extern void SkXmSendCont();
+#endif /* SK_DIAG */
+
+#endif /* SK_KR_PROTO */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __INC_SKGEINIT_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgepnm2.h u-boot-2009.03/drivers/net/sk98lin/h/skgepnm2.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgepnm2.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgepnm2.h 2009-03-31 14:54:45.909169600 -0700
@@ -1,462 +1,465 @@
-/*****************************************************************************
- *
- * Name: skgepnm2.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.34 $
- * Date: $Date: 2002/12/16 09:05:18 $
- * Purpose: Defines for Private Network Management Interface
- *
- ****************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2001 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/*****************************************************************************
- *
- * History:
- *
- * $Log: skgepnm2.h,v $
- * Revision 1.34 2002/12/16 09:05:18 tschilli
- * Code for VCT handling added.
- *
- * Revision 1.33 2002/09/10 09:00:03 rwahl
- * Adapted boolean definitions according sktypes.
- *
- * Revision 1.32 2002/08/09 09:47:01 rwahl
- * Added write-only flag to oid access defines.
- * Editorial changes.
- *
- * Revision 1.31 2002/07/17 19:23:18 rwahl
- * - Replaced MAC counter definitions by enumeration.
- * - Added definition SK_PNMI_MAC_TYPES.
- * - Added chipset defnition for Yukon.
- *
- * Revision 1.30 2001/02/06 10:03:41 mkunz
- * - Pnmi V4 dual net support added. Interface functions and macros extended
- * - Vpd bug fixed
- * - OID_SKGE_MTU added
- *
- * Revision 1.29 2001/01/22 13:41:37 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.28 2000/08/03 15:12:48 rwahl
- * - Additional comment for MAC statistic data structure.
- *
- * Revision 1.27 2000/08/01 16:10:18 rwahl
- * - Added mac statistic data structure for StatRxLongFrame counter.
- *
- * Revision 1.26 2000/03/31 13:51:34 rwahl
- * Added SK_UPTR cast to offset calculation for PNMI struct fields;
- * missing cast caused compiler warnings by Win64 compiler.
- *
- * Revision 1.25 1999/11/22 13:57:41 cgoos
- * Changed license header to GPL.
- * Allowing overwrite for SK_PNMI_STORE/_READ defines.
- *
- * Revision 1.24 1999/04/13 15:11:11 mhaveman
- * Changed copyright.
- *
- * Revision 1.23 1999/01/28 15:07:12 mhaveman
- * Changed default threshold for port switches per hour from 10
- * to 240 which means 4 switches per minute. This fits better
- * the granularity of 32 for the port switch estimate
- * counter.
- *
- * Revision 1.22 1999/01/05 12:52:30 mhaveman
- * Removed macro SK_PNMI_MICRO_SEC.
- *
- * Revision 1.21 1999/01/05 12:50:34 mhaveman
- * Enlarged macro definition SK_PNMI_HUNDREDS_SEC() so that no 64-bit
- * arithmetic is necessary if SK_TICKS_PER_SEC is 100.
- *
- * Revision 1.20 1998/12/09 14:02:53 mhaveman
- * Defined macro SK_PNMI_DEF_RLMT_CHG_THRES for default port switch
- * threshold.
- *
- * Revision 1.19 1998/12/03 11:28:41 mhaveman
- * Removed SK_PNMI_CHECKPTR macro.
- *
- * Revision 1.18 1998/12/03 11:21:00 mhaveman
- * -Added pointer check macro SK_PNMI_CHECKPTR
- * -Added macros SK_PNMI_VPD_ARR_SIZE and SK_PNMI_VPD_STR_SIZE for
- * VPD key evaluation.
- *
- * Revision 1.17 1998/11/20 13:20:33 mhaveman
- * Fixed bug in SK_PNMI_SET_STAT macro. ErrorStatus was not correctly set.
- *
- * Revision 1.16 1998/11/20 08:08:49 mhaveman
- * Macro SK_PNMI_CHECKFLAGS has got a if clause.
- *
- * Revision 1.15 1998/11/03 13:53:40 mhaveman
- * Fixed alignment problem in macor SK_PNMI_SET_STAT macro.
- *
- * Revision 1.14 1998/10/30 15:50:13 mhaveman
- * Added macro SK_PNMI_MICRO_SEC()
- *
- * Revision 1.13 1998/10/30 12:32:20 mhaveman
- * Added forgotten cast in SK_PNMI_READ_U32 macro.
- *
- * Revision 1.12 1998/10/29 15:40:26 mhaveman
- * -Changed SK_PNMI_TRAP_SENSOR_LEN because SensorDescr has now
- * variable string length.
- * -Defined SK_PNMI_CHECKFLAGS macro
- *
- * Revision 1.11 1998/10/29 08:53:34 mhaveman
- * Removed SK_PNMI_RLM_XXX table indexed because these counters need
- * not been saved over XMAC resets.
- *
- * Revision 1.10 1998/10/28 08:48:20 mhaveman
- * -Added macros for storage according to alignment
- * -Changed type of Instance to SK_U32 because of VPD
- * -Removed trap structures. Not needed because of alignment problem
- * -Changed type of Action form SK_U8 to int
- *
- * Revision 1.9 1998/10/21 13:34:45 mhaveman
- * Shit, mismatched calculation of SK_PNMI_HUNDREDS_SEC. Corrected.
- *
- * Revision 1.8 1998/10/21 13:24:58 mhaveman
- * Changed calculation of hundreds of seconds.
- *
- * Revision 1.7 1998/10/20 07:31:41 mhaveman
- * Made type changes to unsigned int where possible.
- *
- * Revision 1.6 1998/09/04 17:04:05 mhaveman
- * Added Sync counters to offset storage to provided settled values on
- * port switch.
- *
- * Revision 1.5 1998/09/04 12:45:35 mhaveman
- * Removed dummies for SK_DRIVER_ macros. They should be added by driver
- * writer in skdrv2nd.h.
- *
- * Revision 1.4 1998/09/04 11:59:50 mhaveman
- * Everything compiles now. Driver Macros for counting still missing.
- *
- * Revision 1.3 1998/08/24 12:01:35 mhaveman
- * Intermediate state.
- *
- * Revision 1.2 1998/08/17 07:51:40 mhaveman
- * Intermediate state.
- *
- * Revision 1.1 1998/08/11 09:08:40 mhaveman
- * Intermediate state.
- *
- ****************************************************************************/
-
-#ifndef _SKGEPNM2_H_
-#define _SKGEPNM2_H_
-
-/*
- * General definitions
- */
-#define SK_PNMI_CHIPSET_XMAC 1 /* XMAC11800FP */
-#define SK_PNMI_CHIPSET_YUKON 2 /* YUKON */
-
-#define SK_PNMI_BUS_PCI 1 /* PCI bus*/
-
-/*
- * Actions
- */
-#define SK_PNMI_ACT_IDLE 1
-#define SK_PNMI_ACT_RESET 2
-#define SK_PNMI_ACT_SELFTEST 3
-#define SK_PNMI_ACT_RESETCNT 4
-
-/*
- * VPD releated defines
- */
-
-#define SK_PNMI_VPD_RW 1
-#define SK_PNMI_VPD_RO 2
-
-#define SK_PNMI_VPD_OK 0
-#define SK_PNMI_VPD_NOTFOUND 1
-#define SK_PNMI_VPD_CUT 2
-#define SK_PNMI_VPD_TIMEOUT 3
-#define SK_PNMI_VPD_FULL 4
-#define SK_PNMI_VPD_NOWRITE 5
-#define SK_PNMI_VPD_FATAL 6
-
-#define SK_PNMI_VPD_IGNORE 0
-#define SK_PNMI_VPD_CREATE 1
-#define SK_PNMI_VPD_DELETE 2
-
-
-/*
- * RLMT related defines
- */
-#define SK_PNMI_DEF_RLMT_CHG_THRES 240 /* 4 changes per minute */
-
-
-/*
- * VCT internal status values
- */
-#define SK_PNMI_VCT_PENDING 32
-#define SK_PNMI_VCT_TEST_DONE 64
-#define SK_PNMI_VCT_LINK 128
-
-/*
- * Internal table definitions
- */
-#define SK_PNMI_GET 0
-#define SK_PNMI_PRESET 1
-#define SK_PNMI_SET 2
-
-#define SK_PNMI_RO 0
-#define SK_PNMI_RW 1
-#define SK_PNMI_WO 2
-
-typedef struct s_OidTabEntry {
- SK_U32 Id;
- SK_U32 InstanceNo;
- unsigned int StructSize;
- unsigned int Offset;
- int Access;
- int (* Func)(SK_AC *pAc, SK_IOC pIo, int action,
- SK_U32 Id, char* pBuf, unsigned int* pLen,
- SK_U32 Instance, unsigned int TableIndex,
- SK_U32 NetNumber);
- SK_U16 Param;
-} SK_PNMI_TAB_ENTRY;
-
-
-/*
- * Trap lengths
- */
-#define SK_PNMI_TRAP_SIMPLE_LEN 17
-#define SK_PNMI_TRAP_SENSOR_LEN_BASE 46
-#define SK_PNMI_TRAP_RLMT_CHANGE_LEN 23
-#define SK_PNMI_TRAP_RLMT_PORT_LEN 23
-
-/*
- * Number of MAC types supported
- */
-#define SK_PNMI_MAC_TYPES (SK_MAC_GMAC + 1)
-
-/*
- * MAC statistic data list (overall set for MAC types used)
- */
-enum SK_MACSTATS {
- SK_PNMI_HTX = 0,
- SK_PNMI_HTX_OCTET,
- SK_PNMI_HTX_OCTETHIGH = SK_PNMI_HTX_OCTET,
- SK_PNMI_HTX_OCTETLOW,
- SK_PNMI_HTX_BROADCAST,
- SK_PNMI_HTX_MULTICAST,
- SK_PNMI_HTX_UNICAST,
- SK_PNMI_HTX_BURST,
- SK_PNMI_HTX_PMACC,
- SK_PNMI_HTX_MACC,
- SK_PNMI_HTX_COL,
- SK_PNMI_HTX_SINGLE_COL,
- SK_PNMI_HTX_MULTI_COL,
- SK_PNMI_HTX_EXCESS_COL,
- SK_PNMI_HTX_LATE_COL,
- SK_PNMI_HTX_DEFFERAL,
- SK_PNMI_HTX_EXCESS_DEF,
- SK_PNMI_HTX_UNDERRUN,
- SK_PNMI_HTX_CARRIER,
- SK_PNMI_HTX_UTILUNDER,
- SK_PNMI_HTX_UTILOVER,
- SK_PNMI_HTX_64,
- SK_PNMI_HTX_127,
- SK_PNMI_HTX_255,
- SK_PNMI_HTX_511,
- SK_PNMI_HTX_1023,
- SK_PNMI_HTX_MAX,
- SK_PNMI_HTX_LONGFRAMES,
- SK_PNMI_HTX_SYNC,
- SK_PNMI_HTX_SYNC_OCTET,
- SK_PNMI_HTX_RESERVED,
-
- SK_PNMI_HRX,
- SK_PNMI_HRX_OCTET,
- SK_PNMI_HRX_OCTETHIGH = SK_PNMI_HRX_OCTET,
- SK_PNMI_HRX_OCTETLOW,
- SK_PNMI_HRX_BADOCTET,
- SK_PNMI_HRX_BADOCTETHIGH = SK_PNMI_HRX_BADOCTET,
- SK_PNMI_HRX_BADOCTETLOW,
- SK_PNMI_HRX_BROADCAST,
- SK_PNMI_HRX_MULTICAST,
- SK_PNMI_HRX_UNICAST,
- SK_PNMI_HRX_PMACC,
- SK_PNMI_HRX_MACC,
- SK_PNMI_HRX_PMACC_ERR,
- SK_PNMI_HRX_MACC_UNKWN,
- SK_PNMI_HRX_BURST,
- SK_PNMI_HRX_MISSED,
- SK_PNMI_HRX_FRAMING,
- SK_PNMI_HRX_UNDERSIZE,
- SK_PNMI_HRX_OVERFLOW,
- SK_PNMI_HRX_JABBER,
- SK_PNMI_HRX_CARRIER,
- SK_PNMI_HRX_IRLENGTH,
- SK_PNMI_HRX_SYMBOL,
- SK_PNMI_HRX_SHORTS,
- SK_PNMI_HRX_RUNT,
- SK_PNMI_HRX_TOO_LONG,
- SK_PNMI_HRX_FCS,
- SK_PNMI_HRX_CEXT,
- SK_PNMI_HRX_UTILUNDER,
- SK_PNMI_HRX_UTILOVER,
- SK_PNMI_HRX_64,
- SK_PNMI_HRX_127,
- SK_PNMI_HRX_255,
- SK_PNMI_HRX_511,
- SK_PNMI_HRX_1023,
- SK_PNMI_HRX_MAX,
- SK_PNMI_HRX_LONGFRAMES,
-
- SK_PNMI_HRX_RESERVED,
-
- SK_PNMI_MAX_IDX /* NOTE: Ensure SK_PNMI_CNT_NO is set to this value */
-};
-
-/*
- * MAC specific data
- */
-typedef struct s_PnmiStatAddr {
- SK_U16 Reg; /* MAC register containing the value */
- SK_BOOL GetOffset; /* TRUE: Offset managed by PNMI (call GetStatVal())*/
-} SK_PNMI_STATADDR;
-
-
-/*
- * SK_PNMI_STRUCT_DATA copy offset evaluation macros
- */
-#define SK_PNMI_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
-#define SK_PNMI_MAI_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
-#define SK_PNMI_VPD_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_VPD *)0)->e))
-#define SK_PNMI_SEN_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_SENSOR *)0)->e))
-#define SK_PNMI_CHK_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_CHECKSUM *)0)->e))
-#define SK_PNMI_STA_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_STAT *)0)->e))
-#define SK_PNMI_CNF_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_CONF *)0)->e))
-#define SK_PNMI_RLM_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT *)0)->e))
-#define SK_PNMI_MON_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT_MONITOR *)0)->e))
-#define SK_PNMI_TRP_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_TRAP *)0)->e))
-
-#define SK_PNMI_SET_STAT(b,s,o) {SK_U32 Val32; char *pVal; \
- Val32 = (s); \
- pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
- &(((SK_PNMI_STRUCT_DATA *)0)-> \
- ReturnStatus.ErrorStatus)); \
- SK_PNMI_STORE_U32(pVal, Val32); \
- Val32 = (o); \
- pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
- &(((SK_PNMI_STRUCT_DATA *)0)-> \
- ReturnStatus.ErrorOffset)); \
- SK_PNMI_STORE_U32(pVal, Val32);}
-
-/*
- * Time macros
- */
-#if SK_TICKS_PER_SEC == 100
-#define SK_PNMI_HUNDREDS_SEC(t) (t)
-#else
-#define SK_PNMI_HUNDREDS_SEC(t) (((t) * 100) / (SK_TICKS_PER_SEC))
-#endif
-
-/*
- * Macros to work around alignment problems
- */
-#ifndef SK_PNMI_STORE_U16
-#define SK_PNMI_STORE_U16(p,v) {*(char *)(p) = *((char *)&(v)); \
- *((char *)(p) + 1) = \
- *(((char *)&(v)) + 1);}
-#endif
-
-#ifndef SK_PNMI_STORE_U32
-#define SK_PNMI_STORE_U32(p,v) {*(char *)(p) = *((char *)&(v)); \
- *((char *)(p) + 1) = \
- *(((char *)&(v)) + 1); \
- *((char *)(p) + 2) = \
- *(((char *)&(v)) + 2); \
- *((char *)(p) + 3) = \
- *(((char *)&(v)) + 3);}
-#endif
-
-#ifndef SK_PNMI_STORE_U64
-#define SK_PNMI_STORE_U64(p,v) {*(char *)(p) = *((char *)&(v)); \
- *((char *)(p) + 1) = \
- *(((char *)&(v)) + 1); \
- *((char *)(p) + 2) = \
- *(((char *)&(v)) + 2); \
- *((char *)(p) + 3) = \
- *(((char *)&(v)) + 3); \
- *((char *)(p) + 4) = \
- *(((char *)&(v)) + 4); \
- *((char *)(p) + 5) = \
- *(((char *)&(v)) + 5); \
- *((char *)(p) + 6) = \
- *(((char *)&(v)) + 6); \
- *((char *)(p) + 7) = \
- *(((char *)&(v)) + 7);}
-#endif
-
-#ifndef SK_PNMI_READ_U16
-#define SK_PNMI_READ_U16(p,v) {*((char *)&(v)) = *(char *)(p); \
- *(((char *)&(v)) + 1) = \
- *((char *)(p) + 1);}
-#endif
-
-#ifndef SK_PNMI_READ_U32
-#define SK_PNMI_READ_U32(p,v) {*((char *)&(v)) = *(char *)(p); \
- *(((char *)&(v)) + 1) = \
- *((char *)(p) + 1); \
- *(((char *)&(v)) + 2) = \
- *((char *)(p) + 2); \
- *(((char *)&(v)) + 3) = \
- *((char *)(p) + 3);}
-#endif
-
-#ifndef SK_PNMI_READ_U64
-#define SK_PNMI_READ_U64(p,v) {*((char *)&(v)) = *(char *)(p); \
- *(((char *)&(v)) + 1) = \
- *((char *)(p) + 1); \
- *(((char *)&(v)) + 2) = \
- *((char *)(p) + 2); \
- *(((char *)&(v)) + 3) = \
- *((char *)(p) + 3); \
- *(((char *)&(v)) + 4) = \
- *((char *)(p) + 4); \
- *(((char *)&(v)) + 5) = \
- *((char *)(p) + 5); \
- *(((char *)&(v)) + 6) = \
- *((char *)(p) + 6); \
- *(((char *)&(v)) + 7) = \
- *((char *)(p) + 7);}
-#endif
-
-/*
- * Macros for Debug
- */
-#ifdef DEBUG
-
-#define SK_PNMI_CHECKFLAGS(vSt) {if (pAC->Pnmi.MacUpdatedFlag > 0 || \
- pAC->Pnmi.RlmtUpdatedFlag > 0 || \
- pAC->Pnmi.SirqUpdatedFlag > 0) { \
- SK_DBG_MSG(pAC, \
- SK_DBGMOD_PNMI, \
- SK_DBGCAT_CTRL, \
- ("PNMI: ERR: %s MacUFlag=%d, RlmtUFlag=%d, SirqUFlag=%d\n", \
- vSt, \
- pAC->Pnmi.MacUpdatedFlag, \
- pAC->Pnmi.RlmtUpdatedFlag, \
- pAC->Pnmi.SirqUpdatedFlag))}}
-
-#else /* !DEBUG */
-
-#define SK_PNMI_CHECKFLAGS(vSt) /* Nothing */
-
-#endif /* !DEBUG */
-
-#endif /* _SKGEPNM2_H_ */
+/*****************************************************************************
+ *
+ * Name: skgepnm2.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Defines for Private Network Management Interface
+ *
+ ****************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2001 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/*****************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgepnm2.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.34 2002/12/16 09:05:18 tschilli
+ * Code for VCT handling added.
+ *
+ * Revision 1.33 2002/09/10 09:00:03 rwahl
+ * Adapted boolean definitions according sktypes.
+ *
+ * Revision 1.32 2002/08/09 09:47:01 rwahl
+ * Added write-only flag to oid access defines.
+ * Editorial changes.
+ *
+ * Revision 1.31 2002/07/17 19:23:18 rwahl
+ * - Replaced MAC counter definitions by enumeration.
+ * - Added definition SK_PNMI_MAC_TYPES.
+ * - Added chipset defnition for Yukon.
+ *
+ * Revision 1.30 2001/02/06 10:03:41 mkunz
+ * - Pnmi V4 dual net support added. Interface functions and macros extended
+ * - Vpd bug fixed
+ * - OID_SKGE_MTU added
+ *
+ * Revision 1.29 2001/01/22 13:41:37 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.28 2000/08/03 15:12:48 rwahl
+ * - Additional comment for MAC statistic data structure.
+ *
+ * Revision 1.27 2000/08/01 16:10:18 rwahl
+ * - Added mac statistic data structure for StatRxLongFrame counter.
+ *
+ * Revision 1.26 2000/03/31 13:51:34 rwahl
+ * Added SK_UPTR cast to offset calculation for PNMI struct fields;
+ * missing cast caused compiler warnings by Win64 compiler.
+ *
+ * Revision 1.25 1999/11/22 13:57:41 cgoos
+ * Changed license header to GPL.
+ * Allowing overwrite for SK_PNMI_STORE/_READ defines.
+ *
+ * Revision 1.24 1999/04/13 15:11:11 mhaveman
+ * Changed copyright.
+ *
+ * Revision 1.23 1999/01/28 15:07:12 mhaveman
+ * Changed default threshold for port switches per hour from 10
+ * to 240 which means 4 switches per minute. This fits better
+ * the granularity of 32 for the port switch estimate
+ * counter.
+ *
+ * Revision 1.22 1999/01/05 12:52:30 mhaveman
+ * Removed macro SK_PNMI_MICRO_SEC.
+ *
+ * Revision 1.21 1999/01/05 12:50:34 mhaveman
+ * Enlarged macro definition SK_PNMI_HUNDREDS_SEC() so that no 64-bit
+ * arithmetic is necessary if SK_TICKS_PER_SEC is 100.
+ *
+ * Revision 1.20 1998/12/09 14:02:53 mhaveman
+ * Defined macro SK_PNMI_DEF_RLMT_CHG_THRES for default port switch
+ * threshold.
+ *
+ * Revision 1.19 1998/12/03 11:28:41 mhaveman
+ * Removed SK_PNMI_CHECKPTR macro.
+ *
+ * Revision 1.18 1998/12/03 11:21:00 mhaveman
+ * -Added pointer check macro SK_PNMI_CHECKPTR
+ * -Added macros SK_PNMI_VPD_ARR_SIZE and SK_PNMI_VPD_STR_SIZE for
+ * VPD key evaluation.
+ *
+ * Revision 1.17 1998/11/20 13:20:33 mhaveman
+ * Fixed bug in SK_PNMI_SET_STAT macro. ErrorStatus was not correctly set.
+ *
+ * Revision 1.16 1998/11/20 08:08:49 mhaveman
+ * Macro SK_PNMI_CHECKFLAGS has got a if clause.
+ *
+ * Revision 1.15 1998/11/03 13:53:40 mhaveman
+ * Fixed alignment problem in macor SK_PNMI_SET_STAT macro.
+ *
+ * Revision 1.14 1998/10/30 15:50:13 mhaveman
+ * Added macro SK_PNMI_MICRO_SEC()
+ *
+ * Revision 1.13 1998/10/30 12:32:20 mhaveman
+ * Added forgotten cast in SK_PNMI_READ_U32 macro.
+ *
+ * Revision 1.12 1998/10/29 15:40:26 mhaveman
+ * -Changed SK_PNMI_TRAP_SENSOR_LEN because SensorDescr has now
+ * variable string length.
+ * -Defined SK_PNMI_CHECKFLAGS macro
+ *
+ * Revision 1.11 1998/10/29 08:53:34 mhaveman
+ * Removed SK_PNMI_RLM_XXX table indexed because these counters need
+ * not been saved over XMAC resets.
+ *
+ * Revision 1.10 1998/10/28 08:48:20 mhaveman
+ * -Added macros for storage according to alignment
+ * -Changed type of Instance to SK_U32 because of VPD
+ * -Removed trap structures. Not needed because of alignment problem
+ * -Changed type of Action form SK_U8 to int
+ *
+ * Revision 1.9 1998/10/21 13:34:45 mhaveman
+ * Shit, mismatched calculation of SK_PNMI_HUNDREDS_SEC. Corrected.
+ *
+ * Revision 1.8 1998/10/21 13:24:58 mhaveman
+ * Changed calculation of hundreds of seconds.
+ *
+ * Revision 1.7 1998/10/20 07:31:41 mhaveman
+ * Made type changes to unsigned int where possible.
+ *
+ * Revision 1.6 1998/09/04 17:04:05 mhaveman
+ * Added Sync counters to offset storage to provided settled values on
+ * port switch.
+ *
+ * Revision 1.5 1998/09/04 12:45:35 mhaveman
+ * Removed dummies for SK_DRIVER_ macros. They should be added by driver
+ * writer in skdrv2nd.h.
+ *
+ * Revision 1.4 1998/09/04 11:59:50 mhaveman
+ * Everything compiles now. Driver Macros for counting still missing.
+ *
+ * Revision 1.3 1998/08/24 12:01:35 mhaveman
+ * Intermediate state.
+ *
+ * Revision 1.2 1998/08/17 07:51:40 mhaveman
+ * Intermediate state.
+ *
+ * Revision 1.1 1998/08/11 09:08:40 mhaveman
+ * Intermediate state.
+ *
+ ****************************************************************************/
+
+#ifndef _SKGEPNM2_H_
+#define _SKGEPNM2_H_
+
+/*
+ * General definitions
+ */
+#define SK_PNMI_CHIPSET_XMAC 1 /* XMAC11800FP */
+#define SK_PNMI_CHIPSET_YUKON 2 /* YUKON */
+
+#define SK_PNMI_BUS_PCI 1 /* PCI bus*/
+
+/*
+ * Actions
+ */
+#define SK_PNMI_ACT_IDLE 1
+#define SK_PNMI_ACT_RESET 2
+#define SK_PNMI_ACT_SELFTEST 3
+#define SK_PNMI_ACT_RESETCNT 4
+
+/*
+ * VPD releated defines
+ */
+
+#define SK_PNMI_VPD_RW 1
+#define SK_PNMI_VPD_RO 2
+
+#define SK_PNMI_VPD_OK 0
+#define SK_PNMI_VPD_NOTFOUND 1
+#define SK_PNMI_VPD_CUT 2
+#define SK_PNMI_VPD_TIMEOUT 3
+#define SK_PNMI_VPD_FULL 4
+#define SK_PNMI_VPD_NOWRITE 5
+#define SK_PNMI_VPD_FATAL 6
+
+#define SK_PNMI_VPD_IGNORE 0
+#define SK_PNMI_VPD_CREATE 1
+#define SK_PNMI_VPD_DELETE 2
+
+
+/*
+ * RLMT related defines
+ */
+#define SK_PNMI_DEF_RLMT_CHG_THRES 240 /* 4 changes per minute */
+
+
+/*
+ * VCT internal status values
+ */
+#define SK_PNMI_VCT_PENDING 32
+#define SK_PNMI_VCT_TEST_DONE 64
+#define SK_PNMI_VCT_LINK 128
+
+/*
+ * Internal table definitions
+ */
+#define SK_PNMI_GET 0
+#define SK_PNMI_PRESET 1
+#define SK_PNMI_SET 2
+
+#define SK_PNMI_RO 0
+#define SK_PNMI_RW 1
+#define SK_PNMI_WO 2
+
+typedef struct s_OidTabEntry {
+ SK_U32 Id;
+ SK_U32 InstanceNo;
+ unsigned int StructSize;
+ unsigned int Offset;
+ int Access;
+ int (* Func)(SK_AC *pAc, SK_IOC pIo, int action,
+ SK_U32 Id, char* pBuf, unsigned int* pLen,
+ SK_U32 Instance, unsigned int TableIndex,
+ SK_U32 NetNumber);
+ SK_U16 Param;
+} SK_PNMI_TAB_ENTRY;
+
+
+/*
+ * Trap lengths
+ */
+#define SK_PNMI_TRAP_SIMPLE_LEN 17
+#define SK_PNMI_TRAP_SENSOR_LEN_BASE 46
+#define SK_PNMI_TRAP_RLMT_CHANGE_LEN 23
+#define SK_PNMI_TRAP_RLMT_PORT_LEN 23
+
+/*
+ * Number of MAC types supported
+ */
+#define SK_PNMI_MAC_TYPES (SK_MAC_GMAC + 1)
+
+/*
+ * MAC statistic data list (overall set for MAC types used)
+ */
+enum SK_MACSTATS {
+ SK_PNMI_HTX = 0,
+ SK_PNMI_HTX_OCTET,
+ SK_PNMI_HTX_OCTETHIGH = SK_PNMI_HTX_OCTET,
+ SK_PNMI_HTX_OCTETLOW,
+ SK_PNMI_HTX_BROADCAST,
+ SK_PNMI_HTX_MULTICAST,
+ SK_PNMI_HTX_UNICAST,
+ SK_PNMI_HTX_BURST,
+ SK_PNMI_HTX_PMACC,
+ SK_PNMI_HTX_MACC,
+ SK_PNMI_HTX_COL,
+ SK_PNMI_HTX_SINGLE_COL,
+ SK_PNMI_HTX_MULTI_COL,
+ SK_PNMI_HTX_EXCESS_COL,
+ SK_PNMI_HTX_LATE_COL,
+ SK_PNMI_HTX_DEFFERAL,
+ SK_PNMI_HTX_EXCESS_DEF,
+ SK_PNMI_HTX_UNDERRUN,
+ SK_PNMI_HTX_CARRIER,
+ SK_PNMI_HTX_UTILUNDER,
+ SK_PNMI_HTX_UTILOVER,
+ SK_PNMI_HTX_64,
+ SK_PNMI_HTX_127,
+ SK_PNMI_HTX_255,
+ SK_PNMI_HTX_511,
+ SK_PNMI_HTX_1023,
+ SK_PNMI_HTX_MAX,
+ SK_PNMI_HTX_LONGFRAMES,
+ SK_PNMI_HTX_SYNC,
+ SK_PNMI_HTX_SYNC_OCTET,
+ SK_PNMI_HTX_RESERVED,
+
+ SK_PNMI_HRX,
+ SK_PNMI_HRX_OCTET,
+ SK_PNMI_HRX_OCTETHIGH = SK_PNMI_HRX_OCTET,
+ SK_PNMI_HRX_OCTETLOW,
+ SK_PNMI_HRX_BADOCTET,
+ SK_PNMI_HRX_BADOCTETHIGH = SK_PNMI_HRX_BADOCTET,
+ SK_PNMI_HRX_BADOCTETLOW,
+ SK_PNMI_HRX_BROADCAST,
+ SK_PNMI_HRX_MULTICAST,
+ SK_PNMI_HRX_UNICAST,
+ SK_PNMI_HRX_PMACC,
+ SK_PNMI_HRX_MACC,
+ SK_PNMI_HRX_PMACC_ERR,
+ SK_PNMI_HRX_MACC_UNKWN,
+ SK_PNMI_HRX_BURST,
+ SK_PNMI_HRX_MISSED,
+ SK_PNMI_HRX_FRAMING,
+ SK_PNMI_HRX_UNDERSIZE,
+ SK_PNMI_HRX_OVERFLOW,
+ SK_PNMI_HRX_JABBER,
+ SK_PNMI_HRX_CARRIER,
+ SK_PNMI_HRX_IRLENGTH,
+ SK_PNMI_HRX_SYMBOL,
+ SK_PNMI_HRX_SHORTS,
+ SK_PNMI_HRX_RUNT,
+ SK_PNMI_HRX_TOO_LONG,
+ SK_PNMI_HRX_FCS,
+ SK_PNMI_HRX_CEXT,
+ SK_PNMI_HRX_UTILUNDER,
+ SK_PNMI_HRX_UTILOVER,
+ SK_PNMI_HRX_64,
+ SK_PNMI_HRX_127,
+ SK_PNMI_HRX_255,
+ SK_PNMI_HRX_511,
+ SK_PNMI_HRX_1023,
+ SK_PNMI_HRX_MAX,
+ SK_PNMI_HRX_LONGFRAMES,
+
+ SK_PNMI_HRX_RESERVED,
+
+ SK_PNMI_MAX_IDX /* NOTE: Ensure SK_PNMI_CNT_NO is set to this value */
+};
+
+/*
+ * MAC specific data
+ */
+typedef struct s_PnmiStatAddr {
+ SK_U16 Reg; /* MAC register containing the value */
+ SK_BOOL GetOffset; /* TRUE: Offset managed by PNMI (call GetStatVal())*/
+} SK_PNMI_STATADDR;
+
+
+/*
+ * SK_PNMI_STRUCT_DATA copy offset evaluation macros
+ */
+#define SK_PNMI_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
+#define SK_PNMI_MAI_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
+#define SK_PNMI_VPD_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_VPD *)0)->e))
+#define SK_PNMI_SEN_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_SENSOR *)0)->e))
+#define SK_PNMI_CHK_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_CHECKSUM *)0)->e))
+#define SK_PNMI_STA_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_STAT *)0)->e))
+#define SK_PNMI_CNF_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_CONF *)0)->e))
+#define SK_PNMI_RLM_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT *)0)->e))
+#define SK_PNMI_MON_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT_MONITOR *)0)->e))
+#define SK_PNMI_TRP_OFF(e) ((SK_U32)(SK_UPTR)&(((SK_PNMI_TRAP *)0)->e))
+
+#define SK_PNMI_SET_STAT(b,s,o) {SK_U32 Val32; char *pVal; \
+ Val32 = (s); \
+ pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
+ &(((SK_PNMI_STRUCT_DATA *)0)-> \
+ ReturnStatus.ErrorStatus)); \
+ SK_PNMI_STORE_U32(pVal, Val32); \
+ Val32 = (o); \
+ pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
+ &(((SK_PNMI_STRUCT_DATA *)0)-> \
+ ReturnStatus.ErrorOffset)); \
+ SK_PNMI_STORE_U32(pVal, Val32);}
+
+/*
+ * Time macros
+ */
+#if SK_TICKS_PER_SEC == 100
+#define SK_PNMI_HUNDREDS_SEC(t) (t)
+#else
+#define SK_PNMI_HUNDREDS_SEC(t) (((t) * 100) / (SK_TICKS_PER_SEC))
+#endif
+
+/*
+ * Macros to work around alignment problems
+ */
+#ifndef SK_PNMI_STORE_U16
+#define SK_PNMI_STORE_U16(p,v) {*(char *)(p) = *((char *)&(v)); \
+ *((char *)(p) + 1) = \
+ *(((char *)&(v)) + 1);}
+#endif
+
+#ifndef SK_PNMI_STORE_U32
+#define SK_PNMI_STORE_U32(p,v) {*(char *)(p) = *((char *)&(v)); \
+ *((char *)(p) + 1) = \
+ *(((char *)&(v)) + 1); \
+ *((char *)(p) + 2) = \
+ *(((char *)&(v)) + 2); \
+ *((char *)(p) + 3) = \
+ *(((char *)&(v)) + 3);}
+#endif
+
+#ifndef SK_PNMI_STORE_U64
+#define SK_PNMI_STORE_U64(p,v) {*(char *)(p) = *((char *)&(v)); \
+ *((char *)(p) + 1) = \
+ *(((char *)&(v)) + 1); \
+ *((char *)(p) + 2) = \
+ *(((char *)&(v)) + 2); \
+ *((char *)(p) + 3) = \
+ *(((char *)&(v)) + 3); \
+ *((char *)(p) + 4) = \
+ *(((char *)&(v)) + 4); \
+ *((char *)(p) + 5) = \
+ *(((char *)&(v)) + 5); \
+ *((char *)(p) + 6) = \
+ *(((char *)&(v)) + 6); \
+ *((char *)(p) + 7) = \
+ *(((char *)&(v)) + 7);}
+#endif
+
+#ifndef SK_PNMI_READ_U16
+#define SK_PNMI_READ_U16(p,v) {*((char *)&(v)) = *(char *)(p); \
+ *(((char *)&(v)) + 1) = \
+ *((char *)(p) + 1);}
+#endif
+
+#ifndef SK_PNMI_READ_U32
+#define SK_PNMI_READ_U32(p,v) {*((char *)&(v)) = *(char *)(p); \
+ *(((char *)&(v)) + 1) = \
+ *((char *)(p) + 1); \
+ *(((char *)&(v)) + 2) = \
+ *((char *)(p) + 2); \
+ *(((char *)&(v)) + 3) = \
+ *((char *)(p) + 3);}
+#endif
+
+#ifndef SK_PNMI_READ_U64
+#define SK_PNMI_READ_U64(p,v) {*((char *)&(v)) = *(char *)(p); \
+ *(((char *)&(v)) + 1) = \
+ *((char *)(p) + 1); \
+ *(((char *)&(v)) + 2) = \
+ *((char *)(p) + 2); \
+ *(((char *)&(v)) + 3) = \
+ *((char *)(p) + 3); \
+ *(((char *)&(v)) + 4) = \
+ *((char *)(p) + 4); \
+ *(((char *)&(v)) + 5) = \
+ *((char *)(p) + 5); \
+ *(((char *)&(v)) + 6) = \
+ *((char *)(p) + 6); \
+ *(((char *)&(v)) + 7) = \
+ *((char *)(p) + 7);}
+#endif
+
+/*
+ * Macros for Debug
+ */
+#ifdef DEBUG
+
+#define SK_PNMI_CHECKFLAGS(vSt) {if (pAC->Pnmi.MacUpdatedFlag > 0 || \
+ pAC->Pnmi.RlmtUpdatedFlag > 0 || \
+ pAC->Pnmi.SirqUpdatedFlag > 0) { \
+ SK_DBG_MSG(pAC, \
+ SK_DBGMOD_PNMI, \
+ SK_DBGCAT_CTRL, \
+ ("PNMI: ERR: %s MacUFlag=%d, RlmtUFlag=%d, SirqUFlag=%d\n", \
+ vSt, \
+ pAC->Pnmi.MacUpdatedFlag, \
+ pAC->Pnmi.RlmtUpdatedFlag, \
+ pAC->Pnmi.SirqUpdatedFlag))}}
+
+#else /* !DEBUG */
+
+#define SK_PNMI_CHECKFLAGS(vSt) /* Nothing */
+
+#endif /* !DEBUG */
+
+#endif /* _SKGEPNM2_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgepnmi.h u-boot-2009.03/drivers/net/sk98lin/h/skgepnmi.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgepnmi.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgepnmi.h 2009-03-31 14:54:45.940419200 -0700
@@ -1,1113 +1,1116 @@
-/*****************************************************************************
- *
- * Name: skgepnmi.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.59 $
- * Date: $Date: 2002/12/16 14:03:50 $
- * Purpose: Defines for Private Network Management Interface
- *
- ****************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2001 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/*****************************************************************************
- *
- * History:
- *
- * $Log: skgepnmi.h,v $
- * Revision 1.59 2002/12/16 14:03:50 tschilli
- * New defines for VCT added.
- *
- * Revision 1.58 2002/12/16 09:04:59 tschilli
- * Code for VCT handling added.
- *
- * Revision 1.57 2002/09/26 12:41:05 tschilli
- * SK_PNMI_PORT BufPort entry in struct SK_PNMI added.
- *
- * Revision 1.56 2002/08/16 11:10:41 rwahl
- * - Replaced c++ comment.
- *
- * Revision 1.55 2002/08/09 15:40:21 rwahl
- * Editorial change (renamed ConfSpeedCap).
- *
- * Revision 1.54 2002/08/09 11:06:07 rwahl
- * Added OID_SKGE_SPEED_CAP.
- *
- * Revision 1.53 2002/08/09 09:45:28 rwahl
- * Added support for NDIS OID_PNP_xxx.
- * Editorial changes.
- *
- * Revision 1.52 2002/08/06 17:54:07 rwahl
- * - Added speed cap to PNMI config struct.
- *
- * Revision 1.51 2002/07/17 19:19:26 rwahl
- * - Added OID_SKGE_SPEED_MODE and OID_SKGE_SPEED_STATUS.
- * - Added SK_PNMI_CNT_RX_PMACC_ERR() & SK_PNMI_CNT_RX_LONGFRAMES().
- * - Added speed mode & status to PNMI config struct.
- * - Editorial changes.
- *
- * Revision 1.50 2002/05/22 08:59:37 rwahl
- * Added string definitions for error msgs.
- *
- * Revision 1.49 2001/11/20 09:23:50 rwahl
- * - pnmi struct: reordered and aligned to 32bit.
- *
- * Revision 1.48 2001/02/23 14:34:24 mkunz
- * Changed macro PHYS2INST. Added pAC to Interface
- *
- * Revision 1.47 2001/02/07 08:28:23 mkunz
- * - Added Oids: OID_SKGE_DIAG_ACTION
- * OID_SKGE_DIAG_RESULT
- * OID_SKGE_MULTICAST_LIST
- * OID_SKGE_CURRENT_PACKET_FILTER
- * OID_SKGE_INTERMEDIATE_SUPPORT
- * - Changed value of OID_SKGE_MTU
- *
- * Revision 1.46 2001/02/06 10:01:41 mkunz
- * - Pnmi V4 dual net support added. Interface functions and macros extended
- * - Vpd bug fixed
- * - OID_SKGE_MTU added
- *
- * Revision 1.45 2001/01/22 13:41:37 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.44 2000/09/07 07:35:27 rwahl
- * - removed NDIS counter specific data type.
- * - fixed spelling for OID_SKGE_RLMT_PORT_PREFERRED.
- *
- * Revision 1.43 2000/08/04 11:41:08 rwahl
- * - Fixed compiler warning (port is always >= 0) for macros
- * SK_PNMI_CNT_RX_LONGFRAMES & SK_PNMI_CNT_SYNC_OCTETS
- *
- * Revision 1.42 2000/08/03 15:14:07 rwahl
- * - Corrected error in driver macros addressing a physical port.
- *
- * Revision 1.41 2000/08/01 16:22:29 rwahl
- * - Changed MDB version to 3.1.
- * - Added definitions for StatRxLongFrames counter.
- * - Added macro to be used by driver to count long frames received.
- * - Added directive to control width (default = 32bit) of NDIS statistic
- * counters (SK_NDIS_64BIT_CTR).
- *
- * Revision 1.40 2000/03/31 13:51:34 rwahl
- * Added SK_UPTR cast to offset calculation for PNMI struct fields;
- * missing cast caused compiler warnings by Win64 compiler.
- *
- * Revision 1.39 1999/12/06 10:09:47 rwahl
- * Added new error log message.
- *
- * Revision 1.38 1999/11/22 13:57:55 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.37 1999/09/14 14:25:32 rwahl
- * Set MDB version for 1000Base-T (sensors, Master/Slave) changes.
- *
- * Revision 1.36 1999/05/20 09:24:56 cgoos
- * Changes for 1000Base-T (sensors, Master/Slave).
- *
- * Revision 1.35 1999/04/13 15:10:51 mhaveman
- * Replaced RLMT macros SK_RLMT_CHECK_xxx again by those of PNMI to
- * grant unified interface. But PNMI macros will store the same
- * value as RLMT macros.
- *
- * Revision 1.34 1999/04/13 15:03:49 mhaveman
- * -Changed copyright
- * -Removed SK_PNMI_RLMT_MODE_CHK_xxx macros. Those of RLMT should be
- * used.
- *
- * Revision 1.33 1999/03/23 10:41:02 mhaveman
- * Changed comments.
- *
- * Revision 1.32 1999/01/25 15:01:33 mhaveman
- * Added support for multiple simultaniously active ports.
- *
- * Revision 1.31 1999/01/19 10:06:26 mhaveman
- * Added new error log message.
- *
- * Revision 1.30 1999/01/05 10:34:49 mhaveman
- * Fixed little error in RlmtChangeEstimate calculation.
- *
- * Revision 1.29 1999/01/05 09:59:41 mhaveman
- * Redesigned port switch average calculation to avoid 64bit
- * arithmetic.
- *
- * Revision 1.28 1998/12/08 10:05:48 mhaveman
- * Defined macro SK_PNMI_MIN_STRUCT_SIZE.
- *
- * Revision 1.27 1998/12/03 14:39:35 mhaveman
- * Fixed problem that LSTAT was enumerated wrong.
- *
- * Revision 1.26 1998/12/03 11:19:51 mhaveman
- * Changed contents of errlog message SK_PNMI_ERR016MSG
- *
- * Revision 1.25 1998/12/01 10:40:04 mhaveman
- * Changed size of SensorNumber, ChecksumNumber and RlmtPortNumber in
- * SK_PNMI_STRUCT_DATA to be conform with OID definition.
- *
- * Revision 1.24 1998/11/20 08:09:27 mhaveman
- * Added macros to convert between logical, physical port indexes and
- * instances.
- *
- * Revision 1.23 1998/11/10 13:41:13 mhaveman
- * Needed to change interface, because NT driver needs a return value
- * of needed buffer space on TOO_SHORT errors. Therefore all
- * SkPnmiGet/Preset/Set functions now have a pointer to the length
- * parameter, where the needed space on error is returned.
- *
- * Revision 1.22 1998/11/03 12:05:51 mhaveman
- * Added pAC parameter to counter macors.
- *
- * Revision 1.21 1998/11/02 10:47:36 mhaveman
- * Added syslog messages for internal errors.
- *
- * Revision 1.20 1998/10/30 15:49:36 mhaveman
- * -Removed unused SK_PNMI_UTILIZATION_BASE and EstOldCnt.
- * -Redefined SK_PNMI_CHG_EST_BASE to hundreds of seconds.
- *
- * Revision 1.19 1998/10/29 15:38:44 mhaveman
- * Changed string lengths of PNMI_STRUCT_DATA structure because
- * string OIDs are now encoded with leading length ocetet.
- *
- * Revision 1.18 1998/10/29 08:52:27 mhaveman
- * -Added byte to strings in PNMI_STRUCT_DATA structure.
- * -Shortened SK_PNMI_RLMT structure to SK_MAX_MACS elements.
- *
- * Revision 1.17 1998/10/28 08:49:50 mhaveman
- * -Changed type of Instance back to SK_U32 because of VPD
- * -Changed type from SK_U8 to char of PciBusSpeed, PciBusWidth, PMD,
- * and Connector.
- *
- * Revision 1.16 1998/10/22 10:42:31 mhaveman
- * -Removed (SK_U32) casts for OIDs
- * -excluded NDIS OIDs when they are already defined with ifndef _NDIS_
- *
- * Revision 1.15 1998/10/20 13:56:28 mhaveman
- * Headerfile includes now directly other header files to comile correctly.
- *
- * Revision 1.14 1998/10/20 07:31:09 mhaveman
- * Made type changes to unsigned int where possible.
- *
- * Revision 1.13 1998/10/19 10:53:13 mhaveman
- * -Casted OID definitions to SK_U32
- * -Renamed RlmtMAC... to RlmtPort...
- * -Changed wrong type of VpdEntriesList from SK_U32 to char *
- *
- * Revision 1.12 1998/10/13 07:42:27 mhaveman
- * -Added OIDs OID_SKGE_TRAP_NUMBER and OID_SKGE_ALL_DATA
- * -Removed old cvs history entries
- * -Renamed MacNumber to PortNumber
- *
- * Revision 1.11 1998/10/07 10:55:24 mhaveman
- * -Added OID_MDB_VERSION. Therefore was a renumbering of the VPD OIDs
- * necessary.
- * -Added OID_GEN_ Ids to support the windows driver.
- *
- * Revision 1.10 1998/09/30 13:41:10 mhaveman
- * Renamed some OIDs to reduce usage of 'MAC' which is replaced by 'PORT'.
- *
- * Revision 1.9 1998/09/04 17:06:17 mhaveman
- * -Added SyncCounter as macro.
- * -Renamed OID_SKGE_.._NO_DESCR_CTS to OID_SKGE_.._NO_BUF_CTS.
- * -Added macros for driver description and version strings.
- *
- * Revision 1.8 1998/09/04 14:36:52 mhaveman
- * Added OIDs and Structure to access value of macro counters which are
- * counted by the driver.
- *
- * Revision 1.7 1998/09/04 11:59:36 mhaveman
- * Everything compiles now. Driver Macros for counting still missing.
- *
- ****************************************************************************/
-
-#ifndef _SKGEPNMI_H_
-#define _SKGEPNMI_H_
-
-/*
- * Include dependencies
- */
-#include "h/sktypes.h"
-#include "h/skerror.h"
-#include "h/sktimer.h"
-#include "h/ski2c.h"
-#include "h/skaddr.h"
-#include "h/skrlmt.h"
-#include "h/skvpd.h"
-
-/*
- * Management Database Version
- */
-#define SK_PNMI_MDB_VERSION 0x00030001 /* 3.1 */
-
-
-/*
- * Event definitions
- */
-#define SK_PNMI_EVT_SIRQ_OVERFLOW 1 /* Counter overflow */
-#define SK_PNMI_EVT_SEN_WAR_LOW 2 /* Lower war thres exceeded */
-#define SK_PNMI_EVT_SEN_WAR_UPP 3 /* Upper war thres exceeded */
-#define SK_PNMI_EVT_SEN_ERR_LOW 4 /* Lower err thres exceeded */
-#define SK_PNMI_EVT_SEN_ERR_UPP 5 /* Upper err thres exceeded */
-#define SK_PNMI_EVT_CHG_EST_TIMER 6 /* Timer event for RLMT Chg */
-#define SK_PNMI_EVT_UTILIZATION_TIMER 7 /* Timer event for Utiliza. */
-#define SK_PNMI_EVT_CLEAR_COUNTER 8 /* Clear statistic counters */
-#define SK_PNMI_EVT_XMAC_RESET 9 /* XMAC will be reset */
-
-#define SK_PNMI_EVT_RLMT_PORT_UP 10 /* Port came logically up */
-#define SK_PNMI_EVT_RLMT_PORT_DOWN 11 /* Port went logically down */
-#define SK_PNMI_EVT_RLMT_SEGMENTATION 13 /* Two SP root bridges found */
-#define SK_PNMI_EVT_RLMT_ACTIVE_DOWN 14 /* Port went logically down */
-#define SK_PNMI_EVT_RLMT_ACTIVE_UP 15 /* Port came logically up */
-#define SK_PNMI_EVT_RLMT_SET_NETS 16 /* 1. Parameter is number of nets
- 1 = single net; 2 = dual net */
-#define SK_PNMI_EVT_VCT_RESET 17 /* VCT port reset timer event started with SET. */
-
-
-/*
- * Return values
- */
-#define SK_PNMI_ERR_OK 0
-#define SK_PNMI_ERR_GENERAL 1
-#define SK_PNMI_ERR_TOO_SHORT 2
-#define SK_PNMI_ERR_BAD_VALUE 3
-#define SK_PNMI_ERR_READ_ONLY 4
-#define SK_PNMI_ERR_UNKNOWN_OID 5
-#define SK_PNMI_ERR_UNKNOWN_INST 6
-#define SK_PNMI_ERR_UNKNOWN_NET 7
-
-
-/*
- * Return values of driver reset function SK_DRIVER_RESET() and
- * driver event function SK_DRIVER_EVENT()
- */
-#define SK_PNMI_ERR_OK 0
-#define SK_PNMI_ERR_FAIL 1
-
-
-/*
- * Return values of driver test function SK_DRIVER_SELFTEST()
- */
-#define SK_PNMI_TST_UNKNOWN (1 << 0)
-#define SK_PNMI_TST_TRANCEIVER (1 << 1)
-#define SK_PNMI_TST_ASIC (1 << 2)
-#define SK_PNMI_TST_SENSOR (1 << 3)
-#define SK_PNMI_TST_POWERMGMT (1 << 4)
-#define SK_PNMI_TST_PCI (1 << 5)
-#define SK_PNMI_TST_MAC (1 << 6)
-
-
-/*
- * RLMT specific definitions
- */
-#define SK_PNMI_RLMT_STATUS_STANDBY 1
-#define SK_PNMI_RLMT_STATUS_ACTIVE 2
-#define SK_PNMI_RLMT_STATUS_ERROR 3
-
-#define SK_PNMI_RLMT_LSTAT_PHY_DOWN 1
-#define SK_PNMI_RLMT_LSTAT_AUTONEG 2
-#define SK_PNMI_RLMT_LSTAT_LOG_DOWN 3
-#define SK_PNMI_RLMT_LSTAT_LOG_UP 4
-#define SK_PNMI_RLMT_LSTAT_INDETERMINATED 5
-
-#define SK_PNMI_RLMT_MODE_CHK_LINK (SK_RLMT_CHECK_LINK)
-#define SK_PNMI_RLMT_MODE_CHK_RX (SK_RLMT_CHECK_LOC_LINK)
-#define SK_PNMI_RLMT_MODE_CHK_SPT (SK_RLMT_CHECK_SEG)
-/* #define SK_PNMI_RLMT_MODE_CHK_EX */
-
-/*
- * OID definition
- */
-#ifndef _NDIS_ /* Check, whether NDIS already included OIDs */
-
-#define OID_GEN_XMIT_OK 0x00020101
-#define OID_GEN_RCV_OK 0x00020102
-#define OID_GEN_XMIT_ERROR 0x00020103
-#define OID_GEN_RCV_ERROR 0x00020104
-#define OID_GEN_RCV_NO_BUFFER 0x00020105
-
-/* #define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201 */
-#define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
-/* #define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203 */
-#define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
-/* #define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205 */
-#define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
-/* #define OID_GEN_DIRECTED_BYTES_RCV 0x00020207 */
-#define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
-/* #define OID_GEN_MULTICAST_BYTES_RCV 0x00020209 */
-#define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A
-/* #define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B */
-#define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C
-#define OID_GEN_RCV_CRC_ERROR 0x0002020D
-#define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E
-
-#define OID_802_3_PERMANENT_ADDRESS 0x01010101
-#define OID_802_3_CURRENT_ADDRESS 0x01010102
-/* #define OID_802_3_MULTICAST_LIST 0x01010103 */
-/* #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104 */
-/* #define OID_802_3_MAC_OPTIONS 0x01010105 */
-
-#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
-#define OID_802_3_XMIT_ONE_COLLISION 0x01020102
-#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
-#define OID_802_3_XMIT_DEFERRED 0x01020201
-#define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
-#define OID_802_3_RCV_OVERRUN 0x01020203
-#define OID_802_3_XMIT_UNDERRUN 0x01020204
-#define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
-#define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
-
-/*
- * PnP and PM OIDs
- */
-#ifdef SK_POWER_MGMT
-#define OID_PNP_CAPABILITIES 0xFD010100
-#define OID_PNP_SET_POWER 0xFD010101
-#define OID_PNP_QUERY_POWER 0xFD010102
-#define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103
-#define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104
-#define OID_PNP_ENABLE_WAKE_UP 0xFD010106
-#endif /* SK_POWER_MGMT */
-
-#endif /* _NDIS_ */
-
-#define OID_SKGE_MDB_VERSION 0xFF010100
-#define OID_SKGE_SUPPORTED_LIST 0xFF010101
-#define OID_SKGE_VPD_FREE_BYTES 0xFF010102
-#define OID_SKGE_VPD_ENTRIES_LIST 0xFF010103
-#define OID_SKGE_VPD_ENTRIES_NUMBER 0xFF010104
-#define OID_SKGE_VPD_KEY 0xFF010105
-#define OID_SKGE_VPD_VALUE 0xFF010106
-#define OID_SKGE_VPD_ACCESS 0xFF010107
-#define OID_SKGE_VPD_ACTION 0xFF010108
-
-#define OID_SKGE_PORT_NUMBER 0xFF010110
-#define OID_SKGE_DEVICE_TYPE 0xFF010111
-#define OID_SKGE_DRIVER_DESCR 0xFF010112
-#define OID_SKGE_DRIVER_VERSION 0xFF010113
-#define OID_SKGE_HW_DESCR 0xFF010114
-#define OID_SKGE_HW_VERSION 0xFF010115
-#define OID_SKGE_CHIPSET 0xFF010116
-#define OID_SKGE_ACTION 0xFF010117
-#define OID_SKGE_RESULT 0xFF010118
-#define OID_SKGE_BUS_TYPE 0xFF010119
-#define OID_SKGE_BUS_SPEED 0xFF01011A
-#define OID_SKGE_BUS_WIDTH 0xFF01011B
-/* 0xFF01011C unused */
-#define OID_SKGE_DIAG_ACTION 0xFF01011D
-#define OID_SKGE_DIAG_RESULT 0xFF01011E
-#define OID_SKGE_MTU 0xFF01011F
-#define OID_SKGE_PHYS_CUR_ADDR 0xFF010120
-#define OID_SKGE_PHYS_FAC_ADDR 0xFF010121
-#define OID_SKGE_PMD 0xFF010122
-#define OID_SKGE_CONNECTOR 0xFF010123
-#define OID_SKGE_LINK_CAP 0xFF010124
-#define OID_SKGE_LINK_MODE 0xFF010125
-#define OID_SKGE_LINK_MODE_STATUS 0xFF010126
-#define OID_SKGE_LINK_STATUS 0xFF010127
-#define OID_SKGE_FLOWCTRL_CAP 0xFF010128
-#define OID_SKGE_FLOWCTRL_MODE 0xFF010129
-#define OID_SKGE_FLOWCTRL_STATUS 0xFF01012A
-#define OID_SKGE_PHY_OPERATION_CAP 0xFF01012B
-#define OID_SKGE_PHY_OPERATION_MODE 0xFF01012C
-#define OID_SKGE_PHY_OPERATION_STATUS 0xFF01012D
-#define OID_SKGE_MULTICAST_LIST 0xFF01012E
-#define OID_SKGE_CURRENT_PACKET_FILTER 0xFF01012F
-
-#define OID_SKGE_TRAP 0xFF010130
-#define OID_SKGE_TRAP_NUMBER 0xFF010131
-
-#define OID_SKGE_RLMT_MODE 0xFF010140
-#define OID_SKGE_RLMT_PORT_NUMBER 0xFF010141
-#define OID_SKGE_RLMT_PORT_ACTIVE 0xFF010142
-#define OID_SKGE_RLMT_PORT_PREFERRED 0xFF010143
-#define OID_SKGE_INTERMEDIATE_SUPPORT 0xFF010160
-
-#define OID_SKGE_SPEED_CAP 0xFF010170
-#define OID_SKGE_SPEED_MODE 0xFF010171
-#define OID_SKGE_SPEED_STATUS 0xFF010172
-
-#define OID_SKGE_SENSOR_NUMBER 0xFF020100
-#define OID_SKGE_SENSOR_INDEX 0xFF020101
-#define OID_SKGE_SENSOR_DESCR 0xFF020102
-#define OID_SKGE_SENSOR_TYPE 0xFF020103
-#define OID_SKGE_SENSOR_VALUE 0xFF020104
-#define OID_SKGE_SENSOR_WAR_THRES_LOW 0xFF020105
-#define OID_SKGE_SENSOR_WAR_THRES_UPP 0xFF020106
-#define OID_SKGE_SENSOR_ERR_THRES_LOW 0xFF020107
-#define OID_SKGE_SENSOR_ERR_THRES_UPP 0xFF020108
-#define OID_SKGE_SENSOR_STATUS 0xFF020109
-#define OID_SKGE_SENSOR_WAR_CTS 0xFF02010A
-#define OID_SKGE_SENSOR_ERR_CTS 0xFF02010B
-#define OID_SKGE_SENSOR_WAR_TIME 0xFF02010C
-#define OID_SKGE_SENSOR_ERR_TIME 0xFF02010D
-
-#define OID_SKGE_CHKSM_NUMBER 0xFF020110
-#define OID_SKGE_CHKSM_RX_OK_CTS 0xFF020111
-#define OID_SKGE_CHKSM_RX_UNABLE_CTS 0xFF020112
-#define OID_SKGE_CHKSM_RX_ERR_CTS 0xFF020113
-#define OID_SKGE_CHKSM_TX_OK_CTS 0xFF020114
-#define OID_SKGE_CHKSM_TX_UNABLE_CTS 0xFF020115
-
-#define OID_SKGE_STAT_TX 0xFF020120
-#define OID_SKGE_STAT_TX_OCTETS 0xFF020121
-#define OID_SKGE_STAT_TX_BROADCAST 0xFF020122
-#define OID_SKGE_STAT_TX_MULTICAST 0xFF020123
-#define OID_SKGE_STAT_TX_UNICAST 0xFF020124
-#define OID_SKGE_STAT_TX_LONGFRAMES 0xFF020125
-#define OID_SKGE_STAT_TX_BURST 0xFF020126
-#define OID_SKGE_STAT_TX_PFLOWC 0xFF020127
-#define OID_SKGE_STAT_TX_FLOWC 0xFF020128
-#define OID_SKGE_STAT_TX_SINGLE_COL 0xFF020129
-#define OID_SKGE_STAT_TX_MULTI_COL 0xFF02012A
-#define OID_SKGE_STAT_TX_EXCESS_COL 0xFF02012B
-#define OID_SKGE_STAT_TX_LATE_COL 0xFF02012C
-#define OID_SKGE_STAT_TX_DEFFERAL 0xFF02012D
-#define OID_SKGE_STAT_TX_EXCESS_DEF 0xFF02012E
-#define OID_SKGE_STAT_TX_UNDERRUN 0xFF02012F
-#define OID_SKGE_STAT_TX_CARRIER 0xFF020130
-/* #define OID_SKGE_STAT_TX_UTIL 0xFF020131 */
-#define OID_SKGE_STAT_TX_64 0xFF020132
-#define OID_SKGE_STAT_TX_127 0xFF020133
-#define OID_SKGE_STAT_TX_255 0xFF020134
-#define OID_SKGE_STAT_TX_511 0xFF020135
-#define OID_SKGE_STAT_TX_1023 0xFF020136
-#define OID_SKGE_STAT_TX_MAX 0xFF020137
-#define OID_SKGE_STAT_TX_SYNC 0xFF020138
-#define OID_SKGE_STAT_TX_SYNC_OCTETS 0xFF020139
-#define OID_SKGE_STAT_RX 0xFF02013A
-#define OID_SKGE_STAT_RX_OCTETS 0xFF02013B
-#define OID_SKGE_STAT_RX_BROADCAST 0xFF02013C
-#define OID_SKGE_STAT_RX_MULTICAST 0xFF02013D
-#define OID_SKGE_STAT_RX_UNICAST 0xFF02013E
-#define OID_SKGE_STAT_RX_PFLOWC 0xFF02013F
-#define OID_SKGE_STAT_RX_FLOWC 0xFF020140
-#define OID_SKGE_STAT_RX_PFLOWC_ERR 0xFF020141
-#define OID_SKGE_STAT_RX_FLOWC_UNKWN 0xFF020142
-#define OID_SKGE_STAT_RX_BURST 0xFF020143
-#define OID_SKGE_STAT_RX_MISSED 0xFF020144
-#define OID_SKGE_STAT_RX_FRAMING 0xFF020145
-#define OID_SKGE_STAT_RX_OVERFLOW 0xFF020146
-#define OID_SKGE_STAT_RX_JABBER 0xFF020147
-#define OID_SKGE_STAT_RX_CARRIER 0xFF020148
-#define OID_SKGE_STAT_RX_IR_LENGTH 0xFF020149
-#define OID_SKGE_STAT_RX_SYMBOL 0xFF02014A
-#define OID_SKGE_STAT_RX_SHORTS 0xFF02014B
-#define OID_SKGE_STAT_RX_RUNT 0xFF02014C
-#define OID_SKGE_STAT_RX_CEXT 0xFF02014D
-#define OID_SKGE_STAT_RX_TOO_LONG 0xFF02014E
-#define OID_SKGE_STAT_RX_FCS 0xFF02014F
-/* #define OID_SKGE_STAT_RX_UTIL 0xFF020150 */
-#define OID_SKGE_STAT_RX_64 0xFF020151
-#define OID_SKGE_STAT_RX_127 0xFF020152
-#define OID_SKGE_STAT_RX_255 0xFF020153
-#define OID_SKGE_STAT_RX_511 0xFF020154
-#define OID_SKGE_STAT_RX_1023 0xFF020155
-#define OID_SKGE_STAT_RX_MAX 0xFF020156
-#define OID_SKGE_STAT_RX_LONGFRAMES 0xFF020157
-
-#define OID_SKGE_RLMT_CHANGE_CTS 0xFF020160
-#define OID_SKGE_RLMT_CHANGE_TIME 0xFF020161
-#define OID_SKGE_RLMT_CHANGE_ESTIM 0xFF020162
-#define OID_SKGE_RLMT_CHANGE_THRES 0xFF020163
-
-#define OID_SKGE_RLMT_PORT_INDEX 0xFF020164
-#define OID_SKGE_RLMT_STATUS 0xFF020165
-#define OID_SKGE_RLMT_TX_HELLO_CTS 0xFF020166
-#define OID_SKGE_RLMT_RX_HELLO_CTS 0xFF020167
-#define OID_SKGE_RLMT_TX_SP_REQ_CTS 0xFF020168
-#define OID_SKGE_RLMT_RX_SP_CTS 0xFF020169
-
-#define OID_SKGE_RLMT_MONITOR_NUMBER 0xFF010150
-#define OID_SKGE_RLMT_MONITOR_INDEX 0xFF010151
-#define OID_SKGE_RLMT_MONITOR_ADDR 0xFF010152
-#define OID_SKGE_RLMT_MONITOR_ERRS 0xFF010153
-#define OID_SKGE_RLMT_MONITOR_TIMESTAMP 0xFF010154
-#define OID_SKGE_RLMT_MONITOR_ADMIN 0xFF010155
-
-#define OID_SKGE_TX_SW_QUEUE_LEN 0xFF020170
-#define OID_SKGE_TX_SW_QUEUE_MAX 0xFF020171
-#define OID_SKGE_TX_RETRY 0xFF020172
-#define OID_SKGE_RX_INTR_CTS 0xFF020173
-#define OID_SKGE_TX_INTR_CTS 0xFF020174
-#define OID_SKGE_RX_NO_BUF_CTS 0xFF020175
-#define OID_SKGE_TX_NO_BUF_CTS 0xFF020176
-#define OID_SKGE_TX_USED_DESCR_NO 0xFF020177
-#define OID_SKGE_RX_DELIVERED_CTS 0xFF020178
-#define OID_SKGE_RX_OCTETS_DELIV_CTS 0xFF020179
-#define OID_SKGE_RX_HW_ERROR_CTS 0xFF02017A
-#define OID_SKGE_TX_HW_ERROR_CTS 0xFF02017B
-#define OID_SKGE_IN_ERRORS_CTS 0xFF02017C
-#define OID_SKGE_OUT_ERROR_CTS 0xFF02017D
-#define OID_SKGE_ERR_RECOVERY_CTS 0xFF02017E
-#define OID_SKGE_SYSUPTIME 0xFF02017F
-
-#define OID_SKGE_ALL_DATA 0xFF020190
-
-/* Defines for VCT. */
-#define OID_SKGE_VCT_GET 0xFF020200
-#define OID_SKGE_VCT_SET 0xFF020201
-#define OID_SKGE_VCT_STATUS 0xFF020202
-
-
-/* VCT struct to store a backup copy of VCT data after a port reset. */
-typedef struct s_PnmiVct {
- SK_U8 VctStatus;
- SK_U8 PCableLen;
- SK_U32 PMdiPairLen[4];
- SK_U8 PMdiPairSts[4];
-} SK_PNMI_VCT;
-
-
-/* VCT status values (to be given to CPA via OID_SKGE_VCT_STATUS). */
-#define SK_PNMI_VCT_NONE 0
-#define SK_PNMI_VCT_OLD_VCT_DATA 1
-#define SK_PNMI_VCT_NEW_VCT_DATA 2
-#define SK_PNMI_VCT_OLD_DSP_DATA 4
-#define SK_PNMI_VCT_NEW_DSP_DATA 8
-#define SK_PNMI_VCT_RUNNING 16
-
-
-/* VCT cable test status. */
-#define SK_PNMI_VCT_NORMAL_CABLE 0
-#define SK_PNMI_VCT_SHORT_CABLE 1
-#define SK_PNMI_VCT_OPEN_CABLE 2
-#define SK_PNMI_VCT_TEST_FAIL 3
-#define SK_PNMI_VCT_IMPEDANCE_MISMATCH 4
-
-#define OID_SKGE_TRAP_SEN_WAR_LOW 500
-#define OID_SKGE_TRAP_SEN_WAR_UPP 501
-#define OID_SKGE_TRAP_SEN_ERR_LOW 502
-#define OID_SKGE_TRAP_SEN_ERR_UPP 503
-#define OID_SKGE_TRAP_RLMT_CHANGE_THRES 520
-#define OID_SKGE_TRAP_RLMT_CHANGE_PORT 521
-#define OID_SKGE_TRAP_RLMT_PORT_DOWN 522
-#define OID_SKGE_TRAP_RLMT_PORT_UP 523
-#define OID_SKGE_TRAP_RLMT_SEGMENTATION 524
-
-
-/*
- * Define error numbers and messages for syslog
- */
-#define SK_PNMI_ERR001 (SK_ERRBASE_PNMI + 1)
-#define SK_PNMI_ERR001MSG "SkPnmiGetStruct: Unknown OID"
-#define SK_PNMI_ERR002 (SK_ERRBASE_PNMI + 2)
-#define SK_PNMI_ERR002MSG "SkPnmiGetStruct: Cannot read VPD keys"
-#define SK_PNMI_ERR003 (SK_ERRBASE_PNMI + 3)
-#define SK_PNMI_ERR003MSG "OidStruct: Called with wrong OID"
-#define SK_PNMI_ERR004 (SK_ERRBASE_PNMI + 4)
-#define SK_PNMI_ERR004MSG "OidStruct: Called with wrong action"
-#define SK_PNMI_ERR005 (SK_ERRBASE_PNMI + 5)
-#define SK_PNMI_ERR005MSG "Perform: Cannot reset driver"
-#define SK_PNMI_ERR006 (SK_ERRBASE_PNMI + 6)
-#define SK_PNMI_ERR006MSG "Perform: Unknown OID action command"
-#define SK_PNMI_ERR007 (SK_ERRBASE_PNMI + 7)
-#define SK_PNMI_ERR007MSG "General: Driver description not initialized"
-#define SK_PNMI_ERR008 (SK_ERRBASE_PNMI + 8)
-#define SK_PNMI_ERR008MSG "Addr: Tried to get unknown OID"
-#define SK_PNMI_ERR009 (SK_ERRBASE_PNMI + 9)
-#define SK_PNMI_ERR009MSG "Addr: Unknown OID"
-#define SK_PNMI_ERR010 (SK_ERRBASE_PNMI + 10)
-#define SK_PNMI_ERR010MSG "CsumStat: Unknown OID"
-#define SK_PNMI_ERR011 (SK_ERRBASE_PNMI + 11)
-#define SK_PNMI_ERR011MSG "SensorStat: Sensor descr string too long"
-#define SK_PNMI_ERR012 (SK_ERRBASE_PNMI + 12)
-#define SK_PNMI_ERR012MSG "SensorStat: Unknown OID"
-#define SK_PNMI_ERR013 (SK_ERRBASE_PNMI + 13)
-#define SK_PNMI_ERR013MSG ""
-#define SK_PNMI_ERR014 (SK_ERRBASE_PNMI + 14)
-#define SK_PNMI_ERR014MSG "Vpd: Cannot read VPD keys"
-#define SK_PNMI_ERR015 (SK_ERRBASE_PNMI + 15)
-#define SK_PNMI_ERR015MSG "Vpd: Internal array for VPD keys to small"
-#define SK_PNMI_ERR016 (SK_ERRBASE_PNMI + 16)
-#define SK_PNMI_ERR016MSG "Vpd: Key string too long"
-#define SK_PNMI_ERR017 (SK_ERRBASE_PNMI + 17)
-#define SK_PNMI_ERR017MSG "Vpd: Invalid VPD status pointer"
-#define SK_PNMI_ERR018 (SK_ERRBASE_PNMI + 18)
-#define SK_PNMI_ERR018MSG "Vpd: VPD data not valid"
-#define SK_PNMI_ERR019 (SK_ERRBASE_PNMI + 19)
-#define SK_PNMI_ERR019MSG "Vpd: VPD entries list string too long"
-#define SK_PNMI_ERR021 (SK_ERRBASE_PNMI + 21)
-#define SK_PNMI_ERR021MSG "Vpd: VPD data string too long"
-#define SK_PNMI_ERR022 (SK_ERRBASE_PNMI + 22)
-#define SK_PNMI_ERR022MSG "Vpd: VPD data string too long should be errored before"
-#define SK_PNMI_ERR023 (SK_ERRBASE_PNMI + 23)
-#define SK_PNMI_ERR023MSG "Vpd: Unknown OID in get action"
-#define SK_PNMI_ERR024 (SK_ERRBASE_PNMI + 24)
-#define SK_PNMI_ERR024MSG "Vpd: Unknown OID in preset/set action"
-#define SK_PNMI_ERR025 (SK_ERRBASE_PNMI + 25)
-#define SK_PNMI_ERR025MSG "Vpd: Cannot write VPD after modify entry"
-#define SK_PNMI_ERR026 (SK_ERRBASE_PNMI + 26)
-#define SK_PNMI_ERR026MSG "Vpd: Cannot update VPD"
-#define SK_PNMI_ERR027 (SK_ERRBASE_PNMI + 27)
-#define SK_PNMI_ERR027MSG "Vpd: Cannot delete VPD entry"
-#define SK_PNMI_ERR028 (SK_ERRBASE_PNMI + 28)
-#define SK_PNMI_ERR028MSG "Vpd: Cannot update VPD after delete entry"
-#define SK_PNMI_ERR029 (SK_ERRBASE_PNMI + 29)
-#define SK_PNMI_ERR029MSG "General: Driver description string too long"
-#define SK_PNMI_ERR030 (SK_ERRBASE_PNMI + 30)
-#define SK_PNMI_ERR030MSG "General: Driver version not initialized"
-#define SK_PNMI_ERR031 (SK_ERRBASE_PNMI + 31)
-#define SK_PNMI_ERR031MSG "General: Driver version string too long"
-#define SK_PNMI_ERR032 (SK_ERRBASE_PNMI + 32)
-#define SK_PNMI_ERR032MSG "General: Cannot read VPD Name for HW descr"
-#define SK_PNMI_ERR033 (SK_ERRBASE_PNMI + 33)
-#define SK_PNMI_ERR033MSG "General: HW description string too long"
-#define SK_PNMI_ERR034 (SK_ERRBASE_PNMI + 34)
-#define SK_PNMI_ERR034MSG "General: Unknown OID"
-#define SK_PNMI_ERR035 (SK_ERRBASE_PNMI + 35)
-#define SK_PNMI_ERR035MSG "Rlmt: Unknown OID"
-#define SK_PNMI_ERR036 (SK_ERRBASE_PNMI + 36)
-#define SK_PNMI_ERR036MSG ""
-#define SK_PNMI_ERR037 (SK_ERRBASE_PNMI + 37)
-#define SK_PNMI_ERR037MSG "Rlmt: SK_RLMT_MODE_CHANGE event return not 0"
-#define SK_PNMI_ERR038 (SK_ERRBASE_PNMI + 38)
-#define SK_PNMI_ERR038MSG "Rlmt: SK_RLMT_PREFPORT_CHANGE event return not 0"
-#define SK_PNMI_ERR039 (SK_ERRBASE_PNMI + 39)
-#define SK_PNMI_ERR039MSG "RlmtStat: Unknown OID"
-#define SK_PNMI_ERR040 (SK_ERRBASE_PNMI + 40)
-#define SK_PNMI_ERR040MSG "PowerManagement: Unknown OID"
-#define SK_PNMI_ERR041 (SK_ERRBASE_PNMI + 41)
-#define SK_PNMI_ERR041MSG "MacPrivateConf: Unknown OID"
-#define SK_PNMI_ERR042 (SK_ERRBASE_PNMI + 42)
-#define SK_PNMI_ERR042MSG "MacPrivateConf: SK_HWEV_SET_ROLE returned not 0"
-#define SK_PNMI_ERR043 (SK_ERRBASE_PNMI + 43)
-#define SK_PNMI_ERR043MSG "MacPrivateConf: SK_HWEV_SET_LMODE returned not 0"
-#define SK_PNMI_ERR044 (SK_ERRBASE_PNMI + 44)
-#define SK_PNMI_ERR044MSG "MacPrivateConf: SK_HWEV_SET_FLOWMODE returned not 0"
-#define SK_PNMI_ERR045 (SK_ERRBASE_PNMI + 45)
-#define SK_PNMI_ERR045MSG "MacPrivateConf: SK_HWEV_SET_SPEED returned not 0"
-#define SK_PNMI_ERR046 (SK_ERRBASE_PNMI + 46)
-#define SK_PNMI_ERR046MSG "Monitor: Unknown OID"
-#define SK_PNMI_ERR047 (SK_ERRBASE_PNMI + 47)
-#define SK_PNMI_ERR047MSG "SirqUpdate: Event function returns not 0"
-#define SK_PNMI_ERR048 (SK_ERRBASE_PNMI + 48)
-#define SK_PNMI_ERR048MSG "RlmtUpdate: Event function returns not 0"
-#define SK_PNMI_ERR049 (SK_ERRBASE_PNMI + 49)
-#define SK_PNMI_ERR049MSG "SkPnmiInit: Invalid size of 'CounterOffset' struct!!"
-#define SK_PNMI_ERR050 (SK_ERRBASE_PNMI + 50)
-#define SK_PNMI_ERR050MSG "SkPnmiInit: Invalid size of 'StatAddr' table!!"
-#define SK_PNMI_ERR051 (SK_ERRBASE_PNMI + 51)
-#define SK_PNMI_ERR051MSG "SkPnmiEvent: Port switch suspicious"
-#define SK_PNMI_ERR052 (SK_ERRBASE_PNMI + 52)
-#define SK_PNMI_ERR052MSG ""
-
-/*
- * Management counter macros called by the driver
- */
-#define SK_PNMI_SET_DRIVER_DESCR(pAC,v) ((pAC)->Pnmi.pDriverDescription = \
- (char *)(v))
-
-#define SK_PNMI_SET_DRIVER_VER(pAC,v) ((pAC)->Pnmi.pDriverVersion = \
- (char *)(v))
-
-
-#define SK_PNMI_CNT_TX_QUEUE_LEN(pAC,v,p) \
- { \
- (pAC)->Pnmi.Port[p].TxSwQueueLen = (SK_U64)(v); \
- if ((pAC)->Pnmi.Port[p].TxSwQueueLen > (pAC)->Pnmi.Port[p].TxSwQueueMax) { \
- (pAC)->Pnmi.Port[p].TxSwQueueMax = (pAC)->Pnmi.Port[p].TxSwQueueLen; \
- } \
- }
-#define SK_PNMI_CNT_TX_RETRY(pAC,p) (((pAC)->Pnmi.Port[p].TxRetryCts)++)
-#define SK_PNMI_CNT_RX_INTR(pAC,p) (((pAC)->Pnmi.Port[p].RxIntrCts)++)
-#define SK_PNMI_CNT_TX_INTR(pAC,p) (((pAC)->Pnmi.Port[p].TxIntrCts)++)
-#define SK_PNMI_CNT_NO_RX_BUF(pAC,p) (((pAC)->Pnmi.Port[p].RxNoBufCts)++)
-#define SK_PNMI_CNT_NO_TX_BUF(pAC,p) (((pAC)->Pnmi.Port[p].TxNoBufCts)++)
-#define SK_PNMI_CNT_USED_TX_DESCR(pAC,v,p) \
- ((pAC)->Pnmi.Port[p].TxUsedDescrNo=(SK_U64)(v));
-#define SK_PNMI_CNT_RX_OCTETS_DELIVERED(pAC,v,p) \
- { \
- ((pAC)->Pnmi.Port[p].RxDeliveredCts)++; \
- (pAC)->Pnmi.Port[p].RxOctetsDeliveredCts += (SK_U64)(v); \
- }
-#define SK_PNMI_CNT_ERR_RECOVERY(pAC,p) (((pAC)->Pnmi.Port[p].ErrRecoveryCts)++);
-
-#define SK_PNMI_CNT_SYNC_OCTETS(pAC,p,v) \
- { \
- if ((p) < SK_MAX_MACS) { \
- ((pAC)->Pnmi.Port[p].StatSyncCts)++; \
- (pAC)->Pnmi.Port[p].StatSyncOctetsCts += (SK_U64)(v); \
- } \
- }
-
-#define SK_PNMI_CNT_RX_LONGFRAMES(pAC,p) \
- { \
- if ((p) < SK_MAX_MACS) { \
- ((pAC)->Pnmi.Port[p].StatRxLongFrameCts++); \
- } \
- }
-
-#define SK_PNMI_CNT_RX_FRAMETOOLONG(pAC,p) \
- { \
- if ((p) < SK_MAX_MACS) { \
- ((pAC)->Pnmi.Port[p].StatRxFrameTooLongCts++); \
- } \
- }
-
-#define SK_PNMI_CNT_RX_PMACC_ERR(pAC,p) \
- { \
- if ((p) < SK_MAX_MACS) { \
- ((pAC)->Pnmi.Port[p].StatRxPMaccErr++); \
- } \
- }
-
-/*
- * Conversion Macros
- */
-#define SK_PNMI_PORT_INST2LOG(i) ((unsigned int)(i) - 1)
-#define SK_PNMI_PORT_LOG2INST(l) ((unsigned int)(l) + 1)
-#define SK_PNMI_PORT_PHYS2LOG(p) ((unsigned int)(p) + 1)
-#define SK_PNMI_PORT_LOG2PHYS(pAC,l) ((unsigned int)(l) - 1)
-#define SK_PNMI_PORT_PHYS2INST(pAC,p) \
- (pAC->Pnmi.DualNetActiveFlag ? 2 : ((unsigned int)(p) + 2))
-#define SK_PNMI_PORT_INST2PHYS(pAC,i) ((unsigned int)(i) - 2)
-
-/*
- * Structure definition for SkPnmiGetStruct and SkPnmiSetStruct
- */
-#define SK_PNMI_VPD_KEY_SIZE 5
-#define SK_PNMI_VPD_BUFSIZE (VPD_SIZE)
-#define SK_PNMI_VPD_ENTRIES (VPD_SIZE / 4)
-#define SK_PNMI_VPD_DATALEN 128 /* Number of data bytes */
-
-#define SK_PNMI_MULTICAST_LISTLEN 64
-#define SK_PNMI_SENSOR_ENTRIES (SK_MAX_SENSORS)
-#define SK_PNMI_CHECKSUM_ENTRIES 3
-#define SK_PNMI_MAC_ENTRIES (SK_MAX_MACS + 1)
-#define SK_PNMI_MONITOR_ENTRIES 20
-#define SK_PNMI_TRAP_ENTRIES 10
-#define SK_PNMI_TRAPLEN 128
-#define SK_PNMI_STRINGLEN1 80
-#define SK_PNMI_STRINGLEN2 25
-#define SK_PNMI_TRAP_QUEUE_LEN 512
-
-typedef struct s_PnmiVpd {
- char VpdKey[SK_PNMI_VPD_KEY_SIZE];
- char VpdValue[SK_PNMI_VPD_DATALEN];
- SK_U8 VpdAccess;
- SK_U8 VpdAction;
-} SK_PNMI_VPD;
-
-typedef struct s_PnmiSensor {
- SK_U8 SensorIndex;
- char SensorDescr[SK_PNMI_STRINGLEN2];
- SK_U8 SensorType;
- SK_U32 SensorValue;
- SK_U32 SensorWarningThresholdLow;
- SK_U32 SensorWarningThresholdHigh;
- SK_U32 SensorErrorThresholdLow;
- SK_U32 SensorErrorThresholdHigh;
- SK_U8 SensorStatus;
- SK_U64 SensorWarningCts;
- SK_U64 SensorErrorCts;
- SK_U64 SensorWarningTimestamp;
- SK_U64 SensorErrorTimestamp;
-} SK_PNMI_SENSOR;
-
-typedef struct s_PnmiChecksum {
- SK_U64 ChecksumRxOkCts;
- SK_U64 ChecksumRxUnableCts;
- SK_U64 ChecksumRxErrCts;
- SK_U64 ChecksumTxOkCts;
- SK_U64 ChecksumTxUnableCts;
-} SK_PNMI_CHECKSUM;
-
-typedef struct s_PnmiStat {
- SK_U64 StatTxOkCts;
- SK_U64 StatTxOctetsOkCts;
- SK_U64 StatTxBroadcastOkCts;
- SK_U64 StatTxMulticastOkCts;
- SK_U64 StatTxUnicastOkCts;
- SK_U64 StatTxLongFramesCts;
- SK_U64 StatTxBurstCts;
- SK_U64 StatTxPauseMacCtrlCts;
- SK_U64 StatTxMacCtrlCts;
- SK_U64 StatTxSingleCollisionCts;
- SK_U64 StatTxMultipleCollisionCts;
- SK_U64 StatTxExcessiveCollisionCts;
- SK_U64 StatTxLateCollisionCts;
- SK_U64 StatTxDeferralCts;
- SK_U64 StatTxExcessiveDeferralCts;
- SK_U64 StatTxFifoUnderrunCts;
- SK_U64 StatTxCarrierCts;
- SK_U64 Dummy1; /* StatTxUtilization */
- SK_U64 StatTx64Cts;
- SK_U64 StatTx127Cts;
- SK_U64 StatTx255Cts;
- SK_U64 StatTx511Cts;
- SK_U64 StatTx1023Cts;
- SK_U64 StatTxMaxCts;
- SK_U64 StatTxSyncCts;
- SK_U64 StatTxSyncOctetsCts;
- SK_U64 StatRxOkCts;
- SK_U64 StatRxOctetsOkCts;
- SK_U64 StatRxBroadcastOkCts;
- SK_U64 StatRxMulticastOkCts;
- SK_U64 StatRxUnicastOkCts;
- SK_U64 StatRxLongFramesCts;
- SK_U64 StatRxPauseMacCtrlCts;
- SK_U64 StatRxMacCtrlCts;
- SK_U64 StatRxPauseMacCtrlErrorCts;
- SK_U64 StatRxMacCtrlUnknownCts;
- SK_U64 StatRxBurstCts;
- SK_U64 StatRxMissedCts;
- SK_U64 StatRxFramingCts;
- SK_U64 StatRxFifoOverflowCts;
- SK_U64 StatRxJabberCts;
- SK_U64 StatRxCarrierCts;
- SK_U64 StatRxIRLengthCts;
- SK_U64 StatRxSymbolCts;
- SK_U64 StatRxShortsCts;
- SK_U64 StatRxRuntCts;
- SK_U64 StatRxCextCts;
- SK_U64 StatRxTooLongCts;
- SK_U64 StatRxFcsCts;
- SK_U64 Dummy2; /* StatRxUtilization */
- SK_U64 StatRx64Cts;
- SK_U64 StatRx127Cts;
- SK_U64 StatRx255Cts;
- SK_U64 StatRx511Cts;
- SK_U64 StatRx1023Cts;
- SK_U64 StatRxMaxCts;
-} SK_PNMI_STAT;
-
-typedef struct s_PnmiConf {
- char ConfMacCurrentAddr[6];
- char ConfMacFactoryAddr[6];
- SK_U8 ConfPMD;
- SK_U8 ConfConnector;
- SK_U8 ConfLinkCapability;
- SK_U8 ConfLinkMode;
- SK_U8 ConfLinkModeStatus;
- SK_U8 ConfLinkStatus;
- SK_U8 ConfFlowCtrlCapability;
- SK_U8 ConfFlowCtrlMode;
- SK_U8 ConfFlowCtrlStatus;
- SK_U8 ConfPhyOperationCapability;
- SK_U8 ConfPhyOperationMode;
- SK_U8 ConfPhyOperationStatus;
- SK_U8 ConfSpeedCapability;
- SK_U8 ConfSpeedMode;
- SK_U8 ConfSpeedStatus;
-} SK_PNMI_CONF;
-
-typedef struct s_PnmiRlmt {
- SK_U32 RlmtIndex;
- SK_U32 RlmtStatus;
- SK_U64 RlmtTxHelloCts;
- SK_U64 RlmtRxHelloCts;
- SK_U64 RlmtTxSpHelloReqCts;
- SK_U64 RlmtRxSpHelloCts;
-} SK_PNMI_RLMT;
-
-typedef struct s_PnmiRlmtMonitor {
- SK_U32 RlmtMonitorIndex;
- char RlmtMonitorAddr[6];
- SK_U64 RlmtMonitorErrorCts;
- SK_U64 RlmtMonitorTimestamp;
- SK_U8 RlmtMonitorAdmin;
-} SK_PNMI_RLMT_MONITOR;
-
-typedef struct s_PnmiRequestStatus {
- SK_U32 ErrorStatus;
- SK_U32 ErrorOffset;
-} SK_PNMI_REQUEST_STATUS;
-
-typedef struct s_PnmiStrucData {
- SK_U32 MgmtDBVersion;
- SK_PNMI_REQUEST_STATUS ReturnStatus;
- SK_U32 VpdFreeBytes;
- char VpdEntriesList[SK_PNMI_VPD_ENTRIES * SK_PNMI_VPD_KEY_SIZE];
- SK_U32 VpdEntriesNumber;
- SK_PNMI_VPD Vpd[SK_PNMI_VPD_ENTRIES];
- SK_U32 PortNumber;
- SK_U32 DeviceType;
- char DriverDescr[SK_PNMI_STRINGLEN1];
- char DriverVersion[SK_PNMI_STRINGLEN2];
- char HwDescr[SK_PNMI_STRINGLEN1];
- char HwVersion[SK_PNMI_STRINGLEN2];
- SK_U16 Chipset;
- SK_U32 MtuSize;
- SK_U32 Action;
- SK_U32 TestResult;
- SK_U8 BusType;
- SK_U8 BusSpeed;
- SK_U8 BusWidth;
- SK_U8 SensorNumber;
- SK_PNMI_SENSOR Sensor[SK_PNMI_SENSOR_ENTRIES];
- SK_U8 ChecksumNumber;
- SK_PNMI_CHECKSUM Checksum[SK_PNMI_CHECKSUM_ENTRIES];
- SK_PNMI_STAT Stat[SK_PNMI_MAC_ENTRIES];
- SK_PNMI_CONF Conf[SK_PNMI_MAC_ENTRIES];
- SK_U8 RlmtMode;
- SK_U32 RlmtPortNumber;
- SK_U8 RlmtPortActive;
- SK_U8 RlmtPortPreferred;
- SK_U64 RlmtChangeCts;
- SK_U64 RlmtChangeTime;
- SK_U64 RlmtChangeEstimate;
- SK_U64 RlmtChangeThreshold;
- SK_PNMI_RLMT Rlmt[SK_MAX_MACS];
- SK_U32 RlmtMonitorNumber;
- SK_PNMI_RLMT_MONITOR RlmtMonitor[SK_PNMI_MONITOR_ENTRIES];
- SK_U32 TrapNumber;
- SK_U8 Trap[SK_PNMI_TRAP_QUEUE_LEN];
- SK_U64 TxSwQueueLen;
- SK_U64 TxSwQueueMax;
- SK_U64 TxRetryCts;
- SK_U64 RxIntrCts;
- SK_U64 TxIntrCts;
- SK_U64 RxNoBufCts;
- SK_U64 TxNoBufCts;
- SK_U64 TxUsedDescrNo;
- SK_U64 RxDeliveredCts;
- SK_U64 RxOctetsDeliveredCts;
- SK_U64 RxHwErrorsCts;
- SK_U64 TxHwErrorsCts;
- SK_U64 InErrorsCts;
- SK_U64 OutErrorsCts;
- SK_U64 ErrRecoveryCts;
- SK_U64 SysUpTime;
-} SK_PNMI_STRUCT_DATA;
-
-#define SK_PNMI_STRUCT_SIZE (sizeof(SK_PNMI_STRUCT_DATA))
-#define SK_PNMI_MIN_STRUCT_SIZE ((unsigned int)(SK_UPTR)\
- &(((SK_PNMI_STRUCT_DATA *)0)->VpdFreeBytes))
- /*
- * ReturnStatus field
- * must be located
- * before VpdFreeBytes
- */
-
-/*
- * Various definitions
- */
-#define SK_PNMI_MAX_PROTOS 3
-
-#define SK_PNMI_CNT_NO 66 /* Must have the value of the enum
- * SK_PNMI_MAX_IDX. Define SK_PNMI_CHECK
- * for check while init phase 1
- */
-
-/*
- * Estimate data structure
- */
-typedef struct s_PnmiEstimate {
- unsigned int EstValueIndex;
- SK_U64 EstValue[7];
- SK_U64 Estimate;
- SK_TIMER EstTimer;
-} SK_PNMI_ESTIMATE;
-
-
-/*
- * VCT timer data structure
- */
-typedef struct s_VctTimer {
- SK_TIMER VctTimer;
-} SK_PNMI_VCT_TIMER;
-
-
-/*
- * PNMI specific adapter context structure
- */
-typedef struct s_PnmiPort {
- SK_U64 StatSyncCts;
- SK_U64 StatSyncOctetsCts;
- SK_U64 StatRxLongFrameCts;
- SK_U64 StatRxFrameTooLongCts;
- SK_U64 StatRxPMaccErr;
- SK_U64 TxSwQueueLen;
- SK_U64 TxSwQueueMax;
- SK_U64 TxRetryCts;
- SK_U64 RxIntrCts;
- SK_U64 TxIntrCts;
- SK_U64 RxNoBufCts;
- SK_U64 TxNoBufCts;
- SK_U64 TxUsedDescrNo;
- SK_U64 RxDeliveredCts;
- SK_U64 RxOctetsDeliveredCts;
- SK_U64 RxHwErrorsCts;
- SK_U64 TxHwErrorsCts;
- SK_U64 InErrorsCts;
- SK_U64 OutErrorsCts;
- SK_U64 ErrRecoveryCts;
- SK_U64 RxShortZeroMark;
- SK_U64 CounterOffset[SK_PNMI_CNT_NO];
- SK_U32 CounterHigh[SK_PNMI_CNT_NO];
- SK_BOOL ActiveFlag;
- SK_U8 Align[3];
-} SK_PNMI_PORT;
-
-
-typedef struct s_PnmiData {
- SK_PNMI_PORT Port [SK_MAX_MACS];
- SK_PNMI_PORT BufPort [SK_MAX_MACS]; /* 2002-09-13 pweber */
- SK_U64 VirtualCounterOffset[SK_PNMI_CNT_NO];
- SK_U32 TestResult;
- char HwVersion[10];
- SK_U16 Align01;
-
- char *pDriverDescription;
- char *pDriverVersion;
-
- int MacUpdatedFlag;
- int RlmtUpdatedFlag;
- int SirqUpdatedFlag;
-
- SK_U64 RlmtChangeCts;
- SK_U64 RlmtChangeTime;
- SK_PNMI_ESTIMATE RlmtChangeEstimate;
- SK_U64 RlmtChangeThreshold;
-
- SK_U64 StartUpTime;
- SK_U32 DeviceType;
- char PciBusSpeed;
- char PciBusWidth;
- char Chipset;
- char PMD;
- char Connector;
- SK_BOOL DualNetActiveFlag;
- SK_U16 Align02;
-
- char TrapBuf[SK_PNMI_TRAP_QUEUE_LEN];
- unsigned int TrapBufFree;
- unsigned int TrapQueueBeg;
- unsigned int TrapQueueEnd;
- unsigned int TrapBufPad;
- unsigned int TrapUnique;
- SK_U8 VctStatus[SK_MAX_MACS];
- SK_PNMI_VCT VctBackup[SK_MAX_MACS];
- SK_PNMI_VCT_TIMER VctTimeout[SK_MAX_MACS];
-} SK_PNMI;
-
-/*
- * Function prototypes
- */
-extern int SkPnmiInit(SK_AC *pAc, SK_IOC IoC, int level);
-extern int SkPnmiGetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id, void* pBuf,
- unsigned int* pLen, SK_U32 Instance, SK_U32 NetIndex);
-extern int SkPnmiPreSetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id,
- void* pBuf, unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
-extern int SkPnmiSetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id, void* pBuf,
- unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
-extern int SkPnmiGetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
- unsigned int *pLen, SK_U32 NetIndex);
-extern int SkPnmiPreSetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
- unsigned int *pLen, SK_U32 NetIndex);
-extern int SkPnmiSetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
- unsigned int *pLen, SK_U32 NetIndex);
-extern int SkPnmiEvent(SK_AC *pAc, SK_IOC IoC, SK_U32 Event,
- SK_EVPARA Param);
-
-#endif
+/*****************************************************************************
+ *
+ * Name: skgepnmi.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Defines for Private Network Management Interface
+ *
+ ****************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2001 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/*****************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgepnmi.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.59 2002/12/16 14:03:50 tschilli
+ * New defines for VCT added.
+ *
+ * Revision 1.58 2002/12/16 09:04:59 tschilli
+ * Code for VCT handling added.
+ *
+ * Revision 1.57 2002/09/26 12:41:05 tschilli
+ * SK_PNMI_PORT BufPort entry in struct SK_PNMI added.
+ *
+ * Revision 1.56 2002/08/16 11:10:41 rwahl
+ * - Replaced c++ comment.
+ *
+ * Revision 1.55 2002/08/09 15:40:21 rwahl
+ * Editorial change (renamed ConfSpeedCap).
+ *
+ * Revision 1.54 2002/08/09 11:06:07 rwahl
+ * Added OID_SKGE_SPEED_CAP.
+ *
+ * Revision 1.53 2002/08/09 09:45:28 rwahl
+ * Added support for NDIS OID_PNP_xxx.
+ * Editorial changes.
+ *
+ * Revision 1.52 2002/08/06 17:54:07 rwahl
+ * - Added speed cap to PNMI config struct.
+ *
+ * Revision 1.51 2002/07/17 19:19:26 rwahl
+ * - Added OID_SKGE_SPEED_MODE and OID_SKGE_SPEED_STATUS.
+ * - Added SK_PNMI_CNT_RX_PMACC_ERR() & SK_PNMI_CNT_RX_LONGFRAMES().
+ * - Added speed mode & status to PNMI config struct.
+ * - Editorial changes.
+ *
+ * Revision 1.50 2002/05/22 08:59:37 rwahl
+ * Added string definitions for error msgs.
+ *
+ * Revision 1.49 2001/11/20 09:23:50 rwahl
+ * - pnmi struct: reordered and aligned to 32bit.
+ *
+ * Revision 1.48 2001/02/23 14:34:24 mkunz
+ * Changed macro PHYS2INST. Added pAC to Interface
+ *
+ * Revision 1.47 2001/02/07 08:28:23 mkunz
+ * - Added Oids: OID_SKGE_DIAG_ACTION
+ * OID_SKGE_DIAG_RESULT
+ * OID_SKGE_MULTICAST_LIST
+ * OID_SKGE_CURRENT_PACKET_FILTER
+ * OID_SKGE_INTERMEDIATE_SUPPORT
+ * - Changed value of OID_SKGE_MTU
+ *
+ * Revision 1.46 2001/02/06 10:01:41 mkunz
+ * - Pnmi V4 dual net support added. Interface functions and macros extended
+ * - Vpd bug fixed
+ * - OID_SKGE_MTU added
+ *
+ * Revision 1.45 2001/01/22 13:41:37 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.44 2000/09/07 07:35:27 rwahl
+ * - removed NDIS counter specific data type.
+ * - fixed spelling for OID_SKGE_RLMT_PORT_PREFERRED.
+ *
+ * Revision 1.43 2000/08/04 11:41:08 rwahl
+ * - Fixed compiler warning (port is always >= 0) for macros
+ * SK_PNMI_CNT_RX_LONGFRAMES & SK_PNMI_CNT_SYNC_OCTETS
+ *
+ * Revision 1.42 2000/08/03 15:14:07 rwahl
+ * - Corrected error in driver macros addressing a physical port.
+ *
+ * Revision 1.41 2000/08/01 16:22:29 rwahl
+ * - Changed MDB version to 3.1.
+ * - Added definitions for StatRxLongFrames counter.
+ * - Added macro to be used by driver to count long frames received.
+ * - Added directive to control width (default = 32bit) of NDIS statistic
+ * counters (SK_NDIS_64BIT_CTR).
+ *
+ * Revision 1.40 2000/03/31 13:51:34 rwahl
+ * Added SK_UPTR cast to offset calculation for PNMI struct fields;
+ * missing cast caused compiler warnings by Win64 compiler.
+ *
+ * Revision 1.39 1999/12/06 10:09:47 rwahl
+ * Added new error log message.
+ *
+ * Revision 1.38 1999/11/22 13:57:55 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.37 1999/09/14 14:25:32 rwahl
+ * Set MDB version for 1000Base-T (sensors, Master/Slave) changes.
+ *
+ * Revision 1.36 1999/05/20 09:24:56 cgoos
+ * Changes for 1000Base-T (sensors, Master/Slave).
+ *
+ * Revision 1.35 1999/04/13 15:10:51 mhaveman
+ * Replaced RLMT macros SK_RLMT_CHECK_xxx again by those of PNMI to
+ * grant unified interface. But PNMI macros will store the same
+ * value as RLMT macros.
+ *
+ * Revision 1.34 1999/04/13 15:03:49 mhaveman
+ * -Changed copyright
+ * -Removed SK_PNMI_RLMT_MODE_CHK_xxx macros. Those of RLMT should be
+ * used.
+ *
+ * Revision 1.33 1999/03/23 10:41:02 mhaveman
+ * Changed comments.
+ *
+ * Revision 1.32 1999/01/25 15:01:33 mhaveman
+ * Added support for multiple simultaniously active ports.
+ *
+ * Revision 1.31 1999/01/19 10:06:26 mhaveman
+ * Added new error log message.
+ *
+ * Revision 1.30 1999/01/05 10:34:49 mhaveman
+ * Fixed little error in RlmtChangeEstimate calculation.
+ *
+ * Revision 1.29 1999/01/05 09:59:41 mhaveman
+ * Redesigned port switch average calculation to avoid 64bit
+ * arithmetic.
+ *
+ * Revision 1.28 1998/12/08 10:05:48 mhaveman
+ * Defined macro SK_PNMI_MIN_STRUCT_SIZE.
+ *
+ * Revision 1.27 1998/12/03 14:39:35 mhaveman
+ * Fixed problem that LSTAT was enumerated wrong.
+ *
+ * Revision 1.26 1998/12/03 11:19:51 mhaveman
+ * Changed contents of errlog message SK_PNMI_ERR016MSG
+ *
+ * Revision 1.25 1998/12/01 10:40:04 mhaveman
+ * Changed size of SensorNumber, ChecksumNumber and RlmtPortNumber in
+ * SK_PNMI_STRUCT_DATA to be conform with OID definition.
+ *
+ * Revision 1.24 1998/11/20 08:09:27 mhaveman
+ * Added macros to convert between logical, physical port indexes and
+ * instances.
+ *
+ * Revision 1.23 1998/11/10 13:41:13 mhaveman
+ * Needed to change interface, because NT driver needs a return value
+ * of needed buffer space on TOO_SHORT errors. Therefore all
+ * SkPnmiGet/Preset/Set functions now have a pointer to the length
+ * parameter, where the needed space on error is returned.
+ *
+ * Revision 1.22 1998/11/03 12:05:51 mhaveman
+ * Added pAC parameter to counter macors.
+ *
+ * Revision 1.21 1998/11/02 10:47:36 mhaveman
+ * Added syslog messages for internal errors.
+ *
+ * Revision 1.20 1998/10/30 15:49:36 mhaveman
+ * -Removed unused SK_PNMI_UTILIZATION_BASE and EstOldCnt.
+ * -Redefined SK_PNMI_CHG_EST_BASE to hundreds of seconds.
+ *
+ * Revision 1.19 1998/10/29 15:38:44 mhaveman
+ * Changed string lengths of PNMI_STRUCT_DATA structure because
+ * string OIDs are now encoded with leading length ocetet.
+ *
+ * Revision 1.18 1998/10/29 08:52:27 mhaveman
+ * -Added byte to strings in PNMI_STRUCT_DATA structure.
+ * -Shortened SK_PNMI_RLMT structure to SK_MAX_MACS elements.
+ *
+ * Revision 1.17 1998/10/28 08:49:50 mhaveman
+ * -Changed type of Instance back to SK_U32 because of VPD
+ * -Changed type from SK_U8 to char of PciBusSpeed, PciBusWidth, PMD,
+ * and Connector.
+ *
+ * Revision 1.16 1998/10/22 10:42:31 mhaveman
+ * -Removed (SK_U32) casts for OIDs
+ * -excluded NDIS OIDs when they are already defined with ifndef _NDIS_
+ *
+ * Revision 1.15 1998/10/20 13:56:28 mhaveman
+ * Headerfile includes now directly other header files to comile correctly.
+ *
+ * Revision 1.14 1998/10/20 07:31:09 mhaveman
+ * Made type changes to unsigned int where possible.
+ *
+ * Revision 1.13 1998/10/19 10:53:13 mhaveman
+ * -Casted OID definitions to SK_U32
+ * -Renamed RlmtMAC... to RlmtPort...
+ * -Changed wrong type of VpdEntriesList from SK_U32 to char *
+ *
+ * Revision 1.12 1998/10/13 07:42:27 mhaveman
+ * -Added OIDs OID_SKGE_TRAP_NUMBER and OID_SKGE_ALL_DATA
+ * -Removed old cvs history entries
+ * -Renamed MacNumber to PortNumber
+ *
+ * Revision 1.11 1998/10/07 10:55:24 mhaveman
+ * -Added OID_MDB_VERSION. Therefore was a renumbering of the VPD OIDs
+ * necessary.
+ * -Added OID_GEN_ Ids to support the windows driver.
+ *
+ * Revision 1.10 1998/09/30 13:41:10 mhaveman
+ * Renamed some OIDs to reduce usage of 'MAC' which is replaced by 'PORT'.
+ *
+ * Revision 1.9 1998/09/04 17:06:17 mhaveman
+ * -Added SyncCounter as macro.
+ * -Renamed OID_SKGE_.._NO_DESCR_CTS to OID_SKGE_.._NO_BUF_CTS.
+ * -Added macros for driver description and version strings.
+ *
+ * Revision 1.8 1998/09/04 14:36:52 mhaveman
+ * Added OIDs and Structure to access value of macro counters which are
+ * counted by the driver.
+ *
+ * Revision 1.7 1998/09/04 11:59:36 mhaveman
+ * Everything compiles now. Driver Macros for counting still missing.
+ *
+ ****************************************************************************/
+
+#ifndef _SKGEPNMI_H_
+#define _SKGEPNMI_H_
+
+/*
+ * Include dependencies
+ */
+#include "h/sktypes.h"
+#include "h/skerror.h"
+#include "h/sktimer.h"
+#include "h/ski2c.h"
+#include "h/skaddr.h"
+#include "h/skrlmt.h"
+#include "h/skvpd.h"
+
+/*
+ * Management Database Version
+ */
+#define SK_PNMI_MDB_VERSION 0x00030001 /* 3.1 */
+
+
+/*
+ * Event definitions
+ */
+#define SK_PNMI_EVT_SIRQ_OVERFLOW 1 /* Counter overflow */
+#define SK_PNMI_EVT_SEN_WAR_LOW 2 /* Lower war thres exceeded */
+#define SK_PNMI_EVT_SEN_WAR_UPP 3 /* Upper war thres exceeded */
+#define SK_PNMI_EVT_SEN_ERR_LOW 4 /* Lower err thres exceeded */
+#define SK_PNMI_EVT_SEN_ERR_UPP 5 /* Upper err thres exceeded */
+#define SK_PNMI_EVT_CHG_EST_TIMER 6 /* Timer event for RLMT Chg */
+#define SK_PNMI_EVT_UTILIZATION_TIMER 7 /* Timer event for Utiliza. */
+#define SK_PNMI_EVT_CLEAR_COUNTER 8 /* Clear statistic counters */
+#define SK_PNMI_EVT_XMAC_RESET 9 /* XMAC will be reset */
+
+#define SK_PNMI_EVT_RLMT_PORT_UP 10 /* Port came logically up */
+#define SK_PNMI_EVT_RLMT_PORT_DOWN 11 /* Port went logically down */
+#define SK_PNMI_EVT_RLMT_SEGMENTATION 13 /* Two SP root bridges found */
+#define SK_PNMI_EVT_RLMT_ACTIVE_DOWN 14 /* Port went logically down */
+#define SK_PNMI_EVT_RLMT_ACTIVE_UP 15 /* Port came logically up */
+#define SK_PNMI_EVT_RLMT_SET_NETS 16 /* 1. Parameter is number of nets
+ 1 = single net; 2 = dual net */
+#define SK_PNMI_EVT_VCT_RESET 17 /* VCT port reset timer event started with SET. */
+
+
+/*
+ * Return values
+ */
+#define SK_PNMI_ERR_OK 0
+#define SK_PNMI_ERR_GENERAL 1
+#define SK_PNMI_ERR_TOO_SHORT 2
+#define SK_PNMI_ERR_BAD_VALUE 3
+#define SK_PNMI_ERR_READ_ONLY 4
+#define SK_PNMI_ERR_UNKNOWN_OID 5
+#define SK_PNMI_ERR_UNKNOWN_INST 6
+#define SK_PNMI_ERR_UNKNOWN_NET 7
+
+
+/*
+ * Return values of driver reset function SK_DRIVER_RESET() and
+ * driver event function SK_DRIVER_EVENT()
+ */
+#define SK_PNMI_ERR_OK 0
+#define SK_PNMI_ERR_FAIL 1
+
+
+/*
+ * Return values of driver test function SK_DRIVER_SELFTEST()
+ */
+#define SK_PNMI_TST_UNKNOWN (1 << 0)
+#define SK_PNMI_TST_TRANCEIVER (1 << 1)
+#define SK_PNMI_TST_ASIC (1 << 2)
+#define SK_PNMI_TST_SENSOR (1 << 3)
+#define SK_PNMI_TST_POWERMGMT (1 << 4)
+#define SK_PNMI_TST_PCI (1 << 5)
+#define SK_PNMI_TST_MAC (1 << 6)
+
+
+/*
+ * RLMT specific definitions
+ */
+#define SK_PNMI_RLMT_STATUS_STANDBY 1
+#define SK_PNMI_RLMT_STATUS_ACTIVE 2
+#define SK_PNMI_RLMT_STATUS_ERROR 3
+
+#define SK_PNMI_RLMT_LSTAT_PHY_DOWN 1
+#define SK_PNMI_RLMT_LSTAT_AUTONEG 2
+#define SK_PNMI_RLMT_LSTAT_LOG_DOWN 3
+#define SK_PNMI_RLMT_LSTAT_LOG_UP 4
+#define SK_PNMI_RLMT_LSTAT_INDETERMINATED 5
+
+#define SK_PNMI_RLMT_MODE_CHK_LINK (SK_RLMT_CHECK_LINK)
+#define SK_PNMI_RLMT_MODE_CHK_RX (SK_RLMT_CHECK_LOC_LINK)
+#define SK_PNMI_RLMT_MODE_CHK_SPT (SK_RLMT_CHECK_SEG)
+/* #define SK_PNMI_RLMT_MODE_CHK_EX */
+
+/*
+ * OID definition
+ */
+#ifndef _NDIS_ /* Check, whether NDIS already included OIDs */
+
+#define OID_GEN_XMIT_OK 0x00020101
+#define OID_GEN_RCV_OK 0x00020102
+#define OID_GEN_XMIT_ERROR 0x00020103
+#define OID_GEN_RCV_ERROR 0x00020104
+#define OID_GEN_RCV_NO_BUFFER 0x00020105
+
+/* #define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201 */
+#define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
+/* #define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203 */
+#define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
+/* #define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205 */
+#define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
+/* #define OID_GEN_DIRECTED_BYTES_RCV 0x00020207 */
+#define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
+/* #define OID_GEN_MULTICAST_BYTES_RCV 0x00020209 */
+#define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A
+/* #define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B */
+#define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C
+#define OID_GEN_RCV_CRC_ERROR 0x0002020D
+#define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E
+
+#define OID_802_3_PERMANENT_ADDRESS 0x01010101
+#define OID_802_3_CURRENT_ADDRESS 0x01010102
+/* #define OID_802_3_MULTICAST_LIST 0x01010103 */
+/* #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104 */
+/* #define OID_802_3_MAC_OPTIONS 0x01010105 */
+
+#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
+#define OID_802_3_XMIT_ONE_COLLISION 0x01020102
+#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
+#define OID_802_3_XMIT_DEFERRED 0x01020201
+#define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
+#define OID_802_3_RCV_OVERRUN 0x01020203
+#define OID_802_3_XMIT_UNDERRUN 0x01020204
+#define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
+#define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
+
+/*
+ * PnP and PM OIDs
+ */
+#ifdef SK_POWER_MGMT
+#define OID_PNP_CAPABILITIES 0xFD010100
+#define OID_PNP_SET_POWER 0xFD010101
+#define OID_PNP_QUERY_POWER 0xFD010102
+#define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103
+#define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104
+#define OID_PNP_ENABLE_WAKE_UP 0xFD010106
+#endif /* SK_POWER_MGMT */
+
+#endif /* _NDIS_ */
+
+#define OID_SKGE_MDB_VERSION 0xFF010100
+#define OID_SKGE_SUPPORTED_LIST 0xFF010101
+#define OID_SKGE_VPD_FREE_BYTES 0xFF010102
+#define OID_SKGE_VPD_ENTRIES_LIST 0xFF010103
+#define OID_SKGE_VPD_ENTRIES_NUMBER 0xFF010104
+#define OID_SKGE_VPD_KEY 0xFF010105
+#define OID_SKGE_VPD_VALUE 0xFF010106
+#define OID_SKGE_VPD_ACCESS 0xFF010107
+#define OID_SKGE_VPD_ACTION 0xFF010108
+
+#define OID_SKGE_PORT_NUMBER 0xFF010110
+#define OID_SKGE_DEVICE_TYPE 0xFF010111
+#define OID_SKGE_DRIVER_DESCR 0xFF010112
+#define OID_SKGE_DRIVER_VERSION 0xFF010113
+#define OID_SKGE_HW_DESCR 0xFF010114
+#define OID_SKGE_HW_VERSION 0xFF010115
+#define OID_SKGE_CHIPSET 0xFF010116
+#define OID_SKGE_ACTION 0xFF010117
+#define OID_SKGE_RESULT 0xFF010118
+#define OID_SKGE_BUS_TYPE 0xFF010119
+#define OID_SKGE_BUS_SPEED 0xFF01011A
+#define OID_SKGE_BUS_WIDTH 0xFF01011B
+/* 0xFF01011C unused */
+#define OID_SKGE_DIAG_ACTION 0xFF01011D
+#define OID_SKGE_DIAG_RESULT 0xFF01011E
+#define OID_SKGE_MTU 0xFF01011F
+#define OID_SKGE_PHYS_CUR_ADDR 0xFF010120
+#define OID_SKGE_PHYS_FAC_ADDR 0xFF010121
+#define OID_SKGE_PMD 0xFF010122
+#define OID_SKGE_CONNECTOR 0xFF010123
+#define OID_SKGE_LINK_CAP 0xFF010124
+#define OID_SKGE_LINK_MODE 0xFF010125
+#define OID_SKGE_LINK_MODE_STATUS 0xFF010126
+#define OID_SKGE_LINK_STATUS 0xFF010127
+#define OID_SKGE_FLOWCTRL_CAP 0xFF010128
+#define OID_SKGE_FLOWCTRL_MODE 0xFF010129
+#define OID_SKGE_FLOWCTRL_STATUS 0xFF01012A
+#define OID_SKGE_PHY_OPERATION_CAP 0xFF01012B
+#define OID_SKGE_PHY_OPERATION_MODE 0xFF01012C
+#define OID_SKGE_PHY_OPERATION_STATUS 0xFF01012D
+#define OID_SKGE_MULTICAST_LIST 0xFF01012E
+#define OID_SKGE_CURRENT_PACKET_FILTER 0xFF01012F
+
+#define OID_SKGE_TRAP 0xFF010130
+#define OID_SKGE_TRAP_NUMBER 0xFF010131
+
+#define OID_SKGE_RLMT_MODE 0xFF010140
+#define OID_SKGE_RLMT_PORT_NUMBER 0xFF010141
+#define OID_SKGE_RLMT_PORT_ACTIVE 0xFF010142
+#define OID_SKGE_RLMT_PORT_PREFERRED 0xFF010143
+#define OID_SKGE_INTERMEDIATE_SUPPORT 0xFF010160
+
+#define OID_SKGE_SPEED_CAP 0xFF010170
+#define OID_SKGE_SPEED_MODE 0xFF010171
+#define OID_SKGE_SPEED_STATUS 0xFF010172
+
+#define OID_SKGE_SENSOR_NUMBER 0xFF020100
+#define OID_SKGE_SENSOR_INDEX 0xFF020101
+#define OID_SKGE_SENSOR_DESCR 0xFF020102
+#define OID_SKGE_SENSOR_TYPE 0xFF020103
+#define OID_SKGE_SENSOR_VALUE 0xFF020104
+#define OID_SKGE_SENSOR_WAR_THRES_LOW 0xFF020105
+#define OID_SKGE_SENSOR_WAR_THRES_UPP 0xFF020106
+#define OID_SKGE_SENSOR_ERR_THRES_LOW 0xFF020107
+#define OID_SKGE_SENSOR_ERR_THRES_UPP 0xFF020108
+#define OID_SKGE_SENSOR_STATUS 0xFF020109
+#define OID_SKGE_SENSOR_WAR_CTS 0xFF02010A
+#define OID_SKGE_SENSOR_ERR_CTS 0xFF02010B
+#define OID_SKGE_SENSOR_WAR_TIME 0xFF02010C
+#define OID_SKGE_SENSOR_ERR_TIME 0xFF02010D
+
+#define OID_SKGE_CHKSM_NUMBER 0xFF020110
+#define OID_SKGE_CHKSM_RX_OK_CTS 0xFF020111
+#define OID_SKGE_CHKSM_RX_UNABLE_CTS 0xFF020112
+#define OID_SKGE_CHKSM_RX_ERR_CTS 0xFF020113
+#define OID_SKGE_CHKSM_TX_OK_CTS 0xFF020114
+#define OID_SKGE_CHKSM_TX_UNABLE_CTS 0xFF020115
+
+#define OID_SKGE_STAT_TX 0xFF020120
+#define OID_SKGE_STAT_TX_OCTETS 0xFF020121
+#define OID_SKGE_STAT_TX_BROADCAST 0xFF020122
+#define OID_SKGE_STAT_TX_MULTICAST 0xFF020123
+#define OID_SKGE_STAT_TX_UNICAST 0xFF020124
+#define OID_SKGE_STAT_TX_LONGFRAMES 0xFF020125
+#define OID_SKGE_STAT_TX_BURST 0xFF020126
+#define OID_SKGE_STAT_TX_PFLOWC 0xFF020127
+#define OID_SKGE_STAT_TX_FLOWC 0xFF020128
+#define OID_SKGE_STAT_TX_SINGLE_COL 0xFF020129
+#define OID_SKGE_STAT_TX_MULTI_COL 0xFF02012A
+#define OID_SKGE_STAT_TX_EXCESS_COL 0xFF02012B
+#define OID_SKGE_STAT_TX_LATE_COL 0xFF02012C
+#define OID_SKGE_STAT_TX_DEFFERAL 0xFF02012D
+#define OID_SKGE_STAT_TX_EXCESS_DEF 0xFF02012E
+#define OID_SKGE_STAT_TX_UNDERRUN 0xFF02012F
+#define OID_SKGE_STAT_TX_CARRIER 0xFF020130
+/* #define OID_SKGE_STAT_TX_UTIL 0xFF020131 */
+#define OID_SKGE_STAT_TX_64 0xFF020132
+#define OID_SKGE_STAT_TX_127 0xFF020133
+#define OID_SKGE_STAT_TX_255 0xFF020134
+#define OID_SKGE_STAT_TX_511 0xFF020135
+#define OID_SKGE_STAT_TX_1023 0xFF020136
+#define OID_SKGE_STAT_TX_MAX 0xFF020137
+#define OID_SKGE_STAT_TX_SYNC 0xFF020138
+#define OID_SKGE_STAT_TX_SYNC_OCTETS 0xFF020139
+#define OID_SKGE_STAT_RX 0xFF02013A
+#define OID_SKGE_STAT_RX_OCTETS 0xFF02013B
+#define OID_SKGE_STAT_RX_BROADCAST 0xFF02013C
+#define OID_SKGE_STAT_RX_MULTICAST 0xFF02013D
+#define OID_SKGE_STAT_RX_UNICAST 0xFF02013E
+#define OID_SKGE_STAT_RX_PFLOWC 0xFF02013F
+#define OID_SKGE_STAT_RX_FLOWC 0xFF020140
+#define OID_SKGE_STAT_RX_PFLOWC_ERR 0xFF020141
+#define OID_SKGE_STAT_RX_FLOWC_UNKWN 0xFF020142
+#define OID_SKGE_STAT_RX_BURST 0xFF020143
+#define OID_SKGE_STAT_RX_MISSED 0xFF020144
+#define OID_SKGE_STAT_RX_FRAMING 0xFF020145
+#define OID_SKGE_STAT_RX_OVERFLOW 0xFF020146
+#define OID_SKGE_STAT_RX_JABBER 0xFF020147
+#define OID_SKGE_STAT_RX_CARRIER 0xFF020148
+#define OID_SKGE_STAT_RX_IR_LENGTH 0xFF020149
+#define OID_SKGE_STAT_RX_SYMBOL 0xFF02014A
+#define OID_SKGE_STAT_RX_SHORTS 0xFF02014B
+#define OID_SKGE_STAT_RX_RUNT 0xFF02014C
+#define OID_SKGE_STAT_RX_CEXT 0xFF02014D
+#define OID_SKGE_STAT_RX_TOO_LONG 0xFF02014E
+#define OID_SKGE_STAT_RX_FCS 0xFF02014F
+/* #define OID_SKGE_STAT_RX_UTIL 0xFF020150 */
+#define OID_SKGE_STAT_RX_64 0xFF020151
+#define OID_SKGE_STAT_RX_127 0xFF020152
+#define OID_SKGE_STAT_RX_255 0xFF020153
+#define OID_SKGE_STAT_RX_511 0xFF020154
+#define OID_SKGE_STAT_RX_1023 0xFF020155
+#define OID_SKGE_STAT_RX_MAX 0xFF020156
+#define OID_SKGE_STAT_RX_LONGFRAMES 0xFF020157
+
+#define OID_SKGE_RLMT_CHANGE_CTS 0xFF020160
+#define OID_SKGE_RLMT_CHANGE_TIME 0xFF020161
+#define OID_SKGE_RLMT_CHANGE_ESTIM 0xFF020162
+#define OID_SKGE_RLMT_CHANGE_THRES 0xFF020163
+
+#define OID_SKGE_RLMT_PORT_INDEX 0xFF020164
+#define OID_SKGE_RLMT_STATUS 0xFF020165
+#define OID_SKGE_RLMT_TX_HELLO_CTS 0xFF020166
+#define OID_SKGE_RLMT_RX_HELLO_CTS 0xFF020167
+#define OID_SKGE_RLMT_TX_SP_REQ_CTS 0xFF020168
+#define OID_SKGE_RLMT_RX_SP_CTS 0xFF020169
+
+#define OID_SKGE_RLMT_MONITOR_NUMBER 0xFF010150
+#define OID_SKGE_RLMT_MONITOR_INDEX 0xFF010151
+#define OID_SKGE_RLMT_MONITOR_ADDR 0xFF010152
+#define OID_SKGE_RLMT_MONITOR_ERRS 0xFF010153
+#define OID_SKGE_RLMT_MONITOR_TIMESTAMP 0xFF010154
+#define OID_SKGE_RLMT_MONITOR_ADMIN 0xFF010155
+
+#define OID_SKGE_TX_SW_QUEUE_LEN 0xFF020170
+#define OID_SKGE_TX_SW_QUEUE_MAX 0xFF020171
+#define OID_SKGE_TX_RETRY 0xFF020172
+#define OID_SKGE_RX_INTR_CTS 0xFF020173
+#define OID_SKGE_TX_INTR_CTS 0xFF020174
+#define OID_SKGE_RX_NO_BUF_CTS 0xFF020175
+#define OID_SKGE_TX_NO_BUF_CTS 0xFF020176
+#define OID_SKGE_TX_USED_DESCR_NO 0xFF020177
+#define OID_SKGE_RX_DELIVERED_CTS 0xFF020178
+#define OID_SKGE_RX_OCTETS_DELIV_CTS 0xFF020179
+#define OID_SKGE_RX_HW_ERROR_CTS 0xFF02017A
+#define OID_SKGE_TX_HW_ERROR_CTS 0xFF02017B
+#define OID_SKGE_IN_ERRORS_CTS 0xFF02017C
+#define OID_SKGE_OUT_ERROR_CTS 0xFF02017D
+#define OID_SKGE_ERR_RECOVERY_CTS 0xFF02017E
+#define OID_SKGE_SYSUPTIME 0xFF02017F
+
+#define OID_SKGE_ALL_DATA 0xFF020190
+
+/* Defines for VCT. */
+#define OID_SKGE_VCT_GET 0xFF020200
+#define OID_SKGE_VCT_SET 0xFF020201
+#define OID_SKGE_VCT_STATUS 0xFF020202
+
+
+/* VCT struct to store a backup copy of VCT data after a port reset. */
+typedef struct s_PnmiVct {
+ SK_U8 VctStatus;
+ SK_U8 PCableLen;
+ SK_U32 PMdiPairLen[4];
+ SK_U8 PMdiPairSts[4];
+} SK_PNMI_VCT;
+
+
+/* VCT status values (to be given to CPA via OID_SKGE_VCT_STATUS). */
+#define SK_PNMI_VCT_NONE 0
+#define SK_PNMI_VCT_OLD_VCT_DATA 1
+#define SK_PNMI_VCT_NEW_VCT_DATA 2
+#define SK_PNMI_VCT_OLD_DSP_DATA 4
+#define SK_PNMI_VCT_NEW_DSP_DATA 8
+#define SK_PNMI_VCT_RUNNING 16
+
+
+/* VCT cable test status. */
+#define SK_PNMI_VCT_NORMAL_CABLE 0
+#define SK_PNMI_VCT_SHORT_CABLE 1
+#define SK_PNMI_VCT_OPEN_CABLE 2
+#define SK_PNMI_VCT_TEST_FAIL 3
+#define SK_PNMI_VCT_IMPEDANCE_MISMATCH 4
+
+#define OID_SKGE_TRAP_SEN_WAR_LOW 500
+#define OID_SKGE_TRAP_SEN_WAR_UPP 501
+#define OID_SKGE_TRAP_SEN_ERR_LOW 502
+#define OID_SKGE_TRAP_SEN_ERR_UPP 503
+#define OID_SKGE_TRAP_RLMT_CHANGE_THRES 520
+#define OID_SKGE_TRAP_RLMT_CHANGE_PORT 521
+#define OID_SKGE_TRAP_RLMT_PORT_DOWN 522
+#define OID_SKGE_TRAP_RLMT_PORT_UP 523
+#define OID_SKGE_TRAP_RLMT_SEGMENTATION 524
+
+
+/*
+ * Define error numbers and messages for syslog
+ */
+#define SK_PNMI_ERR001 (SK_ERRBASE_PNMI + 1)
+#define SK_PNMI_ERR001MSG "SkPnmiGetStruct: Unknown OID"
+#define SK_PNMI_ERR002 (SK_ERRBASE_PNMI + 2)
+#define SK_PNMI_ERR002MSG "SkPnmiGetStruct: Cannot read VPD keys"
+#define SK_PNMI_ERR003 (SK_ERRBASE_PNMI + 3)
+#define SK_PNMI_ERR003MSG "OidStruct: Called with wrong OID"
+#define SK_PNMI_ERR004 (SK_ERRBASE_PNMI + 4)
+#define SK_PNMI_ERR004MSG "OidStruct: Called with wrong action"
+#define SK_PNMI_ERR005 (SK_ERRBASE_PNMI + 5)
+#define SK_PNMI_ERR005MSG "Perform: Cannot reset driver"
+#define SK_PNMI_ERR006 (SK_ERRBASE_PNMI + 6)
+#define SK_PNMI_ERR006MSG "Perform: Unknown OID action command"
+#define SK_PNMI_ERR007 (SK_ERRBASE_PNMI + 7)
+#define SK_PNMI_ERR007MSG "General: Driver description not initialized"
+#define SK_PNMI_ERR008 (SK_ERRBASE_PNMI + 8)
+#define SK_PNMI_ERR008MSG "Addr: Tried to get unknown OID"
+#define SK_PNMI_ERR009 (SK_ERRBASE_PNMI + 9)
+#define SK_PNMI_ERR009MSG "Addr: Unknown OID"
+#define SK_PNMI_ERR010 (SK_ERRBASE_PNMI + 10)
+#define SK_PNMI_ERR010MSG "CsumStat: Unknown OID"
+#define SK_PNMI_ERR011 (SK_ERRBASE_PNMI + 11)
+#define SK_PNMI_ERR011MSG "SensorStat: Sensor descr string too long"
+#define SK_PNMI_ERR012 (SK_ERRBASE_PNMI + 12)
+#define SK_PNMI_ERR012MSG "SensorStat: Unknown OID"
+#define SK_PNMI_ERR013 (SK_ERRBASE_PNMI + 13)
+#define SK_PNMI_ERR013MSG ""
+#define SK_PNMI_ERR014 (SK_ERRBASE_PNMI + 14)
+#define SK_PNMI_ERR014MSG "Vpd: Cannot read VPD keys"
+#define SK_PNMI_ERR015 (SK_ERRBASE_PNMI + 15)
+#define SK_PNMI_ERR015MSG "Vpd: Internal array for VPD keys to small"
+#define SK_PNMI_ERR016 (SK_ERRBASE_PNMI + 16)
+#define SK_PNMI_ERR016MSG "Vpd: Key string too long"
+#define SK_PNMI_ERR017 (SK_ERRBASE_PNMI + 17)
+#define SK_PNMI_ERR017MSG "Vpd: Invalid VPD status pointer"
+#define SK_PNMI_ERR018 (SK_ERRBASE_PNMI + 18)
+#define SK_PNMI_ERR018MSG "Vpd: VPD data not valid"
+#define SK_PNMI_ERR019 (SK_ERRBASE_PNMI + 19)
+#define SK_PNMI_ERR019MSG "Vpd: VPD entries list string too long"
+#define SK_PNMI_ERR021 (SK_ERRBASE_PNMI + 21)
+#define SK_PNMI_ERR021MSG "Vpd: VPD data string too long"
+#define SK_PNMI_ERR022 (SK_ERRBASE_PNMI + 22)
+#define SK_PNMI_ERR022MSG "Vpd: VPD data string too long should be errored before"
+#define SK_PNMI_ERR023 (SK_ERRBASE_PNMI + 23)
+#define SK_PNMI_ERR023MSG "Vpd: Unknown OID in get action"
+#define SK_PNMI_ERR024 (SK_ERRBASE_PNMI + 24)
+#define SK_PNMI_ERR024MSG "Vpd: Unknown OID in preset/set action"
+#define SK_PNMI_ERR025 (SK_ERRBASE_PNMI + 25)
+#define SK_PNMI_ERR025MSG "Vpd: Cannot write VPD after modify entry"
+#define SK_PNMI_ERR026 (SK_ERRBASE_PNMI + 26)
+#define SK_PNMI_ERR026MSG "Vpd: Cannot update VPD"
+#define SK_PNMI_ERR027 (SK_ERRBASE_PNMI + 27)
+#define SK_PNMI_ERR027MSG "Vpd: Cannot delete VPD entry"
+#define SK_PNMI_ERR028 (SK_ERRBASE_PNMI + 28)
+#define SK_PNMI_ERR028MSG "Vpd: Cannot update VPD after delete entry"
+#define SK_PNMI_ERR029 (SK_ERRBASE_PNMI + 29)
+#define SK_PNMI_ERR029MSG "General: Driver description string too long"
+#define SK_PNMI_ERR030 (SK_ERRBASE_PNMI + 30)
+#define SK_PNMI_ERR030MSG "General: Driver version not initialized"
+#define SK_PNMI_ERR031 (SK_ERRBASE_PNMI + 31)
+#define SK_PNMI_ERR031MSG "General: Driver version string too long"
+#define SK_PNMI_ERR032 (SK_ERRBASE_PNMI + 32)
+#define SK_PNMI_ERR032MSG "General: Cannot read VPD Name for HW descr"
+#define SK_PNMI_ERR033 (SK_ERRBASE_PNMI + 33)
+#define SK_PNMI_ERR033MSG "General: HW description string too long"
+#define SK_PNMI_ERR034 (SK_ERRBASE_PNMI + 34)
+#define SK_PNMI_ERR034MSG "General: Unknown OID"
+#define SK_PNMI_ERR035 (SK_ERRBASE_PNMI + 35)
+#define SK_PNMI_ERR035MSG "Rlmt: Unknown OID"
+#define SK_PNMI_ERR036 (SK_ERRBASE_PNMI + 36)
+#define SK_PNMI_ERR036MSG ""
+#define SK_PNMI_ERR037 (SK_ERRBASE_PNMI + 37)
+#define SK_PNMI_ERR037MSG "Rlmt: SK_RLMT_MODE_CHANGE event return not 0"
+#define SK_PNMI_ERR038 (SK_ERRBASE_PNMI + 38)
+#define SK_PNMI_ERR038MSG "Rlmt: SK_RLMT_PREFPORT_CHANGE event return not 0"
+#define SK_PNMI_ERR039 (SK_ERRBASE_PNMI + 39)
+#define SK_PNMI_ERR039MSG "RlmtStat: Unknown OID"
+#define SK_PNMI_ERR040 (SK_ERRBASE_PNMI + 40)
+#define SK_PNMI_ERR040MSG "PowerManagement: Unknown OID"
+#define SK_PNMI_ERR041 (SK_ERRBASE_PNMI + 41)
+#define SK_PNMI_ERR041MSG "MacPrivateConf: Unknown OID"
+#define SK_PNMI_ERR042 (SK_ERRBASE_PNMI + 42)
+#define SK_PNMI_ERR042MSG "MacPrivateConf: SK_HWEV_SET_ROLE returned not 0"
+#define SK_PNMI_ERR043 (SK_ERRBASE_PNMI + 43)
+#define SK_PNMI_ERR043MSG "MacPrivateConf: SK_HWEV_SET_LMODE returned not 0"
+#define SK_PNMI_ERR044 (SK_ERRBASE_PNMI + 44)
+#define SK_PNMI_ERR044MSG "MacPrivateConf: SK_HWEV_SET_FLOWMODE returned not 0"
+#define SK_PNMI_ERR045 (SK_ERRBASE_PNMI + 45)
+#define SK_PNMI_ERR045MSG "MacPrivateConf: SK_HWEV_SET_SPEED returned not 0"
+#define SK_PNMI_ERR046 (SK_ERRBASE_PNMI + 46)
+#define SK_PNMI_ERR046MSG "Monitor: Unknown OID"
+#define SK_PNMI_ERR047 (SK_ERRBASE_PNMI + 47)
+#define SK_PNMI_ERR047MSG "SirqUpdate: Event function returns not 0"
+#define SK_PNMI_ERR048 (SK_ERRBASE_PNMI + 48)
+#define SK_PNMI_ERR048MSG "RlmtUpdate: Event function returns not 0"
+#define SK_PNMI_ERR049 (SK_ERRBASE_PNMI + 49)
+#define SK_PNMI_ERR049MSG "SkPnmiInit: Invalid size of 'CounterOffset' struct!!"
+#define SK_PNMI_ERR050 (SK_ERRBASE_PNMI + 50)
+#define SK_PNMI_ERR050MSG "SkPnmiInit: Invalid size of 'StatAddr' table!!"
+#define SK_PNMI_ERR051 (SK_ERRBASE_PNMI + 51)
+#define SK_PNMI_ERR051MSG "SkPnmiEvent: Port switch suspicious"
+#define SK_PNMI_ERR052 (SK_ERRBASE_PNMI + 52)
+#define SK_PNMI_ERR052MSG ""
+
+/*
+ * Management counter macros called by the driver
+ */
+#define SK_PNMI_SET_DRIVER_DESCR(pAC,v) ((pAC)->Pnmi.pDriverDescription = \
+ (char *)(v))
+
+#define SK_PNMI_SET_DRIVER_VER(pAC,v) ((pAC)->Pnmi.pDriverVersion = \
+ (char *)(v))
+
+
+#define SK_PNMI_CNT_TX_QUEUE_LEN(pAC,v,p) \
+ { \
+ (pAC)->Pnmi.Port[p].TxSwQueueLen = (SK_U64)(v); \
+ if ((pAC)->Pnmi.Port[p].TxSwQueueLen > (pAC)->Pnmi.Port[p].TxSwQueueMax) { \
+ (pAC)->Pnmi.Port[p].TxSwQueueMax = (pAC)->Pnmi.Port[p].TxSwQueueLen; \
+ } \
+ }
+#define SK_PNMI_CNT_TX_RETRY(pAC,p) (((pAC)->Pnmi.Port[p].TxRetryCts)++)
+#define SK_PNMI_CNT_RX_INTR(pAC,p) (((pAC)->Pnmi.Port[p].RxIntrCts)++)
+#define SK_PNMI_CNT_TX_INTR(pAC,p) (((pAC)->Pnmi.Port[p].TxIntrCts)++)
+#define SK_PNMI_CNT_NO_RX_BUF(pAC,p) (((pAC)->Pnmi.Port[p].RxNoBufCts)++)
+#define SK_PNMI_CNT_NO_TX_BUF(pAC,p) (((pAC)->Pnmi.Port[p].TxNoBufCts)++)
+#define SK_PNMI_CNT_USED_TX_DESCR(pAC,v,p) \
+ ((pAC)->Pnmi.Port[p].TxUsedDescrNo=(SK_U64)(v));
+#define SK_PNMI_CNT_RX_OCTETS_DELIVERED(pAC,v,p) \
+ { \
+ ((pAC)->Pnmi.Port[p].RxDeliveredCts)++; \
+ (pAC)->Pnmi.Port[p].RxOctetsDeliveredCts += (SK_U64)(v); \
+ }
+#define SK_PNMI_CNT_ERR_RECOVERY(pAC,p) (((pAC)->Pnmi.Port[p].ErrRecoveryCts)++);
+
+#define SK_PNMI_CNT_SYNC_OCTETS(pAC,p,v) \
+ { \
+ if ((p) < SK_MAX_MACS) { \
+ ((pAC)->Pnmi.Port[p].StatSyncCts)++; \
+ (pAC)->Pnmi.Port[p].StatSyncOctetsCts += (SK_U64)(v); \
+ } \
+ }
+
+#define SK_PNMI_CNT_RX_LONGFRAMES(pAC,p) \
+ { \
+ if ((p) < SK_MAX_MACS) { \
+ ((pAC)->Pnmi.Port[p].StatRxLongFrameCts++); \
+ } \
+ }
+
+#define SK_PNMI_CNT_RX_FRAMETOOLONG(pAC,p) \
+ { \
+ if ((p) < SK_MAX_MACS) { \
+ ((pAC)->Pnmi.Port[p].StatRxFrameTooLongCts++); \
+ } \
+ }
+
+#define SK_PNMI_CNT_RX_PMACC_ERR(pAC,p) \
+ { \
+ if ((p) < SK_MAX_MACS) { \
+ ((pAC)->Pnmi.Port[p].StatRxPMaccErr++); \
+ } \
+ }
+
+/*
+ * Conversion Macros
+ */
+#define SK_PNMI_PORT_INST2LOG(i) ((unsigned int)(i) - 1)
+#define SK_PNMI_PORT_LOG2INST(l) ((unsigned int)(l) + 1)
+#define SK_PNMI_PORT_PHYS2LOG(p) ((unsigned int)(p) + 1)
+#define SK_PNMI_PORT_LOG2PHYS(pAC,l) ((unsigned int)(l) - 1)
+#define SK_PNMI_PORT_PHYS2INST(pAC,p) \
+ (pAC->Pnmi.DualNetActiveFlag ? 2 : ((unsigned int)(p) + 2))
+#define SK_PNMI_PORT_INST2PHYS(pAC,i) ((unsigned int)(i) - 2)
+
+/*
+ * Structure definition for SkPnmiGetStruct and SkPnmiSetStruct
+ */
+#define SK_PNMI_VPD_KEY_SIZE 5
+#define SK_PNMI_VPD_BUFSIZE (VPD_SIZE)
+#define SK_PNMI_VPD_ENTRIES (VPD_SIZE / 4)
+#define SK_PNMI_VPD_DATALEN 128 /* Number of data bytes */
+
+#define SK_PNMI_MULTICAST_LISTLEN 64
+#define SK_PNMI_SENSOR_ENTRIES (SK_MAX_SENSORS)
+#define SK_PNMI_CHECKSUM_ENTRIES 3
+#define SK_PNMI_MAC_ENTRIES (SK_MAX_MACS + 1)
+#define SK_PNMI_MONITOR_ENTRIES 20
+#define SK_PNMI_TRAP_ENTRIES 10
+#define SK_PNMI_TRAPLEN 128
+#define SK_PNMI_STRINGLEN1 80
+#define SK_PNMI_STRINGLEN2 25
+#define SK_PNMI_TRAP_QUEUE_LEN 512
+
+typedef struct s_PnmiVpd {
+ char VpdKey[SK_PNMI_VPD_KEY_SIZE];
+ char VpdValue[SK_PNMI_VPD_DATALEN];
+ SK_U8 VpdAccess;
+ SK_U8 VpdAction;
+} SK_PNMI_VPD;
+
+typedef struct s_PnmiSensor {
+ SK_U8 SensorIndex;
+ char SensorDescr[SK_PNMI_STRINGLEN2];
+ SK_U8 SensorType;
+ SK_U32 SensorValue;
+ SK_U32 SensorWarningThresholdLow;
+ SK_U32 SensorWarningThresholdHigh;
+ SK_U32 SensorErrorThresholdLow;
+ SK_U32 SensorErrorThresholdHigh;
+ SK_U8 SensorStatus;
+ SK_U64 SensorWarningCts;
+ SK_U64 SensorErrorCts;
+ SK_U64 SensorWarningTimestamp;
+ SK_U64 SensorErrorTimestamp;
+} SK_PNMI_SENSOR;
+
+typedef struct s_PnmiChecksum {
+ SK_U64 ChecksumRxOkCts;
+ SK_U64 ChecksumRxUnableCts;
+ SK_U64 ChecksumRxErrCts;
+ SK_U64 ChecksumTxOkCts;
+ SK_U64 ChecksumTxUnableCts;
+} SK_PNMI_CHECKSUM;
+
+typedef struct s_PnmiStat {
+ SK_U64 StatTxOkCts;
+ SK_U64 StatTxOctetsOkCts;
+ SK_U64 StatTxBroadcastOkCts;
+ SK_U64 StatTxMulticastOkCts;
+ SK_U64 StatTxUnicastOkCts;
+ SK_U64 StatTxLongFramesCts;
+ SK_U64 StatTxBurstCts;
+ SK_U64 StatTxPauseMacCtrlCts;
+ SK_U64 StatTxMacCtrlCts;
+ SK_U64 StatTxSingleCollisionCts;
+ SK_U64 StatTxMultipleCollisionCts;
+ SK_U64 StatTxExcessiveCollisionCts;
+ SK_U64 StatTxLateCollisionCts;
+ SK_U64 StatTxDeferralCts;
+ SK_U64 StatTxExcessiveDeferralCts;
+ SK_U64 StatTxFifoUnderrunCts;
+ SK_U64 StatTxCarrierCts;
+ SK_U64 Dummy1; /* StatTxUtilization */
+ SK_U64 StatTx64Cts;
+ SK_U64 StatTx127Cts;
+ SK_U64 StatTx255Cts;
+ SK_U64 StatTx511Cts;
+ SK_U64 StatTx1023Cts;
+ SK_U64 StatTxMaxCts;
+ SK_U64 StatTxSyncCts;
+ SK_U64 StatTxSyncOctetsCts;
+ SK_U64 StatRxOkCts;
+ SK_U64 StatRxOctetsOkCts;
+ SK_U64 StatRxBroadcastOkCts;
+ SK_U64 StatRxMulticastOkCts;
+ SK_U64 StatRxUnicastOkCts;
+ SK_U64 StatRxLongFramesCts;
+ SK_U64 StatRxPauseMacCtrlCts;
+ SK_U64 StatRxMacCtrlCts;
+ SK_U64 StatRxPauseMacCtrlErrorCts;
+ SK_U64 StatRxMacCtrlUnknownCts;
+ SK_U64 StatRxBurstCts;
+ SK_U64 StatRxMissedCts;
+ SK_U64 StatRxFramingCts;
+ SK_U64 StatRxFifoOverflowCts;
+ SK_U64 StatRxJabberCts;
+ SK_U64 StatRxCarrierCts;
+ SK_U64 StatRxIRLengthCts;
+ SK_U64 StatRxSymbolCts;
+ SK_U64 StatRxShortsCts;
+ SK_U64 StatRxRuntCts;
+ SK_U64 StatRxCextCts;
+ SK_U64 StatRxTooLongCts;
+ SK_U64 StatRxFcsCts;
+ SK_U64 Dummy2; /* StatRxUtilization */
+ SK_U64 StatRx64Cts;
+ SK_U64 StatRx127Cts;
+ SK_U64 StatRx255Cts;
+ SK_U64 StatRx511Cts;
+ SK_U64 StatRx1023Cts;
+ SK_U64 StatRxMaxCts;
+} SK_PNMI_STAT;
+
+typedef struct s_PnmiConf {
+ char ConfMacCurrentAddr[6];
+ char ConfMacFactoryAddr[6];
+ SK_U8 ConfPMD;
+ SK_U8 ConfConnector;
+ SK_U8 ConfLinkCapability;
+ SK_U8 ConfLinkMode;
+ SK_U8 ConfLinkModeStatus;
+ SK_U8 ConfLinkStatus;
+ SK_U8 ConfFlowCtrlCapability;
+ SK_U8 ConfFlowCtrlMode;
+ SK_U8 ConfFlowCtrlStatus;
+ SK_U8 ConfPhyOperationCapability;
+ SK_U8 ConfPhyOperationMode;
+ SK_U8 ConfPhyOperationStatus;
+ SK_U8 ConfSpeedCapability;
+ SK_U8 ConfSpeedMode;
+ SK_U8 ConfSpeedStatus;
+} SK_PNMI_CONF;
+
+typedef struct s_PnmiRlmt {
+ SK_U32 RlmtIndex;
+ SK_U32 RlmtStatus;
+ SK_U64 RlmtTxHelloCts;
+ SK_U64 RlmtRxHelloCts;
+ SK_U64 RlmtTxSpHelloReqCts;
+ SK_U64 RlmtRxSpHelloCts;
+} SK_PNMI_RLMT;
+
+typedef struct s_PnmiRlmtMonitor {
+ SK_U32 RlmtMonitorIndex;
+ char RlmtMonitorAddr[6];
+ SK_U64 RlmtMonitorErrorCts;
+ SK_U64 RlmtMonitorTimestamp;
+ SK_U8 RlmtMonitorAdmin;
+} SK_PNMI_RLMT_MONITOR;
+
+typedef struct s_PnmiRequestStatus {
+ SK_U32 ErrorStatus;
+ SK_U32 ErrorOffset;
+} SK_PNMI_REQUEST_STATUS;
+
+typedef struct s_PnmiStrucData {
+ SK_U32 MgmtDBVersion;
+ SK_PNMI_REQUEST_STATUS ReturnStatus;
+ SK_U32 VpdFreeBytes;
+ char VpdEntriesList[SK_PNMI_VPD_ENTRIES * SK_PNMI_VPD_KEY_SIZE];
+ SK_U32 VpdEntriesNumber;
+ SK_PNMI_VPD Vpd[SK_PNMI_VPD_ENTRIES];
+ SK_U32 PortNumber;
+ SK_U32 DeviceType;
+ char DriverDescr[SK_PNMI_STRINGLEN1];
+ char DriverVersion[SK_PNMI_STRINGLEN2];
+ char HwDescr[SK_PNMI_STRINGLEN1];
+ char HwVersion[SK_PNMI_STRINGLEN2];
+ SK_U16 Chipset;
+ SK_U32 MtuSize;
+ SK_U32 Action;
+ SK_U32 TestResult;
+ SK_U8 BusType;
+ SK_U8 BusSpeed;
+ SK_U8 BusWidth;
+ SK_U8 SensorNumber;
+ SK_PNMI_SENSOR Sensor[SK_PNMI_SENSOR_ENTRIES];
+ SK_U8 ChecksumNumber;
+ SK_PNMI_CHECKSUM Checksum[SK_PNMI_CHECKSUM_ENTRIES];
+ SK_PNMI_STAT Stat[SK_PNMI_MAC_ENTRIES];
+ SK_PNMI_CONF Conf[SK_PNMI_MAC_ENTRIES];
+ SK_U8 RlmtMode;
+ SK_U32 RlmtPortNumber;
+ SK_U8 RlmtPortActive;
+ SK_U8 RlmtPortPreferred;
+ SK_U64 RlmtChangeCts;
+ SK_U64 RlmtChangeTime;
+ SK_U64 RlmtChangeEstimate;
+ SK_U64 RlmtChangeThreshold;
+ SK_PNMI_RLMT Rlmt[SK_MAX_MACS];
+ SK_U32 RlmtMonitorNumber;
+ SK_PNMI_RLMT_MONITOR RlmtMonitor[SK_PNMI_MONITOR_ENTRIES];
+ SK_U32 TrapNumber;
+ SK_U8 Trap[SK_PNMI_TRAP_QUEUE_LEN];
+ SK_U64 TxSwQueueLen;
+ SK_U64 TxSwQueueMax;
+ SK_U64 TxRetryCts;
+ SK_U64 RxIntrCts;
+ SK_U64 TxIntrCts;
+ SK_U64 RxNoBufCts;
+ SK_U64 TxNoBufCts;
+ SK_U64 TxUsedDescrNo;
+ SK_U64 RxDeliveredCts;
+ SK_U64 RxOctetsDeliveredCts;
+ SK_U64 RxHwErrorsCts;
+ SK_U64 TxHwErrorsCts;
+ SK_U64 InErrorsCts;
+ SK_U64 OutErrorsCts;
+ SK_U64 ErrRecoveryCts;
+ SK_U64 SysUpTime;
+} SK_PNMI_STRUCT_DATA;
+
+#define SK_PNMI_STRUCT_SIZE (sizeof(SK_PNMI_STRUCT_DATA))
+#define SK_PNMI_MIN_STRUCT_SIZE ((unsigned int)(SK_UPTR)\
+ &(((SK_PNMI_STRUCT_DATA *)0)->VpdFreeBytes))
+ /*
+ * ReturnStatus field
+ * must be located
+ * before VpdFreeBytes
+ */
+
+/*
+ * Various definitions
+ */
+#define SK_PNMI_MAX_PROTOS 3
+
+#define SK_PNMI_CNT_NO 66 /* Must have the value of the enum
+ * SK_PNMI_MAX_IDX. Define SK_PNMI_CHECK
+ * for check while init phase 1
+ */
+
+/*
+ * Estimate data structure
+ */
+typedef struct s_PnmiEstimate {
+ unsigned int EstValueIndex;
+ SK_U64 EstValue[7];
+ SK_U64 Estimate;
+ SK_TIMER EstTimer;
+} SK_PNMI_ESTIMATE;
+
+
+/*
+ * VCT timer data structure
+ */
+typedef struct s_VctTimer {
+ SK_TIMER VctTimer;
+} SK_PNMI_VCT_TIMER;
+
+
+/*
+ * PNMI specific adapter context structure
+ */
+typedef struct s_PnmiPort {
+ SK_U64 StatSyncCts;
+ SK_U64 StatSyncOctetsCts;
+ SK_U64 StatRxLongFrameCts;
+ SK_U64 StatRxFrameTooLongCts;
+ SK_U64 StatRxPMaccErr;
+ SK_U64 TxSwQueueLen;
+ SK_U64 TxSwQueueMax;
+ SK_U64 TxRetryCts;
+ SK_U64 RxIntrCts;
+ SK_U64 TxIntrCts;
+ SK_U64 RxNoBufCts;
+ SK_U64 TxNoBufCts;
+ SK_U64 TxUsedDescrNo;
+ SK_U64 RxDeliveredCts;
+ SK_U64 RxOctetsDeliveredCts;
+ SK_U64 RxHwErrorsCts;
+ SK_U64 TxHwErrorsCts;
+ SK_U64 InErrorsCts;
+ SK_U64 OutErrorsCts;
+ SK_U64 ErrRecoveryCts;
+ SK_U64 RxShortZeroMark;
+ SK_U64 CounterOffset[SK_PNMI_CNT_NO];
+ SK_U32 CounterHigh[SK_PNMI_CNT_NO];
+ SK_BOOL ActiveFlag;
+ SK_U8 Align[3];
+} SK_PNMI_PORT;
+
+
+typedef struct s_PnmiData {
+ SK_PNMI_PORT Port [SK_MAX_MACS];
+ SK_PNMI_PORT BufPort [SK_MAX_MACS]; /* 2002-09-13 pweber */
+ SK_U64 VirtualCounterOffset[SK_PNMI_CNT_NO];
+ SK_U32 TestResult;
+ char HwVersion[10];
+ SK_U16 Align01;
+
+ char *pDriverDescription;
+ char *pDriverVersion;
+
+ int MacUpdatedFlag;
+ int RlmtUpdatedFlag;
+ int SirqUpdatedFlag;
+
+ SK_U64 RlmtChangeCts;
+ SK_U64 RlmtChangeTime;
+ SK_PNMI_ESTIMATE RlmtChangeEstimate;
+ SK_U64 RlmtChangeThreshold;
+
+ SK_U64 StartUpTime;
+ SK_U32 DeviceType;
+ char PciBusSpeed;
+ char PciBusWidth;
+ char Chipset;
+ char PMD;
+ char Connector;
+ SK_BOOL DualNetActiveFlag;
+ SK_U16 Align02;
+
+ char TrapBuf[SK_PNMI_TRAP_QUEUE_LEN];
+ unsigned int TrapBufFree;
+ unsigned int TrapQueueBeg;
+ unsigned int TrapQueueEnd;
+ unsigned int TrapBufPad;
+ unsigned int TrapUnique;
+ SK_U8 VctStatus[SK_MAX_MACS];
+ SK_PNMI_VCT VctBackup[SK_MAX_MACS];
+ SK_PNMI_VCT_TIMER VctTimeout[SK_MAX_MACS];
+} SK_PNMI;
+
+/*
+ * Function prototypes
+ */
+extern int SkPnmiInit(SK_AC *pAc, SK_IOC IoC, int level);
+extern int SkPnmiGetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id, void* pBuf,
+ unsigned int* pLen, SK_U32 Instance, SK_U32 NetIndex);
+extern int SkPnmiPreSetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id,
+ void* pBuf, unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
+extern int SkPnmiSetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id, void* pBuf,
+ unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
+extern int SkPnmiGetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
+ unsigned int *pLen, SK_U32 NetIndex);
+extern int SkPnmiPreSetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
+ unsigned int *pLen, SK_U32 NetIndex);
+extern int SkPnmiSetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
+ unsigned int *pLen, SK_U32 NetIndex);
+extern int SkPnmiEvent(SK_AC *pAc, SK_IOC IoC, SK_U32 Event,
+ SK_EVPARA Param);
+
+#endif
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skgesirq.h u-boot-2009.03/drivers/net/sk98lin/h/skgesirq.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skgesirq.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skgesirq.h 2009-03-31 14:54:45.971668800 -0700
@@ -1,194 +1,197 @@
-/******************************************************************************
- *
- * Name: skgesirq.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.26 $
- * Date: $Date: 2002/10/14 09:52:36 $
- * Purpose: SK specific Gigabit Ethernet special IRQ functions
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- * $Log: skgesirq.h,v $
- * Revision 1.26 2002/10/14 09:52:36 rschmidt
- * Added SKERR_SIRQ_E023 and SKERR_SIRQ_E023 for GPHY (Yukon)
- * Editorial changes
- *
- * Revision 1.25 2002/07/15 18:15:52 rwahl
- * Editorial changes.
- *
- * Revision 1.24 2002/07/15 15:39:21 rschmidt
- * Corrected define for SKERR_SIRQ_E022
- * Editorial changes
- *
- * Revision 1.23 2002/04/25 11:09:45 rschmidt
- * Removed declarations for SkXmInitPhy(), SkXmRxTxEnable()
- * Editorial changes
- *
- * Revision 1.22 2000/11/09 11:30:10 rassmann
- * WA: Waiting after releasing reset until BCom chip is accessible.
- *
- * Revision 1.21 2000/10/18 12:22:40 cgoos
- * Added workaround for half duplex hangup.
- *
- * Revision 1.20 1999/12/06 10:00:44 cgoos
- * Added SET event for role.
- *
- * Revision 1.19 1999/11/22 13:58:26 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.18 1999/05/19 07:32:59 cgoos
- * Changes for 1000Base-T.
- *
- * Revision 1.17 1999/03/12 13:29:31 malthoff
- * Move Autonegotiation Error Codes to skgeinit.h.
- *
- * Revision 1.16 1999/03/08 10:11:28 gklug
- * add: AutoNegDone return codes
- *
- * Revision 1.15 1998/11/18 13:20:53 gklug
- * add: different timeouts for active and non-active links
- *
- * Revision 1.14 1998/11/04 07:18:14 cgoos
- * Added prototype for SkXmRxTxEnable.
- *
- * Revision 1.13 1998/10/21 05:52:23 gklug
- * add: parameter DoLoop to InitPhy function
- *
- * Revision 1.12 1998/10/19 06:45:03 cgoos
- * Added prototype for SkXmInitPhy.
- *
- * Revision 1.11 1998/10/15 14:34:10 gklug
- * add: WA_TIME is 500 msec
- *
- * Revision 1.10 1998/10/14 14:49:41 malthoff
- * Remove err log defines E021 and E022. They are
- * defined in skgeinit.h now.
- *
- * Revision 1.9 1998/10/14 14:00:39 gklug
- * add: error logs for init phys
- *
- * Revision 1.8 1998/10/14 05:44:05 gklug
- * add: E020
- *
- * Revision 1.7 1998/10/02 06:24:58 gklug
- * add: error messages
- *
- * Revision 1.6 1998/10/01 07:54:45 gklug
- * add: PNMI debug module
- *
- * Revision 1.5 1998/09/28 13:36:31 malthoff
- * Move the bit definitions for Autonegotiation
- * and Flow Control to skgeinit.h.
- *
- * Revision 1.4 1998/09/15 12:29:34 gklug
- * add: error logs
- *
- * Revision 1.3 1998/09/03 13:54:02 gklug
- * add: function prototypes
- *
- * Revision 1.2 1998/09/03 10:24:36 gklug
- * add: Events send by PNMI
- * add: parameter definition for Flow Control etc.
- *
- * Revision 1.1 1998/08/27 11:50:27 gklug
- * initial revision
- *
- *
- ******************************************************************************/
-
-#ifndef _INC_SKGESIRQ_H_
-#define _INC_SKGESIRQ_H_
-
-/*
- * Define the Event the special IRQ/INI module can handle
- */
-#define SK_HWEV_WATIM 1 /* Timeout for WA errata #2 XMAC */
-#define SK_HWEV_PORT_START 2 /* Port Start Event by RLMT */
-#define SK_HWEV_PORT_STOP 3 /* Port Stop Event by RLMT */
-#define SK_HWEV_CLEAR_STAT 4 /* Clear Statistics by PNMI */
-#define SK_HWEV_UPDATE_STAT 5 /* Update Statistics by PNMI */
-#define SK_HWEV_SET_LMODE 6 /* Set Link Mode by PNMI */
-#define SK_HWEV_SET_FLOWMODE 7 /* Set Flow Control Mode by PNMI */
-#define SK_HWEV_SET_ROLE 8 /* Set Master/Slave (Role) by PNMI */
-#define SK_HWEV_SET_SPEED 9 /* Set Link Speed by PNMI */
-#define SK_HWEV_HALFDUP_CHK 10 /* Half Duplex Hangup Workaround */
-
-#define SK_WA_ACT_TIME (5000000L) /* 5 sec */
-#define SK_WA_INA_TIME (100000L) /* 100 msec */
-
-#define SK_HALFDUP_CHK_TIME (10000L) /* 10 msec */
-
-/*
- * Define the error numbers and messages
- */
-#define SKERR_SIRQ_E001 (SK_ERRBASE_SIRQ+0)
-#define SKERR_SIRQ_E001MSG "Unknown event"
-#define SKERR_SIRQ_E002 (SKERR_SIRQ_E001+1)
-#define SKERR_SIRQ_E002MSG "Packet timeout RX1"
-#define SKERR_SIRQ_E003 (SKERR_SIRQ_E002+1)
-#define SKERR_SIRQ_E003MSG "Packet timeout RX2"
-#define SKERR_SIRQ_E004 (SKERR_SIRQ_E003+1)
-#define SKERR_SIRQ_E004MSG "MAC 1 not correctly initialized"
-#define SKERR_SIRQ_E005 (SKERR_SIRQ_E004+1)
-#define SKERR_SIRQ_E005MSG "MAC 2 not correctly initialized"
-#define SKERR_SIRQ_E006 (SKERR_SIRQ_E005+1)
-#define SKERR_SIRQ_E006MSG "CHECK failure R1"
-#define SKERR_SIRQ_E007 (SKERR_SIRQ_E006+1)
-#define SKERR_SIRQ_E007MSG "CHECK failure R2"
-#define SKERR_SIRQ_E008 (SKERR_SIRQ_E007+1)
-#define SKERR_SIRQ_E008MSG "CHECK failure XS1"
-#define SKERR_SIRQ_E009 (SKERR_SIRQ_E008+1)
-#define SKERR_SIRQ_E009MSG "CHECK failure XA1"
-#define SKERR_SIRQ_E010 (SKERR_SIRQ_E009+1)
-#define SKERR_SIRQ_E010MSG "CHECK failure XS2"
-#define SKERR_SIRQ_E011 (SKERR_SIRQ_E010+1)
-#define SKERR_SIRQ_E011MSG "CHECK failure XA2"
-#define SKERR_SIRQ_E012 (SKERR_SIRQ_E011+1)
-#define SKERR_SIRQ_E012MSG "unexpected IRQ Master error"
-#define SKERR_SIRQ_E013 (SKERR_SIRQ_E012+1)
-#define SKERR_SIRQ_E013MSG "unexpected IRQ Status error"
-#define SKERR_SIRQ_E014 (SKERR_SIRQ_E013+1)
-#define SKERR_SIRQ_E014MSG "Parity error on RAM (read)"
-#define SKERR_SIRQ_E015 (SKERR_SIRQ_E014+1)
-#define SKERR_SIRQ_E015MSG "Parity error on RAM (write)"
-#define SKERR_SIRQ_E016 (SKERR_SIRQ_E015+1)
-#define SKERR_SIRQ_E016MSG "Parity error MAC 1"
-#define SKERR_SIRQ_E017 (SKERR_SIRQ_E016+1)
-#define SKERR_SIRQ_E017MSG "Parity error MAC 2"
-#define SKERR_SIRQ_E018 (SKERR_SIRQ_E017+1)
-#define SKERR_SIRQ_E018MSG "Parity error RX 1"
-#define SKERR_SIRQ_E019 (SKERR_SIRQ_E018+1)
-#define SKERR_SIRQ_E019MSG "Parity error RX 2"
-#define SKERR_SIRQ_E020 (SKERR_SIRQ_E019+1)
-#define SKERR_SIRQ_E020MSG "MAC transmit FIFO underrun"
-#define SKERR_SIRQ_E021 (SKERR_SIRQ_E020+1)
-#define SKERR_SIRQ_E021MSG "Spurious TWSI interrupt"
-#define SKERR_SIRQ_E022 (SKERR_SIRQ_E021+1)
-#define SKERR_SIRQ_E022MSG "Cable pair swap error"
-#define SKERR_SIRQ_E023 (SKERR_SIRQ_E022+1)
-#define SKERR_SIRQ_E023MSG "Auto-negotiation error"
-#define SKERR_SIRQ_E024 (SKERR_SIRQ_E023+1)
-#define SKERR_SIRQ_E024MSG "FIFO overflow error"
-
-extern void SkGeSirqIsr(SK_AC *pAC, SK_IOC IoC, SK_U32 Istatus);
-extern int SkGeSirqEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Para);
-extern void SkHWLinkUp(SK_AC *pAC, SK_IOC IoC, int Port);
-extern void SkHWLinkDown(SK_AC *pAC, SK_IOC IoC, int Port);
-
-#endif /* _INC_SKGESIRQ_H_ */
+/******************************************************************************
+ *
+ * Name: skgesirq.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: SK specific Gigabit Ethernet special IRQ functions
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ * $Log: skgesirq.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.26 2002/10/14 09:52:36 rschmidt
+ * Added SKERR_SIRQ_E023 and SKERR_SIRQ_E023 for GPHY (Yukon)
+ * Editorial changes
+ *
+ * Revision 1.25 2002/07/15 18:15:52 rwahl
+ * Editorial changes.
+ *
+ * Revision 1.24 2002/07/15 15:39:21 rschmidt
+ * Corrected define for SKERR_SIRQ_E022
+ * Editorial changes
+ *
+ * Revision 1.23 2002/04/25 11:09:45 rschmidt
+ * Removed declarations for SkXmInitPhy(), SkXmRxTxEnable()
+ * Editorial changes
+ *
+ * Revision 1.22 2000/11/09 11:30:10 rassmann
+ * WA: Waiting after releasing reset until BCom chip is accessible.
+ *
+ * Revision 1.21 2000/10/18 12:22:40 cgoos
+ * Added workaround for half duplex hangup.
+ *
+ * Revision 1.20 1999/12/06 10:00:44 cgoos
+ * Added SET event for role.
+ *
+ * Revision 1.19 1999/11/22 13:58:26 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.18 1999/05/19 07:32:59 cgoos
+ * Changes for 1000Base-T.
+ *
+ * Revision 1.17 1999/03/12 13:29:31 malthoff
+ * Move Autonegotiation Error Codes to skgeinit.h.
+ *
+ * Revision 1.16 1999/03/08 10:11:28 gklug
+ * add: AutoNegDone return codes
+ *
+ * Revision 1.15 1998/11/18 13:20:53 gklug
+ * add: different timeouts for active and non-active links
+ *
+ * Revision 1.14 1998/11/04 07:18:14 cgoos
+ * Added prototype for SkXmRxTxEnable.
+ *
+ * Revision 1.13 1998/10/21 05:52:23 gklug
+ * add: parameter DoLoop to InitPhy function
+ *
+ * Revision 1.12 1998/10/19 06:45:03 cgoos
+ * Added prototype for SkXmInitPhy.
+ *
+ * Revision 1.11 1998/10/15 14:34:10 gklug
+ * add: WA_TIME is 500 msec
+ *
+ * Revision 1.10 1998/10/14 14:49:41 malthoff
+ * Remove err log defines E021 and E022. They are
+ * defined in skgeinit.h now.
+ *
+ * Revision 1.9 1998/10/14 14:00:39 gklug
+ * add: error logs for init phys
+ *
+ * Revision 1.8 1998/10/14 05:44:05 gklug
+ * add: E020
+ *
+ * Revision 1.7 1998/10/02 06:24:58 gklug
+ * add: error messages
+ *
+ * Revision 1.6 1998/10/01 07:54:45 gklug
+ * add: PNMI debug module
+ *
+ * Revision 1.5 1998/09/28 13:36:31 malthoff
+ * Move the bit definitions for Autonegotiation
+ * and Flow Control to skgeinit.h.
+ *
+ * Revision 1.4 1998/09/15 12:29:34 gklug
+ * add: error logs
+ *
+ * Revision 1.3 1998/09/03 13:54:02 gklug
+ * add: function prototypes
+ *
+ * Revision 1.2 1998/09/03 10:24:36 gklug
+ * add: Events send by PNMI
+ * add: parameter definition for Flow Control etc.
+ *
+ * Revision 1.1 1998/08/27 11:50:27 gklug
+ * initial revision
+ *
+ *
+ ******************************************************************************/
+
+#ifndef _INC_SKGESIRQ_H_
+#define _INC_SKGESIRQ_H_
+
+/*
+ * Define the Event the special IRQ/INI module can handle
+ */
+#define SK_HWEV_WATIM 1 /* Timeout for WA errata #2 XMAC */
+#define SK_HWEV_PORT_START 2 /* Port Start Event by RLMT */
+#define SK_HWEV_PORT_STOP 3 /* Port Stop Event by RLMT */
+#define SK_HWEV_CLEAR_STAT 4 /* Clear Statistics by PNMI */
+#define SK_HWEV_UPDATE_STAT 5 /* Update Statistics by PNMI */
+#define SK_HWEV_SET_LMODE 6 /* Set Link Mode by PNMI */
+#define SK_HWEV_SET_FLOWMODE 7 /* Set Flow Control Mode by PNMI */
+#define SK_HWEV_SET_ROLE 8 /* Set Master/Slave (Role) by PNMI */
+#define SK_HWEV_SET_SPEED 9 /* Set Link Speed by PNMI */
+#define SK_HWEV_HALFDUP_CHK 10 /* Half Duplex Hangup Workaround */
+
+#define SK_WA_ACT_TIME (5000000L) /* 5 sec */
+#define SK_WA_INA_TIME (100000L) /* 100 msec */
+
+#define SK_HALFDUP_CHK_TIME (10000L) /* 10 msec */
+
+/*
+ * Define the error numbers and messages
+ */
+#define SKERR_SIRQ_E001 (SK_ERRBASE_SIRQ+0)
+#define SKERR_SIRQ_E001MSG "Unknown event"
+#define SKERR_SIRQ_E002 (SKERR_SIRQ_E001+1)
+#define SKERR_SIRQ_E002MSG "Packet timeout RX1"
+#define SKERR_SIRQ_E003 (SKERR_SIRQ_E002+1)
+#define SKERR_SIRQ_E003MSG "Packet timeout RX2"
+#define SKERR_SIRQ_E004 (SKERR_SIRQ_E003+1)
+#define SKERR_SIRQ_E004MSG "MAC 1 not correctly initialized"
+#define SKERR_SIRQ_E005 (SKERR_SIRQ_E004+1)
+#define SKERR_SIRQ_E005MSG "MAC 2 not correctly initialized"
+#define SKERR_SIRQ_E006 (SKERR_SIRQ_E005+1)
+#define SKERR_SIRQ_E006MSG "CHECK failure R1"
+#define SKERR_SIRQ_E007 (SKERR_SIRQ_E006+1)
+#define SKERR_SIRQ_E007MSG "CHECK failure R2"
+#define SKERR_SIRQ_E008 (SKERR_SIRQ_E007+1)
+#define SKERR_SIRQ_E008MSG "CHECK failure XS1"
+#define SKERR_SIRQ_E009 (SKERR_SIRQ_E008+1)
+#define SKERR_SIRQ_E009MSG "CHECK failure XA1"
+#define SKERR_SIRQ_E010 (SKERR_SIRQ_E009+1)
+#define SKERR_SIRQ_E010MSG "CHECK failure XS2"
+#define SKERR_SIRQ_E011 (SKERR_SIRQ_E010+1)
+#define SKERR_SIRQ_E011MSG "CHECK failure XA2"
+#define SKERR_SIRQ_E012 (SKERR_SIRQ_E011+1)
+#define SKERR_SIRQ_E012MSG "unexpected IRQ Master error"
+#define SKERR_SIRQ_E013 (SKERR_SIRQ_E012+1)
+#define SKERR_SIRQ_E013MSG "unexpected IRQ Status error"
+#define SKERR_SIRQ_E014 (SKERR_SIRQ_E013+1)
+#define SKERR_SIRQ_E014MSG "Parity error on RAM (read)"
+#define SKERR_SIRQ_E015 (SKERR_SIRQ_E014+1)
+#define SKERR_SIRQ_E015MSG "Parity error on RAM (write)"
+#define SKERR_SIRQ_E016 (SKERR_SIRQ_E015+1)
+#define SKERR_SIRQ_E016MSG "Parity error MAC 1"
+#define SKERR_SIRQ_E017 (SKERR_SIRQ_E016+1)
+#define SKERR_SIRQ_E017MSG "Parity error MAC 2"
+#define SKERR_SIRQ_E018 (SKERR_SIRQ_E017+1)
+#define SKERR_SIRQ_E018MSG "Parity error RX 1"
+#define SKERR_SIRQ_E019 (SKERR_SIRQ_E018+1)
+#define SKERR_SIRQ_E019MSG "Parity error RX 2"
+#define SKERR_SIRQ_E020 (SKERR_SIRQ_E019+1)
+#define SKERR_SIRQ_E020MSG "MAC transmit FIFO underrun"
+#define SKERR_SIRQ_E021 (SKERR_SIRQ_E020+1)
+#define SKERR_SIRQ_E021MSG "Spurious TWSI interrupt"
+#define SKERR_SIRQ_E022 (SKERR_SIRQ_E021+1)
+#define SKERR_SIRQ_E022MSG "Cable pair swap error"
+#define SKERR_SIRQ_E023 (SKERR_SIRQ_E022+1)
+#define SKERR_SIRQ_E023MSG "Auto-negotiation error"
+#define SKERR_SIRQ_E024 (SKERR_SIRQ_E023+1)
+#define SKERR_SIRQ_E024MSG "FIFO overflow error"
+
+extern void SkGeSirqIsr(SK_AC *pAC, SK_IOC IoC, SK_U32 Istatus);
+extern int SkGeSirqEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Para);
+extern void SkHWLinkUp(SK_AC *pAC, SK_IOC IoC, int Port);
+extern void SkHWLinkDown(SK_AC *pAC, SK_IOC IoC, int Port);
+
+#endif /* _INC_SKGESIRQ_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/ski2c.h u-boot-2009.03/drivers/net/sk98lin/h/ski2c.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/ski2c.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/ski2c.h 2009-03-31 14:54:46.049792800 -0700
@@ -1,292 +1,295 @@
-/******************************************************************************
- *
- * Name: ski2c.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.34 $
- * Date: $Date: 2003/01/28 09:11:21 $
- * Purpose: Defines to access Voltage and Temperature Sensor
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: ski2c.h,v $
- * Revision 1.34 2003/01/28 09:11:21 rschmidt
- * Editorial changes
- *
- * Revision 1.33 2002/10/14 16:40:50 rschmidt
- * Editorial changes (TWSI)
- *
- * Revision 1.32 2002/08/13 08:55:07 rschmidt
- * Editorial changes
- *
- * Revision 1.31 2002/08/06 09:44:22 jschmalz
- * Extensions and changes for Yukon
- *
- * Revision 1.30 2001/04/05 11:38:09 rassmann
- * Set SenState to idle in SkI2cWaitIrq().
- * Changed error message in SkI2cWaitIrq().
- *
- * Revision 1.29 2000/08/03 14:28:17 rassmann
- * - Added function to wait for I2C being ready before resetting the board.
- * - Replaced one duplicate "out of range" message with correct one.
- *
- * Revision 1.28 1999/11/22 13:55:46 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.27 1999/05/20 09:23:10 cgoos
- * Changes for 1000Base-T (Fan sensors).
- *
- * Revision 1.26 1998/12/01 13:45:47 gklug
- * add: InitLevel to I2c struct
- *
- * Revision 1.25 1998/11/03 06:55:16 gklug
- * add: Dummy Reads to I2c struct
- *
- * Revision 1.24 1998/10/02 14:28:59 cgoos
- * Added prototype for SkI2cIsr.
- *
- * Revision 1.23 1998/09/08 12:20:11 gklug
- * add: prototypes for init and read functions
- *
- * Revision 1.22 1998/09/08 07:37:56 gklug
- * add: log error if PCI_IO voltage sensor could not be initialized
- *
- * Revision 1.21 1998/09/04 08:38:05 malthoff
- * Change the values for I2C_READ and I2C_WRITE
- *
- * Revision 1.20 1998/08/25 07:52:22 gklug
- * chg: Timestamps (last) added for logging
- *
- * Revision 1.19 1998/08/25 06:09:00 gklug
- * rmv: warning and error levels of the individual sensors.
- * add: timing definitions for sending traps and logging errors
- *
- * Revision 1.18 1998/08/20 11:41:15 gklug
- * chg: omit STRCPY macro by using char * as Sensor Description
- *
- * Revision 1.17 1998/08/20 11:37:43 gklug
- * chg: change Ioc to IoC
- *
- * Revision 1.16 1998/08/20 11:30:38 gklug
- * fix: SenRead declaration
- *
- * Revision 1.15 1998/08/20 11:27:53 gklug
- * fix: Compile bugs with new awrning constants
- *
- * Revision 1.14 1998/08/20 08:53:12 gklug
- * fix: compiler errors
- * add: Threshold values
- *
- * Revision 1.13 1998/08/19 12:21:16 gklug
- * fix: remove struct from C files (see CCC)
- * add: typedefs for all structs
- *
- * Revision 1.12 1998/08/19 10:57:41 gklug
- * add: Warning levels
- *
- * Revision 1.11 1998/08/18 08:37:02 malthoff
- * Prototypes not required for SK_DIAG.
- *
- * Revision 1.10 1998/08/17 13:54:00 gklug
- * fix: declaration of event function
- *
- * Revision 1.9 1998/08/17 06:48:39 malthoff
- * Remove some unrequired macros.
- * Fix the compiler errors.
- *
- * Revision 1.8 1998/08/14 06:47:19 gklug
- * fix: Values are intergers
- *
- * Revision 1.7 1998/08/14 06:26:05 gklug
- * add: Init error message
- *
- * Revision 1.6 1998/08/13 08:31:08 gklug
- * add: Error message
- *
- * Revision 1.5 1998/08/12 14:32:04 gklug
- * add: new error code/message
- *
- * Revision 1.4 1998/08/12 13:39:08 gklug
- * chg: names of error messages
- * add: defines for Sensor type and thresholds
- *
- * Revision 1.3 1998/08/11 07:57:16 gklug
- * add: sensor struct
- * add: Timeout defines
- * add: I2C control struct for pAC
- *
- * Revision 1.2 1998/07/17 11:29:02 gklug
- * rmv: Microwire and SMTPANIC
- *
- * Revision 1.1 1998/06/19 14:30:10 malthoff
- * Created. Sources taken from ML Project.
- *
- *
- ******************************************************************************/
-
-/*
- * SKI2C.H contains all I2C specific defines
- */
-
-#ifndef _SKI2C_H_
-#define _SKI2C_H_
-
-typedef struct s_Sensor SK_SENSOR;
-
-#include "h/skgei2c.h"
-
-/*
- * Define the I2C events.
- */
-#define SK_I2CEV_IRQ 1 /* IRQ happened Event */
-#define SK_I2CEV_TIM 2 /* Timeout event */
-#define SK_I2CEV_CLEAR 3 /* Clear MIB Values */
-
-/*
- * Define READ and WRITE Constants.
- */
-#undef I2C_READ /* just in case */
-#undef I2C_WRITE /* just in case */
-#define I2C_READ 0
-#define I2C_WRITE 1
-#define I2C_BURST 1
-#define I2C_SINGLE 0
-
-#define SKERR_I2C_E001 (SK_ERRBASE_I2C+0)
-#define SKERR_I2C_E001MSG "Sensor index unknown"
-#define SKERR_I2C_E002 (SKERR_I2C_E001+1)
-#define SKERR_I2C_E002MSG "TWSI: transfer does not complete"
-#define SKERR_I2C_E003 (SKERR_I2C_E002+1)
-#define SKERR_I2C_E003MSG "LM80: NAK on device send"
-#define SKERR_I2C_E004 (SKERR_I2C_E003+1)
-#define SKERR_I2C_E004MSG "LM80: NAK on register send"
-#define SKERR_I2C_E005 (SKERR_I2C_E004+1)
-#define SKERR_I2C_E005MSG "LM80: NAK on device (2) send"
-#define SKERR_I2C_E006 (SKERR_I2C_E005+1)
-#define SKERR_I2C_E006MSG "Unknown event"
-#define SKERR_I2C_E007 (SKERR_I2C_E006+1)
-#define SKERR_I2C_E007MSG "LM80 read out of state"
-#define SKERR_I2C_E008 (SKERR_I2C_E007+1)
-#define SKERR_I2C_E008MSG "Unexpected sensor read completed"
-#define SKERR_I2C_E009 (SKERR_I2C_E008+1)
-#define SKERR_I2C_E009MSG "WARNING: temperature sensor out of range"
-#define SKERR_I2C_E010 (SKERR_I2C_E009+1)
-#define SKERR_I2C_E010MSG "WARNING: voltage sensor out of range"
-#define SKERR_I2C_E011 (SKERR_I2C_E010+1)
-#define SKERR_I2C_E011MSG "ERROR: temperature sensor out of range"
-#define SKERR_I2C_E012 (SKERR_I2C_E011+1)
-#define SKERR_I2C_E012MSG "ERROR: voltage sensor out of range"
-#define SKERR_I2C_E013 (SKERR_I2C_E012+1)
-#define SKERR_I2C_E013MSG "ERROR: couldn't init sensor"
-#define SKERR_I2C_E014 (SKERR_I2C_E013+1)
-#define SKERR_I2C_E014MSG "WARNING: fan sensor out of range"
-#define SKERR_I2C_E015 (SKERR_I2C_E014+1)
-#define SKERR_I2C_E015MSG "ERROR: fan sensor out of range"
-#define SKERR_I2C_E016 (SKERR_I2C_E015+1)
-#define SKERR_I2C_E016MSG "TWSI: active transfer does not complete"
-
-/*
- * Define Timeout values
- */
-#define SK_I2C_TIM_LONG 2000000L /* 2 seconds */
-#define SK_I2C_TIM_SHORT 100000L /* 100 milliseconds */
-#define SK_I2C_TIM_WATCH 1000000L /* 1 second */
-
-/*
- * Define trap and error log hold times
- */
-#ifndef SK_SEN_ERR_TR_HOLD
-#define SK_SEN_ERR_TR_HOLD (4*SK_TICKS_PER_SEC)
-#endif
-#ifndef SK_SEN_ERR_LOG_HOLD
-#define SK_SEN_ERR_LOG_HOLD (60*SK_TICKS_PER_SEC)
-#endif
-#ifndef SK_SEN_WARN_TR_HOLD
-#define SK_SEN_WARN_TR_HOLD (15*SK_TICKS_PER_SEC)
-#endif
-#ifndef SK_SEN_WARN_LOG_HOLD
-#define SK_SEN_WARN_LOG_HOLD (15*60*SK_TICKS_PER_SEC)
-#endif
-
-/*
- * Defines for SenType
- */
-#define SK_SEN_UNKNOWN 0
-#define SK_SEN_TEMP 1
-#define SK_SEN_VOLT 2
-#define SK_SEN_FAN 3
-
-/*
- * Define for the SenErrorFlag
- */
-#define SK_SEN_ERR_NOT_PRESENT 0 /* Error Flag: Sensor not present */
-#define SK_SEN_ERR_OK 1 /* Error Flag: O.K. */
-#define SK_SEN_ERR_WARN 2 /* Error Flag: Warning */
-#define SK_SEN_ERR_ERR 3 /* Error Flag: Error */
-#define SK_SEN_ERR_FAULTY 4 /* Error Flag: Faulty */
-
-/*
- * Define the Sensor struct
- */
-struct s_Sensor {
- char *SenDesc; /* Description */
- int SenType; /* Voltage or Temperature */
- SK_I32 SenValue; /* Current value of the sensor */
- SK_I32 SenThreErrHigh; /* High error Threshhold of this sensor */
- SK_I32 SenThreWarnHigh; /* High warning Threshhold of this sensor */
- SK_I32 SenThreErrLow; /* Lower error Threshold of the sensor */
- SK_I32 SenThreWarnLow; /* Lower warning Threshold of the sensor */
- int SenErrFlag; /* Sensor indicated an error */
- SK_BOOL SenInit; /* Is sensor initialized ? */
- SK_U64 SenErrCts; /* Error trap counter */
- SK_U64 SenWarnCts; /* Warning trap counter */
- SK_U64 SenBegErrTS; /* Begin error timestamp */
- SK_U64 SenBegWarnTS; /* Begin warning timestamp */
- SK_U64 SenLastErrTrapTS; /* Last error trap timestamp */
- SK_U64 SenLastErrLogTS; /* Last error log timestamp */
- SK_U64 SenLastWarnTrapTS; /* Last warning trap timestamp */
- SK_U64 SenLastWarnLogTS; /* Last warning log timestamp */
- int SenState; /* Sensor State (see HW specific include) */
- int (*SenRead)(SK_AC *pAC, SK_IOC IoC, struct s_Sensor *pSen);
- /* Sensors read function */
- SK_U16 SenReg; /* Register Address for this sensor */
- SK_U8 SenDev; /* Device Selection for this sensor */
-};
-
-typedef struct s_I2c {
- SK_SENSOR SenTable[SK_MAX_SENSORS]; /* Sensor Table */
- int CurrSens; /* Which sensor is currently queried */
- int MaxSens; /* Max. number of sensors */
- int TimerMode; /* Use the timer also to watch the state machine */
- int InitLevel; /* Initialized Level */
-#ifndef SK_DIAG
- int DummyReads; /* Number of non-checked dummy reads */
- SK_TIMER SenTimer; /* Sensors timer */
-#endif /* !SK_DIAG */
-} SK_I2C;
-
-extern int SkI2cReadSensor(SK_AC *pAC, SK_IOC IoC, SK_SENSOR *pSen);
-#ifndef SK_DIAG
-extern int SkI2cEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Para);
-extern int SkI2cInit(SK_AC *pAC, SK_IOC IoC, int Level);
-extern void SkI2cWaitIrq(SK_AC *pAC, SK_IOC IoC);
-extern void SkI2cIsr(SK_AC *pAC, SK_IOC IoC);
-
-#endif
-#endif /* n_SKI2C_H */
+/******************************************************************************
+ *
+ * Name: ski2c.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Defines to access Voltage and Temperature Sensor
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: ski2c.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.34 2003/01/28 09:11:21 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.33 2002/10/14 16:40:50 rschmidt
+ * Editorial changes (TWSI)
+ *
+ * Revision 1.32 2002/08/13 08:55:07 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.31 2002/08/06 09:44:22 jschmalz
+ * Extensions and changes for Yukon
+ *
+ * Revision 1.30 2001/04/05 11:38:09 rassmann
+ * Set SenState to idle in SkI2cWaitIrq().
+ * Changed error message in SkI2cWaitIrq().
+ *
+ * Revision 1.29 2000/08/03 14:28:17 rassmann
+ * - Added function to wait for I2C being ready before resetting the board.
+ * - Replaced one duplicate "out of range" message with correct one.
+ *
+ * Revision 1.28 1999/11/22 13:55:46 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.27 1999/05/20 09:23:10 cgoos
+ * Changes for 1000Base-T (Fan sensors).
+ *
+ * Revision 1.26 1998/12/01 13:45:47 gklug
+ * add: InitLevel to I2c struct
+ *
+ * Revision 1.25 1998/11/03 06:55:16 gklug
+ * add: Dummy Reads to I2c struct
+ *
+ * Revision 1.24 1998/10/02 14:28:59 cgoos
+ * Added prototype for SkI2cIsr.
+ *
+ * Revision 1.23 1998/09/08 12:20:11 gklug
+ * add: prototypes for init and read functions
+ *
+ * Revision 1.22 1998/09/08 07:37:56 gklug
+ * add: log error if PCI_IO voltage sensor could not be initialized
+ *
+ * Revision 1.21 1998/09/04 08:38:05 malthoff
+ * Change the values for I2C_READ and I2C_WRITE
+ *
+ * Revision 1.20 1998/08/25 07:52:22 gklug
+ * chg: Timestamps (last) added for logging
+ *
+ * Revision 1.19 1998/08/25 06:09:00 gklug
+ * rmv: warning and error levels of the individual sensors.
+ * add: timing definitions for sending traps and logging errors
+ *
+ * Revision 1.18 1998/08/20 11:41:15 gklug
+ * chg: omit STRCPY macro by using char * as Sensor Description
+ *
+ * Revision 1.17 1998/08/20 11:37:43 gklug
+ * chg: change Ioc to IoC
+ *
+ * Revision 1.16 1998/08/20 11:30:38 gklug
+ * fix: SenRead declaration
+ *
+ * Revision 1.15 1998/08/20 11:27:53 gklug
+ * fix: Compile bugs with new awrning constants
+ *
+ * Revision 1.14 1998/08/20 08:53:12 gklug
+ * fix: compiler errors
+ * add: Threshold values
+ *
+ * Revision 1.13 1998/08/19 12:21:16 gklug
+ * fix: remove struct from C files (see CCC)
+ * add: typedefs for all structs
+ *
+ * Revision 1.12 1998/08/19 10:57:41 gklug
+ * add: Warning levels
+ *
+ * Revision 1.11 1998/08/18 08:37:02 malthoff
+ * Prototypes not required for SK_DIAG.
+ *
+ * Revision 1.10 1998/08/17 13:54:00 gklug
+ * fix: declaration of event function
+ *
+ * Revision 1.9 1998/08/17 06:48:39 malthoff
+ * Remove some unrequired macros.
+ * Fix the compiler errors.
+ *
+ * Revision 1.8 1998/08/14 06:47:19 gklug
+ * fix: Values are intergers
+ *
+ * Revision 1.7 1998/08/14 06:26:05 gklug
+ * add: Init error message
+ *
+ * Revision 1.6 1998/08/13 08:31:08 gklug
+ * add: Error message
+ *
+ * Revision 1.5 1998/08/12 14:32:04 gklug
+ * add: new error code/message
+ *
+ * Revision 1.4 1998/08/12 13:39:08 gklug
+ * chg: names of error messages
+ * add: defines for Sensor type and thresholds
+ *
+ * Revision 1.3 1998/08/11 07:57:16 gklug
+ * add: sensor struct
+ * add: Timeout defines
+ * add: I2C control struct for pAC
+ *
+ * Revision 1.2 1998/07/17 11:29:02 gklug
+ * rmv: Microwire and SMTPANIC
+ *
+ * Revision 1.1 1998/06/19 14:30:10 malthoff
+ * Created. Sources taken from ML Project.
+ *
+ *
+ ******************************************************************************/
+
+/*
+ * SKI2C.H contains all I2C specific defines
+ */
+
+#ifndef _SKI2C_H_
+#define _SKI2C_H_
+
+typedef struct s_Sensor SK_SENSOR;
+
+#include "h/skgei2c.h"
+
+/*
+ * Define the I2C events.
+ */
+#define SK_I2CEV_IRQ 1 /* IRQ happened Event */
+#define SK_I2CEV_TIM 2 /* Timeout event */
+#define SK_I2CEV_CLEAR 3 /* Clear MIB Values */
+
+/*
+ * Define READ and WRITE Constants.
+ */
+#undef I2C_READ /* just in case */
+#undef I2C_WRITE /* just in case */
+#define I2C_READ 0
+#define I2C_WRITE 1
+#define I2C_BURST 1
+#define I2C_SINGLE 0
+
+#define SKERR_I2C_E001 (SK_ERRBASE_I2C+0)
+#define SKERR_I2C_E001MSG "Sensor index unknown"
+#define SKERR_I2C_E002 (SKERR_I2C_E001+1)
+#define SKERR_I2C_E002MSG "TWSI: transfer does not complete"
+#define SKERR_I2C_E003 (SKERR_I2C_E002+1)
+#define SKERR_I2C_E003MSG "LM80: NAK on device send"
+#define SKERR_I2C_E004 (SKERR_I2C_E003+1)
+#define SKERR_I2C_E004MSG "LM80: NAK on register send"
+#define SKERR_I2C_E005 (SKERR_I2C_E004+1)
+#define SKERR_I2C_E005MSG "LM80: NAK on device (2) send"
+#define SKERR_I2C_E006 (SKERR_I2C_E005+1)
+#define SKERR_I2C_E006MSG "Unknown event"
+#define SKERR_I2C_E007 (SKERR_I2C_E006+1)
+#define SKERR_I2C_E007MSG "LM80 read out of state"
+#define SKERR_I2C_E008 (SKERR_I2C_E007+1)
+#define SKERR_I2C_E008MSG "Unexpected sensor read completed"
+#define SKERR_I2C_E009 (SKERR_I2C_E008+1)
+#define SKERR_I2C_E009MSG "WARNING: temperature sensor out of range"
+#define SKERR_I2C_E010 (SKERR_I2C_E009+1)
+#define SKERR_I2C_E010MSG "WARNING: voltage sensor out of range"
+#define SKERR_I2C_E011 (SKERR_I2C_E010+1)
+#define SKERR_I2C_E011MSG "ERROR: temperature sensor out of range"
+#define SKERR_I2C_E012 (SKERR_I2C_E011+1)
+#define SKERR_I2C_E012MSG "ERROR: voltage sensor out of range"
+#define SKERR_I2C_E013 (SKERR_I2C_E012+1)
+#define SKERR_I2C_E013MSG "ERROR: couldn't init sensor"
+#define SKERR_I2C_E014 (SKERR_I2C_E013+1)
+#define SKERR_I2C_E014MSG "WARNING: fan sensor out of range"
+#define SKERR_I2C_E015 (SKERR_I2C_E014+1)
+#define SKERR_I2C_E015MSG "ERROR: fan sensor out of range"
+#define SKERR_I2C_E016 (SKERR_I2C_E015+1)
+#define SKERR_I2C_E016MSG "TWSI: active transfer does not complete"
+
+/*
+ * Define Timeout values
+ */
+#define SK_I2C_TIM_LONG 2000000L /* 2 seconds */
+#define SK_I2C_TIM_SHORT 100000L /* 100 milliseconds */
+#define SK_I2C_TIM_WATCH 1000000L /* 1 second */
+
+/*
+ * Define trap and error log hold times
+ */
+#ifndef SK_SEN_ERR_TR_HOLD
+#define SK_SEN_ERR_TR_HOLD (4*SK_TICKS_PER_SEC)
+#endif
+#ifndef SK_SEN_ERR_LOG_HOLD
+#define SK_SEN_ERR_LOG_HOLD (60*SK_TICKS_PER_SEC)
+#endif
+#ifndef SK_SEN_WARN_TR_HOLD
+#define SK_SEN_WARN_TR_HOLD (15*SK_TICKS_PER_SEC)
+#endif
+#ifndef SK_SEN_WARN_LOG_HOLD
+#define SK_SEN_WARN_LOG_HOLD (15*60*SK_TICKS_PER_SEC)
+#endif
+
+/*
+ * Defines for SenType
+ */
+#define SK_SEN_UNKNOWN 0
+#define SK_SEN_TEMP 1
+#define SK_SEN_VOLT 2
+#define SK_SEN_FAN 3
+
+/*
+ * Define for the SenErrorFlag
+ */
+#define SK_SEN_ERR_NOT_PRESENT 0 /* Error Flag: Sensor not present */
+#define SK_SEN_ERR_OK 1 /* Error Flag: O.K. */
+#define SK_SEN_ERR_WARN 2 /* Error Flag: Warning */
+#define SK_SEN_ERR_ERR 3 /* Error Flag: Error */
+#define SK_SEN_ERR_FAULTY 4 /* Error Flag: Faulty */
+
+/*
+ * Define the Sensor struct
+ */
+struct s_Sensor {
+ char *SenDesc; /* Description */
+ int SenType; /* Voltage or Temperature */
+ SK_I32 SenValue; /* Current value of the sensor */
+ SK_I32 SenThreErrHigh; /* High error Threshhold of this sensor */
+ SK_I32 SenThreWarnHigh; /* High warning Threshhold of this sensor */
+ SK_I32 SenThreErrLow; /* Lower error Threshold of the sensor */
+ SK_I32 SenThreWarnLow; /* Lower warning Threshold of the sensor */
+ int SenErrFlag; /* Sensor indicated an error */
+ SK_BOOL SenInit; /* Is sensor initialized ? */
+ SK_U64 SenErrCts; /* Error trap counter */
+ SK_U64 SenWarnCts; /* Warning trap counter */
+ SK_U64 SenBegErrTS; /* Begin error timestamp */
+ SK_U64 SenBegWarnTS; /* Begin warning timestamp */
+ SK_U64 SenLastErrTrapTS; /* Last error trap timestamp */
+ SK_U64 SenLastErrLogTS; /* Last error log timestamp */
+ SK_U64 SenLastWarnTrapTS; /* Last warning trap timestamp */
+ SK_U64 SenLastWarnLogTS; /* Last warning log timestamp */
+ int SenState; /* Sensor State (see HW specific include) */
+ int (*SenRead)(SK_AC *pAC, SK_IOC IoC, struct s_Sensor *pSen);
+ /* Sensors read function */
+ SK_U16 SenReg; /* Register Address for this sensor */
+ SK_U8 SenDev; /* Device Selection for this sensor */
+};
+
+typedef struct s_I2c {
+ SK_SENSOR SenTable[SK_MAX_SENSORS]; /* Sensor Table */
+ int CurrSens; /* Which sensor is currently queried */
+ int MaxSens; /* Max. number of sensors */
+ int TimerMode; /* Use the timer also to watch the state machine */
+ int InitLevel; /* Initialized Level */
+#ifndef SK_DIAG
+ int DummyReads; /* Number of non-checked dummy reads */
+ SK_TIMER SenTimer; /* Sensors timer */
+#endif /* !SK_DIAG */
+} SK_I2C;
+
+extern int SkI2cReadSensor(SK_AC *pAC, SK_IOC IoC, SK_SENSOR *pSen);
+#ifndef SK_DIAG
+extern int SkI2cEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Para);
+extern int SkI2cInit(SK_AC *pAC, SK_IOC IoC, int Level);
+extern void SkI2cWaitIrq(SK_AC *pAC, SK_IOC IoC);
+extern void SkI2cIsr(SK_AC *pAC, SK_IOC IoC);
+
+#endif
+#endif /* n_SKI2C_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skqueue.h u-boot-2009.03/drivers/net/sk98lin/h/skqueue.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skqueue.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skqueue.h 2009-03-31 14:54:46.096667200 -0700
@@ -1,147 +1,150 @@
-/******************************************************************************
- *
- * Name: skqueue.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.14 $
- * Date: $Date: 2002/03/15 10:52:13 $
- * Purpose: Defines for the Event queue
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998,1999 SysKonnect,
- * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skqueue.h,v $
- * Revision 1.14 2002/03/15 10:52:13 mkunz
- * Added event classes for link aggregation
- *
- * Revision 1.13 1999/11/22 13:59:05 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.12 1998/09/08 08:48:01 gklug
- * add: init level handling
- *
- * Revision 1.11 1998/09/03 14:15:11 gklug
- * add: CSUM and HWAC Eventclass and function.
- * fix: pParaPtr according to CCC
- *
- * Revision 1.10 1998/08/20 12:43:03 gklug
- * add: typedef SK_QUEUE
- *
- * Revision 1.9 1998/08/19 09:50:59 gklug
- * fix: remove struct keyword from c-code (see CCC) add typedefs
- *
- * Revision 1.8 1998/08/18 07:00:01 gklug
- * fix: SK_PTR not defined use void * instead.
- *
- * Revision 1.7 1998/08/17 13:43:19 gklug
- * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
- *
- * Revision 1.6 1998/08/14 07:09:30 gklug
- * fix: chg pAc -> pAC
- *
- * Revision 1.5 1998/08/11 14:26:44 gklug
- * chg: Event Dispatcher returns now int.
- *
- * Revision 1.4 1998/08/11 12:15:21 gklug
- * add: Error numbers of skqueue module
- *
- * Revision 1.3 1998/08/07 12:54:23 gklug
- * fix: first compiled version
- *
- * Revision 1.2 1998/08/07 09:34:00 gklug
- * adapt structure defs to CCC
- * add: prototypes for functions
- *
- * Revision 1.1 1998/07/30 14:52:12 gklug
- * Initial version.
- * Defines Event Classes, Event structs and queue management variables.
- *
- *
- *
- ******************************************************************************/
-
-/*
- * SKQUEUE.H contains all defines and types for the event queue
- */
-
-#ifndef _SKQUEUE_H_
-#define _SKQUEUE_H_
-
-
-/*
- * define the event classes to be served
- */
-#define SKGE_DRV 1 /* Driver Event Class */
-#define SKGE_RLMT 2 /* RLMT Event Class */
-#define SKGE_I2C 3 /* i2C Event Class */
-#define SKGE_PNMI 4 /* PNMI Event Class */
-#define SKGE_CSUM 5 /* Checksum Event Class */
-#define SKGE_HWAC 6 /* Hardware Access Event Class */
-
-#define SKGE_SWT 9 /* Software Timer Event Class */
-#define SKGE_LACP 10 /* LACP Aggregation Event Class */
-#define SKGE_RSF 11 /* RSF Aggregation Event Class */
-#define SKGE_MARKER 12 /* MARKER Aggregation Event Class */
-#define SKGE_FD 13 /* FD Distributor Event Class */
-
-/*
- * define event queue as circular buffer
- */
-#define SK_MAX_EVENT 64
-
-/*
- * Parameter union for the Para stuff
- */
-typedef union u_EvPara {
- void *pParaPtr; /* Parameter Pointer */
- SK_U64 Para64; /* Parameter 64bit version */
- SK_U32 Para32[2]; /* Parameter Array of 32bit parameters */
-} SK_EVPARA;
-
-/*
- * Event Queue
- * skqueue.c
- * events are class/value pairs
- * class is addressee, e.g. RMT, PCM etc.
- * value is command, e.g. line state change, ring op change etc.
- */
-typedef struct s_EventElem {
- SK_U32 Class ; /* Event class */
- SK_U32 Event ; /* Event value */
- SK_EVPARA Para ; /* Event parameter */
-} SK_EVENTELEM;
-
-typedef struct s_Queue {
- SK_EVENTELEM EvQueue[SK_MAX_EVENT];
- SK_EVENTELEM *EvPut ;
- SK_EVENTELEM *EvGet ;
-} SK_QUEUE;
-
-extern void SkEventInit(SK_AC *pAC, SK_IOC Ioc, int Level);
-extern void SkEventQueue(SK_AC *pAC, SK_U32 Class, SK_U32 Event,
- SK_EVPARA Para);
-extern int SkEventDispatcher(SK_AC *pAC,SK_IOC Ioc);
-
-
-/* Define Error Numbers and messages */
-#define SKERR_Q_E001 (SK_ERRBASE_QUEUE+0)
-#define SKERR_Q_E001MSG "Event queue overflow"
-#define SKERR_Q_E002 (SKERR_Q_E001+1)
-#define SKERR_Q_E002MSG "Undefined event class"
-#endif /* _SKQUEUE_H_ */
+/******************************************************************************
+ *
+ * Name: skqueue.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:10 $
+ * Purpose: Defines for the Event queue
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998,1999 SysKonnect,
+ * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skqueue.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:10 kenagy
+ * no message
+ *
+ * Revision 1.14 2002/03/15 10:52:13 mkunz
+ * Added event classes for link aggregation
+ *
+ * Revision 1.13 1999/11/22 13:59:05 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.12 1998/09/08 08:48:01 gklug
+ * add: init level handling
+ *
+ * Revision 1.11 1998/09/03 14:15:11 gklug
+ * add: CSUM and HWAC Eventclass and function.
+ * fix: pParaPtr according to CCC
+ *
+ * Revision 1.10 1998/08/20 12:43:03 gklug
+ * add: typedef SK_QUEUE
+ *
+ * Revision 1.9 1998/08/19 09:50:59 gklug
+ * fix: remove struct keyword from c-code (see CCC) add typedefs
+ *
+ * Revision 1.8 1998/08/18 07:00:01 gklug
+ * fix: SK_PTR not defined use void * instead.
+ *
+ * Revision 1.7 1998/08/17 13:43:19 gklug
+ * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
+ *
+ * Revision 1.6 1998/08/14 07:09:30 gklug
+ * fix: chg pAc -> pAC
+ *
+ * Revision 1.5 1998/08/11 14:26:44 gklug
+ * chg: Event Dispatcher returns now int.
+ *
+ * Revision 1.4 1998/08/11 12:15:21 gklug
+ * add: Error numbers of skqueue module
+ *
+ * Revision 1.3 1998/08/07 12:54:23 gklug
+ * fix: first compiled version
+ *
+ * Revision 1.2 1998/08/07 09:34:00 gklug
+ * adapt structure defs to CCC
+ * add: prototypes for functions
+ *
+ * Revision 1.1 1998/07/30 14:52:12 gklug
+ * Initial version.
+ * Defines Event Classes, Event structs and queue management variables.
+ *
+ *
+ *
+ ******************************************************************************/
+
+/*
+ * SKQUEUE.H contains all defines and types for the event queue
+ */
+
+#ifndef _SKQUEUE_H_
+#define _SKQUEUE_H_
+
+
+/*
+ * define the event classes to be served
+ */
+#define SKGE_DRV 1 /* Driver Event Class */
+#define SKGE_RLMT 2 /* RLMT Event Class */
+#define SKGE_I2C 3 /* i2C Event Class */
+#define SKGE_PNMI 4 /* PNMI Event Class */
+#define SKGE_CSUM 5 /* Checksum Event Class */
+#define SKGE_HWAC 6 /* Hardware Access Event Class */
+
+#define SKGE_SWT 9 /* Software Timer Event Class */
+#define SKGE_LACP 10 /* LACP Aggregation Event Class */
+#define SKGE_RSF 11 /* RSF Aggregation Event Class */
+#define SKGE_MARKER 12 /* MARKER Aggregation Event Class */
+#define SKGE_FD 13 /* FD Distributor Event Class */
+
+/*
+ * define event queue as circular buffer
+ */
+#define SK_MAX_EVENT 64
+
+/*
+ * Parameter union for the Para stuff
+ */
+typedef union u_EvPara {
+ void *pParaPtr; /* Parameter Pointer */
+ SK_U64 Para64; /* Parameter 64bit version */
+ SK_U32 Para32[2]; /* Parameter Array of 32bit parameters */
+} SK_EVPARA;
+
+/*
+ * Event Queue
+ * skqueue.c
+ * events are class/value pairs
+ * class is addressee, e.g. RMT, PCM etc.
+ * value is command, e.g. line state change, ring op change etc.
+ */
+typedef struct s_EventElem {
+ SK_U32 Class ; /* Event class */
+ SK_U32 Event ; /* Event value */
+ SK_EVPARA Para ; /* Event parameter */
+} SK_EVENTELEM;
+
+typedef struct s_Queue {
+ SK_EVENTELEM EvQueue[SK_MAX_EVENT];
+ SK_EVENTELEM *EvPut ;
+ SK_EVENTELEM *EvGet ;
+} SK_QUEUE;
+
+extern void SkEventInit(SK_AC *pAC, SK_IOC Ioc, int Level);
+extern void SkEventQueue(SK_AC *pAC, SK_U32 Class, SK_U32 Event,
+ SK_EVPARA Para);
+extern int SkEventDispatcher(SK_AC *pAC,SK_IOC Ioc);
+
+
+/* Define Error Numbers and messages */
+#define SKERR_Q_E001 (SK_ERRBASE_QUEUE+0)
+#define SKERR_Q_E001MSG "Event queue overflow"
+#define SKERR_Q_E002 (SKERR_Q_E001+1)
+#define SKERR_Q_E002MSG "Undefined event class"
+#endif /* _SKQUEUE_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skrlmt.h u-boot-2009.03/drivers/net/sk98lin/h/skrlmt.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skrlmt.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skrlmt.h 2009-03-31 14:54:46.127916800 -0700
@@ -1,563 +1,566 @@
-/******************************************************************************
- *
- * Name: skrlmt.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.35 $
- * Date: $Date: 2003/01/31 14:12:41 $
- * Purpose: Header file for Redundant Link ManagemenT.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2001 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skrlmt.h,v $
- * Revision 1.35 2003/01/31 14:12:41 mkunz
- * single port adapter runs now with two identical MAC addresses
- *
- * Revision 1.34 2002/09/23 15:13:41 rwahl
- * Editorial changes.
- *
- * Revision 1.33 2001/07/03 12:16:48 mkunz
- * New Flag ChgBcPrio (Change priority of last broadcast received)
- *
- * Revision 1.32 2001/02/14 14:06:31 rassmann
- * Editorial changes.
- *
- * Revision 1.31 2001/02/05 14:25:26 rassmann
- * Prepared RLMT for transparent operation.
- *
- * Revision 1.30 2001/01/22 13:41:39 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.29 2000/11/17 08:58:00 rassmann
- * Moved CheckSwitch from SK_RLMT_PACKET_RECEIVED to SK_RLMT_TIM event.
- *
- * Revision 1.28 2000/11/09 12:24:34 rassmann
- * Editorial changes.
- *
- * Revision 1.27 1999/11/22 13:59:56 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.26 1999/10/04 14:01:19 rassmann
- * Corrected reaction to reception of BPDU frames (#10441).
- *
- * Revision 1.25 1999/07/20 12:53:39 rassmann
- * Fixed documentation errors for lookahead macros.
- *
- * Revision 1.24 1999/05/28 11:15:56 rassmann
- * Changed behaviour to reflect Design Spec v1.2.
- * Controlling Link LED(s).
- * Introduced RLMT Packet Version field in RLMT Packet.
- * Newstyle lookahead macros (checking meta-information before looking at
- * the packet).
- *
- * Revision 1.23 1999/01/28 12:50:42 rassmann
- * Not using broadcast time stamps in CheckLinkState mode.
- *
- * Revision 1.22 1999/01/27 14:13:04 rassmann
- * Monitoring broadcast traffic.
- * Switching more reliably and not too early if switch is
- * configured for spanning tree.
- *
- * Revision 1.21 1998/12/08 13:11:25 rassmann
- * Stopping SegTimer at RlmtStop.
- *
- * Revision 1.20 1998/11/24 12:37:33 rassmann
- * Implemented segmentation check.
- *
- * Revision 1.19 1998/11/17 13:43:06 rassmann
- * Handling (logical) tx failure.
- * Sending packet on logical address after PORT_SWITCH.
- *
- * Revision 1.18 1998/11/13 16:56:56 rassmann
- * Added macro version of SkRlmtLookaheadPacket.
- *
- * Revision 1.17 1998/11/06 18:06:05 rassmann
- * Corrected timing when RLMT checks fail.
- * Clearing tx counter earlier in periodical checks.
- *
- * Revision 1.16 1998/11/03 13:53:50 rassmann
- * RLMT should switch now (at least in mode 3).
- *
- * Revision 1.15 1998/10/22 11:39:52 rassmann
- * Corrected signed/unsigned mismatches.
- * Corrected receive list handling and address recognition.
- *
- * Revision 1.14 1998/10/15 15:16:36 rassmann
- * Finished Spanning Tree checking.
- * Checked with lint.
- *
- * Revision 1.13 1998/09/24 19:16:08 rassmann
- * Code cleanup.
- * Introduced Timer for PORT_DOWN due to no RX.
- *
- * Revision 1.12 1998/09/16 11:09:52 rassmann
- * Syntax corrections.
- *
- * Revision 1.11 1998/09/15 11:28:50 rassmann
- * Syntax corrections.
- *
- * Revision 1.10 1998/09/14 17:07:38 rassmann
- * Added code for port checking via LAN.
- * Changed Mbuf definition.
- *
- * Revision 1.9 1998/09/07 11:14:15 rassmann
- * Syntax corrections.
- *
- * Revision 1.8 1998/09/07 09:06:08 rassmann
- * Syntax corrections.
- *
- * Revision 1.7 1998/09/04 19:41:34 rassmann
- * Syntax corrections.
- * Started entering code for checking local links.
- *
- * Revision 1.6 1998/09/04 12:14:28 rassmann
- * Interface cleanup.
- *
- * Revision 1.5 1998/09/02 16:55:29 rassmann
- * Updated to reflect new DRV/HWAC/RLMT interface.
- *
- * Revision 1.4 1998/09/02 07:26:02 afischer
- * typedef for SK_RLMT_PORT
- *
- * Revision 1.3 1998/08/27 14:29:03 rassmann
- * Code cleanup.
- *
- * Revision 1.2 1998/08/27 14:26:25 rassmann
- * Updated interface.
- *
- * Revision 1.1 1998/08/21 08:29:10 rassmann
- * First public version.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * This is the header file for Redundant Link ManagemenT.
- *
- * Include File Hierarchy:
- *
- * "skdrv1st.h"
- * ...
- * "sktypes.h"
- * "skqueue.h"
- * "skaddr.h"
- * "skrlmt.h"
- * ...
- * "skdrv2nd.h"
- *
- ******************************************************************************/
-
-#ifndef __INC_SKRLMT_H
-#define __INC_SKRLMT_H
-
-#ifdef __cplusplus
-#error C++ is not yet supported.
-extern "C" {
-#endif /* cplusplus */
-
-/* defines ********************************************************************/
-
-#define SK_RLMT_NET_DOWN_TEMP 1 /* NET_DOWN due to last port down. */
-#define SK_RLMT_NET_DOWN_FINAL 2 /* NET_DOWN due to RLMT_STOP. */
-
-/* ----- Default queue sizes - must be multiples of 8 KB ----- */
-
-/* Less than 8 KB free in RX queue => pause frames. */
-#define SK_RLMT_STANDBY_QRXSIZE 128 /* Size of rx standby queue in KB. */
-#define SK_RLMT_STANDBY_QXASIZE 32 /* Size of async standby queue in KB. */
-#define SK_RLMT_STANDBY_QXSSIZE 0 /* Size of sync standby queue in KB. */
-
-#define SK_RLMT_MAX_TX_BUF_SIZE 60 /* Maximum RLMT transmit size. */
-
-/* ----- PORT states ----- */
-
-#define SK_RLMT_PS_INIT 0 /* Port state: Init. */
-#define SK_RLMT_PS_LINK_DOWN 1 /* Port state: Link down. */
-#define SK_RLMT_PS_DOWN 2 /* Port state: Port down. */
-#define SK_RLMT_PS_GOING_UP 3 /* Port state: Going up. */
-#define SK_RLMT_PS_UP 4 /* Port state: Up. */
-
-/* ----- RLMT states ----- */
-
-#define SK_RLMT_RS_INIT 0 /* RLMT state: Init. */
-#define SK_RLMT_RS_NET_DOWN 1 /* RLMT state: Net down. */
-#define SK_RLMT_RS_NET_UP 2 /* RLMT state: Net up. */
-
-/* ----- PORT events ----- */
-
-#define SK_RLMT_LINK_UP 1001 /* Link came up. */
-#define SK_RLMT_LINK_DOWN 1002 /* Link went down. */
-#define SK_RLMT_PORT_ADDR 1003 /* Port address changed. */
-
-/* ----- RLMT events ----- */
-
-#define SK_RLMT_START 2001 /* Start RLMT. */
-#define SK_RLMT_STOP 2002 /* Stop RLMT. */
-#define SK_RLMT_PACKET_RECEIVED 2003 /* Packet was received for RLMT. */
-#define SK_RLMT_STATS_CLEAR 2004 /* Clear statistics. */
-#define SK_RLMT_STATS_UPDATE 2005 /* Update statistics. */
-#define SK_RLMT_PREFPORT_CHANGE 2006 /* Change preferred port. */
-#define SK_RLMT_MODE_CHANGE 2007 /* New RlmtMode. */
-#define SK_RLMT_SET_NETS 2008 /* Number of Nets (1 or 2). */
-
-/* ----- RLMT mode bits ----- */
-
-/*
- * CAUTION: These defines are private to RLMT.
- * Please use the RLMT mode defines below.
- */
-
-#define SK_RLMT_CHECK_LINK 1 /* Check Link. */
-#define SK_RLMT_CHECK_LOC_LINK 2 /* Check other link on same adapter. */
-#define SK_RLMT_CHECK_SEG 4 /* Check segmentation. */
-
-#ifndef RLMT_CHECK_REMOTE
-#define SK_RLMT_CHECK_OTHERS SK_RLMT_CHECK_LOC_LINK
-#else /* RLMT_CHECK_REMOTE */
-#define SK_RLMT_CHECK_REM_LINK 8 /* Check link(s) on other adapter(s). */
-#define SK_RLMT_MAX_REMOTE_PORTS_CHECKED 3
-#define SK_RLMT_CHECK_OTHERS \
- (SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_REM_LINK)
-#endif /* RLMT_CHECK_REMOTE */
-
-#ifndef SK_RLMT_ENABLE_TRANSPARENT
-#define SK_RLMT_TRANSPARENT 0 /* RLMT transparent - inactive. */
-#else /* SK_RLMT_ENABLE_TRANSPARENT */
-#define SK_RLMT_TRANSPARENT 128 /* RLMT transparent. */
-#endif /* SK_RLMT_ENABLE_TRANSPARENT */
-
-/* ----- RLMT modes ----- */
-
-/* Check Link State. */
-#define SK_RLMT_MODE_CLS (SK_RLMT_CHECK_LINK)
-
-/* Check Local Ports: check other links on the same adapter. */
-#define SK_RLMT_MODE_CLP (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK)
-
-/* Check Local Ports and Segmentation Status. */
-#define SK_RLMT_MODE_CLPSS \
- (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_SEG)
-
-#ifdef RLMT_CHECK_REMOTE
-/* Check Local and Remote Ports: check links (local or remote). */
- Name of define TBD!
-#define SK_RLMT_MODE_CRP \
- (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_REM_LINK)
-
-/* Check Local and Remote Ports and Segmentation Status. */
- Name of define TBD!
-#define SK_RLMT_MODE_CRPSS \
- (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | \
- SK_RLMT_CHECK_REM_LINK | SK_RLMT_CHECK_SEG)
-#endif /* RLMT_CHECK_REMOTE */
-
-/* ----- RLMT lookahead result bits ----- */
-
-#define SK_RLMT_RX_RLMT 1 /* Give packet to RLMT. */
-#define SK_RLMT_RX_PROTOCOL 2 /* Give packet to protocol. */
-
-/* Macros */
-
-#if 0
-SK_AC *pAC /* adapter context */
-SK_U32 PortNum /* receiving port */
-unsigned PktLen /* received packet's length */
-SK_BOOL IsBc /* Flag: packet is broadcast */
-unsigned *pOffset /* offs. of bytes to present to SK_RLMT_LOOKAHEAD */
-unsigned *pNumBytes /* #Bytes to present to SK_RLMT_LOOKAHEAD */
-#endif /* 0 */
-
-#define SK_RLMT_PRE_LOOKAHEAD(pAC,PortNum,PktLen,IsBc,pOffset,pNumBytes) { \
- SK_AC *_pAC; \
- SK_U32 _PortNum; \
- _pAC = (pAC); \
- _PortNum = (SK_U32)(PortNum); \
- /* _pAC->Rlmt.Port[_PortNum].PacketsRx++; */ \
- _pAC->Rlmt.Port[_PortNum].PacketsPerTimeSlot++; \
- if (_pAC->Rlmt.RlmtOff) { \
- *(pNumBytes) = 0; \
- } \
- else {\
- if ((_pAC->Rlmt.Port[_PortNum].Net->RlmtMode & SK_RLMT_TRANSPARENT) != 0) { \
- *(pNumBytes) = 0; \
- } \
- else if (IsBc) { \
- if (_pAC->Rlmt.Port[_PortNum].Net->RlmtMode != SK_RLMT_MODE_CLS) { \
- *(pNumBytes) = 6; \
- *(pOffset) = 6; \
- } \
- else { \
- *(pNumBytes) = 0; \
- } \
- } \
- else { \
- if ((PktLen) > SK_RLMT_MAX_TX_BUF_SIZE) { \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pNumBytes) = 0; \
- } \
- else { \
- *(pNumBytes) = 6; \
- *(pOffset) = 0; \
- } \
- } \
- } \
-}
-
-#if 0
-SK_AC *pAC /* adapter context */
-SK_U32 PortNum /* receiving port */
-SK_U8 *pLaPacket, /* received packet's data (points to pOffset) */
-SK_BOOL IsBc /* Flag: packet is broadcast */
-SK_BOOL IsMc /* Flag: packet is multicast */
-unsigned *pForRlmt /* Result: bits SK_RLMT_RX_RLMT, SK_RLMT_RX_PROTOCOL */
-SK_RLMT_LOOKAHEAD() expects *pNumBytes from
-packet offset *pOffset (s.a.) at *pLaPacket.
-
-If you use SK_RLMT_LOOKAHEAD in a path where you already know if the packet is
-BC, MC, or UC, you should use constants for IsBc and IsMc, so that your compiler
-can trash unneeded parts of the if construction.
-#endif /* 0 */
-
-#define SK_RLMT_LOOKAHEAD(pAC,PortNum,pLaPacket,IsBc,IsMc,pForRlmt) { \
- SK_AC *_pAC; \
- SK_U32 _PortNum; \
- SK_U8 *_pLaPacket; \
- _pAC = (pAC); \
- _PortNum = (SK_U32)(PortNum); \
- _pLaPacket = (SK_U8 *)(pLaPacket); \
- if (IsBc) {\
- if (!SK_ADDR_EQUAL(_pLaPacket, _pAC->Addr.Net[_pAC->Rlmt.Port[ \
- _PortNum].Net->NetNumber].CurrentMacAddress.a)) { \
- _pAC->Rlmt.Port[_PortNum].BcTimeStamp = SkOsGetTime(_pAC); \
- _pAC->Rlmt.CheckSwitch = SK_TRUE; \
- } \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- else if (IsMc) { \
- if (SK_ADDR_EQUAL(_pLaPacket, BridgeMcAddr.a)) { \
- _pAC->Rlmt.Port[_PortNum].BpduPacketsPerTimeSlot++; \
- if (_pAC->Rlmt.Port[_PortNum].Net->RlmtMode & SK_RLMT_CHECK_SEG) { \
- *(pForRlmt) = SK_RLMT_RX_RLMT | SK_RLMT_RX_PROTOCOL; \
- } \
- else { \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- } \
- else if (SK_ADDR_EQUAL(_pLaPacket, SkRlmtMcAddr.a)) { \
- *(pForRlmt) = SK_RLMT_RX_RLMT; \
- } \
- else { \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- } \
- else { \
- if (SK_ADDR_EQUAL( \
- _pLaPacket, \
- _pAC->Addr.Port[_PortNum].CurrentMacAddress.a)) { \
- *(pForRlmt) = SK_RLMT_RX_RLMT; \
- } \
- else { \
- /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
- *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
- } \
- } \
-}
-
-#ifdef SK_RLMT_FAST_LOOKAHEAD
-Error: SK_RLMT_FAST_LOOKAHEAD no longer used. Use new macros for lookahead.
-#endif /* SK_RLMT_FAST_LOOKAHEAD */
-#ifdef SK_RLMT_SLOW_LOOKAHEAD
-Error: SK_RLMT_SLOW_LOOKAHEAD no longer used. Use new macros for lookahead.
-#endif /* SK_RLMT_SLOW_LOOKAHEAD */
-
-/* typedefs *******************************************************************/
-
-#ifdef SK_RLMT_MBUF_PRIVATE
-typedef struct s_RlmtMbuf {
- some content
-} SK_RLMT_MBUF;
-#endif /* SK_RLMT_MBUF_PRIVATE */
-
-
-#ifdef SK_LA_INFO
-typedef struct s_Rlmt_PacketInfo {
- unsigned PacketLength; /* Length of packet. */
- unsigned PacketType; /* Directed/Multicast/Broadcast. */
-} SK_RLMT_PINFO;
-#endif /* SK_LA_INFO */
-
-
-typedef struct s_RootId {
- SK_U8 Id[8]; /* Root Bridge Id. */
-} SK_RLMT_ROOT_ID;
-
-
-typedef struct s_port {
- SK_MAC_ADDR CheckAddr;
- SK_BOOL SuspectTx;
-} SK_PORT_CHECK;
-
-
-typedef struct s_RlmtNet SK_RLMT_NET;
-
-
-typedef struct s_RlmtPort {
-
-/* ----- Public part (read-only) ----- */
-
- SK_U8 PortState; /* Current state of this port. */
-
- /* For PNMI */
- SK_BOOL LinkDown;
- SK_BOOL PortDown;
- SK_U8 Align01;
-
- SK_U32 PortNumber; /* Number of port on adapter. */
- SK_RLMT_NET * Net; /* Net port belongs to. */
-
- SK_U64 TxHelloCts;
- SK_U64 RxHelloCts;
- SK_U64 TxSpHelloReqCts;
- SK_U64 RxSpHelloCts;
-
-/* ----- Private part ----- */
-
-/* SK_U64 PacketsRx; */ /* Total packets received. */
- SK_U32 PacketsPerTimeSlot; /* Packets rxed between TOs. */
-/* SK_U32 DataPacketsPerTimeSlot; */ /* Data packets ... */
- SK_U32 BpduPacketsPerTimeSlot; /* BPDU packets rxed in TS. */
- SK_U64 BcTimeStamp; /* Time of last BC receive. */
- SK_U64 GuTimeStamp; /* Time of entering GOING_UP. */
-
- SK_TIMER UpTimer; /* Timer struct Link/Port up. */
- SK_TIMER DownRxTimer; /* Timer struct down rx. */
- SK_TIMER DownTxTimer; /* Timer struct down tx. */
-
- SK_U32 CheckingState; /* Checking State. */
-
- SK_ADDR_PORT * AddrPort;
-
- SK_U8 Random[4]; /* Random value. */
- unsigned PortsChecked; /* #ports checked. */
- unsigned PortsSuspect; /* #ports checked that are s. */
- SK_PORT_CHECK PortCheck[1];
-/* SK_PORT_CHECK PortCheck[SK_MAX_MACS - 1]; */
-
- SK_BOOL PortStarted; /* Port is started. */
- SK_BOOL PortNoRx; /* NoRx for >= 1 time slot. */
- SK_BOOL RootIdSet;
- SK_RLMT_ROOT_ID Root; /* Root Bridge Id. */
-} SK_RLMT_PORT;
-
-
-struct s_RlmtNet {
-
-/* ----- Public part (read-only) ----- */
-
- SK_U32 NetNumber; /* Number of net. */
-
- SK_RLMT_PORT * Port[SK_MAX_MACS]; /* Ports that belong to this net. */
- SK_U32 NumPorts; /* Number of ports. */
- SK_U32 PrefPort; /* Preferred port. */
-
- /* For PNMI */
-
- SK_U32 ChgBcPrio; /* Change Priority of last broadcast received */
- SK_U32 RlmtMode; /* Check ... */
- SK_U32 ActivePort; /* Active port. */
- SK_U32 Preference; /* 0xFFFFFFFF: Automatic. */
-
- SK_U8 RlmtState; /* Current RLMT state. */
-
-/* ----- Private part ----- */
- SK_BOOL RootIdSet;
- SK_U16 Align01;
-
- int LinksUp; /* #Links up. */
- int PortsUp; /* #Ports up. */
- SK_U32 TimeoutValue; /* RLMT timeout value. */
-
- SK_U32 CheckingState; /* Checking State. */
- SK_RLMT_ROOT_ID Root; /* Root Bridge Id. */
-
- SK_TIMER LocTimer; /* Timer struct. */
- SK_TIMER SegTimer; /* Timer struct. */
-};
-
-
-typedef struct s_Rlmt {
-
-/* ----- Public part (read-only) ----- */
-
- SK_U32 NumNets; /* Number of nets. */
- SK_U32 NetsStarted; /* Number of nets started. */
- SK_RLMT_NET Net[SK_MAX_NETS]; /* Array of available nets. */
- SK_RLMT_PORT Port[SK_MAX_MACS]; /* Array of available ports. */
-
-/* ----- Private part ----- */
- SK_BOOL CheckSwitch;
- SK_BOOL RlmtOff; /* set to zero if the Mac addresses
- are equal or the second one
- is zero */
- SK_U16 Align01;
-
-} SK_RLMT;
-
-
-extern SK_MAC_ADDR BridgeMcAddr;
-extern SK_MAC_ADDR SkRlmtMcAddr;
-
-/* function prototypes ********************************************************/
-
-
-#ifndef SK_KR_PROTO
-
-/* Functions provided by SkRlmt */
-
-/* ANSI/C++ compliant function prototypes */
-
-extern void SkRlmtInit(
- SK_AC *pAC,
- SK_IOC IoC,
- int Level);
-
-extern int SkRlmtEvent(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 Event,
- SK_EVPARA Para);
-
-#else /* defined(SK_KR_PROTO) */
-
-/* Non-ANSI/C++ compliant function prototypes */
-
-#error KR-style function prototypes are not yet provided.
-
-#endif /* defined(SK_KR_PROTO)) */
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __INC_SKRLMT_H */
+/******************************************************************************
+ *
+ * Name: skrlmt.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:10 $
+ * Purpose: Header file for Redundant Link ManagemenT.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2001 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skrlmt.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:10 kenagy
+ * no message
+ *
+ * Revision 1.35 2003/01/31 14:12:41 mkunz
+ * single port adapter runs now with two identical MAC addresses
+ *
+ * Revision 1.34 2002/09/23 15:13:41 rwahl
+ * Editorial changes.
+ *
+ * Revision 1.33 2001/07/03 12:16:48 mkunz
+ * New Flag ChgBcPrio (Change priority of last broadcast received)
+ *
+ * Revision 1.32 2001/02/14 14:06:31 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.31 2001/02/05 14:25:26 rassmann
+ * Prepared RLMT for transparent operation.
+ *
+ * Revision 1.30 2001/01/22 13:41:39 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.29 2000/11/17 08:58:00 rassmann
+ * Moved CheckSwitch from SK_RLMT_PACKET_RECEIVED to SK_RLMT_TIM event.
+ *
+ * Revision 1.28 2000/11/09 12:24:34 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.27 1999/11/22 13:59:56 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.26 1999/10/04 14:01:19 rassmann
+ * Corrected reaction to reception of BPDU frames (#10441).
+ *
+ * Revision 1.25 1999/07/20 12:53:39 rassmann
+ * Fixed documentation errors for lookahead macros.
+ *
+ * Revision 1.24 1999/05/28 11:15:56 rassmann
+ * Changed behaviour to reflect Design Spec v1.2.
+ * Controlling Link LED(s).
+ * Introduced RLMT Packet Version field in RLMT Packet.
+ * Newstyle lookahead macros (checking meta-information before looking at
+ * the packet).
+ *
+ * Revision 1.23 1999/01/28 12:50:42 rassmann
+ * Not using broadcast time stamps in CheckLinkState mode.
+ *
+ * Revision 1.22 1999/01/27 14:13:04 rassmann
+ * Monitoring broadcast traffic.
+ * Switching more reliably and not too early if switch is
+ * configured for spanning tree.
+ *
+ * Revision 1.21 1998/12/08 13:11:25 rassmann
+ * Stopping SegTimer at RlmtStop.
+ *
+ * Revision 1.20 1998/11/24 12:37:33 rassmann
+ * Implemented segmentation check.
+ *
+ * Revision 1.19 1998/11/17 13:43:06 rassmann
+ * Handling (logical) tx failure.
+ * Sending packet on logical address after PORT_SWITCH.
+ *
+ * Revision 1.18 1998/11/13 16:56:56 rassmann
+ * Added macro version of SkRlmtLookaheadPacket.
+ *
+ * Revision 1.17 1998/11/06 18:06:05 rassmann
+ * Corrected timing when RLMT checks fail.
+ * Clearing tx counter earlier in periodical checks.
+ *
+ * Revision 1.16 1998/11/03 13:53:50 rassmann
+ * RLMT should switch now (at least in mode 3).
+ *
+ * Revision 1.15 1998/10/22 11:39:52 rassmann
+ * Corrected signed/unsigned mismatches.
+ * Corrected receive list handling and address recognition.
+ *
+ * Revision 1.14 1998/10/15 15:16:36 rassmann
+ * Finished Spanning Tree checking.
+ * Checked with lint.
+ *
+ * Revision 1.13 1998/09/24 19:16:08 rassmann
+ * Code cleanup.
+ * Introduced Timer for PORT_DOWN due to no RX.
+ *
+ * Revision 1.12 1998/09/16 11:09:52 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.11 1998/09/15 11:28:50 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.10 1998/09/14 17:07:38 rassmann
+ * Added code for port checking via LAN.
+ * Changed Mbuf definition.
+ *
+ * Revision 1.9 1998/09/07 11:14:15 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.8 1998/09/07 09:06:08 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.7 1998/09/04 19:41:34 rassmann
+ * Syntax corrections.
+ * Started entering code for checking local links.
+ *
+ * Revision 1.6 1998/09/04 12:14:28 rassmann
+ * Interface cleanup.
+ *
+ * Revision 1.5 1998/09/02 16:55:29 rassmann
+ * Updated to reflect new DRV/HWAC/RLMT interface.
+ *
+ * Revision 1.4 1998/09/02 07:26:02 afischer
+ * typedef for SK_RLMT_PORT
+ *
+ * Revision 1.3 1998/08/27 14:29:03 rassmann
+ * Code cleanup.
+ *
+ * Revision 1.2 1998/08/27 14:26:25 rassmann
+ * Updated interface.
+ *
+ * Revision 1.1 1998/08/21 08:29:10 rassmann
+ * First public version.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This is the header file for Redundant Link ManagemenT.
+ *
+ * Include File Hierarchy:
+ *
+ * "skdrv1st.h"
+ * ...
+ * "sktypes.h"
+ * "skqueue.h"
+ * "skaddr.h"
+ * "skrlmt.h"
+ * ...
+ * "skdrv2nd.h"
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKRLMT_H
+#define __INC_SKRLMT_H
+
+#ifdef __cplusplus
+#error C++ is not yet supported.
+extern "C" {
+#endif /* cplusplus */
+
+/* defines ********************************************************************/
+
+#define SK_RLMT_NET_DOWN_TEMP 1 /* NET_DOWN due to last port down. */
+#define SK_RLMT_NET_DOWN_FINAL 2 /* NET_DOWN due to RLMT_STOP. */
+
+/* ----- Default queue sizes - must be multiples of 8 KB ----- */
+
+/* Less than 8 KB free in RX queue => pause frames. */
+#define SK_RLMT_STANDBY_QRXSIZE 128 /* Size of rx standby queue in KB. */
+#define SK_RLMT_STANDBY_QXASIZE 32 /* Size of async standby queue in KB. */
+#define SK_RLMT_STANDBY_QXSSIZE 0 /* Size of sync standby queue in KB. */
+
+#define SK_RLMT_MAX_TX_BUF_SIZE 60 /* Maximum RLMT transmit size. */
+
+/* ----- PORT states ----- */
+
+#define SK_RLMT_PS_INIT 0 /* Port state: Init. */
+#define SK_RLMT_PS_LINK_DOWN 1 /* Port state: Link down. */
+#define SK_RLMT_PS_DOWN 2 /* Port state: Port down. */
+#define SK_RLMT_PS_GOING_UP 3 /* Port state: Going up. */
+#define SK_RLMT_PS_UP 4 /* Port state: Up. */
+
+/* ----- RLMT states ----- */
+
+#define SK_RLMT_RS_INIT 0 /* RLMT state: Init. */
+#define SK_RLMT_RS_NET_DOWN 1 /* RLMT state: Net down. */
+#define SK_RLMT_RS_NET_UP 2 /* RLMT state: Net up. */
+
+/* ----- PORT events ----- */
+
+#define SK_RLMT_LINK_UP 1001 /* Link came up. */
+#define SK_RLMT_LINK_DOWN 1002 /* Link went down. */
+#define SK_RLMT_PORT_ADDR 1003 /* Port address changed. */
+
+/* ----- RLMT events ----- */
+
+#define SK_RLMT_START 2001 /* Start RLMT. */
+#define SK_RLMT_STOP 2002 /* Stop RLMT. */
+#define SK_RLMT_PACKET_RECEIVED 2003 /* Packet was received for RLMT. */
+#define SK_RLMT_STATS_CLEAR 2004 /* Clear statistics. */
+#define SK_RLMT_STATS_UPDATE 2005 /* Update statistics. */
+#define SK_RLMT_PREFPORT_CHANGE 2006 /* Change preferred port. */
+#define SK_RLMT_MODE_CHANGE 2007 /* New RlmtMode. */
+#define SK_RLMT_SET_NETS 2008 /* Number of Nets (1 or 2). */
+
+/* ----- RLMT mode bits ----- */
+
+/*
+ * CAUTION: These defines are private to RLMT.
+ * Please use the RLMT mode defines below.
+ */
+
+#define SK_RLMT_CHECK_LINK 1 /* Check Link. */
+#define SK_RLMT_CHECK_LOC_LINK 2 /* Check other link on same adapter. */
+#define SK_RLMT_CHECK_SEG 4 /* Check segmentation. */
+
+#ifndef RLMT_CHECK_REMOTE
+#define SK_RLMT_CHECK_OTHERS SK_RLMT_CHECK_LOC_LINK
+#else /* RLMT_CHECK_REMOTE */
+#define SK_RLMT_CHECK_REM_LINK 8 /* Check link(s) on other adapter(s). */
+#define SK_RLMT_MAX_REMOTE_PORTS_CHECKED 3
+#define SK_RLMT_CHECK_OTHERS \
+ (SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_REM_LINK)
+#endif /* RLMT_CHECK_REMOTE */
+
+#ifndef SK_RLMT_ENABLE_TRANSPARENT
+#define SK_RLMT_TRANSPARENT 0 /* RLMT transparent - inactive. */
+#else /* SK_RLMT_ENABLE_TRANSPARENT */
+#define SK_RLMT_TRANSPARENT 128 /* RLMT transparent. */
+#endif /* SK_RLMT_ENABLE_TRANSPARENT */
+
+/* ----- RLMT modes ----- */
+
+/* Check Link State. */
+#define SK_RLMT_MODE_CLS (SK_RLMT_CHECK_LINK)
+
+/* Check Local Ports: check other links on the same adapter. */
+#define SK_RLMT_MODE_CLP (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK)
+
+/* Check Local Ports and Segmentation Status. */
+#define SK_RLMT_MODE_CLPSS \
+ (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_SEG)
+
+#ifdef RLMT_CHECK_REMOTE
+/* Check Local and Remote Ports: check links (local or remote). */
+ Name of define TBD!
+#define SK_RLMT_MODE_CRP \
+ (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | SK_RLMT_CHECK_REM_LINK)
+
+/* Check Local and Remote Ports and Segmentation Status. */
+ Name of define TBD!
+#define SK_RLMT_MODE_CRPSS \
+ (SK_RLMT_CHECK_LINK | SK_RLMT_CHECK_LOC_LINK | \
+ SK_RLMT_CHECK_REM_LINK | SK_RLMT_CHECK_SEG)
+#endif /* RLMT_CHECK_REMOTE */
+
+/* ----- RLMT lookahead result bits ----- */
+
+#define SK_RLMT_RX_RLMT 1 /* Give packet to RLMT. */
+#define SK_RLMT_RX_PROTOCOL 2 /* Give packet to protocol. */
+
+/* Macros */
+
+#if 0
+SK_AC *pAC /* adapter context */
+SK_U32 PortNum /* receiving port */
+unsigned PktLen /* received packet's length */
+SK_BOOL IsBc /* Flag: packet is broadcast */
+unsigned *pOffset /* offs. of bytes to present to SK_RLMT_LOOKAHEAD */
+unsigned *pNumBytes /* #Bytes to present to SK_RLMT_LOOKAHEAD */
+#endif /* 0 */
+
+#define SK_RLMT_PRE_LOOKAHEAD(pAC,PortNum,PktLen,IsBc,pOffset,pNumBytes) { \
+ SK_AC *_pAC; \
+ SK_U32 _PortNum; \
+ _pAC = (pAC); \
+ _PortNum = (SK_U32)(PortNum); \
+ /* _pAC->Rlmt.Port[_PortNum].PacketsRx++; */ \
+ _pAC->Rlmt.Port[_PortNum].PacketsPerTimeSlot++; \
+ if (_pAC->Rlmt.RlmtOff) { \
+ *(pNumBytes) = 0; \
+ } \
+ else {\
+ if ((_pAC->Rlmt.Port[_PortNum].Net->RlmtMode & SK_RLMT_TRANSPARENT) != 0) { \
+ *(pNumBytes) = 0; \
+ } \
+ else if (IsBc) { \
+ if (_pAC->Rlmt.Port[_PortNum].Net->RlmtMode != SK_RLMT_MODE_CLS) { \
+ *(pNumBytes) = 6; \
+ *(pOffset) = 6; \
+ } \
+ else { \
+ *(pNumBytes) = 0; \
+ } \
+ } \
+ else { \
+ if ((PktLen) > SK_RLMT_MAX_TX_BUF_SIZE) { \
+ /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
+ *(pNumBytes) = 0; \
+ } \
+ else { \
+ *(pNumBytes) = 6; \
+ *(pOffset) = 0; \
+ } \
+ } \
+ } \
+}
+
+#if 0
+SK_AC *pAC /* adapter context */
+SK_U32 PortNum /* receiving port */
+SK_U8 *pLaPacket, /* received packet's data (points to pOffset) */
+SK_BOOL IsBc /* Flag: packet is broadcast */
+SK_BOOL IsMc /* Flag: packet is multicast */
+unsigned *pForRlmt /* Result: bits SK_RLMT_RX_RLMT, SK_RLMT_RX_PROTOCOL */
+SK_RLMT_LOOKAHEAD() expects *pNumBytes from
+packet offset *pOffset (s.a.) at *pLaPacket.
+
+If you use SK_RLMT_LOOKAHEAD in a path where you already know if the packet is
+BC, MC, or UC, you should use constants for IsBc and IsMc, so that your compiler
+can trash unneeded parts of the if construction.
+#endif /* 0 */
+
+#define SK_RLMT_LOOKAHEAD(pAC,PortNum,pLaPacket,IsBc,IsMc,pForRlmt) { \
+ SK_AC *_pAC; \
+ SK_U32 _PortNum; \
+ SK_U8 *_pLaPacket; \
+ _pAC = (pAC); \
+ _PortNum = (SK_U32)(PortNum); \
+ _pLaPacket = (SK_U8 *)(pLaPacket); \
+ if (IsBc) {\
+ if (!SK_ADDR_EQUAL(_pLaPacket, _pAC->Addr.Net[_pAC->Rlmt.Port[ \
+ _PortNum].Net->NetNumber].CurrentMacAddress.a)) { \
+ _pAC->Rlmt.Port[_PortNum].BcTimeStamp = SkOsGetTime(_pAC); \
+ _pAC->Rlmt.CheckSwitch = SK_TRUE; \
+ } \
+ /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
+ *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
+ } \
+ else if (IsMc) { \
+ if (SK_ADDR_EQUAL(_pLaPacket, BridgeMcAddr.a)) { \
+ _pAC->Rlmt.Port[_PortNum].BpduPacketsPerTimeSlot++; \
+ if (_pAC->Rlmt.Port[_PortNum].Net->RlmtMode & SK_RLMT_CHECK_SEG) { \
+ *(pForRlmt) = SK_RLMT_RX_RLMT | SK_RLMT_RX_PROTOCOL; \
+ } \
+ else { \
+ *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
+ } \
+ } \
+ else if (SK_ADDR_EQUAL(_pLaPacket, SkRlmtMcAddr.a)) { \
+ *(pForRlmt) = SK_RLMT_RX_RLMT; \
+ } \
+ else { \
+ /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
+ *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
+ } \
+ } \
+ else { \
+ if (SK_ADDR_EQUAL( \
+ _pLaPacket, \
+ _pAC->Addr.Port[_PortNum].CurrentMacAddress.a)) { \
+ *(pForRlmt) = SK_RLMT_RX_RLMT; \
+ } \
+ else { \
+ /* _pAC->Rlmt.Port[_PortNum].DataPacketsPerTimeSlot++; */ \
+ *(pForRlmt) = SK_RLMT_RX_PROTOCOL; \
+ } \
+ } \
+}
+
+#ifdef SK_RLMT_FAST_LOOKAHEAD
+Error: SK_RLMT_FAST_LOOKAHEAD no longer used. Use new macros for lookahead.
+#endif /* SK_RLMT_FAST_LOOKAHEAD */
+#ifdef SK_RLMT_SLOW_LOOKAHEAD
+Error: SK_RLMT_SLOW_LOOKAHEAD no longer used. Use new macros for lookahead.
+#endif /* SK_RLMT_SLOW_LOOKAHEAD */
+
+/* typedefs *******************************************************************/
+
+#ifdef SK_RLMT_MBUF_PRIVATE
+typedef struct s_RlmtMbuf {
+ some content
+} SK_RLMT_MBUF;
+#endif /* SK_RLMT_MBUF_PRIVATE */
+
+
+#ifdef SK_LA_INFO
+typedef struct s_Rlmt_PacketInfo {
+ unsigned PacketLength; /* Length of packet. */
+ unsigned PacketType; /* Directed/Multicast/Broadcast. */
+} SK_RLMT_PINFO;
+#endif /* SK_LA_INFO */
+
+
+typedef struct s_RootId {
+ SK_U8 Id[8]; /* Root Bridge Id. */
+} SK_RLMT_ROOT_ID;
+
+
+typedef struct s_port {
+ SK_MAC_ADDR CheckAddr;
+ SK_BOOL SuspectTx;
+} SK_PORT_CHECK;
+
+
+typedef struct s_RlmtNet SK_RLMT_NET;
+
+
+typedef struct s_RlmtPort {
+
+/* ----- Public part (read-only) ----- */
+
+ SK_U8 PortState; /* Current state of this port. */
+
+ /* For PNMI */
+ SK_BOOL LinkDown;
+ SK_BOOL PortDown;
+ SK_U8 Align01;
+
+ SK_U32 PortNumber; /* Number of port on adapter. */
+ SK_RLMT_NET * Net; /* Net port belongs to. */
+
+ SK_U64 TxHelloCts;
+ SK_U64 RxHelloCts;
+ SK_U64 TxSpHelloReqCts;
+ SK_U64 RxSpHelloCts;
+
+/* ----- Private part ----- */
+
+/* SK_U64 PacketsRx; */ /* Total packets received. */
+ SK_U32 PacketsPerTimeSlot; /* Packets rxed between TOs. */
+/* SK_U32 DataPacketsPerTimeSlot; */ /* Data packets ... */
+ SK_U32 BpduPacketsPerTimeSlot; /* BPDU packets rxed in TS. */
+ SK_U64 BcTimeStamp; /* Time of last BC receive. */
+ SK_U64 GuTimeStamp; /* Time of entering GOING_UP. */
+
+ SK_TIMER UpTimer; /* Timer struct Link/Port up. */
+ SK_TIMER DownRxTimer; /* Timer struct down rx. */
+ SK_TIMER DownTxTimer; /* Timer struct down tx. */
+
+ SK_U32 CheckingState; /* Checking State. */
+
+ SK_ADDR_PORT * AddrPort;
+
+ SK_U8 Random[4]; /* Random value. */
+ unsigned PortsChecked; /* #ports checked. */
+ unsigned PortsSuspect; /* #ports checked that are s. */
+ SK_PORT_CHECK PortCheck[1];
+/* SK_PORT_CHECK PortCheck[SK_MAX_MACS - 1]; */
+
+ SK_BOOL PortStarted; /* Port is started. */
+ SK_BOOL PortNoRx; /* NoRx for >= 1 time slot. */
+ SK_BOOL RootIdSet;
+ SK_RLMT_ROOT_ID Root; /* Root Bridge Id. */
+} SK_RLMT_PORT;
+
+
+struct s_RlmtNet {
+
+/* ----- Public part (read-only) ----- */
+
+ SK_U32 NetNumber; /* Number of net. */
+
+ SK_RLMT_PORT * Port[SK_MAX_MACS]; /* Ports that belong to this net. */
+ SK_U32 NumPorts; /* Number of ports. */
+ SK_U32 PrefPort; /* Preferred port. */
+
+ /* For PNMI */
+
+ SK_U32 ChgBcPrio; /* Change Priority of last broadcast received */
+ SK_U32 RlmtMode; /* Check ... */
+ SK_U32 ActivePort; /* Active port. */
+ SK_U32 Preference; /* 0xFFFFFFFF: Automatic. */
+
+ SK_U8 RlmtState; /* Current RLMT state. */
+
+/* ----- Private part ----- */
+ SK_BOOL RootIdSet;
+ SK_U16 Align01;
+
+ int LinksUp; /* #Links up. */
+ int PortsUp; /* #Ports up. */
+ SK_U32 TimeoutValue; /* RLMT timeout value. */
+
+ SK_U32 CheckingState; /* Checking State. */
+ SK_RLMT_ROOT_ID Root; /* Root Bridge Id. */
+
+ SK_TIMER LocTimer; /* Timer struct. */
+ SK_TIMER SegTimer; /* Timer struct. */
+};
+
+
+typedef struct s_Rlmt {
+
+/* ----- Public part (read-only) ----- */
+
+ SK_U32 NumNets; /* Number of nets. */
+ SK_U32 NetsStarted; /* Number of nets started. */
+ SK_RLMT_NET Net[SK_MAX_NETS]; /* Array of available nets. */
+ SK_RLMT_PORT Port[SK_MAX_MACS]; /* Array of available ports. */
+
+/* ----- Private part ----- */
+ SK_BOOL CheckSwitch;
+ SK_BOOL RlmtOff; /* set to zero if the Mac addresses
+ are equal or the second one
+ is zero */
+ SK_U16 Align01;
+
+} SK_RLMT;
+
+
+extern SK_MAC_ADDR BridgeMcAddr;
+extern SK_MAC_ADDR SkRlmtMcAddr;
+
+/* function prototypes ********************************************************/
+
+
+#ifndef SK_KR_PROTO
+
+/* Functions provided by SkRlmt */
+
+/* ANSI/C++ compliant function prototypes */
+
+extern void SkRlmtInit(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int Level);
+
+extern int SkRlmtEvent(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 Event,
+ SK_EVPARA Para);
+
+#else /* defined(SK_KR_PROTO) */
+
+/* Non-ANSI/C++ compliant function prototypes */
+
+#error KR-style function prototypes are not yet provided.
+
+#endif /* defined(SK_KR_PROTO)) */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __INC_SKRLMT_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/sktimer.h u-boot-2009.03/drivers/net/sk98lin/h/sktimer.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/sktimer.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/sktimer.h 2009-03-31 14:54:46.159166400 -0700
@@ -1,99 +1,102 @@
-/******************************************************************************
- *
- * Name: sktimer.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.9 $
- * Date: $Date: 1999/11/22 14:00:29 $
- * Purpose: Defines for the timer functions
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998,1999 SysKonnect,
- * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: sktimer.h,v $
- * Revision 1.9 1999/11/22 14:00:29 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.8 1998/09/08 08:48:02 gklug
- * add: init level handling
- *
- * Revision 1.7 1998/08/20 12:31:29 gklug
- * fix: SK_TIMCTRL needs to be defined
- *
- * Revision 1.6 1998/08/19 09:51:00 gklug
- * fix: remove struct keyword from c-code (see CCC) add typedefs
- *
- * Revision 1.5 1998/08/17 13:43:21 gklug
- * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
- *
- * Revision 1.4 1998/08/14 07:09:31 gklug
- * fix: chg pAc -> pAC
- *
- * Revision 1.3 1998/08/07 12:54:24 gklug
- * fix: first compiled version
- *
- * Revision 1.2 1998/08/07 09:35:29 gklug
- * add: Timer control struct for Adapters context
- * add: function prototypes
- *
- * Revision 1.1 1998/08/05 11:27:01 gklug
- * First version: adapted from SMT
- *
- *
- ******************************************************************************/
-
-/*
- * SKTIMER.H contains all defines and types for the timer functions
- */
-
-#ifndef _SKTIMER_H_
-#define _SKTIMER_H_
-
-#include "h/skqueue.h"
-
-/*
- * SK timer
- * - needed wherever a timer is used. Put this in your data structure
- * wherever you want.
- */
-typedef struct s_Timer SK_TIMER;
-
-struct s_Timer {
- SK_TIMER *TmNext ; /* linked list */
- SK_U32 TmClass ; /* Timer Event class */
- SK_U32 TmEvent ; /* Timer Event value */
- SK_EVPARA TmPara ; /* Timer Event parameter */
- SK_U32 TmDelta ; /* delta time */
- int TmActive ; /* flag : active/inactive */
-} ;
-
-/*
- * Timer control struct.
- * - use in Adapters context name pAC->Tim
- */
-typedef struct s_TimCtrl {
- SK_TIMER *StQueue ; /* Head of Timer queue */
-} SK_TIMCTRL ;
-
-extern void SkTimerInit(SK_AC *pAC,SK_IOC Ioc, int Level);
-extern void SkTimerStop(SK_AC *pAC,SK_IOC Ioc,SK_TIMER *pTimer);
-extern void SkTimerStart(SK_AC *pAC,SK_IOC Ioc,SK_TIMER *pTimer,
- SK_U32 Time,SK_U32 Class,SK_U32 Event,SK_EVPARA Para);
-extern void SkTimerDone(SK_AC *pAC,SK_IOC Ioc);
-#endif /* _SKTIMER_H_ */
+/******************************************************************************
+ *
+ * Name: sktimer.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:10 $
+ * Purpose: Defines for the timer functions
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998,1999 SysKonnect,
+ * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: sktimer.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:10 kenagy
+ * no message
+ *
+ * Revision 1.9 1999/11/22 14:00:29 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.8 1998/09/08 08:48:02 gklug
+ * add: init level handling
+ *
+ * Revision 1.7 1998/08/20 12:31:29 gklug
+ * fix: SK_TIMCTRL needs to be defined
+ *
+ * Revision 1.6 1998/08/19 09:51:00 gklug
+ * fix: remove struct keyword from c-code (see CCC) add typedefs
+ *
+ * Revision 1.5 1998/08/17 13:43:21 gklug
+ * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
+ *
+ * Revision 1.4 1998/08/14 07:09:31 gklug
+ * fix: chg pAc -> pAC
+ *
+ * Revision 1.3 1998/08/07 12:54:24 gklug
+ * fix: first compiled version
+ *
+ * Revision 1.2 1998/08/07 09:35:29 gklug
+ * add: Timer control struct for Adapters context
+ * add: function prototypes
+ *
+ * Revision 1.1 1998/08/05 11:27:01 gklug
+ * First version: adapted from SMT
+ *
+ *
+ ******************************************************************************/
+
+/*
+ * SKTIMER.H contains all defines and types for the timer functions
+ */
+
+#ifndef _SKTIMER_H_
+#define _SKTIMER_H_
+
+#include "h/skqueue.h"
+
+/*
+ * SK timer
+ * - needed wherever a timer is used. Put this in your data structure
+ * wherever you want.
+ */
+typedef struct s_Timer SK_TIMER;
+
+struct s_Timer {
+ SK_TIMER *TmNext ; /* linked list */
+ SK_U32 TmClass ; /* Timer Event class */
+ SK_U32 TmEvent ; /* Timer Event value */
+ SK_EVPARA TmPara ; /* Timer Event parameter */
+ SK_U32 TmDelta ; /* delta time */
+ int TmActive ; /* flag : active/inactive */
+} ;
+
+/*
+ * Timer control struct.
+ * - use in Adapters context name pAC->Tim
+ */
+typedef struct s_TimCtrl {
+ SK_TIMER *StQueue ; /* Head of Timer queue */
+} SK_TIMCTRL ;
+
+extern void SkTimerInit(SK_AC *pAC,SK_IOC Ioc, int Level);
+extern void SkTimerStop(SK_AC *pAC,SK_IOC Ioc,SK_TIMER *pTimer);
+extern void SkTimerStart(SK_AC *pAC,SK_IOC Ioc,SK_TIMER *pTimer,
+ SK_U32 Time,SK_U32 Class,SK_U32 Event,SK_EVPARA Para);
+extern void SkTimerDone(SK_AC *pAC,SK_IOC Ioc);
+#endif /* _SKTIMER_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/sktypes.h u-boot-2009.03/drivers/net/sk98lin/h/sktypes.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/sktypes.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/sktypes.h 2009-03-31 14:54:46.174791200 -0700
@@ -1,87 +1,90 @@
-/******************************************************************************
- *
- * Name: sktypes.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.3 $
- * Date: $Date: 2003/02/25 14:16:40 $
- * Purpose: Define data types for Linux
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
- /*****************************************************************************
- *
- * History:
- *
- * $Log: sktypes.h,v $
- * Revision 1.3 2003/02/25 14:16:40 mlindner
- * Fix: Copyright statement
- *
- * Revision 1.2 1999/11/22 14:01:58 cgoos
- * Changed license header to GPL.
- * Now using Linux' fixed size types instead of standard types.
- *
- * Revision 1.1 1999/02/16 07:41:40 cgoos
- * First version.
- *
- *
- *
- *****************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * In this file, all data types that are needed by the common modules
- * are mapped to Linux data types.
- *
- *
- * Include File Hierarchy:
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_SKTYPES_H
-#define __INC_SKTYPES_H
-
-
-/* defines *******************************************************************/
-
-/*
- * Data types with a specific size. 'I' = signed, 'U' = unsigned.
- */
-#define SK_I8 s8
-#define SK_U8 u8
-#define SK_I16 s16
-#define SK_U16 u16
-#define SK_I32 s32
-#define SK_U32 u32
-#define SK_I64 s64
-#define SK_U64 u64
-
-#define SK_UPTR ulong /* casting pointer <-> integral */
-
-/*
-* Boolean type.
-*/
-#define SK_BOOL SK_U8
-#define SK_FALSE 0
-#define SK_TRUE (!SK_FALSE)
-
-/* typedefs *******************************************************************/
-
-/* function prototypes ********************************************************/
-
-#endif /* __INC_SKTYPES_H */
+/******************************************************************************
+ *
+ * Name: sktypes.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:10 $
+ * Purpose: Define data types for Linux
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+ /*****************************************************************************
+ *
+ * History:
+ *
+ * $Log: sktypes.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:10 kenagy
+ * no message
+ *
+ * Revision 1.3 2003/02/25 14:16:40 mlindner
+ * Fix: Copyright statement
+ *
+ * Revision 1.2 1999/11/22 14:01:58 cgoos
+ * Changed license header to GPL.
+ * Now using Linux' fixed size types instead of standard types.
+ *
+ * Revision 1.1 1999/02/16 07:41:40 cgoos
+ * First version.
+ *
+ *
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * In this file, all data types that are needed by the common modules
+ * are mapped to Linux data types.
+ *
+ *
+ * Include File Hierarchy:
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_SKTYPES_H
+#define __INC_SKTYPES_H
+
+
+/* defines *******************************************************************/
+
+/*
+ * Data types with a specific size. 'I' = signed, 'U' = unsigned.
+ */
+#define SK_I8 s8
+#define SK_U8 u8
+#define SK_I16 s16
+#define SK_U16 u16
+#define SK_I32 s32
+#define SK_U32 u32
+#define SK_I64 s64
+#define SK_U64 u64
+
+#define SK_UPTR ulong /* casting pointer <-> integral */
+
+/*
+* Boolean type.
+*/
+#define SK_BOOL SK_U8
+#define SK_FALSE 0
+#define SK_TRUE (!SK_FALSE)
+
+/* typedefs *******************************************************************/
+
+/* function prototypes ********************************************************/
+
+#endif /* __INC_SKTYPES_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skversion.h u-boot-2009.03/drivers/net/sk98lin/h/skversion.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skversion.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skversion.h 2009-03-31 14:54:46.206040800 -0700
@@ -1,52 +1,55 @@
-/******************************************************************************
- *
- * Name: version.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.4 $
- * Date: $Date: 2003/02/25 14:16:40 $
- * Purpose: SK specific Error log support
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- * $Log: skversion.h,v $
- * Revision 1.4 2003/02/25 14:16:40 mlindner
- * Fix: Copyright statement
- *
- * Revision 1.3 2003/02/25 13:30:18 mlindner
- * Add: Support for various vendors
- *
- * Revision 1.1.2.1 2001/09/05 13:38:30 mlindner
- * Removed FILE description
- *
- * Revision 1.1 2001/03/06 09:25:00 mlindner
- * first version
- *
- *
- *
- ******************************************************************************/
-
-
-static const char SysKonnectFileId[] = "@(#) (C) SysKonnect GmbH.";
-static const char SysKonnectBuildNumber[] =
- "@(#)SK-BUILD: 6.05 PL: 01";
-
-#define BOOT_STRING "sk98lin: Network Device Driver v6.05\n" \
- "(C)Copyright 1999-2003 Marvell(R)."
-
-#define VER_STRING "6.05"
+/******************************************************************************
+ *
+ * Name: version.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:10 $
+ * Purpose: SK specific Error log support
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ * $Log: skversion.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:10 kenagy
+ * no message
+ *
+ * Revision 1.4 2003/02/25 14:16:40 mlindner
+ * Fix: Copyright statement
+ *
+ * Revision 1.3 2003/02/25 13:30:18 mlindner
+ * Add: Support for various vendors
+ *
+ * Revision 1.1.2.1 2001/09/05 13:38:30 mlindner
+ * Removed FILE description
+ *
+ * Revision 1.1 2001/03/06 09:25:00 mlindner
+ * first version
+ *
+ *
+ *
+ ******************************************************************************/
+
+
+static const char SysKonnectFileId[] = "@(#) (C) SysKonnect GmbH.";
+static const char SysKonnectBuildNumber[] =
+ "@(#)SK-BUILD: 6.05 PL: 01";
+
+#define BOOT_STRING "sk98lin: Network Device Driver v6.05\n" \
+ "(C)Copyright 1999-2003 Marvell(R)."
+
+#define VER_STRING "6.05"
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/skvpd.h u-boot-2009.03/drivers/net/sk98lin/h/skvpd.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/skvpd.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/skvpd.h 2009-03-31 14:54:46.237290400 -0700
@@ -1,335 +1,338 @@
-/******************************************************************************
- *
- * Name: skvpd.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.15 $
- * Date: $Date: 2003/01/13 10:39:38 $
- * Purpose: Defines and Macros for VPD handling
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skvpd.h,v $
- * Revision 1.15 2003/01/13 10:39:38 rschmidt
- * Replaced define for PCI device Id for YUKON with GENESIS
- * Editorial changes
- *
- * Revision 1.14 2002/11/14 15:18:10 gheinig
- * Added const specifier to key and buf parameters for VpdPara,VpdRead
- * and VpdWrite. This is necessary for the Diag 7 GUI API
- *
- * Revision 1.13 2002/10/14 15:58:18 rschmidt
- * Added entry in rom_size struct s_vpd
- * Editorial changes
- *
- * Revision 1.12 2002/09/09 14:43:51 mkarl
- * added PCI Id of Yukon for reading VPD in diag before the adapter has
- * been initialized
- * editorial changes
- *
- * Revision 1.11 2002/07/26 13:19:16 mkarl
- * added support for Yukon
- * added vpd_size to VPD struct
- *
- * Revision 1.10 2000/08/10 11:29:07 rassmann
- * Editorial changes.
- * Preserving 32-bit alignment in structs for the adapter context.
- * Removed unused function VpdWriteDword() (#if 0).
- * Made VpdReadKeyword() available for SKDIAG only.
- *
- * Revision 1.9 1999/11/22 14:02:27 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.8 1999/03/11 14:26:40 malthoff
- * Replace __STDC__ with SK_KR_PROTO.
- *
- * Revision 1.7 1998/10/28 07:27:17 gklug
- * rmv: SWAP macros
- * add: VPD_IN/OUT8 macros
- * chg: interface definition
- *
- * Revision 1.6 1998/10/22 10:03:44 gklug
- * fix: use SK_OUT16 instead of SK_OUTW
- *
- * Revision 1.5 1998/10/14 07:05:31 cgoos
- * Changed constants in SK_SWAP_32 to UL.
- *
- * Revision 1.4 1998/08/19 08:14:09 gklug
- * fix: remove struct keyword as much as possible from the C-code (see CCC)
- *
- * Revision 1.3 1998/08/18 08:18:56 malthoff
- * Modify VPD in and out macros for SK_DIAG
- *
- * Revision 1.2 1998/07/03 14:49:08 malthoff
- * Add VPD_INxx() and VPD_OUTxx() macros for the Diagnostics tool.
- *
- * Revision 1.1 1998/06/19 14:08:03 malthoff
- * Created.
- *
- *
- ******************************************************************************/
-
-/*
- * skvpd.h contains Diagnostic specific defines for VPD handling
- */
-
-#ifndef __INC_SKVPD_H_
-#define __INC_SKVPD_H_
-
-/*
- * Define Resource Type Identifiers and VPD keywords
- */
-#define RES_ID 0x82 /* Resource Type ID String (Product Name) */
-#define RES_VPD_R 0x90 /* start of VPD read only area */
-#define RES_VPD_W 0x91 /* start of VPD read/write area */
-#define RES_END 0x78 /* Resource Type End Tag */
-
-#ifndef VPD_NAME
-#define VPD_NAME "Name" /* Product Name, VPD name of RES_ID */
-#endif /* VPD_NAME */
-#define VPD_PN "PN" /* Adapter Part Number */
-#define VPD_EC "EC" /* Adapter Engineering Level */
-#define VPD_MN "MN" /* Manufacture ID */
-#define VPD_SN "SN" /* Serial Number */
-#define VPD_CP "CP" /* Extended Capability */
-#define VPD_RV "RV" /* Checksum and Reserved */
-#define VPD_YA "YA" /* Asset Tag Identifier */
-#define VPD_VL "VL" /* First Error Log Message (SK specific) */
-#define VPD_VF "VF" /* Second Error Log Message (SK specific) */
-#define VPD_RW "RW" /* Remaining Read / Write Area */
-
-/* 'type' values for vpd_setup_para() */
-#define VPD_RO_KEY 1 /* RO keys are "PN", "EC", "MN", "SN", "RV" */
-#define VPD_RW_KEY 2 /* RW keys are "Yx", "Vx", and "RW" */
-
-/* 'op' values for vpd_setup_para() */
-#define ADD_KEY 1 /* add the key at the pos "RV" or "RW" */
-#define OWR_KEY 2 /* overwrite key if already exists */
-
-/*
- * Define READ and WRITE Constants.
- */
-
-#define VPD_DEV_ID_GENESIS 0x4300
-
-#define VPD_SIZE_YUKON 256
-#define VPD_SIZE_GENESIS 512
-#define VPD_SIZE 512
-#define VPD_READ 0x0000
-#define VPD_WRITE 0x8000
-
-#define VPD_STOP(pAC,IoC) VPD_OUT16(pAC,IoC,PCI_VPD_ADR_REG,VPD_WRITE)
-
-#define VPD_GET_RES_LEN(p) ((unsigned int) \
- (* (SK_U8 *)&(p)[1]) |\
- ((* (SK_U8 *)&(p)[2]) << 8))
-#define VPD_GET_VPD_LEN(p) ((unsigned int)(* (SK_U8 *)&(p)[2]))
-#define VPD_GET_VAL(p) ((char *)&(p)[3])
-
-#define VPD_MAX_LEN 50
-
-/* VPD status */
- /* bit 7..1 reserved */
-#define VPD_VALID (1<<0) /* VPD data buffer, vpd_free_ro, */
- /* and vpd_free_rw valid */
-
-/*
- * VPD structs
- */
-typedef struct s_vpd_status {
- unsigned short Align01; /* Alignment */
- unsigned short vpd_status; /* VPD status, description see above */
- int vpd_free_ro; /* unused bytes in read only area */
- int vpd_free_rw; /* bytes available in read/write area */
-} SK_VPD_STATUS;
-
-typedef struct s_vpd {
- SK_VPD_STATUS v; /* VPD status structure */
- char vpd_buf[VPD_SIZE]; /* VPD buffer */
- int rom_size; /* VPD ROM Size from PCI_OUR_REG_2 */
- int vpd_size; /* saved VPD-size */
-} SK_VPD;
-
-typedef struct s_vpd_para {
- unsigned int p_len; /* parameter length */
- char *p_val; /* points to the value */
-} SK_VPD_PARA;
-
-/*
- * structure of Large Resource Type Identifiers
- */
-
-/* was removed because of alignment problems */
-
-/*
- * structure of VPD keywords
- */
-typedef struct s_vpd_key {
- char p_key[2]; /* 2 bytes ID string */
- unsigned char p_len; /* 1 byte length */
- char p_val; /* start of the value string */
-} SK_VPD_KEY;
-
-
-/*
- * System specific VPD macros
- */
-#ifndef SKDIAG
-#ifndef VPD_DO_IO
-#define VPD_OUT8(pAC,IoC,Addr,Val) (void)SkPciWriteCfgByte(pAC,Addr,Val)
-#define VPD_OUT16(pAC,IoC,Addr,Val) (void)SkPciWriteCfgWord(pAC,Addr,Val)
-#define VPD_OUT32(pAC,IoC,Addr,Val) (void)SkPciWriteCfgDWord(pAC,Addr,Val)
-#define VPD_IN8(pAC,IoC,Addr,pVal) (void)SkPciReadCfgByte(pAC,Addr,pVal)
-#define VPD_IN16(pAC,IoC,Addr,pVal) (void)SkPciReadCfgWord(pAC,Addr,pVal)
-#define VPD_IN32(pAC,IoC,Addr,pVal) (void)SkPciReadCfgDWord(pAC,Addr,pVal)
-#else /* VPD_DO_IO */
-#define VPD_OUT8(pAC,IoC,Addr,Val) SK_OUT8(IoC,PCI_C(Addr),Val)
-#define VPD_OUT16(pAC,IoC,Addr,Val) SK_OUT16(IoC,PCI_C(Addr),Val)
-#define VPD_OUT32(pAC,IoC,Addr,Val) SK_OUT32(IoC,PCI_C(Addr),Val)
-#define VPD_IN8(pAC,IoC,Addr,pVal) SK_IN8(IoC,PCI_C(Addr),pVal)
-#define VPD_IN16(pAC,IoC,Addr,pVal) SK_IN16(IoC,PCI_C(Addr),pVal)
-#define VPD_IN32(pAC,IoC,Addr,pVal) SK_IN32(IoC,PCI_C(Addr),pVal)
-#endif /* VPD_DO_IO */
-#else /* SKDIAG */
-#define VPD_OUT8(pAC,Ioc,Addr,Val) { \
- if ((pAC)->DgT.DgUseCfgCycle) \
- SkPciWriteCfgByte(pAC,Addr,Val); \
- else \
- SK_OUT8(pAC,PCI_C(Addr),Val); \
- }
-#define VPD_OUT16(pAC,Ioc,Addr,Val) { \
- if ((pAC)->DgT.DgUseCfgCycle) \
- SkPciWriteCfgWord(pAC,Addr,Val); \
- else \
- SK_OUT16(pAC,PCI_C(Addr),Val); \
- }
-#define VPD_OUT32(pAC,Ioc,Addr,Val) { \
- if ((pAC)->DgT.DgUseCfgCycle) \
- SkPciWriteCfgDWord(pAC,Addr,Val); \
- else \
- SK_OUT32(pAC,PCI_C(Addr),Val); \
- }
-#define VPD_IN8(pAC,Ioc,Addr,pVal) { \
- if ((pAC)->DgT.DgUseCfgCycle) \
- SkPciReadCfgByte(pAC,Addr,pVal); \
- else \
- SK_IN8(pAC,PCI_C(Addr),pVal); \
- }
-#define VPD_IN16(pAC,Ioc,Addr,pVal) { \
- if ((pAC)->DgT.DgUseCfgCycle) \
- SkPciReadCfgWord(pAC,Addr,pVal); \
- else \
- SK_IN16(pAC,PCI_C(Addr),pVal); \
- }
-#define VPD_IN32(pAC,Ioc,Addr,pVal) { \
- if ((pAC)->DgT.DgUseCfgCycle) \
- SkPciReadCfgDWord(pAC,Addr,pVal); \
- else \
- SK_IN32(pAC,PCI_C(Addr),pVal); \
- }
-#endif /* nSKDIAG */
-
-/* function prototypes ********************************************************/
-
-#ifndef SK_KR_PROTO
-#ifdef SKDIAG
-extern SK_U32 VpdReadDWord(
- SK_AC *pAC,
- SK_IOC IoC,
- int addr);
-#endif /* SKDIAG */
-
-extern int VpdSetupPara(
- SK_AC *pAC,
- const char *key,
- const char *buf,
- int len,
- int type,
- int op);
-
-extern SK_VPD_STATUS *VpdStat(
- SK_AC *pAC,
- SK_IOC IoC);
-
-extern int VpdKeys(
- SK_AC *pAC,
- SK_IOC IoC,
- char *buf,
- int *len,
- int *elements);
-
-extern int VpdRead(
- SK_AC *pAC,
- SK_IOC IoC,
- const char *key,
- char *buf,
- int *len);
-
-extern SK_BOOL VpdMayWrite(
- char *key);
-
-extern int VpdWrite(
- SK_AC *pAC,
- SK_IOC IoC,
- const char *key,
- const char *buf);
-
-extern int VpdDelete(
- SK_AC *pAC,
- SK_IOC IoC,
- char *key);
-
-extern int VpdUpdate(
- SK_AC *pAC,
- SK_IOC IoC);
-
-extern void VpdErrLog(
- SK_AC *pAC,
- SK_IOC IoC,
- char *msg);
-
-#ifdef SKDIAG
-extern int VpdReadBlock(
- SK_AC *pAC,
- SK_IOC IoC,
- char *buf,
- int addr,
- int len);
-
-extern int VpdWriteBlock(
- SK_AC *pAC,
- SK_IOC IoC,
- char *buf,
- int addr,
- int len);
-#endif /* SKDIAG */
-#else /* SK_KR_PROTO */
-extern SK_U32 VpdReadDWord();
-extern int VpdSetupPara();
-extern SK_VPD_STATUS *VpdStat();
-extern int VpdKeys();
-extern int VpdRead();
-extern SK_BOOL VpdMayWrite();
-extern int VpdWrite();
-extern int VpdDelete();
-extern int VpdUpdate();
-extern void VpdErrLog();
-#endif /* SK_KR_PROTO */
-
-#endif /* __INC_SKVPD_H_ */
+/******************************************************************************
+ *
+ * Name: skvpd.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:10 $
+ * Purpose: Defines and Macros for VPD handling
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skvpd.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:10 kenagy
+ * no message
+ *
+ * Revision 1.15 2003/01/13 10:39:38 rschmidt
+ * Replaced define for PCI device Id for YUKON with GENESIS
+ * Editorial changes
+ *
+ * Revision 1.14 2002/11/14 15:18:10 gheinig
+ * Added const specifier to key and buf parameters for VpdPara,VpdRead
+ * and VpdWrite. This is necessary for the Diag 7 GUI API
+ *
+ * Revision 1.13 2002/10/14 15:58:18 rschmidt
+ * Added entry in rom_size struct s_vpd
+ * Editorial changes
+ *
+ * Revision 1.12 2002/09/09 14:43:51 mkarl
+ * added PCI Id of Yukon for reading VPD in diag before the adapter has
+ * been initialized
+ * editorial changes
+ *
+ * Revision 1.11 2002/07/26 13:19:16 mkarl
+ * added support for Yukon
+ * added vpd_size to VPD struct
+ *
+ * Revision 1.10 2000/08/10 11:29:07 rassmann
+ * Editorial changes.
+ * Preserving 32-bit alignment in structs for the adapter context.
+ * Removed unused function VpdWriteDword() (#if 0).
+ * Made VpdReadKeyword() available for SKDIAG only.
+ *
+ * Revision 1.9 1999/11/22 14:02:27 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.8 1999/03/11 14:26:40 malthoff
+ * Replace __STDC__ with SK_KR_PROTO.
+ *
+ * Revision 1.7 1998/10/28 07:27:17 gklug
+ * rmv: SWAP macros
+ * add: VPD_IN/OUT8 macros
+ * chg: interface definition
+ *
+ * Revision 1.6 1998/10/22 10:03:44 gklug
+ * fix: use SK_OUT16 instead of SK_OUTW
+ *
+ * Revision 1.5 1998/10/14 07:05:31 cgoos
+ * Changed constants in SK_SWAP_32 to UL.
+ *
+ * Revision 1.4 1998/08/19 08:14:09 gklug
+ * fix: remove struct keyword as much as possible from the C-code (see CCC)
+ *
+ * Revision 1.3 1998/08/18 08:18:56 malthoff
+ * Modify VPD in and out macros for SK_DIAG
+ *
+ * Revision 1.2 1998/07/03 14:49:08 malthoff
+ * Add VPD_INxx() and VPD_OUTxx() macros for the Diagnostics tool.
+ *
+ * Revision 1.1 1998/06/19 14:08:03 malthoff
+ * Created.
+ *
+ *
+ ******************************************************************************/
+
+/*
+ * skvpd.h contains Diagnostic specific defines for VPD handling
+ */
+
+#ifndef __INC_SKVPD_H_
+#define __INC_SKVPD_H_
+
+/*
+ * Define Resource Type Identifiers and VPD keywords
+ */
+#define RES_ID 0x82 /* Resource Type ID String (Product Name) */
+#define RES_VPD_R 0x90 /* start of VPD read only area */
+#define RES_VPD_W 0x91 /* start of VPD read/write area */
+#define RES_END 0x78 /* Resource Type End Tag */
+
+#ifndef VPD_NAME
+#define VPD_NAME "Name" /* Product Name, VPD name of RES_ID */
+#endif /* VPD_NAME */
+#define VPD_PN "PN" /* Adapter Part Number */
+#define VPD_EC "EC" /* Adapter Engineering Level */
+#define VPD_MN "MN" /* Manufacture ID */
+#define VPD_SN "SN" /* Serial Number */
+#define VPD_CP "CP" /* Extended Capability */
+#define VPD_RV "RV" /* Checksum and Reserved */
+#define VPD_YA "YA" /* Asset Tag Identifier */
+#define VPD_VL "VL" /* First Error Log Message (SK specific) */
+#define VPD_VF "VF" /* Second Error Log Message (SK specific) */
+#define VPD_RW "RW" /* Remaining Read / Write Area */
+
+/* 'type' values for vpd_setup_para() */
+#define VPD_RO_KEY 1 /* RO keys are "PN", "EC", "MN", "SN", "RV" */
+#define VPD_RW_KEY 2 /* RW keys are "Yx", "Vx", and "RW" */
+
+/* 'op' values for vpd_setup_para() */
+#define ADD_KEY 1 /* add the key at the pos "RV" or "RW" */
+#define OWR_KEY 2 /* overwrite key if already exists */
+
+/*
+ * Define READ and WRITE Constants.
+ */
+
+#define VPD_DEV_ID_GENESIS 0x4300
+
+#define VPD_SIZE_YUKON 256
+#define VPD_SIZE_GENESIS 512
+#define VPD_SIZE 512
+#define VPD_READ 0x0000
+#define VPD_WRITE 0x8000
+
+#define VPD_STOP(pAC,IoC) VPD_OUT16(pAC,IoC,PCI_VPD_ADR_REG,VPD_WRITE)
+
+#define VPD_GET_RES_LEN(p) ((unsigned int) \
+ (* (SK_U8 *)&(p)[1]) |\
+ ((* (SK_U8 *)&(p)[2]) << 8))
+#define VPD_GET_VPD_LEN(p) ((unsigned int)(* (SK_U8 *)&(p)[2]))
+#define VPD_GET_VAL(p) ((char *)&(p)[3])
+
+#define VPD_MAX_LEN 50
+
+/* VPD status */
+ /* bit 7..1 reserved */
+#define VPD_VALID (1<<0) /* VPD data buffer, vpd_free_ro, */
+ /* and vpd_free_rw valid */
+
+/*
+ * VPD structs
+ */
+typedef struct s_vpd_status {
+ unsigned short Align01; /* Alignment */
+ unsigned short vpd_status; /* VPD status, description see above */
+ int vpd_free_ro; /* unused bytes in read only area */
+ int vpd_free_rw; /* bytes available in read/write area */
+} SK_VPD_STATUS;
+
+typedef struct s_vpd {
+ SK_VPD_STATUS v; /* VPD status structure */
+ char vpd_buf[VPD_SIZE]; /* VPD buffer */
+ int rom_size; /* VPD ROM Size from PCI_OUR_REG_2 */
+ int vpd_size; /* saved VPD-size */
+} SK_VPD;
+
+typedef struct s_vpd_para {
+ unsigned int p_len; /* parameter length */
+ char *p_val; /* points to the value */
+} SK_VPD_PARA;
+
+/*
+ * structure of Large Resource Type Identifiers
+ */
+
+/* was removed because of alignment problems */
+
+/*
+ * structure of VPD keywords
+ */
+typedef struct s_vpd_key {
+ char p_key[2]; /* 2 bytes ID string */
+ unsigned char p_len; /* 1 byte length */
+ char p_val; /* start of the value string */
+} SK_VPD_KEY;
+
+
+/*
+ * System specific VPD macros
+ */
+#ifndef SKDIAG
+#ifndef VPD_DO_IO
+#define VPD_OUT8(pAC,IoC,Addr,Val) (void)SkPciWriteCfgByte(pAC,Addr,Val)
+#define VPD_OUT16(pAC,IoC,Addr,Val) (void)SkPciWriteCfgWord(pAC,Addr,Val)
+#define VPD_OUT32(pAC,IoC,Addr,Val) (void)SkPciWriteCfgDWord(pAC,Addr,Val)
+#define VPD_IN8(pAC,IoC,Addr,pVal) (void)SkPciReadCfgByte(pAC,Addr,pVal)
+#define VPD_IN16(pAC,IoC,Addr,pVal) (void)SkPciReadCfgWord(pAC,Addr,pVal)
+#define VPD_IN32(pAC,IoC,Addr,pVal) (void)SkPciReadCfgDWord(pAC,Addr,pVal)
+#else /* VPD_DO_IO */
+#define VPD_OUT8(pAC,IoC,Addr,Val) SK_OUT8(IoC,PCI_C(Addr),Val)
+#define VPD_OUT16(pAC,IoC,Addr,Val) SK_OUT16(IoC,PCI_C(Addr),Val)
+#define VPD_OUT32(pAC,IoC,Addr,Val) SK_OUT32(IoC,PCI_C(Addr),Val)
+#define VPD_IN8(pAC,IoC,Addr,pVal) SK_IN8(IoC,PCI_C(Addr),pVal)
+#define VPD_IN16(pAC,IoC,Addr,pVal) SK_IN16(IoC,PCI_C(Addr),pVal)
+#define VPD_IN32(pAC,IoC,Addr,pVal) SK_IN32(IoC,PCI_C(Addr),pVal)
+#endif /* VPD_DO_IO */
+#else /* SKDIAG */
+#define VPD_OUT8(pAC,Ioc,Addr,Val) { \
+ if ((pAC)->DgT.DgUseCfgCycle) \
+ SkPciWriteCfgByte(pAC,Addr,Val); \
+ else \
+ SK_OUT8(pAC,PCI_C(Addr),Val); \
+ }
+#define VPD_OUT16(pAC,Ioc,Addr,Val) { \
+ if ((pAC)->DgT.DgUseCfgCycle) \
+ SkPciWriteCfgWord(pAC,Addr,Val); \
+ else \
+ SK_OUT16(pAC,PCI_C(Addr),Val); \
+ }
+#define VPD_OUT32(pAC,Ioc,Addr,Val) { \
+ if ((pAC)->DgT.DgUseCfgCycle) \
+ SkPciWriteCfgDWord(pAC,Addr,Val); \
+ else \
+ SK_OUT32(pAC,PCI_C(Addr),Val); \
+ }
+#define VPD_IN8(pAC,Ioc,Addr,pVal) { \
+ if ((pAC)->DgT.DgUseCfgCycle) \
+ SkPciReadCfgByte(pAC,Addr,pVal); \
+ else \
+ SK_IN8(pAC,PCI_C(Addr),pVal); \
+ }
+#define VPD_IN16(pAC,Ioc,Addr,pVal) { \
+ if ((pAC)->DgT.DgUseCfgCycle) \
+ SkPciReadCfgWord(pAC,Addr,pVal); \
+ else \
+ SK_IN16(pAC,PCI_C(Addr),pVal); \
+ }
+#define VPD_IN32(pAC,Ioc,Addr,pVal) { \
+ if ((pAC)->DgT.DgUseCfgCycle) \
+ SkPciReadCfgDWord(pAC,Addr,pVal); \
+ else \
+ SK_IN32(pAC,PCI_C(Addr),pVal); \
+ }
+#endif /* nSKDIAG */
+
+/* function prototypes ********************************************************/
+
+#ifndef SK_KR_PROTO
+#ifdef SKDIAG
+extern SK_U32 VpdReadDWord(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ int addr);
+#endif /* SKDIAG */
+
+extern int VpdSetupPara(
+ SK_AC *pAC,
+ const char *key,
+ const char *buf,
+ int len,
+ int type,
+ int op);
+
+extern SK_VPD_STATUS *VpdStat(
+ SK_AC *pAC,
+ SK_IOC IoC);
+
+extern int VpdKeys(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ char *buf,
+ int *len,
+ int *elements);
+
+extern int VpdRead(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ const char *key,
+ char *buf,
+ int *len);
+
+extern SK_BOOL VpdMayWrite(
+ char *key);
+
+extern int VpdWrite(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ const char *key,
+ const char *buf);
+
+extern int VpdDelete(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ char *key);
+
+extern int VpdUpdate(
+ SK_AC *pAC,
+ SK_IOC IoC);
+
+extern void VpdErrLog(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ char *msg);
+
+#ifdef SKDIAG
+extern int VpdReadBlock(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ char *buf,
+ int addr,
+ int len);
+
+extern int VpdWriteBlock(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ char *buf,
+ int addr,
+ int len);
+#endif /* SKDIAG */
+#else /* SK_KR_PROTO */
+extern SK_U32 VpdReadDWord();
+extern int VpdSetupPara();
+extern SK_VPD_STATUS *VpdStat();
+extern int VpdKeys();
+extern int VpdRead();
+extern SK_BOOL VpdMayWrite();
+extern int VpdWrite();
+extern int VpdDelete();
+extern int VpdUpdate();
+extern void VpdErrLog();
+#endif /* SK_KR_PROTO */
+
+#endif /* __INC_SKVPD_H_ */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/h/xmac_ii.h u-boot-2009.03/drivers/net/sk98lin/h/xmac_ii.h
--- u-boot-2009.03_orig/drivers/net/sk98lin/h/xmac_ii.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/h/xmac_ii.h 2009-03-31 14:54:46.284164800 -0700
@@ -1,1738 +1,1741 @@
-/******************************************************************************
- *
- * Name: xmac_ii.h
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.46 $
- * Date: $Date: 2003/01/28 09:47:45 $
- * Purpose: Defines and Macros for Gigabit Ethernet Controller
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: xmac_ii.h,v $
- * Revision 1.46 2003/01/28 09:47:45 rschmidt
- * Added defines for copper MDI/MDIX configuration
- * Added defines for LED Control Register
- * Editorial changes
- *
- * Revision 1.45 2002/12/10 14:35:13 rschmidt
- * Corrected defines for Extended PHY Specific Control
- * Added defines for Ext. PHY Specific Ctrl 2 Reg. (Fiber specific)
- *
- * Revision 1.44 2002/12/09 14:58:41 rschmidt
- * Added defines for Ext. PHY Specific Ctrl Reg. (downshift feature)
- * Added 'GMR_FS_UN_SIZE'-Bit to Rx GMAC FIFO Flush Mask
- *
- * Revision 1.43 2002/12/05 10:14:45 rschmidt
- * Added define for GMAC's Half Duplex Burst Mode
- * Added define for Rx GMAC FIFO Flush Mask (default)
- *
- * Revision 1.42 2002/11/12 16:48:19 rschmidt
- * Added defines for Cable Diagnostic Register (GPHY)
- * Editorial changes
- *
- * Revision 1.41 2002/10/21 11:20:22 rschmidt
- * Added bit GMR_FS_GOOD_FC to GMR_FS_ANY_ERR
- * Editorial changes
- *
- * Revision 1.40 2002/10/14 14:54:14 rschmidt
- * Added defines for GPHY Specific Status and GPHY Interrupt Status
- * Added bits PHY_M_IS_AN_ERROR and PHY_M_IS_FIFO_ERROR to PHY_M_DEF_MSK
- * Editorial changes
- *
- * Revision 1.39 2002/10/10 15:53:44 mkarl
- * added some bit definitions for link speed status and LED's
- *
- * Revision 1.38 2002/08/21 16:23:46 rschmidt
- * Added defines for PHY Specific Ctrl Reg
- * Editorial changes
- *
- * Revision 1.37 2002/08/16 14:50:33 rschmidt
- * Added defines for Auto-Neg. Advertisement YUKON Fiber (88E1011S only)
- * Changed define PHY_M_DEF_MSK for GPHY IRQ Mask
- * Editorial changes
- *
- * Revision 1.36 2002/08/12 13:21:10 rschmidt
- * Added defines for different Broadcom PHY Ids
- *
- * Revision 1.35 2002/08/08 15:58:01 rschmidt
- * Added defines for Manual LED Override register (YUKON)
- * Editorial changes
- *
- * Revision 1.34 2002/07/31 17:23:36 rwahl
- * Added define GMR_FS_ANY_ERR (analogous to XMR_FS_ANY_ERR).
- *
- * Revision 1.33 2002/07/23 16:03:37 rschmidt
- * Added defines for GPHY registers
- * Editorial changes
- *
- * Revision 1.32 2002/07/15 18:14:37 rwahl
- * Added GMAC MIB counters definitions.
- * Editorial changes.
- *
- * Revision 1.31 2002/07/15 15:42:50 rschmidt
- * Removed defines from PHY specific reg. which are
- * common to all PHYs
- * Added defines for GMAC MIB Counters
- * Editorial changes
- *
- * Revision 1.30 2002/06/05 08:22:12 rschmidt
- * Changed defines for GMAC Rx Control Register and Rx Status
- * Editorial changes
- *
- * Revision 1.29 2002/04/25 11:43:56 rschmidt
- * Added define PHY_B_AS_PAUSE_MSK for BCom Pause Res.
- * Added new registers and defines for YUKON (GMAC, GPHY)
- * Added Receive Frame Status Encoding for YUKON
- * Editorial changes
- *
- * Revision 1.28 2000/11/09 12:32:49 rassmann
- * Renamed variables.
- *
- * Revision 1.27 2000/05/17 11:00:46 malthoff
- * Add bit for enable/disable power management in BCOM chip.
- *
- * Revision 1.26 1999/11/22 14:03:00 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.25 1999/08/12 19:19:38 malthoff
- * Add PHY_B_AC_TX_TST bit according to BCOM A1 errata sheet.
- *
- * Revision 1.24 1999/07/30 11:27:21 cgoos
- * Fixed a missing end-of-comment.
- *
- * Revision 1.23 1999/07/30 07:03:31 malthoff
- * Cut some long comments.
- * Correct the XMAC PHY ID definitions.
- *
- * Revision 1.22 1999/05/19 07:33:18 cgoos
- * Changes for 1000Base-T.
- *
- * Revision 1.21 1999/03/25 07:46:11 malthoff
- * Add XM_HW_CFG, XM_TS_READ, and XM_TS_LOAD registers.
- *
- * Revision 1.20 1999/03/12 13:36:09 malthoff
- * Remove __STDC__.
- *
- * Revision 1.19 1998/12/10 12:22:54 gklug
- * fix: RX_PAGE must be in interrupt mask
- *
- * Revision 1.18 1998/12/10 10:36:36 gklug
- * fix: swap of pause bits
- *
- * Revision 1.17 1998/11/18 13:21:45 gklug
- * fix: Default interrupt mask
- *
- * Revision 1.16 1998/10/29 15:53:21 gklug
- * fix: Default mask uses ASS (GP0) signal
- *
- * Revision 1.15 1998/10/28 13:52:52 malthoff
- * Add new bits in RX_CMD register.
- *
- * Revision 1.14 1998/10/19 15:34:53 gklug
- * fix: typos
- *
- * Revision 1.13 1998/10/14 07:19:03 malthoff
- * bug fix: Every define which describes bit 31
- * must be declared as unsigned long 'UL'.
- * fix bit definitions of PHY_AN_RFB and PHY_AN_PAUSE.
- * Remove ANP defines. Rework the RFB defines.
- *
- * Revision 1.12 1998/10/14 06:22:44 cgoos
- * Changed shifted constant to ULONG.
- *
- * Revision 1.11 1998/10/14 05:43:26 gklug
- * add: shift pause coding
- * fix: PAUSE bits definition
- *
- * Revision 1.10 1998/10/13 09:19:21 malthoff
- * Again change XMR_FS_ANY_ERR because of new info from XaQti.
- *
- * Revision 1.9 1998/10/09 07:58:30 malthoff
- * Add XMR_FS_FCS_ERR to XMR_FS_ANY_ERR.
- *
- * Revision 1.8 1998/10/09 07:18:17 malthoff
- * bug fix of a bug fix: XM_PAUSE_MODE and XM_DEF_MODE
- * are not inverted! Bug XM_DEF_MSK is inverted.
- *
- * Revision 1.7 1998/10/05 08:04:32 malthoff
- * bug fix: XM_PAUSE_MODE and XM_DEF_MODE
- * must be inverted declarations.
- *
- * Revision 1.6 1998/09/28 13:38:18 malthoff
- * Add default modes and masks XM_DEF_MSK,
- * XM_PAUSE_MODE and XM_DEF_MODE
- *
- * Revision 1.5 1998/09/16 14:42:04 malthoff
- * Bug Fix: XM_GP_PORT is a 32 bit (not a 16 bit) register.
- *
- * Revision 1.4 1998/08/20 14:59:47 malthoff
- * Rework this file after reading the XaQti data sheet
- * "Differences between Rev. B2 & Rev. C XMAC II".
- * This file is now 100% XMAC II Rev. C complained.
- *
- * Revision 1.3 1998/06/29 12:18:23 malthoff
- * Correct XMR_FS_ANY_ERR definition.
- *
- * Revision 1.2 1998/06/29 12:10:56 malthoff
- * Add define XMR_FS_ANY_ERR.
- *
- * Revision 1.1 1998/06/19 13:37:17 malthoff
- * created.
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_XMAC_H
-#define __INC_XMAC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* defines ********************************************************************/
-
-/*
- * XMAC II registers
- *
- * The XMAC registers are 16 or 32 bits wide.
- * The XMACs host processor interface is set to 16 bit mode,
- * therefore ALL registers will be addressed with 16 bit accesses.
- *
- * The following macros are provided to access the XMAC registers
- * XM_IN16(), XM_OUT16, XM_IN32(), XM_OUT32(), XM_INADR(), XM_OUTADR(),
- * XM_INHASH(), and XM_OUTHASH().
- * The macros are defined in SkGeHw.h.
- *
- * Note: NA reg = Network Address e.g DA, SA etc.
- *
- */
-#define XM_MMU_CMD 0x0000 /* 16 bit r/w MMU Command Register */
- /* 0x0004: reserved */
-#define XM_POFF 0x0008 /* 32 bit r/w Packet Offset Register */
-#define XM_BURST 0x000c /* 32 bit r/w Burst Register for half duplex*/
-#define XM_1L_VLAN_TAG 0x0010 /* 16 bit r/w One Level VLAN Tag ID */
-#define XM_2L_VLAN_TAG 0x0014 /* 16 bit r/w Two Level VLAN Tag ID */
- /* 0x0018 - 0x001e: reserved */
-#define XM_TX_CMD 0x0020 /* 16 bit r/w Transmit Command Register */
-#define XM_TX_RT_LIM 0x0024 /* 16 bit r/w Transmit Retry Limit Register */
-#define XM_TX_STIME 0x0028 /* 16 bit r/w Transmit Slottime Register */
-#define XM_TX_IPG 0x002c /* 16 bit r/w Transmit Inter Packet Gap */
-#define XM_RX_CMD 0x0030 /* 16 bit r/w Receive Command Register */
-#define XM_PHY_ADDR 0x0034 /* 16 bit r/w PHY Address Register */
-#define XM_PHY_DATA 0x0038 /* 16 bit r/w PHY Data Register */
- /* 0x003c: reserved */
-#define XM_GP_PORT 0x0040 /* 32 bit r/w General Purpose Port Register */
-#define XM_IMSK 0x0044 /* 16 bit r/w Interrupt Mask Register */
-#define XM_ISRC 0x0048 /* 16 bit r/o Interrupt Status Register */
-#define XM_HW_CFG 0x004c /* 16 bit r/w Hardware Config Register */
- /* 0x0050 - 0x005e: reserved */
-#define XM_TX_LO_WM 0x0060 /* 16 bit r/w Tx FIFO Low Water Mark */
-#define XM_TX_HI_WM 0x0062 /* 16 bit r/w Tx FIFO High Water Mark */
-#define XM_TX_THR 0x0064 /* 16 bit r/w Tx Request Threshold */
-#define XM_HT_THR 0x0066 /* 16 bit r/w Host Request Threshold */
-#define XM_PAUSE_DA 0x0068 /* NA reg r/w Pause Destination Address */
- /* 0x006e: reserved */
-#define XM_CTL_PARA 0x0070 /* 32 bit r/w Control Parameter Register */
-#define XM_MAC_OPCODE 0x0074 /* 16 bit r/w Opcode for MAC control frames */
-#define XM_MAC_PTIME 0x0076 /* 16 bit r/w Pause time for MAC ctrl frames*/
-#define XM_TX_STAT 0x0078 /* 32 bit r/o Tx Status LIFO Register */
-
- /* 0x0080 - 0x00fc: 16 NA reg r/w Exact Match Address Registers */
- /* use the XM_EXM() macro to address */
-#define XM_EXM_START 0x0080 /* r/w Start Address of the EXM Regs */
-
- /*
- * XM_EXM(Reg)
- *
- * returns the XMAC address offset of specified Exact Match Addr Reg
- *
- * para: Reg EXM register to addr (0 .. 15)
- *
- * usage: XM_INADDR(IoC, MAC_1, XM_EXM(i), &val[i]);
- */
-#define XM_EXM(Reg) (XM_EXM_START + ((Reg) << 3))
-
-#define XM_SRC_CHK 0x0100 /* NA reg r/w Source Check Address Register */
-#define XM_SA 0x0108 /* NA reg r/w Station Address Register */
-#define XM_HSM 0x0110 /* 64 bit r/w Hash Match Address Registers */
-#define XM_RX_LO_WM 0x0118 /* 16 bit r/w Receive Low Water Mark */
-#define XM_RX_HI_WM 0x011a /* 16 bit r/w Receive High Water Mark */
-#define XM_RX_THR 0x011c /* 32 bit r/w Receive Request Threshold */
-#define XM_DEV_ID 0x0120 /* 32 bit r/o Device ID Register */
-#define XM_MODE 0x0124 /* 32 bit r/w Mode Register */
-#define XM_LSA 0x0128 /* NA reg r/o Last Source Register */
- /* 0x012e: reserved */
-#define XM_TS_READ 0x0130 /* 32 bit r/o Time Stamp Read Register */
-#define XM_TS_LOAD 0x0134 /* 32 bit r/o Time Stamp Load Value */
- /* 0x0138 - 0x01fe: reserved */
-#define XM_STAT_CMD 0x0200 /* 16 bit r/w Statistics Command Register */
-#define XM_RX_CNT_EV 0x0204 /* 32 bit r/o Rx Counter Event Register */
-#define XM_TX_CNT_EV 0x0208 /* 32 bit r/o Tx Counter Event Register */
-#define XM_RX_EV_MSK 0x020c /* 32 bit r/w Rx Counter Event Mask */
-#define XM_TX_EV_MSK 0x0210 /* 32 bit r/w Tx Counter Event Mask */
- /* 0x0204 - 0x027e: reserved */
-#define XM_TXF_OK 0x0280 /* 32 bit r/o Frames Transmitted OK Conuter */
-#define XM_TXO_OK_HI 0x0284 /* 32 bit r/o Octets Transmitted OK High Cnt*/
-#define XM_TXO_OK_LO 0x0288 /* 32 bit r/o Octets Transmitted OK Low Cnt */
-#define XM_TXF_BC_OK 0x028c /* 32 bit r/o Broadcast Frames Xmitted OK */
-#define XM_TXF_MC_OK 0x0290 /* 32 bit r/o Multicast Frames Xmitted OK */
-#define XM_TXF_UC_OK 0x0294 /* 32 bit r/o Unicast Frames Xmitted OK */
-#define XM_TXF_LONG 0x0298 /* 32 bit r/o Tx Long Frame Counter */
-#define XM_TXE_BURST 0x029c /* 32 bit r/o Tx Burst Event Counter */
-#define XM_TXF_MPAUSE 0x02a0 /* 32 bit r/o Tx Pause MAC Ctrl Frame Cnt */
-#define XM_TXF_MCTRL 0x02a4 /* 32 bit r/o Tx MAC Ctrl Frame Counter */
-#define XM_TXF_SNG_COL 0x02a8 /* 32 bit r/o Tx Single Collision Counter */
-#define XM_TXF_MUL_COL 0x02ac /* 32 bit r/o Tx Multiple Collision Counter */
-#define XM_TXF_ABO_COL 0x02b0 /* 32 bit r/o Tx aborted due to Exces. Col. */
-#define XM_TXF_LAT_COL 0x02b4 /* 32 bit r/o Tx Late Collision Counter */
-#define XM_TXF_DEF 0x02b8 /* 32 bit r/o Tx Deferred Frame Counter */
-#define XM_TXF_EX_DEF 0x02bc /* 32 bit r/o Tx Excessive Deferall Counter */
-#define XM_TXE_FIFO_UR 0x02c0 /* 32 bit r/o Tx FIFO Underrun Event Cnt */
-#define XM_TXE_CS_ERR 0x02c4 /* 32 bit r/o Tx Carrier Sense Error Cnt */
-#define XM_TXP_UTIL 0x02c8 /* 32 bit r/o Tx Utilization in % */
- /* 0x02cc - 0x02ce: reserved */
-#define XM_TXF_64B 0x02d0 /* 32 bit r/o 64 Byte Tx Frame Counter */
-#define XM_TXF_127B 0x02d4 /* 32 bit r/o 65-127 Byte Tx Frame Counter */
-#define XM_TXF_255B 0x02d8 /* 32 bit r/o 128-255 Byte Tx Frame Counter */
-#define XM_TXF_511B 0x02dc /* 32 bit r/o 256-511 Byte Tx Frame Counter */
-#define XM_TXF_1023B 0x02e0 /* 32 bit r/o 512-1023 Byte Tx Frame Counter*/
-#define XM_TXF_MAX_SZ 0x02e4 /* 32 bit r/o 1024-MaxSize Byte Tx Frame Cnt*/
- /* 0x02e8 - 0x02fe: reserved */
-#define XM_RXF_OK 0x0300 /* 32 bit r/o Frames Received OK */
-#define XM_RXO_OK_HI 0x0304 /* 32 bit r/o Octets Received OK High Cnt */
-#define XM_RXO_OK_LO 0x0308 /* 32 bit r/o Octets Received OK Low Counter*/
-#define XM_RXF_BC_OK 0x030c /* 32 bit r/o Broadcast Frames Received OK */
-#define XM_RXF_MC_OK 0x0310 /* 32 bit r/o Multicast Frames Received OK */
-#define XM_RXF_UC_OK 0x0314 /* 32 bit r/o Unicast Frames Received OK */
-#define XM_RXF_MPAUSE 0x0318 /* 32 bit r/o Rx Pause MAC Ctrl Frame Cnt */
-#define XM_RXF_MCTRL 0x031c /* 32 bit r/o Rx MAC Ctrl Frame Counter */
-#define XM_RXF_INV_MP 0x0320 /* 32 bit r/o Rx invalid Pause Frame Cnt */
-#define XM_RXF_INV_MOC 0x0324 /* 32 bit r/o Rx Frames with inv. MAC Opcode*/
-#define XM_RXE_BURST 0x0328 /* 32 bit r/o Rx Burst Event Counter */
-#define XM_RXE_FMISS 0x032c /* 32 bit r/o Rx Missed Frames Event Cnt */
-#define XM_RXF_FRA_ERR 0x0330 /* 32 bit r/o Rx Framing Error Counter */
-#define XM_RXE_FIFO_OV 0x0334 /* 32 bit r/o Rx FIFO overflow Event Cnt */
-#define XM_RXF_JAB_PKT 0x0338 /* 32 bit r/o Rx Jabber Packet Frame Cnt */
-#define XM_RXE_CAR_ERR 0x033c /* 32 bit r/o Rx Carrier Event Error Cnt */
-#define XM_RXF_LEN_ERR 0x0340 /* 32 bit r/o Rx in Range Length Error */
-#define XM_RXE_SYM_ERR 0x0344 /* 32 bit r/o Rx Symbol Error Counter */
-#define XM_RXE_SHT_ERR 0x0348 /* 32 bit r/o Rx Short Event Error Cnt */
-#define XM_RXE_RUNT 0x034c /* 32 bit r/o Rx Runt Event Counter */
-#define XM_RXF_LNG_ERR 0x0350 /* 32 bit r/o Rx Frame too Long Error Cnt */
-#define XM_RXF_FCS_ERR 0x0354 /* 32 bit r/o Rx Frame Check Seq. Error Cnt */
- /* 0x0358 - 0x035a: reserved */
-#define XM_RXF_CEX_ERR 0x035c /* 32 bit r/o Rx Carrier Ext Error Frame Cnt*/
-#define XM_RXP_UTIL 0x0360 /* 32 bit r/o Rx Utilization in % */
- /* 0x0364 - 0x0366: reserved */
-#define XM_RXF_64B 0x0368 /* 32 bit r/o 64 Byte Rx Frame Counter */
-#define XM_RXF_127B 0x036c /* 32 bit r/o 65-127 Byte Rx Frame Counter */
-#define XM_RXF_255B 0x0370 /* 32 bit r/o 128-255 Byte Rx Frame Counter */
-#define XM_RXF_511B 0x0374 /* 32 bit r/o 256-511 Byte Rx Frame Counter */
-#define XM_RXF_1023B 0x0378 /* 32 bit r/o 512-1023 Byte Rx Frame Counter*/
-#define XM_RXF_MAX_SZ 0x037c /* 32 bit r/o 1024-MaxSize Byte Rx Frame Cnt*/
- /* 0x02e8 - 0x02fe: reserved */
-
-
-/*----------------------------------------------------------------------------*/
-/*
- * XMAC Bit Definitions
- *
- * If the bit access behaviour differs from the register access behaviour
- * (r/w, r/o) this is documented after the bit number.
- * The following bit access behaviours are used:
- * (sc) self clearing
- * (ro) read only
- */
-
-/* XM_MMU_CMD 16 bit r/w MMU Command Register */
- /* Bit 15..13: reserved */
-#define XM_MMU_PHY_RDY (1<<12) /* Bit 12: PHY Read Ready */
-#define XM_MMU_PHY_BUSY (1<<11) /* Bit 11: PHY Busy */
-#define XM_MMU_IGN_PF (1<<10) /* Bit 10: Ignore Pause Frame */
-#define XM_MMU_MAC_LB (1<<9) /* Bit 9: Enable MAC Loopback */
- /* Bit 8: reserved */
-#define XM_MMU_FRC_COL (1<<7) /* Bit 7: Force Collision */
-#define XM_MMU_SIM_COL (1<<6) /* Bit 6: Simulate Collision */
-#define XM_MMU_NO_PRE (1<<5) /* Bit 5: No MDIO Preamble */
-#define XM_MMU_GMII_FD (1<<4) /* Bit 4: GMII uses Full Duplex */
-#define XM_MMU_RAT_CTRL (1<<3) /* Bit 3: Enable Rate Control */
-#define XM_MMU_GMII_LOOP (1<<2) /* Bit 2: PHY is in Loopback Mode */
-#define XM_MMU_ENA_RX (1<<1) /* Bit 1: Enable Receiver */
-#define XM_MMU_ENA_TX (1<<0) /* Bit 0: Enable Transmitter */
-
-
-/* XM_TX_CMD 16 bit r/w Transmit Command Register */
- /* Bit 15..7: reserved */
-#define XM_TX_BK2BK (1<<6) /* Bit 6: Ignor Carrier Sense (Tx Bk2Bk)*/
-#define XM_TX_ENC_BYP (1<<5) /* Bit 5: Set Encoder in Bypass Mode */
-#define XM_TX_SAM_LINE (1<<4) /* Bit 4: (sc) Start utilization calculation */
-#define XM_TX_NO_GIG_MD (1<<3) /* Bit 3: Disable Carrier Extension */
-#define XM_TX_NO_PRE (1<<2) /* Bit 2: Disable Preamble Generation */
-#define XM_TX_NO_CRC (1<<1) /* Bit 1: Disable CRC Generation */
-#define XM_TX_AUTO_PAD (1<<0) /* Bit 0: Enable Automatic Padding */
-
-
-/* XM_TX_RT_LIM 16 bit r/w Transmit Retry Limit Register */
- /* Bit 15..5: reserved */
-#define XM_RT_LIM_MSK 0x1f /* Bit 4..0: Tx Retry Limit */
-
-
-/* XM_TX_STIME 16 bit r/w Transmit Slottime Register */
- /* Bit 15..7: reserved */
-#define XM_STIME_MSK 0x7f /* Bit 6..0: Tx Slottime bits */
-
-
-/* XM_TX_IPG 16 bit r/w Transmit Inter Packet Gap */
- /* Bit 15..8: reserved */
-#define XM_IPG_MSK 0xff /* Bit 7..0: IPG value bits */
-
-
-/* XM_RX_CMD 16 bit r/w Receive Command Register */
- /* Bit 15..9: reserved */
-#define XM_RX_LENERR_OK (1<<8) /* Bit 8 don't set Rx Err bit for */
- /* inrange error packets */
-#define XM_RX_BIG_PK_OK (1<<7) /* Bit 7 don't set Rx Err bit for */
- /* jumbo packets */
-#define XM_RX_IPG_CAP (1<<6) /* Bit 6 repl. type field with IPG */
-#define XM_RX_TP_MD (1<<5) /* Bit 5: Enable transparent Mode */
-#define XM_RX_STRIP_FCS (1<<4) /* Bit 4: Enable FCS Stripping */
-#define XM_RX_SELF_RX (1<<3) /* Bit 3: Enable Rx of own packets */
-#define XM_RX_SAM_LINE (1<<2) /* Bit 2: (sc) Start utilization calculation */
-#define XM_RX_STRIP_PAD (1<<1) /* Bit 1: Strip pad bytes of Rx frames */
-#define XM_RX_DIS_CEXT (1<<0) /* Bit 0: Disable carrier ext. check */
-
-
-/* XM_PHY_ADDR 16 bit r/w PHY Address Register */
- /* Bit 15..5: reserved */
-#define XM_PHY_ADDR_SZ 0x1f /* Bit 4..0: PHY Address bits */
-
-
-/* XM_GP_PORT 32 bit r/w General Purpose Port Register */
- /* Bit 31..7: reserved */
-#define XM_GP_ANIP (1L<<6) /* Bit 6: (ro) Auto-Neg. in progress */
-#define XM_GP_FRC_INT (1L<<5) /* Bit 5: (sc) Force Interrupt */
- /* Bit 4: reserved */
-#define XM_GP_RES_MAC (1L<<3) /* Bit 3: (sc) Reset MAC and FIFOs */
-#define XM_GP_RES_STAT (1L<<2) /* Bit 2: (sc) Reset the statistics module */
- /* Bit 1: reserved */
-#define XM_GP_INP_ASS (1L<<0) /* Bit 0: (ro) GP Input Pin asserted */
-
-
-/* XM_IMSK 16 bit r/w Interrupt Mask Register */
-/* XM_ISRC 16 bit r/o Interrupt Status Register */
- /* Bit 15: reserved */
-#define XM_IS_LNK_AE (1<<14) /* Bit 14: Link Asynchronous Event */
-#define XM_IS_TX_ABORT (1<<13) /* Bit 13: Transmit Abort, late Col. etc */
-#define XM_IS_FRC_INT (1<<12) /* Bit 12: Force INT bit set in GP */
-#define XM_IS_INP_ASS (1<<11) /* Bit 11: Input Asserted, GP bit 0 set */
-#define XM_IS_LIPA_RC (1<<10) /* Bit 10: Link Partner requests config */
-#define XM_IS_RX_PAGE (1<<9) /* Bit 9: Page Received */
-#define XM_IS_TX_PAGE (1<<8) /* Bit 8: Next Page Loaded for Transmit */
-#define XM_IS_AND (1<<7) /* Bit 7: Auto-Negotiation Done */
-#define XM_IS_TSC_OV (1<<6) /* Bit 6: Time Stamp Counter Overflow */
-#define XM_IS_RXC_OV (1<<5) /* Bit 5: Rx Counter Event Overflow */
-#define XM_IS_TXC_OV (1<<4) /* Bit 4: Tx Counter Event Overflow */
-#define XM_IS_RXF_OV (1<<3) /* Bit 3: Receive FIFO Overflow */
-#define XM_IS_TXF_UR (1<<2) /* Bit 2: Transmit FIFO Underrun */
-#define XM_IS_TX_COMP (1<<1) /* Bit 1: Frame Tx Complete */
-#define XM_IS_RX_COMP (1<<0) /* Bit 0: Frame Rx Complete */
-
-#define XM_DEF_MSK (~(XM_IS_INP_ASS | XM_IS_LIPA_RC | XM_IS_RX_PAGE |\
- XM_IS_AND | XM_IS_RXC_OV | XM_IS_TXC_OV | XM_IS_TXF_UR))
-
-
-/* XM_HW_CFG 16 bit r/w Hardware Config Register */
- /* Bit 15.. 4: reserved */
-#define XM_HW_GEN_EOP (1<<3) /* Bit 3: generate End of Packet pulse */
-#define XM_HW_COM4SIG (1<<2) /* Bit 2: use Comma Detect for Sig. Det.*/
- /* Bit 1: reserved */
-#define XM_HW_GMII_MD (1<<0) /* Bit 0: GMII Interface selected */
-
-
-/* XM_TX_LO_WM 16 bit r/w Tx FIFO Low Water Mark */
-/* XM_TX_HI_WM 16 bit r/w Tx FIFO High Water Mark */
- /* Bit 15..10 reserved */
-#define XM_TX_WM_MSK 0x01ff /* Bit 9.. 0 Tx FIFO Watermark bits */
-
-/* XM_TX_THR 16 bit r/w Tx Request Threshold */
-/* XM_HT_THR 16 bit r/w Host Request Threshold */
-/* XM_RX_THR 16 bit r/w Rx Request Threshold */
- /* Bit 15..11 reserved */
-#define XM_THR_MSK 0x03ff /* Bit 10.. 0 Rx/Tx Request Threshold bits */
-
-
-/* XM_TX_STAT 32 bit r/o Tx Status LIFO Register */
-#define XM_ST_VALID (1UL<<31) /* Bit 31: Status Valid */
-#define XM_ST_BYTE_CNT (0x3fffL<<17) /* Bit 30..17: Tx frame Length */
-#define XM_ST_RETRY_CNT (0x1fL<<12) /* Bit 16..12: Retry Count */
-#define XM_ST_EX_COL (1L<<11) /* Bit 11: Excessive Collisions */
-#define XM_ST_EX_DEF (1L<<10) /* Bit 10: Excessive Deferral */
-#define XM_ST_BURST (1L<<9) /* Bit 9: p. xmitted in burst md*/
-#define XM_ST_DEFER (1L<<8) /* Bit 8: packet was defered */
-#define XM_ST_BC (1L<<7) /* Bit 7: Broadcast packet */
-#define XM_ST_MC (1L<<6) /* Bit 6: Multicast packet */
-#define XM_ST_UC (1L<<5) /* Bit 5: Unicast packet */
-#define XM_ST_TX_UR (1L<<4) /* Bit 4: FIFO Underrun occured */
-#define XM_ST_CS_ERR (1L<<3) /* Bit 3: Carrier Sense Error */
-#define XM_ST_LAT_COL (1L<<2) /* Bit 2: Late Collision Error */
-#define XM_ST_MUL_COL (1L<<1) /* Bit 1: Multiple Collisions */
-#define XM_ST_SGN_COL (1L<<0) /* Bit 0: Single Collision */
-
-/* XM_RX_LO_WM 16 bit r/w Receive Low Water Mark */
-/* XM_RX_HI_WM 16 bit r/w Receive High Water Mark */
- /* Bit 15..11: reserved */
-#define XM_RX_WM_MSK 0x03ff /* Bit 11.. 0: Rx FIFO Watermark bits */
-
-
-/* XM_DEV_ID 32 bit r/o Device ID Register */
-#define XM_DEV_OUI (0x00ffffffUL<<8) /* Bit 31..8: Device OUI */
-#define XM_DEV_REV (0x07L << 5) /* Bit 7..5: Chip Rev Num */
-
-
-/* XM_MODE 32 bit r/w Mode Register */
- /* Bit 31..27: reserved */
-#define XM_MD_ENA_REJ (1L<<26) /* Bit 26: Enable Frame Reject */
-#define XM_MD_SPOE_E (1L<<25) /* Bit 25: Send Pause on Edge */
- /* extern generated */
-#define XM_MD_TX_REP (1L<<24) /* Bit 24: Transmit Repeater Mode */
-#define XM_MD_SPOFF_I (1L<<23) /* Bit 23: Send Pause on FIFO full */
- /* intern generated */
-#define XM_MD_LE_STW (1L<<22) /* Bit 22: Rx Stat Word in Little Endian */
-#define XM_MD_TX_CONT (1L<<21) /* Bit 21: Send Continuous */
-#define XM_MD_TX_PAUSE (1L<<20) /* Bit 20: (sc) Send Pause Frame */
-#define XM_MD_ATS (1L<<19) /* Bit 19: Append Time Stamp */
-#define XM_MD_SPOL_I (1L<<18) /* Bit 18: Send Pause on Low */
- /* intern generated */
-#define XM_MD_SPOH_I (1L<<17) /* Bit 17: Send Pause on High */
- /* intern generated */
-#define XM_MD_CAP (1L<<16) /* Bit 16: Check Address Pair */
-#define XM_MD_ENA_HASH (1L<<15) /* Bit 15: Enable Hashing */
-#define XM_MD_CSA (1L<<14) /* Bit 14: Check Station Address */
-#define XM_MD_CAA (1L<<13) /* Bit 13: Check Address Array */
-#define XM_MD_RX_MCTRL (1L<<12) /* Bit 12: Rx MAC Control Frame */
-#define XM_MD_RX_RUNT (1L<<11) /* Bit 11: Rx Runt Frames */
-#define XM_MD_RX_IRLE (1L<<10) /* Bit 10: Rx in Range Len Err Frame */
-#define XM_MD_RX_LONG (1L<<9) /* Bit 9: Rx Long Frame */
-#define XM_MD_RX_CRCE (1L<<8) /* Bit 8: Rx CRC Error Frame */
-#define XM_MD_RX_ERR (1L<<7) /* Bit 7: Rx Error Frame */
-#define XM_MD_DIS_UC (1L<<6) /* Bit 6: Disable Rx Unicast */
-#define XM_MD_DIS_MC (1L<<5) /* Bit 5: Disable Rx Multicast */
-#define XM_MD_DIS_BC (1L<<4) /* Bit 4: Disable Rx Broadcast */
-#define XM_MD_ENA_PROM (1L<<3) /* Bit 3: Enable Promiscuous */
-#define XM_MD_ENA_BE (1L<<2) /* Bit 2: Enable Big Endian */
-#define XM_MD_FTF (1L<<1) /* Bit 1: (sc) Flush Tx FIFO */
-#define XM_MD_FRF (1L<<0) /* Bit 0: (sc) Flush Rx FIFO */
-
-#define XM_PAUSE_MODE (XM_MD_SPOE_E | XM_MD_SPOL_I | XM_MD_SPOH_I)
-#define XM_DEF_MODE (XM_MD_RX_RUNT | XM_MD_RX_IRLE | XM_MD_RX_LONG |\
- XM_MD_RX_CRCE | XM_MD_RX_ERR | XM_MD_CSA | XM_MD_CAA)
-
-/* XM_STAT_CMD 16 bit r/w Statistics Command Register */
- /* Bit 16..6: reserved */
-#define XM_SC_SNP_RXC (1<<5) /* Bit 5: (sc) Snap Rx Counters */
-#define XM_SC_SNP_TXC (1<<4) /* Bit 4: (sc) Snap Tx Counters */
-#define XM_SC_CP_RXC (1<<3) /* Bit 3: Copy Rx Counters Continuously */
-#define XM_SC_CP_TXC (1<<2) /* Bit 2: Copy Tx Counters Continuously */
-#define XM_SC_CLR_RXC (1<<1) /* Bit 1: (sc) Clear Rx Counters */
-#define XM_SC_CLR_TXC (1<<0) /* Bit 0: (sc) Clear Tx Counters */
-
-
-/* XM_RX_CNT_EV 32 bit r/o Rx Counter Event Register */
-/* XM_RX_EV_MSK 32 bit r/w Rx Counter Event Mask */
-#define XMR_MAX_SZ_OV (1UL<<31) /* Bit 31: 1024-MaxSize Rx Cnt Ov*/
-#define XMR_1023B_OV (1L<<30) /* Bit 30: 512-1023Byte Rx Cnt Ov*/
-#define XMR_511B_OV (1L<<29) /* Bit 29: 256-511 Byte Rx Cnt Ov*/
-#define XMR_255B_OV (1L<<28) /* Bit 28: 128-255 Byte Rx Cnt Ov*/
-#define XMR_127B_OV (1L<<27) /* Bit 27: 65-127 Byte Rx Cnt Ov */
-#define XMR_64B_OV (1L<<26) /* Bit 26: 64 Byte Rx Cnt Ov */
-#define XMR_UTIL_OV (1L<<25) /* Bit 25: Rx Util Cnt Overflow */
-#define XMR_UTIL_UR (1L<<24) /* Bit 24: Rx Util Cnt Underrun */
-#define XMR_CEX_ERR_OV (1L<<23) /* Bit 23: CEXT Err Cnt Ov */
- /* Bit 22: reserved */
-#define XMR_FCS_ERR_OV (1L<<21) /* Bit 21: Rx FCS Error Cnt Ov */
-#define XMR_LNG_ERR_OV (1L<<20) /* Bit 20: Rx too Long Err Cnt Ov*/
-#define XMR_RUNT_OV (1L<<19) /* Bit 19: Runt Event Cnt Ov */
-#define XMR_SHT_ERR_OV (1L<<18) /* Bit 18: Rx Short Ev Err Cnt Ov*/
-#define XMR_SYM_ERR_OV (1L<<17) /* Bit 17: Rx Sym Err Cnt Ov */
- /* Bit 16: reserved */
-#define XMR_CAR_ERR_OV (1L<<15) /* Bit 15: Rx Carr Ev Err Cnt Ov */
-#define XMR_JAB_PKT_OV (1L<<14) /* Bit 14: Rx Jabb Packet Cnt Ov */
-#define XMR_FIFO_OV (1L<<13) /* Bit 13: Rx FIFO Ov Ev Cnt Ov */
-#define XMR_FRA_ERR_OV (1L<<12) /* Bit 12: Rx Framing Err Cnt Ov */
-#define XMR_FMISS_OV (1L<<11) /* Bit 11: Rx Missed Ev Cnt Ov */
-#define XMR_BURST (1L<<10) /* Bit 10: Rx Burst Event Cnt Ov */
-#define XMR_INV_MOC (1L<<9) /* Bit 9: Rx with inv. MAC OC Ov*/
-#define XMR_INV_MP (1L<<8) /* Bit 8: Rx inv Pause Frame Ov */
-#define XMR_MCTRL_OV (1L<<7) /* Bit 7: Rx MAC Ctrl-F Cnt Ov */
-#define XMR_MPAUSE_OV (1L<<6) /* Bit 6: Rx Pause MAC Ctrl-F Ov*/
-#define XMR_UC_OK_OV (1L<<5) /* Bit 5: Rx Unicast Frame CntOv*/
-#define XMR_MC_OK_OV (1L<<4) /* Bit 4: Rx Multicast Cnt Ov */
-#define XMR_BC_OK_OV (1L<<3) /* Bit 3: Rx Broadcast Cnt Ov */
-#define XMR_OK_LO_OV (1L<<2) /* Bit 2: Octets Rx OK Low CntOv*/
-#define XMR_OK_HI_OV (1L<<1) /* Bit 1: Octets Rx OK Hi Cnt Ov*/
-#define XMR_OK_OV (1L<<0) /* Bit 0: Frames Received Ok Ov */
-
-#define XMR_DEF_MSK (XMR_OK_LO_OV | XMR_OK_HI_OV)
-
-/* XM_TX_CNT_EV 32 bit r/o Tx Counter Event Register */
-/* XM_TX_EV_MSK 32 bit r/w Tx Counter Event Mask */
- /* Bit 31..26: reserved */
-#define XMT_MAX_SZ_OV (1L<<25) /* Bit 25: 1024-MaxSize Tx Cnt Ov*/
-#define XMT_1023B_OV (1L<<24) /* Bit 24: 512-1023Byte Tx Cnt Ov*/
-#define XMT_511B_OV (1L<<23) /* Bit 23: 256-511 Byte Tx Cnt Ov*/
-#define XMT_255B_OV (1L<<22) /* Bit 22: 128-255 Byte Tx Cnt Ov*/
-#define XMT_127B_OV (1L<<21) /* Bit 21: 65-127 Byte Tx Cnt Ov */
-#define XMT_64B_OV (1L<<20) /* Bit 20: 64 Byte Tx Cnt Ov */
-#define XMT_UTIL_OV (1L<<19) /* Bit 19: Tx Util Cnt Overflow */
-#define XMT_UTIL_UR (1L<<18) /* Bit 18: Tx Util Cnt Underrun */
-#define XMT_CS_ERR_OV (1L<<17) /* Bit 17: Tx Carr Sen Err Cnt Ov*/
-#define XMT_FIFO_UR_OV (1L<<16) /* Bit 16: Tx FIFO Ur Ev Cnt Ov */
-#define XMT_EX_DEF_OV (1L<<15) /* Bit 15: Tx Ex Deferall Cnt Ov */
-#define XMT_DEF (1L<<14) /* Bit 14: Tx Deferred Cnt Ov */
-#define XMT_LAT_COL_OV (1L<<13) /* Bit 13: Tx Late Col Cnt Ov */
-#define XMT_ABO_COL_OV (1L<<12) /* Bit 12: Tx abo dueto Ex Col Ov*/
-#define XMT_MUL_COL_OV (1L<<11) /* Bit 11: Tx Mult Col Cnt Ov */
-#define XMT_SNG_COL (1L<<10) /* Bit 10: Tx Single Col Cnt Ov */
-#define XMT_MCTRL_OV (1L<<9) /* Bit 9: Tx MAC Ctrl Counter Ov*/
-#define XMT_MPAUSE (1L<<8) /* Bit 8: Tx Pause MAC Ctrl-F Ov*/
-#define XMT_BURST (1L<<7) /* Bit 7: Tx Burst Event Cnt Ov */
-#define XMT_LONG (1L<<6) /* Bit 6: Tx Long Frame Cnt Ov */
-#define XMT_UC_OK_OV (1L<<5) /* Bit 5: Tx Unicast Cnt Ov */
-#define XMT_MC_OK_OV (1L<<4) /* Bit 4: Tx Multicast Cnt Ov */
-#define XMT_BC_OK_OV (1L<<3) /* Bit 3: Tx Broadcast Cnt Ov */
-#define XMT_OK_LO_OV (1L<<2) /* Bit 2: Octets Tx OK Low CntOv*/
-#define XMT_OK_HI_OV (1L<<1) /* Bit 1: Octets Tx OK Hi Cnt Ov*/
-#define XMT_OK_OV (1L<<0) /* Bit 0: Frames Tx Ok Ov */
-
-#define XMT_DEF_MSK (XMT_OK_LO_OV | XMT_OK_HI_OV)
-
-/*
- * Receive Frame Status Encoding
- */
-#define XMR_FS_LEN (0x3fffUL<<18) /* Bit 31..18: Rx Frame Length */
-#define XMR_FS_2L_VLAN (1L<<17) /* Bit 17: tagged wh 2Lev VLAN ID*/
-#define XMR_FS_1L_VLAN (1L<<16) /* Bit 16: tagged wh 1Lev VLAN ID*/
-#define XMR_FS_BC (1L<<15) /* Bit 15: Broadcast Frame */
-#define XMR_FS_MC (1L<<14) /* Bit 14: Multicast Frame */
-#define XMR_FS_UC (1L<<13) /* Bit 13: Unicast Frame */
- /* Bit 12: reserved */
-#define XMR_FS_BURST (1L<<11) /* Bit 11: Burst Mode */
-#define XMR_FS_CEX_ERR (1L<<10) /* Bit 10: Carrier Ext. Error */
-#define XMR_FS_802_3 (1L<<9) /* Bit 9: 802.3 Frame */
-#define XMR_FS_COL_ERR (1L<<8) /* Bit 8: Collision Error */
-#define XMR_FS_CAR_ERR (1L<<7) /* Bit 7: Carrier Event Error */
-#define XMR_FS_LEN_ERR (1L<<6) /* Bit 6: In-Range Length Error */
-#define XMR_FS_FRA_ERR (1L<<5) /* Bit 5: Framing Error */
-#define XMR_FS_RUNT (1L<<4) /* Bit 4: Runt Frame */
-#define XMR_FS_LNG_ERR (1L<<3) /* Bit 3: Giant (Jumbo) Frame */
-#define XMR_FS_FCS_ERR (1L<<2) /* Bit 2: Frame Check Sequ Err */
-#define XMR_FS_ERR (1L<<1) /* Bit 1: Frame Error */
-#define XMR_FS_MCTRL (1L<<0) /* Bit 0: MAC Control Packet */
-
-/*
- * XMR_FS_ERR will be set if
- * XMR_FS_FCS_ERR, XMR_FS_LNG_ERR, XMR_FS_RUNT,
- * XMR_FS_FRA_ERR, XMR_FS_LEN_ERR, or XMR_FS_CEX_ERR
- * is set. XMR_FS_LNG_ERR and XMR_FS_LEN_ERR will issue
- * XMR_FS_ERR unless the corresponding bit in the Receive Command
- * Register is set.
- */
-#define XMR_FS_ANY_ERR XMR_FS_ERR
-
-/*----------------------------------------------------------------------------*/
-/*
- * XMAC-PHY Registers, indirect addressed over the XMAC
- */
-#define PHY_XMAC_CTRL 0x00 /* 16 bit r/w PHY Control Register */
-#define PHY_XMAC_STAT 0x01 /* 16 bit r/w PHY Status Register */
-#define PHY_XMAC_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
-#define PHY_XMAC_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
-#define PHY_XMAC_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
-#define PHY_XMAC_AUNE_LP 0x05 /* 16 bit r/o Link Partner Abi Reg */
-#define PHY_XMAC_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
-#define PHY_XMAC_NEPG 0x07 /* 16 bit r/w Next Page Register */
-#define PHY_XMAC_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */
- /* 0x09 - 0x0e: reserved */
-#define PHY_XMAC_EXT_STAT 0x0f /* 16 bit r/o Ext Status Register */
-#define PHY_XMAC_RES_ABI 0x10 /* 16 bit r/o PHY Resolved Ability */
-
-/*----------------------------------------------------------------------------*/
-/*
- * Broadcom-PHY Registers, indirect addressed over XMAC
- */
-#define PHY_BCOM_CTRL 0x00 /* 16 bit r/w PHY Control Register */
-#define PHY_BCOM_STAT 0x01 /* 16 bit r/o PHY Status Register */
-#define PHY_BCOM_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
-#define PHY_BCOM_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
-#define PHY_BCOM_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
-#define PHY_BCOM_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */
-#define PHY_BCOM_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
-#define PHY_BCOM_NEPG 0x07 /* 16 bit r/w Next Page Register */
-#define PHY_BCOM_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */
- /* Broadcom-specific registers */
-#define PHY_BCOM_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Ctrl Reg */
-#define PHY_BCOM_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
- /* 0x0b - 0x0e: reserved */
-#define PHY_BCOM_EXT_STAT 0x0f /* 16 bit r/o Extended Status Reg */
-#define PHY_BCOM_P_EXT_CTRL 0x10 /* 16 bit r/w PHY Extended Ctrl Reg */
-#define PHY_BCOM_P_EXT_STAT 0x11 /* 16 bit r/o PHY Extended Stat Reg */
-#define PHY_BCOM_RE_CTR 0x12 /* 16 bit r/w Receive Error Counter */
-#define PHY_BCOM_FC_CTR 0x13 /* 16 bit r/w False Carr Sense Cnt */
-#define PHY_BCOM_RNO_CTR 0x14 /* 16 bit r/w Receiver NOT_OK Cnt */
- /* 0x15 - 0x17: reserved */
-#define PHY_BCOM_AUX_CTRL 0x18 /* 16 bit r/w Auxiliary Control Reg */
-#define PHY_BCOM_AUX_STAT 0x19 /* 16 bit r/o Auxiliary Stat Summary */
-#define PHY_BCOM_INT_STAT 0x1a /* 16 bit r/o Interrupt Status Reg */
-#define PHY_BCOM_INT_MASK 0x1b /* 16 bit r/w Interrupt Mask Reg */
- /* 0x1c: reserved */
- /* 0x1d - 0x1f: test registers */
-
-/*----------------------------------------------------------------------------*/
-/*
- * Marvel-PHY Registers, indirect addressed over GMAC
- */
-#define PHY_MARV_CTRL 0x00 /* 16 bit r/w PHY Control Register */
-#define PHY_MARV_STAT 0x01 /* 16 bit r/o PHY Status Register */
-#define PHY_MARV_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
-#define PHY_MARV_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
-#define PHY_MARV_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
-#define PHY_MARV_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */
-#define PHY_MARV_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
-#define PHY_MARV_NEPG 0x07 /* 16 bit r/w Next Page Register */
-#define PHY_MARV_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */
- /* Marvel-specific registers */
-#define PHY_MARV_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Ctrl Reg */
-#define PHY_MARV_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
- /* 0x0b - 0x0e: reserved */
-#define PHY_MARV_EXT_STAT 0x0f /* 16 bit r/o Extended Status Reg */
-#define PHY_MARV_PHY_CTRL 0x10 /* 16 bit r/w PHY Specific Ctrl Reg */
-#define PHY_MARV_PHY_STAT 0x11 /* 16 bit r/o PHY Specific Stat Reg */
-#define PHY_MARV_INT_MASK 0x12 /* 16 bit r/w Interrupt Mask Reg */
-#define PHY_MARV_INT_STAT 0x13 /* 16 bit r/o Interrupt Status Reg */
-#define PHY_MARV_EXT_CTRL 0x14 /* 16 bit r/w Ext. PHY Specific Ctrl */
-#define PHY_MARV_RXE_CNT 0x15 /* 16 bit r/w Receive Error Counter */
-#define PHY_MARV_EXT_ADR 0x16 /* 16 bit r/w Ext. Ad. for Cable Diag. */
- /* 0x17: reserved */
-#define PHY_MARV_LED_CTRL 0x18 /* 16 bit r/w LED Control Reg */
-#define PHY_MARV_LED_OVER 0x19 /* 16 bit r/w Manual LED Override Reg */
-#define PHY_MARV_EXT_CTRL_2 0x1a /* 16 bit r/w Ext. PHY Specific Ctrl 2 */
-#define PHY_MARV_EXT_P_STAT 0x1b /* 16 bit r/w Ext. PHY Spec. Stat Reg */
-#define PHY_MARV_CABLE_DIAG 0x1c /* 16 bit r/o Cable Diagnostic Reg */
- /* 0x1d - 0x1f: reserved */
-
-/*----------------------------------------------------------------------------*/
-/*
- * Level One-PHY Registers, indirect addressed over XMAC
- */
-#define PHY_LONE_CTRL 0x00 /* 16 bit r/w PHY Control Register */
-#define PHY_LONE_STAT 0x01 /* 16 bit r/o PHY Status Register */
-#define PHY_LONE_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
-#define PHY_LONE_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
-#define PHY_LONE_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
-#define PHY_LONE_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */
-#define PHY_LONE_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
-#define PHY_LONE_NEPG 0x07 /* 16 bit r/w Next Page Register */
-#define PHY_LONE_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner*/
- /* Level One-specific registers */
-#define PHY_LONE_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Control Reg*/
-#define PHY_LONE_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
- /* 0x0b -0x0e: reserved */
-#define PHY_LONE_EXT_STAT 0x0f /* 16 bit r/o Extended Status Reg */
-#define PHY_LONE_PORT_CFG 0x10 /* 16 bit r/w Port Configuration Reg*/
-#define PHY_LONE_Q_STAT 0x11 /* 16 bit r/o Quick Status Reg */
-#define PHY_LONE_INT_ENAB 0x12 /* 16 bit r/w Interrupt Enable Reg */
-#define PHY_LONE_INT_STAT 0x13 /* 16 bit r/o Interrupt Status Reg */
-#define PHY_LONE_LED_CFG 0x14 /* 16 bit r/w LED Configuration Reg */
-#define PHY_LONE_PORT_CTRL 0x15 /* 16 bit r/w Port Control Reg */
-#define PHY_LONE_CIM 0x16 /* 16 bit r/o CIM Reg */
- /* 0x17 -0x1c: reserved */
-
-/*----------------------------------------------------------------------------*/
-/*
- * National-PHY Registers, indirect addressed over XMAC
- */
-#define PHY_NAT_CTRL 0x00 /* 16 bit r/w PHY Control Register */
-#define PHY_NAT_STAT 0x01 /* 16 bit r/w PHY Status Register */
-#define PHY_NAT_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
-#define PHY_NAT_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
-#define PHY_NAT_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
-#define PHY_NAT_AUNE_LP 0x05 /* 16 bit r/o Link Partner Ability Reg */
-#define PHY_NAT_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
-#define PHY_NAT_NEPG 0x07 /* 16 bit r/w Next Page Register */
-#define PHY_NAT_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner Reg */
- /* National-specific registers */
-#define PHY_NAT_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Control Reg */
-#define PHY_NAT_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
- /* 0x0b -0x0e: reserved */
-#define PHY_NAT_EXT_STAT 0x0f /* 16 bit r/o Extended Status Register */
-#define PHY_NAT_EXT_CTRL1 0x10 /* 16 bit r/o Extended Control Reg1 */
-#define PHY_NAT_Q_STAT1 0x11 /* 16 bit r/o Quick Status Reg1 */
-#define PHY_NAT_10B_OP 0x12 /* 16 bit r/o 10Base-T Operations Reg */
-#define PHY_NAT_EXT_CTRL2 0x13 /* 16 bit r/o Extended Control Reg1 */
-#define PHY_NAT_Q_STAT2 0x14 /* 16 bit r/o Quick Status Reg2 */
- /* 0x15 -0x18: reserved */
-#define PHY_NAT_PHY_ADDR 0x19 /* 16 bit r/o PHY Address Register */
-
-
-/*----------------------------------------------------------------------------*/
-
-/*
- * PHY bit definitions
- * Bits defined as PHY_X_..., PHY_B_..., PHY_L_... or PHY_N_... are
- * Xmac/Broadcom/LevelOne/National-specific.
- * All other are general.
- */
-
-/***** PHY_XMAC_CTRL 16 bit r/w PHY Control Register *****/
-/***** PHY_BCOM_CTRL 16 bit r/w PHY Control Register *****/
-/***** PHY_LONE_CTRL 16 bit r/w PHY Control Register *****/
-#define PHY_CT_RESET (1<<15) /* Bit 15: (sc) clear all PHY related regs */
-#define PHY_CT_LOOP (1<<14) /* Bit 14: enable Loopback over PHY */
-#define PHY_CT_SPS_LSB (1<<13) /* Bit 13: (BC,L1) Speed select, lower bit */
-#define PHY_CT_ANE (1<<12) /* Bit 12: Auto-Negotiation Enabled */
-#define PHY_CT_PDOWN (1<<11) /* Bit 11: (BC,L1) Power Down Mode */
-#define PHY_CT_ISOL (1<<10) /* Bit 10: (BC,L1) Isolate Mode */
-#define PHY_CT_RE_CFG (1<<9) /* Bit 9: (sc) Restart Auto-Negotiation */
-#define PHY_CT_DUP_MD (1<<8) /* Bit 8: Duplex Mode */
-#define PHY_CT_COL_TST (1<<7) /* Bit 7: (BC,L1) Collision Test enabled */
-#define PHY_CT_SPS_MSB (1<<6) /* Bit 6: (BC,L1) Speed select, upper bit */
- /* Bit 5..0: reserved */
-
-#define PHY_CT_SP1000 PHY_CT_SPS_MSB /* enable speed of 1000 Mbps */
-#define PHY_CT_SP100 PHY_CT_SPS_LSB /* enable speed of 100 Mbps */
-#define PHY_CT_SP10 (0) /* enable speed of 10 Mbps */
-
-
-/***** PHY_XMAC_STAT 16 bit r/w PHY Status Register *****/
-/***** PHY_BCOM_STAT 16 bit r/w PHY Status Register *****/
-/***** PHY_MARV_STAT 16 bit r/w PHY Status Register *****/
-/***** PHY_LONE_STAT 16 bit r/w PHY Status Register *****/
- /* Bit 15..9: reserved */
- /* (BC/L1) 100/10 Mbps cap bits ignored*/
-#define PHY_ST_EXT_ST (1<<8) /* Bit 8: Extended Status Present */
- /* Bit 7: reserved */
-#define PHY_ST_PRE_SUP (1<<6) /* Bit 6: (BC/L1) preamble suppression */
-#define PHY_ST_AN_OVER (1<<5) /* Bit 5: Auto-Negotiation Over */
-#define PHY_ST_REM_FLT (1<<4) /* Bit 4: Remote Fault Condition Occured */
-#define PHY_ST_AN_CAP (1<<3) /* Bit 3: Auto-Negotiation Capability */
-#define PHY_ST_LSYNC (1<<2) /* Bit 2: Link Synchronized */
-#define PHY_ST_JAB_DET (1<<1) /* Bit 1: (BC/L1) Jabber Detected */
-#define PHY_ST_EXT_REG (1<<0) /* Bit 0: Extended Register available */
-
-
-/***** PHY_XMAC_ID1 16 bit r/o PHY ID1 Register */
-/***** PHY_BCOM_ID1 16 bit r/o PHY ID1 Register */
-/***** PHY_MARV_ID1 16 bit r/o PHY ID1 Register */
-/***** PHY_LONE_ID1 16 bit r/o PHY ID1 Register */
-#define PHY_I1_OUI_MSK (0x3f<<10) /* Bit 15..10: Organization Unique ID */
-#define PHY_I1_MOD_NUM (0x3f<<4) /* Bit 9.. 4: Model Number */
-#define PHY_I1_REV_MSK 0x0f /* Bit 3.. 0: Revision Number */
-
-/* different Broadcom PHY Ids */
-#define PHY_BCOM_ID1_A1 0x6041
-#define PHY_BCOM_ID1_B2 0x6043
-#define PHY_BCOM_ID1_C0 0x6044
-#define PHY_BCOM_ID1_C5 0x6047
-
-
-/***** PHY_XMAC_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
-/***** PHY_XMAC_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
-#define PHY_AN_NXT_PG (1<<15) /* Bit 15: Request Next Page */
-#define PHY_X_AN_ACK (1<<14) /* Bit 14: (ro) Acknowledge Received */
-#define PHY_X_AN_RFB (3<<12) /* Bit 13..12: Remote Fault Bits */
- /* Bit 11.. 9: reserved */
-#define PHY_X_AN_PAUSE (3<<7) /* Bit 8.. 7: Pause Bits */
-#define PHY_X_AN_HD (1<<6) /* Bit 6: Half Duplex */
-#define PHY_X_AN_FD (1<<5) /* Bit 5: Full Duplex */
- /* Bit 4.. 0: reserved */
-
-/***** PHY_BCOM_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
-/***** PHY_BCOM_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
-/* PHY_AN_NXT_PG (see XMAC) Bit 15: Request Next Page */
- /* Bit 14: reserved */
-#define PHY_B_AN_RF (1<<13) /* Bit 13: Remote Fault */
- /* Bit 12: reserved */
-#define PHY_B_AN_ASP (1<<11) /* Bit 11: Asymmetric Pause */
-#define PHY_B_AN_PC (1<<10) /* Bit 10: Pause Capable */
- /* Bit 9..5: 100/10 BT cap bits ingnored */
-#define PHY_B_AN_SEL 0x1f /* Bit 4..0: Selector Field, 00001=Ethernet*/
-
-/***** PHY_LONE_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
-/***** PHY_LONE_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
-/* PHY_AN_NXT_PG (see XMAC) Bit 15: Request Next Page */
- /* Bit 14: reserved */
-#define PHY_L_AN_RF (1<<13) /* Bit 13: Remote Fault */
- /* Bit 12: reserved */
-#define PHY_L_AN_ASP (1<<11) /* Bit 11: Asymmetric Pause */
-#define PHY_L_AN_PC (1<<10) /* Bit 10: Pause Capable */
- /* Bit 9..5: 100/10 BT cap bits ingnored */
-#define PHY_L_AN_SEL 0x1f /* Bit 4..0: Selector Field, 00001=Ethernet*/
-
-/***** PHY_NAT_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
-/***** PHY_NAT_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
-/* PHY_AN_NXT_PG (see XMAC) Bit 15: Request Next Page */
- /* Bit 14: reserved */
-#define PHY_N_AN_RF (1<<13) /* Bit 13: Remote Fault */
- /* Bit 12: reserved */
-#define PHY_N_AN_100F (1<<11) /* Bit 11: 100Base-T2 FD Support */
-#define PHY_N_AN_100H (1<<10) /* Bit 10: 100Base-T2 HD Support */
- /* Bit 9..5: 100/10 BT cap bits ingnored */
-#define PHY_N_AN_SEL 0x1f /* Bit 4..0: Selector Field, 00001=Ethernet*/
-
-/* field type definition for PHY_x_AN_SEL */
-#define PHY_SEL_TYPE 0x01 /* 00001 = Ethernet */
-
-/***** PHY_XMAC_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/
- /* Bit 15..4: reserved */
-#define PHY_AN_LP_NP (1<<3) /* Bit 3: Link Partner can Next Page */
-#define PHY_AN_LOC_NP (1<<2) /* Bit 2: Local PHY can Next Page */
-#define PHY_AN_RX_PG (1<<1) /* Bit 1: Page Received */
- /* Bit 0: reserved */
-
-/***** PHY_BCOM_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/
- /* Bit 15..5: reserved */
-#define PHY_B_AN_PDF (1<<4) /* Bit 4: Parallel Detection Fault */
-/* PHY_AN_LP_NP (see XMAC) Bit 3: Link Partner can Next Page */
-/* PHY_AN_LOC_NP (see XMAC) Bit 2: Local PHY can Next Page */
-/* PHY_AN_RX_PG (see XMAC) Bit 1: Page Received */
-#define PHY_B_AN_LP_CAP (1<<0) /* Bit 0: Link Partner Auto-Neg. Cap. */
-
-/***** PHY_LONE_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/
-#define PHY_L_AN_BP (1<<5) /* Bit 5: Base Page Indication */
-#define PHY_L_AN_PDF (1<<4) /* Bit 4: Parallel Detection Fault */
-/* PHY_AN_LP_NP (see XMAC) Bit 3: Link Partner can Next Page */
-/* PHY_AN_LOC_NP (see XMAC) Bit 2: Local PHY can Next Page */
-/* PHY_AN_RX_PG (see XMAC) Bit 1: Page Received */
-#define PHY_B_AN_LP_CAP (1<<0) /* Bit 0: Link Partner Auto-Neg. Cap. */
-
-
-/***** PHY_XMAC_NEPG 16 bit r/w Next Page Register *****/
-/***** PHY_BCOM_NEPG 16 bit r/w Next Page Register *****/
-/***** PHY_LONE_NEPG 16 bit r/w Next Page Register *****/
-/***** PHY_XMAC_NEPG_LP 16 bit r/o Next Page Link Partner *****/
-/***** PHY_BCOM_NEPG_LP 16 bit r/o Next Page Link Partner *****/
-/***** PHY_LONE_NEPG_LP 16 bit r/o Next Page Link Partner *****/
-#define PHY_NP_MORE (1<<15) /* Bit 15: More, Next Pages to follow */
-#define PHY_NP_ACK1 (1<<14) /* Bit 14: (ro) Ack 1, for receiving a message*/
-#define PHY_NP_MSG_VAL (1<<13) /* Bit 13: Message Page valid */
-#define PHY_NP_ACK2 (1<<12) /* Bit 12: Ack 2, comply with msg content*/
-#define PHY_NP_TOG (1<<11) /* Bit 11: Toggle Bit, ensure sync */
-#define PHY_NP_MSG 0x07ff /* Bit 10..0: Message from/to Link Partner */
-
-/*
- * XMAC-Specific
- */
-/***** PHY_XMAC_EXT_STAT 16 bit r/w Extended Status Register *****/
-#define PHY_X_EX_FD (1<<15) /* Bit 15: Device Supports Full Duplex */
-#define PHY_X_EX_HD (1<<14) /* Bit 14: Device Supports Half Duplex */
- /* Bit 13..0: reserved */
-
-/***** PHY_XMAC_RES_ABI 16 bit r/o PHY Resolved Ability *****/
- /* Bit 15..9: reserved */
-#define PHY_X_RS_PAUSE (3<<7) /* Bit 8..7: selected Pause Mode */
-#define PHY_X_RS_HD (1<<6) /* Bit 6: Half Duplex Mode selected */
-#define PHY_X_RS_FD (1<<5) /* Bit 5: Full Duplex Mode selected */
-#define PHY_X_RS_ABLMIS (1<<4) /* Bit 4: duplex or pause cap mismatch */
-#define PHY_X_RS_PAUMIS (1<<3) /* Bit 3: pause capability missmatch */
- /* Bit 2..0: reserved */
-/*
- * Remote Fault Bits (PHY_X_AN_RFB) encoding
- */
-#define X_RFB_OK (0<<12) /* Bit 13..12 No errors, Link OK */
-#define X_RFB_LF (1<<12) /* Bit 13..12 Link Failure */
-#define X_RFB_OFF (2<<12) /* Bit 13..12 Offline */
-#define X_RFB_AN_ERR (3<<12) /* Bit 13..12 Auto-Negotiation Error */
-
-/*
- * Pause Bits (PHY_X_AN_PAUSE and PHY_X_RS_PAUSE) encoding
- */
-#define PHY_X_P_NO_PAUSE (0<<7) /* Bit 8..7: no Pause Mode */
-#define PHY_X_P_SYM_MD (1<<7) /* Bit 8..7: symmetric Pause Mode */
-#define PHY_X_P_ASYM_MD (2<<7) /* Bit 8..7: asymmetric Pause Mode */
-#define PHY_X_P_BOTH_MD (3<<7) /* Bit 8..7: both Pause Mode */
-
-
-/*
- * Broadcom-Specific
- */
-/***** PHY_BCOM_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
-#define PHY_B_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
-#define PHY_B_1000C_MSE (1<<12) /* Bit 12: Master/Slave Enable */
-#define PHY_B_1000C_MSC (1<<11) /* Bit 11: M/S Configuration */
-#define PHY_B_1000C_RD (1<<10) /* Bit 10: Repeater/DTE */
-#define PHY_B_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
-#define PHY_B_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
- /* Bit 7..0: reserved */
-
-/***** PHY_BCOM_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
-#define PHY_B_1000S_MSF (1<<15) /* Bit 15: Master/Slave Fault */
-#define PHY_B_1000S_MSR (1<<14) /* Bit 14: Master/Slave Result */
-#define PHY_B_1000S_LRS (1<<13) /* Bit 13: Local Receiver Status */
-#define PHY_B_1000S_RRS (1<<12) /* Bit 12: Remote Receiver Status */
-#define PHY_B_1000S_LP_FD (1<<11) /* Bit 11: Link Partner can FD */
-#define PHY_B_1000S_LP_HD (1<<10) /* Bit 10: Link Partner can HD */
- /* Bit 9..8: reserved */
-#define PHY_B_1000S_IEC 0xff /* Bit 7..0: Idle Error Count */
-
-/***** PHY_BCOM_EXT_STAT 16 bit r/o Extended Status Register *****/
-#define PHY_B_ES_X_FD_CAP (1<<15) /* Bit 15: 1000Base-X FD capable */
-#define PHY_B_ES_X_HD_CAP (1<<14) /* Bit 14: 1000Base-X HD capable */
-#define PHY_B_ES_T_FD_CAP (1<<13) /* Bit 13: 1000Base-T FD capable */
-#define PHY_B_ES_T_HD_CAP (1<<12) /* Bit 12: 1000Base-T HD capable */
- /* Bit 11..0: reserved */
-
-/***** PHY_BCOM_P_EXT_CTRL 16 bit r/w PHY Extended Control Reg *****/
-#define PHY_B_PEC_MAC_PHY (1<<15) /* Bit 15: 10BIT/GMI-Interface */
-#define PHY_B_PEC_DIS_CROSS (1<<14) /* Bit 14: Disable MDI Crossover */
-#define PHY_B_PEC_TX_DIS (1<<13) /* Bit 13: Tx output Disabled */
-#define PHY_B_PEC_INT_DIS (1<<12) /* Bit 12: Interrupts Disabled */
-#define PHY_B_PEC_F_INT (1<<11) /* Bit 11: Force Interrupt */
-#define PHY_B_PEC_BY_45 (1<<10) /* Bit 10: Bypass 4B5B-Decoder */
-#define PHY_B_PEC_BY_SCR (1<<9) /* Bit 9: Bypass Scrambler */
-#define PHY_B_PEC_BY_MLT3 (1<<8) /* Bit 8: Bypass MLT3 Encoder */
-#define PHY_B_PEC_BY_RXA (1<<7) /* Bit 7: Bypass Rx Alignm. */
-#define PHY_B_PEC_RES_SCR (1<<6) /* Bit 6: Reset Scrambler */
-#define PHY_B_PEC_EN_LTR (1<<5) /* Bit 5: Ena LED Traffic Mode */
-#define PHY_B_PEC_LED_ON (1<<4) /* Bit 4: Force LED's on */
-#define PHY_B_PEC_LED_OFF (1<<3) /* Bit 3: Force LED's off */
-#define PHY_B_PEC_EX_IPG (1<<2) /* Bit 2: Extend Tx IPG Mode */
-#define PHY_B_PEC_3_LED (1<<1) /* Bit 1: Three Link LED mode */
-#define PHY_B_PEC_HIGH_LA (1<<0) /* Bit 0: GMII FIFO Elasticy */
-
-/***** PHY_BCOM_P_EXT_STAT 16 bit r/o PHY Extended Status Reg *****/
- /* Bit 15..14: reserved */
-#define PHY_B_PES_CROSS_STAT (1<<13) /* Bit 13: MDI Crossover Status */
-#define PHY_B_PES_INT_STAT (1<<12) /* Bit 12: Interrupt Status */
-#define PHY_B_PES_RRS (1<<11) /* Bit 11: Remote Receiver Stat. */
-#define PHY_B_PES_LRS (1<<10) /* Bit 10: Local Receiver Stat. */
-#define PHY_B_PES_LOCKED (1<<9) /* Bit 9: Locked */
-#define PHY_B_PES_LS (1<<8) /* Bit 8: Link Status */
-#define PHY_B_PES_RF (1<<7) /* Bit 7: Remote Fault */
-#define PHY_B_PES_CE_ER (1<<6) /* Bit 6: Carrier Ext Error */
-#define PHY_B_PES_BAD_SSD (1<<5) /* Bit 5: Bad SSD */
-#define PHY_B_PES_BAD_ESD (1<<4) /* Bit 4: Bad ESD */
-#define PHY_B_PES_RX_ER (1<<3) /* Bit 3: Receive Error */
-#define PHY_B_PES_TX_ER (1<<2) /* Bit 2: Transmit Error */
-#define PHY_B_PES_LOCK_ER (1<<1) /* Bit 1: Lock Error */
-#define PHY_B_PES_MLT3_ER (1<<0) /* Bit 0: MLT3 code Error */
-
-/***** PHY_BCOM_FC_CTR 16 bit r/w False Carrier Counter *****/
- /* Bit 15..8: reserved */
-#define PHY_B_FC_CTR 0xff /* Bit 7..0: False Carrier Counter */
-
-/***** PHY_BCOM_RNO_CTR 16 bit r/w Receive NOT_OK Counter *****/
-#define PHY_B_RC_LOC_MSK 0xff00 /* Bit 15..8: Local Rx NOT_OK cnt */
-#define PHY_B_RC_REM_MSK 0x00ff /* Bit 7..0: Remote Rx NOT_OK cnt */
-
-/***** PHY_BCOM_AUX_CTRL 16 bit r/w Auxiliary Control Reg *****/
-#define PHY_B_AC_L_SQE (1<<15) /* Bit 15: Low Squelch */
-#define PHY_B_AC_LONG_PACK (1<<14) /* Bit 14: Rx Long Packets */
-#define PHY_B_AC_ER_CTRL (3<<12) /* Bit 13..12: Edgerate Control */
- /* Bit 11: reserved */
-#define PHY_B_AC_TX_TST (1<<10) /* Bit 10: Tx test bit, always 1 */
- /* Bit 9.. 8: reserved */
-#define PHY_B_AC_DIS_PRF (1<<7) /* Bit 7: dis part resp filter */
- /* Bit 6: reserved */
-#define PHY_B_AC_DIS_PM (1<<5) /* Bit 5: dis power management */
- /* Bit 4: reserved */
-#define PHY_B_AC_DIAG (1<<3) /* Bit 3: Diagnostic Mode */
- /* Bit 2.. 0: reserved */
-
-/***** PHY_BCOM_AUX_STAT 16 bit r/o Auxiliary Status Reg *****/
-#define PHY_B_AS_AN_C (1<<15) /* Bit 15: AutoNeg complete */
-#define PHY_B_AS_AN_CA (1<<14) /* Bit 14: AN Complete Ack */
-#define PHY_B_AS_ANACK_D (1<<13) /* Bit 13: AN Ack Detect */
-#define PHY_B_AS_ANAB_D (1<<12) /* Bit 12: AN Ability Detect */
-#define PHY_B_AS_NPW (1<<11) /* Bit 11: AN Next Page Wait */
-#define PHY_B_AS_AN_RES_MSK (7<<8) /* Bit 10..8: AN HDC */
-#define PHY_B_AS_PDF (1<<7) /* Bit 7: Parallel Detect. Fault */
-#define PHY_B_AS_RF (1<<6) /* Bit 6: Remote Fault */
-#define PHY_B_AS_ANP_R (1<<5) /* Bit 5: AN Page Received */
-#define PHY_B_AS_LP_ANAB (1<<4) /* Bit 4: LP AN Ability */
-#define PHY_B_AS_LP_NPAB (1<<3) /* Bit 3: LP Next Page Ability */
-#define PHY_B_AS_LS (1<<2) /* Bit 2: Link Status */
-#define PHY_B_AS_PRR (1<<1) /* Bit 1: Pause Resolution-Rx */
-#define PHY_B_AS_PRT (1<<0) /* Bit 0: Pause Resolution-Tx */
-
-#define PHY_B_AS_PAUSE_MSK (PHY_B_AS_PRR | PHY_B_AS_PRT)
-
-/***** PHY_BCOM_INT_STAT 16 bit r/o Interrupt Status Reg *****/
-/***** PHY_BCOM_INT_MASK 16 bit r/w Interrupt Mask Reg *****/
- /* Bit 15: reserved */
-#define PHY_B_IS_PSE (1<<14) /* Bit 14: Pair Swap Error */
-#define PHY_B_IS_MDXI_SC (1<<13) /* Bit 13: MDIX Status Change */
-#define PHY_B_IS_HCT (1<<12) /* Bit 12: counter above 32k */
-#define PHY_B_IS_LCT (1<<11) /* Bit 11: counter above 128 */
-#define PHY_B_IS_AN_PR (1<<10) /* Bit 10: Page Received */
-#define PHY_B_IS_NO_HDCL (1<<9) /* Bit 9: No HCD Link */
-#define PHY_B_IS_NO_HDC (1<<8) /* Bit 8: No HCD */
-#define PHY_B_IS_NEG_USHDC (1<<7) /* Bit 7: Negotiated Unsup. HCD */
-#define PHY_B_IS_SCR_S_ER (1<<6) /* Bit 6: Scrambler Sync Error */
-#define PHY_B_IS_RRS_CHANGE (1<<5) /* Bit 5: Remote Rx Stat Change */
-#define PHY_B_IS_LRS_CHANGE (1<<4) /* Bit 4: Local Rx Stat Change */
-#define PHY_B_IS_DUP_CHANGE (1<<3) /* Bit 3: Duplex Mode Change */
-#define PHY_B_IS_LSP_CHANGE (1<<2) /* Bit 2: Link Speed Change */
-#define PHY_B_IS_LST_CHANGE (1<<1) /* Bit 1: Link Status Changed */
-#define PHY_B_IS_CRC_ER (1<<0) /* Bit 0: CRC Error */
-
-#define PHY_B_DEF_MSK (~(PHY_B_IS_AN_PR | PHY_B_IS_LST_CHANGE))
-
-/* Pause Bits (PHY_B_AN_ASP and PHY_B_AN_PC) encoding */
-#define PHY_B_P_NO_PAUSE (0<<10) /* Bit 11..10: no Pause Mode */
-#define PHY_B_P_SYM_MD (1<<10) /* Bit 11..10: symmetric Pause Mode */
-#define PHY_B_P_ASYM_MD (2<<10) /* Bit 11..10: asymmetric Pause Mode */
-#define PHY_B_P_BOTH_MD (3<<10) /* Bit 11..10: both Pause Mode */
-
-/*
- * Resolved Duplex mode and Capabilities (Aux Status Summary Reg)
- */
-#define PHY_B_RES_1000FD (7<<8) /* Bit 10..8: 1000Base-T Full Dup. */
-#define PHY_B_RES_1000HD (6<<8) /* Bit 10..8: 1000Base-T Half Dup. */
-/* others: 100/10: invalid for us */
-
-/*
- * Level One-Specific
- */
-/***** PHY_LONE_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
-#define PHY_L_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
-#define PHY_L_1000C_MSE (1<<12) /* Bit 12: Master/Slave Enable */
-#define PHY_L_1000C_MSC (1<<11) /* Bit 11: M/S Configuration */
-#define PHY_L_1000C_RD (1<<10) /* Bit 10: Repeater/DTE */
-#define PHY_L_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
-#define PHY_L_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
- /* Bit 7..0: reserved */
-
-/***** PHY_LONE_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
-#define PHY_L_1000S_MSF (1<<15) /* Bit 15: Master/Slave Fault */
-#define PHY_L_1000S_MSR (1<<14) /* Bit 14: Master/Slave Result */
-#define PHY_L_1000S_LRS (1<<13) /* Bit 13: Local Receiver Status */
-#define PHY_L_1000S_RRS (1<<12) /* Bit 12: Remote Receiver Status*/
-#define PHY_L_1000S_LP_FD (1<<11) /* Bit 11: Link Partner can FD */
-#define PHY_L_1000S_LP_HD (1<<10) /* Bit 10: Link Partner can HD */
- /* Bit 9..8: reserved */
-#define PHY_B_1000S_IEC 0xff /* Bit 7..0: Idle Error Count */
-
-/***** PHY_LONE_EXT_STAT 16 bit r/o Extended Status Register *****/
-#define PHY_L_ES_X_FD_CAP (1<<15) /* Bit 15: 1000Base-X FD capable */
-#define PHY_L_ES_X_HD_CAP (1<<14) /* Bit 14: 1000Base-X HD capable */
-#define PHY_L_ES_T_FD_CAP (1<<13) /* Bit 13: 1000Base-T FD capable */
-#define PHY_L_ES_T_HD_CAP (1<<12) /* Bit 12: 1000Base-T HD capable */
- /* Bit 11..0: reserved */
-
-/***** PHY_LONE_PORT_CFG 16 bit r/w Port Configuration Reg *****/
-#define PHY_L_PC_REP_MODE (1<<15) /* Bit 15: Repeater Mode */
- /* Bit 14: reserved */
-#define PHY_L_PC_TX_DIS (1<<13) /* Bit 13: Tx output Disabled */
-#define PHY_L_PC_BY_SCR (1<<12) /* Bit 12: Bypass Scrambler */
-#define PHY_L_PC_BY_45 (1<<11) /* Bit 11: Bypass 4B5B-Decoder */
-#define PHY_L_PC_JAB_DIS (1<<10) /* Bit 10: Jabber Disabled */
-#define PHY_L_PC_SQE (1<<9) /* Bit 9: Enable Heartbeat */
-#define PHY_L_PC_TP_LOOP (1<<8) /* Bit 8: TP Loopback */
-#define PHY_L_PC_SSS (1<<7) /* Bit 7: Smart Speed Selection */
-#define PHY_L_PC_FIFO_SIZE (1<<6) /* Bit 6: FIFO Size */
-#define PHY_L_PC_PRE_EN (1<<5) /* Bit 5: Preamble Enable */
-#define PHY_L_PC_CIM (1<<4) /* Bit 4: Carrier Integrity Mon */
-#define PHY_L_PC_10_SER (1<<3) /* Bit 3: Use Serial Output */
-#define PHY_L_PC_ANISOL (1<<2) /* Bit 2: Unisolate Port */
-#define PHY_L_PC_TEN_BIT (1<<1) /* Bit 1: 10bit iface mode on */
-#define PHY_L_PC_ALTCLOCK (1<<0) /* Bit 0: (ro) ALTCLOCK Mode on */
-
-/***** PHY_LONE_Q_STAT 16 bit r/o Quick Status Reg *****/
-#define PHY_L_QS_D_RATE (3<<14) /* Bit 15..14: Data Rate */
-#define PHY_L_QS_TX_STAT (1<<13) /* Bit 13: Transmitting */
-#define PHY_L_QS_RX_STAT (1<<12) /* Bit 12: Receiving */
-#define PHY_L_QS_COL_STAT (1<<11) /* Bit 11: Collision */
-#define PHY_L_QS_L_STAT (1<<10) /* Bit 10: Link is up */
-#define PHY_L_QS_DUP_MOD (1<<9) /* Bit 9: Full/Half Duplex */
-#define PHY_L_QS_AN (1<<8) /* Bit 8: AutoNeg is On */
-#define PHY_L_QS_AN_C (1<<7) /* Bit 7: AN is Complete */
-#define PHY_L_QS_LLE (7<<4) /* Bit 6: Line Length Estim. */
-#define PHY_L_QS_PAUSE (1<<3) /* Bit 3: LP advertised Pause */
-#define PHY_L_QS_AS_PAUSE (1<<2) /* Bit 2: LP adv. asym. Pause */
-#define PHY_L_QS_ISOLATE (1<<1) /* Bit 1: CIM Isolated */
-#define PHY_L_QS_EVENT (1<<0) /* Bit 0: Event has occurred */
-
-/***** PHY_LONE_INT_ENAB 16 bit r/w Interrupt Enable Reg *****/
-/***** PHY_LONE_INT_STAT 16 bit r/o Interrupt Status Reg *****/
- /* Bit 15..14: reserved */
-#define PHY_L_IS_AN_F (1<<13) /* Bit 13: Auto-Negotiation fault */
- /* Bit 12: not described */
-#define PHY_L_IS_CROSS (1<<11) /* Bit 11: Crossover used */
-#define PHY_L_IS_POL (1<<10) /* Bit 10: Polarity correct. used*/
-#define PHY_L_IS_SS (1<<9) /* Bit 9: Smart Speed Downgrade*/
-#define PHY_L_IS_CFULL (1<<8) /* Bit 8: Counter Full */
-#define PHY_L_IS_AN_C (1<<7) /* Bit 7: AutoNeg Complete */
-#define PHY_L_IS_SPEED (1<<6) /* Bit 6: Speed Changed */
-#define PHY_L_IS_DUP (1<<5) /* Bit 5: Duplex Changed */
-#define PHY_L_IS_LS (1<<4) /* Bit 4: Link Status Changed */
-#define PHY_L_IS_ISOL (1<<3) /* Bit 3: Isolate Occured */
-#define PHY_L_IS_MDINT (1<<2) /* Bit 2: (ro) STAT: MII Int Pending */
-#define PHY_L_IS_INTEN (1<<1) /* Bit 1: ENAB: Enable IRQs */
-#define PHY_L_IS_FORCE (1<<0) /* Bit 0: ENAB: Force Interrupt */
-
-/* int. mask */
-#define PHY_L_DEF_MSK (PHY_L_IS_LS | PHY_L_IS_ISOL | PHY_L_IS_INTEN)
-
-/***** PHY_LONE_LED_CFG 16 bit r/w LED Configuration Reg *****/
-#define PHY_L_LC_LEDC (3<<14) /* Bit 15..14: Col/Blink/On/Off */
-#define PHY_L_LC_LEDR (3<<12) /* Bit 13..12: Rx/Blink/On/Off */
-#define PHY_L_LC_LEDT (3<<10) /* Bit 11..10: Tx/Blink/On/Off */
-#define PHY_L_LC_LEDG (3<<8) /* Bit 9..8: Giga/Blink/On/Off */
-#define PHY_L_LC_LEDS (3<<6) /* Bit 7..6: 10-100/Blink/On/Off */
-#define PHY_L_LC_LEDL (3<<4) /* Bit 5..4: Link/Blink/On/Off */
-#define PHY_L_LC_LEDF (3<<2) /* Bit 3..2: Duplex/Blink/On/Off */
-#define PHY_L_LC_PSTRECH (1<<1) /* Bit 1: Strech LED Pulses */
-#define PHY_L_LC_FREQ (1<<0) /* Bit 0: 30/100 ms */
-
-/***** PHY_LONE_PORT_CTRL 16 bit r/w Port Control Reg *****/
-#define PHY_L_PC_TX_TCLK (1<<15) /* Bit 15: Enable TX_TCLK */
- /* Bit 14: reserved */
-#define PHY_L_PC_ALT_NP (1<<13) /* Bit 14: Alternate Next Page */
-#define PHY_L_PC_GMII_ALT (1<<12) /* Bit 13: Alternate GMII driver */
- /* Bit 11: reserved */
-#define PHY_L_PC_TEN_CRS (1<<10) /* Bit 10: Extend CRS*/
- /* Bit 9..0: not described */
-
-/***** PHY_LONE_CIM 16 bit r/o CIM Reg *****/
-#define PHY_L_CIM_ISOL (255<<8)/* Bit 15..8: Isolate Count */
-#define PHY_L_CIM_FALSE_CAR (255<<0)/* Bit 7..0: False Carrier Count */
-
-
-/*
- * Pause Bits (PHY_L_AN_ASP and PHY_L_AN_PC) encoding
- */
-#define PHY_L_P_NO_PAUSE (0<<10) /* Bit 11..10: no Pause Mode */
-#define PHY_L_P_SYM_MD (1<<10) /* Bit 11..10: symmetric Pause Mode */
-#define PHY_L_P_ASYM_MD (2<<10) /* Bit 11..10: asymmetric Pause Mode */
-#define PHY_L_P_BOTH_MD (3<<10) /* Bit 11..10: both Pause Mode */
-
-
-/*
- * National-Specific
- */
-/***** PHY_NAT_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
-#define PHY_N_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
-#define PHY_N_1000C_MSE (1<<12) /* Bit 12: Master/Slave Enable */
-#define PHY_N_1000C_MSC (1<<11) /* Bit 11: M/S Configuration */
-#define PHY_N_1000C_RD (1<<10) /* Bit 10: Repeater/DTE */
-#define PHY_N_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
-#define PHY_N_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
-#define PHY_N_1000C_APC (1<<7) /* Bit 7: Asymmetric Pause Cap. */
- /* Bit 6..0: reserved */
-
-/***** PHY_NAT_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
-#define PHY_N_1000S_MSF (1<<15) /* Bit 15: Master/Slave Fault */
-#define PHY_N_1000S_MSR (1<<14) /* Bit 14: Master/Slave Result */
-#define PHY_N_1000S_LRS (1<<13) /* Bit 13: Local Receiver Status */
-#define PHY_N_1000S_RRS (1<<12) /* Bit 12: Remote Receiver Status*/
-#define PHY_N_1000S_LP_FD (1<<11) /* Bit 11: Link Partner can FD */
-#define PHY_N_1000S_LP_HD (1<<10) /* Bit 10: Link Partner can HD */
-#define PHY_N_1000C_LP_APC (1<<9) /* Bit 9: LP Asym. Pause Cap. */
- /* Bit 8: reserved */
-#define PHY_N_1000S_IEC 0xff /* Bit 7..0: Idle Error Count */
-
-/***** PHY_NAT_EXT_STAT 16 bit r/o Extended Status Register *****/
-#define PHY_N_ES_X_FD_CAP (1<<15) /* Bit 15: 1000Base-X FD capable */
-#define PHY_N_ES_X_HD_CAP (1<<14) /* Bit 14: 1000Base-X HD capable */
-#define PHY_N_ES_T_FD_CAP (1<<13) /* Bit 13: 1000Base-T FD capable */
-#define PHY_N_ES_T_HD_CAP (1<<12) /* Bit 12: 1000Base-T HD capable */
- /* Bit 11..0: reserved */
-
-/* todo: those are still missing */
-/***** PHY_NAT_EXT_CTRL1 16 bit r/o Extended Control Reg1 *****/
-/***** PHY_NAT_Q_STAT1 16 bit r/o Quick Status Reg1 *****/
-/***** PHY_NAT_10B_OP 16 bit r/o 10Base-T Operations Reg *****/
-/***** PHY_NAT_EXT_CTRL2 16 bit r/o Extended Control Reg1 *****/
-/***** PHY_NAT_Q_STAT2 16 bit r/o Quick Status Reg2 *****/
-/***** PHY_NAT_PHY_ADDR 16 bit r/o PHY Address Register *****/
-
-/*
- * Marvell-Specific
- */
-/***** PHY_MARV_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
-/***** PHY_MARV_AUNE_LP 16 bit r/w Link Part Ability Reg *****/
-#define PHY_M_AN_NXT_PG BIT_15 /* Request Next Page */
-#define PHY_M_AN_ACK BIT_14 /* (ro) Acknowledge Received */
-#define PHY_M_AN_RF BIT_13 /* Remote Fault */
- /* Bit 12: reserved */
-#define PHY_M_AN_ASP BIT_11 /* Asymmetric Pause */
-#define PHY_M_AN_PC BIT_10 /* MAC Pause implemented */
-#define PHY_M_AN_100_FD BIT_8 /* Advertise 100Base-TX Full Duplex */
-#define PHY_M_AN_100_HD BIT_7 /* Advertise 100Base-TX Half Duplex */
-#define PHY_M_AN_10_FD BIT_6 /* Advertise 10Base-TX Full Duplex */
-#define PHY_M_AN_10_HD BIT_5 /* Advertise 10Base-TX Half Duplex */
-
-/* special defines for FIBER (88E1011S only) */
-#define PHY_M_AN_ASP_X BIT_8 /* Asymmetric Pause */
-#define PHY_M_AN_PC_X BIT_7 /* MAC Pause implemented */
-#define PHY_M_AN_1000X_AHD BIT_6 /* Advertise 10000Base-X Half Duplex */
-#define PHY_M_AN_1000X_AFD BIT_5 /* Advertise 10000Base-X Full Duplex */
-
-/* Pause Bits (PHY_M_AN_ASP_X and PHY_M_AN_PC_X) encoding */
-#define PHY_M_P_NO_PAUSE_X (0<<7) /* Bit 8.. 7: no Pause Mode */
-#define PHY_M_P_SYM_MD_X (1<<7) /* Bit 8.. 7: symmetric Pause Mode */
-#define PHY_M_P_ASYM_MD_X (2<<7) /* Bit 8.. 7: asymmetric Pause Mode */
-#define PHY_M_P_BOTH_MD_X (3<<7) /* Bit 8.. 7: both Pause Mode */
-
-/***** PHY_MARV_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
-#define PHY_M_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
-#define PHY_M_1000C_MSE (1<<12) /* Bit 12: Manual Master/Slave Enable */
-#define PHY_M_1000C_MSC (1<<11) /* Bit 11: M/S Configuration (1=Master) */
-#define PHY_M_1000C_MPD (1<<10) /* Bit 10: Multi-Port Device */
-#define PHY_M_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
-#define PHY_M_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
- /* Bit 7..0: reserved */
-
-/***** PHY_MARV_PHY_CTRL 16 bit r/w PHY Specific Ctrl Reg *****/
-
-#define PHY_M_PC_TX_FFD_MSK (3<<14) /* Bit 15..14: Tx FIFO Depth Mask */
-#define PHY_M_PC_RX_FFD_MSK (3<<12) /* Bit 13..12: Rx FIFO Depth Mask */
-#define PHY_M_PC_ASS_CRS_TX (1<<11) /* Bit 11: Assert CRS on Transmit */
-#define PHY_M_PC_FL_GOOD (1<<10) /* Bit 10: Force Link Good */
-#define PHY_M_PC_EN_DET_MSK (3<<8) /* Bit 9.. 8: Energy Detect Mask */
-#define PHY_M_PC_ENA_EXT_D (1<<7) /* Bit 7: Enable Ext. Distance (10BT) */
-#define PHY_M_PC_MDIX_MSK (3<<5) /* Bit 6.. 5: MDI/MDIX Config. Mask */
-#define PHY_M_PC_DIS_125CLK (1<<4) /* Bit 4: Disable 125 CLK */
-#define PHY_M_PC_MAC_POW_UP (1<<3) /* Bit 3: MAC Power up */
-#define PHY_M_PC_SQE_T_ENA (1<<2) /* Bit 2: SQE Test Enabled */
-#define PHY_M_PC_POL_R_DIS (1<<1) /* Bit 1: Polarity Reversal Disabled */
-#define PHY_M_PC_DIS_JABBER (1<<0) /* Bit 0: Disable Jabber */
-
-#define PHY_M_PC_MDI_XMODE(x) SHIFT5(x)
-#define PHY_M_PC_MAN_MDI 0 /* 00 = Manual MDI configuration */
-#define PHY_M_PC_MAN_MDIX 1 /* 01 = Manual MDIX configuration */
-#define PHY_M_PC_ENA_AUTO 3 /* 11 = Enable Automatic Crossover */
-
-/***** PHY_MARV_PHY_STAT 16 bit r/o PHY Specific Status Reg *****/
-#define PHY_M_PS_SPEED_MSK (3<<14) /* Bit 15..14: Speed Mask */
-#define PHY_M_PS_SPEED_1000 (1<<15) /* 10 = 1000 Mbps */
-#define PHY_M_PS_SPEED_100 (1<<14) /* 01 = 100 Mbps */
-#define PHY_M_PS_SPEED_10 0 /* 00 = 10 Mbps */
-#define PHY_M_PS_FULL_DUP (1<<13) /* Bit 13: Full Duplex */
-#define PHY_M_PS_PAGE_REC (1<<12) /* Bit 12: Page Received */
-#define PHY_M_PS_SPDUP_RES (1<<11) /* Bit 11: Speed & Duplex Resolved */
-#define PHY_M_PS_LINK_UP (1<<10) /* Bit 10: Link Up */
-#define PHY_M_PS_CABLE_MSK (3<<7) /* Bit 9.. 7: Cable Length Mask */
-#define PHY_M_PS_MDI_X_STAT (1<<6) /* Bit 6: MDI Crossover Stat (1=MDIX) */
-#define PHY_M_PS_DOWNS_STAT (1<<5) /* Bit 5: Downshift Status (1=downsh.) */
-#define PHY_M_PS_ENDET_STAT (1<<4) /* Bit 4: Energy Detect Status (1=act) */
-#define PHY_M_PS_TX_P_EN (1<<3) /* Bit 3: Tx Pause Enabled */
-#define PHY_M_PS_RX_P_EN (1<<2) /* Bit 2: Rx Pause Enabled */
-#define PHY_M_PS_POL_REV (1<<1) /* Bit 1: Polarity Reversed */
-#define PHY_M_PC_JABBER (1<<0) /* Bit 0: Jabber */
-
-#define PHY_M_PS_PAUSE_MSK (PHY_M_PS_TX_P_EN | PHY_M_PS_RX_P_EN)
-
-/***** PHY_MARV_INT_MASK 16 bit r/w Interrupt Mask Reg *****/
-/***** PHY_MARV_INT_STAT 16 bit r/o Interrupt Status Reg *****/
-#define PHY_M_IS_AN_ERROR (1<<15) /* Bit 15: Auto-Negotiation Error */
-#define PHY_M_IS_LSP_CHANGE (1<<14) /* Bit 14: Link Speed Changed */
-#define PHY_M_IS_DUP_CHANGE (1<<13) /* Bit 13: Duplex Mode Changed */
-#define PHY_M_IS_AN_PR (1<<12) /* Bit 12: Page Received */
-#define PHY_M_IS_AN_COMPL (1<<11) /* Bit 11: Auto-Negotiation Completed */
-#define PHY_M_IS_LST_CHANGE (1<<10) /* Bit 10: Link Status Changed */
-#define PHY_M_IS_SYMB_ERROR (1<<9) /* Bit 9: Symbol Error */
-#define PHY_M_IS_FALSE_CARR (1<<8) /* Bit 8: False Carrier */
-#define PHY_M_IS_FIFO_ERROR (1<<7) /* Bit 7: FIFO Overflow/Underrun Error */
-#define PHY_M_IS_MDI_CHANGE (1<<6) /* Bit 6: MDI Crossover Changed */
-#define PHY_M_IS_DOWNSH_DET (1<<5) /* Bit 5: Downshift Detected */
-#define PHY_M_IS_END_CHANGE (1<<4) /* Bit 4: Energy Detect Changed */
- /* Bit 3..2: reserved */
-#define PHY_M_IS_POL_CHANGE (1<<1) /* Bit 1: Polarity Changed */
-#define PHY_M_IS_JABBER (1<<0) /* Bit 0: Jabber */
-
-#define PHY_M_DEF_MSK (PHY_M_IS_AN_ERROR | PHY_M_IS_AN_PR | \
- PHY_M_IS_LST_CHANGE | PHY_M_IS_FIFO_ERROR)
-
-/***** PHY_MARV_EXT_CTRL 16 bit r/w Ext. PHY Specific Ctrl *****/
-#define PHY_M_EC_M_DSC_MSK (3<<10) /* Bit 11..10: Master downshift counter */
-#define PHY_M_EC_S_DSC_MSK (3<<8) /* Bit 9.. 8: Slave downshift counter */
-#define PHY_M_EC_MAC_S_MSK (7<<4) /* Bit 6.. 4: Def. MAC interface speed */
-
-#define PHY_M_EC_M_DSC(x) SHIFT10(x) /* 00=1x; 01=2x; 10=3x; 11=4x */
-#define PHY_M_EC_S_DSC(x) SHIFT8(x) /* 00=dis; 01=1x; 10=2x; 11=3x */
-#define PHY_M_EC_MAC_S(x) SHIFT4(x) /* 01X=0; 110=2.5; 111=25 (MHz) */
-
-#define MAC_TX_CLK_0_MHZ 2
-#define MAC_TX_CLK_2_5_MHZ 6
-#define MAC_TX_CLK_25_MHZ 7
-
-/***** PHY_MARV_LED_CTRL 16 bit r/w LED Control Reg *****/
-#define PHY_M_LEDC_DIS_LED (1<<15) /* Bit 15: Disable LED */
-#define PHY_M_LEDC_PULS_MSK (7<<12) /* Bit 14..12: Pulse Stretch Mask */
-#define PHY_M_LEDC_F_INT (1<<11) /* Bit 11: Force Interrupt */
-#define PHY_M_LEDC_BL_R_MSK (7<<8) /* Bit 10.. 8: Blink Rate Mask */
- /* Bit 7.. 5: reserved */
-#define PHY_M_LEDC_LINK_MSK (3<<3) /* Bit 4.. 3: Link Control Mask */
-#define PHY_M_LEDC_DP_CTRL (1<<2) /* Bit 2: Duplex Control */
-#define PHY_M_LEDC_RX_CTRL (1<<1) /* Bit 1: Rx activity / Link */
-#define PHY_M_LEDC_TX_CTRL (1<<0) /* Bit 0: Tx activity / Link */
-
-#define PHY_M_LED_PULS_DUR(x) SHIFT12(x) /* Pulse Stretch Duration */
-
-#define PULS_NO_STR 0 /* no pulse stretching */
-#define PULS_21MS 1 /* 21 ms to 42 ms */
-#define PULS_42MS 2 /* 42 ms to 84 ms */
-#define PULS_84MS 3 /* 84 ms to 170 ms */
-#define PULS_170MS 4 /* 170 ms to 340 ms */
-#define PULS_340MS 5 /* 340 ms to 670 ms */
-#define PULS_670MS 6 /* 670 ms to 1.3 s */
-#define PULS_1300MS 7 /* 1.3 s to 2.7 s */
-
-#define PHY_M_LED_BLINK_RT(x) SHIFT8(x) /* Blink Rate */
-
-#define BLINK_42MS 0 /* 42 ms */
-#define BLINK_84MS 1 /* 84 ms */
-#define BLINK_170MS 2 /* 170 ms */
-#define BLINK_340MS 3 /* 340 ms */
-#define BLINK_670MS 4 /* 670 ms */
- /* values 5 - 7: reserved */
-
-/***** PHY_MARV_LED_OVER 16 bit r/w Manual LED Override Reg *****/
-#define PHY_M_LED_MO_DUP(x) SHIFT10(x) /* Bit 11..10: Duplex */
-#define PHY_M_LED_MO_10(x) SHIFT8(x) /* Bit 9.. 8: Link 10 */
-#define PHY_M_LED_MO_100(x) SHIFT6(x) /* Bit 7.. 6: Link 100 */
-#define PHY_M_LED_MO_1000(x) SHIFT4(x) /* Bit 5.. 4: Link 1000 */
-#define PHY_M_LED_MO_RX(x) SHIFT2(x) /* Bit 3.. 2: Rx */
-#define PHY_M_LED_MO_TX(x) SHIFT0(x) /* Bit 1.. 0: Tx */
-
-#define MO_LED_NORM 0
-#define MO_LED_BLINK 1
-#define MO_LED_OFF 2
-#define MO_LED_ON 3
-
-/***** PHY_MARV_EXT_CTRL_2 16 bit r/w Ext. PHY Specific Ctrl 2 *****/
- /* Bit 15.. 7: reserved */
-#define PHY_M_EC2_FI_IMPED (1<<6) /* Bit 6: Fiber Input Impedance */
-#define PHY_M_EC2_FO_IMPED (1<<5) /* Bit 5: Fiber Output Impedance */
-#define PHY_M_EC2_FO_M_CLK (1<<4) /* Bit 4: Fiber Mode Clock Enable */
-#define PHY_M_EC2_FO_BOOST (1<<3) /* Bit 3: Fiber Output Boost */
-#define PHY_M_EC2_FO_AM_MSK 7 /* Bit 2.. 0: Fiber Output Amplitude */
-
-/***** PHY_MARV_CABLE_DIAG 16 bit r/o Cable Diagnostic Reg *****/
-#define PHY_M_CABD_ENA_TEST (1<<15) /* Bit 15: Enable Test */
-#define PHY_M_CABD_STAT_MSK (3<<13) /* Bit 14..13: Status */
- /* Bit 12.. 8: reserved */
-#define PHY_M_CABD_DIST_MSK 0xff /* Bit 7.. 0: Distance */
-
-/* values for Cable Diagnostic Status (11=fail; 00=OK; 10=open; 01=short) */
-#define CABD_STAT_NORMAL 0
-#define CABD_STAT_SHORT 1
-#define CABD_STAT_OPEN 2
-#define CABD_STAT_FAIL 3
-
-
-/*
- * GMAC registers
- *
- * The GMAC registers are 16 or 32 bits wide.
- * The GMACs host processor interface is 16 bits wide,
- * therefore ALL registers will be addressed with 16 bit accesses.
- *
- * The following macros are provided to access the GMAC registers
- * GM_IN16(), GM_OUT16, GM_IN32(), GM_OUT32(), GM_INADR(), GM_OUTADR(),
- * GM_INHASH(), and GM_OUTHASH().
- * The macros are defined in SkGeHw.h.
- *
- * Note: NA reg = Network Address e.g DA, SA etc.
- *
- */
-
-/* Port Registers */
-#define GM_GP_STAT 0x0000 /* 16 bit r/o General Purpose Status */
-#define GM_GP_CTRL 0x0004 /* 16 bit r/w General Purpose Control */
-#define GM_TX_CTRL 0x0008 /* 16 bit r/w Transmit Control Reg. */
-#define GM_RX_CTRL 0x000c /* 16 bit r/w Receive Control Reg. */
-#define GM_TX_FLOW_CTRL 0x0010 /* 16 bit r/w Transmit Flow Control */
-#define GM_TX_PARAM 0x0014 /* 16 bit r/w Transmit Parameter Reg. */
-#define GM_SERIAL_MODE 0x0018 /* 16 bit r/w Serial Mode Register */
-
-/* Source Address Registers */
-#define GM_SRC_ADDR_1L 0x001c /* 16 bit r/w Source Address 1 (low) */
-#define GM_SRC_ADDR_1M 0x0020 /* 16 bit r/w Source Address 1 (middle) */
-#define GM_SRC_ADDR_1H 0x0024 /* 16 bit r/w Source Address 1 (high) */
-#define GM_SRC_ADDR_2L 0x0028 /* 16 bit r/w Source Address 2 (low) */
-#define GM_SRC_ADDR_2M 0x002c /* 16 bit r/w Source Address 2 (middle) */
-#define GM_SRC_ADDR_2H 0x0030 /* 16 bit r/w Source Address 2 (high) */
-
-/* Multicast Address Hash Registers */
-#define GM_MC_ADDR_H1 0x0034 /* 16 bit r/w Multicast Address Hash 1 */
-#define GM_MC_ADDR_H2 0x0038 /* 16 bit r/w Multicast Address Hash 2 */
-#define GM_MC_ADDR_H3 0x003c /* 16 bit r/w Multicast Address Hash 3 */
-#define GM_MC_ADDR_H4 0x0040 /* 16 bit r/w Multicast Address Hash 4 */
-
-/* Interrupt Source Registers */
-#define GM_TX_IRQ_SRC 0x0044 /* 16 bit r/o Tx Overflow IRQ Source */
-#define GM_RX_IRQ_SRC 0x0048 /* 16 bit r/o Rx Overflow IRQ Source */
-#define GM_TR_IRQ_SRC 0x004c /* 16 bit r/o Tx/Rx Over. IRQ Source */
-
-/* Interrupt Mask Registers */
-#define GM_TX_IRQ_MSK 0x0050 /* 16 bit r/w Tx Overflow IRQ Mask */
-#define GM_RX_IRQ_MSK 0x0054 /* 16 bit r/w Rx Overflow IRQ Mask */
-#define GM_TR_IRQ_MSK 0x0058 /* 16 bit r/w Tx/Rx Over. IRQ Mask */
-
-/* Serial Management Interface (SMI) Registers */
-#define GM_SMI_CTRL 0x0080 /* 16 bit r/w SMI Control Register */
-#define GM_SMI_DATA 0x0084 /* 16 bit r/w SMI Data Register */
-#define GM_PHY_ADDR 0x0088 /* 16 bit r/w GPHY Address Register */
-
-/* MIB Counters */
-#define GM_MIB_CNT_BASE 0x0100 /* Base Address of MIB Counters */
-#define GM_MIB_CNT_SIZE 44 /* Number of MIB Counters */
-
-/*
- * MIB Counters base address definitions (low word) -
- * use offset 4 for access to high word (32 bit r/o)
- */
-#define GM_RXF_UC_OK \
- (GM_MIB_CNT_BASE + 0) /* Unicast Frames Received OK */
-#define GM_RXF_BC_OK \
- (GM_MIB_CNT_BASE + 8) /* Broadcast Frames Received OK */
-#define GM_RXF_MPAUSE \
- (GM_MIB_CNT_BASE + 16) /* Pause MAC Ctrl Frames Received */
-#define GM_RXF_MC_OK \
- (GM_MIB_CNT_BASE + 24) /* Multicast Frames Received OK */
-#define GM_RXF_FCS_ERR \
- (GM_MIB_CNT_BASE + 32) /* Rx Frame Check Seq. Error */
- /* GM_MIB_CNT_BASE + 40: reserved */
-#define GM_RXO_OK_LO \
- (GM_MIB_CNT_BASE + 48) /* Octets Received OK Low */
-#define GM_RXO_OK_HI \
- (GM_MIB_CNT_BASE + 56) /* Octets Received OK High */
-#define GM_RXO_ERR_LO \
- (GM_MIB_CNT_BASE + 64) /* Octets Received Invalid Low */
-#define GM_RXO_ERR_HI \
- (GM_MIB_CNT_BASE + 72) /* Octets Received Invalid High */
-#define GM_RXF_SHT \
- (GM_MIB_CNT_BASE + 80) /* Frames <64 Byte Received OK */
-#define GM_RXE_FRAG \
- (GM_MIB_CNT_BASE + 88) /* Frames <64 Byte Receeived with FCS Err */
-#define GM_RXF_64B \
- (GM_MIB_CNT_BASE + 96) /* 64 Byte Rx Frame */
-#define GM_RXF_127B \
- (GM_MIB_CNT_BASE + 104) /* 65-127 Byte Rx Frame */
-#define GM_RXF_255B \
- (GM_MIB_CNT_BASE + 112) /* 128-255 Byte Rx Frame */
-#define GM_RXF_511B \
- (GM_MIB_CNT_BASE + 120) /* 256-511 Byte Rx Frame */
-#define GM_RXF_1023B \
- (GM_MIB_CNT_BASE + 128) /* 512-1023 Byte Rx Frame */
-#define GM_RXF_1518B \
- (GM_MIB_CNT_BASE + 136) /* 1024-1518 Byte Rx Frame */
-#define GM_RXF_MAX_SZ \
- (GM_MIB_CNT_BASE + 144) /* 1519-MaxSize Byte Rx Frame */
-#define GM_RXF_LNG_ERR \
- (GM_MIB_CNT_BASE + 152) /* Rx Frame too Long Error */
-#define GM_RXF_JAB_PKT \
- (GM_MIB_CNT_BASE + 160) /* Rx Jabber Packet Frame */
- /* GM_MIB_CNT_BASE + 168: reserved */
-#define GM_RXE_FIFO_OV \
- (GM_MIB_CNT_BASE + 176) /* Rx FIFO overflow Event */
- /* GM_MIB_CNT_BASE + 184: reserved */
-#define GM_TXF_UC_OK \
- (GM_MIB_CNT_BASE + 192) /* Unicast Frames Xmitted OK */
-#define GM_TXF_BC_OK \
- (GM_MIB_CNT_BASE + 200) /* Broadcast Frames Xmitted OK */
-#define GM_TXF_MPAUSE \
- (GM_MIB_CNT_BASE + 208) /* Pause MAC Ctrl Frames Xmitted */
-#define GM_TXF_MC_OK \
- (GM_MIB_CNT_BASE + 216) /* Multicast Frames Xmitted OK */
-#define GM_TXO_OK_LO \
- (GM_MIB_CNT_BASE + 224) /* Octets Transmitted OK Low */
-#define GM_TXO_OK_HI \
- (GM_MIB_CNT_BASE + 232) /* Octets Transmitted OK High */
-#define GM_TXF_64B \
- (GM_MIB_CNT_BASE + 240) /* 64 Byte Tx Frame */
-#define GM_TXF_127B \
- (GM_MIB_CNT_BASE + 248) /* 65-127 Byte Tx Frame */
-#define GM_TXF_255B \
- (GM_MIB_CNT_BASE + 256) /* 128-255 Byte Tx Frame */
-#define GM_TXF_511B \
- (GM_MIB_CNT_BASE + 264) /* 256-511 Byte Tx Frame */
-#define GM_TXF_1023B \
- (GM_MIB_CNT_BASE + 272) /* 512-1023 Byte Tx Frame */
-#define GM_TXF_1518B \
- (GM_MIB_CNT_BASE + 280) /* 1024-1518 Byte Tx Frame */
-#define GM_TXF_MAX_SZ \
- (GM_MIB_CNT_BASE + 288) /* 1519-MaxSize Byte Tx Frame */
- /* GM_MIB_CNT_BASE + 296: reserved */
-#define GM_TXF_COL \
- (GM_MIB_CNT_BASE + 304) /* Tx Collision */
-#define GM_TXF_LAT_COL \
- (GM_MIB_CNT_BASE + 312) /* Tx Late Collision */
-#define GM_TXF_ABO_COL \
- (GM_MIB_CNT_BASE + 320) /* Tx aborted due to Exces. Col. */
-#define GM_TXF_MUL_COL \
- (GM_MIB_CNT_BASE + 328) /* Tx Multiple Collision */
-#define GM_TXF_SNG_COL \
- (GM_MIB_CNT_BASE + 336) /* Tx Single Collision */
-#define GM_TXE_FIFO_UR \
- (GM_MIB_CNT_BASE + 344) /* Tx FIFO Underrun Event */
-
-/*----------------------------------------------------------------------------*/
-/*
- * GMAC Bit Definitions
- *
- * If the bit access behaviour differs from the register access behaviour
- * (r/w, r/o) this is documented after the bit number.
- * The following bit access behaviours are used:
- * (sc) self clearing
- * (r/o) read only
- */
-
-/* GM_GP_STAT 16 bit r/o General Purpose Status Register */
-
-#define GM_GPSR_SPEED (1<<15) /* Bit 15: Port Speed (1 = 100 Mbps) */
-#define GM_GPSR_DUPLEX (1<<14) /* Bit 14: Duplex Mode (1 = Full) */
-#define GM_GPSR_FC_TX_DIS (1<<13) /* Bit 13: Tx Flow Control Mode Disabled */
-#define GM_GPSR_LINK_UP (1<<12) /* Bit 12: Link Up Status */
-#define GM_GPSR_PAUSE (1<<11) /* Bit 11: Pause State */
-#define GM_GPSR_TX_ACTIVE (1<<10) /* Bit 10: Tx in Progress */
-#define GM_GPSR_EXC_COL (1<<9) /* Bit 9: Excessive Collisions Occured */
-#define GM_GPSR_LAT_COL (1<<8) /* Bit 8: Late Collisions Occured */
- /* Bit 7..6: reserved */
-#define GM_GPSR_PHY_ST_CH (1<<5) /* Bit 5: PHY Status Change */
-#define GM_GPSR_GIG_SPEED (1<<4) /* Bit 4: Gigabit Speed (1 = 1000 Mbps) */
-#define GM_GPSR_PART_MODE (1<<3) /* Bit 3: Partition mode */
-#define GM_GPSR_FC_RX_DIS (1<<2) /* Bit 2: Rx Flow Control Mode Disabled */
-#define GM_GPSR_PROM_EN (1<<1) /* Bit 1: Promiscuous Mode Enabled */
- /* Bit 0: reserved */
-
-/* GM_GP_CTRL 16 bit r/w General Purpose Control Register */
- /* Bit 15: reserved */
-#define GM_GPCR_PROM_ENA (1<<14) /* Bit 14: Enable Promiscuous Mode */
-#define GM_GPCR_FC_TX_DIS (1<<13) /* Bit 13: Disable Tx Flow Control Mode */
-#define GM_GPCR_TX_ENA (1<<12) /* Bit 12: Enable Transmit */
-#define GM_GPCR_RX_ENA (1<<11) /* Bit 11: Enable Receive */
-#define GM_GPCR_BURST_ENA (1<<10) /* Bit 10: Enable Burst Mode */
-#define GM_GPCR_LOOP_ENA (1<<9) /* Bit 9: Enable MAC Loopback Mode */
-#define GM_GPCR_PART_ENA (1<<8) /* Bit 8: Enable Partition Mode */
-#define GM_GPCR_GIGS_ENA (1<<7) /* Bit 7: Gigabit Speed (1000 Mbps) */
-#define GM_GPCR_FL_PASS (1<<6) /* Bit 6: Force Link Pass */
-#define GM_GPCR_DUP_FULL (1<<5) /* Bit 5: Full Duplex Mode */
-#define GM_GPCR_FC_RX_DIS (1<<4) /* Bit 4: Disable Rx Flow Control Mode */
-#define GM_GPCR_SPEED_100 (1<<3) /* Bit 3: Port Speed 100 Mbps */
-#define GM_GPCR_AU_DUP_DIS (1<<2) /* Bit 2: Disable Auto-Update for Duplex */
-#define GM_GPCR_AU_FCT_DIS (1<<1) /* Bit 1: Disable Auto-Update for Flow-c. */
-#define GM_GPCR_AU_SPD_DIS (1<<0) /* Bit 0: Disable Auto-Update for Speed */
-
-#define GM_GPCR_SPEED_1000 (GM_GPCR_GIGS_ENA | GM_GPCR_SPEED_100)
-#define GM_GPCR_AU_ALL_DIS (GM_GPCR_AU_DUP_DIS | GM_GPCR_AU_FCT_DIS |\
- GM_GPCR_AU_SPD_DIS)
-
-/* GM_TX_CTRL 16 bit r/w Transmit Control Register */
-
-#define GM_TXCR_FORCE_JAM (1<<15) /* Bit 15: Force Jam / Flow-Control */
-#define GM_TXCR_CRC_DIS (1<<14) /* Bit 14: Disable insertion of CRC */
-#define GM_TXCR_PAD_DIS (1<<13) /* Bit 13: Disable padding of packets */
-#define GM_TXCR_COL_THR (4<<10) /* Bit 12..10: Collision Threshold */
-
-/* GM_RX_CTRL 16 bit r/w Receive Control Register */
-#define GM_RXCR_UCF_ENA (1<<15) /* Bit 15: Enable Unicast filtering */
-#define GM_RXCR_MCF_ENA (1<<14) /* Bit 14: Enable Multicast filtering */
-#define GM_RXCR_CRC_DIS (1<<13) /* Bit 13: Remove 4-byte CRC */
-#define GM_RXCR_PASS_FC (1<<12) /* Bit 12: Pass FC packets to FIFO */
-
-/* GM_TX_PARAM 16 bit r/w Transmit Parameter Register */
-#define GM_TXPA_JAMLEN_MSK (0x03<<14) /* Bit 15..14: Jam Length */
-#define GM_TXPA_JAMIPG_MSK (0x1f<<9) /* Bit 13..9: Jam IPG */
-#define GM_TXPA_JAMDAT_MSK (0x1f<<4) /* Bit 8..4: IPG Jam to Data */
- /* Bit 3..0: reserved */
-#define JAM_LEN_VAL(x) SHIFT14(x)
-#define JAM_IPG_VAL(x) SHIFT9(x)
-#define IPG_JAM_DATA(x) SHIFT4(x)
-
-/* GM_SERIAL_MODE 16 bit r/w Serial Mode Register */
-#define GM_SMOD_DATABL_MSK (0x1f<<11) /* Bit 15..11: Data Blinder */
-#define GM_SMOD_LIMIT_4 (1<<10) /* Bit 10: 4 consecutive transmit trials */
-#define GM_SMOD_VLAN_ENA (1<<9) /* Bit 9: Enable VLAN (Max. Frame Length) */
-#define GM_SMOD_JUMBO_ENA (1<<8) /* Bit 8: Enable Jumbo (Max. Frame Length) */
- /* Bit 7..5: reserved */
-#define GM_SMOD_IPG_MSK 0x1f /* Bit 4..0: Inter-Packet Gap (IPG) */
-
-#define DATA_BLIND_VAL(x) SHIFT11(x)
-#define DATA_BLIND_FAST_ETH 0x1c
-#define DATA_BLIND_GIGABIT 4
-
-#define IPG_VAL_FAST_ETH 0x1e
-#define IPG_VAL_GIGABIT 6
-
-/* GM_SMI_CTRL 16 bit r/w SMI Control Register */
-
-#define GM_SMI_CT_PHY_AD(x) SHIFT11(x)
-#define GM_SMI_CT_REG_AD(x) SHIFT6(x)
-#define GM_SMI_CT_OP_RD (1<<5) /* Bit 5: OpCode Read (0=Write)*/
-#define GM_SMI_CT_RD_VAL (1<<4) /* Bit 4: Read Valid (Read completed) */
-#define GM_SMI_CT_BUSY (1<<3) /* Bit 3: Busy (Operation in progress) */
- /* Bit 2..0: reserved */
-
-/* GM_PHY_ADDR 16 bit r/w GPHY Address Register */
- /* Bit 15..6: reserved */
-#define GM_PAR_MIB_CLR (1<<5) /* Bit 5: Set MIB Clear Counter Mode */
-#define GM_PAR_MIB_TST (1<<4) /* Bit 4: MIB Load Counter (Test Mode) */
- /* Bit 3..0: reserved */
-
-/* Receive Frame Status Encoding */
-#define GMR_FS_LEN (0xffffUL<<16) /* Bit 31..16: Rx Frame Length */
- /* Bit 15..14: reserved */
-#define GMR_FS_VLAN (1L<<13) /* Bit 13: VLAN Packet */
-#define GMR_FS_JABBER (1L<<12) /* Bit 12: Jabber Packet */
-#define GMR_FS_UN_SIZE (1L<<11) /* Bit 11: Undersize Packet */
-#define GMR_FS_MC (1L<<10) /* Bit 10: Multicast Packet */
-#define GMR_FS_BC (1L<<9) /* Bit 9: Broadcast Packet */
-#define GMR_FS_RX_OK (1L<<8) /* Bit 8: Receive OK (Good Packet) */
-#define GMR_FS_GOOD_FC (1L<<7) /* Bit 7: Good Flow-Control Packet */
-#define GMR_FS_BAD_FC (1L<<6) /* Bit 6: Bad Flow-Control Packet */
-#define GMR_FS_MII_ERR (1L<<5) /* Bit 5: MII Error */
-#define GMR_FS_LONG_ERR (1L<<4) /* Bit 4: Too Long Packet */
-#define GMR_FS_FRAGMENT (1L<<3) /* Bit 3: Fragment */
- /* Bit 2: reserved */
-#define GMR_FS_CRC_ERR (1L<<1) /* Bit 1: CRC Error */
-#define GMR_FS_RX_FF_OV (1L<<0) /* Bit 0: Rx FIFO Overflow */
-
-/*
- * GMR_FS_ANY_ERR (analogous to XMR_FS_ANY_ERR)
- */
-#define GMR_FS_ANY_ERR (GMR_FS_CRC_ERR | \
- GMR_FS_LONG_ERR | \
- GMR_FS_MII_ERR | \
- GMR_FS_BAD_FC | \
- GMR_FS_GOOD_FC | \
- GMR_FS_JABBER)
-
-/* Rx GMAC FIFO Flush Mask (default) */
-#define RX_FF_FL_DEF_MSK (GMR_FS_CRC_ERR | \
- GMR_FS_RX_FF_OV | \
- GMR_FS_MII_ERR | \
- GMR_FS_BAD_FC | \
- GMR_FS_GOOD_FC | \
- GMR_FS_UN_SIZE | \
- GMR_FS_JABBER)
-
-/* typedefs *******************************************************************/
-
-
-/* function prototypes ********************************************************/
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __INC_XMAC_H */
+/******************************************************************************
+ *
+ * Name: xmac_ii.h
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:10 $
+ * Purpose: Defines and Macros for Gigabit Ethernet Controller
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: xmac_ii.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:10 kenagy
+ * no message
+ *
+ * Revision 1.46 2003/01/28 09:47:45 rschmidt
+ * Added defines for copper MDI/MDIX configuration
+ * Added defines for LED Control Register
+ * Editorial changes
+ *
+ * Revision 1.45 2002/12/10 14:35:13 rschmidt
+ * Corrected defines for Extended PHY Specific Control
+ * Added defines for Ext. PHY Specific Ctrl 2 Reg. (Fiber specific)
+ *
+ * Revision 1.44 2002/12/09 14:58:41 rschmidt
+ * Added defines for Ext. PHY Specific Ctrl Reg. (downshift feature)
+ * Added 'GMR_FS_UN_SIZE'-Bit to Rx GMAC FIFO Flush Mask
+ *
+ * Revision 1.43 2002/12/05 10:14:45 rschmidt
+ * Added define for GMAC's Half Duplex Burst Mode
+ * Added define for Rx GMAC FIFO Flush Mask (default)
+ *
+ * Revision 1.42 2002/11/12 16:48:19 rschmidt
+ * Added defines for Cable Diagnostic Register (GPHY)
+ * Editorial changes
+ *
+ * Revision 1.41 2002/10/21 11:20:22 rschmidt
+ * Added bit GMR_FS_GOOD_FC to GMR_FS_ANY_ERR
+ * Editorial changes
+ *
+ * Revision 1.40 2002/10/14 14:54:14 rschmidt
+ * Added defines for GPHY Specific Status and GPHY Interrupt Status
+ * Added bits PHY_M_IS_AN_ERROR and PHY_M_IS_FIFO_ERROR to PHY_M_DEF_MSK
+ * Editorial changes
+ *
+ * Revision 1.39 2002/10/10 15:53:44 mkarl
+ * added some bit definitions for link speed status and LED's
+ *
+ * Revision 1.38 2002/08/21 16:23:46 rschmidt
+ * Added defines for PHY Specific Ctrl Reg
+ * Editorial changes
+ *
+ * Revision 1.37 2002/08/16 14:50:33 rschmidt
+ * Added defines for Auto-Neg. Advertisement YUKON Fiber (88E1011S only)
+ * Changed define PHY_M_DEF_MSK for GPHY IRQ Mask
+ * Editorial changes
+ *
+ * Revision 1.36 2002/08/12 13:21:10 rschmidt
+ * Added defines for different Broadcom PHY Ids
+ *
+ * Revision 1.35 2002/08/08 15:58:01 rschmidt
+ * Added defines for Manual LED Override register (YUKON)
+ * Editorial changes
+ *
+ * Revision 1.34 2002/07/31 17:23:36 rwahl
+ * Added define GMR_FS_ANY_ERR (analogous to XMR_FS_ANY_ERR).
+ *
+ * Revision 1.33 2002/07/23 16:03:37 rschmidt
+ * Added defines for GPHY registers
+ * Editorial changes
+ *
+ * Revision 1.32 2002/07/15 18:14:37 rwahl
+ * Added GMAC MIB counters definitions.
+ * Editorial changes.
+ *
+ * Revision 1.31 2002/07/15 15:42:50 rschmidt
+ * Removed defines from PHY specific reg. which are
+ * common to all PHYs
+ * Added defines for GMAC MIB Counters
+ * Editorial changes
+ *
+ * Revision 1.30 2002/06/05 08:22:12 rschmidt
+ * Changed defines for GMAC Rx Control Register and Rx Status
+ * Editorial changes
+ *
+ * Revision 1.29 2002/04/25 11:43:56 rschmidt
+ * Added define PHY_B_AS_PAUSE_MSK for BCom Pause Res.
+ * Added new registers and defines for YUKON (GMAC, GPHY)
+ * Added Receive Frame Status Encoding for YUKON
+ * Editorial changes
+ *
+ * Revision 1.28 2000/11/09 12:32:49 rassmann
+ * Renamed variables.
+ *
+ * Revision 1.27 2000/05/17 11:00:46 malthoff
+ * Add bit for enable/disable power management in BCOM chip.
+ *
+ * Revision 1.26 1999/11/22 14:03:00 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.25 1999/08/12 19:19:38 malthoff
+ * Add PHY_B_AC_TX_TST bit according to BCOM A1 errata sheet.
+ *
+ * Revision 1.24 1999/07/30 11:27:21 cgoos
+ * Fixed a missing end-of-comment.
+ *
+ * Revision 1.23 1999/07/30 07:03:31 malthoff
+ * Cut some long comments.
+ * Correct the XMAC PHY ID definitions.
+ *
+ * Revision 1.22 1999/05/19 07:33:18 cgoos
+ * Changes for 1000Base-T.
+ *
+ * Revision 1.21 1999/03/25 07:46:11 malthoff
+ * Add XM_HW_CFG, XM_TS_READ, and XM_TS_LOAD registers.
+ *
+ * Revision 1.20 1999/03/12 13:36:09 malthoff
+ * Remove __STDC__.
+ *
+ * Revision 1.19 1998/12/10 12:22:54 gklug
+ * fix: RX_PAGE must be in interrupt mask
+ *
+ * Revision 1.18 1998/12/10 10:36:36 gklug
+ * fix: swap of pause bits
+ *
+ * Revision 1.17 1998/11/18 13:21:45 gklug
+ * fix: Default interrupt mask
+ *
+ * Revision 1.16 1998/10/29 15:53:21 gklug
+ * fix: Default mask uses ASS (GP0) signal
+ *
+ * Revision 1.15 1998/10/28 13:52:52 malthoff
+ * Add new bits in RX_CMD register.
+ *
+ * Revision 1.14 1998/10/19 15:34:53 gklug
+ * fix: typos
+ *
+ * Revision 1.13 1998/10/14 07:19:03 malthoff
+ * bug fix: Every define which describes bit 31
+ * must be declared as unsigned long 'UL'.
+ * fix bit definitions of PHY_AN_RFB and PHY_AN_PAUSE.
+ * Remove ANP defines. Rework the RFB defines.
+ *
+ * Revision 1.12 1998/10/14 06:22:44 cgoos
+ * Changed shifted constant to ULONG.
+ *
+ * Revision 1.11 1998/10/14 05:43:26 gklug
+ * add: shift pause coding
+ * fix: PAUSE bits definition
+ *
+ * Revision 1.10 1998/10/13 09:19:21 malthoff
+ * Again change XMR_FS_ANY_ERR because of new info from XaQti.
+ *
+ * Revision 1.9 1998/10/09 07:58:30 malthoff
+ * Add XMR_FS_FCS_ERR to XMR_FS_ANY_ERR.
+ *
+ * Revision 1.8 1998/10/09 07:18:17 malthoff
+ * bug fix of a bug fix: XM_PAUSE_MODE and XM_DEF_MODE
+ * are not inverted! Bug XM_DEF_MSK is inverted.
+ *
+ * Revision 1.7 1998/10/05 08:04:32 malthoff
+ * bug fix: XM_PAUSE_MODE and XM_DEF_MODE
+ * must be inverted declarations.
+ *
+ * Revision 1.6 1998/09/28 13:38:18 malthoff
+ * Add default modes and masks XM_DEF_MSK,
+ * XM_PAUSE_MODE and XM_DEF_MODE
+ *
+ * Revision 1.5 1998/09/16 14:42:04 malthoff
+ * Bug Fix: XM_GP_PORT is a 32 bit (not a 16 bit) register.
+ *
+ * Revision 1.4 1998/08/20 14:59:47 malthoff
+ * Rework this file after reading the XaQti data sheet
+ * "Differences between Rev. B2 & Rev. C XMAC II".
+ * This file is now 100% XMAC II Rev. C complained.
+ *
+ * Revision 1.3 1998/06/29 12:18:23 malthoff
+ * Correct XMR_FS_ANY_ERR definition.
+ *
+ * Revision 1.2 1998/06/29 12:10:56 malthoff
+ * Add define XMR_FS_ANY_ERR.
+ *
+ * Revision 1.1 1998/06/19 13:37:17 malthoff
+ * created.
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_XMAC_H
+#define __INC_XMAC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* defines ********************************************************************/
+
+/*
+ * XMAC II registers
+ *
+ * The XMAC registers are 16 or 32 bits wide.
+ * The XMACs host processor interface is set to 16 bit mode,
+ * therefore ALL registers will be addressed with 16 bit accesses.
+ *
+ * The following macros are provided to access the XMAC registers
+ * XM_IN16(), XM_OUT16, XM_IN32(), XM_OUT32(), XM_INADR(), XM_OUTADR(),
+ * XM_INHASH(), and XM_OUTHASH().
+ * The macros are defined in SkGeHw.h.
+ *
+ * Note: NA reg = Network Address e.g DA, SA etc.
+ *
+ */
+#define XM_MMU_CMD 0x0000 /* 16 bit r/w MMU Command Register */
+ /* 0x0004: reserved */
+#define XM_POFF 0x0008 /* 32 bit r/w Packet Offset Register */
+#define XM_BURST 0x000c /* 32 bit r/w Burst Register for half duplex*/
+#define XM_1L_VLAN_TAG 0x0010 /* 16 bit r/w One Level VLAN Tag ID */
+#define XM_2L_VLAN_TAG 0x0014 /* 16 bit r/w Two Level VLAN Tag ID */
+ /* 0x0018 - 0x001e: reserved */
+#define XM_TX_CMD 0x0020 /* 16 bit r/w Transmit Command Register */
+#define XM_TX_RT_LIM 0x0024 /* 16 bit r/w Transmit Retry Limit Register */
+#define XM_TX_STIME 0x0028 /* 16 bit r/w Transmit Slottime Register */
+#define XM_TX_IPG 0x002c /* 16 bit r/w Transmit Inter Packet Gap */
+#define XM_RX_CMD 0x0030 /* 16 bit r/w Receive Command Register */
+#define XM_PHY_ADDR 0x0034 /* 16 bit r/w PHY Address Register */
+#define XM_PHY_DATA 0x0038 /* 16 bit r/w PHY Data Register */
+ /* 0x003c: reserved */
+#define XM_GP_PORT 0x0040 /* 32 bit r/w General Purpose Port Register */
+#define XM_IMSK 0x0044 /* 16 bit r/w Interrupt Mask Register */
+#define XM_ISRC 0x0048 /* 16 bit r/o Interrupt Status Register */
+#define XM_HW_CFG 0x004c /* 16 bit r/w Hardware Config Register */
+ /* 0x0050 - 0x005e: reserved */
+#define XM_TX_LO_WM 0x0060 /* 16 bit r/w Tx FIFO Low Water Mark */
+#define XM_TX_HI_WM 0x0062 /* 16 bit r/w Tx FIFO High Water Mark */
+#define XM_TX_THR 0x0064 /* 16 bit r/w Tx Request Threshold */
+#define XM_HT_THR 0x0066 /* 16 bit r/w Host Request Threshold */
+#define XM_PAUSE_DA 0x0068 /* NA reg r/w Pause Destination Address */
+ /* 0x006e: reserved */
+#define XM_CTL_PARA 0x0070 /* 32 bit r/w Control Parameter Register */
+#define XM_MAC_OPCODE 0x0074 /* 16 bit r/w Opcode for MAC control frames */
+#define XM_MAC_PTIME 0x0076 /* 16 bit r/w Pause time for MAC ctrl frames*/
+#define XM_TX_STAT 0x0078 /* 32 bit r/o Tx Status LIFO Register */
+
+ /* 0x0080 - 0x00fc: 16 NA reg r/w Exact Match Address Registers */
+ /* use the XM_EXM() macro to address */
+#define XM_EXM_START 0x0080 /* r/w Start Address of the EXM Regs */
+
+ /*
+ * XM_EXM(Reg)
+ *
+ * returns the XMAC address offset of specified Exact Match Addr Reg
+ *
+ * para: Reg EXM register to addr (0 .. 15)
+ *
+ * usage: XM_INADDR(IoC, MAC_1, XM_EXM(i), &val[i]);
+ */
+#define XM_EXM(Reg) (XM_EXM_START + ((Reg) << 3))
+
+#define XM_SRC_CHK 0x0100 /* NA reg r/w Source Check Address Register */
+#define XM_SA 0x0108 /* NA reg r/w Station Address Register */
+#define XM_HSM 0x0110 /* 64 bit r/w Hash Match Address Registers */
+#define XM_RX_LO_WM 0x0118 /* 16 bit r/w Receive Low Water Mark */
+#define XM_RX_HI_WM 0x011a /* 16 bit r/w Receive High Water Mark */
+#define XM_RX_THR 0x011c /* 32 bit r/w Receive Request Threshold */
+#define XM_DEV_ID 0x0120 /* 32 bit r/o Device ID Register */
+#define XM_MODE 0x0124 /* 32 bit r/w Mode Register */
+#define XM_LSA 0x0128 /* NA reg r/o Last Source Register */
+ /* 0x012e: reserved */
+#define XM_TS_READ 0x0130 /* 32 bit r/o Time Stamp Read Register */
+#define XM_TS_LOAD 0x0134 /* 32 bit r/o Time Stamp Load Value */
+ /* 0x0138 - 0x01fe: reserved */
+#define XM_STAT_CMD 0x0200 /* 16 bit r/w Statistics Command Register */
+#define XM_RX_CNT_EV 0x0204 /* 32 bit r/o Rx Counter Event Register */
+#define XM_TX_CNT_EV 0x0208 /* 32 bit r/o Tx Counter Event Register */
+#define XM_RX_EV_MSK 0x020c /* 32 bit r/w Rx Counter Event Mask */
+#define XM_TX_EV_MSK 0x0210 /* 32 bit r/w Tx Counter Event Mask */
+ /* 0x0204 - 0x027e: reserved */
+#define XM_TXF_OK 0x0280 /* 32 bit r/o Frames Transmitted OK Conuter */
+#define XM_TXO_OK_HI 0x0284 /* 32 bit r/o Octets Transmitted OK High Cnt*/
+#define XM_TXO_OK_LO 0x0288 /* 32 bit r/o Octets Transmitted OK Low Cnt */
+#define XM_TXF_BC_OK 0x028c /* 32 bit r/o Broadcast Frames Xmitted OK */
+#define XM_TXF_MC_OK 0x0290 /* 32 bit r/o Multicast Frames Xmitted OK */
+#define XM_TXF_UC_OK 0x0294 /* 32 bit r/o Unicast Frames Xmitted OK */
+#define XM_TXF_LONG 0x0298 /* 32 bit r/o Tx Long Frame Counter */
+#define XM_TXE_BURST 0x029c /* 32 bit r/o Tx Burst Event Counter */
+#define XM_TXF_MPAUSE 0x02a0 /* 32 bit r/o Tx Pause MAC Ctrl Frame Cnt */
+#define XM_TXF_MCTRL 0x02a4 /* 32 bit r/o Tx MAC Ctrl Frame Counter */
+#define XM_TXF_SNG_COL 0x02a8 /* 32 bit r/o Tx Single Collision Counter */
+#define XM_TXF_MUL_COL 0x02ac /* 32 bit r/o Tx Multiple Collision Counter */
+#define XM_TXF_ABO_COL 0x02b0 /* 32 bit r/o Tx aborted due to Exces. Col. */
+#define XM_TXF_LAT_COL 0x02b4 /* 32 bit r/o Tx Late Collision Counter */
+#define XM_TXF_DEF 0x02b8 /* 32 bit r/o Tx Deferred Frame Counter */
+#define XM_TXF_EX_DEF 0x02bc /* 32 bit r/o Tx Excessive Deferall Counter */
+#define XM_TXE_FIFO_UR 0x02c0 /* 32 bit r/o Tx FIFO Underrun Event Cnt */
+#define XM_TXE_CS_ERR 0x02c4 /* 32 bit r/o Tx Carrier Sense Error Cnt */
+#define XM_TXP_UTIL 0x02c8 /* 32 bit r/o Tx Utilization in % */
+ /* 0x02cc - 0x02ce: reserved */
+#define XM_TXF_64B 0x02d0 /* 32 bit r/o 64 Byte Tx Frame Counter */
+#define XM_TXF_127B 0x02d4 /* 32 bit r/o 65-127 Byte Tx Frame Counter */
+#define XM_TXF_255B 0x02d8 /* 32 bit r/o 128-255 Byte Tx Frame Counter */
+#define XM_TXF_511B 0x02dc /* 32 bit r/o 256-511 Byte Tx Frame Counter */
+#define XM_TXF_1023B 0x02e0 /* 32 bit r/o 512-1023 Byte Tx Frame Counter*/
+#define XM_TXF_MAX_SZ 0x02e4 /* 32 bit r/o 1024-MaxSize Byte Tx Frame Cnt*/
+ /* 0x02e8 - 0x02fe: reserved */
+#define XM_RXF_OK 0x0300 /* 32 bit r/o Frames Received OK */
+#define XM_RXO_OK_HI 0x0304 /* 32 bit r/o Octets Received OK High Cnt */
+#define XM_RXO_OK_LO 0x0308 /* 32 bit r/o Octets Received OK Low Counter*/
+#define XM_RXF_BC_OK 0x030c /* 32 bit r/o Broadcast Frames Received OK */
+#define XM_RXF_MC_OK 0x0310 /* 32 bit r/o Multicast Frames Received OK */
+#define XM_RXF_UC_OK 0x0314 /* 32 bit r/o Unicast Frames Received OK */
+#define XM_RXF_MPAUSE 0x0318 /* 32 bit r/o Rx Pause MAC Ctrl Frame Cnt */
+#define XM_RXF_MCTRL 0x031c /* 32 bit r/o Rx MAC Ctrl Frame Counter */
+#define XM_RXF_INV_MP 0x0320 /* 32 bit r/o Rx invalid Pause Frame Cnt */
+#define XM_RXF_INV_MOC 0x0324 /* 32 bit r/o Rx Frames with inv. MAC Opcode*/
+#define XM_RXE_BURST 0x0328 /* 32 bit r/o Rx Burst Event Counter */
+#define XM_RXE_FMISS 0x032c /* 32 bit r/o Rx Missed Frames Event Cnt */
+#define XM_RXF_FRA_ERR 0x0330 /* 32 bit r/o Rx Framing Error Counter */
+#define XM_RXE_FIFO_OV 0x0334 /* 32 bit r/o Rx FIFO overflow Event Cnt */
+#define XM_RXF_JAB_PKT 0x0338 /* 32 bit r/o Rx Jabber Packet Frame Cnt */
+#define XM_RXE_CAR_ERR 0x033c /* 32 bit r/o Rx Carrier Event Error Cnt */
+#define XM_RXF_LEN_ERR 0x0340 /* 32 bit r/o Rx in Range Length Error */
+#define XM_RXE_SYM_ERR 0x0344 /* 32 bit r/o Rx Symbol Error Counter */
+#define XM_RXE_SHT_ERR 0x0348 /* 32 bit r/o Rx Short Event Error Cnt */
+#define XM_RXE_RUNT 0x034c /* 32 bit r/o Rx Runt Event Counter */
+#define XM_RXF_LNG_ERR 0x0350 /* 32 bit r/o Rx Frame too Long Error Cnt */
+#define XM_RXF_FCS_ERR 0x0354 /* 32 bit r/o Rx Frame Check Seq. Error Cnt */
+ /* 0x0358 - 0x035a: reserved */
+#define XM_RXF_CEX_ERR 0x035c /* 32 bit r/o Rx Carrier Ext Error Frame Cnt*/
+#define XM_RXP_UTIL 0x0360 /* 32 bit r/o Rx Utilization in % */
+ /* 0x0364 - 0x0366: reserved */
+#define XM_RXF_64B 0x0368 /* 32 bit r/o 64 Byte Rx Frame Counter */
+#define XM_RXF_127B 0x036c /* 32 bit r/o 65-127 Byte Rx Frame Counter */
+#define XM_RXF_255B 0x0370 /* 32 bit r/o 128-255 Byte Rx Frame Counter */
+#define XM_RXF_511B 0x0374 /* 32 bit r/o 256-511 Byte Rx Frame Counter */
+#define XM_RXF_1023B 0x0378 /* 32 bit r/o 512-1023 Byte Rx Frame Counter*/
+#define XM_RXF_MAX_SZ 0x037c /* 32 bit r/o 1024-MaxSize Byte Rx Frame Cnt*/
+ /* 0x02e8 - 0x02fe: reserved */
+
+
+/*----------------------------------------------------------------------------*/
+/*
+ * XMAC Bit Definitions
+ *
+ * If the bit access behaviour differs from the register access behaviour
+ * (r/w, r/o) this is documented after the bit number.
+ * The following bit access behaviours are used:
+ * (sc) self clearing
+ * (ro) read only
+ */
+
+/* XM_MMU_CMD 16 bit r/w MMU Command Register */
+ /* Bit 15..13: reserved */
+#define XM_MMU_PHY_RDY (1<<12) /* Bit 12: PHY Read Ready */
+#define XM_MMU_PHY_BUSY (1<<11) /* Bit 11: PHY Busy */
+#define XM_MMU_IGN_PF (1<<10) /* Bit 10: Ignore Pause Frame */
+#define XM_MMU_MAC_LB (1<<9) /* Bit 9: Enable MAC Loopback */
+ /* Bit 8: reserved */
+#define XM_MMU_FRC_COL (1<<7) /* Bit 7: Force Collision */
+#define XM_MMU_SIM_COL (1<<6) /* Bit 6: Simulate Collision */
+#define XM_MMU_NO_PRE (1<<5) /* Bit 5: No MDIO Preamble */
+#define XM_MMU_GMII_FD (1<<4) /* Bit 4: GMII uses Full Duplex */
+#define XM_MMU_RAT_CTRL (1<<3) /* Bit 3: Enable Rate Control */
+#define XM_MMU_GMII_LOOP (1<<2) /* Bit 2: PHY is in Loopback Mode */
+#define XM_MMU_ENA_RX (1<<1) /* Bit 1: Enable Receiver */
+#define XM_MMU_ENA_TX (1<<0) /* Bit 0: Enable Transmitter */
+
+
+/* XM_TX_CMD 16 bit r/w Transmit Command Register */
+ /* Bit 15..7: reserved */
+#define XM_TX_BK2BK (1<<6) /* Bit 6: Ignor Carrier Sense (Tx Bk2Bk)*/
+#define XM_TX_ENC_BYP (1<<5) /* Bit 5: Set Encoder in Bypass Mode */
+#define XM_TX_SAM_LINE (1<<4) /* Bit 4: (sc) Start utilization calculation */
+#define XM_TX_NO_GIG_MD (1<<3) /* Bit 3: Disable Carrier Extension */
+#define XM_TX_NO_PRE (1<<2) /* Bit 2: Disable Preamble Generation */
+#define XM_TX_NO_CRC (1<<1) /* Bit 1: Disable CRC Generation */
+#define XM_TX_AUTO_PAD (1<<0) /* Bit 0: Enable Automatic Padding */
+
+
+/* XM_TX_RT_LIM 16 bit r/w Transmit Retry Limit Register */
+ /* Bit 15..5: reserved */
+#define XM_RT_LIM_MSK 0x1f /* Bit 4..0: Tx Retry Limit */
+
+
+/* XM_TX_STIME 16 bit r/w Transmit Slottime Register */
+ /* Bit 15..7: reserved */
+#define XM_STIME_MSK 0x7f /* Bit 6..0: Tx Slottime bits */
+
+
+/* XM_TX_IPG 16 bit r/w Transmit Inter Packet Gap */
+ /* Bit 15..8: reserved */
+#define XM_IPG_MSK 0xff /* Bit 7..0: IPG value bits */
+
+
+/* XM_RX_CMD 16 bit r/w Receive Command Register */
+ /* Bit 15..9: reserved */
+#define XM_RX_LENERR_OK (1<<8) /* Bit 8 don't set Rx Err bit for */
+ /* inrange error packets */
+#define XM_RX_BIG_PK_OK (1<<7) /* Bit 7 don't set Rx Err bit for */
+ /* jumbo packets */
+#define XM_RX_IPG_CAP (1<<6) /* Bit 6 repl. type field with IPG */
+#define XM_RX_TP_MD (1<<5) /* Bit 5: Enable transparent Mode */
+#define XM_RX_STRIP_FCS (1<<4) /* Bit 4: Enable FCS Stripping */
+#define XM_RX_SELF_RX (1<<3) /* Bit 3: Enable Rx of own packets */
+#define XM_RX_SAM_LINE (1<<2) /* Bit 2: (sc) Start utilization calculation */
+#define XM_RX_STRIP_PAD (1<<1) /* Bit 1: Strip pad bytes of Rx frames */
+#define XM_RX_DIS_CEXT (1<<0) /* Bit 0: Disable carrier ext. check */
+
+
+/* XM_PHY_ADDR 16 bit r/w PHY Address Register */
+ /* Bit 15..5: reserved */
+#define XM_PHY_ADDR_SZ 0x1f /* Bit 4..0: PHY Address bits */
+
+
+/* XM_GP_PORT 32 bit r/w General Purpose Port Register */
+ /* Bit 31..7: reserved */
+#define XM_GP_ANIP (1L<<6) /* Bit 6: (ro) Auto-Neg. in progress */
+#define XM_GP_FRC_INT (1L<<5) /* Bit 5: (sc) Force Interrupt */
+ /* Bit 4: reserved */
+#define XM_GP_RES_MAC (1L<<3) /* Bit 3: (sc) Reset MAC and FIFOs */
+#define XM_GP_RES_STAT (1L<<2) /* Bit 2: (sc) Reset the statistics module */
+ /* Bit 1: reserved */
+#define XM_GP_INP_ASS (1L<<0) /* Bit 0: (ro) GP Input Pin asserted */
+
+
+/* XM_IMSK 16 bit r/w Interrupt Mask Register */
+/* XM_ISRC 16 bit r/o Interrupt Status Register */
+ /* Bit 15: reserved */
+#define XM_IS_LNK_AE (1<<14) /* Bit 14: Link Asynchronous Event */
+#define XM_IS_TX_ABORT (1<<13) /* Bit 13: Transmit Abort, late Col. etc */
+#define XM_IS_FRC_INT (1<<12) /* Bit 12: Force INT bit set in GP */
+#define XM_IS_INP_ASS (1<<11) /* Bit 11: Input Asserted, GP bit 0 set */
+#define XM_IS_LIPA_RC (1<<10) /* Bit 10: Link Partner requests config */
+#define XM_IS_RX_PAGE (1<<9) /* Bit 9: Page Received */
+#define XM_IS_TX_PAGE (1<<8) /* Bit 8: Next Page Loaded for Transmit */
+#define XM_IS_AND (1<<7) /* Bit 7: Auto-Negotiation Done */
+#define XM_IS_TSC_OV (1<<6) /* Bit 6: Time Stamp Counter Overflow */
+#define XM_IS_RXC_OV (1<<5) /* Bit 5: Rx Counter Event Overflow */
+#define XM_IS_TXC_OV (1<<4) /* Bit 4: Tx Counter Event Overflow */
+#define XM_IS_RXF_OV (1<<3) /* Bit 3: Receive FIFO Overflow */
+#define XM_IS_TXF_UR (1<<2) /* Bit 2: Transmit FIFO Underrun */
+#define XM_IS_TX_COMP (1<<1) /* Bit 1: Frame Tx Complete */
+#define XM_IS_RX_COMP (1<<0) /* Bit 0: Frame Rx Complete */
+
+#define XM_DEF_MSK (~(XM_IS_INP_ASS | XM_IS_LIPA_RC | XM_IS_RX_PAGE |\
+ XM_IS_AND | XM_IS_RXC_OV | XM_IS_TXC_OV | XM_IS_TXF_UR))
+
+
+/* XM_HW_CFG 16 bit r/w Hardware Config Register */
+ /* Bit 15.. 4: reserved */
+#define XM_HW_GEN_EOP (1<<3) /* Bit 3: generate End of Packet pulse */
+#define XM_HW_COM4SIG (1<<2) /* Bit 2: use Comma Detect for Sig. Det.*/
+ /* Bit 1: reserved */
+#define XM_HW_GMII_MD (1<<0) /* Bit 0: GMII Interface selected */
+
+
+/* XM_TX_LO_WM 16 bit r/w Tx FIFO Low Water Mark */
+/* XM_TX_HI_WM 16 bit r/w Tx FIFO High Water Mark */
+ /* Bit 15..10 reserved */
+#define XM_TX_WM_MSK 0x01ff /* Bit 9.. 0 Tx FIFO Watermark bits */
+
+/* XM_TX_THR 16 bit r/w Tx Request Threshold */
+/* XM_HT_THR 16 bit r/w Host Request Threshold */
+/* XM_RX_THR 16 bit r/w Rx Request Threshold */
+ /* Bit 15..11 reserved */
+#define XM_THR_MSK 0x03ff /* Bit 10.. 0 Rx/Tx Request Threshold bits */
+
+
+/* XM_TX_STAT 32 bit r/o Tx Status LIFO Register */
+#define XM_ST_VALID (1UL<<31) /* Bit 31: Status Valid */
+#define XM_ST_BYTE_CNT (0x3fffL<<17) /* Bit 30..17: Tx frame Length */
+#define XM_ST_RETRY_CNT (0x1fL<<12) /* Bit 16..12: Retry Count */
+#define XM_ST_EX_COL (1L<<11) /* Bit 11: Excessive Collisions */
+#define XM_ST_EX_DEF (1L<<10) /* Bit 10: Excessive Deferral */
+#define XM_ST_BURST (1L<<9) /* Bit 9: p. xmitted in burst md*/
+#define XM_ST_DEFER (1L<<8) /* Bit 8: packet was defered */
+#define XM_ST_BC (1L<<7) /* Bit 7: Broadcast packet */
+#define XM_ST_MC (1L<<6) /* Bit 6: Multicast packet */
+#define XM_ST_UC (1L<<5) /* Bit 5: Unicast packet */
+#define XM_ST_TX_UR (1L<<4) /* Bit 4: FIFO Underrun occured */
+#define XM_ST_CS_ERR (1L<<3) /* Bit 3: Carrier Sense Error */
+#define XM_ST_LAT_COL (1L<<2) /* Bit 2: Late Collision Error */
+#define XM_ST_MUL_COL (1L<<1) /* Bit 1: Multiple Collisions */
+#define XM_ST_SGN_COL (1L<<0) /* Bit 0: Single Collision */
+
+/* XM_RX_LO_WM 16 bit r/w Receive Low Water Mark */
+/* XM_RX_HI_WM 16 bit r/w Receive High Water Mark */
+ /* Bit 15..11: reserved */
+#define XM_RX_WM_MSK 0x03ff /* Bit 11.. 0: Rx FIFO Watermark bits */
+
+
+/* XM_DEV_ID 32 bit r/o Device ID Register */
+#define XM_DEV_OUI (0x00ffffffUL<<8) /* Bit 31..8: Device OUI */
+#define XM_DEV_REV (0x07L << 5) /* Bit 7..5: Chip Rev Num */
+
+
+/* XM_MODE 32 bit r/w Mode Register */
+ /* Bit 31..27: reserved */
+#define XM_MD_ENA_REJ (1L<<26) /* Bit 26: Enable Frame Reject */
+#define XM_MD_SPOE_E (1L<<25) /* Bit 25: Send Pause on Edge */
+ /* extern generated */
+#define XM_MD_TX_REP (1L<<24) /* Bit 24: Transmit Repeater Mode */
+#define XM_MD_SPOFF_I (1L<<23) /* Bit 23: Send Pause on FIFO full */
+ /* intern generated */
+#define XM_MD_LE_STW (1L<<22) /* Bit 22: Rx Stat Word in Little Endian */
+#define XM_MD_TX_CONT (1L<<21) /* Bit 21: Send Continuous */
+#define XM_MD_TX_PAUSE (1L<<20) /* Bit 20: (sc) Send Pause Frame */
+#define XM_MD_ATS (1L<<19) /* Bit 19: Append Time Stamp */
+#define XM_MD_SPOL_I (1L<<18) /* Bit 18: Send Pause on Low */
+ /* intern generated */
+#define XM_MD_SPOH_I (1L<<17) /* Bit 17: Send Pause on High */
+ /* intern generated */
+#define XM_MD_CAP (1L<<16) /* Bit 16: Check Address Pair */
+#define XM_MD_ENA_HASH (1L<<15) /* Bit 15: Enable Hashing */
+#define XM_MD_CSA (1L<<14) /* Bit 14: Check Station Address */
+#define XM_MD_CAA (1L<<13) /* Bit 13: Check Address Array */
+#define XM_MD_RX_MCTRL (1L<<12) /* Bit 12: Rx MAC Control Frame */
+#define XM_MD_RX_RUNT (1L<<11) /* Bit 11: Rx Runt Frames */
+#define XM_MD_RX_IRLE (1L<<10) /* Bit 10: Rx in Range Len Err Frame */
+#define XM_MD_RX_LONG (1L<<9) /* Bit 9: Rx Long Frame */
+#define XM_MD_RX_CRCE (1L<<8) /* Bit 8: Rx CRC Error Frame */
+#define XM_MD_RX_ERR (1L<<7) /* Bit 7: Rx Error Frame */
+#define XM_MD_DIS_UC (1L<<6) /* Bit 6: Disable Rx Unicast */
+#define XM_MD_DIS_MC (1L<<5) /* Bit 5: Disable Rx Multicast */
+#define XM_MD_DIS_BC (1L<<4) /* Bit 4: Disable Rx Broadcast */
+#define XM_MD_ENA_PROM (1L<<3) /* Bit 3: Enable Promiscuous */
+#define XM_MD_ENA_BE (1L<<2) /* Bit 2: Enable Big Endian */
+#define XM_MD_FTF (1L<<1) /* Bit 1: (sc) Flush Tx FIFO */
+#define XM_MD_FRF (1L<<0) /* Bit 0: (sc) Flush Rx FIFO */
+
+#define XM_PAUSE_MODE (XM_MD_SPOE_E | XM_MD_SPOL_I | XM_MD_SPOH_I)
+#define XM_DEF_MODE (XM_MD_RX_RUNT | XM_MD_RX_IRLE | XM_MD_RX_LONG |\
+ XM_MD_RX_CRCE | XM_MD_RX_ERR | XM_MD_CSA | XM_MD_CAA)
+
+/* XM_STAT_CMD 16 bit r/w Statistics Command Register */
+ /* Bit 16..6: reserved */
+#define XM_SC_SNP_RXC (1<<5) /* Bit 5: (sc) Snap Rx Counters */
+#define XM_SC_SNP_TXC (1<<4) /* Bit 4: (sc) Snap Tx Counters */
+#define XM_SC_CP_RXC (1<<3) /* Bit 3: Copy Rx Counters Continuously */
+#define XM_SC_CP_TXC (1<<2) /* Bit 2: Copy Tx Counters Continuously */
+#define XM_SC_CLR_RXC (1<<1) /* Bit 1: (sc) Clear Rx Counters */
+#define XM_SC_CLR_TXC (1<<0) /* Bit 0: (sc) Clear Tx Counters */
+
+
+/* XM_RX_CNT_EV 32 bit r/o Rx Counter Event Register */
+/* XM_RX_EV_MSK 32 bit r/w Rx Counter Event Mask */
+#define XMR_MAX_SZ_OV (1UL<<31) /* Bit 31: 1024-MaxSize Rx Cnt Ov*/
+#define XMR_1023B_OV (1L<<30) /* Bit 30: 512-1023Byte Rx Cnt Ov*/
+#define XMR_511B_OV (1L<<29) /* Bit 29: 256-511 Byte Rx Cnt Ov*/
+#define XMR_255B_OV (1L<<28) /* Bit 28: 128-255 Byte Rx Cnt Ov*/
+#define XMR_127B_OV (1L<<27) /* Bit 27: 65-127 Byte Rx Cnt Ov */
+#define XMR_64B_OV (1L<<26) /* Bit 26: 64 Byte Rx Cnt Ov */
+#define XMR_UTIL_OV (1L<<25) /* Bit 25: Rx Util Cnt Overflow */
+#define XMR_UTIL_UR (1L<<24) /* Bit 24: Rx Util Cnt Underrun */
+#define XMR_CEX_ERR_OV (1L<<23) /* Bit 23: CEXT Err Cnt Ov */
+ /* Bit 22: reserved */
+#define XMR_FCS_ERR_OV (1L<<21) /* Bit 21: Rx FCS Error Cnt Ov */
+#define XMR_LNG_ERR_OV (1L<<20) /* Bit 20: Rx too Long Err Cnt Ov*/
+#define XMR_RUNT_OV (1L<<19) /* Bit 19: Runt Event Cnt Ov */
+#define XMR_SHT_ERR_OV (1L<<18) /* Bit 18: Rx Short Ev Err Cnt Ov*/
+#define XMR_SYM_ERR_OV (1L<<17) /* Bit 17: Rx Sym Err Cnt Ov */
+ /* Bit 16: reserved */
+#define XMR_CAR_ERR_OV (1L<<15) /* Bit 15: Rx Carr Ev Err Cnt Ov */
+#define XMR_JAB_PKT_OV (1L<<14) /* Bit 14: Rx Jabb Packet Cnt Ov */
+#define XMR_FIFO_OV (1L<<13) /* Bit 13: Rx FIFO Ov Ev Cnt Ov */
+#define XMR_FRA_ERR_OV (1L<<12) /* Bit 12: Rx Framing Err Cnt Ov */
+#define XMR_FMISS_OV (1L<<11) /* Bit 11: Rx Missed Ev Cnt Ov */
+#define XMR_BURST (1L<<10) /* Bit 10: Rx Burst Event Cnt Ov */
+#define XMR_INV_MOC (1L<<9) /* Bit 9: Rx with inv. MAC OC Ov*/
+#define XMR_INV_MP (1L<<8) /* Bit 8: Rx inv Pause Frame Ov */
+#define XMR_MCTRL_OV (1L<<7) /* Bit 7: Rx MAC Ctrl-F Cnt Ov */
+#define XMR_MPAUSE_OV (1L<<6) /* Bit 6: Rx Pause MAC Ctrl-F Ov*/
+#define XMR_UC_OK_OV (1L<<5) /* Bit 5: Rx Unicast Frame CntOv*/
+#define XMR_MC_OK_OV (1L<<4) /* Bit 4: Rx Multicast Cnt Ov */
+#define XMR_BC_OK_OV (1L<<3) /* Bit 3: Rx Broadcast Cnt Ov */
+#define XMR_OK_LO_OV (1L<<2) /* Bit 2: Octets Rx OK Low CntOv*/
+#define XMR_OK_HI_OV (1L<<1) /* Bit 1: Octets Rx OK Hi Cnt Ov*/
+#define XMR_OK_OV (1L<<0) /* Bit 0: Frames Received Ok Ov */
+
+#define XMR_DEF_MSK (XMR_OK_LO_OV | XMR_OK_HI_OV)
+
+/* XM_TX_CNT_EV 32 bit r/o Tx Counter Event Register */
+/* XM_TX_EV_MSK 32 bit r/w Tx Counter Event Mask */
+ /* Bit 31..26: reserved */
+#define XMT_MAX_SZ_OV (1L<<25) /* Bit 25: 1024-MaxSize Tx Cnt Ov*/
+#define XMT_1023B_OV (1L<<24) /* Bit 24: 512-1023Byte Tx Cnt Ov*/
+#define XMT_511B_OV (1L<<23) /* Bit 23: 256-511 Byte Tx Cnt Ov*/
+#define XMT_255B_OV (1L<<22) /* Bit 22: 128-255 Byte Tx Cnt Ov*/
+#define XMT_127B_OV (1L<<21) /* Bit 21: 65-127 Byte Tx Cnt Ov */
+#define XMT_64B_OV (1L<<20) /* Bit 20: 64 Byte Tx Cnt Ov */
+#define XMT_UTIL_OV (1L<<19) /* Bit 19: Tx Util Cnt Overflow */
+#define XMT_UTIL_UR (1L<<18) /* Bit 18: Tx Util Cnt Underrun */
+#define XMT_CS_ERR_OV (1L<<17) /* Bit 17: Tx Carr Sen Err Cnt Ov*/
+#define XMT_FIFO_UR_OV (1L<<16) /* Bit 16: Tx FIFO Ur Ev Cnt Ov */
+#define XMT_EX_DEF_OV (1L<<15) /* Bit 15: Tx Ex Deferall Cnt Ov */
+#define XMT_DEF (1L<<14) /* Bit 14: Tx Deferred Cnt Ov */
+#define XMT_LAT_COL_OV (1L<<13) /* Bit 13: Tx Late Col Cnt Ov */
+#define XMT_ABO_COL_OV (1L<<12) /* Bit 12: Tx abo dueto Ex Col Ov*/
+#define XMT_MUL_COL_OV (1L<<11) /* Bit 11: Tx Mult Col Cnt Ov */
+#define XMT_SNG_COL (1L<<10) /* Bit 10: Tx Single Col Cnt Ov */
+#define XMT_MCTRL_OV (1L<<9) /* Bit 9: Tx MAC Ctrl Counter Ov*/
+#define XMT_MPAUSE (1L<<8) /* Bit 8: Tx Pause MAC Ctrl-F Ov*/
+#define XMT_BURST (1L<<7) /* Bit 7: Tx Burst Event Cnt Ov */
+#define XMT_LONG (1L<<6) /* Bit 6: Tx Long Frame Cnt Ov */
+#define XMT_UC_OK_OV (1L<<5) /* Bit 5: Tx Unicast Cnt Ov */
+#define XMT_MC_OK_OV (1L<<4) /* Bit 4: Tx Multicast Cnt Ov */
+#define XMT_BC_OK_OV (1L<<3) /* Bit 3: Tx Broadcast Cnt Ov */
+#define XMT_OK_LO_OV (1L<<2) /* Bit 2: Octets Tx OK Low CntOv*/
+#define XMT_OK_HI_OV (1L<<1) /* Bit 1: Octets Tx OK Hi Cnt Ov*/
+#define XMT_OK_OV (1L<<0) /* Bit 0: Frames Tx Ok Ov */
+
+#define XMT_DEF_MSK (XMT_OK_LO_OV | XMT_OK_HI_OV)
+
+/*
+ * Receive Frame Status Encoding
+ */
+#define XMR_FS_LEN (0x3fffUL<<18) /* Bit 31..18: Rx Frame Length */
+#define XMR_FS_2L_VLAN (1L<<17) /* Bit 17: tagged wh 2Lev VLAN ID*/
+#define XMR_FS_1L_VLAN (1L<<16) /* Bit 16: tagged wh 1Lev VLAN ID*/
+#define XMR_FS_BC (1L<<15) /* Bit 15: Broadcast Frame */
+#define XMR_FS_MC (1L<<14) /* Bit 14: Multicast Frame */
+#define XMR_FS_UC (1L<<13) /* Bit 13: Unicast Frame */
+ /* Bit 12: reserved */
+#define XMR_FS_BURST (1L<<11) /* Bit 11: Burst Mode */
+#define XMR_FS_CEX_ERR (1L<<10) /* Bit 10: Carrier Ext. Error */
+#define XMR_FS_802_3 (1L<<9) /* Bit 9: 802.3 Frame */
+#define XMR_FS_COL_ERR (1L<<8) /* Bit 8: Collision Error */
+#define XMR_FS_CAR_ERR (1L<<7) /* Bit 7: Carrier Event Error */
+#define XMR_FS_LEN_ERR (1L<<6) /* Bit 6: In-Range Length Error */
+#define XMR_FS_FRA_ERR (1L<<5) /* Bit 5: Framing Error */
+#define XMR_FS_RUNT (1L<<4) /* Bit 4: Runt Frame */
+#define XMR_FS_LNG_ERR (1L<<3) /* Bit 3: Giant (Jumbo) Frame */
+#define XMR_FS_FCS_ERR (1L<<2) /* Bit 2: Frame Check Sequ Err */
+#define XMR_FS_ERR (1L<<1) /* Bit 1: Frame Error */
+#define XMR_FS_MCTRL (1L<<0) /* Bit 0: MAC Control Packet */
+
+/*
+ * XMR_FS_ERR will be set if
+ * XMR_FS_FCS_ERR, XMR_FS_LNG_ERR, XMR_FS_RUNT,
+ * XMR_FS_FRA_ERR, XMR_FS_LEN_ERR, or XMR_FS_CEX_ERR
+ * is set. XMR_FS_LNG_ERR and XMR_FS_LEN_ERR will issue
+ * XMR_FS_ERR unless the corresponding bit in the Receive Command
+ * Register is set.
+ */
+#define XMR_FS_ANY_ERR XMR_FS_ERR
+
+/*----------------------------------------------------------------------------*/
+/*
+ * XMAC-PHY Registers, indirect addressed over the XMAC
+ */
+#define PHY_XMAC_CTRL 0x00 /* 16 bit r/w PHY Control Register */
+#define PHY_XMAC_STAT 0x01 /* 16 bit r/w PHY Status Register */
+#define PHY_XMAC_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
+#define PHY_XMAC_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
+#define PHY_XMAC_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
+#define PHY_XMAC_AUNE_LP 0x05 /* 16 bit r/o Link Partner Abi Reg */
+#define PHY_XMAC_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
+#define PHY_XMAC_NEPG 0x07 /* 16 bit r/w Next Page Register */
+#define PHY_XMAC_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */
+ /* 0x09 - 0x0e: reserved */
+#define PHY_XMAC_EXT_STAT 0x0f /* 16 bit r/o Ext Status Register */
+#define PHY_XMAC_RES_ABI 0x10 /* 16 bit r/o PHY Resolved Ability */
+
+/*----------------------------------------------------------------------------*/
+/*
+ * Broadcom-PHY Registers, indirect addressed over XMAC
+ */
+#define PHY_BCOM_CTRL 0x00 /* 16 bit r/w PHY Control Register */
+#define PHY_BCOM_STAT 0x01 /* 16 bit r/o PHY Status Register */
+#define PHY_BCOM_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
+#define PHY_BCOM_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
+#define PHY_BCOM_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
+#define PHY_BCOM_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */
+#define PHY_BCOM_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
+#define PHY_BCOM_NEPG 0x07 /* 16 bit r/w Next Page Register */
+#define PHY_BCOM_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */
+ /* Broadcom-specific registers */
+#define PHY_BCOM_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Ctrl Reg */
+#define PHY_BCOM_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
+ /* 0x0b - 0x0e: reserved */
+#define PHY_BCOM_EXT_STAT 0x0f /* 16 bit r/o Extended Status Reg */
+#define PHY_BCOM_P_EXT_CTRL 0x10 /* 16 bit r/w PHY Extended Ctrl Reg */
+#define PHY_BCOM_P_EXT_STAT 0x11 /* 16 bit r/o PHY Extended Stat Reg */
+#define PHY_BCOM_RE_CTR 0x12 /* 16 bit r/w Receive Error Counter */
+#define PHY_BCOM_FC_CTR 0x13 /* 16 bit r/w False Carr Sense Cnt */
+#define PHY_BCOM_RNO_CTR 0x14 /* 16 bit r/w Receiver NOT_OK Cnt */
+ /* 0x15 - 0x17: reserved */
+#define PHY_BCOM_AUX_CTRL 0x18 /* 16 bit r/w Auxiliary Control Reg */
+#define PHY_BCOM_AUX_STAT 0x19 /* 16 bit r/o Auxiliary Stat Summary */
+#define PHY_BCOM_INT_STAT 0x1a /* 16 bit r/o Interrupt Status Reg */
+#define PHY_BCOM_INT_MASK 0x1b /* 16 bit r/w Interrupt Mask Reg */
+ /* 0x1c: reserved */
+ /* 0x1d - 0x1f: test registers */
+
+/*----------------------------------------------------------------------------*/
+/*
+ * Marvel-PHY Registers, indirect addressed over GMAC
+ */
+#define PHY_MARV_CTRL 0x00 /* 16 bit r/w PHY Control Register */
+#define PHY_MARV_STAT 0x01 /* 16 bit r/o PHY Status Register */
+#define PHY_MARV_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
+#define PHY_MARV_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
+#define PHY_MARV_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
+#define PHY_MARV_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */
+#define PHY_MARV_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
+#define PHY_MARV_NEPG 0x07 /* 16 bit r/w Next Page Register */
+#define PHY_MARV_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */
+ /* Marvel-specific registers */
+#define PHY_MARV_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Ctrl Reg */
+#define PHY_MARV_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
+ /* 0x0b - 0x0e: reserved */
+#define PHY_MARV_EXT_STAT 0x0f /* 16 bit r/o Extended Status Reg */
+#define PHY_MARV_PHY_CTRL 0x10 /* 16 bit r/w PHY Specific Ctrl Reg */
+#define PHY_MARV_PHY_STAT 0x11 /* 16 bit r/o PHY Specific Stat Reg */
+#define PHY_MARV_INT_MASK 0x12 /* 16 bit r/w Interrupt Mask Reg */
+#define PHY_MARV_INT_STAT 0x13 /* 16 bit r/o Interrupt Status Reg */
+#define PHY_MARV_EXT_CTRL 0x14 /* 16 bit r/w Ext. PHY Specific Ctrl */
+#define PHY_MARV_RXE_CNT 0x15 /* 16 bit r/w Receive Error Counter */
+#define PHY_MARV_EXT_ADR 0x16 /* 16 bit r/w Ext. Ad. for Cable Diag. */
+ /* 0x17: reserved */
+#define PHY_MARV_LED_CTRL 0x18 /* 16 bit r/w LED Control Reg */
+#define PHY_MARV_LED_OVER 0x19 /* 16 bit r/w Manual LED Override Reg */
+#define PHY_MARV_EXT_CTRL_2 0x1a /* 16 bit r/w Ext. PHY Specific Ctrl 2 */
+#define PHY_MARV_EXT_P_STAT 0x1b /* 16 bit r/w Ext. PHY Spec. Stat Reg */
+#define PHY_MARV_CABLE_DIAG 0x1c /* 16 bit r/o Cable Diagnostic Reg */
+ /* 0x1d - 0x1f: reserved */
+
+/*----------------------------------------------------------------------------*/
+/*
+ * Level One-PHY Registers, indirect addressed over XMAC
+ */
+#define PHY_LONE_CTRL 0x00 /* 16 bit r/w PHY Control Register */
+#define PHY_LONE_STAT 0x01 /* 16 bit r/o PHY Status Register */
+#define PHY_LONE_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
+#define PHY_LONE_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
+#define PHY_LONE_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
+#define PHY_LONE_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */
+#define PHY_LONE_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
+#define PHY_LONE_NEPG 0x07 /* 16 bit r/w Next Page Register */
+#define PHY_LONE_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner*/
+ /* Level One-specific registers */
+#define PHY_LONE_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Control Reg*/
+#define PHY_LONE_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
+ /* 0x0b -0x0e: reserved */
+#define PHY_LONE_EXT_STAT 0x0f /* 16 bit r/o Extended Status Reg */
+#define PHY_LONE_PORT_CFG 0x10 /* 16 bit r/w Port Configuration Reg*/
+#define PHY_LONE_Q_STAT 0x11 /* 16 bit r/o Quick Status Reg */
+#define PHY_LONE_INT_ENAB 0x12 /* 16 bit r/w Interrupt Enable Reg */
+#define PHY_LONE_INT_STAT 0x13 /* 16 bit r/o Interrupt Status Reg */
+#define PHY_LONE_LED_CFG 0x14 /* 16 bit r/w LED Configuration Reg */
+#define PHY_LONE_PORT_CTRL 0x15 /* 16 bit r/w Port Control Reg */
+#define PHY_LONE_CIM 0x16 /* 16 bit r/o CIM Reg */
+ /* 0x17 -0x1c: reserved */
+
+/*----------------------------------------------------------------------------*/
+/*
+ * National-PHY Registers, indirect addressed over XMAC
+ */
+#define PHY_NAT_CTRL 0x00 /* 16 bit r/w PHY Control Register */
+#define PHY_NAT_STAT 0x01 /* 16 bit r/w PHY Status Register */
+#define PHY_NAT_ID0 0x02 /* 16 bit r/o PHY ID0 Register */
+#define PHY_NAT_ID1 0x03 /* 16 bit r/o PHY ID1 Register */
+#define PHY_NAT_AUNE_ADV 0x04 /* 16 bit r/w Auto-Neg. Advertisement */
+#define PHY_NAT_AUNE_LP 0x05 /* 16 bit r/o Link Partner Ability Reg */
+#define PHY_NAT_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */
+#define PHY_NAT_NEPG 0x07 /* 16 bit r/w Next Page Register */
+#define PHY_NAT_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner Reg */
+ /* National-specific registers */
+#define PHY_NAT_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Control Reg */
+#define PHY_NAT_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */
+ /* 0x0b -0x0e: reserved */
+#define PHY_NAT_EXT_STAT 0x0f /* 16 bit r/o Extended Status Register */
+#define PHY_NAT_EXT_CTRL1 0x10 /* 16 bit r/o Extended Control Reg1 */
+#define PHY_NAT_Q_STAT1 0x11 /* 16 bit r/o Quick Status Reg1 */
+#define PHY_NAT_10B_OP 0x12 /* 16 bit r/o 10Base-T Operations Reg */
+#define PHY_NAT_EXT_CTRL2 0x13 /* 16 bit r/o Extended Control Reg1 */
+#define PHY_NAT_Q_STAT2 0x14 /* 16 bit r/o Quick Status Reg2 */
+ /* 0x15 -0x18: reserved */
+#define PHY_NAT_PHY_ADDR 0x19 /* 16 bit r/o PHY Address Register */
+
+
+/*----------------------------------------------------------------------------*/
+
+/*
+ * PHY bit definitions
+ * Bits defined as PHY_X_..., PHY_B_..., PHY_L_... or PHY_N_... are
+ * Xmac/Broadcom/LevelOne/National-specific.
+ * All other are general.
+ */
+
+/***** PHY_XMAC_CTRL 16 bit r/w PHY Control Register *****/
+/***** PHY_BCOM_CTRL 16 bit r/w PHY Control Register *****/
+/***** PHY_LONE_CTRL 16 bit r/w PHY Control Register *****/
+#define PHY_CT_RESET (1<<15) /* Bit 15: (sc) clear all PHY related regs */
+#define PHY_CT_LOOP (1<<14) /* Bit 14: enable Loopback over PHY */
+#define PHY_CT_SPS_LSB (1<<13) /* Bit 13: (BC,L1) Speed select, lower bit */
+#define PHY_CT_ANE (1<<12) /* Bit 12: Auto-Negotiation Enabled */
+#define PHY_CT_PDOWN (1<<11) /* Bit 11: (BC,L1) Power Down Mode */
+#define PHY_CT_ISOL (1<<10) /* Bit 10: (BC,L1) Isolate Mode */
+#define PHY_CT_RE_CFG (1<<9) /* Bit 9: (sc) Restart Auto-Negotiation */
+#define PHY_CT_DUP_MD (1<<8) /* Bit 8: Duplex Mode */
+#define PHY_CT_COL_TST (1<<7) /* Bit 7: (BC,L1) Collision Test enabled */
+#define PHY_CT_SPS_MSB (1<<6) /* Bit 6: (BC,L1) Speed select, upper bit */
+ /* Bit 5..0: reserved */
+
+#define PHY_CT_SP1000 PHY_CT_SPS_MSB /* enable speed of 1000 Mbps */
+#define PHY_CT_SP100 PHY_CT_SPS_LSB /* enable speed of 100 Mbps */
+#define PHY_CT_SP10 (0) /* enable speed of 10 Mbps */
+
+
+/***** PHY_XMAC_STAT 16 bit r/w PHY Status Register *****/
+/***** PHY_BCOM_STAT 16 bit r/w PHY Status Register *****/
+/***** PHY_MARV_STAT 16 bit r/w PHY Status Register *****/
+/***** PHY_LONE_STAT 16 bit r/w PHY Status Register *****/
+ /* Bit 15..9: reserved */
+ /* (BC/L1) 100/10 Mbps cap bits ignored*/
+#define PHY_ST_EXT_ST (1<<8) /* Bit 8: Extended Status Present */
+ /* Bit 7: reserved */
+#define PHY_ST_PRE_SUP (1<<6) /* Bit 6: (BC/L1) preamble suppression */
+#define PHY_ST_AN_OVER (1<<5) /* Bit 5: Auto-Negotiation Over */
+#define PHY_ST_REM_FLT (1<<4) /* Bit 4: Remote Fault Condition Occured */
+#define PHY_ST_AN_CAP (1<<3) /* Bit 3: Auto-Negotiation Capability */
+#define PHY_ST_LSYNC (1<<2) /* Bit 2: Link Synchronized */
+#define PHY_ST_JAB_DET (1<<1) /* Bit 1: (BC/L1) Jabber Detected */
+#define PHY_ST_EXT_REG (1<<0) /* Bit 0: Extended Register available */
+
+
+/***** PHY_XMAC_ID1 16 bit r/o PHY ID1 Register */
+/***** PHY_BCOM_ID1 16 bit r/o PHY ID1 Register */
+/***** PHY_MARV_ID1 16 bit r/o PHY ID1 Register */
+/***** PHY_LONE_ID1 16 bit r/o PHY ID1 Register */
+#define PHY_I1_OUI_MSK (0x3f<<10) /* Bit 15..10: Organization Unique ID */
+#define PHY_I1_MOD_NUM (0x3f<<4) /* Bit 9.. 4: Model Number */
+#define PHY_I1_REV_MSK 0x0f /* Bit 3.. 0: Revision Number */
+
+/* different Broadcom PHY Ids */
+#define PHY_BCOM_ID1_A1 0x6041
+#define PHY_BCOM_ID1_B2 0x6043
+#define PHY_BCOM_ID1_C0 0x6044
+#define PHY_BCOM_ID1_C5 0x6047
+
+
+/***** PHY_XMAC_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
+/***** PHY_XMAC_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
+#define PHY_AN_NXT_PG (1<<15) /* Bit 15: Request Next Page */
+#define PHY_X_AN_ACK (1<<14) /* Bit 14: (ro) Acknowledge Received */
+#define PHY_X_AN_RFB (3<<12) /* Bit 13..12: Remote Fault Bits */
+ /* Bit 11.. 9: reserved */
+#define PHY_X_AN_PAUSE (3<<7) /* Bit 8.. 7: Pause Bits */
+#define PHY_X_AN_HD (1<<6) /* Bit 6: Half Duplex */
+#define PHY_X_AN_FD (1<<5) /* Bit 5: Full Duplex */
+ /* Bit 4.. 0: reserved */
+
+/***** PHY_BCOM_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
+/***** PHY_BCOM_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
+/* PHY_AN_NXT_PG (see XMAC) Bit 15: Request Next Page */
+ /* Bit 14: reserved */
+#define PHY_B_AN_RF (1<<13) /* Bit 13: Remote Fault */
+ /* Bit 12: reserved */
+#define PHY_B_AN_ASP (1<<11) /* Bit 11: Asymmetric Pause */
+#define PHY_B_AN_PC (1<<10) /* Bit 10: Pause Capable */
+ /* Bit 9..5: 100/10 BT cap bits ingnored */
+#define PHY_B_AN_SEL 0x1f /* Bit 4..0: Selector Field, 00001=Ethernet*/
+
+/***** PHY_LONE_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
+/***** PHY_LONE_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
+/* PHY_AN_NXT_PG (see XMAC) Bit 15: Request Next Page */
+ /* Bit 14: reserved */
+#define PHY_L_AN_RF (1<<13) /* Bit 13: Remote Fault */
+ /* Bit 12: reserved */
+#define PHY_L_AN_ASP (1<<11) /* Bit 11: Asymmetric Pause */
+#define PHY_L_AN_PC (1<<10) /* Bit 10: Pause Capable */
+ /* Bit 9..5: 100/10 BT cap bits ingnored */
+#define PHY_L_AN_SEL 0x1f /* Bit 4..0: Selector Field, 00001=Ethernet*/
+
+/***** PHY_NAT_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
+/***** PHY_NAT_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
+/* PHY_AN_NXT_PG (see XMAC) Bit 15: Request Next Page */
+ /* Bit 14: reserved */
+#define PHY_N_AN_RF (1<<13) /* Bit 13: Remote Fault */
+ /* Bit 12: reserved */
+#define PHY_N_AN_100F (1<<11) /* Bit 11: 100Base-T2 FD Support */
+#define PHY_N_AN_100H (1<<10) /* Bit 10: 100Base-T2 HD Support */
+ /* Bit 9..5: 100/10 BT cap bits ingnored */
+#define PHY_N_AN_SEL 0x1f /* Bit 4..0: Selector Field, 00001=Ethernet*/
+
+/* field type definition for PHY_x_AN_SEL */
+#define PHY_SEL_TYPE 0x01 /* 00001 = Ethernet */
+
+/***** PHY_XMAC_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/
+ /* Bit 15..4: reserved */
+#define PHY_AN_LP_NP (1<<3) /* Bit 3: Link Partner can Next Page */
+#define PHY_AN_LOC_NP (1<<2) /* Bit 2: Local PHY can Next Page */
+#define PHY_AN_RX_PG (1<<1) /* Bit 1: Page Received */
+ /* Bit 0: reserved */
+
+/***** PHY_BCOM_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/
+ /* Bit 15..5: reserved */
+#define PHY_B_AN_PDF (1<<4) /* Bit 4: Parallel Detection Fault */
+/* PHY_AN_LP_NP (see XMAC) Bit 3: Link Partner can Next Page */
+/* PHY_AN_LOC_NP (see XMAC) Bit 2: Local PHY can Next Page */
+/* PHY_AN_RX_PG (see XMAC) Bit 1: Page Received */
+#define PHY_B_AN_LP_CAP (1<<0) /* Bit 0: Link Partner Auto-Neg. Cap. */
+
+/***** PHY_LONE_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/
+#define PHY_L_AN_BP (1<<5) /* Bit 5: Base Page Indication */
+#define PHY_L_AN_PDF (1<<4) /* Bit 4: Parallel Detection Fault */
+/* PHY_AN_LP_NP (see XMAC) Bit 3: Link Partner can Next Page */
+/* PHY_AN_LOC_NP (see XMAC) Bit 2: Local PHY can Next Page */
+/* PHY_AN_RX_PG (see XMAC) Bit 1: Page Received */
+#define PHY_B_AN_LP_CAP (1<<0) /* Bit 0: Link Partner Auto-Neg. Cap. */
+
+
+/***** PHY_XMAC_NEPG 16 bit r/w Next Page Register *****/
+/***** PHY_BCOM_NEPG 16 bit r/w Next Page Register *****/
+/***** PHY_LONE_NEPG 16 bit r/w Next Page Register *****/
+/***** PHY_XMAC_NEPG_LP 16 bit r/o Next Page Link Partner *****/
+/***** PHY_BCOM_NEPG_LP 16 bit r/o Next Page Link Partner *****/
+/***** PHY_LONE_NEPG_LP 16 bit r/o Next Page Link Partner *****/
+#define PHY_NP_MORE (1<<15) /* Bit 15: More, Next Pages to follow */
+#define PHY_NP_ACK1 (1<<14) /* Bit 14: (ro) Ack 1, for receiving a message*/
+#define PHY_NP_MSG_VAL (1<<13) /* Bit 13: Message Page valid */
+#define PHY_NP_ACK2 (1<<12) /* Bit 12: Ack 2, comply with msg content*/
+#define PHY_NP_TOG (1<<11) /* Bit 11: Toggle Bit, ensure sync */
+#define PHY_NP_MSG 0x07ff /* Bit 10..0: Message from/to Link Partner */
+
+/*
+ * XMAC-Specific
+ */
+/***** PHY_XMAC_EXT_STAT 16 bit r/w Extended Status Register *****/
+#define PHY_X_EX_FD (1<<15) /* Bit 15: Device Supports Full Duplex */
+#define PHY_X_EX_HD (1<<14) /* Bit 14: Device Supports Half Duplex */
+ /* Bit 13..0: reserved */
+
+/***** PHY_XMAC_RES_ABI 16 bit r/o PHY Resolved Ability *****/
+ /* Bit 15..9: reserved */
+#define PHY_X_RS_PAUSE (3<<7) /* Bit 8..7: selected Pause Mode */
+#define PHY_X_RS_HD (1<<6) /* Bit 6: Half Duplex Mode selected */
+#define PHY_X_RS_FD (1<<5) /* Bit 5: Full Duplex Mode selected */
+#define PHY_X_RS_ABLMIS (1<<4) /* Bit 4: duplex or pause cap mismatch */
+#define PHY_X_RS_PAUMIS (1<<3) /* Bit 3: pause capability missmatch */
+ /* Bit 2..0: reserved */
+/*
+ * Remote Fault Bits (PHY_X_AN_RFB) encoding
+ */
+#define X_RFB_OK (0<<12) /* Bit 13..12 No errors, Link OK */
+#define X_RFB_LF (1<<12) /* Bit 13..12 Link Failure */
+#define X_RFB_OFF (2<<12) /* Bit 13..12 Offline */
+#define X_RFB_AN_ERR (3<<12) /* Bit 13..12 Auto-Negotiation Error */
+
+/*
+ * Pause Bits (PHY_X_AN_PAUSE and PHY_X_RS_PAUSE) encoding
+ */
+#define PHY_X_P_NO_PAUSE (0<<7) /* Bit 8..7: no Pause Mode */
+#define PHY_X_P_SYM_MD (1<<7) /* Bit 8..7: symmetric Pause Mode */
+#define PHY_X_P_ASYM_MD (2<<7) /* Bit 8..7: asymmetric Pause Mode */
+#define PHY_X_P_BOTH_MD (3<<7) /* Bit 8..7: both Pause Mode */
+
+
+/*
+ * Broadcom-Specific
+ */
+/***** PHY_BCOM_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
+#define PHY_B_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
+#define PHY_B_1000C_MSE (1<<12) /* Bit 12: Master/Slave Enable */
+#define PHY_B_1000C_MSC (1<<11) /* Bit 11: M/S Configuration */
+#define PHY_B_1000C_RD (1<<10) /* Bit 10: Repeater/DTE */
+#define PHY_B_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
+#define PHY_B_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
+ /* Bit 7..0: reserved */
+
+/***** PHY_BCOM_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
+#define PHY_B_1000S_MSF (1<<15) /* Bit 15: Master/Slave Fault */
+#define PHY_B_1000S_MSR (1<<14) /* Bit 14: Master/Slave Result */
+#define PHY_B_1000S_LRS (1<<13) /* Bit 13: Local Receiver Status */
+#define PHY_B_1000S_RRS (1<<12) /* Bit 12: Remote Receiver Status */
+#define PHY_B_1000S_LP_FD (1<<11) /* Bit 11: Link Partner can FD */
+#define PHY_B_1000S_LP_HD (1<<10) /* Bit 10: Link Partner can HD */
+ /* Bit 9..8: reserved */
+#define PHY_B_1000S_IEC 0xff /* Bit 7..0: Idle Error Count */
+
+/***** PHY_BCOM_EXT_STAT 16 bit r/o Extended Status Register *****/
+#define PHY_B_ES_X_FD_CAP (1<<15) /* Bit 15: 1000Base-X FD capable */
+#define PHY_B_ES_X_HD_CAP (1<<14) /* Bit 14: 1000Base-X HD capable */
+#define PHY_B_ES_T_FD_CAP (1<<13) /* Bit 13: 1000Base-T FD capable */
+#define PHY_B_ES_T_HD_CAP (1<<12) /* Bit 12: 1000Base-T HD capable */
+ /* Bit 11..0: reserved */
+
+/***** PHY_BCOM_P_EXT_CTRL 16 bit r/w PHY Extended Control Reg *****/
+#define PHY_B_PEC_MAC_PHY (1<<15) /* Bit 15: 10BIT/GMI-Interface */
+#define PHY_B_PEC_DIS_CROSS (1<<14) /* Bit 14: Disable MDI Crossover */
+#define PHY_B_PEC_TX_DIS (1<<13) /* Bit 13: Tx output Disabled */
+#define PHY_B_PEC_INT_DIS (1<<12) /* Bit 12: Interrupts Disabled */
+#define PHY_B_PEC_F_INT (1<<11) /* Bit 11: Force Interrupt */
+#define PHY_B_PEC_BY_45 (1<<10) /* Bit 10: Bypass 4B5B-Decoder */
+#define PHY_B_PEC_BY_SCR (1<<9) /* Bit 9: Bypass Scrambler */
+#define PHY_B_PEC_BY_MLT3 (1<<8) /* Bit 8: Bypass MLT3 Encoder */
+#define PHY_B_PEC_BY_RXA (1<<7) /* Bit 7: Bypass Rx Alignm. */
+#define PHY_B_PEC_RES_SCR (1<<6) /* Bit 6: Reset Scrambler */
+#define PHY_B_PEC_EN_LTR (1<<5) /* Bit 5: Ena LED Traffic Mode */
+#define PHY_B_PEC_LED_ON (1<<4) /* Bit 4: Force LED's on */
+#define PHY_B_PEC_LED_OFF (1<<3) /* Bit 3: Force LED's off */
+#define PHY_B_PEC_EX_IPG (1<<2) /* Bit 2: Extend Tx IPG Mode */
+#define PHY_B_PEC_3_LED (1<<1) /* Bit 1: Three Link LED mode */
+#define PHY_B_PEC_HIGH_LA (1<<0) /* Bit 0: GMII FIFO Elasticy */
+
+/***** PHY_BCOM_P_EXT_STAT 16 bit r/o PHY Extended Status Reg *****/
+ /* Bit 15..14: reserved */
+#define PHY_B_PES_CROSS_STAT (1<<13) /* Bit 13: MDI Crossover Status */
+#define PHY_B_PES_INT_STAT (1<<12) /* Bit 12: Interrupt Status */
+#define PHY_B_PES_RRS (1<<11) /* Bit 11: Remote Receiver Stat. */
+#define PHY_B_PES_LRS (1<<10) /* Bit 10: Local Receiver Stat. */
+#define PHY_B_PES_LOCKED (1<<9) /* Bit 9: Locked */
+#define PHY_B_PES_LS (1<<8) /* Bit 8: Link Status */
+#define PHY_B_PES_RF (1<<7) /* Bit 7: Remote Fault */
+#define PHY_B_PES_CE_ER (1<<6) /* Bit 6: Carrier Ext Error */
+#define PHY_B_PES_BAD_SSD (1<<5) /* Bit 5: Bad SSD */
+#define PHY_B_PES_BAD_ESD (1<<4) /* Bit 4: Bad ESD */
+#define PHY_B_PES_RX_ER (1<<3) /* Bit 3: Receive Error */
+#define PHY_B_PES_TX_ER (1<<2) /* Bit 2: Transmit Error */
+#define PHY_B_PES_LOCK_ER (1<<1) /* Bit 1: Lock Error */
+#define PHY_B_PES_MLT3_ER (1<<0) /* Bit 0: MLT3 code Error */
+
+/***** PHY_BCOM_FC_CTR 16 bit r/w False Carrier Counter *****/
+ /* Bit 15..8: reserved */
+#define PHY_B_FC_CTR 0xff /* Bit 7..0: False Carrier Counter */
+
+/***** PHY_BCOM_RNO_CTR 16 bit r/w Receive NOT_OK Counter *****/
+#define PHY_B_RC_LOC_MSK 0xff00 /* Bit 15..8: Local Rx NOT_OK cnt */
+#define PHY_B_RC_REM_MSK 0x00ff /* Bit 7..0: Remote Rx NOT_OK cnt */
+
+/***** PHY_BCOM_AUX_CTRL 16 bit r/w Auxiliary Control Reg *****/
+#define PHY_B_AC_L_SQE (1<<15) /* Bit 15: Low Squelch */
+#define PHY_B_AC_LONG_PACK (1<<14) /* Bit 14: Rx Long Packets */
+#define PHY_B_AC_ER_CTRL (3<<12) /* Bit 13..12: Edgerate Control */
+ /* Bit 11: reserved */
+#define PHY_B_AC_TX_TST (1<<10) /* Bit 10: Tx test bit, always 1 */
+ /* Bit 9.. 8: reserved */
+#define PHY_B_AC_DIS_PRF (1<<7) /* Bit 7: dis part resp filter */
+ /* Bit 6: reserved */
+#define PHY_B_AC_DIS_PM (1<<5) /* Bit 5: dis power management */
+ /* Bit 4: reserved */
+#define PHY_B_AC_DIAG (1<<3) /* Bit 3: Diagnostic Mode */
+ /* Bit 2.. 0: reserved */
+
+/***** PHY_BCOM_AUX_STAT 16 bit r/o Auxiliary Status Reg *****/
+#define PHY_B_AS_AN_C (1<<15) /* Bit 15: AutoNeg complete */
+#define PHY_B_AS_AN_CA (1<<14) /* Bit 14: AN Complete Ack */
+#define PHY_B_AS_ANACK_D (1<<13) /* Bit 13: AN Ack Detect */
+#define PHY_B_AS_ANAB_D (1<<12) /* Bit 12: AN Ability Detect */
+#define PHY_B_AS_NPW (1<<11) /* Bit 11: AN Next Page Wait */
+#define PHY_B_AS_AN_RES_MSK (7<<8) /* Bit 10..8: AN HDC */
+#define PHY_B_AS_PDF (1<<7) /* Bit 7: Parallel Detect. Fault */
+#define PHY_B_AS_RF (1<<6) /* Bit 6: Remote Fault */
+#define PHY_B_AS_ANP_R (1<<5) /* Bit 5: AN Page Received */
+#define PHY_B_AS_LP_ANAB (1<<4) /* Bit 4: LP AN Ability */
+#define PHY_B_AS_LP_NPAB (1<<3) /* Bit 3: LP Next Page Ability */
+#define PHY_B_AS_LS (1<<2) /* Bit 2: Link Status */
+#define PHY_B_AS_PRR (1<<1) /* Bit 1: Pause Resolution-Rx */
+#define PHY_B_AS_PRT (1<<0) /* Bit 0: Pause Resolution-Tx */
+
+#define PHY_B_AS_PAUSE_MSK (PHY_B_AS_PRR | PHY_B_AS_PRT)
+
+/***** PHY_BCOM_INT_STAT 16 bit r/o Interrupt Status Reg *****/
+/***** PHY_BCOM_INT_MASK 16 bit r/w Interrupt Mask Reg *****/
+ /* Bit 15: reserved */
+#define PHY_B_IS_PSE (1<<14) /* Bit 14: Pair Swap Error */
+#define PHY_B_IS_MDXI_SC (1<<13) /* Bit 13: MDIX Status Change */
+#define PHY_B_IS_HCT (1<<12) /* Bit 12: counter above 32k */
+#define PHY_B_IS_LCT (1<<11) /* Bit 11: counter above 128 */
+#define PHY_B_IS_AN_PR (1<<10) /* Bit 10: Page Received */
+#define PHY_B_IS_NO_HDCL (1<<9) /* Bit 9: No HCD Link */
+#define PHY_B_IS_NO_HDC (1<<8) /* Bit 8: No HCD */
+#define PHY_B_IS_NEG_USHDC (1<<7) /* Bit 7: Negotiated Unsup. HCD */
+#define PHY_B_IS_SCR_S_ER (1<<6) /* Bit 6: Scrambler Sync Error */
+#define PHY_B_IS_RRS_CHANGE (1<<5) /* Bit 5: Remote Rx Stat Change */
+#define PHY_B_IS_LRS_CHANGE (1<<4) /* Bit 4: Local Rx Stat Change */
+#define PHY_B_IS_DUP_CHANGE (1<<3) /* Bit 3: Duplex Mode Change */
+#define PHY_B_IS_LSP_CHANGE (1<<2) /* Bit 2: Link Speed Change */
+#define PHY_B_IS_LST_CHANGE (1<<1) /* Bit 1: Link Status Changed */
+#define PHY_B_IS_CRC_ER (1<<0) /* Bit 0: CRC Error */
+
+#define PHY_B_DEF_MSK (~(PHY_B_IS_AN_PR | PHY_B_IS_LST_CHANGE))
+
+/* Pause Bits (PHY_B_AN_ASP and PHY_B_AN_PC) encoding */
+#define PHY_B_P_NO_PAUSE (0<<10) /* Bit 11..10: no Pause Mode */
+#define PHY_B_P_SYM_MD (1<<10) /* Bit 11..10: symmetric Pause Mode */
+#define PHY_B_P_ASYM_MD (2<<10) /* Bit 11..10: asymmetric Pause Mode */
+#define PHY_B_P_BOTH_MD (3<<10) /* Bit 11..10: both Pause Mode */
+
+/*
+ * Resolved Duplex mode and Capabilities (Aux Status Summary Reg)
+ */
+#define PHY_B_RES_1000FD (7<<8) /* Bit 10..8: 1000Base-T Full Dup. */
+#define PHY_B_RES_1000HD (6<<8) /* Bit 10..8: 1000Base-T Half Dup. */
+/* others: 100/10: invalid for us */
+
+/*
+ * Level One-Specific
+ */
+/***** PHY_LONE_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
+#define PHY_L_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
+#define PHY_L_1000C_MSE (1<<12) /* Bit 12: Master/Slave Enable */
+#define PHY_L_1000C_MSC (1<<11) /* Bit 11: M/S Configuration */
+#define PHY_L_1000C_RD (1<<10) /* Bit 10: Repeater/DTE */
+#define PHY_L_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
+#define PHY_L_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
+ /* Bit 7..0: reserved */
+
+/***** PHY_LONE_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
+#define PHY_L_1000S_MSF (1<<15) /* Bit 15: Master/Slave Fault */
+#define PHY_L_1000S_MSR (1<<14) /* Bit 14: Master/Slave Result */
+#define PHY_L_1000S_LRS (1<<13) /* Bit 13: Local Receiver Status */
+#define PHY_L_1000S_RRS (1<<12) /* Bit 12: Remote Receiver Status*/
+#define PHY_L_1000S_LP_FD (1<<11) /* Bit 11: Link Partner can FD */
+#define PHY_L_1000S_LP_HD (1<<10) /* Bit 10: Link Partner can HD */
+ /* Bit 9..8: reserved */
+#define PHY_B_1000S_IEC 0xff /* Bit 7..0: Idle Error Count */
+
+/***** PHY_LONE_EXT_STAT 16 bit r/o Extended Status Register *****/
+#define PHY_L_ES_X_FD_CAP (1<<15) /* Bit 15: 1000Base-X FD capable */
+#define PHY_L_ES_X_HD_CAP (1<<14) /* Bit 14: 1000Base-X HD capable */
+#define PHY_L_ES_T_FD_CAP (1<<13) /* Bit 13: 1000Base-T FD capable */
+#define PHY_L_ES_T_HD_CAP (1<<12) /* Bit 12: 1000Base-T HD capable */
+ /* Bit 11..0: reserved */
+
+/***** PHY_LONE_PORT_CFG 16 bit r/w Port Configuration Reg *****/
+#define PHY_L_PC_REP_MODE (1<<15) /* Bit 15: Repeater Mode */
+ /* Bit 14: reserved */
+#define PHY_L_PC_TX_DIS (1<<13) /* Bit 13: Tx output Disabled */
+#define PHY_L_PC_BY_SCR (1<<12) /* Bit 12: Bypass Scrambler */
+#define PHY_L_PC_BY_45 (1<<11) /* Bit 11: Bypass 4B5B-Decoder */
+#define PHY_L_PC_JAB_DIS (1<<10) /* Bit 10: Jabber Disabled */
+#define PHY_L_PC_SQE (1<<9) /* Bit 9: Enable Heartbeat */
+#define PHY_L_PC_TP_LOOP (1<<8) /* Bit 8: TP Loopback */
+#define PHY_L_PC_SSS (1<<7) /* Bit 7: Smart Speed Selection */
+#define PHY_L_PC_FIFO_SIZE (1<<6) /* Bit 6: FIFO Size */
+#define PHY_L_PC_PRE_EN (1<<5) /* Bit 5: Preamble Enable */
+#define PHY_L_PC_CIM (1<<4) /* Bit 4: Carrier Integrity Mon */
+#define PHY_L_PC_10_SER (1<<3) /* Bit 3: Use Serial Output */
+#define PHY_L_PC_ANISOL (1<<2) /* Bit 2: Unisolate Port */
+#define PHY_L_PC_TEN_BIT (1<<1) /* Bit 1: 10bit iface mode on */
+#define PHY_L_PC_ALTCLOCK (1<<0) /* Bit 0: (ro) ALTCLOCK Mode on */
+
+/***** PHY_LONE_Q_STAT 16 bit r/o Quick Status Reg *****/
+#define PHY_L_QS_D_RATE (3<<14) /* Bit 15..14: Data Rate */
+#define PHY_L_QS_TX_STAT (1<<13) /* Bit 13: Transmitting */
+#define PHY_L_QS_RX_STAT (1<<12) /* Bit 12: Receiving */
+#define PHY_L_QS_COL_STAT (1<<11) /* Bit 11: Collision */
+#define PHY_L_QS_L_STAT (1<<10) /* Bit 10: Link is up */
+#define PHY_L_QS_DUP_MOD (1<<9) /* Bit 9: Full/Half Duplex */
+#define PHY_L_QS_AN (1<<8) /* Bit 8: AutoNeg is On */
+#define PHY_L_QS_AN_C (1<<7) /* Bit 7: AN is Complete */
+#define PHY_L_QS_LLE (7<<4) /* Bit 6: Line Length Estim. */
+#define PHY_L_QS_PAUSE (1<<3) /* Bit 3: LP advertised Pause */
+#define PHY_L_QS_AS_PAUSE (1<<2) /* Bit 2: LP adv. asym. Pause */
+#define PHY_L_QS_ISOLATE (1<<1) /* Bit 1: CIM Isolated */
+#define PHY_L_QS_EVENT (1<<0) /* Bit 0: Event has occurred */
+
+/***** PHY_LONE_INT_ENAB 16 bit r/w Interrupt Enable Reg *****/
+/***** PHY_LONE_INT_STAT 16 bit r/o Interrupt Status Reg *****/
+ /* Bit 15..14: reserved */
+#define PHY_L_IS_AN_F (1<<13) /* Bit 13: Auto-Negotiation fault */
+ /* Bit 12: not described */
+#define PHY_L_IS_CROSS (1<<11) /* Bit 11: Crossover used */
+#define PHY_L_IS_POL (1<<10) /* Bit 10: Polarity correct. used*/
+#define PHY_L_IS_SS (1<<9) /* Bit 9: Smart Speed Downgrade*/
+#define PHY_L_IS_CFULL (1<<8) /* Bit 8: Counter Full */
+#define PHY_L_IS_AN_C (1<<7) /* Bit 7: AutoNeg Complete */
+#define PHY_L_IS_SPEED (1<<6) /* Bit 6: Speed Changed */
+#define PHY_L_IS_DUP (1<<5) /* Bit 5: Duplex Changed */
+#define PHY_L_IS_LS (1<<4) /* Bit 4: Link Status Changed */
+#define PHY_L_IS_ISOL (1<<3) /* Bit 3: Isolate Occured */
+#define PHY_L_IS_MDINT (1<<2) /* Bit 2: (ro) STAT: MII Int Pending */
+#define PHY_L_IS_INTEN (1<<1) /* Bit 1: ENAB: Enable IRQs */
+#define PHY_L_IS_FORCE (1<<0) /* Bit 0: ENAB: Force Interrupt */
+
+/* int. mask */
+#define PHY_L_DEF_MSK (PHY_L_IS_LS | PHY_L_IS_ISOL | PHY_L_IS_INTEN)
+
+/***** PHY_LONE_LED_CFG 16 bit r/w LED Configuration Reg *****/
+#define PHY_L_LC_LEDC (3<<14) /* Bit 15..14: Col/Blink/On/Off */
+#define PHY_L_LC_LEDR (3<<12) /* Bit 13..12: Rx/Blink/On/Off */
+#define PHY_L_LC_LEDT (3<<10) /* Bit 11..10: Tx/Blink/On/Off */
+#define PHY_L_LC_LEDG (3<<8) /* Bit 9..8: Giga/Blink/On/Off */
+#define PHY_L_LC_LEDS (3<<6) /* Bit 7..6: 10-100/Blink/On/Off */
+#define PHY_L_LC_LEDL (3<<4) /* Bit 5..4: Link/Blink/On/Off */
+#define PHY_L_LC_LEDF (3<<2) /* Bit 3..2: Duplex/Blink/On/Off */
+#define PHY_L_LC_PSTRECH (1<<1) /* Bit 1: Strech LED Pulses */
+#define PHY_L_LC_FREQ (1<<0) /* Bit 0: 30/100 ms */
+
+/***** PHY_LONE_PORT_CTRL 16 bit r/w Port Control Reg *****/
+#define PHY_L_PC_TX_TCLK (1<<15) /* Bit 15: Enable TX_TCLK */
+ /* Bit 14: reserved */
+#define PHY_L_PC_ALT_NP (1<<13) /* Bit 14: Alternate Next Page */
+#define PHY_L_PC_GMII_ALT (1<<12) /* Bit 13: Alternate GMII driver */
+ /* Bit 11: reserved */
+#define PHY_L_PC_TEN_CRS (1<<10) /* Bit 10: Extend CRS*/
+ /* Bit 9..0: not described */
+
+/***** PHY_LONE_CIM 16 bit r/o CIM Reg *****/
+#define PHY_L_CIM_ISOL (255<<8)/* Bit 15..8: Isolate Count */
+#define PHY_L_CIM_FALSE_CAR (255<<0)/* Bit 7..0: False Carrier Count */
+
+
+/*
+ * Pause Bits (PHY_L_AN_ASP and PHY_L_AN_PC) encoding
+ */
+#define PHY_L_P_NO_PAUSE (0<<10) /* Bit 11..10: no Pause Mode */
+#define PHY_L_P_SYM_MD (1<<10) /* Bit 11..10: symmetric Pause Mode */
+#define PHY_L_P_ASYM_MD (2<<10) /* Bit 11..10: asymmetric Pause Mode */
+#define PHY_L_P_BOTH_MD (3<<10) /* Bit 11..10: both Pause Mode */
+
+
+/*
+ * National-Specific
+ */
+/***** PHY_NAT_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
+#define PHY_N_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
+#define PHY_N_1000C_MSE (1<<12) /* Bit 12: Master/Slave Enable */
+#define PHY_N_1000C_MSC (1<<11) /* Bit 11: M/S Configuration */
+#define PHY_N_1000C_RD (1<<10) /* Bit 10: Repeater/DTE */
+#define PHY_N_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
+#define PHY_N_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
+#define PHY_N_1000C_APC (1<<7) /* Bit 7: Asymmetric Pause Cap. */
+ /* Bit 6..0: reserved */
+
+/***** PHY_NAT_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
+#define PHY_N_1000S_MSF (1<<15) /* Bit 15: Master/Slave Fault */
+#define PHY_N_1000S_MSR (1<<14) /* Bit 14: Master/Slave Result */
+#define PHY_N_1000S_LRS (1<<13) /* Bit 13: Local Receiver Status */
+#define PHY_N_1000S_RRS (1<<12) /* Bit 12: Remote Receiver Status*/
+#define PHY_N_1000S_LP_FD (1<<11) /* Bit 11: Link Partner can FD */
+#define PHY_N_1000S_LP_HD (1<<10) /* Bit 10: Link Partner can HD */
+#define PHY_N_1000C_LP_APC (1<<9) /* Bit 9: LP Asym. Pause Cap. */
+ /* Bit 8: reserved */
+#define PHY_N_1000S_IEC 0xff /* Bit 7..0: Idle Error Count */
+
+/***** PHY_NAT_EXT_STAT 16 bit r/o Extended Status Register *****/
+#define PHY_N_ES_X_FD_CAP (1<<15) /* Bit 15: 1000Base-X FD capable */
+#define PHY_N_ES_X_HD_CAP (1<<14) /* Bit 14: 1000Base-X HD capable */
+#define PHY_N_ES_T_FD_CAP (1<<13) /* Bit 13: 1000Base-T FD capable */
+#define PHY_N_ES_T_HD_CAP (1<<12) /* Bit 12: 1000Base-T HD capable */
+ /* Bit 11..0: reserved */
+
+/* todo: those are still missing */
+/***** PHY_NAT_EXT_CTRL1 16 bit r/o Extended Control Reg1 *****/
+/***** PHY_NAT_Q_STAT1 16 bit r/o Quick Status Reg1 *****/
+/***** PHY_NAT_10B_OP 16 bit r/o 10Base-T Operations Reg *****/
+/***** PHY_NAT_EXT_CTRL2 16 bit r/o Extended Control Reg1 *****/
+/***** PHY_NAT_Q_STAT2 16 bit r/o Quick Status Reg2 *****/
+/***** PHY_NAT_PHY_ADDR 16 bit r/o PHY Address Register *****/
+
+/*
+ * Marvell-Specific
+ */
+/***** PHY_MARV_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
+/***** PHY_MARV_AUNE_LP 16 bit r/w Link Part Ability Reg *****/
+#define PHY_M_AN_NXT_PG BIT_15 /* Request Next Page */
+#define PHY_M_AN_ACK BIT_14 /* (ro) Acknowledge Received */
+#define PHY_M_AN_RF BIT_13 /* Remote Fault */
+ /* Bit 12: reserved */
+#define PHY_M_AN_ASP BIT_11 /* Asymmetric Pause */
+#define PHY_M_AN_PC BIT_10 /* MAC Pause implemented */
+#define PHY_M_AN_100_FD BIT_8 /* Advertise 100Base-TX Full Duplex */
+#define PHY_M_AN_100_HD BIT_7 /* Advertise 100Base-TX Half Duplex */
+#define PHY_M_AN_10_FD BIT_6 /* Advertise 10Base-TX Full Duplex */
+#define PHY_M_AN_10_HD BIT_5 /* Advertise 10Base-TX Half Duplex */
+
+/* special defines for FIBER (88E1011S only) */
+#define PHY_M_AN_ASP_X BIT_8 /* Asymmetric Pause */
+#define PHY_M_AN_PC_X BIT_7 /* MAC Pause implemented */
+#define PHY_M_AN_1000X_AHD BIT_6 /* Advertise 10000Base-X Half Duplex */
+#define PHY_M_AN_1000X_AFD BIT_5 /* Advertise 10000Base-X Full Duplex */
+
+/* Pause Bits (PHY_M_AN_ASP_X and PHY_M_AN_PC_X) encoding */
+#define PHY_M_P_NO_PAUSE_X (0<<7) /* Bit 8.. 7: no Pause Mode */
+#define PHY_M_P_SYM_MD_X (1<<7) /* Bit 8.. 7: symmetric Pause Mode */
+#define PHY_M_P_ASYM_MD_X (2<<7) /* Bit 8.. 7: asymmetric Pause Mode */
+#define PHY_M_P_BOTH_MD_X (3<<7) /* Bit 8.. 7: both Pause Mode */
+
+/***** PHY_MARV_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
+#define PHY_M_1000C_TEST (7<<13) /* Bit 15..13: Test Modes */
+#define PHY_M_1000C_MSE (1<<12) /* Bit 12: Manual Master/Slave Enable */
+#define PHY_M_1000C_MSC (1<<11) /* Bit 11: M/S Configuration (1=Master) */
+#define PHY_M_1000C_MPD (1<<10) /* Bit 10: Multi-Port Device */
+#define PHY_M_1000C_AFD (1<<9) /* Bit 9: Advertise Full Duplex */
+#define PHY_M_1000C_AHD (1<<8) /* Bit 8: Advertise Half Duplex */
+ /* Bit 7..0: reserved */
+
+/***** PHY_MARV_PHY_CTRL 16 bit r/w PHY Specific Ctrl Reg *****/
+
+#define PHY_M_PC_TX_FFD_MSK (3<<14) /* Bit 15..14: Tx FIFO Depth Mask */
+#define PHY_M_PC_RX_FFD_MSK (3<<12) /* Bit 13..12: Rx FIFO Depth Mask */
+#define PHY_M_PC_ASS_CRS_TX (1<<11) /* Bit 11: Assert CRS on Transmit */
+#define PHY_M_PC_FL_GOOD (1<<10) /* Bit 10: Force Link Good */
+#define PHY_M_PC_EN_DET_MSK (3<<8) /* Bit 9.. 8: Energy Detect Mask */
+#define PHY_M_PC_ENA_EXT_D (1<<7) /* Bit 7: Enable Ext. Distance (10BT) */
+#define PHY_M_PC_MDIX_MSK (3<<5) /* Bit 6.. 5: MDI/MDIX Config. Mask */
+#define PHY_M_PC_DIS_125CLK (1<<4) /* Bit 4: Disable 125 CLK */
+#define PHY_M_PC_MAC_POW_UP (1<<3) /* Bit 3: MAC Power up */
+#define PHY_M_PC_SQE_T_ENA (1<<2) /* Bit 2: SQE Test Enabled */
+#define PHY_M_PC_POL_R_DIS (1<<1) /* Bit 1: Polarity Reversal Disabled */
+#define PHY_M_PC_DIS_JABBER (1<<0) /* Bit 0: Disable Jabber */
+
+#define PHY_M_PC_MDI_XMODE(x) SHIFT5(x)
+#define PHY_M_PC_MAN_MDI 0 /* 00 = Manual MDI configuration */
+#define PHY_M_PC_MAN_MDIX 1 /* 01 = Manual MDIX configuration */
+#define PHY_M_PC_ENA_AUTO 3 /* 11 = Enable Automatic Crossover */
+
+/***** PHY_MARV_PHY_STAT 16 bit r/o PHY Specific Status Reg *****/
+#define PHY_M_PS_SPEED_MSK (3<<14) /* Bit 15..14: Speed Mask */
+#define PHY_M_PS_SPEED_1000 (1<<15) /* 10 = 1000 Mbps */
+#define PHY_M_PS_SPEED_100 (1<<14) /* 01 = 100 Mbps */
+#define PHY_M_PS_SPEED_10 0 /* 00 = 10 Mbps */
+#define PHY_M_PS_FULL_DUP (1<<13) /* Bit 13: Full Duplex */
+#define PHY_M_PS_PAGE_REC (1<<12) /* Bit 12: Page Received */
+#define PHY_M_PS_SPDUP_RES (1<<11) /* Bit 11: Speed & Duplex Resolved */
+#define PHY_M_PS_LINK_UP (1<<10) /* Bit 10: Link Up */
+#define PHY_M_PS_CABLE_MSK (3<<7) /* Bit 9.. 7: Cable Length Mask */
+#define PHY_M_PS_MDI_X_STAT (1<<6) /* Bit 6: MDI Crossover Stat (1=MDIX) */
+#define PHY_M_PS_DOWNS_STAT (1<<5) /* Bit 5: Downshift Status (1=downsh.) */
+#define PHY_M_PS_ENDET_STAT (1<<4) /* Bit 4: Energy Detect Status (1=act) */
+#define PHY_M_PS_TX_P_EN (1<<3) /* Bit 3: Tx Pause Enabled */
+#define PHY_M_PS_RX_P_EN (1<<2) /* Bit 2: Rx Pause Enabled */
+#define PHY_M_PS_POL_REV (1<<1) /* Bit 1: Polarity Reversed */
+#define PHY_M_PC_JABBER (1<<0) /* Bit 0: Jabber */
+
+#define PHY_M_PS_PAUSE_MSK (PHY_M_PS_TX_P_EN | PHY_M_PS_RX_P_EN)
+
+/***** PHY_MARV_INT_MASK 16 bit r/w Interrupt Mask Reg *****/
+/***** PHY_MARV_INT_STAT 16 bit r/o Interrupt Status Reg *****/
+#define PHY_M_IS_AN_ERROR (1<<15) /* Bit 15: Auto-Negotiation Error */
+#define PHY_M_IS_LSP_CHANGE (1<<14) /* Bit 14: Link Speed Changed */
+#define PHY_M_IS_DUP_CHANGE (1<<13) /* Bit 13: Duplex Mode Changed */
+#define PHY_M_IS_AN_PR (1<<12) /* Bit 12: Page Received */
+#define PHY_M_IS_AN_COMPL (1<<11) /* Bit 11: Auto-Negotiation Completed */
+#define PHY_M_IS_LST_CHANGE (1<<10) /* Bit 10: Link Status Changed */
+#define PHY_M_IS_SYMB_ERROR (1<<9) /* Bit 9: Symbol Error */
+#define PHY_M_IS_FALSE_CARR (1<<8) /* Bit 8: False Carrier */
+#define PHY_M_IS_FIFO_ERROR (1<<7) /* Bit 7: FIFO Overflow/Underrun Error */
+#define PHY_M_IS_MDI_CHANGE (1<<6) /* Bit 6: MDI Crossover Changed */
+#define PHY_M_IS_DOWNSH_DET (1<<5) /* Bit 5: Downshift Detected */
+#define PHY_M_IS_END_CHANGE (1<<4) /* Bit 4: Energy Detect Changed */
+ /* Bit 3..2: reserved */
+#define PHY_M_IS_POL_CHANGE (1<<1) /* Bit 1: Polarity Changed */
+#define PHY_M_IS_JABBER (1<<0) /* Bit 0: Jabber */
+
+#define PHY_M_DEF_MSK (PHY_M_IS_AN_ERROR | PHY_M_IS_AN_PR | \
+ PHY_M_IS_LST_CHANGE | PHY_M_IS_FIFO_ERROR)
+
+/***** PHY_MARV_EXT_CTRL 16 bit r/w Ext. PHY Specific Ctrl *****/
+#define PHY_M_EC_M_DSC_MSK (3<<10) /* Bit 11..10: Master downshift counter */
+#define PHY_M_EC_S_DSC_MSK (3<<8) /* Bit 9.. 8: Slave downshift counter */
+#define PHY_M_EC_MAC_S_MSK (7<<4) /* Bit 6.. 4: Def. MAC interface speed */
+
+#define PHY_M_EC_M_DSC(x) SHIFT10(x) /* 00=1x; 01=2x; 10=3x; 11=4x */
+#define PHY_M_EC_S_DSC(x) SHIFT8(x) /* 00=dis; 01=1x; 10=2x; 11=3x */
+#define PHY_M_EC_MAC_S(x) SHIFT4(x) /* 01X=0; 110=2.5; 111=25 (MHz) */
+
+#define MAC_TX_CLK_0_MHZ 2
+#define MAC_TX_CLK_2_5_MHZ 6
+#define MAC_TX_CLK_25_MHZ 7
+
+/***** PHY_MARV_LED_CTRL 16 bit r/w LED Control Reg *****/
+#define PHY_M_LEDC_DIS_LED (1<<15) /* Bit 15: Disable LED */
+#define PHY_M_LEDC_PULS_MSK (7<<12) /* Bit 14..12: Pulse Stretch Mask */
+#define PHY_M_LEDC_F_INT (1<<11) /* Bit 11: Force Interrupt */
+#define PHY_M_LEDC_BL_R_MSK (7<<8) /* Bit 10.. 8: Blink Rate Mask */
+ /* Bit 7.. 5: reserved */
+#define PHY_M_LEDC_LINK_MSK (3<<3) /* Bit 4.. 3: Link Control Mask */
+#define PHY_M_LEDC_DP_CTRL (1<<2) /* Bit 2: Duplex Control */
+#define PHY_M_LEDC_RX_CTRL (1<<1) /* Bit 1: Rx activity / Link */
+#define PHY_M_LEDC_TX_CTRL (1<<0) /* Bit 0: Tx activity / Link */
+
+#define PHY_M_LED_PULS_DUR(x) SHIFT12(x) /* Pulse Stretch Duration */
+
+#define PULS_NO_STR 0 /* no pulse stretching */
+#define PULS_21MS 1 /* 21 ms to 42 ms */
+#define PULS_42MS 2 /* 42 ms to 84 ms */
+#define PULS_84MS 3 /* 84 ms to 170 ms */
+#define PULS_170MS 4 /* 170 ms to 340 ms */
+#define PULS_340MS 5 /* 340 ms to 670 ms */
+#define PULS_670MS 6 /* 670 ms to 1.3 s */
+#define PULS_1300MS 7 /* 1.3 s to 2.7 s */
+
+#define PHY_M_LED_BLINK_RT(x) SHIFT8(x) /* Blink Rate */
+
+#define BLINK_42MS 0 /* 42 ms */
+#define BLINK_84MS 1 /* 84 ms */
+#define BLINK_170MS 2 /* 170 ms */
+#define BLINK_340MS 3 /* 340 ms */
+#define BLINK_670MS 4 /* 670 ms */
+ /* values 5 - 7: reserved */
+
+/***** PHY_MARV_LED_OVER 16 bit r/w Manual LED Override Reg *****/
+#define PHY_M_LED_MO_DUP(x) SHIFT10(x) /* Bit 11..10: Duplex */
+#define PHY_M_LED_MO_10(x) SHIFT8(x) /* Bit 9.. 8: Link 10 */
+#define PHY_M_LED_MO_100(x) SHIFT6(x) /* Bit 7.. 6: Link 100 */
+#define PHY_M_LED_MO_1000(x) SHIFT4(x) /* Bit 5.. 4: Link 1000 */
+#define PHY_M_LED_MO_RX(x) SHIFT2(x) /* Bit 3.. 2: Rx */
+#define PHY_M_LED_MO_TX(x) SHIFT0(x) /* Bit 1.. 0: Tx */
+
+#define MO_LED_NORM 0
+#define MO_LED_BLINK 1
+#define MO_LED_OFF 2
+#define MO_LED_ON 3
+
+/***** PHY_MARV_EXT_CTRL_2 16 bit r/w Ext. PHY Specific Ctrl 2 *****/
+ /* Bit 15.. 7: reserved */
+#define PHY_M_EC2_FI_IMPED (1<<6) /* Bit 6: Fiber Input Impedance */
+#define PHY_M_EC2_FO_IMPED (1<<5) /* Bit 5: Fiber Output Impedance */
+#define PHY_M_EC2_FO_M_CLK (1<<4) /* Bit 4: Fiber Mode Clock Enable */
+#define PHY_M_EC2_FO_BOOST (1<<3) /* Bit 3: Fiber Output Boost */
+#define PHY_M_EC2_FO_AM_MSK 7 /* Bit 2.. 0: Fiber Output Amplitude */
+
+/***** PHY_MARV_CABLE_DIAG 16 bit r/o Cable Diagnostic Reg *****/
+#define PHY_M_CABD_ENA_TEST (1<<15) /* Bit 15: Enable Test */
+#define PHY_M_CABD_STAT_MSK (3<<13) /* Bit 14..13: Status */
+ /* Bit 12.. 8: reserved */
+#define PHY_M_CABD_DIST_MSK 0xff /* Bit 7.. 0: Distance */
+
+/* values for Cable Diagnostic Status (11=fail; 00=OK; 10=open; 01=short) */
+#define CABD_STAT_NORMAL 0
+#define CABD_STAT_SHORT 1
+#define CABD_STAT_OPEN 2
+#define CABD_STAT_FAIL 3
+
+
+/*
+ * GMAC registers
+ *
+ * The GMAC registers are 16 or 32 bits wide.
+ * The GMACs host processor interface is 16 bits wide,
+ * therefore ALL registers will be addressed with 16 bit accesses.
+ *
+ * The following macros are provided to access the GMAC registers
+ * GM_IN16(), GM_OUT16, GM_IN32(), GM_OUT32(), GM_INADR(), GM_OUTADR(),
+ * GM_INHASH(), and GM_OUTHASH().
+ * The macros are defined in SkGeHw.h.
+ *
+ * Note: NA reg = Network Address e.g DA, SA etc.
+ *
+ */
+
+/* Port Registers */
+#define GM_GP_STAT 0x0000 /* 16 bit r/o General Purpose Status */
+#define GM_GP_CTRL 0x0004 /* 16 bit r/w General Purpose Control */
+#define GM_TX_CTRL 0x0008 /* 16 bit r/w Transmit Control Reg. */
+#define GM_RX_CTRL 0x000c /* 16 bit r/w Receive Control Reg. */
+#define GM_TX_FLOW_CTRL 0x0010 /* 16 bit r/w Transmit Flow Control */
+#define GM_TX_PARAM 0x0014 /* 16 bit r/w Transmit Parameter Reg. */
+#define GM_SERIAL_MODE 0x0018 /* 16 bit r/w Serial Mode Register */
+
+/* Source Address Registers */
+#define GM_SRC_ADDR_1L 0x001c /* 16 bit r/w Source Address 1 (low) */
+#define GM_SRC_ADDR_1M 0x0020 /* 16 bit r/w Source Address 1 (middle) */
+#define GM_SRC_ADDR_1H 0x0024 /* 16 bit r/w Source Address 1 (high) */
+#define GM_SRC_ADDR_2L 0x0028 /* 16 bit r/w Source Address 2 (low) */
+#define GM_SRC_ADDR_2M 0x002c /* 16 bit r/w Source Address 2 (middle) */
+#define GM_SRC_ADDR_2H 0x0030 /* 16 bit r/w Source Address 2 (high) */
+
+/* Multicast Address Hash Registers */
+#define GM_MC_ADDR_H1 0x0034 /* 16 bit r/w Multicast Address Hash 1 */
+#define GM_MC_ADDR_H2 0x0038 /* 16 bit r/w Multicast Address Hash 2 */
+#define GM_MC_ADDR_H3 0x003c /* 16 bit r/w Multicast Address Hash 3 */
+#define GM_MC_ADDR_H4 0x0040 /* 16 bit r/w Multicast Address Hash 4 */
+
+/* Interrupt Source Registers */
+#define GM_TX_IRQ_SRC 0x0044 /* 16 bit r/o Tx Overflow IRQ Source */
+#define GM_RX_IRQ_SRC 0x0048 /* 16 bit r/o Rx Overflow IRQ Source */
+#define GM_TR_IRQ_SRC 0x004c /* 16 bit r/o Tx/Rx Over. IRQ Source */
+
+/* Interrupt Mask Registers */
+#define GM_TX_IRQ_MSK 0x0050 /* 16 bit r/w Tx Overflow IRQ Mask */
+#define GM_RX_IRQ_MSK 0x0054 /* 16 bit r/w Rx Overflow IRQ Mask */
+#define GM_TR_IRQ_MSK 0x0058 /* 16 bit r/w Tx/Rx Over. IRQ Mask */
+
+/* Serial Management Interface (SMI) Registers */
+#define GM_SMI_CTRL 0x0080 /* 16 bit r/w SMI Control Register */
+#define GM_SMI_DATA 0x0084 /* 16 bit r/w SMI Data Register */
+#define GM_PHY_ADDR 0x0088 /* 16 bit r/w GPHY Address Register */
+
+/* MIB Counters */
+#define GM_MIB_CNT_BASE 0x0100 /* Base Address of MIB Counters */
+#define GM_MIB_CNT_SIZE 44 /* Number of MIB Counters */
+
+/*
+ * MIB Counters base address definitions (low word) -
+ * use offset 4 for access to high word (32 bit r/o)
+ */
+#define GM_RXF_UC_OK \
+ (GM_MIB_CNT_BASE + 0) /* Unicast Frames Received OK */
+#define GM_RXF_BC_OK \
+ (GM_MIB_CNT_BASE + 8) /* Broadcast Frames Received OK */
+#define GM_RXF_MPAUSE \
+ (GM_MIB_CNT_BASE + 16) /* Pause MAC Ctrl Frames Received */
+#define GM_RXF_MC_OK \
+ (GM_MIB_CNT_BASE + 24) /* Multicast Frames Received OK */
+#define GM_RXF_FCS_ERR \
+ (GM_MIB_CNT_BASE + 32) /* Rx Frame Check Seq. Error */
+ /* GM_MIB_CNT_BASE + 40: reserved */
+#define GM_RXO_OK_LO \
+ (GM_MIB_CNT_BASE + 48) /* Octets Received OK Low */
+#define GM_RXO_OK_HI \
+ (GM_MIB_CNT_BASE + 56) /* Octets Received OK High */
+#define GM_RXO_ERR_LO \
+ (GM_MIB_CNT_BASE + 64) /* Octets Received Invalid Low */
+#define GM_RXO_ERR_HI \
+ (GM_MIB_CNT_BASE + 72) /* Octets Received Invalid High */
+#define GM_RXF_SHT \
+ (GM_MIB_CNT_BASE + 80) /* Frames <64 Byte Received OK */
+#define GM_RXE_FRAG \
+ (GM_MIB_CNT_BASE + 88) /* Frames <64 Byte Receeived with FCS Err */
+#define GM_RXF_64B \
+ (GM_MIB_CNT_BASE + 96) /* 64 Byte Rx Frame */
+#define GM_RXF_127B \
+ (GM_MIB_CNT_BASE + 104) /* 65-127 Byte Rx Frame */
+#define GM_RXF_255B \
+ (GM_MIB_CNT_BASE + 112) /* 128-255 Byte Rx Frame */
+#define GM_RXF_511B \
+ (GM_MIB_CNT_BASE + 120) /* 256-511 Byte Rx Frame */
+#define GM_RXF_1023B \
+ (GM_MIB_CNT_BASE + 128) /* 512-1023 Byte Rx Frame */
+#define GM_RXF_1518B \
+ (GM_MIB_CNT_BASE + 136) /* 1024-1518 Byte Rx Frame */
+#define GM_RXF_MAX_SZ \
+ (GM_MIB_CNT_BASE + 144) /* 1519-MaxSize Byte Rx Frame */
+#define GM_RXF_LNG_ERR \
+ (GM_MIB_CNT_BASE + 152) /* Rx Frame too Long Error */
+#define GM_RXF_JAB_PKT \
+ (GM_MIB_CNT_BASE + 160) /* Rx Jabber Packet Frame */
+ /* GM_MIB_CNT_BASE + 168: reserved */
+#define GM_RXE_FIFO_OV \
+ (GM_MIB_CNT_BASE + 176) /* Rx FIFO overflow Event */
+ /* GM_MIB_CNT_BASE + 184: reserved */
+#define GM_TXF_UC_OK \
+ (GM_MIB_CNT_BASE + 192) /* Unicast Frames Xmitted OK */
+#define GM_TXF_BC_OK \
+ (GM_MIB_CNT_BASE + 200) /* Broadcast Frames Xmitted OK */
+#define GM_TXF_MPAUSE \
+ (GM_MIB_CNT_BASE + 208) /* Pause MAC Ctrl Frames Xmitted */
+#define GM_TXF_MC_OK \
+ (GM_MIB_CNT_BASE + 216) /* Multicast Frames Xmitted OK */
+#define GM_TXO_OK_LO \
+ (GM_MIB_CNT_BASE + 224) /* Octets Transmitted OK Low */
+#define GM_TXO_OK_HI \
+ (GM_MIB_CNT_BASE + 232) /* Octets Transmitted OK High */
+#define GM_TXF_64B \
+ (GM_MIB_CNT_BASE + 240) /* 64 Byte Tx Frame */
+#define GM_TXF_127B \
+ (GM_MIB_CNT_BASE + 248) /* 65-127 Byte Tx Frame */
+#define GM_TXF_255B \
+ (GM_MIB_CNT_BASE + 256) /* 128-255 Byte Tx Frame */
+#define GM_TXF_511B \
+ (GM_MIB_CNT_BASE + 264) /* 256-511 Byte Tx Frame */
+#define GM_TXF_1023B \
+ (GM_MIB_CNT_BASE + 272) /* 512-1023 Byte Tx Frame */
+#define GM_TXF_1518B \
+ (GM_MIB_CNT_BASE + 280) /* 1024-1518 Byte Tx Frame */
+#define GM_TXF_MAX_SZ \
+ (GM_MIB_CNT_BASE + 288) /* 1519-MaxSize Byte Tx Frame */
+ /* GM_MIB_CNT_BASE + 296: reserved */
+#define GM_TXF_COL \
+ (GM_MIB_CNT_BASE + 304) /* Tx Collision */
+#define GM_TXF_LAT_COL \
+ (GM_MIB_CNT_BASE + 312) /* Tx Late Collision */
+#define GM_TXF_ABO_COL \
+ (GM_MIB_CNT_BASE + 320) /* Tx aborted due to Exces. Col. */
+#define GM_TXF_MUL_COL \
+ (GM_MIB_CNT_BASE + 328) /* Tx Multiple Collision */
+#define GM_TXF_SNG_COL \
+ (GM_MIB_CNT_BASE + 336) /* Tx Single Collision */
+#define GM_TXE_FIFO_UR \
+ (GM_MIB_CNT_BASE + 344) /* Tx FIFO Underrun Event */
+
+/*----------------------------------------------------------------------------*/
+/*
+ * GMAC Bit Definitions
+ *
+ * If the bit access behaviour differs from the register access behaviour
+ * (r/w, r/o) this is documented after the bit number.
+ * The following bit access behaviours are used:
+ * (sc) self clearing
+ * (r/o) read only
+ */
+
+/* GM_GP_STAT 16 bit r/o General Purpose Status Register */
+
+#define GM_GPSR_SPEED (1<<15) /* Bit 15: Port Speed (1 = 100 Mbps) */
+#define GM_GPSR_DUPLEX (1<<14) /* Bit 14: Duplex Mode (1 = Full) */
+#define GM_GPSR_FC_TX_DIS (1<<13) /* Bit 13: Tx Flow Control Mode Disabled */
+#define GM_GPSR_LINK_UP (1<<12) /* Bit 12: Link Up Status */
+#define GM_GPSR_PAUSE (1<<11) /* Bit 11: Pause State */
+#define GM_GPSR_TX_ACTIVE (1<<10) /* Bit 10: Tx in Progress */
+#define GM_GPSR_EXC_COL (1<<9) /* Bit 9: Excessive Collisions Occured */
+#define GM_GPSR_LAT_COL (1<<8) /* Bit 8: Late Collisions Occured */
+ /* Bit 7..6: reserved */
+#define GM_GPSR_PHY_ST_CH (1<<5) /* Bit 5: PHY Status Change */
+#define GM_GPSR_GIG_SPEED (1<<4) /* Bit 4: Gigabit Speed (1 = 1000 Mbps) */
+#define GM_GPSR_PART_MODE (1<<3) /* Bit 3: Partition mode */
+#define GM_GPSR_FC_RX_DIS (1<<2) /* Bit 2: Rx Flow Control Mode Disabled */
+#define GM_GPSR_PROM_EN (1<<1) /* Bit 1: Promiscuous Mode Enabled */
+ /* Bit 0: reserved */
+
+/* GM_GP_CTRL 16 bit r/w General Purpose Control Register */
+ /* Bit 15: reserved */
+#define GM_GPCR_PROM_ENA (1<<14) /* Bit 14: Enable Promiscuous Mode */
+#define GM_GPCR_FC_TX_DIS (1<<13) /* Bit 13: Disable Tx Flow Control Mode */
+#define GM_GPCR_TX_ENA (1<<12) /* Bit 12: Enable Transmit */
+#define GM_GPCR_RX_ENA (1<<11) /* Bit 11: Enable Receive */
+#define GM_GPCR_BURST_ENA (1<<10) /* Bit 10: Enable Burst Mode */
+#define GM_GPCR_LOOP_ENA (1<<9) /* Bit 9: Enable MAC Loopback Mode */
+#define GM_GPCR_PART_ENA (1<<8) /* Bit 8: Enable Partition Mode */
+#define GM_GPCR_GIGS_ENA (1<<7) /* Bit 7: Gigabit Speed (1000 Mbps) */
+#define GM_GPCR_FL_PASS (1<<6) /* Bit 6: Force Link Pass */
+#define GM_GPCR_DUP_FULL (1<<5) /* Bit 5: Full Duplex Mode */
+#define GM_GPCR_FC_RX_DIS (1<<4) /* Bit 4: Disable Rx Flow Control Mode */
+#define GM_GPCR_SPEED_100 (1<<3) /* Bit 3: Port Speed 100 Mbps */
+#define GM_GPCR_AU_DUP_DIS (1<<2) /* Bit 2: Disable Auto-Update for Duplex */
+#define GM_GPCR_AU_FCT_DIS (1<<1) /* Bit 1: Disable Auto-Update for Flow-c. */
+#define GM_GPCR_AU_SPD_DIS (1<<0) /* Bit 0: Disable Auto-Update for Speed */
+
+#define GM_GPCR_SPEED_1000 (GM_GPCR_GIGS_ENA | GM_GPCR_SPEED_100)
+#define GM_GPCR_AU_ALL_DIS (GM_GPCR_AU_DUP_DIS | GM_GPCR_AU_FCT_DIS |\
+ GM_GPCR_AU_SPD_DIS)
+
+/* GM_TX_CTRL 16 bit r/w Transmit Control Register */
+
+#define GM_TXCR_FORCE_JAM (1<<15) /* Bit 15: Force Jam / Flow-Control */
+#define GM_TXCR_CRC_DIS (1<<14) /* Bit 14: Disable insertion of CRC */
+#define GM_TXCR_PAD_DIS (1<<13) /* Bit 13: Disable padding of packets */
+#define GM_TXCR_COL_THR (4<<10) /* Bit 12..10: Collision Threshold */
+
+/* GM_RX_CTRL 16 bit r/w Receive Control Register */
+#define GM_RXCR_UCF_ENA (1<<15) /* Bit 15: Enable Unicast filtering */
+#define GM_RXCR_MCF_ENA (1<<14) /* Bit 14: Enable Multicast filtering */
+#define GM_RXCR_CRC_DIS (1<<13) /* Bit 13: Remove 4-byte CRC */
+#define GM_RXCR_PASS_FC (1<<12) /* Bit 12: Pass FC packets to FIFO */
+
+/* GM_TX_PARAM 16 bit r/w Transmit Parameter Register */
+#define GM_TXPA_JAMLEN_MSK (0x03<<14) /* Bit 15..14: Jam Length */
+#define GM_TXPA_JAMIPG_MSK (0x1f<<9) /* Bit 13..9: Jam IPG */
+#define GM_TXPA_JAMDAT_MSK (0x1f<<4) /* Bit 8..4: IPG Jam to Data */
+ /* Bit 3..0: reserved */
+#define JAM_LEN_VAL(x) SHIFT14(x)
+#define JAM_IPG_VAL(x) SHIFT9(x)
+#define IPG_JAM_DATA(x) SHIFT4(x)
+
+/* GM_SERIAL_MODE 16 bit r/w Serial Mode Register */
+#define GM_SMOD_DATABL_MSK (0x1f<<11) /* Bit 15..11: Data Blinder */
+#define GM_SMOD_LIMIT_4 (1<<10) /* Bit 10: 4 consecutive transmit trials */
+#define GM_SMOD_VLAN_ENA (1<<9) /* Bit 9: Enable VLAN (Max. Frame Length) */
+#define GM_SMOD_JUMBO_ENA (1<<8) /* Bit 8: Enable Jumbo (Max. Frame Length) */
+ /* Bit 7..5: reserved */
+#define GM_SMOD_IPG_MSK 0x1f /* Bit 4..0: Inter-Packet Gap (IPG) */
+
+#define DATA_BLIND_VAL(x) SHIFT11(x)
+#define DATA_BLIND_FAST_ETH 0x1c
+#define DATA_BLIND_GIGABIT 4
+
+#define IPG_VAL_FAST_ETH 0x1e
+#define IPG_VAL_GIGABIT 6
+
+/* GM_SMI_CTRL 16 bit r/w SMI Control Register */
+
+#define GM_SMI_CT_PHY_AD(x) SHIFT11(x)
+#define GM_SMI_CT_REG_AD(x) SHIFT6(x)
+#define GM_SMI_CT_OP_RD (1<<5) /* Bit 5: OpCode Read (0=Write)*/
+#define GM_SMI_CT_RD_VAL (1<<4) /* Bit 4: Read Valid (Read completed) */
+#define GM_SMI_CT_BUSY (1<<3) /* Bit 3: Busy (Operation in progress) */
+ /* Bit 2..0: reserved */
+
+/* GM_PHY_ADDR 16 bit r/w GPHY Address Register */
+ /* Bit 15..6: reserved */
+#define GM_PAR_MIB_CLR (1<<5) /* Bit 5: Set MIB Clear Counter Mode */
+#define GM_PAR_MIB_TST (1<<4) /* Bit 4: MIB Load Counter (Test Mode) */
+ /* Bit 3..0: reserved */
+
+/* Receive Frame Status Encoding */
+#define GMR_FS_LEN (0xffffUL<<16) /* Bit 31..16: Rx Frame Length */
+ /* Bit 15..14: reserved */
+#define GMR_FS_VLAN (1L<<13) /* Bit 13: VLAN Packet */
+#define GMR_FS_JABBER (1L<<12) /* Bit 12: Jabber Packet */
+#define GMR_FS_UN_SIZE (1L<<11) /* Bit 11: Undersize Packet */
+#define GMR_FS_MC (1L<<10) /* Bit 10: Multicast Packet */
+#define GMR_FS_BC (1L<<9) /* Bit 9: Broadcast Packet */
+#define GMR_FS_RX_OK (1L<<8) /* Bit 8: Receive OK (Good Packet) */
+#define GMR_FS_GOOD_FC (1L<<7) /* Bit 7: Good Flow-Control Packet */
+#define GMR_FS_BAD_FC (1L<<6) /* Bit 6: Bad Flow-Control Packet */
+#define GMR_FS_MII_ERR (1L<<5) /* Bit 5: MII Error */
+#define GMR_FS_LONG_ERR (1L<<4) /* Bit 4: Too Long Packet */
+#define GMR_FS_FRAGMENT (1L<<3) /* Bit 3: Fragment */
+ /* Bit 2: reserved */
+#define GMR_FS_CRC_ERR (1L<<1) /* Bit 1: CRC Error */
+#define GMR_FS_RX_FF_OV (1L<<0) /* Bit 0: Rx FIFO Overflow */
+
+/*
+ * GMR_FS_ANY_ERR (analogous to XMR_FS_ANY_ERR)
+ */
+#define GMR_FS_ANY_ERR (GMR_FS_CRC_ERR | \
+ GMR_FS_LONG_ERR | \
+ GMR_FS_MII_ERR | \
+ GMR_FS_BAD_FC | \
+ GMR_FS_GOOD_FC | \
+ GMR_FS_JABBER)
+
+/* Rx GMAC FIFO Flush Mask (default) */
+#define RX_FF_FL_DEF_MSK (GMR_FS_CRC_ERR | \
+ GMR_FS_RX_FF_OV | \
+ GMR_FS_MII_ERR | \
+ GMR_FS_BAD_FC | \
+ GMR_FS_GOOD_FC | \
+ GMR_FS_UN_SIZE | \
+ GMR_FS_JABBER)
+
+/* typedefs *******************************************************************/
+
+
+/* function prototypes ********************************************************/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __INC_XMAC_H */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skaddr.c u-boot-2009.03/drivers/net/sk98lin/skaddr.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skaddr.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skaddr.c 2009-03-31 14:54:29.175008800 -0700
@@ -1,1875 +1,1878 @@
-/******************************************************************************
- *
- * Name: skaddr.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.48 $
- * Date: $Date: 2003/02/12 17:09:37 $
- * Purpose: Manage Addresses (Multicast and Unicast) and Promiscuous Mode.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skaddr.c,v $
- * Revision 1.48 2003/02/12 17:09:37 tschilli
- * Fix in SkAddrOverride() to set both (physical and logical) MAC addresses
- * in case that both addresses are identical.
- *
- * Revision 1.47 2002/09/17 06:31:10 tschilli
- * Handling of SK_PROM_MODE_ALL_MC flag in SkAddrGmacMcUpdate()
- * and SkAddrGmacPromiscuousChange() fixed.
- * Editorial changes.
- *
- * Revision 1.46 2002/08/22 07:55:41 tschilli
- * New function SkGmacMcHash() for GMAC multicast hashing algorithm added.
- * Editorial changes.
- *
- * Revision 1.45 2002/08/15 12:29:35 tschilli
- * SkAddrGmacMcUpdate() and SkAddrGmacPromiscuousChange() changed.
- *
- * Revision 1.44 2002/08/14 12:18:03 rschmidt
- * Replaced direct handling of MAC Hashing (XMAC and GMAC)
- * with routine SkMacHashing().
- * Replaced wrong 3rd para 'i' with 'PortNumber' in SkMacPromiscMode().
- *
- * Revision 1.43 2002/08/13 09:37:43 rschmidt
- * Corrected some SK_DBG_MSG outputs.
- * Replaced wrong 2nd para pAC with IoC in SkMacPromiscMode().
- * Editorial changes.
- *
- * Revision 1.42 2002/08/12 11:24:36 rschmidt
- * Remove setting of logical MAC address GM_SRC_ADDR_2 in SkAddrInit().
- * Replaced direct handling of MAC Promiscuous Mode (XMAC and GMAC)
- * with routine SkMacPromiscMode().
- * Editorial changes.
- *
- * Revision 1.41 2002/06/10 13:52:18 tschilli
- * Changes for handling YUKON.
- * All changes are internally and not visible to the programmer
- * using this module.
- *
- * Revision 1.40 2001/02/14 14:04:59 rassmann
- * Editorial changes.
- *
- * Revision 1.39 2001/01/30 10:30:04 rassmann
- * Editorial changes.
- *
- * Revision 1.38 2001/01/25 16:26:52 rassmann
- * Ensured that logical address overrides are done on net's active port.
- *
- * Revision 1.37 2001/01/22 13:41:34 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.36 2000/08/07 11:10:39 rassmann
- * Editorial changes.
- *
- * Revision 1.35 2000/05/04 09:38:41 rassmann
- * Editorial changes.
- * Corrected multicast address hashing.
- *
- * Revision 1.34 1999/11/22 13:23:44 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.33 1999/05/28 10:56:06 rassmann
- * Editorial changes.
- *
- * Revision 1.32 1999/03/31 10:59:20 rassmann
- * Returning Success instead of DupAddr if address shall be overridden
- * with same value.
- *
- * Revision 1.31 1999/01/14 16:18:17 rassmann
- * Corrected multicast initialization.
- *
- * Revision 1.30 1999/01/04 10:30:35 rassmann
- * SkAddrOverride only possible after SK_INIT_IO phase.
- *
- * Revision 1.29 1998/12/29 13:13:10 rassmann
- * An address override is now preserved in the SK_INIT_IO phase.
- * All functions return an int now.
- * Extended parameter checking.
- *
- * Revision 1.28 1998/12/01 11:45:53 rassmann
- * Code cleanup.
- *
- * Revision 1.27 1998/12/01 09:22:49 rassmann
- * SkAddrMcAdd and SkAddrMcUpdate returned SK_MC_FILTERING_INEXACT
- * too often.
- *
- * Revision 1.26 1998/11/24 12:39:44 rassmann
- * Reserved multicast entry for BPDU address.
- * 13 multicast entries left for protocol.
- *
- * Revision 1.25 1998/11/17 16:54:23 rassmann
- * Using exact match for up to 14 multicast addresses.
- * Still receiving all multicasts if more addresses are added.
- *
- * Revision 1.24 1998/11/13 17:24:31 rassmann
- * Changed return value of SkAddrOverride to int.
- *
- * Revision 1.23 1998/11/13 16:56:18 rassmann
- * Added macro SK_ADDR_COMPARE.
- * Changed return type of SkAddrOverride to SK_BOOL.
- *
- * Revision 1.22 1998/11/04 17:06:17 rassmann
- * Corrected McUpdate and PromiscuousChange functions.
- *
- * Revision 1.21 1998/10/29 14:34:04 rassmann
- * Clearing SK_ADDR struct at startup.
- *
- * Revision 1.20 1998/10/28 18:16:34 rassmann
- * Avoiding I/Os before SK_INIT_RUN level.
- * Aligning InexactFilter.
- *
- * Revision 1.19 1998/10/28 11:29:28 rassmann
- * Programming physical address in SkAddrMcUpdate.
- * Corrected programming of exact match entries.
- *
- * Revision 1.18 1998/10/28 10:34:48 rassmann
- * Corrected reading of physical addresses.
- *
- * Revision 1.17 1998/10/28 10:26:13 rassmann
- * Getting ports' current MAC addresses from EPROM now.
- * Added debug output.
- *
- * Revision 1.16 1998/10/27 16:20:12 rassmann
- * Reading MAC address byte by byte.
- *
- * Revision 1.15 1998/10/22 11:39:09 rassmann
- * Corrected signed/unsigned mismatches.
- *
- * Revision 1.14 1998/10/19 17:12:35 rassmann
- * Syntax corrections.
- *
- * Revision 1.13 1998/10/19 17:02:19 rassmann
- * Now reading permanent MAC addresses from CRF.
- *
- * Revision 1.12 1998/10/15 15:15:48 rassmann
- * Changed Flags Parameters from SK_U8 to int.
- * Checked with lint.
- *
- * Revision 1.11 1998/09/24 19:15:12 rassmann
- * Code cleanup.
- *
- * Revision 1.10 1998/09/18 20:18:54 rassmann
- * Added HW access.
- * Implemented swapping.
- *
- * Revision 1.9 1998/09/16 11:32:00 rassmann
- * Including skdrv1st.h again. :(
- *
- * Revision 1.8 1998/09/16 11:09:34 rassmann
- * Syntax corrections.
- *
- * Revision 1.7 1998/09/14 17:06:34 rassmann
- * Minor changes.
- *
- * Revision 1.6 1998/09/07 08:45:41 rassmann
- * Syntax corrections.
- *
- * Revision 1.5 1998/09/04 19:40:19 rassmann
- * Interface enhancements.
- *
- * Revision 1.4 1998/09/04 12:14:12 rassmann
- * Interface cleanup.
- *
- * Revision 1.3 1998/09/02 16:56:40 rassmann
- * Updated interface.
- *
- * Revision 1.2 1998/08/27 14:26:09 rassmann
- * Updated interface.
- *
- * Revision 1.1 1998/08/21 08:30:22 rassmann
- * First public version.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * This module is intended to manage multicast addresses, address override,
- * and promiscuous mode on GEnesis and Yukon adapters.
- *
- * Address Layout:
- * port address: physical MAC address
- * 1st exact match: logical MAC address (GEnesis only)
- * 2nd exact match: RLMT multicast (GEnesis only)
- * exact match 3-13: OS-specific multicasts (GEnesis only)
- *
- * Include File Hierarchy:
- *
- * "skdrv1st.h"
- * "skdrv2nd.h"
- *
- ******************************************************************************/
-
-#include <config.h>
-
-#ifndef lint
-static const char SysKonnectFileId[] =
- "@(#) $Id: skaddr.c,v 1.48 2003/02/12 17:09:37 tschilli Exp $ (C) SysKonnect.";
-#endif /* !defined(lint) */
-
-#define __SKADDR_C
-
-#ifdef __cplusplus
-#error C++ is not yet supported.
-extern "C" {
-#endif /* cplusplus */
-
-#include "h/skdrv1st.h"
-#include "h/skdrv2nd.h"
-
-/* defines ********************************************************************/
-
-
-#define XMAC_POLY 0xEDB88320UL /* CRC32-Poly - XMAC: Little Endian */
-#define GMAC_POLY 0x04C11DB7L /* CRC16-Poly - GMAC: Little Endian */
-#define HASH_BITS 6 /* #bits in hash */
-#define SK_MC_BIT 0x01
-
-/* Error numbers and messages. */
-
-#define SKERR_ADDR_E001 (SK_ERRBASE_ADDR + 0)
-#define SKERR_ADDR_E001MSG "Bad Flags."
-#define SKERR_ADDR_E002 (SKERR_ADDR_E001 + 1)
-#define SKERR_ADDR_E002MSG "New Error."
-
-/* typedefs *******************************************************************/
-
-/* None. */
-
-/* global variables ***********************************************************/
-
-/* 64-bit hash values with all bits set. */
-
-SK_U16 OnesHash[4] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
-
-/* local variables ************************************************************/
-
-#ifdef DEBUG
-static int Next0[SK_MAX_MACS] = {0, 0};
-#endif /* DEBUG */
-
-/* functions ******************************************************************/
-
-/******************************************************************************
- *
- * SkAddrInit - initialize data, set state to init
- *
- * Description:
- *
- * SK_INIT_DATA
- * ============
- *
- * This routine clears the multicast tables and resets promiscuous mode.
- * Some entries are reserved for the "logical MAC address", the
- * SK-RLMT multicast address, and the BPDU multicast address.
- *
- *
- * SK_INIT_IO
- * ==========
- *
- * All permanent MAC addresses are read from EPROM.
- * If the current MAC addresses are not already set in software,
- * they are set to the values of the permanent addresses.
- * The current addresses are written to the corresponding MAC.
- *
- *
- * SK_INIT_RUN
- * ===========
- *
- * Nothing.
- *
- * Context:
- * init, pageable
- *
- * Returns:
- * SK_ADDR_SUCCESS
- */
-int SkAddrInit(
-SK_AC *pAC, /* the adapter context */
-SK_IOC IoC, /* I/O context */
-int Level) /* initialization level */
-{
- int j;
- SK_U32 i;
- SK_U8 *InAddr;
- SK_U16 *OutAddr;
- SK_ADDR_PORT *pAPort;
-
- switch (Level) {
- case SK_INIT_DATA:
- SK_MEMSET((char *) &pAC->Addr, 0, sizeof(SK_ADDR));
-
- for (i = 0; i < SK_MAX_MACS; i++) {
- pAPort = &pAC->Addr.Port[i];
- pAPort->PromMode = SK_PROM_MODE_NONE;
-
- pAPort->FirstExactMatchRlmt = SK_ADDR_FIRST_MATCH_RLMT;
- pAPort->FirstExactMatchDrv = SK_ADDR_FIRST_MATCH_DRV;
- pAPort->NextExactMatchRlmt = SK_ADDR_FIRST_MATCH_RLMT;
- pAPort->NextExactMatchDrv = SK_ADDR_FIRST_MATCH_DRV;
- }
-#ifdef xDEBUG
- for (i = 0; i < SK_MAX_MACS; i++) {
- if (pAC->Addr.Port[i].NextExactMatchRlmt <
- SK_ADDR_FIRST_MATCH_RLMT) {
- Next0[i] |= 4;
- }
- }
-#endif /* DEBUG */
- /* pAC->Addr.InitDone = SK_INIT_DATA; */
- break;
-
- case SK_INIT_IO:
- for (i = 0; i < SK_MAX_NETS; i++) {
- pAC->Addr.Net[i].ActivePort = pAC->Rlmt.Net[i].ActivePort;
- }
-#ifdef xDEBUG
- for (i = 0; i < SK_MAX_MACS; i++) {
- if (pAC->Addr.Port[i].NextExactMatchRlmt <
- SK_ADDR_FIRST_MATCH_RLMT) {
- Next0[i] |= 8;
- }
- }
-#endif /* DEBUG */
-
- /* Read permanent logical MAC address from Control Register File. */
- for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
- InAddr = (SK_U8 *) &pAC->Addr.Net[0].PermanentMacAddress.a[j];
- SK_IN8(IoC, B2_MAC_1 + j, InAddr);
- }
-
- if (!pAC->Addr.Net[0].CurrentMacAddressSet) {
- /* Set the current logical MAC address to the permanent one. */
- pAC->Addr.Net[0].CurrentMacAddress =
- pAC->Addr.Net[0].PermanentMacAddress;
- pAC->Addr.Net[0].CurrentMacAddressSet = SK_TRUE;
- }
-
- /* Set the current logical MAC address. */
- pAC->Addr.Port[pAC->Addr.Net[0].ActivePort].Exact[0] =
- pAC->Addr.Net[0].CurrentMacAddress;
-#if SK_MAX_NETS > 1
- /* Set logical MAC address for net 2 to (log | 3). */
- if (!pAC->Addr.Net[1].CurrentMacAddressSet) {
- pAC->Addr.Net[1].PermanentMacAddress =
- pAC->Addr.Net[0].PermanentMacAddress;
- pAC->Addr.Net[1].PermanentMacAddress.a[5] |= 3;
- /* Set the current logical MAC address to the permanent one. */
- pAC->Addr.Net[1].CurrentMacAddress =
- pAC->Addr.Net[1].PermanentMacAddress;
- pAC->Addr.Net[1].CurrentMacAddressSet = SK_TRUE;
- }
-#endif /* SK_MAX_NETS > 1 */
-
-#ifdef DEBUG
- for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
- ("Permanent MAC Address (Net%d): %02X %02X %02X %02X %02X %02X\n",
- i,
- pAC->Addr.Net[i].PermanentMacAddress.a[0],
- pAC->Addr.Net[i].PermanentMacAddress.a[1],
- pAC->Addr.Net[i].PermanentMacAddress.a[2],
- pAC->Addr.Net[i].PermanentMacAddress.a[3],
- pAC->Addr.Net[i].PermanentMacAddress.a[4],
- pAC->Addr.Net[i].PermanentMacAddress.a[5]))
-
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
- ("Logical MAC Address (Net%d): %02X %02X %02X %02X %02X %02X\n",
- i,
- pAC->Addr.Net[i].CurrentMacAddress.a[0],
- pAC->Addr.Net[i].CurrentMacAddress.a[1],
- pAC->Addr.Net[i].CurrentMacAddress.a[2],
- pAC->Addr.Net[i].CurrentMacAddress.a[3],
- pAC->Addr.Net[i].CurrentMacAddress.a[4],
- pAC->Addr.Net[i].CurrentMacAddress.a[5]))
- }
-#endif /* DEBUG */
-
- for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
- pAPort = &pAC->Addr.Port[i];
-
- /* Read permanent port addresses from Control Register File. */
- for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
- InAddr = (SK_U8 *) &pAPort->PermanentMacAddress.a[j];
- SK_IN8(IoC, B2_MAC_2 + 8 * i + j, InAddr);
- }
-
- if (!pAPort->CurrentMacAddressSet) {
- /*
- * Set the current and previous physical MAC address
- * of this port to its permanent MAC address.
- */
- pAPort->CurrentMacAddress = pAPort->PermanentMacAddress;
- pAPort->PreviousMacAddress = pAPort->PermanentMacAddress;
- pAPort->CurrentMacAddressSet = SK_TRUE;
- }
-
- /* Set port's current physical MAC address. */
- OutAddr = (SK_U16 *) &pAPort->CurrentMacAddress.a[0];
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- XM_OUTADDR(IoC, i, XM_SA, OutAddr);
- }
- else {
- GM_OUTADDR(IoC, i, GM_SRC_ADDR_1L, OutAddr);
- }
-#ifdef DEBUG
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
- ("SkAddrInit: Permanent Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
- pAPort->PermanentMacAddress.a[0],
- pAPort->PermanentMacAddress.a[1],
- pAPort->PermanentMacAddress.a[2],
- pAPort->PermanentMacAddress.a[3],
- pAPort->PermanentMacAddress.a[4],
- pAPort->PermanentMacAddress.a[5]))
-
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
- ("SkAddrInit: Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
- pAPort->CurrentMacAddress.a[0],
- pAPort->CurrentMacAddress.a[1],
- pAPort->CurrentMacAddress.a[2],
- pAPort->CurrentMacAddress.a[3],
- pAPort->CurrentMacAddress.a[4],
- pAPort->CurrentMacAddress.a[5]))
-#endif /* DEBUG */
- }
- /* pAC->Addr.InitDone = SK_INIT_IO; */
- break;
-
- case SK_INIT_RUN:
-#ifdef xDEBUG
- for (i = 0; i < SK_MAX_MACS; i++) {
- if (pAC->Addr.Port[i].NextExactMatchRlmt <
- SK_ADDR_FIRST_MATCH_RLMT) {
- Next0[i] |= 16;
- }
- }
-#endif /* DEBUG */
-
- /* pAC->Addr.InitDone = SK_INIT_RUN; */
- break;
-
- default: /* error */
- break;
- }
-
- return (SK_ADDR_SUCCESS);
-
-} /* SkAddrInit */
-
-
-/******************************************************************************
- *
- * SkAddrMcClear - clear the multicast table
- *
- * Description:
- * This routine clears the multicast table.
- *
- * If not suppressed by Flag SK_MC_SW_ONLY, the hardware is updated
- * immediately.
- *
- * It calls either SkAddrXmacMcClear or SkAddrGmacMcClear, according
- * to the adapter in use. The real work is done there.
- *
- * Context:
- * runtime, pageable
- * may be called starting with SK_INIT_DATA with flag SK_MC_SW_ONLY
- * may be called after SK_INIT_IO without limitation
- *
- * Returns:
- * SK_ADDR_SUCCESS
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrMcClear(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* Index of affected port */
-int Flags) /* permanent/non-perm, sw-only */
-{
- int ReturnCode;
-
- if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- ReturnCode = SkAddrXmacMcClear(pAC, IoC, PortNumber, Flags);
- }
- else {
- ReturnCode = SkAddrGmacMcClear(pAC, IoC, PortNumber, Flags);
- }
-
- return (ReturnCode);
-
-} /* SkAddrMcClear */
-
-
-/******************************************************************************
- *
- * SkAddrXmacMcClear - clear the multicast table
- *
- * Description:
- * This routine clears the multicast table
- * (either entry 2 or entries 3-16 and InexactFilter) of the given port.
- * If not suppressed by Flag SK_MC_SW_ONLY, the hardware is updated
- * immediately.
- *
- * Context:
- * runtime, pageable
- * may be called starting with SK_INIT_DATA with flag SK_MC_SW_ONLY
- * may be called after SK_INIT_IO without limitation
- *
- * Returns:
- * SK_ADDR_SUCCESS
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrXmacMcClear(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* Index of affected port */
-int Flags) /* permanent/non-perm, sw-only */
-{
- int i;
-
- if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
-
- /* Clear RLMT multicast addresses. */
- pAC->Addr.Port[PortNumber].NextExactMatchRlmt = SK_ADDR_FIRST_MATCH_RLMT;
- }
- else { /* not permanent => DRV */
-
- /* Clear InexactFilter */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0;
- }
-
- /* Clear DRV multicast addresses. */
-
- pAC->Addr.Port[PortNumber].NextExactMatchDrv = SK_ADDR_FIRST_MATCH_DRV;
- }
-
- if (!(Flags & SK_MC_SW_ONLY)) {
- (void) SkAddrXmacMcUpdate(pAC, IoC, PortNumber);
- }
-
- return (SK_ADDR_SUCCESS);
-
-} /* SkAddrXmacMcClear */
-
-
-/******************************************************************************
- *
- * SkAddrGmacMcClear - clear the multicast table
- *
- * Description:
- * This routine clears the multicast hashing table (InexactFilter)
- * (either the RLMT or the driver bits) of the given port.
- *
- * If not suppressed by Flag SK_MC_SW_ONLY, the hardware is updated
- * immediately.
- *
- * Context:
- * runtime, pageable
- * may be called starting with SK_INIT_DATA with flag SK_MC_SW_ONLY
- * may be called after SK_INIT_IO without limitation
- *
- * Returns:
- * SK_ADDR_SUCCESS
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrGmacMcClear(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* Index of affected port */
-int Flags) /* permanent/non-perm, sw-only */
-{
- int i;
-
-#ifdef DEBUG
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("GMAC InexactFilter (not cleared): %02X %02X %02X %02X %02X %02X %02X %02X\n",
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[1],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[2],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[3],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[4],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[5],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[6],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[7]))
-#endif /* DEBUG */
-
- /* Clear InexactFilter */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0;
- }
-
- if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
-
- /* Copy DRV bits to InexactFilter. */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[i];
-
- /* Clear InexactRlmtFilter. */
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[i] = 0;
-
- }
- }
- else { /* not permanent => DRV */
-
- /* Copy RLMT bits to InexactFilter. */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[i];
-
- /* Clear InexactDrvFilter. */
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[i] = 0;
- }
- }
-
-#ifdef DEBUG
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("GMAC InexactFilter (cleared): %02X %02X %02X %02X %02X %02X %02X %02X\n",
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[1],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[2],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[3],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[4],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[5],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[6],
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[7]))
-#endif /* DEBUG */
-
- if (!(Flags & SK_MC_SW_ONLY)) {
- (void) SkAddrGmacMcUpdate(pAC, IoC, PortNumber);
- }
-
- return (SK_ADDR_SUCCESS);
-
-} /* SkAddrGmacMcClear */
-
-#ifndef SK_ADDR_CHEAT
-
-/******************************************************************************
- *
- * SkXmacMcHash - hash multicast address
- *
- * Description:
- * This routine computes the hash value for a multicast address.
- * A CRC32 algorithm is used.
- *
- * Notes:
- * The code was adapted from the XaQti data sheet.
- *
- * Context:
- * runtime, pageable
- *
- * Returns:
- * Hash value of multicast address.
- */
-SK_U32 SkXmacMcHash(
-unsigned char *pMc) /* Multicast address */
-{
- SK_U32 Idx;
- SK_U32 Bit;
- SK_U32 Data;
- SK_U32 Crc;
-
- Crc = 0xFFFFFFFFUL;
- for (Idx = 0; Idx < SK_MAC_ADDR_LEN; Idx++) {
- Data = *pMc++;
- for (Bit = 0; Bit < 8; Bit++, Data >>= 1) {
- Crc = (Crc >> 1) ^ (((Crc ^ Data) & 1) ? XMAC_POLY : 0);
- }
- }
-
- return (Crc & ((1 << HASH_BITS) - 1));
-
-} /* SkXmacMcHash */
-
-
-/******************************************************************************
- *
- * SkGmacMcHash - hash multicast address
- *
- * Description:
- * This routine computes the hash value for a multicast address.
- * A CRC16 algorithm is used.
- *
- * Notes:
- *
- *
- * Context:
- * runtime, pageable
- *
- * Returns:
- * Hash value of multicast address.
- */
-SK_U32 SkGmacMcHash(
-unsigned char *pMc) /* Multicast address */
-{
- SK_U32 Data;
- SK_U32 TmpData;
- SK_U32 Crc;
- int Byte;
- int Bit;
-
- Crc = 0xFFFFFFFFUL;
- for (Byte = 0; Byte < 6; Byte++) {
- /* Get next byte. */
- Data = (SK_U32) pMc[Byte];
-
- /* Change bit order in byte. */
- TmpData = Data;
- for (Bit = 0; Bit < 8; Bit++) {
- if (TmpData & 1L) {
- Data |= 1L << (7 - Bit);
- }
- else {
- Data &= ~(1L << (7 - Bit));
- }
- TmpData >>= 1;
- }
-
- Crc ^= (Data << 24);
- for (Bit = 0; Bit < 8; Bit++) {
- if (Crc & 0x80000000) {
- Crc = (Crc << 1) ^ GMAC_POLY;
- }
- else {
- Crc <<= 1;
- }
- }
- }
-
- return (Crc & ((1 << HASH_BITS) - 1));
-
-} /* SkGmacMcHash */
-
-#endif /* not SK_ADDR_CHEAT */
-
-/******************************************************************************
- *
- * SkAddrMcAdd - add a multicast address to a port
- *
- * Description:
- * This routine enables reception for a given address on the given port.
- *
- * It calls either SkAddrXmacMcAdd or SkAddrGmacMcAdd, according to the
- * adapter in use. The real work is done there.
- *
- * Notes:
- * The return code is only valid for SK_PROM_MODE_NONE.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_DATA
- *
- * Returns:
- * SK_MC_FILTERING_EXACT
- * SK_MC_FILTERING_INEXACT
- * SK_MC_ILLEGAL_ADDRESS
- * SK_MC_ILLEGAL_PORT
- * SK_MC_RLMT_OVERFLOW
- */
-int SkAddrMcAdd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* Port Number */
-SK_MAC_ADDR *pMc, /* multicast address to be added */
-int Flags) /* permanent/non-permanent */
-{
- int ReturnCode;
-
- if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- ReturnCode = SkAddrXmacMcAdd(pAC, IoC, PortNumber, pMc, Flags);
- }
- else {
- ReturnCode = SkAddrGmacMcAdd(pAC, IoC, PortNumber, pMc, Flags);
- }
-
- return (ReturnCode);
-
-} /* SkAddrMcAdd */
-
-
-/******************************************************************************
- *
- * SkAddrXmacMcAdd - add a multicast address to a port
- *
- * Description:
- * This routine enables reception for a given address on the given port.
- *
- * Notes:
- * The return code is only valid for SK_PROM_MODE_NONE.
- *
- * The multicast bit is only checked if there are no free exact match
- * entries.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_DATA
- *
- * Returns:
- * SK_MC_FILTERING_EXACT
- * SK_MC_FILTERING_INEXACT
- * SK_MC_ILLEGAL_ADDRESS
- * SK_MC_RLMT_OVERFLOW
- */
-int SkAddrXmacMcAdd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* Port Number */
-SK_MAC_ADDR *pMc, /* multicast address to be added */
-int Flags) /* permanent/non-permanent */
-{
- int i;
- SK_U8 Inexact;
-#ifndef SK_ADDR_CHEAT
- SK_U32 HashBit;
-#endif /* !defined(SK_ADDR_CHEAT) */
-
- if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
-#ifdef xDEBUG
- if (pAC->Addr.Port[PortNumber].NextExactMatchRlmt <
- SK_ADDR_FIRST_MATCH_RLMT) {
- Next0[PortNumber] |= 1;
- return (SK_MC_RLMT_OVERFLOW);
- }
-#endif /* DEBUG */
-
- if (pAC->Addr.Port[PortNumber].NextExactMatchRlmt >
- SK_ADDR_LAST_MATCH_RLMT) {
- return (SK_MC_RLMT_OVERFLOW);
- }
-
- /* Set a RLMT multicast address. */
-
- pAC->Addr.Port[PortNumber].Exact[
- pAC->Addr.Port[PortNumber].NextExactMatchRlmt++] = *pMc;
-
- return (SK_MC_FILTERING_EXACT);
- }
-
-#ifdef xDEBUG
- if (pAC->Addr.Port[PortNumber].NextExactMatchDrv <
- SK_ADDR_FIRST_MATCH_DRV) {
- Next0[PortNumber] |= 2;
- return (SK_MC_RLMT_OVERFLOW);
- }
-#endif /* DEBUG */
-
- if (pAC->Addr.Port[PortNumber].NextExactMatchDrv <= SK_ADDR_LAST_MATCH_DRV) {
-
- /* Set exact match entry. */
- pAC->Addr.Port[PortNumber].Exact[
- pAC->Addr.Port[PortNumber].NextExactMatchDrv++] = *pMc;
-
- /* Clear InexactFilter */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0;
- }
- }
- else {
- if (!(pMc->a[0] & SK_MC_BIT)) {
- /* Hashing only possible with multicast addresses. */
- return (SK_MC_ILLEGAL_ADDRESS);
- }
-#ifndef SK_ADDR_CHEAT
- /* Compute hash value of address. */
- HashBit = 63 - SkXmacMcHash(&pMc->a[0]);
-
- /* Add bit to InexactFilter. */
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[HashBit / 8] |=
- 1 << (HashBit % 8);
-#else /* SK_ADDR_CHEAT */
- /* Set all bits in InexactFilter. */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0xFF;
- }
-#endif /* SK_ADDR_CHEAT */
- }
-
- for (Inexact = 0, i = 0; i < 8; i++) {
- Inexact |= pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i];
- }
-
- if (Inexact == 0 && pAC->Addr.Port[PortNumber].PromMode == 0) {
- return (SK_MC_FILTERING_EXACT);
- }
- else {
- return (SK_MC_FILTERING_INEXACT);
- }
-
-} /* SkAddrXmacMcAdd */
-
-
-/******************************************************************************
- *
- * SkAddrGmacMcAdd - add a multicast address to a port
- *
- * Description:
- * This routine enables reception for a given address on the given port.
- *
- * Notes:
- * The return code is only valid for SK_PROM_MODE_NONE.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_DATA
- *
- * Returns:
- * SK_MC_FILTERING_INEXACT
- * SK_MC_ILLEGAL_ADDRESS
- */
-int SkAddrGmacMcAdd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* Port Number */
-SK_MAC_ADDR *pMc, /* multicast address to be added */
-int Flags) /* permanent/non-permanent */
-{
- int i;
-#ifndef SK_ADDR_CHEAT
- SK_U32 HashBit;
-#endif /* !defined(SK_ADDR_CHEAT) */
-
- if (!(pMc->a[0] & SK_MC_BIT)) {
- /* Hashing only possible with multicast addresses. */
- return (SK_MC_ILLEGAL_ADDRESS);
- }
-
-#ifndef SK_ADDR_CHEAT
-
- /* Compute hash value of address. */
- HashBit = SkGmacMcHash(&pMc->a[0]);
-
- if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
-
- /* Add bit to InexactRlmtFilter. */
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[HashBit / 8] |=
- 1 << (HashBit % 8);
-
- /* Copy bit to InexactFilter. */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[i];
- }
-#ifdef DEBUG
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("GMAC InexactRlmtFilter: %02X %02X %02X %02X %02X %02X %02X %02X\n",
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[0],
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[1],
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[2],
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[3],
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[4],
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[5],
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[6],
- pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[7]))
-#endif /* DEBUG */
- }
- else { /* not permanent => DRV */
-
- /* Add bit to InexactDrvFilter. */
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[HashBit / 8] |=
- 1 << (HashBit % 8);
-
- /* Copy bit to InexactFilter. */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[i];
- }
-#ifdef DEBUG
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("GMAC InexactDrvFilter: %02X %02X %02X %02X %02X %02X %02X %02X\n",
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[0],
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[1],
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[2],
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[3],
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[4],
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[5],
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[6],
- pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[7]))
-#endif /* DEBUG */
- }
-
-#else /* SK_ADDR_CHEAT */
-
- /* Set all bits in InexactFilter. */
- for (i = 0; i < 8; i++) {
- pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0xFF;
- }
-#endif /* SK_ADDR_CHEAT */
-
- return (SK_MC_FILTERING_INEXACT);
-
-} /* SkAddrGmacMcAdd */
-
-
-/******************************************************************************
- *
- * SkAddrMcUpdate - update the HW MC address table and set the MAC address
- *
- * Description:
- * This routine enables reception of the addresses contained in a local
- * table for a given port.
- * It also programs the port's current physical MAC address.
- *
- * It calls either SkAddrXmacMcUpdate or SkAddrGmacMcUpdate, according
- * to the adapter in use. The real work is done there.
- *
- * Notes:
- * The return code is only valid for SK_PROM_MODE_NONE.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_MC_FILTERING_EXACT
- * SK_MC_FILTERING_INEXACT
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrMcUpdate(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber) /* Port Number */
-{
- int ReturnCode;
-
- if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- ReturnCode = SkAddrXmacMcUpdate(pAC, IoC, PortNumber);
- }
- else {
- ReturnCode = SkAddrGmacMcUpdate(pAC, IoC, PortNumber);
- }
-
- return (ReturnCode);
-
-} /* SkAddrMcUpdate */
-
-
-/******************************************************************************
- *
- * SkAddrXmacMcUpdate - update the HW MC address table and set the MAC address
- *
- * Description:
- * This routine enables reception of the addresses contained in a local
- * table for a given port.
- * It also programs the port's current physical MAC address.
- *
- * Notes:
- * The return code is only valid for SK_PROM_MODE_NONE.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_MC_FILTERING_EXACT
- * SK_MC_FILTERING_INEXACT
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrXmacMcUpdate(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber) /* Port Number */
-{
- SK_U32 i;
- SK_U8 Inexact;
- SK_U16 *OutAddr;
- SK_ADDR_PORT *pAPort;
-
- SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("SkAddrXmacMcUpdate on Port %u.\n", PortNumber))
-
- pAPort = &pAC->Addr.Port[PortNumber];
-
-#ifdef DEBUG
- SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("Next0 on Port %d: %d\n", PortNumber, Next0[PortNumber]))
-#endif /* DEBUG */
-
- /* Start with 0 to also program the logical MAC address. */
- for (i = 0; i < pAPort->NextExactMatchRlmt; i++) {
- /* Set exact match address i on XMAC */
- OutAddr = (SK_U16 *) &pAPort->Exact[i].a[0];
- XM_OUTADDR(IoC, PortNumber, XM_EXM(i), OutAddr);
- }
-
- /* Clear other permanent exact match addresses on XMAC */
- if (pAPort->NextExactMatchRlmt <= SK_ADDR_LAST_MATCH_RLMT) {
-
- SkXmClrExactAddr(pAC, IoC, PortNumber, pAPort->NextExactMatchRlmt,
- SK_ADDR_LAST_MATCH_RLMT);
- }
-
- for (i = pAPort->FirstExactMatchDrv; i < pAPort->NextExactMatchDrv; i++) {
- OutAddr = (SK_U16 *) &pAPort->Exact[i].a[0];
- XM_OUTADDR(IoC, PortNumber, XM_EXM(i), OutAddr);
- }
-
- /* Clear other non-permanent exact match addresses on XMAC */
- if (pAPort->NextExactMatchDrv <= SK_ADDR_LAST_MATCH_DRV) {
-
- SkXmClrExactAddr(pAC, IoC, PortNumber, pAPort->NextExactMatchDrv,
- SK_ADDR_LAST_MATCH_DRV);
- }
-
- for (Inexact = 0, i = 0; i < 8; i++) {
- Inexact |= pAPort->InexactFilter.Bytes[i];
- }
-
- if (pAPort->PromMode & SK_PROM_MODE_ALL_MC) {
-
- /* Set all bits in 64-bit hash register. */
- XM_OUTHASH(IoC, PortNumber, XM_HSM, &OnesHash);
-
- /* Enable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
- else if (Inexact != 0) {
-
- /* Set 64-bit hash register to InexactFilter. */
- XM_OUTHASH(IoC, PortNumber, XM_HSM, &pAPort->InexactFilter.Bytes[0]);
-
- /* Enable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
- else {
- /* Disable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_FALSE);
- }
-
- if (pAPort->PromMode != SK_PROM_MODE_NONE) {
- (void) SkAddrXmacPromiscuousChange(pAC, IoC, PortNumber, pAPort->PromMode);
- }
-
- /* Set port's current physical MAC address. */
- OutAddr = (SK_U16 *) &pAPort->CurrentMacAddress.a[0];
-
- XM_OUTADDR(IoC, PortNumber, XM_SA, OutAddr);
-
-#ifdef xDEBUG
- for (i = 0; i < pAPort->NextExactMatchRlmt; i++) {
- SK_U8 InAddr8[6];
- SK_U16 *InAddr;
-
- /* Get exact match address i from port PortNumber. */
- InAddr = (SK_U16 *) &InAddr8[0];
-
- XM_INADDR(IoC, PortNumber, XM_EXM(i), InAddr);
-
- SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("SkAddrXmacMcUpdate: MC address %d on Port %u: ",
- "%02x %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x\n",
- i,
- PortNumber,
- InAddr8[0],
- InAddr8[1],
- InAddr8[2],
- InAddr8[3],
- InAddr8[4],
- InAddr8[5],
- pAPort->Exact[i].a[0],
- pAPort->Exact[i].a[1],
- pAPort->Exact[i].a[2],
- pAPort->Exact[i].a[3],
- pAPort->Exact[i].a[4],
- pAPort->Exact[i].a[5]))
- }
-#endif /* DEBUG */
-
- /* Determine return value. */
- if (Inexact == 0 && pAPort->PromMode == 0) {
- return (SK_MC_FILTERING_EXACT);
- }
- else {
- return (SK_MC_FILTERING_INEXACT);
- }
-
-} /* SkAddrXmacMcUpdate */
-
-
-/******************************************************************************
- *
- * SkAddrGmacMcUpdate - update the HW MC address table and set the MAC address
- *
- * Description:
- * This routine enables reception of the addresses contained in a local
- * table for a given port.
- * It also programs the port's current physical MAC address.
- *
- * Notes:
- * The return code is only valid for SK_PROM_MODE_NONE.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_MC_FILTERING_EXACT
- * SK_MC_FILTERING_INEXACT
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrGmacMcUpdate(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber) /* Port Number */
-{
- SK_U32 i;
- SK_U8 Inexact;
- SK_U16 *OutAddr;
- SK_ADDR_PORT *pAPort;
-
- SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("SkAddrGmacMcUpdate on Port %u.\n", PortNumber))
-
- pAPort = &pAC->Addr.Port[PortNumber];
-
-#ifdef DEBUG
- SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("Next0 on Port %d: %d\n", PortNumber, Next0[PortNumber]))
-#endif /* DEBUG */
-
- for (Inexact = 0, i = 0; i < 8; i++) {
- Inexact |= pAPort->InexactFilter.Bytes[i];
- }
-
- /* Set 64-bit hash register to InexactFilter. */
- GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1,
- &pAPort->InexactFilter.Bytes[0]);
-
- if (pAPort->PromMode & SK_PROM_MODE_ALL_MC) {
-
- /* Set all bits in 64-bit hash register. */
- GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1, &OnesHash);
-
- /* Enable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
- else {
- /* Enable Hashing. */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
-
- if (pAPort->PromMode != SK_PROM_MODE_NONE) {
- (void) SkAddrGmacPromiscuousChange(pAC, IoC, PortNumber, pAPort->PromMode);
- }
-
- /* Set port's current physical MAC address. */
- OutAddr = (SK_U16 *) &pAPort->CurrentMacAddress.a[0];
- GM_OUTADDR(IoC, PortNumber, GM_SRC_ADDR_1L, OutAddr);
-
- /* Set port's current logical MAC address. */
- OutAddr = (SK_U16 *) &pAPort->Exact[0].a[0];
- GM_OUTADDR(IoC, PortNumber, GM_SRC_ADDR_2L, OutAddr);
-
-#ifdef DEBUG
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("SkAddrGmacMcUpdate: Permanent Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
- pAPort->Exact[0].a[0],
- pAPort->Exact[0].a[1],
- pAPort->Exact[0].a[2],
- pAPort->Exact[0].a[3],
- pAPort->Exact[0].a[4],
- pAPort->Exact[0].a[5]))
-
- SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("SkAddrGmacMcUpdate: Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
- pAPort->CurrentMacAddress.a[0],
- pAPort->CurrentMacAddress.a[1],
- pAPort->CurrentMacAddress.a[2],
- pAPort->CurrentMacAddress.a[3],
- pAPort->CurrentMacAddress.a[4],
- pAPort->CurrentMacAddress.a[5]))
-#endif /* DEBUG */
-
- /* Determine return value. */
- if (Inexact == 0 && pAPort->PromMode == 0) {
- return (SK_MC_FILTERING_EXACT);
- }
- else {
- return (SK_MC_FILTERING_INEXACT);
- }
-
-} /* SkAddrGmacMcUpdate */
-
-
-/******************************************************************************
- *
- * SkAddrOverride - override a port's MAC address
- *
- * Description:
- * This routine overrides the MAC address of one port.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_ADDR_SUCCESS if successful.
- * SK_ADDR_DUPLICATE_ADDRESS if duplicate MAC address.
- * SK_ADDR_MULTICAST_ADDRESS if multicast or broadcast address.
- * SK_ADDR_TOO_EARLY if SK_INIT_IO was not executed before.
- */
-int SkAddrOverride(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* Port Number */
-SK_MAC_ADDR *pNewAddr, /* new MAC address */
-int Flags) /* logical/physical MAC address */
-{
- SK_EVPARA Para;
- SK_U32 NetNumber;
- SK_U32 i;
- SK_U16 *OutAddr;
-
- NetNumber = pAC->Rlmt.Port[PortNumber].Net->NetNumber;
-
- if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- if (pNewAddr != NULL && (pNewAddr->a[0] & SK_MC_BIT) != 0) {
- return (SK_ADDR_MULTICAST_ADDRESS);
- }
-
- if (!pAC->Addr.Net[NetNumber].CurrentMacAddressSet) {
- return (SK_ADDR_TOO_EARLY);
- }
-
- if (Flags & SK_ADDR_SET_LOGICAL) { /* Activate logical MAC address. */
- /* Parameter *pNewAddr is ignored. */
- for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
- if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
- return (SK_ADDR_TOO_EARLY);
- }
- }
-
- /* Set PortNumber to number of net's active port. */
- PortNumber = pAC->Rlmt.Net[NetNumber].
- Port[pAC->Addr.Net[NetNumber].ActivePort]->PortNumber;
-
- pAC->Addr.Port[PortNumber].Exact[0] =
- pAC->Addr.Net[NetNumber].CurrentMacAddress;
-
- /* Write address to first exact match entry of active port. */
- (void) SkAddrMcUpdate(pAC, IoC, PortNumber);
- }
- else if (Flags & SK_ADDR_CLEAR_LOGICAL) {
- /* Deactivate logical MAC address. */
- /* Parameter *pNewAddr is ignored. */
- for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
- if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
- return (SK_ADDR_TOO_EARLY);
- }
- }
-
- /* Set PortNumber to number of net's active port. */
- PortNumber = pAC->Rlmt.Net[NetNumber].
- Port[pAC->Addr.Net[NetNumber].ActivePort]->PortNumber;
-
- for (i = 0; i < SK_MAC_ADDR_LEN; i++ ) {
- pAC->Addr.Port[PortNumber].Exact[0].a[i] = 0;
- }
-
- /* Write address to first exact match entry of active port. */
- (void) SkAddrMcUpdate(pAC, IoC, PortNumber);
- }
- else if (Flags & SK_ADDR_PHYSICAL_ADDRESS) { /* Physical MAC address. */
- if (SK_ADDR_EQUAL(pNewAddr->a,
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a)) {
- return (SK_ADDR_DUPLICATE_ADDRESS);
- }
-
- for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
- if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
- return (SK_ADDR_TOO_EARLY);
- }
-
- if (SK_ADDR_EQUAL(pNewAddr->a,
- pAC->Addr.Port[i].CurrentMacAddress.a)) {
- if (i == PortNumber) {
- return (SK_ADDR_SUCCESS);
- }
- else {
- return (SK_ADDR_DUPLICATE_ADDRESS);
- }
- }
- }
-
- pAC->Addr.Port[PortNumber].PreviousMacAddress =
- pAC->Addr.Port[PortNumber].CurrentMacAddress;
- pAC->Addr.Port[PortNumber].CurrentMacAddress = *pNewAddr;
-
- /* Change port's physical MAC address. */
- OutAddr = (SK_U16 *) pNewAddr;
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- XM_OUTADDR(IoC, PortNumber, XM_SA, OutAddr);
- }
- else {
- GM_OUTADDR(IoC, PortNumber, GM_SRC_ADDR_1L, OutAddr);
- }
-
- /* Report address change to RLMT. */
- Para.Para32[0] = PortNumber;
- Para.Para32[0] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_PORT_ADDR, Para);
- }
- else { /* Logical MAC address. */
- if (SK_ADDR_EQUAL(pNewAddr->a,
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a)) {
- return (SK_ADDR_SUCCESS);
- }
-
- for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
- if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
- return (SK_ADDR_TOO_EARLY);
- }
-
- if (SK_ADDR_EQUAL(pNewAddr->a,
- pAC->Addr.Port[i].CurrentMacAddress.a)) {
- return (SK_ADDR_DUPLICATE_ADDRESS);
- }
- }
-
- /*
- * In case that the physical and the logical MAC addresses are equal
- * we must also change the physical MAC address here.
- * In this case we have an adapter which initially was programmed with
- * two identical MAC addresses.
- */
- if (SK_ADDR_EQUAL(pAC->Addr.Port[PortNumber].CurrentMacAddress.a,
- pAC->Addr.Port[PortNumber].Exact[0].a)) {
-
- pAC->Addr.Port[PortNumber].PreviousMacAddress =
- pAC->Addr.Port[PortNumber].CurrentMacAddress;
- pAC->Addr.Port[PortNumber].CurrentMacAddress = *pNewAddr;
-
- /* Report address change to RLMT. */
- Para.Para32[0] = PortNumber;
- Para.Para32[0] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_PORT_ADDR, Para);
- }
-
- /* Set PortNumber to number of net's active port. */
- PortNumber = pAC->Rlmt.Net[NetNumber].
- Port[pAC->Addr.Net[NetNumber].ActivePort]->PortNumber;
-
- pAC->Addr.Net[NetNumber].CurrentMacAddress = *pNewAddr;
- pAC->Addr.Port[PortNumber].Exact[0] = *pNewAddr;
-#ifdef DEBUG
- SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("SkAddrOverride: Permanent MAC Address: %02X %02X %02X %02X %02X %02X\n",
- pAC->Addr.Net[NetNumber].PermanentMacAddress.a[0],
- pAC->Addr.Net[NetNumber].PermanentMacAddress.a[1],
- pAC->Addr.Net[NetNumber].PermanentMacAddress.a[2],
- pAC->Addr.Net[NetNumber].PermanentMacAddress.a[3],
- pAC->Addr.Net[NetNumber].PermanentMacAddress.a[4],
- pAC->Addr.Net[NetNumber].PermanentMacAddress.a[5]))
-
- SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
- ("SkAddrOverride: New logical MAC Address: %02X %02X %02X %02X %02X %02X\n",
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a[0],
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a[1],
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a[2],
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a[3],
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a[4],
- pAC->Addr.Net[NetNumber].CurrentMacAddress.a[5]))
-#endif /* DEBUG */
-
- /* Write address to first exact match entry of active port. */
- (void) SkAddrMcUpdate(pAC, IoC, PortNumber);
- }
-
- return (SK_ADDR_SUCCESS);
-
-} /* SkAddrOverride */
-
-
-/******************************************************************************
- *
- * SkAddrPromiscuousChange - set promiscuous mode for given port
- *
- * Description:
- * This routine manages promiscuous mode:
- * - none
- * - all LLC frames
- * - all MC frames
- *
- * It calls either SkAddrXmacPromiscuousChange or
- * SkAddrGmacPromiscuousChange, according to the adapter in use.
- * The real work is done there.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_ADDR_SUCCESS
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrPromiscuousChange(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* port whose promiscuous mode changes */
-int NewPromMode) /* new promiscuous mode */
-{
- int ReturnCode;
-
- if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- ReturnCode = SkAddrXmacPromiscuousChange(pAC, IoC, PortNumber, NewPromMode);
- }
- else {
- ReturnCode = SkAddrGmacPromiscuousChange(pAC, IoC, PortNumber, NewPromMode);
- }
-
- return (ReturnCode);
-
-} /* SkAddrPromiscuousChange */
-
-
-/******************************************************************************
- *
- * SkAddrXmacPromiscuousChange - set promiscuous mode for given port
- *
- * Description:
- * This routine manages promiscuous mode:
- * - none
- * - all LLC frames
- * - all MC frames
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_ADDR_SUCCESS
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrXmacPromiscuousChange(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* port whose promiscuous mode changes */
-int NewPromMode) /* new promiscuous mode */
-{
- int i;
- SK_BOOL InexactModeBit;
- SK_U8 Inexact;
- SK_U8 HwInexact;
- SK_FILTER64 HwInexactFilter;
- SK_U16 LoMode; /* Lower 16 bits of XMAC Mode Register. */
- int CurPromMode = SK_PROM_MODE_NONE;
-
- /* Read CurPromMode from Hardware. */
- XM_IN16(IoC, PortNumber, XM_MODE, &LoMode);
-
- if ((LoMode & XM_MD_ENA_PROM) != 0) {
- /* Promiscuous mode! */
- CurPromMode |= SK_PROM_MODE_LLC;
- }
-
- for (Inexact = 0xFF, i = 0; i < 8; i++) {
- Inexact &= pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i];
- }
- if (Inexact == 0xFF) {
- CurPromMode |= (pAC->Addr.Port[PortNumber].PromMode & SK_PROM_MODE_ALL_MC);
- }
- else {
- /* Get InexactModeBit (bit XM_MD_ENA_HASH in mode register) */
- XM_IN16(IoC, PortNumber, XM_MODE, &LoMode);
-
- InexactModeBit = (LoMode & XM_MD_ENA_HASH) != 0;
-
- /* Read 64-bit hash register from XMAC */
- XM_INHASH(IoC, PortNumber, XM_HSM, &HwInexactFilter.Bytes[0]);
-
- for (HwInexact = 0xFF, i = 0; i < 8; i++) {
- HwInexact &= HwInexactFilter.Bytes[i];
- }
-
- if (InexactModeBit && (HwInexact == 0xFF)) {
- CurPromMode |= SK_PROM_MODE_ALL_MC;
- }
- }
-
- pAC->Addr.Port[PortNumber].PromMode = NewPromMode;
-
- if (NewPromMode == CurPromMode) {
- return (SK_ADDR_SUCCESS);
- }
-
- if ((NewPromMode & SK_PROM_MODE_ALL_MC) &&
- !(CurPromMode & SK_PROM_MODE_ALL_MC)) { /* All MC. */
-
- /* Set all bits in 64-bit hash register. */
- XM_OUTHASH(IoC, PortNumber, XM_HSM, &OnesHash);
-
- /* Enable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
- else if ((CurPromMode & SK_PROM_MODE_ALL_MC) &&
- !(NewPromMode & SK_PROM_MODE_ALL_MC)) { /* Norm MC. */
- for (Inexact = 0, i = 0; i < 8; i++) {
- Inexact |= pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i];
- }
- if (Inexact == 0) {
- /* Disable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_FALSE);
- }
- else {
- /* Set 64-bit hash register to InexactFilter. */
- XM_OUTHASH(IoC, PortNumber, XM_HSM,
- &pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0]);
-
- /* Enable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
- }
-
- if ((NewPromMode & SK_PROM_MODE_LLC) &&
- !(CurPromMode & SK_PROM_MODE_LLC)) { /* Prom. LLC */
- /* Set the MAC in Promiscuous Mode */
- SkMacPromiscMode(pAC, IoC, PortNumber, SK_TRUE);
- }
- else if ((CurPromMode & SK_PROM_MODE_LLC) &&
- !(NewPromMode & SK_PROM_MODE_LLC)) { /* Norm. LLC. */
- /* Clear Promiscuous Mode */
- SkMacPromiscMode(pAC, IoC, PortNumber, SK_FALSE);
- }
-
- return (SK_ADDR_SUCCESS);
-
-} /* SkAddrXmacPromiscuousChange */
-
-
-/******************************************************************************
- *
- * SkAddrGmacPromiscuousChange - set promiscuous mode for given port
- *
- * Description:
- * This routine manages promiscuous mode:
- * - none
- * - all LLC frames
- * - all MC frames
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_ADDR_SUCCESS
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrGmacPromiscuousChange(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 PortNumber, /* port whose promiscuous mode changes */
-int NewPromMode) /* new promiscuous mode */
-{
- SK_U16 ReceiveControl; /* GMAC Receive Control Register */
- int CurPromMode = SK_PROM_MODE_NONE;
-
- /* Read CurPromMode from Hardware. */
- GM_IN16(IoC, PortNumber, GM_RX_CTRL, &ReceiveControl);
-
- if ((ReceiveControl & (GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA)) == 0) {
- /* Promiscuous mode! */
- CurPromMode |= SK_PROM_MODE_LLC;
- }
-
- if ((ReceiveControl & GM_RXCR_MCF_ENA) == 0) {
- /* All Multicast mode! */
- CurPromMode |= (pAC->Addr.Port[PortNumber].PromMode & SK_PROM_MODE_ALL_MC);
- }
-
- pAC->Addr.Port[PortNumber].PromMode = NewPromMode;
-
- if (NewPromMode == CurPromMode) {
- return (SK_ADDR_SUCCESS);
- }
-
- if ((NewPromMode & SK_PROM_MODE_ALL_MC) &&
- !(CurPromMode & SK_PROM_MODE_ALL_MC)) { /* All MC */
-
- /* Set all bits in 64-bit hash register. */
- GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1, &OnesHash);
-
- /* Enable Hashing */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
-
- if ((CurPromMode & SK_PROM_MODE_ALL_MC) &&
- !(NewPromMode & SK_PROM_MODE_ALL_MC)) { /* Norm. MC */
-
- /* Set 64-bit hash register to InexactFilter. */
- GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1,
- &pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0]);
-
- /* Enable Hashing. */
- SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
- }
-
- if ((NewPromMode & SK_PROM_MODE_LLC) &&
- !(CurPromMode & SK_PROM_MODE_LLC)) { /* Prom. LLC */
-
- /* Set the MAC to Promiscuous Mode. */
- SkMacPromiscMode(pAC, IoC, PortNumber, SK_TRUE);
- }
- else if ((CurPromMode & SK_PROM_MODE_LLC) &&
- !(NewPromMode & SK_PROM_MODE_LLC)) { /* Norm. LLC */
-
- /* Clear Promiscuous Mode. */
- SkMacPromiscMode(pAC, IoC, PortNumber, SK_FALSE);
- }
-
- return (SK_ADDR_SUCCESS);
-
-} /* SkAddrGmacPromiscuousChange */
-
-
-/******************************************************************************
- *
- * SkAddrSwap - swap address info
- *
- * Description:
- * This routine swaps address info of two ports.
- *
- * Context:
- * runtime, pageable
- * may be called after SK_INIT_IO
- *
- * Returns:
- * SK_ADDR_SUCCESS
- * SK_ADDR_ILLEGAL_PORT
- */
-int SkAddrSwap(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-SK_U32 FromPortNumber, /* Port1 Index */
-SK_U32 ToPortNumber) /* Port2 Index */
-{
- int i;
- SK_U8 Byte;
- SK_MAC_ADDR MacAddr;
- SK_U32 DWord;
-
- if (FromPortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- if (ToPortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- if (pAC->Rlmt.Port[FromPortNumber].Net != pAC->Rlmt.Port[ToPortNumber].Net) {
- return (SK_ADDR_ILLEGAL_PORT);
- }
-
- /*
- * Swap:
- * - Exact Match Entries (GEnesis and Yukon)
- * Yukon uses first entry for the logical MAC
- * address (stored in the second GMAC register).
- * - FirstExactMatchRlmt (GEnesis only)
- * - NextExactMatchRlmt (GEnesis only)
- * - FirstExactMatchDrv (GEnesis only)
- * - NextExactMatchDrv (GEnesis only)
- * - 64-bit filter (InexactFilter)
- * - Promiscuous Mode
- * of ports.
- */
-
- for (i = 0; i < SK_ADDR_EXACT_MATCHES; i++) {
- MacAddr = pAC->Addr.Port[FromPortNumber].Exact[i];
- pAC->Addr.Port[FromPortNumber].Exact[i] =
- pAC->Addr.Port[ToPortNumber].Exact[i];
- pAC->Addr.Port[ToPortNumber].Exact[i] = MacAddr;
- }
-
- for (i = 0; i < 8; i++) {
- Byte = pAC->Addr.Port[FromPortNumber].InexactFilter.Bytes[i];
- pAC->Addr.Port[FromPortNumber].InexactFilter.Bytes[i] =
- pAC->Addr.Port[ToPortNumber].InexactFilter.Bytes[i];
- pAC->Addr.Port[ToPortNumber].InexactFilter.Bytes[i] = Byte;
- }
-
- i = pAC->Addr.Port[FromPortNumber].PromMode;
- pAC->Addr.Port[FromPortNumber].PromMode = pAC->Addr.Port[ToPortNumber].PromMode;
- pAC->Addr.Port[ToPortNumber].PromMode = i;
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- DWord = pAC->Addr.Port[FromPortNumber].FirstExactMatchRlmt;
- pAC->Addr.Port[FromPortNumber].FirstExactMatchRlmt =
- pAC->Addr.Port[ToPortNumber].FirstExactMatchRlmt;
- pAC->Addr.Port[ToPortNumber].FirstExactMatchRlmt = DWord;
-
- DWord = pAC->Addr.Port[FromPortNumber].NextExactMatchRlmt;
- pAC->Addr.Port[FromPortNumber].NextExactMatchRlmt =
- pAC->Addr.Port[ToPortNumber].NextExactMatchRlmt;
- pAC->Addr.Port[ToPortNumber].NextExactMatchRlmt = DWord;
-
- DWord = pAC->Addr.Port[FromPortNumber].FirstExactMatchDrv;
- pAC->Addr.Port[FromPortNumber].FirstExactMatchDrv =
- pAC->Addr.Port[ToPortNumber].FirstExactMatchDrv;
- pAC->Addr.Port[ToPortNumber].FirstExactMatchDrv = DWord;
-
- DWord = pAC->Addr.Port[FromPortNumber].NextExactMatchDrv;
- pAC->Addr.Port[FromPortNumber].NextExactMatchDrv =
- pAC->Addr.Port[ToPortNumber].NextExactMatchDrv;
- pAC->Addr.Port[ToPortNumber].NextExactMatchDrv = DWord;
- }
-
- /* CAUTION: Solution works if only ports of one adapter are in use. */
- for (i = 0; (SK_U32) i < pAC->Rlmt.Net[pAC->Rlmt.Port[ToPortNumber].
- Net->NetNumber].NumPorts; i++) {
- if (pAC->Rlmt.Net[pAC->Rlmt.Port[ToPortNumber].Net->NetNumber].
- Port[i]->PortNumber == ToPortNumber) {
- pAC->Addr.Net[pAC->Rlmt.Port[ToPortNumber].Net->NetNumber].
- ActivePort = i;
- /* 20001207 RA: Was "ToPortNumber;". */
- }
- }
-
- (void) SkAddrMcUpdate(pAC, IoC, FromPortNumber);
- (void) SkAddrMcUpdate(pAC, IoC, ToPortNumber);
-
- return (SK_ADDR_SUCCESS);
-
-} /* SkAddrSwap */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+/******************************************************************************
+ *
+ * Name: skaddr.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Manage Addresses (Multicast and Unicast) and Promiscuous Mode.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skaddr.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.48 2003/02/12 17:09:37 tschilli
+ * Fix in SkAddrOverride() to set both (physical and logical) MAC addresses
+ * in case that both addresses are identical.
+ *
+ * Revision 1.47 2002/09/17 06:31:10 tschilli
+ * Handling of SK_PROM_MODE_ALL_MC flag in SkAddrGmacMcUpdate()
+ * and SkAddrGmacPromiscuousChange() fixed.
+ * Editorial changes.
+ *
+ * Revision 1.46 2002/08/22 07:55:41 tschilli
+ * New function SkGmacMcHash() for GMAC multicast hashing algorithm added.
+ * Editorial changes.
+ *
+ * Revision 1.45 2002/08/15 12:29:35 tschilli
+ * SkAddrGmacMcUpdate() and SkAddrGmacPromiscuousChange() changed.
+ *
+ * Revision 1.44 2002/08/14 12:18:03 rschmidt
+ * Replaced direct handling of MAC Hashing (XMAC and GMAC)
+ * with routine SkMacHashing().
+ * Replaced wrong 3rd para 'i' with 'PortNumber' in SkMacPromiscMode().
+ *
+ * Revision 1.43 2002/08/13 09:37:43 rschmidt
+ * Corrected some SK_DBG_MSG outputs.
+ * Replaced wrong 2nd para pAC with IoC in SkMacPromiscMode().
+ * Editorial changes.
+ *
+ * Revision 1.42 2002/08/12 11:24:36 rschmidt
+ * Remove setting of logical MAC address GM_SRC_ADDR_2 in SkAddrInit().
+ * Replaced direct handling of MAC Promiscuous Mode (XMAC and GMAC)
+ * with routine SkMacPromiscMode().
+ * Editorial changes.
+ *
+ * Revision 1.41 2002/06/10 13:52:18 tschilli
+ * Changes for handling YUKON.
+ * All changes are internally and not visible to the programmer
+ * using this module.
+ *
+ * Revision 1.40 2001/02/14 14:04:59 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.39 2001/01/30 10:30:04 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.38 2001/01/25 16:26:52 rassmann
+ * Ensured that logical address overrides are done on net's active port.
+ *
+ * Revision 1.37 2001/01/22 13:41:34 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.36 2000/08/07 11:10:39 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.35 2000/05/04 09:38:41 rassmann
+ * Editorial changes.
+ * Corrected multicast address hashing.
+ *
+ * Revision 1.34 1999/11/22 13:23:44 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.33 1999/05/28 10:56:06 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.32 1999/03/31 10:59:20 rassmann
+ * Returning Success instead of DupAddr if address shall be overridden
+ * with same value.
+ *
+ * Revision 1.31 1999/01/14 16:18:17 rassmann
+ * Corrected multicast initialization.
+ *
+ * Revision 1.30 1999/01/04 10:30:35 rassmann
+ * SkAddrOverride only possible after SK_INIT_IO phase.
+ *
+ * Revision 1.29 1998/12/29 13:13:10 rassmann
+ * An address override is now preserved in the SK_INIT_IO phase.
+ * All functions return an int now.
+ * Extended parameter checking.
+ *
+ * Revision 1.28 1998/12/01 11:45:53 rassmann
+ * Code cleanup.
+ *
+ * Revision 1.27 1998/12/01 09:22:49 rassmann
+ * SkAddrMcAdd and SkAddrMcUpdate returned SK_MC_FILTERING_INEXACT
+ * too often.
+ *
+ * Revision 1.26 1998/11/24 12:39:44 rassmann
+ * Reserved multicast entry for BPDU address.
+ * 13 multicast entries left for protocol.
+ *
+ * Revision 1.25 1998/11/17 16:54:23 rassmann
+ * Using exact match for up to 14 multicast addresses.
+ * Still receiving all multicasts if more addresses are added.
+ *
+ * Revision 1.24 1998/11/13 17:24:31 rassmann
+ * Changed return value of SkAddrOverride to int.
+ *
+ * Revision 1.23 1998/11/13 16:56:18 rassmann
+ * Added macro SK_ADDR_COMPARE.
+ * Changed return type of SkAddrOverride to SK_BOOL.
+ *
+ * Revision 1.22 1998/11/04 17:06:17 rassmann
+ * Corrected McUpdate and PromiscuousChange functions.
+ *
+ * Revision 1.21 1998/10/29 14:34:04 rassmann
+ * Clearing SK_ADDR struct at startup.
+ *
+ * Revision 1.20 1998/10/28 18:16:34 rassmann
+ * Avoiding I/Os before SK_INIT_RUN level.
+ * Aligning InexactFilter.
+ *
+ * Revision 1.19 1998/10/28 11:29:28 rassmann
+ * Programming physical address in SkAddrMcUpdate.
+ * Corrected programming of exact match entries.
+ *
+ * Revision 1.18 1998/10/28 10:34:48 rassmann
+ * Corrected reading of physical addresses.
+ *
+ * Revision 1.17 1998/10/28 10:26:13 rassmann
+ * Getting ports' current MAC addresses from EPROM now.
+ * Added debug output.
+ *
+ * Revision 1.16 1998/10/27 16:20:12 rassmann
+ * Reading MAC address byte by byte.
+ *
+ * Revision 1.15 1998/10/22 11:39:09 rassmann
+ * Corrected signed/unsigned mismatches.
+ *
+ * Revision 1.14 1998/10/19 17:12:35 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.13 1998/10/19 17:02:19 rassmann
+ * Now reading permanent MAC addresses from CRF.
+ *
+ * Revision 1.12 1998/10/15 15:15:48 rassmann
+ * Changed Flags Parameters from SK_U8 to int.
+ * Checked with lint.
+ *
+ * Revision 1.11 1998/09/24 19:15:12 rassmann
+ * Code cleanup.
+ *
+ * Revision 1.10 1998/09/18 20:18:54 rassmann
+ * Added HW access.
+ * Implemented swapping.
+ *
+ * Revision 1.9 1998/09/16 11:32:00 rassmann
+ * Including skdrv1st.h again. :(
+ *
+ * Revision 1.8 1998/09/16 11:09:34 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.7 1998/09/14 17:06:34 rassmann
+ * Minor changes.
+ *
+ * Revision 1.6 1998/09/07 08:45:41 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.5 1998/09/04 19:40:19 rassmann
+ * Interface enhancements.
+ *
+ * Revision 1.4 1998/09/04 12:14:12 rassmann
+ * Interface cleanup.
+ *
+ * Revision 1.3 1998/09/02 16:56:40 rassmann
+ * Updated interface.
+ *
+ * Revision 1.2 1998/08/27 14:26:09 rassmann
+ * Updated interface.
+ *
+ * Revision 1.1 1998/08/21 08:30:22 rassmann
+ * First public version.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This module is intended to manage multicast addresses, address override,
+ * and promiscuous mode on GEnesis and Yukon adapters.
+ *
+ * Address Layout:
+ * port address: physical MAC address
+ * 1st exact match: logical MAC address (GEnesis only)
+ * 2nd exact match: RLMT multicast (GEnesis only)
+ * exact match 3-13: OS-specific multicasts (GEnesis only)
+ *
+ * Include File Hierarchy:
+ *
+ * "skdrv1st.h"
+ * "skdrv2nd.h"
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+#ifndef lint
+static const char SysKonnectFileId[] =
+ "@(#) $Id: skaddr.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $ (C) SysKonnect.";
+#endif /* !defined(lint) */
+
+#define __SKADDR_C
+
+#ifdef __cplusplus
+#error C++ is not yet supported.
+extern "C" {
+#endif /* cplusplus */
+
+#include "h/skdrv1st.h"
+#include "h/skdrv2nd.h"
+
+/* defines ********************************************************************/
+
+
+#define XMAC_POLY 0xEDB88320UL /* CRC32-Poly - XMAC: Little Endian */
+#define GMAC_POLY 0x04C11DB7L /* CRC16-Poly - GMAC: Little Endian */
+#define HASH_BITS 6 /* #bits in hash */
+#define SK_MC_BIT 0x01
+
+/* Error numbers and messages. */
+
+#define SKERR_ADDR_E001 (SK_ERRBASE_ADDR + 0)
+#define SKERR_ADDR_E001MSG "Bad Flags."
+#define SKERR_ADDR_E002 (SKERR_ADDR_E001 + 1)
+#define SKERR_ADDR_E002MSG "New Error."
+
+/* typedefs *******************************************************************/
+
+/* None. */
+
+/* global variables ***********************************************************/
+
+/* 64-bit hash values with all bits set. */
+
+SK_U16 OnesHash[4] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
+
+/* local variables ************************************************************/
+
+#ifdef DEBUG
+static int Next0[SK_MAX_MACS] = {0, 0};
+#endif /* DEBUG */
+
+/* functions ******************************************************************/
+
+/******************************************************************************
+ *
+ * SkAddrInit - initialize data, set state to init
+ *
+ * Description:
+ *
+ * SK_INIT_DATA
+ * ============
+ *
+ * This routine clears the multicast tables and resets promiscuous mode.
+ * Some entries are reserved for the "logical MAC address", the
+ * SK-RLMT multicast address, and the BPDU multicast address.
+ *
+ *
+ * SK_INIT_IO
+ * ==========
+ *
+ * All permanent MAC addresses are read from EPROM.
+ * If the current MAC addresses are not already set in software,
+ * they are set to the values of the permanent addresses.
+ * The current addresses are written to the corresponding MAC.
+ *
+ *
+ * SK_INIT_RUN
+ * ===========
+ *
+ * Nothing.
+ *
+ * Context:
+ * init, pageable
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ */
+int SkAddrInit(
+SK_AC *pAC, /* the adapter context */
+SK_IOC IoC, /* I/O context */
+int Level) /* initialization level */
+{
+ int j;
+ SK_U32 i;
+ SK_U8 *InAddr;
+ SK_U16 *OutAddr;
+ SK_ADDR_PORT *pAPort;
+
+ switch (Level) {
+ case SK_INIT_DATA:
+ SK_MEMSET((char *) &pAC->Addr, 0, sizeof(SK_ADDR));
+
+ for (i = 0; i < SK_MAX_MACS; i++) {
+ pAPort = &pAC->Addr.Port[i];
+ pAPort->PromMode = SK_PROM_MODE_NONE;
+
+ pAPort->FirstExactMatchRlmt = SK_ADDR_FIRST_MATCH_RLMT;
+ pAPort->FirstExactMatchDrv = SK_ADDR_FIRST_MATCH_DRV;
+ pAPort->NextExactMatchRlmt = SK_ADDR_FIRST_MATCH_RLMT;
+ pAPort->NextExactMatchDrv = SK_ADDR_FIRST_MATCH_DRV;
+ }
+#ifdef xDEBUG
+ for (i = 0; i < SK_MAX_MACS; i++) {
+ if (pAC->Addr.Port[i].NextExactMatchRlmt <
+ SK_ADDR_FIRST_MATCH_RLMT) {
+ Next0[i] |= 4;
+ }
+ }
+#endif /* DEBUG */
+ /* pAC->Addr.InitDone = SK_INIT_DATA; */
+ break;
+
+ case SK_INIT_IO:
+ for (i = 0; i < SK_MAX_NETS; i++) {
+ pAC->Addr.Net[i].ActivePort = pAC->Rlmt.Net[i].ActivePort;
+ }
+#ifdef xDEBUG
+ for (i = 0; i < SK_MAX_MACS; i++) {
+ if (pAC->Addr.Port[i].NextExactMatchRlmt <
+ SK_ADDR_FIRST_MATCH_RLMT) {
+ Next0[i] |= 8;
+ }
+ }
+#endif /* DEBUG */
+
+ /* Read permanent logical MAC address from Control Register File. */
+ for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
+ InAddr = (SK_U8 *) &pAC->Addr.Net[0].PermanentMacAddress.a[j];
+ SK_IN8(IoC, B2_MAC_1 + j, InAddr);
+ }
+
+ if (!pAC->Addr.Net[0].CurrentMacAddressSet) {
+ /* Set the current logical MAC address to the permanent one. */
+ pAC->Addr.Net[0].CurrentMacAddress =
+ pAC->Addr.Net[0].PermanentMacAddress;
+ pAC->Addr.Net[0].CurrentMacAddressSet = SK_TRUE;
+ }
+
+ /* Set the current logical MAC address. */
+ pAC->Addr.Port[pAC->Addr.Net[0].ActivePort].Exact[0] =
+ pAC->Addr.Net[0].CurrentMacAddress;
+#if SK_MAX_NETS > 1
+ /* Set logical MAC address for net 2 to (log | 3). */
+ if (!pAC->Addr.Net[1].CurrentMacAddressSet) {
+ pAC->Addr.Net[1].PermanentMacAddress =
+ pAC->Addr.Net[0].PermanentMacAddress;
+ pAC->Addr.Net[1].PermanentMacAddress.a[5] |= 3;
+ /* Set the current logical MAC address to the permanent one. */
+ pAC->Addr.Net[1].CurrentMacAddress =
+ pAC->Addr.Net[1].PermanentMacAddress;
+ pAC->Addr.Net[1].CurrentMacAddressSet = SK_TRUE;
+ }
+#endif /* SK_MAX_NETS > 1 */
+
+#ifdef DEBUG
+ for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
+ ("Permanent MAC Address (Net%d): %02X %02X %02X %02X %02X %02X\n",
+ i,
+ pAC->Addr.Net[i].PermanentMacAddress.a[0],
+ pAC->Addr.Net[i].PermanentMacAddress.a[1],
+ pAC->Addr.Net[i].PermanentMacAddress.a[2],
+ pAC->Addr.Net[i].PermanentMacAddress.a[3],
+ pAC->Addr.Net[i].PermanentMacAddress.a[4],
+ pAC->Addr.Net[i].PermanentMacAddress.a[5]))
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
+ ("Logical MAC Address (Net%d): %02X %02X %02X %02X %02X %02X\n",
+ i,
+ pAC->Addr.Net[i].CurrentMacAddress.a[0],
+ pAC->Addr.Net[i].CurrentMacAddress.a[1],
+ pAC->Addr.Net[i].CurrentMacAddress.a[2],
+ pAC->Addr.Net[i].CurrentMacAddress.a[3],
+ pAC->Addr.Net[i].CurrentMacAddress.a[4],
+ pAC->Addr.Net[i].CurrentMacAddress.a[5]))
+ }
+#endif /* DEBUG */
+
+ for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
+ pAPort = &pAC->Addr.Port[i];
+
+ /* Read permanent port addresses from Control Register File. */
+ for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
+ InAddr = (SK_U8 *) &pAPort->PermanentMacAddress.a[j];
+ SK_IN8(IoC, B2_MAC_2 + 8 * i + j, InAddr);
+ }
+
+ if (!pAPort->CurrentMacAddressSet) {
+ /*
+ * Set the current and previous physical MAC address
+ * of this port to its permanent MAC address.
+ */
+ pAPort->CurrentMacAddress = pAPort->PermanentMacAddress;
+ pAPort->PreviousMacAddress = pAPort->PermanentMacAddress;
+ pAPort->CurrentMacAddressSet = SK_TRUE;
+ }
+
+ /* Set port's current physical MAC address. */
+ OutAddr = (SK_U16 *) &pAPort->CurrentMacAddress.a[0];
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ XM_OUTADDR(IoC, i, XM_SA, OutAddr);
+ }
+ else {
+ GM_OUTADDR(IoC, i, GM_SRC_ADDR_1L, OutAddr);
+ }
+#ifdef DEBUG
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
+ ("SkAddrInit: Permanent Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
+ pAPort->PermanentMacAddress.a[0],
+ pAPort->PermanentMacAddress.a[1],
+ pAPort->PermanentMacAddress.a[2],
+ pAPort->PermanentMacAddress.a[3],
+ pAPort->PermanentMacAddress.a[4],
+ pAPort->PermanentMacAddress.a[5]))
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_INIT,
+ ("SkAddrInit: Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
+ pAPort->CurrentMacAddress.a[0],
+ pAPort->CurrentMacAddress.a[1],
+ pAPort->CurrentMacAddress.a[2],
+ pAPort->CurrentMacAddress.a[3],
+ pAPort->CurrentMacAddress.a[4],
+ pAPort->CurrentMacAddress.a[5]))
+#endif /* DEBUG */
+ }
+ /* pAC->Addr.InitDone = SK_INIT_IO; */
+ break;
+
+ case SK_INIT_RUN:
+#ifdef xDEBUG
+ for (i = 0; i < SK_MAX_MACS; i++) {
+ if (pAC->Addr.Port[i].NextExactMatchRlmt <
+ SK_ADDR_FIRST_MATCH_RLMT) {
+ Next0[i] |= 16;
+ }
+ }
+#endif /* DEBUG */
+
+ /* pAC->Addr.InitDone = SK_INIT_RUN; */
+ break;
+
+ default: /* error */
+ break;
+ }
+
+ return (SK_ADDR_SUCCESS);
+
+} /* SkAddrInit */
+
+
+/******************************************************************************
+ *
+ * SkAddrMcClear - clear the multicast table
+ *
+ * Description:
+ * This routine clears the multicast table.
+ *
+ * If not suppressed by Flag SK_MC_SW_ONLY, the hardware is updated
+ * immediately.
+ *
+ * It calls either SkAddrXmacMcClear or SkAddrGmacMcClear, according
+ * to the adapter in use. The real work is done there.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called starting with SK_INIT_DATA with flag SK_MC_SW_ONLY
+ * may be called after SK_INIT_IO without limitation
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrMcClear(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* Index of affected port */
+int Flags) /* permanent/non-perm, sw-only */
+{
+ int ReturnCode;
+
+ if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ ReturnCode = SkAddrXmacMcClear(pAC, IoC, PortNumber, Flags);
+ }
+ else {
+ ReturnCode = SkAddrGmacMcClear(pAC, IoC, PortNumber, Flags);
+ }
+
+ return (ReturnCode);
+
+} /* SkAddrMcClear */
+
+
+/******************************************************************************
+ *
+ * SkAddrXmacMcClear - clear the multicast table
+ *
+ * Description:
+ * This routine clears the multicast table
+ * (either entry 2 or entries 3-16 and InexactFilter) of the given port.
+ * If not suppressed by Flag SK_MC_SW_ONLY, the hardware is updated
+ * immediately.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called starting with SK_INIT_DATA with flag SK_MC_SW_ONLY
+ * may be called after SK_INIT_IO without limitation
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrXmacMcClear(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* Index of affected port */
+int Flags) /* permanent/non-perm, sw-only */
+{
+ int i;
+
+ if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
+
+ /* Clear RLMT multicast addresses. */
+ pAC->Addr.Port[PortNumber].NextExactMatchRlmt = SK_ADDR_FIRST_MATCH_RLMT;
+ }
+ else { /* not permanent => DRV */
+
+ /* Clear InexactFilter */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0;
+ }
+
+ /* Clear DRV multicast addresses. */
+
+ pAC->Addr.Port[PortNumber].NextExactMatchDrv = SK_ADDR_FIRST_MATCH_DRV;
+ }
+
+ if (!(Flags & SK_MC_SW_ONLY)) {
+ (void) SkAddrXmacMcUpdate(pAC, IoC, PortNumber);
+ }
+
+ return (SK_ADDR_SUCCESS);
+
+} /* SkAddrXmacMcClear */
+
+
+/******************************************************************************
+ *
+ * SkAddrGmacMcClear - clear the multicast table
+ *
+ * Description:
+ * This routine clears the multicast hashing table (InexactFilter)
+ * (either the RLMT or the driver bits) of the given port.
+ *
+ * If not suppressed by Flag SK_MC_SW_ONLY, the hardware is updated
+ * immediately.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called starting with SK_INIT_DATA with flag SK_MC_SW_ONLY
+ * may be called after SK_INIT_IO without limitation
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrGmacMcClear(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* Index of affected port */
+int Flags) /* permanent/non-perm, sw-only */
+{
+ int i;
+
+#ifdef DEBUG
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("GMAC InexactFilter (not cleared): %02X %02X %02X %02X %02X %02X %02X %02X\n",
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[1],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[2],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[3],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[4],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[5],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[6],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[7]))
+#endif /* DEBUG */
+
+ /* Clear InexactFilter */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0;
+ }
+
+ if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
+
+ /* Copy DRV bits to InexactFilter. */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[i];
+
+ /* Clear InexactRlmtFilter. */
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[i] = 0;
+
+ }
+ }
+ else { /* not permanent => DRV */
+
+ /* Copy RLMT bits to InexactFilter. */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[i];
+
+ /* Clear InexactDrvFilter. */
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[i] = 0;
+ }
+ }
+
+#ifdef DEBUG
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("GMAC InexactFilter (cleared): %02X %02X %02X %02X %02X %02X %02X %02X\n",
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[1],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[2],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[3],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[4],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[5],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[6],
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[7]))
+#endif /* DEBUG */
+
+ if (!(Flags & SK_MC_SW_ONLY)) {
+ (void) SkAddrGmacMcUpdate(pAC, IoC, PortNumber);
+ }
+
+ return (SK_ADDR_SUCCESS);
+
+} /* SkAddrGmacMcClear */
+
+#ifndef SK_ADDR_CHEAT
+
+/******************************************************************************
+ *
+ * SkXmacMcHash - hash multicast address
+ *
+ * Description:
+ * This routine computes the hash value for a multicast address.
+ * A CRC32 algorithm is used.
+ *
+ * Notes:
+ * The code was adapted from the XaQti data sheet.
+ *
+ * Context:
+ * runtime, pageable
+ *
+ * Returns:
+ * Hash value of multicast address.
+ */
+SK_U32 SkXmacMcHash(
+unsigned char *pMc) /* Multicast address */
+{
+ SK_U32 Idx;
+ SK_U32 Bit;
+ SK_U32 Data;
+ SK_U32 Crc;
+
+ Crc = 0xFFFFFFFFUL;
+ for (Idx = 0; Idx < SK_MAC_ADDR_LEN; Idx++) {
+ Data = *pMc++;
+ for (Bit = 0; Bit < 8; Bit++, Data >>= 1) {
+ Crc = (Crc >> 1) ^ (((Crc ^ Data) & 1) ? XMAC_POLY : 0);
+ }
+ }
+
+ return (Crc & ((1 << HASH_BITS) - 1));
+
+} /* SkXmacMcHash */
+
+
+/******************************************************************************
+ *
+ * SkGmacMcHash - hash multicast address
+ *
+ * Description:
+ * This routine computes the hash value for a multicast address.
+ * A CRC16 algorithm is used.
+ *
+ * Notes:
+ *
+ *
+ * Context:
+ * runtime, pageable
+ *
+ * Returns:
+ * Hash value of multicast address.
+ */
+SK_U32 SkGmacMcHash(
+unsigned char *pMc) /* Multicast address */
+{
+ SK_U32 Data;
+ SK_U32 TmpData;
+ SK_U32 Crc;
+ int Byte;
+ int Bit;
+
+ Crc = 0xFFFFFFFFUL;
+ for (Byte = 0; Byte < 6; Byte++) {
+ /* Get next byte. */
+ Data = (SK_U32) pMc[Byte];
+
+ /* Change bit order in byte. */
+ TmpData = Data;
+ for (Bit = 0; Bit < 8; Bit++) {
+ if (TmpData & 1L) {
+ Data |= 1L << (7 - Bit);
+ }
+ else {
+ Data &= ~(1L << (7 - Bit));
+ }
+ TmpData >>= 1;
+ }
+
+ Crc ^= (Data << 24);
+ for (Bit = 0; Bit < 8; Bit++) {
+ if (Crc & 0x80000000) {
+ Crc = (Crc << 1) ^ GMAC_POLY;
+ }
+ else {
+ Crc <<= 1;
+ }
+ }
+ }
+
+ return (Crc & ((1 << HASH_BITS) - 1));
+
+} /* SkGmacMcHash */
+
+#endif /* not SK_ADDR_CHEAT */
+
+/******************************************************************************
+ *
+ * SkAddrMcAdd - add a multicast address to a port
+ *
+ * Description:
+ * This routine enables reception for a given address on the given port.
+ *
+ * It calls either SkAddrXmacMcAdd or SkAddrGmacMcAdd, according to the
+ * adapter in use. The real work is done there.
+ *
+ * Notes:
+ * The return code is only valid for SK_PROM_MODE_NONE.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_DATA
+ *
+ * Returns:
+ * SK_MC_FILTERING_EXACT
+ * SK_MC_FILTERING_INEXACT
+ * SK_MC_ILLEGAL_ADDRESS
+ * SK_MC_ILLEGAL_PORT
+ * SK_MC_RLMT_OVERFLOW
+ */
+int SkAddrMcAdd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* Port Number */
+SK_MAC_ADDR *pMc, /* multicast address to be added */
+int Flags) /* permanent/non-permanent */
+{
+ int ReturnCode;
+
+ if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ ReturnCode = SkAddrXmacMcAdd(pAC, IoC, PortNumber, pMc, Flags);
+ }
+ else {
+ ReturnCode = SkAddrGmacMcAdd(pAC, IoC, PortNumber, pMc, Flags);
+ }
+
+ return (ReturnCode);
+
+} /* SkAddrMcAdd */
+
+
+/******************************************************************************
+ *
+ * SkAddrXmacMcAdd - add a multicast address to a port
+ *
+ * Description:
+ * This routine enables reception for a given address on the given port.
+ *
+ * Notes:
+ * The return code is only valid for SK_PROM_MODE_NONE.
+ *
+ * The multicast bit is only checked if there are no free exact match
+ * entries.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_DATA
+ *
+ * Returns:
+ * SK_MC_FILTERING_EXACT
+ * SK_MC_FILTERING_INEXACT
+ * SK_MC_ILLEGAL_ADDRESS
+ * SK_MC_RLMT_OVERFLOW
+ */
+int SkAddrXmacMcAdd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* Port Number */
+SK_MAC_ADDR *pMc, /* multicast address to be added */
+int Flags) /* permanent/non-permanent */
+{
+ int i;
+ SK_U8 Inexact;
+#ifndef SK_ADDR_CHEAT
+ SK_U32 HashBit;
+#endif /* !defined(SK_ADDR_CHEAT) */
+
+ if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
+#ifdef xDEBUG
+ if (pAC->Addr.Port[PortNumber].NextExactMatchRlmt <
+ SK_ADDR_FIRST_MATCH_RLMT) {
+ Next0[PortNumber] |= 1;
+ return (SK_MC_RLMT_OVERFLOW);
+ }
+#endif /* DEBUG */
+
+ if (pAC->Addr.Port[PortNumber].NextExactMatchRlmt >
+ SK_ADDR_LAST_MATCH_RLMT) {
+ return (SK_MC_RLMT_OVERFLOW);
+ }
+
+ /* Set a RLMT multicast address. */
+
+ pAC->Addr.Port[PortNumber].Exact[
+ pAC->Addr.Port[PortNumber].NextExactMatchRlmt++] = *pMc;
+
+ return (SK_MC_FILTERING_EXACT);
+ }
+
+#ifdef xDEBUG
+ if (pAC->Addr.Port[PortNumber].NextExactMatchDrv <
+ SK_ADDR_FIRST_MATCH_DRV) {
+ Next0[PortNumber] |= 2;
+ return (SK_MC_RLMT_OVERFLOW);
+ }
+#endif /* DEBUG */
+
+ if (pAC->Addr.Port[PortNumber].NextExactMatchDrv <= SK_ADDR_LAST_MATCH_DRV) {
+
+ /* Set exact match entry. */
+ pAC->Addr.Port[PortNumber].Exact[
+ pAC->Addr.Port[PortNumber].NextExactMatchDrv++] = *pMc;
+
+ /* Clear InexactFilter */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0;
+ }
+ }
+ else {
+ if (!(pMc->a[0] & SK_MC_BIT)) {
+ /* Hashing only possible with multicast addresses. */
+ return (SK_MC_ILLEGAL_ADDRESS);
+ }
+#ifndef SK_ADDR_CHEAT
+ /* Compute hash value of address. */
+ HashBit = 63 - SkXmacMcHash(&pMc->a[0]);
+
+ /* Add bit to InexactFilter. */
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[HashBit / 8] |=
+ 1 << (HashBit % 8);
+#else /* SK_ADDR_CHEAT */
+ /* Set all bits in InexactFilter. */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0xFF;
+ }
+#endif /* SK_ADDR_CHEAT */
+ }
+
+ for (Inexact = 0, i = 0; i < 8; i++) {
+ Inexact |= pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i];
+ }
+
+ if (Inexact == 0 && pAC->Addr.Port[PortNumber].PromMode == 0) {
+ return (SK_MC_FILTERING_EXACT);
+ }
+ else {
+ return (SK_MC_FILTERING_INEXACT);
+ }
+
+} /* SkAddrXmacMcAdd */
+
+
+/******************************************************************************
+ *
+ * SkAddrGmacMcAdd - add a multicast address to a port
+ *
+ * Description:
+ * This routine enables reception for a given address on the given port.
+ *
+ * Notes:
+ * The return code is only valid for SK_PROM_MODE_NONE.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_DATA
+ *
+ * Returns:
+ * SK_MC_FILTERING_INEXACT
+ * SK_MC_ILLEGAL_ADDRESS
+ */
+int SkAddrGmacMcAdd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* Port Number */
+SK_MAC_ADDR *pMc, /* multicast address to be added */
+int Flags) /* permanent/non-permanent */
+{
+ int i;
+#ifndef SK_ADDR_CHEAT
+ SK_U32 HashBit;
+#endif /* !defined(SK_ADDR_CHEAT) */
+
+ if (!(pMc->a[0] & SK_MC_BIT)) {
+ /* Hashing only possible with multicast addresses. */
+ return (SK_MC_ILLEGAL_ADDRESS);
+ }
+
+#ifndef SK_ADDR_CHEAT
+
+ /* Compute hash value of address. */
+ HashBit = SkGmacMcHash(&pMc->a[0]);
+
+ if (Flags & SK_ADDR_PERMANENT) { /* permanent => RLMT */
+
+ /* Add bit to InexactRlmtFilter. */
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[HashBit / 8] |=
+ 1 << (HashBit % 8);
+
+ /* Copy bit to InexactFilter. */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[i];
+ }
+#ifdef DEBUG
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("GMAC InexactRlmtFilter: %02X %02X %02X %02X %02X %02X %02X %02X\n",
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[0],
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[1],
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[2],
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[3],
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[4],
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[5],
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[6],
+ pAC->Addr.Port[PortNumber].InexactRlmtFilter.Bytes[7]))
+#endif /* DEBUG */
+ }
+ else { /* not permanent => DRV */
+
+ /* Add bit to InexactDrvFilter. */
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[HashBit / 8] |=
+ 1 << (HashBit % 8);
+
+ /* Copy bit to InexactFilter. */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] |=
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[i];
+ }
+#ifdef DEBUG
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("GMAC InexactDrvFilter: %02X %02X %02X %02X %02X %02X %02X %02X\n",
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[0],
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[1],
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[2],
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[3],
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[4],
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[5],
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[6],
+ pAC->Addr.Port[PortNumber].InexactDrvFilter.Bytes[7]))
+#endif /* DEBUG */
+ }
+
+#else /* SK_ADDR_CHEAT */
+
+ /* Set all bits in InexactFilter. */
+ for (i = 0; i < 8; i++) {
+ pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i] = 0xFF;
+ }
+#endif /* SK_ADDR_CHEAT */
+
+ return (SK_MC_FILTERING_INEXACT);
+
+} /* SkAddrGmacMcAdd */
+
+
+/******************************************************************************
+ *
+ * SkAddrMcUpdate - update the HW MC address table and set the MAC address
+ *
+ * Description:
+ * This routine enables reception of the addresses contained in a local
+ * table for a given port.
+ * It also programs the port's current physical MAC address.
+ *
+ * It calls either SkAddrXmacMcUpdate or SkAddrGmacMcUpdate, according
+ * to the adapter in use. The real work is done there.
+ *
+ * Notes:
+ * The return code is only valid for SK_PROM_MODE_NONE.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_MC_FILTERING_EXACT
+ * SK_MC_FILTERING_INEXACT
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrMcUpdate(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber) /* Port Number */
+{
+ int ReturnCode;
+
+ if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ ReturnCode = SkAddrXmacMcUpdate(pAC, IoC, PortNumber);
+ }
+ else {
+ ReturnCode = SkAddrGmacMcUpdate(pAC, IoC, PortNumber);
+ }
+
+ return (ReturnCode);
+
+} /* SkAddrMcUpdate */
+
+
+/******************************************************************************
+ *
+ * SkAddrXmacMcUpdate - update the HW MC address table and set the MAC address
+ *
+ * Description:
+ * This routine enables reception of the addresses contained in a local
+ * table for a given port.
+ * It also programs the port's current physical MAC address.
+ *
+ * Notes:
+ * The return code is only valid for SK_PROM_MODE_NONE.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_MC_FILTERING_EXACT
+ * SK_MC_FILTERING_INEXACT
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrXmacMcUpdate(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber) /* Port Number */
+{
+ SK_U32 i;
+ SK_U8 Inexact;
+ SK_U16 *OutAddr;
+ SK_ADDR_PORT *pAPort;
+
+ SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("SkAddrXmacMcUpdate on Port %u.\n", PortNumber))
+
+ pAPort = &pAC->Addr.Port[PortNumber];
+
+#ifdef DEBUG
+ SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("Next0 on Port %d: %d\n", PortNumber, Next0[PortNumber]))
+#endif /* DEBUG */
+
+ /* Start with 0 to also program the logical MAC address. */
+ for (i = 0; i < pAPort->NextExactMatchRlmt; i++) {
+ /* Set exact match address i on XMAC */
+ OutAddr = (SK_U16 *) &pAPort->Exact[i].a[0];
+ XM_OUTADDR(IoC, PortNumber, XM_EXM(i), OutAddr);
+ }
+
+ /* Clear other permanent exact match addresses on XMAC */
+ if (pAPort->NextExactMatchRlmt <= SK_ADDR_LAST_MATCH_RLMT) {
+
+ SkXmClrExactAddr(pAC, IoC, PortNumber, pAPort->NextExactMatchRlmt,
+ SK_ADDR_LAST_MATCH_RLMT);
+ }
+
+ for (i = pAPort->FirstExactMatchDrv; i < pAPort->NextExactMatchDrv; i++) {
+ OutAddr = (SK_U16 *) &pAPort->Exact[i].a[0];
+ XM_OUTADDR(IoC, PortNumber, XM_EXM(i), OutAddr);
+ }
+
+ /* Clear other non-permanent exact match addresses on XMAC */
+ if (pAPort->NextExactMatchDrv <= SK_ADDR_LAST_MATCH_DRV) {
+
+ SkXmClrExactAddr(pAC, IoC, PortNumber, pAPort->NextExactMatchDrv,
+ SK_ADDR_LAST_MATCH_DRV);
+ }
+
+ for (Inexact = 0, i = 0; i < 8; i++) {
+ Inexact |= pAPort->InexactFilter.Bytes[i];
+ }
+
+ if (pAPort->PromMode & SK_PROM_MODE_ALL_MC) {
+
+ /* Set all bits in 64-bit hash register. */
+ XM_OUTHASH(IoC, PortNumber, XM_HSM, &OnesHash);
+
+ /* Enable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+ else if (Inexact != 0) {
+
+ /* Set 64-bit hash register to InexactFilter. */
+ XM_OUTHASH(IoC, PortNumber, XM_HSM, &pAPort->InexactFilter.Bytes[0]);
+
+ /* Enable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+ else {
+ /* Disable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_FALSE);
+ }
+
+ if (pAPort->PromMode != SK_PROM_MODE_NONE) {
+ (void) SkAddrXmacPromiscuousChange(pAC, IoC, PortNumber, pAPort->PromMode);
+ }
+
+ /* Set port's current physical MAC address. */
+ OutAddr = (SK_U16 *) &pAPort->CurrentMacAddress.a[0];
+
+ XM_OUTADDR(IoC, PortNumber, XM_SA, OutAddr);
+
+#ifdef xDEBUG
+ for (i = 0; i < pAPort->NextExactMatchRlmt; i++) {
+ SK_U8 InAddr8[6];
+ SK_U16 *InAddr;
+
+ /* Get exact match address i from port PortNumber. */
+ InAddr = (SK_U16 *) &InAddr8[0];
+
+ XM_INADDR(IoC, PortNumber, XM_EXM(i), InAddr);
+
+ SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("SkAddrXmacMcUpdate: MC address %d on Port %u: ",
+ "%02x %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x\n",
+ i,
+ PortNumber,
+ InAddr8[0],
+ InAddr8[1],
+ InAddr8[2],
+ InAddr8[3],
+ InAddr8[4],
+ InAddr8[5],
+ pAPort->Exact[i].a[0],
+ pAPort->Exact[i].a[1],
+ pAPort->Exact[i].a[2],
+ pAPort->Exact[i].a[3],
+ pAPort->Exact[i].a[4],
+ pAPort->Exact[i].a[5]))
+ }
+#endif /* DEBUG */
+
+ /* Determine return value. */
+ if (Inexact == 0 && pAPort->PromMode == 0) {
+ return (SK_MC_FILTERING_EXACT);
+ }
+ else {
+ return (SK_MC_FILTERING_INEXACT);
+ }
+
+} /* SkAddrXmacMcUpdate */
+
+
+/******************************************************************************
+ *
+ * SkAddrGmacMcUpdate - update the HW MC address table and set the MAC address
+ *
+ * Description:
+ * This routine enables reception of the addresses contained in a local
+ * table for a given port.
+ * It also programs the port's current physical MAC address.
+ *
+ * Notes:
+ * The return code is only valid for SK_PROM_MODE_NONE.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_MC_FILTERING_EXACT
+ * SK_MC_FILTERING_INEXACT
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrGmacMcUpdate(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber) /* Port Number */
+{
+ SK_U32 i;
+ SK_U8 Inexact;
+ SK_U16 *OutAddr;
+ SK_ADDR_PORT *pAPort;
+
+ SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("SkAddrGmacMcUpdate on Port %u.\n", PortNumber))
+
+ pAPort = &pAC->Addr.Port[PortNumber];
+
+#ifdef DEBUG
+ SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("Next0 on Port %d: %d\n", PortNumber, Next0[PortNumber]))
+#endif /* DEBUG */
+
+ for (Inexact = 0, i = 0; i < 8; i++) {
+ Inexact |= pAPort->InexactFilter.Bytes[i];
+ }
+
+ /* Set 64-bit hash register to InexactFilter. */
+ GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1,
+ &pAPort->InexactFilter.Bytes[0]);
+
+ if (pAPort->PromMode & SK_PROM_MODE_ALL_MC) {
+
+ /* Set all bits in 64-bit hash register. */
+ GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1, &OnesHash);
+
+ /* Enable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+ else {
+ /* Enable Hashing. */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+
+ if (pAPort->PromMode != SK_PROM_MODE_NONE) {
+ (void) SkAddrGmacPromiscuousChange(pAC, IoC, PortNumber, pAPort->PromMode);
+ }
+
+ /* Set port's current physical MAC address. */
+ OutAddr = (SK_U16 *) &pAPort->CurrentMacAddress.a[0];
+ GM_OUTADDR(IoC, PortNumber, GM_SRC_ADDR_1L, OutAddr);
+
+ /* Set port's current logical MAC address. */
+ OutAddr = (SK_U16 *) &pAPort->Exact[0].a[0];
+ GM_OUTADDR(IoC, PortNumber, GM_SRC_ADDR_2L, OutAddr);
+
+#ifdef DEBUG
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("SkAddrGmacMcUpdate: Permanent Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
+ pAPort->Exact[0].a[0],
+ pAPort->Exact[0].a[1],
+ pAPort->Exact[0].a[2],
+ pAPort->Exact[0].a[3],
+ pAPort->Exact[0].a[4],
+ pAPort->Exact[0].a[5]))
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("SkAddrGmacMcUpdate: Physical MAC Address: %02X %02X %02X %02X %02X %02X\n",
+ pAPort->CurrentMacAddress.a[0],
+ pAPort->CurrentMacAddress.a[1],
+ pAPort->CurrentMacAddress.a[2],
+ pAPort->CurrentMacAddress.a[3],
+ pAPort->CurrentMacAddress.a[4],
+ pAPort->CurrentMacAddress.a[5]))
+#endif /* DEBUG */
+
+ /* Determine return value. */
+ if (Inexact == 0 && pAPort->PromMode == 0) {
+ return (SK_MC_FILTERING_EXACT);
+ }
+ else {
+ return (SK_MC_FILTERING_INEXACT);
+ }
+
+} /* SkAddrGmacMcUpdate */
+
+
+/******************************************************************************
+ *
+ * SkAddrOverride - override a port's MAC address
+ *
+ * Description:
+ * This routine overrides the MAC address of one port.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS if successful.
+ * SK_ADDR_DUPLICATE_ADDRESS if duplicate MAC address.
+ * SK_ADDR_MULTICAST_ADDRESS if multicast or broadcast address.
+ * SK_ADDR_TOO_EARLY if SK_INIT_IO was not executed before.
+ */
+int SkAddrOverride(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* Port Number */
+SK_MAC_ADDR *pNewAddr, /* new MAC address */
+int Flags) /* logical/physical MAC address */
+{
+ SK_EVPARA Para;
+ SK_U32 NetNumber;
+ SK_U32 i;
+ SK_U16 *OutAddr;
+
+ NetNumber = pAC->Rlmt.Port[PortNumber].Net->NetNumber;
+
+ if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ if (pNewAddr != NULL && (pNewAddr->a[0] & SK_MC_BIT) != 0) {
+ return (SK_ADDR_MULTICAST_ADDRESS);
+ }
+
+ if (!pAC->Addr.Net[NetNumber].CurrentMacAddressSet) {
+ return (SK_ADDR_TOO_EARLY);
+ }
+
+ if (Flags & SK_ADDR_SET_LOGICAL) { /* Activate logical MAC address. */
+ /* Parameter *pNewAddr is ignored. */
+ for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
+ if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
+ return (SK_ADDR_TOO_EARLY);
+ }
+ }
+
+ /* Set PortNumber to number of net's active port. */
+ PortNumber = pAC->Rlmt.Net[NetNumber].
+ Port[pAC->Addr.Net[NetNumber].ActivePort]->PortNumber;
+
+ pAC->Addr.Port[PortNumber].Exact[0] =
+ pAC->Addr.Net[NetNumber].CurrentMacAddress;
+
+ /* Write address to first exact match entry of active port. */
+ (void) SkAddrMcUpdate(pAC, IoC, PortNumber);
+ }
+ else if (Flags & SK_ADDR_CLEAR_LOGICAL) {
+ /* Deactivate logical MAC address. */
+ /* Parameter *pNewAddr is ignored. */
+ for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
+ if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
+ return (SK_ADDR_TOO_EARLY);
+ }
+ }
+
+ /* Set PortNumber to number of net's active port. */
+ PortNumber = pAC->Rlmt.Net[NetNumber].
+ Port[pAC->Addr.Net[NetNumber].ActivePort]->PortNumber;
+
+ for (i = 0; i < SK_MAC_ADDR_LEN; i++ ) {
+ pAC->Addr.Port[PortNumber].Exact[0].a[i] = 0;
+ }
+
+ /* Write address to first exact match entry of active port. */
+ (void) SkAddrMcUpdate(pAC, IoC, PortNumber);
+ }
+ else if (Flags & SK_ADDR_PHYSICAL_ADDRESS) { /* Physical MAC address. */
+ if (SK_ADDR_EQUAL(pNewAddr->a,
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a)) {
+ return (SK_ADDR_DUPLICATE_ADDRESS);
+ }
+
+ for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
+ if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
+ return (SK_ADDR_TOO_EARLY);
+ }
+
+ if (SK_ADDR_EQUAL(pNewAddr->a,
+ pAC->Addr.Port[i].CurrentMacAddress.a)) {
+ if (i == PortNumber) {
+ return (SK_ADDR_SUCCESS);
+ }
+ else {
+ return (SK_ADDR_DUPLICATE_ADDRESS);
+ }
+ }
+ }
+
+ pAC->Addr.Port[PortNumber].PreviousMacAddress =
+ pAC->Addr.Port[PortNumber].CurrentMacAddress;
+ pAC->Addr.Port[PortNumber].CurrentMacAddress = *pNewAddr;
+
+ /* Change port's physical MAC address. */
+ OutAddr = (SK_U16 *) pNewAddr;
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ XM_OUTADDR(IoC, PortNumber, XM_SA, OutAddr);
+ }
+ else {
+ GM_OUTADDR(IoC, PortNumber, GM_SRC_ADDR_1L, OutAddr);
+ }
+
+ /* Report address change to RLMT. */
+ Para.Para32[0] = PortNumber;
+ Para.Para32[0] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_PORT_ADDR, Para);
+ }
+ else { /* Logical MAC address. */
+ if (SK_ADDR_EQUAL(pNewAddr->a,
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a)) {
+ return (SK_ADDR_SUCCESS);
+ }
+
+ for (i = 0; i < (SK_U32) pAC->GIni.GIMacsFound; i++) {
+ if (!pAC->Addr.Port[i].CurrentMacAddressSet) {
+ return (SK_ADDR_TOO_EARLY);
+ }
+
+ if (SK_ADDR_EQUAL(pNewAddr->a,
+ pAC->Addr.Port[i].CurrentMacAddress.a)) {
+ return (SK_ADDR_DUPLICATE_ADDRESS);
+ }
+ }
+
+ /*
+ * In case that the physical and the logical MAC addresses are equal
+ * we must also change the physical MAC address here.
+ * In this case we have an adapter which initially was programmed with
+ * two identical MAC addresses.
+ */
+ if (SK_ADDR_EQUAL(pAC->Addr.Port[PortNumber].CurrentMacAddress.a,
+ pAC->Addr.Port[PortNumber].Exact[0].a)) {
+
+ pAC->Addr.Port[PortNumber].PreviousMacAddress =
+ pAC->Addr.Port[PortNumber].CurrentMacAddress;
+ pAC->Addr.Port[PortNumber].CurrentMacAddress = *pNewAddr;
+
+ /* Report address change to RLMT. */
+ Para.Para32[0] = PortNumber;
+ Para.Para32[0] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_PORT_ADDR, Para);
+ }
+
+ /* Set PortNumber to number of net's active port. */
+ PortNumber = pAC->Rlmt.Net[NetNumber].
+ Port[pAC->Addr.Net[NetNumber].ActivePort]->PortNumber;
+
+ pAC->Addr.Net[NetNumber].CurrentMacAddress = *pNewAddr;
+ pAC->Addr.Port[PortNumber].Exact[0] = *pNewAddr;
+#ifdef DEBUG
+ SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("SkAddrOverride: Permanent MAC Address: %02X %02X %02X %02X %02X %02X\n",
+ pAC->Addr.Net[NetNumber].PermanentMacAddress.a[0],
+ pAC->Addr.Net[NetNumber].PermanentMacAddress.a[1],
+ pAC->Addr.Net[NetNumber].PermanentMacAddress.a[2],
+ pAC->Addr.Net[NetNumber].PermanentMacAddress.a[3],
+ pAC->Addr.Net[NetNumber].PermanentMacAddress.a[4],
+ pAC->Addr.Net[NetNumber].PermanentMacAddress.a[5]))
+
+ SK_DBG_MSG(pAC,SK_DBGMOD_ADDR, SK_DBGCAT_CTRL,
+ ("SkAddrOverride: New logical MAC Address: %02X %02X %02X %02X %02X %02X\n",
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a[0],
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a[1],
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a[2],
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a[3],
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a[4],
+ pAC->Addr.Net[NetNumber].CurrentMacAddress.a[5]))
+#endif /* DEBUG */
+
+ /* Write address to first exact match entry of active port. */
+ (void) SkAddrMcUpdate(pAC, IoC, PortNumber);
+ }
+
+ return (SK_ADDR_SUCCESS);
+
+} /* SkAddrOverride */
+
+
+/******************************************************************************
+ *
+ * SkAddrPromiscuousChange - set promiscuous mode for given port
+ *
+ * Description:
+ * This routine manages promiscuous mode:
+ * - none
+ * - all LLC frames
+ * - all MC frames
+ *
+ * It calls either SkAddrXmacPromiscuousChange or
+ * SkAddrGmacPromiscuousChange, according to the adapter in use.
+ * The real work is done there.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrPromiscuousChange(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* port whose promiscuous mode changes */
+int NewPromMode) /* new promiscuous mode */
+{
+ int ReturnCode;
+
+ if (PortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ ReturnCode = SkAddrXmacPromiscuousChange(pAC, IoC, PortNumber, NewPromMode);
+ }
+ else {
+ ReturnCode = SkAddrGmacPromiscuousChange(pAC, IoC, PortNumber, NewPromMode);
+ }
+
+ return (ReturnCode);
+
+} /* SkAddrPromiscuousChange */
+
+
+/******************************************************************************
+ *
+ * SkAddrXmacPromiscuousChange - set promiscuous mode for given port
+ *
+ * Description:
+ * This routine manages promiscuous mode:
+ * - none
+ * - all LLC frames
+ * - all MC frames
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrXmacPromiscuousChange(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* port whose promiscuous mode changes */
+int NewPromMode) /* new promiscuous mode */
+{
+ int i;
+ SK_BOOL InexactModeBit;
+ SK_U8 Inexact;
+ SK_U8 HwInexact;
+ SK_FILTER64 HwInexactFilter;
+ SK_U16 LoMode; /* Lower 16 bits of XMAC Mode Register. */
+ int CurPromMode = SK_PROM_MODE_NONE;
+
+ /* Read CurPromMode from Hardware. */
+ XM_IN16(IoC, PortNumber, XM_MODE, &LoMode);
+
+ if ((LoMode & XM_MD_ENA_PROM) != 0) {
+ /* Promiscuous mode! */
+ CurPromMode |= SK_PROM_MODE_LLC;
+ }
+
+ for (Inexact = 0xFF, i = 0; i < 8; i++) {
+ Inexact &= pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i];
+ }
+ if (Inexact == 0xFF) {
+ CurPromMode |= (pAC->Addr.Port[PortNumber].PromMode & SK_PROM_MODE_ALL_MC);
+ }
+ else {
+ /* Get InexactModeBit (bit XM_MD_ENA_HASH in mode register) */
+ XM_IN16(IoC, PortNumber, XM_MODE, &LoMode);
+
+ InexactModeBit = (LoMode & XM_MD_ENA_HASH) != 0;
+
+ /* Read 64-bit hash register from XMAC */
+ XM_INHASH(IoC, PortNumber, XM_HSM, &HwInexactFilter.Bytes[0]);
+
+ for (HwInexact = 0xFF, i = 0; i < 8; i++) {
+ HwInexact &= HwInexactFilter.Bytes[i];
+ }
+
+ if (InexactModeBit && (HwInexact == 0xFF)) {
+ CurPromMode |= SK_PROM_MODE_ALL_MC;
+ }
+ }
+
+ pAC->Addr.Port[PortNumber].PromMode = NewPromMode;
+
+ if (NewPromMode == CurPromMode) {
+ return (SK_ADDR_SUCCESS);
+ }
+
+ if ((NewPromMode & SK_PROM_MODE_ALL_MC) &&
+ !(CurPromMode & SK_PROM_MODE_ALL_MC)) { /* All MC. */
+
+ /* Set all bits in 64-bit hash register. */
+ XM_OUTHASH(IoC, PortNumber, XM_HSM, &OnesHash);
+
+ /* Enable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+ else if ((CurPromMode & SK_PROM_MODE_ALL_MC) &&
+ !(NewPromMode & SK_PROM_MODE_ALL_MC)) { /* Norm MC. */
+ for (Inexact = 0, i = 0; i < 8; i++) {
+ Inexact |= pAC->Addr.Port[PortNumber].InexactFilter.Bytes[i];
+ }
+ if (Inexact == 0) {
+ /* Disable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_FALSE);
+ }
+ else {
+ /* Set 64-bit hash register to InexactFilter. */
+ XM_OUTHASH(IoC, PortNumber, XM_HSM,
+ &pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0]);
+
+ /* Enable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+ }
+
+ if ((NewPromMode & SK_PROM_MODE_LLC) &&
+ !(CurPromMode & SK_PROM_MODE_LLC)) { /* Prom. LLC */
+ /* Set the MAC in Promiscuous Mode */
+ SkMacPromiscMode(pAC, IoC, PortNumber, SK_TRUE);
+ }
+ else if ((CurPromMode & SK_PROM_MODE_LLC) &&
+ !(NewPromMode & SK_PROM_MODE_LLC)) { /* Norm. LLC. */
+ /* Clear Promiscuous Mode */
+ SkMacPromiscMode(pAC, IoC, PortNumber, SK_FALSE);
+ }
+
+ return (SK_ADDR_SUCCESS);
+
+} /* SkAddrXmacPromiscuousChange */
+
+
+/******************************************************************************
+ *
+ * SkAddrGmacPromiscuousChange - set promiscuous mode for given port
+ *
+ * Description:
+ * This routine manages promiscuous mode:
+ * - none
+ * - all LLC frames
+ * - all MC frames
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrGmacPromiscuousChange(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 PortNumber, /* port whose promiscuous mode changes */
+int NewPromMode) /* new promiscuous mode */
+{
+ SK_U16 ReceiveControl; /* GMAC Receive Control Register */
+ int CurPromMode = SK_PROM_MODE_NONE;
+
+ /* Read CurPromMode from Hardware. */
+ GM_IN16(IoC, PortNumber, GM_RX_CTRL, &ReceiveControl);
+
+ if ((ReceiveControl & (GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA)) == 0) {
+ /* Promiscuous mode! */
+ CurPromMode |= SK_PROM_MODE_LLC;
+ }
+
+ if ((ReceiveControl & GM_RXCR_MCF_ENA) == 0) {
+ /* All Multicast mode! */
+ CurPromMode |= (pAC->Addr.Port[PortNumber].PromMode & SK_PROM_MODE_ALL_MC);
+ }
+
+ pAC->Addr.Port[PortNumber].PromMode = NewPromMode;
+
+ if (NewPromMode == CurPromMode) {
+ return (SK_ADDR_SUCCESS);
+ }
+
+ if ((NewPromMode & SK_PROM_MODE_ALL_MC) &&
+ !(CurPromMode & SK_PROM_MODE_ALL_MC)) { /* All MC */
+
+ /* Set all bits in 64-bit hash register. */
+ GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1, &OnesHash);
+
+ /* Enable Hashing */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+
+ if ((CurPromMode & SK_PROM_MODE_ALL_MC) &&
+ !(NewPromMode & SK_PROM_MODE_ALL_MC)) { /* Norm. MC */
+
+ /* Set 64-bit hash register to InexactFilter. */
+ GM_OUTHASH(IoC, PortNumber, GM_MC_ADDR_H1,
+ &pAC->Addr.Port[PortNumber].InexactFilter.Bytes[0]);
+
+ /* Enable Hashing. */
+ SkMacHashing(pAC, IoC, PortNumber, SK_TRUE);
+ }
+
+ if ((NewPromMode & SK_PROM_MODE_LLC) &&
+ !(CurPromMode & SK_PROM_MODE_LLC)) { /* Prom. LLC */
+
+ /* Set the MAC to Promiscuous Mode. */
+ SkMacPromiscMode(pAC, IoC, PortNumber, SK_TRUE);
+ }
+ else if ((CurPromMode & SK_PROM_MODE_LLC) &&
+ !(NewPromMode & SK_PROM_MODE_LLC)) { /* Norm. LLC */
+
+ /* Clear Promiscuous Mode. */
+ SkMacPromiscMode(pAC, IoC, PortNumber, SK_FALSE);
+ }
+
+ return (SK_ADDR_SUCCESS);
+
+} /* SkAddrGmacPromiscuousChange */
+
+
+/******************************************************************************
+ *
+ * SkAddrSwap - swap address info
+ *
+ * Description:
+ * This routine swaps address info of two ports.
+ *
+ * Context:
+ * runtime, pageable
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * SK_ADDR_SUCCESS
+ * SK_ADDR_ILLEGAL_PORT
+ */
+int SkAddrSwap(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+SK_U32 FromPortNumber, /* Port1 Index */
+SK_U32 ToPortNumber) /* Port2 Index */
+{
+ int i;
+ SK_U8 Byte;
+ SK_MAC_ADDR MacAddr;
+ SK_U32 DWord;
+
+ if (FromPortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ if (ToPortNumber >= (SK_U32) pAC->GIni.GIMacsFound) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ if (pAC->Rlmt.Port[FromPortNumber].Net != pAC->Rlmt.Port[ToPortNumber].Net) {
+ return (SK_ADDR_ILLEGAL_PORT);
+ }
+
+ /*
+ * Swap:
+ * - Exact Match Entries (GEnesis and Yukon)
+ * Yukon uses first entry for the logical MAC
+ * address (stored in the second GMAC register).
+ * - FirstExactMatchRlmt (GEnesis only)
+ * - NextExactMatchRlmt (GEnesis only)
+ * - FirstExactMatchDrv (GEnesis only)
+ * - NextExactMatchDrv (GEnesis only)
+ * - 64-bit filter (InexactFilter)
+ * - Promiscuous Mode
+ * of ports.
+ */
+
+ for (i = 0; i < SK_ADDR_EXACT_MATCHES; i++) {
+ MacAddr = pAC->Addr.Port[FromPortNumber].Exact[i];
+ pAC->Addr.Port[FromPortNumber].Exact[i] =
+ pAC->Addr.Port[ToPortNumber].Exact[i];
+ pAC->Addr.Port[ToPortNumber].Exact[i] = MacAddr;
+ }
+
+ for (i = 0; i < 8; i++) {
+ Byte = pAC->Addr.Port[FromPortNumber].InexactFilter.Bytes[i];
+ pAC->Addr.Port[FromPortNumber].InexactFilter.Bytes[i] =
+ pAC->Addr.Port[ToPortNumber].InexactFilter.Bytes[i];
+ pAC->Addr.Port[ToPortNumber].InexactFilter.Bytes[i] = Byte;
+ }
+
+ i = pAC->Addr.Port[FromPortNumber].PromMode;
+ pAC->Addr.Port[FromPortNumber].PromMode = pAC->Addr.Port[ToPortNumber].PromMode;
+ pAC->Addr.Port[ToPortNumber].PromMode = i;
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ DWord = pAC->Addr.Port[FromPortNumber].FirstExactMatchRlmt;
+ pAC->Addr.Port[FromPortNumber].FirstExactMatchRlmt =
+ pAC->Addr.Port[ToPortNumber].FirstExactMatchRlmt;
+ pAC->Addr.Port[ToPortNumber].FirstExactMatchRlmt = DWord;
+
+ DWord = pAC->Addr.Port[FromPortNumber].NextExactMatchRlmt;
+ pAC->Addr.Port[FromPortNumber].NextExactMatchRlmt =
+ pAC->Addr.Port[ToPortNumber].NextExactMatchRlmt;
+ pAC->Addr.Port[ToPortNumber].NextExactMatchRlmt = DWord;
+
+ DWord = pAC->Addr.Port[FromPortNumber].FirstExactMatchDrv;
+ pAC->Addr.Port[FromPortNumber].FirstExactMatchDrv =
+ pAC->Addr.Port[ToPortNumber].FirstExactMatchDrv;
+ pAC->Addr.Port[ToPortNumber].FirstExactMatchDrv = DWord;
+
+ DWord = pAC->Addr.Port[FromPortNumber].NextExactMatchDrv;
+ pAC->Addr.Port[FromPortNumber].NextExactMatchDrv =
+ pAC->Addr.Port[ToPortNumber].NextExactMatchDrv;
+ pAC->Addr.Port[ToPortNumber].NextExactMatchDrv = DWord;
+ }
+
+ /* CAUTION: Solution works if only ports of one adapter are in use. */
+ for (i = 0; (SK_U32) i < pAC->Rlmt.Net[pAC->Rlmt.Port[ToPortNumber].
+ Net->NetNumber].NumPorts; i++) {
+ if (pAC->Rlmt.Net[pAC->Rlmt.Port[ToPortNumber].Net->NetNumber].
+ Port[i]->PortNumber == ToPortNumber) {
+ pAC->Addr.Net[pAC->Rlmt.Port[ToPortNumber].Net->NetNumber].
+ ActivePort = i;
+ /* 20001207 RA: Was "ToPortNumber;". */
+ }
+ }
+
+ (void) SkAddrMcUpdate(pAC, IoC, FromPortNumber);
+ (void) SkAddrMcUpdate(pAC, IoC, ToPortNumber);
+
+ return (SK_ADDR_SUCCESS);
+
+} /* SkAddrSwap */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skcsum.c u-boot-2009.03/drivers/net/sk98lin/skcsum.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skcsum.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skcsum.c 2009-03-31 14:54:29.315632000 -0700
@@ -1,925 +1,928 @@
-/******************************************************************************
- *
- * Name: skcsum.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.10 $
- * Date: $Date: 2002/04/11 10:02:04 $
- * Purpose: Store/verify Internet checksum in send/receive packets.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2001 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skcsum.c,v $
- * Revision 1.10 2002/04/11 10:02:04 rwahl
- * Fix in SkCsGetSendInfo():
- * - function did not return ProtocolFlags in every case.
- * - pseudo header csum calculated wrong for big endian.
- *
- * Revision 1.9 2001/06/13 07:42:08 gklug
- * fix: NetNumber was wrong in CLEAR_STAT event
- * add: check for good NetNumber in Clear STAT
- *
- * Revision 1.8 2001/02/06 11:15:36 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.7 2000/06/29 13:17:05 rassmann
- * Corrected reception of a packet with UDP checksum == 0 (which means there
- * is no UDP checksum).
- *
- * Revision 1.6 2000/02/21 12:35:10 cgoos
- * Fixed license header comment.
- *
- * Revision 1.5 2000/02/21 11:05:19 cgoos
- * Merged changes back to common source.
- * Fixed rx path for BIG ENDIAN architecture.
- *
- * Revision 1.1 1999/07/26 15:28:12 mkarl
- * added return SKCS_STATUS_IP_CSUM_ERROR_UDP and
- * SKCS_STATUS_IP_CSUM_ERROR_TCP to pass the NidsTester
- * changed from common source to windows specific source
- * therefore restarting with v1.0
- *
- * Revision 1.3 1999/05/10 08:39:33 mkarl
- * prevent overflows in SKCS_HTON16
- * fixed a bug in pseudo header checksum calculation
- * added some comments
- *
- * Revision 1.2 1998/10/22 11:53:28 swolf
- * Now using SK_DBG_MSG.
- *
- * Revision 1.1 1998/09/01 15:35:41 swolf
- * initial revision
- *
- * 13-May-1998 sw Created.
- *
- ******************************************************************************/
-
-#include <config.h>
-
-#ifdef SK_USE_CSUM /* Check if CSUM is to be used. */
-
-#ifndef lint
-static const char SysKonnectFileId[] = "@(#)"
- "$Id: skcsum.c,v 1.10 2002/04/11 10:02:04 rwahl Exp $"
- " (C) SysKonnect.";
-#endif /* !lint */
-
-/******************************************************************************
- *
- * Description:
- *
- * This is the "GEnesis" common module "CSUM".
- *
- * This module contains the code necessary to calculate, store, and verify the
- * Internet Checksum of IP, TCP, and UDP frames.
- *
- * "GEnesis" is an abbreviation of "Gigabit Ethernet Network System in Silicon"
- * and is the code name of this SysKonnect project.
- *
- * Compilation Options:
- *
- * SK_USE_CSUM - Define if CSUM is to be used. Otherwise, CSUM will be an
- * empty module.
- *
- * SKCS_OVERWRITE_PROTO - Define to overwrite the default protocol id
- * definitions. In this case, all SKCS_PROTO_xxx definitions must be made
- * external.
- *
- * SKCS_OVERWRITE_STATUS - Define to overwrite the default return status
- * definitions. In this case, all SKCS_STATUS_xxx definitions must be made
- * external.
- *
- * Include File Hierarchy:
- *
- * "h/skdrv1st.h"
- * "h/skcsum.h"
- * "h/sktypes.h"
- * "h/skqueue.h"
- * "h/skdrv2nd.h"
- *
- ******************************************************************************/
-
-#include "h/skdrv1st.h"
-#include "h/skcsum.h"
-#include "h/skdrv2nd.h"
-
-/* defines ********************************************************************/
-
-/* The size of an Ethernet MAC header. */
-#define SKCS_ETHERNET_MAC_HEADER_SIZE (6+6+2)
-
-/* The size of the used topology's MAC header. */
-#define SKCS_MAC_HEADER_SIZE SKCS_ETHERNET_MAC_HEADER_SIZE
-
-/* The size of the IP header without any option fields. */
-#define SKCS_IP_HEADER_SIZE 20
-
-/*
- * Field offsets within the IP header.
- */
-
-/* "Internet Header Version" and "Length". */
-#define SKCS_OFS_IP_HEADER_VERSION_AND_LENGTH 0
-
-/* "Total Length". */
-#define SKCS_OFS_IP_TOTAL_LENGTH 2
-
-/* "Flags" "Fragment Offset". */
-#define SKCS_OFS_IP_FLAGS_AND_FRAGMENT_OFFSET 6
-
-/* "Next Level Protocol" identifier. */
-#define SKCS_OFS_IP_NEXT_LEVEL_PROTOCOL 9
-
-/* Source IP address. */
-#define SKCS_OFS_IP_SOURCE_ADDRESS 12
-
-/* Destination IP address. */
-#define SKCS_OFS_IP_DESTINATION_ADDRESS 16
-
-
-/*
- * Field offsets within the UDP header.
- */
-
-/* UDP checksum. */
-#define SKCS_OFS_UDP_CHECKSUM 6
-
-/* IP "Next Level Protocol" identifiers (see RFC 790). */
-#define SKCS_PROTO_ID_TCP 6 /* Transport Control Protocol */
-#define SKCS_PROTO_ID_UDP 17 /* User Datagram Protocol */
-
-/* IP "Don't Fragment" bit. */
-#define SKCS_IP_DONT_FRAGMENT SKCS_HTON16(0x4000)
-
-/* Add a byte offset to a pointer. */
-#define SKCS_IDX(pPtr, Ofs) ((void *) ((char *) (pPtr) + (Ofs)))
-
-/*
- * Macros that convert host to network representation and vice versa, i.e.
- * little/big endian conversion on little endian machines only.
- */
-#ifdef SK_LITTLE_ENDIAN
-#define SKCS_HTON16(Val16) (((unsigned) (Val16) >> 8) | (((Val16) & 0xFF) << 8))
-#endif /* SK_LITTLE_ENDIAN */
-#ifdef SK_BIG_ENDIAN
-#define SKCS_HTON16(Val16) (Val16)
-#endif /* SK_BIG_ENDIAN */
-#define SKCS_NTOH16(Val16) SKCS_HTON16(Val16)
-
-/* typedefs *******************************************************************/
-
-/* function prototypes ********************************************************/
-
-/******************************************************************************
- *
- * SkCsGetSendInfo - get checksum information for a send packet
- *
- * Description:
- * Get all checksum information necessary to send a TCP or UDP packet. The
- * function checks the IP header passed to it. If the high-level protocol
- * is either TCP or UDP the pseudo header checksum is calculated and
- * returned.
- *
- * The function returns the total length of the IP header (including any
- * IP option fields), which is the same as the start offset of the IP data
- * which in turn is the start offset of the TCP or UDP header.
- *
- * The function also returns the TCP or UDP pseudo header checksum, which
- * should be used as the start value for the hardware checksum calculation.
- * (Note that any actual pseudo header checksum can never calculate to
- * zero.)
- *
- * Note:
- * There is a bug in the ASIC which may lead to wrong checksums.
- *
- * Arguments:
- * pAc - A pointer to the adapter context struct.
- *
- * pIpHeader - Pointer to IP header. Must be at least the IP header *not*
- * including any option fields, i.e. at least 20 bytes.
- *
- * Note: This pointer will be used to address 8-, 16-, and 32-bit
- * variables with the respective alignment offsets relative to the pointer.
- * Thus, the pointer should point to a 32-bit aligned address. If the
- * target system cannot address 32-bit variables on non 32-bit aligned
- * addresses, then the pointer *must* point to a 32-bit aligned address.
- *
- * pPacketInfo - A pointer to the packet information structure for this
- * packet. Before calling this SkCsGetSendInfo(), the following field must
- * be initialized:
- *
- * ProtocolFlags - Initialize with any combination of
- * SKCS_PROTO_XXX bit flags. SkCsGetSendInfo() will only work on
- * the protocols specified here. Any protocol(s) not specified
- * here will be ignored.
- *
- * Note: Only one checksum can be calculated in hardware. Thus, if
- * SKCS_PROTO_IP is specified in the 'ProtocolFlags',
- * SkCsGetSendInfo() must calculate the IP header checksum in
- * software. It might be a better idea to have the calling
- * protocol stack calculate the IP header checksum.
- *
- * Returns: N/A
- * On return, the following fields in 'pPacketInfo' may or may not have
- * been filled with information, depending on the protocol(s) found in the
- * packet:
- *
- * ProtocolFlags - Returns the SKCS_PROTO_XXX bit flags of the protocol(s)
- * that were both requested by the caller and actually found in the packet.
- * Protocol(s) not specified by the caller and/or not found in the packet
- * will have their respective SKCS_PROTO_XXX bit flags reset.
- *
- * Note: For IP fragments, TCP and UDP packet information is ignored.
- *
- * IpHeaderLength - The total length in bytes of the complete IP header
- * including any option fields is returned here. This is the start offset
- * of the IP data, i.e. the TCP or UDP header if present.
- *
- * IpHeaderChecksum - If IP has been specified in the 'ProtocolFlags', the
- * 16-bit Internet Checksum of the IP header is returned here. This value
- * is to be stored into the packet's 'IP Header Checksum' field.
- *
- * PseudoHeaderChecksum - If this is a TCP or UDP packet and if TCP or UDP
- * has been specified in the 'ProtocolFlags', the 16-bit Internet Checksum
- * of the TCP or UDP pseudo header is returned here.
- */
-#if 0
-void SkCsGetSendInfo(
-SK_AC *pAc, /* Adapter context struct. */
-void *pIpHeader, /* IP header. */
-SKCS_PACKET_INFO *pPacketInfo, /* Packet information struct. */
-int NetNumber) /* Net number */
-{
- /* Internet Header Version found in IP header. */
- unsigned InternetHeaderVersion;
-
- /* Length of the IP header as found in IP header. */
- unsigned IpHeaderLength;
-
- /* Bit field specifiying the desired/found protocols. */
- unsigned ProtocolFlags;
-
- /* Next level protocol identifier found in IP header. */
- unsigned NextLevelProtocol;
-
- /* Length of IP data portion. */
- unsigned IpDataLength;
-
- /* TCP/UDP pseudo header checksum. */
- unsigned long PseudoHeaderChecksum;
-
- /* Pointer to next level protocol statistics structure. */
- SKCS_PROTO_STATS *NextLevelProtoStats;
-
- /* Temporary variable. */
- unsigned Tmp;
-
- Tmp = *(SK_U8 *)
- SKCS_IDX(pIpHeader, SKCS_OFS_IP_HEADER_VERSION_AND_LENGTH);
-
- /* Get the Internet Header Version (IHV). */
- /* Note: The IHV is stored in the upper four bits. */
-
- InternetHeaderVersion = Tmp >> 4;
-
- /* Check the Internet Header Version. */
- /* Note: We currently only support IP version 4. */
-
- if (InternetHeaderVersion != 4) { /* IPv4? */
- SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_TX,
- ("Tx: Unknown Internet Header Version %u.\n",
- InternetHeaderVersion));
- pPacketInfo->ProtocolFlags = 0;
- pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].TxUnableCts++;
- return;
- }
-
- /* Get the IP header length (IHL). */
- /*
- * Note: The IHL is stored in the lower four bits as the number of
- * 4-byte words.
- */
-
- IpHeaderLength = (Tmp & 0xf) * 4;
- pPacketInfo->IpHeaderLength = IpHeaderLength;
-
- /* Check the IP header length. */
-
- /* 04-Aug-1998 sw - Really check the IHL? Necessary? */
-
- if (IpHeaderLength < 5*4) {
- SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_TX,
- ("Tx: Invalid IP Header Length %u.\n", IpHeaderLength));
- pPacketInfo->ProtocolFlags = 0;
- pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].TxUnableCts++;
- return;
- }
-
- /* This is an IPv4 frame with a header of valid length. */
-
- pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].TxOkCts++;
-
- /* Check if we should calculate the IP header checksum. */
-
- ProtocolFlags = pPacketInfo->ProtocolFlags;
-
- if (ProtocolFlags & SKCS_PROTO_IP) {
- pPacketInfo->IpHeaderChecksum =
- SkCsCalculateChecksum(pIpHeader, IpHeaderLength);
- }
-
- /* Get the next level protocol identifier. */
-
- NextLevelProtocol =
- *(SK_U8 *) SKCS_IDX(pIpHeader, SKCS_OFS_IP_NEXT_LEVEL_PROTOCOL);
-
- /*
- * Check if this is a TCP or UDP frame and if we should calculate the
- * TCP/UDP pseudo header checksum.
- *
- * Also clear all protocol bit flags of protocols not present in the
- * frame.
- */
-
- if ((ProtocolFlags & SKCS_PROTO_TCP) != 0 &&
- NextLevelProtocol == SKCS_PROTO_ID_TCP) {
- /* TCP/IP frame. */
- ProtocolFlags &= SKCS_PROTO_TCP | SKCS_PROTO_IP;
- NextLevelProtoStats =
- &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_TCP];
- }
- else if ((ProtocolFlags & SKCS_PROTO_UDP) != 0 &&
- NextLevelProtocol == SKCS_PROTO_ID_UDP) {
- /* UDP/IP frame. */
- ProtocolFlags &= SKCS_PROTO_UDP | SKCS_PROTO_IP;
- NextLevelProtoStats =
- &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_UDP];
- }
- else {
- /*
- * Either not a TCP or UDP frame and/or TCP/UDP processing not
- * specified.
- */
- pPacketInfo->ProtocolFlags = ProtocolFlags & SKCS_PROTO_IP;
- return;
- }
-
- /* Check if this is an IP fragment. */
-
- /*
- * Note: An IP fragment has a non-zero "Fragment Offset" field and/or
- * the "More Fragments" bit set. Thus, if both the "Fragment Offset"
- * and the "More Fragments" are zero, it is *not* a fragment. We can
- * easily check both at the same time since they are in the same 16-bit
- * word.
- */
-
- if ((*(SK_U16 *)
- SKCS_IDX(pIpHeader, SKCS_OFS_IP_FLAGS_AND_FRAGMENT_OFFSET) &
- ~SKCS_IP_DONT_FRAGMENT) != 0) {
- /* IP fragment; ignore all other protocols. */
- pPacketInfo->ProtocolFlags = ProtocolFlags & SKCS_PROTO_IP;
- NextLevelProtoStats->TxUnableCts++;
- return;
- }
-
- /*
- * Calculate the TCP/UDP pseudo header checksum.
- */
-
- /* Get total length of IP header and data. */
-
- IpDataLength =
- *(SK_U16 *) SKCS_IDX(pIpHeader, SKCS_OFS_IP_TOTAL_LENGTH);
-
- /* Get length of IP data portion. */
-
- IpDataLength = SKCS_NTOH16(IpDataLength) - IpHeaderLength;
-
- /* Calculate the sum of all pseudo header fields (16-bit). */
-
- PseudoHeaderChecksum =
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_SOURCE_ADDRESS + 0) +
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_SOURCE_ADDRESS + 2) +
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_DESTINATION_ADDRESS + 0) +
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_DESTINATION_ADDRESS + 2) +
- (unsigned long) SKCS_HTON16(NextLevelProtocol) +
- (unsigned long) SKCS_HTON16(IpDataLength);
-
- /* Add-in any carries. */
-
- SKCS_OC_ADD(PseudoHeaderChecksum, PseudoHeaderChecksum, 0);
-
- /* Add-in any new carry. */
-
- SKCS_OC_ADD(pPacketInfo->PseudoHeaderChecksum, PseudoHeaderChecksum, 0);
-
- pPacketInfo->ProtocolFlags = ProtocolFlags;
- NextLevelProtoStats->TxOkCts++; /* Success. */
-} /* SkCsGetSendInfo */
-
-
-/******************************************************************************
- *
- * SkCsGetReceiveInfo - verify checksum information for a received packet
- *
- * Description:
- * Verify a received frame's checksum. The function returns a status code
- * reflecting the result of the verification.
- *
- * Note:
- * Before calling this function you have to verify that the frame is
- * not padded and Checksum1 and Checksum2 are bigger than 1.
- *
- * Arguments:
- * pAc - Pointer to adapter context struct.
- *
- * pIpHeader - Pointer to IP header. Must be at least the length in bytes
- * of the received IP header including any option fields. For UDP packets,
- * 8 additional bytes are needed to access the UDP checksum.
- *
- * Note: The actual length of the IP header is stored in the lower four
- * bits of the first octet of the IP header as the number of 4-byte words,
- * so it must be multiplied by four to get the length in bytes. Thus, the
- * maximum IP header length is 15 * 4 = 60 bytes.
- *
- * Checksum1 - The first 16-bit Internet Checksum calculated by the
- * hardware starting at the offset returned by SkCsSetReceiveFlags().
- *
- * Checksum2 - The second 16-bit Internet Checksum calculated by the
- * hardware starting at the offset returned by SkCsSetReceiveFlags().
- *
- * Returns:
- * SKCS_STATUS_UNKNOWN_IP_VERSION - Not an IP v4 frame.
- * SKCS_STATUS_IP_CSUM_ERROR - IP checksum error.
- * SKCS_STATUS_IP_CSUM_ERROR_TCP - IP checksum error in TCP frame.
- * SKCS_STATUS_IP_CSUM_ERROR_UDP - IP checksum error in UDP frame
- * SKCS_STATUS_IP_FRAGMENT - IP fragment (IP checksum ok).
- * SKCS_STATUS_IP_CSUM_OK - IP checksum ok (not a TCP or UDP frame).
- * SKCS_STATUS_TCP_CSUM_ERROR - TCP checksum error (IP checksum ok).
- * SKCS_STATUS_UDP_CSUM_ERROR - UDP checksum error (IP checksum ok).
- * SKCS_STATUS_TCP_CSUM_OK - IP and TCP checksum ok.
- * SKCS_STATUS_UDP_CSUM_OK - IP and UDP checksum ok.
- * SKCS_STATUS_IP_CSUM_OK_NO_UDP - IP checksum OK and no UDP checksum.
- *
- * Note: If SKCS_OVERWRITE_STATUS is defined, the SKCS_STATUS_XXX values
- * returned here can be defined in some header file by the module using CSUM.
- * In this way, the calling module can assign return values for its own needs,
- * e.g. by assigning bit flags to the individual protocols.
- */
-SKCS_STATUS SkCsGetReceiveInfo(
-SK_AC *pAc, /* Adapter context struct. */
-void *pIpHeader, /* IP header. */
-unsigned Checksum1, /* Hardware checksum 1. */
-unsigned Checksum2, /* Hardware checksum 2. */
-int NetNumber) /* Net number */
-{
- /* Internet Header Version found in IP header. */
- unsigned InternetHeaderVersion;
-
- /* Length of the IP header as found in IP header. */
- unsigned IpHeaderLength;
-
- /* Length of IP data portion. */
- unsigned IpDataLength;
-
- /* IP header checksum. */
- unsigned IpHeaderChecksum;
-
- /* IP header options checksum, if any. */
- unsigned IpOptionsChecksum;
-
- /* IP data checksum, i.e. TCP/UDP checksum. */
- unsigned IpDataChecksum;
-
- /* Next level protocol identifier found in IP header. */
- unsigned NextLevelProtocol;
-
- /* The checksum of the "next level protocol", i.e. TCP or UDP. */
- unsigned long NextLevelProtocolChecksum;
-
- /* Pointer to next level protocol statistics structure. */
- SKCS_PROTO_STATS *NextLevelProtoStats;
-
- /* Temporary variable. */
- unsigned Tmp;
-
- Tmp = *(SK_U8 *)
- SKCS_IDX(pIpHeader, SKCS_OFS_IP_HEADER_VERSION_AND_LENGTH);
-
- /* Get the Internet Header Version (IHV). */
- /* Note: The IHV is stored in the upper four bits. */
-
- InternetHeaderVersion = Tmp >> 4;
-
- /* Check the Internet Header Version. */
- /* Note: We currently only support IP version 4. */
-
- if (InternetHeaderVersion != 4) { /* IPv4? */
- SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_RX,
- ("Rx: Unknown Internet Header Version %u.\n",
- InternetHeaderVersion));
- pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].RxUnableCts++;
- return (SKCS_STATUS_UNKNOWN_IP_VERSION);
- }
-
- /* Get the IP header length (IHL). */
- /*
- * Note: The IHL is stored in the lower four bits as the number of
- * 4-byte words.
- */
-
- IpHeaderLength = (Tmp & 0xf) * 4;
-
- /* Check the IP header length. */
-
- /* 04-Aug-1998 sw - Really check the IHL? Necessary? */
-
- if (IpHeaderLength < 5*4) {
- SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_RX,
- ("Rx: Invalid IP Header Length %u.\n", IpHeaderLength));
- pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].RxErrCts++;
- return (SKCS_STATUS_IP_CSUM_ERROR);
- }
-
- /* This is an IPv4 frame with a header of valid length. */
-
- /* Get the IP header and data checksum. */
-
- IpDataChecksum = Checksum2;
-
- /*
- * The IP header checksum is calculated as follows:
- *
- * IpHeaderChecksum = Checksum1 - Checksum2
- */
-
- SKCS_OC_SUB(IpHeaderChecksum, Checksum1, Checksum2);
-
- /* Check if any IP header options. */
-
- if (IpHeaderLength > SKCS_IP_HEADER_SIZE) {
-
- /* Get the IP options checksum. */
-
- IpOptionsChecksum = SkCsCalculateChecksum(
- SKCS_IDX(pIpHeader, SKCS_IP_HEADER_SIZE),
- IpHeaderLength - SKCS_IP_HEADER_SIZE);
-
- /* Adjust the IP header and IP data checksums. */
-
- SKCS_OC_ADD(IpHeaderChecksum, IpHeaderChecksum, IpOptionsChecksum);
-
- SKCS_OC_SUB(IpDataChecksum, IpDataChecksum, IpOptionsChecksum);
- }
-
- /*
- * Check if the IP header checksum is ok.
- *
- * NOTE: We must check the IP header checksum even if the caller just wants
- * us to check upper-layer checksums, because we cannot do any further
- * processing of the packet without a valid IP checksum.
- */
-
- /* Get the next level protocol identifier. */
-
- NextLevelProtocol = *(SK_U8 *)
- SKCS_IDX(pIpHeader, SKCS_OFS_IP_NEXT_LEVEL_PROTOCOL);
-
- if (IpHeaderChecksum != 0xFFFF) {
- pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].RxErrCts++;
- /* the NDIS tester wants to know the upper level protocol too */
- if (NextLevelProtocol == SKCS_PROTO_ID_TCP) {
- return(SKCS_STATUS_IP_CSUM_ERROR_TCP);
- }
- else if (NextLevelProtocol == SKCS_PROTO_ID_UDP) {
- return(SKCS_STATUS_IP_CSUM_ERROR_UDP);
- }
- return (SKCS_STATUS_IP_CSUM_ERROR);
- }
-
- /*
- * Check if this is a TCP or UDP frame and if we should calculate the
- * TCP/UDP pseudo header checksum.
- *
- * Also clear all protocol bit flags of protocols not present in the
- * frame.
- */
-
- if ((pAc->Csum.ReceiveFlags[NetNumber] & SKCS_PROTO_TCP) != 0 &&
- NextLevelProtocol == SKCS_PROTO_ID_TCP) {
- /* TCP/IP frame. */
- NextLevelProtoStats =
- &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_TCP];
- }
- else if ((pAc->Csum.ReceiveFlags[NetNumber] & SKCS_PROTO_UDP) != 0 &&
- NextLevelProtocol == SKCS_PROTO_ID_UDP) {
- /* UDP/IP frame. */
- NextLevelProtoStats =
- &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_UDP];
- }
- else {
- /*
- * Either not a TCP or UDP frame and/or TCP/UDP processing not
- * specified.
- */
- return (SKCS_STATUS_IP_CSUM_OK);
- }
-
- /* Check if this is an IP fragment. */
-
- /*
- * Note: An IP fragment has a non-zero "Fragment Offset" field and/or
- * the "More Fragments" bit set. Thus, if both the "Fragment Offset"
- * and the "More Fragments" are zero, it is *not* a fragment. We can
- * easily check both at the same time since they are in the same 16-bit
- * word.
- */
-
- if ((*(SK_U16 *)
- SKCS_IDX(pIpHeader, SKCS_OFS_IP_FLAGS_AND_FRAGMENT_OFFSET) &
- ~SKCS_IP_DONT_FRAGMENT) != 0) {
- /* IP fragment; ignore all other protocols. */
- NextLevelProtoStats->RxUnableCts++;
- return (SKCS_STATUS_IP_FRAGMENT);
- }
-
- /*
- * 08-May-2000 ra
- *
- * From RFC 768 (UDP)
- * If the computed checksum is zero, it is transmitted as all ones (the
- * equivalent in one's complement arithmetic). An all zero transmitted
- * checksum value means that the transmitter generated no checksum (for
- * debugging or for higher level protocols that don't care).
- */
-
- if (NextLevelProtocol == SKCS_PROTO_ID_UDP &&
- *(SK_U16*)SKCS_IDX(pIpHeader, IpHeaderLength + 6) == 0x0000) {
-
- NextLevelProtoStats->RxOkCts++;
-
- return (SKCS_STATUS_IP_CSUM_OK_NO_UDP);
- }
-
- /*
- * Calculate the TCP/UDP checksum.
- */
-
- /* Get total length of IP header and data. */
-
- IpDataLength =
- *(SK_U16 *) SKCS_IDX(pIpHeader, SKCS_OFS_IP_TOTAL_LENGTH);
-
- /* Get length of IP data portion. */
-
- IpDataLength = SKCS_NTOH16(IpDataLength) - IpHeaderLength;
-
- NextLevelProtocolChecksum =
-
- /* Calculate the pseudo header checksum. */
-
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_SOURCE_ADDRESS + 0) +
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_SOURCE_ADDRESS + 2) +
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_DESTINATION_ADDRESS + 0) +
- (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
- SKCS_OFS_IP_DESTINATION_ADDRESS + 2) +
- (unsigned long) SKCS_HTON16(NextLevelProtocol) +
- (unsigned long) SKCS_HTON16(IpDataLength) +
-
- /* Add the TCP/UDP header checksum. */
-
- (unsigned long) IpDataChecksum;
-
- /* Add-in any carries. */
-
- SKCS_OC_ADD(NextLevelProtocolChecksum, NextLevelProtocolChecksum, 0);
-
- /* Add-in any new carry. */
-
- SKCS_OC_ADD(NextLevelProtocolChecksum, NextLevelProtocolChecksum, 0);
-
- /* Check if the TCP/UDP checksum is ok. */
-
- if ((unsigned) NextLevelProtocolChecksum == 0xFFFF) {
-
- /* TCP/UDP checksum ok. */
-
- NextLevelProtoStats->RxOkCts++;
-
- return (NextLevelProtocol == SKCS_PROTO_ID_TCP ?
- SKCS_STATUS_TCP_CSUM_OK : SKCS_STATUS_UDP_CSUM_OK);
- }
-
- /* TCP/UDP checksum error. */
-
- NextLevelProtoStats->RxErrCts++;
-
- return (NextLevelProtocol == SKCS_PROTO_ID_TCP ?
- SKCS_STATUS_TCP_CSUM_ERROR : SKCS_STATUS_UDP_CSUM_ERROR);
-} /* SkCsGetReceiveInfo */
-#endif
-
-
-/******************************************************************************
- *
- * SkCsSetReceiveFlags - set checksum receive flags
- *
- * Description:
- * Use this function to set the various receive flags. According to the
- * protocol flags set by the caller, the start offsets within received
- * packets of the two hardware checksums are returned. These offsets must
- * be stored in all receive descriptors.
- *
- * Arguments:
- * pAc - Pointer to adapter context struct.
- *
- * ReceiveFlags - Any combination of SK_PROTO_XXX flags of the protocols
- * for which the caller wants checksum information on received frames.
- *
- * pChecksum1Offset - The start offset of the first receive descriptor
- * hardware checksum to be calculated for received frames is returned
- * here.
- *
- * pChecksum2Offset - The start offset of the second receive descriptor
- * hardware checksum to be calculated for received frames is returned
- * here.
- *
- * Returns: N/A
- * Returns the two hardware checksum start offsets.
- */
-void SkCsSetReceiveFlags(
-SK_AC *pAc, /* Adapter context struct. */
-unsigned ReceiveFlags, /* New receive flags. */
-unsigned *pChecksum1Offset, /* Offset for hardware checksum 1. */
-unsigned *pChecksum2Offset, /* Offset for hardware checksum 2. */
-int NetNumber)
-{
- /* Save the receive flags. */
-
- pAc->Csum.ReceiveFlags[NetNumber] = ReceiveFlags;
-
- /* First checksum start offset is the IP header. */
- *pChecksum1Offset = SKCS_MAC_HEADER_SIZE;
-
- /*
- * Second checksum start offset is the IP data. Note that this may vary
- * if there are any IP header options in the actual packet.
- */
- *pChecksum2Offset = SKCS_MAC_HEADER_SIZE + SKCS_IP_HEADER_SIZE;
-} /* SkCsSetReceiveFlags */
-
-#ifndef SkCsCalculateChecksum
-
-/******************************************************************************
- *
- * SkCsCalculateChecksum - calculate checksum for specified data
- *
- * Description:
- * Calculate and return the 16-bit Internet Checksum for the specified
- * data.
- *
- * Arguments:
- * pData - Pointer to data for which the checksum shall be calculated.
- * Note: The pointer should be aligned on a 16-bit boundary.
- *
- * Length - Length in bytes of data to checksum.
- *
- * Returns:
- * The 16-bit Internet Checksum for the specified data.
- *
- * Note: The checksum is calculated in the machine's natural byte order,
- * i.e. little vs. big endian. Thus, the resulting checksum is different
- * for the same input data on little and big endian machines.
- *
- * However, when written back to the network packet, the byte order is
- * always in correct network order.
- */
-unsigned SkCsCalculateChecksum(
-void *pData, /* Data to checksum. */
-unsigned Length) /* Length of data. */
-{
- SK_U16 *pU16; /* Pointer to the data as 16-bit words. */
- unsigned long Checksum; /* Checksum; must be at least 32 bits. */
-
- /* Sum up all 16-bit words. */
-
- pU16 = (SK_U16 *) pData;
- for (Checksum = 0; Length > 1; Length -= 2) {
- Checksum += *pU16++;
- }
-
- /* If this is an odd number of bytes, add-in the last byte. */
-
- if (Length > 0) {
-#ifdef SK_BIG_ENDIAN
- /* Add the last byte as the high byte. */
- Checksum += ((unsigned) *(SK_U8 *) pU16) << 8;
-#else /* !SK_BIG_ENDIAN */
- /* Add the last byte as the low byte. */
- Checksum += *(SK_U8 *) pU16;
-#endif /* !SK_BIG_ENDIAN */
- }
-
- /* Add-in any carries. */
-
- SKCS_OC_ADD(Checksum, Checksum, 0);
-
- /* Add-in any new carry. */
-
- SKCS_OC_ADD(Checksum, Checksum, 0);
-
- /* Note: All bits beyond the 16-bit limit are now zero. */
-
- return ((unsigned) Checksum);
-} /* SkCsCalculateChecksum */
-
-#endif /* SkCsCalculateChecksum */
-
-/******************************************************************************
- *
- * SkCsEvent - the CSUM event dispatcher
- *
- * Description:
- * This is the event handler for the CSUM module.
- *
- * Arguments:
- * pAc - Pointer to adapter context.
- *
- * Ioc - I/O context.
- *
- * Event - Event id.
- *
- * Param - Event dependent parameter.
- *
- * Returns:
- * The 16-bit Internet Checksum for the specified data.
- *
- * Note: The checksum is calculated in the machine's natural byte order,
- * i.e. little vs. big endian. Thus, the resulting checksum is different
- * for the same input data on little and big endian machines.
- *
- * However, when written back to the network packet, the byte order is
- * always in correct network order.
- */
-int SkCsEvent(
-SK_AC *pAc, /* Pointer to adapter context. */
-SK_IOC Ioc, /* I/O context. */
-SK_U32 Event, /* Event id. */
-SK_EVPARA Param) /* Event dependent parameter. */
-{
- int ProtoIndex;
- int NetNumber;
-
- switch (Event) {
- /*
- * Clear protocol statistics.
- *
- * Param - Protocol index, or -1 for all protocols.
- * - Net number.
- */
- case SK_CSUM_EVENT_CLEAR_PROTO_STATS:
-
- ProtoIndex = (int)Param.Para32[1];
- NetNumber = (int)Param.Para32[0];
- if (ProtoIndex < 0) { /* Clear for all protocols. */
- if (NetNumber >= 0) {
- memset(&pAc->Csum.ProtoStats[NetNumber][0], 0,
- sizeof(pAc->Csum.ProtoStats[NetNumber]));
- }
- }
- else { /* Clear for individual protocol. */
- memset(&pAc->Csum.ProtoStats[NetNumber][ProtoIndex], 0,
- sizeof(pAc->Csum.ProtoStats[NetNumber][ProtoIndex]));
- }
- break;
- default:
- break;
- }
- return (0); /* Success. */
-} /* SkCsEvent */
-
-#endif /* SK_USE_CSUM */
+/******************************************************************************
+ *
+ * Name: skcsum.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Store/verify Internet checksum in send/receive packets.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2001 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skcsum.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.10 2002/04/11 10:02:04 rwahl
+ * Fix in SkCsGetSendInfo():
+ * - function did not return ProtocolFlags in every case.
+ * - pseudo header csum calculated wrong for big endian.
+ *
+ * Revision 1.9 2001/06/13 07:42:08 gklug
+ * fix: NetNumber was wrong in CLEAR_STAT event
+ * add: check for good NetNumber in Clear STAT
+ *
+ * Revision 1.8 2001/02/06 11:15:36 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.7 2000/06/29 13:17:05 rassmann
+ * Corrected reception of a packet with UDP checksum == 0 (which means there
+ * is no UDP checksum).
+ *
+ * Revision 1.6 2000/02/21 12:35:10 cgoos
+ * Fixed license header comment.
+ *
+ * Revision 1.5 2000/02/21 11:05:19 cgoos
+ * Merged changes back to common source.
+ * Fixed rx path for BIG ENDIAN architecture.
+ *
+ * Revision 1.1 1999/07/26 15:28:12 mkarl
+ * added return SKCS_STATUS_IP_CSUM_ERROR_UDP and
+ * SKCS_STATUS_IP_CSUM_ERROR_TCP to pass the NidsTester
+ * changed from common source to windows specific source
+ * therefore restarting with v1.0
+ *
+ * Revision 1.3 1999/05/10 08:39:33 mkarl
+ * prevent overflows in SKCS_HTON16
+ * fixed a bug in pseudo header checksum calculation
+ * added some comments
+ *
+ * Revision 1.2 1998/10/22 11:53:28 swolf
+ * Now using SK_DBG_MSG.
+ *
+ * Revision 1.1 1998/09/01 15:35:41 swolf
+ * initial revision
+ *
+ * 13-May-1998 sw Created.
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+#ifdef SK_USE_CSUM /* Check if CSUM is to be used. */
+
+#ifndef lint
+static const char SysKonnectFileId[] = "@(#)"
+ "$Id: skcsum.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $"
+ " (C) SysKonnect.";
+#endif /* !lint */
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This is the "GEnesis" common module "CSUM".
+ *
+ * This module contains the code necessary to calculate, store, and verify the
+ * Internet Checksum of IP, TCP, and UDP frames.
+ *
+ * "GEnesis" is an abbreviation of "Gigabit Ethernet Network System in Silicon"
+ * and is the code name of this SysKonnect project.
+ *
+ * Compilation Options:
+ *
+ * SK_USE_CSUM - Define if CSUM is to be used. Otherwise, CSUM will be an
+ * empty module.
+ *
+ * SKCS_OVERWRITE_PROTO - Define to overwrite the default protocol id
+ * definitions. In this case, all SKCS_PROTO_xxx definitions must be made
+ * external.
+ *
+ * SKCS_OVERWRITE_STATUS - Define to overwrite the default return status
+ * definitions. In this case, all SKCS_STATUS_xxx definitions must be made
+ * external.
+ *
+ * Include File Hierarchy:
+ *
+ * "h/skdrv1st.h"
+ * "h/skcsum.h"
+ * "h/sktypes.h"
+ * "h/skqueue.h"
+ * "h/skdrv2nd.h"
+ *
+ ******************************************************************************/
+
+#include "h/skdrv1st.h"
+#include "h/skcsum.h"
+#include "h/skdrv2nd.h"
+
+/* defines ********************************************************************/
+
+/* The size of an Ethernet MAC header. */
+#define SKCS_ETHERNET_MAC_HEADER_SIZE (6+6+2)
+
+/* The size of the used topology's MAC header. */
+#define SKCS_MAC_HEADER_SIZE SKCS_ETHERNET_MAC_HEADER_SIZE
+
+/* The size of the IP header without any option fields. */
+#define SKCS_IP_HEADER_SIZE 20
+
+/*
+ * Field offsets within the IP header.
+ */
+
+/* "Internet Header Version" and "Length". */
+#define SKCS_OFS_IP_HEADER_VERSION_AND_LENGTH 0
+
+/* "Total Length". */
+#define SKCS_OFS_IP_TOTAL_LENGTH 2
+
+/* "Flags" "Fragment Offset". */
+#define SKCS_OFS_IP_FLAGS_AND_FRAGMENT_OFFSET 6
+
+/* "Next Level Protocol" identifier. */
+#define SKCS_OFS_IP_NEXT_LEVEL_PROTOCOL 9
+
+/* Source IP address. */
+#define SKCS_OFS_IP_SOURCE_ADDRESS 12
+
+/* Destination IP address. */
+#define SKCS_OFS_IP_DESTINATION_ADDRESS 16
+
+
+/*
+ * Field offsets within the UDP header.
+ */
+
+/* UDP checksum. */
+#define SKCS_OFS_UDP_CHECKSUM 6
+
+/* IP "Next Level Protocol" identifiers (see RFC 790). */
+#define SKCS_PROTO_ID_TCP 6 /* Transport Control Protocol */
+#define SKCS_PROTO_ID_UDP 17 /* User Datagram Protocol */
+
+/* IP "Don't Fragment" bit. */
+#define SKCS_IP_DONT_FRAGMENT SKCS_HTON16(0x4000)
+
+/* Add a byte offset to a pointer. */
+#define SKCS_IDX(pPtr, Ofs) ((void *) ((char *) (pPtr) + (Ofs)))
+
+/*
+ * Macros that convert host to network representation and vice versa, i.e.
+ * little/big endian conversion on little endian machines only.
+ */
+#ifdef SK_LITTLE_ENDIAN
+#define SKCS_HTON16(Val16) (((unsigned) (Val16) >> 8) | (((Val16) & 0xFF) << 8))
+#endif /* SK_LITTLE_ENDIAN */
+#ifdef SK_BIG_ENDIAN
+#define SKCS_HTON16(Val16) (Val16)
+#endif /* SK_BIG_ENDIAN */
+#define SKCS_NTOH16(Val16) SKCS_HTON16(Val16)
+
+/* typedefs *******************************************************************/
+
+/* function prototypes ********************************************************/
+
+/******************************************************************************
+ *
+ * SkCsGetSendInfo - get checksum information for a send packet
+ *
+ * Description:
+ * Get all checksum information necessary to send a TCP or UDP packet. The
+ * function checks the IP header passed to it. If the high-level protocol
+ * is either TCP or UDP the pseudo header checksum is calculated and
+ * returned.
+ *
+ * The function returns the total length of the IP header (including any
+ * IP option fields), which is the same as the start offset of the IP data
+ * which in turn is the start offset of the TCP or UDP header.
+ *
+ * The function also returns the TCP or UDP pseudo header checksum, which
+ * should be used as the start value for the hardware checksum calculation.
+ * (Note that any actual pseudo header checksum can never calculate to
+ * zero.)
+ *
+ * Note:
+ * There is a bug in the ASIC which may lead to wrong checksums.
+ *
+ * Arguments:
+ * pAc - A pointer to the adapter context struct.
+ *
+ * pIpHeader - Pointer to IP header. Must be at least the IP header *not*
+ * including any option fields, i.e. at least 20 bytes.
+ *
+ * Note: This pointer will be used to address 8-, 16-, and 32-bit
+ * variables with the respective alignment offsets relative to the pointer.
+ * Thus, the pointer should point to a 32-bit aligned address. If the
+ * target system cannot address 32-bit variables on non 32-bit aligned
+ * addresses, then the pointer *must* point to a 32-bit aligned address.
+ *
+ * pPacketInfo - A pointer to the packet information structure for this
+ * packet. Before calling this SkCsGetSendInfo(), the following field must
+ * be initialized:
+ *
+ * ProtocolFlags - Initialize with any combination of
+ * SKCS_PROTO_XXX bit flags. SkCsGetSendInfo() will only work on
+ * the protocols specified here. Any protocol(s) not specified
+ * here will be ignored.
+ *
+ * Note: Only one checksum can be calculated in hardware. Thus, if
+ * SKCS_PROTO_IP is specified in the 'ProtocolFlags',
+ * SkCsGetSendInfo() must calculate the IP header checksum in
+ * software. It might be a better idea to have the calling
+ * protocol stack calculate the IP header checksum.
+ *
+ * Returns: N/A
+ * On return, the following fields in 'pPacketInfo' may or may not have
+ * been filled with information, depending on the protocol(s) found in the
+ * packet:
+ *
+ * ProtocolFlags - Returns the SKCS_PROTO_XXX bit flags of the protocol(s)
+ * that were both requested by the caller and actually found in the packet.
+ * Protocol(s) not specified by the caller and/or not found in the packet
+ * will have their respective SKCS_PROTO_XXX bit flags reset.
+ *
+ * Note: For IP fragments, TCP and UDP packet information is ignored.
+ *
+ * IpHeaderLength - The total length in bytes of the complete IP header
+ * including any option fields is returned here. This is the start offset
+ * of the IP data, i.e. the TCP or UDP header if present.
+ *
+ * IpHeaderChecksum - If IP has been specified in the 'ProtocolFlags', the
+ * 16-bit Internet Checksum of the IP header is returned here. This value
+ * is to be stored into the packet's 'IP Header Checksum' field.
+ *
+ * PseudoHeaderChecksum - If this is a TCP or UDP packet and if TCP or UDP
+ * has been specified in the 'ProtocolFlags', the 16-bit Internet Checksum
+ * of the TCP or UDP pseudo header is returned here.
+ */
+#if 0
+void SkCsGetSendInfo(
+SK_AC *pAc, /* Adapter context struct. */
+void *pIpHeader, /* IP header. */
+SKCS_PACKET_INFO *pPacketInfo, /* Packet information struct. */
+int NetNumber) /* Net number */
+{
+ /* Internet Header Version found in IP header. */
+ unsigned InternetHeaderVersion;
+
+ /* Length of the IP header as found in IP header. */
+ unsigned IpHeaderLength;
+
+ /* Bit field specifiying the desired/found protocols. */
+ unsigned ProtocolFlags;
+
+ /* Next level protocol identifier found in IP header. */
+ unsigned NextLevelProtocol;
+
+ /* Length of IP data portion. */
+ unsigned IpDataLength;
+
+ /* TCP/UDP pseudo header checksum. */
+ unsigned long PseudoHeaderChecksum;
+
+ /* Pointer to next level protocol statistics structure. */
+ SKCS_PROTO_STATS *NextLevelProtoStats;
+
+ /* Temporary variable. */
+ unsigned Tmp;
+
+ Tmp = *(SK_U8 *)
+ SKCS_IDX(pIpHeader, SKCS_OFS_IP_HEADER_VERSION_AND_LENGTH);
+
+ /* Get the Internet Header Version (IHV). */
+ /* Note: The IHV is stored in the upper four bits. */
+
+ InternetHeaderVersion = Tmp >> 4;
+
+ /* Check the Internet Header Version. */
+ /* Note: We currently only support IP version 4. */
+
+ if (InternetHeaderVersion != 4) { /* IPv4? */
+ SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_TX,
+ ("Tx: Unknown Internet Header Version %u.\n",
+ InternetHeaderVersion));
+ pPacketInfo->ProtocolFlags = 0;
+ pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].TxUnableCts++;
+ return;
+ }
+
+ /* Get the IP header length (IHL). */
+ /*
+ * Note: The IHL is stored in the lower four bits as the number of
+ * 4-byte words.
+ */
+
+ IpHeaderLength = (Tmp & 0xf) * 4;
+ pPacketInfo->IpHeaderLength = IpHeaderLength;
+
+ /* Check the IP header length. */
+
+ /* 04-Aug-1998 sw - Really check the IHL? Necessary? */
+
+ if (IpHeaderLength < 5*4) {
+ SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_TX,
+ ("Tx: Invalid IP Header Length %u.\n", IpHeaderLength));
+ pPacketInfo->ProtocolFlags = 0;
+ pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].TxUnableCts++;
+ return;
+ }
+
+ /* This is an IPv4 frame with a header of valid length. */
+
+ pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].TxOkCts++;
+
+ /* Check if we should calculate the IP header checksum. */
+
+ ProtocolFlags = pPacketInfo->ProtocolFlags;
+
+ if (ProtocolFlags & SKCS_PROTO_IP) {
+ pPacketInfo->IpHeaderChecksum =
+ SkCsCalculateChecksum(pIpHeader, IpHeaderLength);
+ }
+
+ /* Get the next level protocol identifier. */
+
+ NextLevelProtocol =
+ *(SK_U8 *) SKCS_IDX(pIpHeader, SKCS_OFS_IP_NEXT_LEVEL_PROTOCOL);
+
+ /*
+ * Check if this is a TCP or UDP frame and if we should calculate the
+ * TCP/UDP pseudo header checksum.
+ *
+ * Also clear all protocol bit flags of protocols not present in the
+ * frame.
+ */
+
+ if ((ProtocolFlags & SKCS_PROTO_TCP) != 0 &&
+ NextLevelProtocol == SKCS_PROTO_ID_TCP) {
+ /* TCP/IP frame. */
+ ProtocolFlags &= SKCS_PROTO_TCP | SKCS_PROTO_IP;
+ NextLevelProtoStats =
+ &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_TCP];
+ }
+ else if ((ProtocolFlags & SKCS_PROTO_UDP) != 0 &&
+ NextLevelProtocol == SKCS_PROTO_ID_UDP) {
+ /* UDP/IP frame. */
+ ProtocolFlags &= SKCS_PROTO_UDP | SKCS_PROTO_IP;
+ NextLevelProtoStats =
+ &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_UDP];
+ }
+ else {
+ /*
+ * Either not a TCP or UDP frame and/or TCP/UDP processing not
+ * specified.
+ */
+ pPacketInfo->ProtocolFlags = ProtocolFlags & SKCS_PROTO_IP;
+ return;
+ }
+
+ /* Check if this is an IP fragment. */
+
+ /*
+ * Note: An IP fragment has a non-zero "Fragment Offset" field and/or
+ * the "More Fragments" bit set. Thus, if both the "Fragment Offset"
+ * and the "More Fragments" are zero, it is *not* a fragment. We can
+ * easily check both at the same time since they are in the same 16-bit
+ * word.
+ */
+
+ if ((*(SK_U16 *)
+ SKCS_IDX(pIpHeader, SKCS_OFS_IP_FLAGS_AND_FRAGMENT_OFFSET) &
+ ~SKCS_IP_DONT_FRAGMENT) != 0) {
+ /* IP fragment; ignore all other protocols. */
+ pPacketInfo->ProtocolFlags = ProtocolFlags & SKCS_PROTO_IP;
+ NextLevelProtoStats->TxUnableCts++;
+ return;
+ }
+
+ /*
+ * Calculate the TCP/UDP pseudo header checksum.
+ */
+
+ /* Get total length of IP header and data. */
+
+ IpDataLength =
+ *(SK_U16 *) SKCS_IDX(pIpHeader, SKCS_OFS_IP_TOTAL_LENGTH);
+
+ /* Get length of IP data portion. */
+
+ IpDataLength = SKCS_NTOH16(IpDataLength) - IpHeaderLength;
+
+ /* Calculate the sum of all pseudo header fields (16-bit). */
+
+ PseudoHeaderChecksum =
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_SOURCE_ADDRESS + 0) +
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_SOURCE_ADDRESS + 2) +
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_DESTINATION_ADDRESS + 0) +
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_DESTINATION_ADDRESS + 2) +
+ (unsigned long) SKCS_HTON16(NextLevelProtocol) +
+ (unsigned long) SKCS_HTON16(IpDataLength);
+
+ /* Add-in any carries. */
+
+ SKCS_OC_ADD(PseudoHeaderChecksum, PseudoHeaderChecksum, 0);
+
+ /* Add-in any new carry. */
+
+ SKCS_OC_ADD(pPacketInfo->PseudoHeaderChecksum, PseudoHeaderChecksum, 0);
+
+ pPacketInfo->ProtocolFlags = ProtocolFlags;
+ NextLevelProtoStats->TxOkCts++; /* Success. */
+} /* SkCsGetSendInfo */
+
+
+/******************************************************************************
+ *
+ * SkCsGetReceiveInfo - verify checksum information for a received packet
+ *
+ * Description:
+ * Verify a received frame's checksum. The function returns a status code
+ * reflecting the result of the verification.
+ *
+ * Note:
+ * Before calling this function you have to verify that the frame is
+ * not padded and Checksum1 and Checksum2 are bigger than 1.
+ *
+ * Arguments:
+ * pAc - Pointer to adapter context struct.
+ *
+ * pIpHeader - Pointer to IP header. Must be at least the length in bytes
+ * of the received IP header including any option fields. For UDP packets,
+ * 8 additional bytes are needed to access the UDP checksum.
+ *
+ * Note: The actual length of the IP header is stored in the lower four
+ * bits of the first octet of the IP header as the number of 4-byte words,
+ * so it must be multiplied by four to get the length in bytes. Thus, the
+ * maximum IP header length is 15 * 4 = 60 bytes.
+ *
+ * Checksum1 - The first 16-bit Internet Checksum calculated by the
+ * hardware starting at the offset returned by SkCsSetReceiveFlags().
+ *
+ * Checksum2 - The second 16-bit Internet Checksum calculated by the
+ * hardware starting at the offset returned by SkCsSetReceiveFlags().
+ *
+ * Returns:
+ * SKCS_STATUS_UNKNOWN_IP_VERSION - Not an IP v4 frame.
+ * SKCS_STATUS_IP_CSUM_ERROR - IP checksum error.
+ * SKCS_STATUS_IP_CSUM_ERROR_TCP - IP checksum error in TCP frame.
+ * SKCS_STATUS_IP_CSUM_ERROR_UDP - IP checksum error in UDP frame
+ * SKCS_STATUS_IP_FRAGMENT - IP fragment (IP checksum ok).
+ * SKCS_STATUS_IP_CSUM_OK - IP checksum ok (not a TCP or UDP frame).
+ * SKCS_STATUS_TCP_CSUM_ERROR - TCP checksum error (IP checksum ok).
+ * SKCS_STATUS_UDP_CSUM_ERROR - UDP checksum error (IP checksum ok).
+ * SKCS_STATUS_TCP_CSUM_OK - IP and TCP checksum ok.
+ * SKCS_STATUS_UDP_CSUM_OK - IP and UDP checksum ok.
+ * SKCS_STATUS_IP_CSUM_OK_NO_UDP - IP checksum OK and no UDP checksum.
+ *
+ * Note: If SKCS_OVERWRITE_STATUS is defined, the SKCS_STATUS_XXX values
+ * returned here can be defined in some header file by the module using CSUM.
+ * In this way, the calling module can assign return values for its own needs,
+ * e.g. by assigning bit flags to the individual protocols.
+ */
+SKCS_STATUS SkCsGetReceiveInfo(
+SK_AC *pAc, /* Adapter context struct. */
+void *pIpHeader, /* IP header. */
+unsigned Checksum1, /* Hardware checksum 1. */
+unsigned Checksum2, /* Hardware checksum 2. */
+int NetNumber) /* Net number */
+{
+ /* Internet Header Version found in IP header. */
+ unsigned InternetHeaderVersion;
+
+ /* Length of the IP header as found in IP header. */
+ unsigned IpHeaderLength;
+
+ /* Length of IP data portion. */
+ unsigned IpDataLength;
+
+ /* IP header checksum. */
+ unsigned IpHeaderChecksum;
+
+ /* IP header options checksum, if any. */
+ unsigned IpOptionsChecksum;
+
+ /* IP data checksum, i.e. TCP/UDP checksum. */
+ unsigned IpDataChecksum;
+
+ /* Next level protocol identifier found in IP header. */
+ unsigned NextLevelProtocol;
+
+ /* The checksum of the "next level protocol", i.e. TCP or UDP. */
+ unsigned long NextLevelProtocolChecksum;
+
+ /* Pointer to next level protocol statistics structure. */
+ SKCS_PROTO_STATS *NextLevelProtoStats;
+
+ /* Temporary variable. */
+ unsigned Tmp;
+
+ Tmp = *(SK_U8 *)
+ SKCS_IDX(pIpHeader, SKCS_OFS_IP_HEADER_VERSION_AND_LENGTH);
+
+ /* Get the Internet Header Version (IHV). */
+ /* Note: The IHV is stored in the upper four bits. */
+
+ InternetHeaderVersion = Tmp >> 4;
+
+ /* Check the Internet Header Version. */
+ /* Note: We currently only support IP version 4. */
+
+ if (InternetHeaderVersion != 4) { /* IPv4? */
+ SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_RX,
+ ("Rx: Unknown Internet Header Version %u.\n",
+ InternetHeaderVersion));
+ pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].RxUnableCts++;
+ return (SKCS_STATUS_UNKNOWN_IP_VERSION);
+ }
+
+ /* Get the IP header length (IHL). */
+ /*
+ * Note: The IHL is stored in the lower four bits as the number of
+ * 4-byte words.
+ */
+
+ IpHeaderLength = (Tmp & 0xf) * 4;
+
+ /* Check the IP header length. */
+
+ /* 04-Aug-1998 sw - Really check the IHL? Necessary? */
+
+ if (IpHeaderLength < 5*4) {
+ SK_DBG_MSG(pAc, SK_DBGMOD_CSUM, SK_DBGCAT_ERR | SK_DBGCAT_RX,
+ ("Rx: Invalid IP Header Length %u.\n", IpHeaderLength));
+ pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].RxErrCts++;
+ return (SKCS_STATUS_IP_CSUM_ERROR);
+ }
+
+ /* This is an IPv4 frame with a header of valid length. */
+
+ /* Get the IP header and data checksum. */
+
+ IpDataChecksum = Checksum2;
+
+ /*
+ * The IP header checksum is calculated as follows:
+ *
+ * IpHeaderChecksum = Checksum1 - Checksum2
+ */
+
+ SKCS_OC_SUB(IpHeaderChecksum, Checksum1, Checksum2);
+
+ /* Check if any IP header options. */
+
+ if (IpHeaderLength > SKCS_IP_HEADER_SIZE) {
+
+ /* Get the IP options checksum. */
+
+ IpOptionsChecksum = SkCsCalculateChecksum(
+ SKCS_IDX(pIpHeader, SKCS_IP_HEADER_SIZE),
+ IpHeaderLength - SKCS_IP_HEADER_SIZE);
+
+ /* Adjust the IP header and IP data checksums. */
+
+ SKCS_OC_ADD(IpHeaderChecksum, IpHeaderChecksum, IpOptionsChecksum);
+
+ SKCS_OC_SUB(IpDataChecksum, IpDataChecksum, IpOptionsChecksum);
+ }
+
+ /*
+ * Check if the IP header checksum is ok.
+ *
+ * NOTE: We must check the IP header checksum even if the caller just wants
+ * us to check upper-layer checksums, because we cannot do any further
+ * processing of the packet without a valid IP checksum.
+ */
+
+ /* Get the next level protocol identifier. */
+
+ NextLevelProtocol = *(SK_U8 *)
+ SKCS_IDX(pIpHeader, SKCS_OFS_IP_NEXT_LEVEL_PROTOCOL);
+
+ if (IpHeaderChecksum != 0xFFFF) {
+ pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_IP].RxErrCts++;
+ /* the NDIS tester wants to know the upper level protocol too */
+ if (NextLevelProtocol == SKCS_PROTO_ID_TCP) {
+ return(SKCS_STATUS_IP_CSUM_ERROR_TCP);
+ }
+ else if (NextLevelProtocol == SKCS_PROTO_ID_UDP) {
+ return(SKCS_STATUS_IP_CSUM_ERROR_UDP);
+ }
+ return (SKCS_STATUS_IP_CSUM_ERROR);
+ }
+
+ /*
+ * Check if this is a TCP or UDP frame and if we should calculate the
+ * TCP/UDP pseudo header checksum.
+ *
+ * Also clear all protocol bit flags of protocols not present in the
+ * frame.
+ */
+
+ if ((pAc->Csum.ReceiveFlags[NetNumber] & SKCS_PROTO_TCP) != 0 &&
+ NextLevelProtocol == SKCS_PROTO_ID_TCP) {
+ /* TCP/IP frame. */
+ NextLevelProtoStats =
+ &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_TCP];
+ }
+ else if ((pAc->Csum.ReceiveFlags[NetNumber] & SKCS_PROTO_UDP) != 0 &&
+ NextLevelProtocol == SKCS_PROTO_ID_UDP) {
+ /* UDP/IP frame. */
+ NextLevelProtoStats =
+ &pAc->Csum.ProtoStats[NetNumber][SKCS_PROTO_STATS_UDP];
+ }
+ else {
+ /*
+ * Either not a TCP or UDP frame and/or TCP/UDP processing not
+ * specified.
+ */
+ return (SKCS_STATUS_IP_CSUM_OK);
+ }
+
+ /* Check if this is an IP fragment. */
+
+ /*
+ * Note: An IP fragment has a non-zero "Fragment Offset" field and/or
+ * the "More Fragments" bit set. Thus, if both the "Fragment Offset"
+ * and the "More Fragments" are zero, it is *not* a fragment. We can
+ * easily check both at the same time since they are in the same 16-bit
+ * word.
+ */
+
+ if ((*(SK_U16 *)
+ SKCS_IDX(pIpHeader, SKCS_OFS_IP_FLAGS_AND_FRAGMENT_OFFSET) &
+ ~SKCS_IP_DONT_FRAGMENT) != 0) {
+ /* IP fragment; ignore all other protocols. */
+ NextLevelProtoStats->RxUnableCts++;
+ return (SKCS_STATUS_IP_FRAGMENT);
+ }
+
+ /*
+ * 08-May-2000 ra
+ *
+ * From RFC 768 (UDP)
+ * If the computed checksum is zero, it is transmitted as all ones (the
+ * equivalent in one's complement arithmetic). An all zero transmitted
+ * checksum value means that the transmitter generated no checksum (for
+ * debugging or for higher level protocols that don't care).
+ */
+
+ if (NextLevelProtocol == SKCS_PROTO_ID_UDP &&
+ *(SK_U16*)SKCS_IDX(pIpHeader, IpHeaderLength + 6) == 0x0000) {
+
+ NextLevelProtoStats->RxOkCts++;
+
+ return (SKCS_STATUS_IP_CSUM_OK_NO_UDP);
+ }
+
+ /*
+ * Calculate the TCP/UDP checksum.
+ */
+
+ /* Get total length of IP header and data. */
+
+ IpDataLength =
+ *(SK_U16 *) SKCS_IDX(pIpHeader, SKCS_OFS_IP_TOTAL_LENGTH);
+
+ /* Get length of IP data portion. */
+
+ IpDataLength = SKCS_NTOH16(IpDataLength) - IpHeaderLength;
+
+ NextLevelProtocolChecksum =
+
+ /* Calculate the pseudo header checksum. */
+
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_SOURCE_ADDRESS + 0) +
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_SOURCE_ADDRESS + 2) +
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_DESTINATION_ADDRESS + 0) +
+ (unsigned long) *(SK_U16 *) SKCS_IDX(pIpHeader,
+ SKCS_OFS_IP_DESTINATION_ADDRESS + 2) +
+ (unsigned long) SKCS_HTON16(NextLevelProtocol) +
+ (unsigned long) SKCS_HTON16(IpDataLength) +
+
+ /* Add the TCP/UDP header checksum. */
+
+ (unsigned long) IpDataChecksum;
+
+ /* Add-in any carries. */
+
+ SKCS_OC_ADD(NextLevelProtocolChecksum, NextLevelProtocolChecksum, 0);
+
+ /* Add-in any new carry. */
+
+ SKCS_OC_ADD(NextLevelProtocolChecksum, NextLevelProtocolChecksum, 0);
+
+ /* Check if the TCP/UDP checksum is ok. */
+
+ if ((unsigned) NextLevelProtocolChecksum == 0xFFFF) {
+
+ /* TCP/UDP checksum ok. */
+
+ NextLevelProtoStats->RxOkCts++;
+
+ return (NextLevelProtocol == SKCS_PROTO_ID_TCP ?
+ SKCS_STATUS_TCP_CSUM_OK : SKCS_STATUS_UDP_CSUM_OK);
+ }
+
+ /* TCP/UDP checksum error. */
+
+ NextLevelProtoStats->RxErrCts++;
+
+ return (NextLevelProtocol == SKCS_PROTO_ID_TCP ?
+ SKCS_STATUS_TCP_CSUM_ERROR : SKCS_STATUS_UDP_CSUM_ERROR);
+} /* SkCsGetReceiveInfo */
+#endif
+
+
+/******************************************************************************
+ *
+ * SkCsSetReceiveFlags - set checksum receive flags
+ *
+ * Description:
+ * Use this function to set the various receive flags. According to the
+ * protocol flags set by the caller, the start offsets within received
+ * packets of the two hardware checksums are returned. These offsets must
+ * be stored in all receive descriptors.
+ *
+ * Arguments:
+ * pAc - Pointer to adapter context struct.
+ *
+ * ReceiveFlags - Any combination of SK_PROTO_XXX flags of the protocols
+ * for which the caller wants checksum information on received frames.
+ *
+ * pChecksum1Offset - The start offset of the first receive descriptor
+ * hardware checksum to be calculated for received frames is returned
+ * here.
+ *
+ * pChecksum2Offset - The start offset of the second receive descriptor
+ * hardware checksum to be calculated for received frames is returned
+ * here.
+ *
+ * Returns: N/A
+ * Returns the two hardware checksum start offsets.
+ */
+void SkCsSetReceiveFlags(
+SK_AC *pAc, /* Adapter context struct. */
+unsigned ReceiveFlags, /* New receive flags. */
+unsigned *pChecksum1Offset, /* Offset for hardware checksum 1. */
+unsigned *pChecksum2Offset, /* Offset for hardware checksum 2. */
+int NetNumber)
+{
+ /* Save the receive flags. */
+
+ pAc->Csum.ReceiveFlags[NetNumber] = ReceiveFlags;
+
+ /* First checksum start offset is the IP header. */
+ *pChecksum1Offset = SKCS_MAC_HEADER_SIZE;
+
+ /*
+ * Second checksum start offset is the IP data. Note that this may vary
+ * if there are any IP header options in the actual packet.
+ */
+ *pChecksum2Offset = SKCS_MAC_HEADER_SIZE + SKCS_IP_HEADER_SIZE;
+} /* SkCsSetReceiveFlags */
+
+#ifndef SkCsCalculateChecksum
+
+/******************************************************************************
+ *
+ * SkCsCalculateChecksum - calculate checksum for specified data
+ *
+ * Description:
+ * Calculate and return the 16-bit Internet Checksum for the specified
+ * data.
+ *
+ * Arguments:
+ * pData - Pointer to data for which the checksum shall be calculated.
+ * Note: The pointer should be aligned on a 16-bit boundary.
+ *
+ * Length - Length in bytes of data to checksum.
+ *
+ * Returns:
+ * The 16-bit Internet Checksum for the specified data.
+ *
+ * Note: The checksum is calculated in the machine's natural byte order,
+ * i.e. little vs. big endian. Thus, the resulting checksum is different
+ * for the same input data on little and big endian machines.
+ *
+ * However, when written back to the network packet, the byte order is
+ * always in correct network order.
+ */
+unsigned SkCsCalculateChecksum(
+void *pData, /* Data to checksum. */
+unsigned Length) /* Length of data. */
+{
+ SK_U16 *pU16; /* Pointer to the data as 16-bit words. */
+ unsigned long Checksum; /* Checksum; must be at least 32 bits. */
+
+ /* Sum up all 16-bit words. */
+
+ pU16 = (SK_U16 *) pData;
+ for (Checksum = 0; Length > 1; Length -= 2) {
+ Checksum += *pU16++;
+ }
+
+ /* If this is an odd number of bytes, add-in the last byte. */
+
+ if (Length > 0) {
+#ifdef SK_BIG_ENDIAN
+ /* Add the last byte as the high byte. */
+ Checksum += ((unsigned) *(SK_U8 *) pU16) << 8;
+#else /* !SK_BIG_ENDIAN */
+ /* Add the last byte as the low byte. */
+ Checksum += *(SK_U8 *) pU16;
+#endif /* !SK_BIG_ENDIAN */
+ }
+
+ /* Add-in any carries. */
+
+ SKCS_OC_ADD(Checksum, Checksum, 0);
+
+ /* Add-in any new carry. */
+
+ SKCS_OC_ADD(Checksum, Checksum, 0);
+
+ /* Note: All bits beyond the 16-bit limit are now zero. */
+
+ return ((unsigned) Checksum);
+} /* SkCsCalculateChecksum */
+
+#endif /* SkCsCalculateChecksum */
+
+/******************************************************************************
+ *
+ * SkCsEvent - the CSUM event dispatcher
+ *
+ * Description:
+ * This is the event handler for the CSUM module.
+ *
+ * Arguments:
+ * pAc - Pointer to adapter context.
+ *
+ * Ioc - I/O context.
+ *
+ * Event - Event id.
+ *
+ * Param - Event dependent parameter.
+ *
+ * Returns:
+ * The 16-bit Internet Checksum for the specified data.
+ *
+ * Note: The checksum is calculated in the machine's natural byte order,
+ * i.e. little vs. big endian. Thus, the resulting checksum is different
+ * for the same input data on little and big endian machines.
+ *
+ * However, when written back to the network packet, the byte order is
+ * always in correct network order.
+ */
+int SkCsEvent(
+SK_AC *pAc, /* Pointer to adapter context. */
+SK_IOC Ioc, /* I/O context. */
+SK_U32 Event, /* Event id. */
+SK_EVPARA Param) /* Event dependent parameter. */
+{
+ int ProtoIndex;
+ int NetNumber;
+
+ switch (Event) {
+ /*
+ * Clear protocol statistics.
+ *
+ * Param - Protocol index, or -1 for all protocols.
+ * - Net number.
+ */
+ case SK_CSUM_EVENT_CLEAR_PROTO_STATS:
+
+ ProtoIndex = (int)Param.Para32[1];
+ NetNumber = (int)Param.Para32[0];
+ if (ProtoIndex < 0) { /* Clear for all protocols. */
+ if (NetNumber >= 0) {
+ memset(&pAc->Csum.ProtoStats[NetNumber][0], 0,
+ sizeof(pAc->Csum.ProtoStats[NetNumber]));
+ }
+ }
+ else { /* Clear for individual protocol. */
+ memset(&pAc->Csum.ProtoStats[NetNumber][ProtoIndex], 0,
+ sizeof(pAc->Csum.ProtoStats[NetNumber][ProtoIndex]));
+ }
+ break;
+ default:
+ break;
+ }
+ return (0); /* Success. */
+} /* SkCsEvent */
+
+#endif /* SK_USE_CSUM */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skge.c u-boot-2009.03/drivers/net/sk98lin/skge.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skge.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skge.c 2009-03-31 14:54:29.362506400 -0700
@@ -1,4860 +1,4863 @@
-/******************************************************************************
- *
- * Name: skge.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.46 $
- * Date: $Date: 2003/02/25 14:16:36 $
- * Purpose: The main driver source module
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * Driver for SysKonnect Gigabit Ethernet Server Adapters:
- *
- * SK-9871 (single link 1000Base-ZX)
- * SK-9872 (dual link 1000Base-ZX)
- * SK-9861 (single link 1000Base-SX, VF45 Volition Plug)
- * SK-9862 (dual link 1000Base-SX, VF45 Volition Plug)
- * SK-9841 (single link 1000Base-LX)
- * SK-9842 (dual link 1000Base-LX)
- * SK-9843 (single link 1000Base-SX)
- * SK-9844 (dual link 1000Base-SX)
- * SK-9821 (single link 1000Base-T)
- * SK-9822 (dual link 1000Base-T)
- * SK-9881 (single link 1000Base-SX V2 LC)
- * SK-9871 (single link 1000Base-ZX V2)
- * SK-9861 (single link 1000Base-SX V2, VF45 Volition Plug)
- * SK-9841 (single link 1000Base-LX V2)
- * SK-9843 (single link 1000Base-SX V2)
- * SK-9821 (single link 1000Base-T V2)
- *
- * Created 10-Feb-1999, based on Linux' acenic.c, 3c59x.c and
- * SysKonnects GEnesis Solaris driver
- * Author: Christoph Goos (cgoos@syskonnect.de)
- * Mirko Lindner (mlindner@syskonnect.de)
- *
- * Address all question to: linux@syskonnect.de
- *
- * The technical manual for the adapters is available from SysKonnect's
- * web pages: www.syskonnect.com
- * Goto "Support" and search Knowledge Base for "manual".
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skge.c,v $
- * Revision 1.46 2003/02/25 14:16:36 mlindner
- * Fix: Copyright statement
- *
- * Revision 1.45 2003/02/25 13:25:55 mlindner
- * Add: Performance improvements
- * Add: Support for various vendors
- * Fix: Init function
- *
- * Revision 1.44 2003/01/09 09:25:26 mlindner
- * Fix: Remove useless init_module/cleanup_module forward declarations
- *
- * Revision 1.43 2002/11/29 08:42:41 mlindner
- * Fix: Boot message
- *
- * Revision 1.42 2002/11/28 13:30:23 mlindner
- * Add: New frame check
- *
- * Revision 1.41 2002/11/27 13:55:18 mlindner
- * Fix: Drop wrong csum packets
- * Fix: Initialize proc_entry after hw check
- *
- * Revision 1.40 2002/10/31 07:50:37 tschilli
- * Function SkGeInitAssignRamToQueues() from common module inserted.
- * Autonegotiation is set to ON for all adapters.
- * LinkSpeedUsed is used in link up status report.
- * Role parameter will show up for 1000 Mbps links only.
- * GetConfiguration() inserted after init level 1 in SkGeChangeMtu().
- * All return values of SkGeInit() and SkGeInitPort() are checked.
- *
- * Revision 1.39 2002/10/02 12:56:05 mlindner
- * Add: Support for Yukon
- * Add: Support for ZEROCOPY, scatter-gather and hw checksum
- * Add: New transmit ring function (use SG and TCP/UDP hardware checksumming)
- * Add: New init function
- * Add: Speed check and setup
- * Add: Merge source for kernel 2.2.x and 2.4.x
- * Add: Opcode check for tcp
- * Add: Frame length check
- * Fix: Transmit complete interrupt
- * Fix: Interrupt moderation
- *
- * Revision 1.29.2.13 2002/01/14 12:44:52 mlindner
- * Fix: Rlmt modes
- *
- * Revision 1.29.2.12 2001/12/07 12:06:18 mlindner
- * Fix: malloc -> slab changes
- *
- * Revision 1.29.2.11 2001/12/06 15:19:20 mlindner
- * Add: DMA attributes
- * Fix: Module initialisation
- * Fix: pci_map_single and pci_unmap_single replaced
- *
- * Revision 1.29.2.10 2001/12/06 09:56:50 mlindner
- * Corrected some printk's
- *
- * Revision 1.29.2.9 2001/09/05 12:15:34 mlindner
- * Add: LBFO Changes
- * Fix: Counter Errors (Jumbo == to long errors)
- * Fix: Changed pAC->PciDev declaration
- * Fix: too short counters
- *
- * Revision 1.29.2.8 2001/06/25 12:10:44 mlindner
- * fix: ReceiveIrq() changed.
- *
- * Revision 1.29.2.7 2001/06/25 08:07:05 mlindner
- * fix: RLMT locking in ReceiveIrq() changed.
- *
- * Revision 1.29.2.6 2001/05/21 07:59:29 mlindner
- * fix: MTU init problems
- *
- * Revision 1.29.2.5 2001/05/08 11:25:08 mlindner
- * fix: removed VLAN error message
- *
- * Revision 1.29.2.4 2001/05/04 13:31:43 gklug
- * fix: do not handle eth_copy on bad fragments received.
- *
- * Revision 1.29.2.3 2001/04/23 08:06:43 mlindner
- * Fix: error handling
- *
- * Revision 1.29.2.2 2001/03/15 12:04:54 mlindner
- * Fixed memory problem
- *
- * Revision 1.29.2.1 2001/03/12 16:41:44 mlindner
- * add: procfs function
- * add: dual-net function
- * add: RLMT networks
- * add: extended PNMI features
- *
- * Kernel 2.4.x specific:
- * Revision 1.xx 2000/09/12 13:31:56 cgoos
- * Fixed missign "dev=NULL in skge_probe.
- * Added counting for jumbo frames (corrects error statistic).
- * Removed VLAN tag check (enables VLAN support).
- *
- * Kernel 2.2.x specific:
- * Revision 1.29 2000/02/21 13:31:56 cgoos
- * Fixed "unused" warning for UltraSPARC change.
- *
- * Partially kernel 2.2.x specific:
- * Revision 1.28 2000/02/21 10:32:36 cgoos
- * Added fixes for UltraSPARC.
- * Now printing RlmtMode and PrefPort setting at startup.
- * Changed XmitFrame return value.
- * Fixed rx checksum calculation for BIG ENDIAN systems.
- * Fixed rx jumbo frames counted as ierrors.
- *
- *
- * Revision 1.27 1999/11/25 09:06:28 cgoos
- * Changed base_addr to unsigned long.
- *
- * Revision 1.26 1999/11/22 13:29:16 cgoos
- * Changed license header to GPL.
- * Changes for inclusion in linux kernel (2.2.13).
- * Removed 2.0.x defines.
- * Changed SkGeProbe to skge_probe.
- * Added checks in SkGeIoctl.
- *
- * Revision 1.25 1999/10/07 14:47:52 cgoos
- * Changed 984x to 98xx.
- *
- * Revision 1.24 1999/09/30 07:21:01 cgoos
- * Removed SK_RLMT_SLOW_LOOKAHEAD option.
- * Giving spanning tree packets also to OS now.
- *
- * Revision 1.23 1999/09/29 07:36:50 cgoos
- * Changed assignment for IsBc/IsMc.
- *
- * Revision 1.22 1999/09/28 12:57:09 cgoos
- * Added CheckQueue also to Single-Port-ISR.
- *
- * Revision 1.21 1999/09/28 12:42:41 cgoos
- * Changed parameter strings for RlmtMode.
- *
- * Revision 1.20 1999/09/28 12:37:57 cgoos
- * Added CheckQueue for fast delivery of RLMT frames.
- *
- * Revision 1.19 1999/09/16 07:57:25 cgoos
- * Copperfield changes.
- *
- * Revision 1.18 1999/09/03 13:06:30 cgoos
- * Fixed RlmtMode=CheckSeg bug: wrong DEV_KFREE_SKB in RLMT_SEND caused
- * double allocated skb's.
- * FrameStat in ReceiveIrq was accessed via wrong Rxd.
- * Queue size for async. standby Tx queue was zero.
- * FillRxLimit of 0 could cause problems with ReQueue, changed to 1.
- * Removed debug output of checksum statistic.
- *
- * Revision 1.17 1999/08/11 13:55:27 cgoos
- * Transmit descriptor polling was not reenabled after SkGePortInit.
- *
- * Revision 1.16 1999/07/27 15:17:29 cgoos
- * Added some "\n" in output strings (removed while debuging...).
- *
- * Revision 1.15 1999/07/23 12:09:30 cgoos
- * Performance optimization, rx checksumming, large frame support.
- *
- * Revision 1.14 1999/07/14 11:26:27 cgoos
- * Removed Link LED settings (now in RLMT).
- * Added status output at NET UP.
- * Fixed SMP problems with Tx and SWITCH running in parallel.
- * Fixed return code problem at RLMT_SEND event.
- *
- * Revision 1.13 1999/04/07 10:11:42 cgoos
- * Fixed Single Port problems.
- * Fixed Multi-Adapter problems.
- * Always display startup string.
- *
- * Revision 1.12 1999/03/29 12:26:37 cgoos
- * Reversed locking to fine granularity.
- * Fixed skb double alloc problem (caused by incorrect xmit return code).
- * Enhanced function descriptions.
- *
- * Revision 1.11 1999/03/15 13:10:51 cgoos
- * Changed device identifier in output string to ethX.
- *
- * Revision 1.10 1999/03/15 12:12:34 cgoos
- * Changed copyright notice.
- *
- * Revision 1.9 1999/03/15 12:10:17 cgoos
- * Changed locking to one driver lock.
- * Added check of SK_AC-size (for consistency with library).
- *
- * Revision 1.8 1999/03/08 11:44:02 cgoos
- * Fixed missing dev->tbusy in SkGeXmit.
- * Changed large frame (jumbo) buffer number.
- * Added copying of short frames.
- *
- * Revision 1.7 1999/03/04 13:26:57 cgoos
- * Fixed spinlock calls for SMP.
- *
- * Revision 1.6 1999/03/02 09:53:51 cgoos
- * Added descriptor revertion for big endian machines.
- *
- * Revision 1.5 1999/03/01 08:50:59 cgoos
- * Fixed SkGeChangeMtu.
- * Fixed pci config space accesses.
- *
- * Revision 1.4 1999/02/18 15:48:44 cgoos
- * Corrected some printk's.
- *
- * Revision 1.3 1999/02/18 12:45:55 cgoos
- * Changed SK_MAX_CARD_PARAM to default 16
- *
- * Revision 1.2 1999/02/18 10:55:32 cgoos
- * Removed SkGeDrvTimeStamp function.
- * Printing "ethX:" before adapter type at adapter init.
- *
- *
- * 10-Feb-1999 cg Created, based on Linux' acenic.c, 3c59x.c and
- * SysKonnects GEnesis Solaris driver
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Possible compiler options (#define xxx / -Dxxx):
- *
- * debugging can be enable by changing SK_DEBUG_CHKMOD and
- * SK_DEBUG_CHKCAT in makefile (described there).
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * This is the main module of the Linux GE driver.
- *
- * All source files except skge.c, skdrv1st.h, skdrv2nd.h and sktypes.h
- * are part of SysKonnect's COMMON MODULES for the SK-98xx adapters.
- * Those are used for drivers on multiple OS', so some thing may seem
- * unnecessary complicated on Linux. Please do not try to 'clean up'
- * them without VERY good reasons, because this will make it more
- * difficult to keep the Linux driver in synchronisation with the
- * other versions.
- *
- * Include file hierarchy:
- *
- * <linux/module.h>
- *
- * "h/skdrv1st.h"
- * <linux/version.h>
- * <linux/types.h>
- * <linux/kernel.h>
- * <linux/string.h>
- * <linux/errno.h>
- * <linux/ioport.h>
- * <linux/slab.h>
- * <linux/interrupt.h>
- * <linux/pci.h>
- * <asm/byteorder.h>
- * <asm/bitops.h>
- * <asm/io.h>
- * <linux/netdevice.h>
- * <linux/etherdevice.h>
- * <linux/skbuff.h>
- * those three depending on kernel version used:
- * <linux/bios32.h>
- * <linux/init.h>
- * <asm/uaccess.h>
- * <net/checksum.h>
- *
- * "h/skerror.h"
- * "h/skdebug.h"
- * "h/sktypes.h"
- * "h/lm80.h"
- * "h/xmac_ii.h"
- *
- * "h/skdrv2nd.h"
- * "h/skqueue.h"
- * "h/skgehwt.h"
- * "h/sktimer.h"
- * "h/ski2c.h"
- * "h/skgepnmi.h"
- * "h/skvpd.h"
- * "h/skgehw.h"
- * "h/skgeinit.h"
- * "h/skaddr.h"
- * "h/skgesirq.h"
- * "h/skcsum.h"
- * "h/skrlmt.h"
- *
- ******************************************************************************/
-
-#include <config.h>
-
-#include "h/skversion.h"
-#if 0
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/proc_fs.h>
-#endif
-#include "h/skdrv1st.h"
-#include "h/skdrv2nd.h"
-
-
-/* defines ******************************************************************/
-/* for debuging on x86 only */
-/* #define BREAKPOINT() asm(" int $3"); */
-
-/* use the scatter-gather functionality with sendfile() */
-#if 0
-#define SK_ZEROCOPY
-#endif
-
-/* use of a transmit complete interrupt */
-#define USE_TX_COMPLETE
-
-/* use interrupt moderation (for tx complete only) */
-#define USE_INT_MOD
-#define INTS_PER_SEC 1000
-
-/*
- * threshold for copying small receive frames
- * set to 0 to avoid copying, set to 9001 to copy all frames
- */
-#define SK_COPY_THRESHOLD 50
-
-/* number of adapters that can be configured via command line params */
-#define SK_MAX_CARD_PARAM 16
-
-
-/*
- * use those defines for a compile-in version of the driver instead
- * of command line parameters
- */
-/* #define LINK_SPEED_A {"Auto", } */
-/* #define LINK_SPEED_B {"Auto", } */
-/* #define AUTO_NEG_A {"Sense", } */
-/* #define AUTO_NEG_B {"Sense", } */
-/* #define DUP_CAP_A {"Both", } */
-/* #define DUP_CAP_B {"Both", } */
-/* #define FLOW_CTRL_A {"SymOrRem", } */
-/* #define FLOW_CTRL_B {"SymOrRem", } */
-/* #define ROLE_A {"Auto", } */
-/* #define ROLE_B {"Auto", } */
-/* #define PREF_PORT {"A", } */
-/* #define RLMT_MODE {"CheckLinkState", } */
-
-#define DEV_KFREE_SKB(skb) dev_kfree_skb(skb)
-#define DEV_KFREE_SKB_IRQ(skb) dev_kfree_skb_irq(skb)
-#define DEV_KFREE_SKB_ANY(skb) dev_kfree_skb_any(skb)
-
-/* function prototypes ******************************************************/
-static void FreeResources(struct SK_NET_DEVICE *dev);
-static int SkGeBoardInit(struct SK_NET_DEVICE *dev, SK_AC *pAC);
-static SK_BOOL BoardAllocMem(SK_AC *pAC);
-static void BoardFreeMem(SK_AC *pAC);
-static void BoardInitMem(SK_AC *pAC);
-static void SetupRing(SK_AC*, void*, uintptr_t, RXD**, RXD**, RXD**,
- int*, SK_BOOL);
-
-#if 0
-static void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs);
-static void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs);
-static int SkGeOpen(struct SK_NET_DEVICE *dev);
-static int SkGeClose(struct SK_NET_DEVICE *dev);
-static int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev);
-static int SkGeSetMacAddr(struct SK_NET_DEVICE *dev, void *p);
-static void SkGeSetRxMode(struct SK_NET_DEVICE *dev);
-static struct net_device_stats *SkGeStats(struct SK_NET_DEVICE *dev);
-static int SkGeIoctl(struct SK_NET_DEVICE *dev, struct ifreq *rq, int cmd);
-#else
-void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs);
-void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs);
-int SkGeOpen(struct SK_NET_DEVICE *dev);
-int SkGeClose(struct SK_NET_DEVICE *dev);
-int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev);
-#endif
-static void GetConfiguration(SK_AC*);
-static void ProductStr(SK_AC*);
-static int XmitFrame(SK_AC*, TX_PORT*, struct sk_buff*);
-static void FreeTxDescriptors(SK_AC*pAC, TX_PORT*);
-static void FillRxRing(SK_AC*, RX_PORT*);
-static SK_BOOL FillRxDescriptor(SK_AC*, RX_PORT*);
-#if 0
-static void ReceiveIrq(SK_AC*, RX_PORT*, SK_BOOL);
-#else
-void ReceiveIrq(SK_AC*, RX_PORT*, SK_BOOL);
-#endif
-static void ClearAndStartRx(SK_AC*, int);
-static void ClearTxIrq(SK_AC*, int, int);
-static void ClearRxRing(SK_AC*, RX_PORT*);
-static void ClearTxRing(SK_AC*, TX_PORT*);
-#if 0
-static void SetQueueSizes(SK_AC *pAC);
-
-static int SkGeChangeMtu(struct SK_NET_DEVICE *dev, int new_mtu);
-#endif
-static void PortReInitBmu(SK_AC*, int);
-#if 0
-static int SkGeIocMib(DEV_NET*, unsigned int, int);
-static int XmitFrameSG(SK_AC*, TX_PORT*, struct sk_buff*);
-#endif
-
-/*Extern */
-
-/* external Proc function */
-extern int proc_read(
- char *buffer,
- char **buffer_location,
- off_t offset,
- int buffer_length,
- int *eof,
- void *data);
-
-#ifdef DEBUG
-static void DumpMsg(struct sk_buff*, char*);
-static void DumpData(char*, int);
-static void DumpLong(char*, int);
-#endif
-void dump_frag( SK_U8 *data, int length);
-
-/* global variables *********************************************************/
-#if 0
-static const char *BootString = BOOT_STRING;
-#endif
-struct SK_NET_DEVICE *SkGeRootDev = NULL;
-static int probed __initdata = 0;
-
-/* local variables **********************************************************/
-static uintptr_t TxQueueAddr[SK_MAX_MACS][2] = {{0x680, 0x600},{0x780, 0x700}};
-static uintptr_t RxQueueAddr[SK_MAX_MACS] = {0x400, 0x480};
-
-
-/* local variables **********************************************************/
-const char SK_Root_Dir_entry[8];
-
-#if 0
-static struct proc_dir_entry *pSkRootDir;
-#endif
-
-
-static struct pci_device_id supported[] = {
- {PCI_VENDOR_ID_3COM, 0x1700},
- {PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_GE},
- {PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_YU},
- {}
-};
-
-
-/*****************************************************************************
- *
- * skge_probe - find all SK-98xx adapters
- *
- * Description:
- * This function scans the PCI bus for SK-98xx adapters. Resources for
- * each adapter are allocated and the adapter is brought into Init 1
- * state.
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- */
-#if 0
-static int __init skge_probe (void)
-#else
-int skge_probe (struct eth_device ** ret_dev)
-#endif
-{
-#if 0
- int proc_root_initialized = 0;
-#endif
- int boards_found = 0;
-#if 0
- int vendor_flag = SK_FALSE;
-#endif
- SK_AC *pAC;
- DEV_NET *pNet = NULL;
-#if 0
- struct proc_dir_entry *pProcFile;
- struct pci_dev *pdev = NULL;
- unsigned long base_address;
-#else
- u32 base_address;
-#endif
- struct SK_NET_DEVICE *dev = NULL;
-#if 0
- SK_BOOL DeviceFound = SK_FALSE;
-#endif
- SK_BOOL BootStringCount = SK_FALSE;
-#if 1
- pci_dev_t devno;
-#endif
-
- if (probed)
- return -ENODEV;
- probed++;
-
- if (!pci_present()) /* is PCI support present? */
- return -ENODEV;
-
-#if 0
- while((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET << 8, pdev)))
-#else
- while((devno = pci_find_devices (supported, boards_found)) >= 0)
-#endif
- {
-
- dev = NULL;
- pNet = NULL;
-
-
-#if 0
- SK_PCI_ISCOMPLIANT(vendor_flag, pdev);
- if (!vendor_flag)
- continue;
-#endif
-
-/* if ((pdev->vendor != PCI_VENDOR_ID_SYSKONNECT) &&
- ((pdev->device != PCI_DEVICE_ID_SYSKONNECT_GE) ||
- (pdev->device != PCI_DEVICE_ID_SYSKONNECT_YU))){
- continue;
- }
-*/
-#if 0
- /* Configure DMA attributes. */
- if (pci_set_dma_mask(pdev, (u64) 0xffffffffffffffff) &&
- pci_set_dma_mask(pdev, (u64) 0xffffffff))
- continue;
-#endif
-
-
-#if 0
- if ((dev = init_etherdev(dev, sizeof(DEV_NET))) == NULL) {
- printk(KERN_ERR "Unable to allocate etherdev "
- "structure!\n");
- break;
- }
-#else
- dev = malloc (sizeof *dev);
- memset(dev, 0, sizeof(*dev));
- dev->priv = malloc(sizeof(DEV_NET));
-#endif
-
- if (dev->priv == NULL) {
- printk(KERN_ERR "Unable to allocate adapter "
- "structure!\n");
- break;
- }
-
- pNet = dev->priv;
- pNet->pAC = kmalloc(sizeof(SK_AC), GFP_KERNEL);
- if (pNet->pAC == NULL){
- kfree(dev->priv);
- printk(KERN_ERR "Unable to allocate adapter "
- "structure!\n");
- break;
- }
-
- /* Print message */
- if (!BootStringCount) {
- /* set display flag to TRUE so that */
- /* we only display this string ONCE */
- BootStringCount = SK_TRUE;
-#ifdef SK98_INFO
- printk("%s\n", BootString);
-#endif
- }
-
- memset(pNet->pAC, 0, sizeof(SK_AC));
- pAC = pNet->pAC;
-#if 0
- pAC->PciDev = pdev;
- pAC->PciDevId = pdev->device;
- pAC->dev[0] = dev;
- pAC->dev[1] = dev;
-#else
- pAC->PciDev = devno;
- ret_dev[0] = pAC->dev[0] = dev;
- ret_dev[1] = pAC->dev[1] = dev;
-#endif
- sprintf(pAC->Name, "SysKonnect SK-98xx");
- pAC->CheckQueue = SK_FALSE;
-
- pNet->Mtu = 1500;
- pNet->Up = 0;
-#if 0
- dev->irq = pdev->irq;
-
- dev->open = &SkGeOpen;
- dev->stop = &SkGeClose;
- dev->hard_start_xmit = &SkGeXmit;
- dev->get_stats = &SkGeStats;
- dev->set_multicast_list = &SkGeSetRxMode;
- dev->set_mac_address = &SkGeSetMacAddr;
- dev->do_ioctl = &SkGeIoctl;
- dev->change_mtu = &SkGeChangeMtu;
- dev->flags &= ~IFF_RUNNING;
-#endif
-
-#ifdef SK_ZEROCOPY
- if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
- /* Use only if yukon hardware */
- /* SK and ZEROCOPY - fly baby... */
- dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
- }
-#endif
-
-#if 0
- /*
- * Dummy value.
- */
- dev->base_addr = 42;
- pci_set_master(pdev);
-
- pci_set_master(pdev);
- base_address = pci_resource_start (pdev, 0);
-#else
- pci_write_config_dword(devno,
- PCI_COMMAND,
- PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
- pci_read_config_dword (devno, PCI_BASE_ADDRESS_0,
- &base_address);
-#endif
-
-#ifdef SK_BIG_ENDIAN
- /*
- * On big endian machines, we use the adapter's aibility of
- * reading the descriptors as big endian.
- */
- {
- SK_U32 our2;
- SkPciReadCfgDWord(pAC, PCI_OUR_REG_2, &our2);
- our2 |= PCI_REV_DESC;
- SkPciWriteCfgDWord(pAC, PCI_OUR_REG_2, our2);
- }
-#endif
-
- /*
- * Remap the regs into kernel space.
- */
-#if 0
- pAC->IoBase = (char*)ioremap(base_address, 0x4000);
-#else
- pAC->IoBase = (char*)pci_mem_to_phys(devno, base_address);
-#endif
-
- if (!pAC->IoBase){
- printk(KERN_ERR "%s: Unable to map I/O register, "
- "SK 98xx No. %i will be disabled.\n",
- dev->name, boards_found);
- kfree(dev);
- break;
- }
-
- pAC->Index = boards_found;
- if (SkGeBoardInit(dev, pAC)) {
- FreeResources(dev);
- kfree(dev);
- continue;
- }
-
-#if 0
- memcpy((caddr_t) &dev->dev_addr,
- (caddr_t) &pAC->Addr.Net[0].CurrentMacAddress, 6);
-#else
- memcpy((caddr_t) &dev->enetaddr,
- (caddr_t) &pAC->Addr.Net[0].CurrentMacAddress, 6);
-#endif
-
-#if 0
- /* First adapter... Create proc and print message */
- if (!DeviceFound) {
- DeviceFound = SK_TRUE;
- SK_MEMCPY(&SK_Root_Dir_entry, BootString,
- sizeof(SK_Root_Dir_entry) - 1);
-
- /*Create proc (directory)*/
- if(!proc_root_initialized) {
- pSkRootDir = create_proc_entry(SK_Root_Dir_entry,
- S_IFDIR | S_IWUSR | S_IRUGO | S_IXUGO, proc_net);
- proc_root_initialized = 1;
- }
-
- pSkRootDir->owner = THIS_MODULE;
- }
-
-
- /* Create proc file */
- pProcFile = create_proc_entry(dev->name,
- S_IFREG | S_IXUSR | S_IWGRP | S_IROTH,
- pSkRootDir);
-
-
- pProcFile->read_proc = proc_read;
- pProcFile->write_proc = NULL;
- pProcFile->nlink = 1;
- pProcFile->size = sizeof(dev->name + 1);
- pProcFile->data = (void *)pProcFile;
-#endif
-
- pNet->PortNr = 0;
- pNet->NetNr = 0;
-
-#ifdef SK_ZEROCOPY
- if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
- /* SG and ZEROCOPY - fly baby... */
- dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
- }
-#endif
-
- boards_found++;
-
- /* More then one port found */
- if ((pAC->GIni.GIMacsFound == 2 ) && (pAC->RlmtNets == 2)) {
-#if 0
- if ((dev = init_etherdev(NULL, sizeof(DEV_NET))) == 0) {
- printk(KERN_ERR "Unable to allocate etherdev "
- "structure!\n");
- break;
- }
-#else
- dev = malloc (sizeof *dev);
- memset(dev, 0, sizeof(*dev));
- dev->priv = malloc(sizeof(DEV_NET));
-#endif
-
- pAC->dev[1] = dev;
- pNet = dev->priv;
- pNet->PortNr = 1;
- pNet->NetNr = 1;
- pNet->pAC = pAC;
- pNet->Mtu = 1500;
- pNet->Up = 0;
-
-#if 0
- dev->open = &SkGeOpen;
- dev->stop = &SkGeClose;
- dev->hard_start_xmit = &SkGeXmit;
- dev->get_stats = &SkGeStats;
- dev->set_multicast_list = &SkGeSetRxMode;
- dev->set_mac_address = &SkGeSetMacAddr;
- dev->do_ioctl = &SkGeIoctl;
- dev->change_mtu = &SkGeChangeMtu;
- dev->flags &= ~IFF_RUNNING;
-#endif
-
-#ifdef SK_ZEROCOPY
- if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
- /* SG and ZEROCOPY - fly baby... */
- dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
- }
-#endif
-
-#if 0
- pProcFile = create_proc_entry(dev->name,
- S_IFREG | S_IXUSR | S_IWGRP | S_IROTH,
- pSkRootDir);
-
-
- pProcFile->read_proc = proc_read;
- pProcFile->write_proc = NULL;
- pProcFile->nlink = 1;
- pProcFile->size = sizeof(dev->name + 1);
- pProcFile->data = (void *)pProcFile;
-#endif
-
-#if 0
- memcpy((caddr_t) &dev->dev_addr,
- (caddr_t) &pAC->Addr.Net[1].CurrentMacAddress, 6);
-#else
- memcpy((caddr_t) &dev->enetaddr,
- (caddr_t) &pAC->Addr.Net[1].CurrentMacAddress, 6);
-#endif
-
- printk("%s: %s\n", dev->name, pAC->DeviceStr);
- printk(" PrefPort:B RlmtMode:Dual Check Link State\n");
-
- }
-
-
- /* Save the hardware revision */
- pAC->HWRevision = (((pAC->GIni.GIPciHwRev >> 4) & 0x0F)*10) +
- (pAC->GIni.GIPciHwRev & 0x0F);
-
- /*
- * This is bollocks, but we need to tell the net-init
- * code that it shall go for the next device.
- */
-#if 0
-#ifndef MODULE
- dev->base_addr = 0;
-#endif
-#endif
- }
-
- /*
- * If we're at this point we're going through skge_probe() for
- * the first time. Return success (0) if we've initialized 1
- * or more boards. Otherwise, return failure (-ENODEV).
- */
-
- return boards_found;
-} /* skge_probe */
-
-
-/*****************************************************************************
- *
- * FreeResources - release resources allocated for adapter
- *
- * Description:
- * This function releases the IRQ, unmaps the IO and
- * frees the desriptor ring.
- *
- * Returns: N/A
- *
- */
-static void FreeResources(struct SK_NET_DEVICE *dev)
-{
-SK_U32 AllocFlag;
-DEV_NET *pNet;
-SK_AC *pAC;
-
- if (dev->priv) {
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
- AllocFlag = pAC->AllocFlag;
-#if 0
- if (AllocFlag & SK_ALLOC_IRQ) {
- free_irq(dev->irq, dev);
- }
- if (pAC->IoBase) {
- iounmap(pAC->IoBase);
- }
-#endif
- if (pAC->pDescrMem) {
- BoardFreeMem(pAC);
- }
- }
-
-} /* FreeResources */
-
-#if 0
-MODULE_AUTHOR("Mirko Lindner <mlindner@syskonnect.de>");
-MODULE_DESCRIPTION("SysKonnect SK-NET Gigabit Ethernet SK-98xx driver");
-MODULE_LICENSE("GPL");
-MODULE_PARM(Speed_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(Speed_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(AutoNeg_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(AutoNeg_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(DupCap_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(DupCap_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(FlowCtrl_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(FlowCtrl_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(Role_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(Role_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(PrefPort, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-MODULE_PARM(RlmtMode, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
-/* not used, just there because every driver should have them: */
-MODULE_PARM(options, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "i");
-MODULE_PARM(debug, "i");
-#endif
-
-
-#ifdef LINK_SPEED_A
-static char *Speed_A[SK_MAX_CARD_PARAM] = LINK_SPEED_A;
-#else
-static char *Speed_A[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef LINK_SPEED_B
-static char *Speed_B[SK_MAX_CARD_PARAM] = LINK_SPEED_B;
-#else
-static char *Speed_B[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef AUTO_NEG_A
-static char *AutoNeg_A[SK_MAX_CARD_PARAM] = AUTO_NEG_A;
-#else
-static char *AutoNeg_A[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef DUP_CAP_A
-static char *DupCap_A[SK_MAX_CARD_PARAM] = DUP_CAP_A;
-#else
-static char *DupCap_A[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef FLOW_CTRL_A
-static char *FlowCtrl_A[SK_MAX_CARD_PARAM] = FLOW_CTRL_A;
-#else
-static char *FlowCtrl_A[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef ROLE_A
-static char *Role_A[SK_MAX_CARD_PARAM] = ROLE_A;
-#else
-static char *Role_A[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef AUTO_NEG_B
-static char *AutoNeg_B[SK_MAX_CARD_PARAM] = AUTO_NEG_B;
-#else
-static char *AutoNeg_B[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef DUP_CAP_B
-static char *DupCap_B[SK_MAX_CARD_PARAM] = DUP_CAP_B;
-#else
-static char *DupCap_B[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef FLOW_CTRL_B
-static char *FlowCtrl_B[SK_MAX_CARD_PARAM] = FLOW_CTRL_B;
-#else
-static char *FlowCtrl_B[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef ROLE_B
-static char *Role_B[SK_MAX_CARD_PARAM] = ROLE_B;
-#else
-static char *Role_B[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef PREF_PORT
-static char *PrefPort[SK_MAX_CARD_PARAM] = PREF_PORT;
-#else
-static char *PrefPort[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#ifdef RLMT_MODE
-static char *RlmtMode[SK_MAX_CARD_PARAM] = RLMT_MODE;
-#else
-static char *RlmtMode[SK_MAX_CARD_PARAM] = {"", };
-#endif
-
-#if 0
-static int debug = 0; /* not used */
-static int options[SK_MAX_CARD_PARAM] = {0, }; /* not used */
-
-
-/*****************************************************************************
- *
- * skge_init_module - module initialization function
- *
- * Description:
- * Very simple, only call skge_probe and return approriate result.
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- */
-static int __init skge_init_module(void)
-{
- int cards;
- SkGeRootDev = NULL;
-
- /* just to avoid warnings ... */
- debug = 0;
- options[0] = 0;
-
- cards = skge_probe();
- if (cards == 0) {
- printk("sk98lin: No adapter found.\n");
- }
- return cards ? 0 : -ENODEV;
-} /* skge_init_module */
-
-
-/*****************************************************************************
- *
- * skge_cleanup_module - module unload function
- *
- * Description:
- * Disable adapter if it is still running, free resources,
- * free device struct.
- *
- * Returns: N/A
- */
-static void __exit skge_cleanup_module(void)
-{
-DEV_NET *pNet;
-SK_AC *pAC;
-struct SK_NET_DEVICE *next;
-unsigned long Flags;
-SK_EVPARA EvPara;
-
- while (SkGeRootDev) {
- pNet = (DEV_NET*) SkGeRootDev->priv;
- pAC = pNet->pAC;
- next = pAC->Next;
-
- netif_stop_queue(SkGeRootDev);
- SkGeYellowLED(pAC, pAC->IoBase, 0);
-
- if(pAC->BoardLevel == 2) {
- /* board is still alive */
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- EvPara.Para32[0] = 0;
- EvPara.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
- EvPara.Para32[0] = 1;
- EvPara.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
- SkEventDispatcher(pAC, pAC->IoBase);
- /* disable interrupts */
- SK_OUT32(pAC->IoBase, B0_IMSK, 0);
- SkGeDeInit(pAC, pAC->IoBase);
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- pAC->BoardLevel = 0;
- /* We do NOT check here, if IRQ was pending, of course*/
- }
-
- if(pAC->BoardLevel == 1) {
- /* board is still alive */
- SkGeDeInit(pAC, pAC->IoBase);
- pAC->BoardLevel = 0;
- }
-
- if ((pAC->GIni.GIMacsFound == 2) && pAC->RlmtNets == 2){
- unregister_netdev(pAC->dev[1]);
- kfree(pAC->dev[1]);
- }
-
- FreeResources(SkGeRootDev);
-
- SkGeRootDev->get_stats = NULL;
- /*
- * otherwise unregister_netdev calls get_stats with
- * invalid IO ... :-(
- */
- unregister_netdev(SkGeRootDev);
- kfree(SkGeRootDev);
- kfree(pAC);
- SkGeRootDev = next;
- }
-
- /* clear proc-dir */
- remove_proc_entry(pSkRootDir->name, proc_net);
-
-} /* skge_cleanup_module */
-
-module_init(skge_init_module);
-module_exit(skge_cleanup_module);
-#endif
-
-
-/*****************************************************************************
- *
- * SkGeBoardInit - do level 0 and 1 initialization
- *
- * Description:
- * This function prepares the board hardware for running. The desriptor
- * ring is set up, the IRQ is allocated and the configuration settings
- * are examined.
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- */
-static int __init SkGeBoardInit(struct SK_NET_DEVICE *dev, SK_AC *pAC)
-{
-short i;
-unsigned long Flags;
-char *DescrString = "sk98lin: Driver for Linux"; /* this is given to PNMI */
-char *VerStr = VER_STRING;
-#if 0
-int Ret; /* return code of request_irq */
-#endif
-SK_BOOL DualNet;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("IoBase: %08lX\n", (unsigned long)pAC->IoBase));
- for (i=0; i<SK_MAX_MACS; i++) {
- pAC->TxPort[i][0].HwAddr = pAC->IoBase + TxQueueAddr[i][0];
- pAC->TxPort[i][0].PortIndex = i;
- pAC->RxPort[i].HwAddr = pAC->IoBase + RxQueueAddr[i];
- pAC->RxPort[i].PortIndex = i;
- }
-
- /* Initialize the mutexes */
- for (i=0; i<SK_MAX_MACS; i++) {
- spin_lock_init(&pAC->TxPort[i][0].TxDesRingLock);
- spin_lock_init(&pAC->RxPort[i].RxDesRingLock);
- }
- spin_lock_init(&pAC->SlowPathLock);
-
- /* level 0 init common modules here */
-
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- /* Does a RESET on board ...*/
- if (SkGeInit(pAC, pAC->IoBase, 0) != 0) {
- printk("HWInit (0) failed.\n");
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- return(-EAGAIN);
- }
- SkI2cInit( pAC, pAC->IoBase, 0);
- SkEventInit(pAC, pAC->IoBase, 0);
- SkPnmiInit( pAC, pAC->IoBase, 0);
- SkAddrInit( pAC, pAC->IoBase, 0);
- SkRlmtInit( pAC, pAC->IoBase, 0);
- SkTimerInit(pAC, pAC->IoBase, 0);
-
- pAC->BoardLevel = 0;
- pAC->RxBufSize = ETH_BUF_SIZE;
-
- SK_PNMI_SET_DRIVER_DESCR(pAC, DescrString);
- SK_PNMI_SET_DRIVER_VER(pAC, VerStr);
-
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
-
- /* level 1 init common modules here (HW init) */
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- if (SkGeInit(pAC, pAC->IoBase, 1) != 0) {
- printk("HWInit (1) failed.\n");
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- return(-EAGAIN);
- }
- SkI2cInit( pAC, pAC->IoBase, 1);
- SkEventInit(pAC, pAC->IoBase, 1);
- SkPnmiInit( pAC, pAC->IoBase, 1);
- SkAddrInit( pAC, pAC->IoBase, 1);
- SkRlmtInit( pAC, pAC->IoBase, 1);
- SkTimerInit(pAC, pAC->IoBase, 1);
-
- GetConfiguration(pAC);
- if (pAC->RlmtNets == 2) {
- pAC->GIni.GIPortUsage = SK_MUL_LINK;
- }
-
- pAC->BoardLevel = 1;
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
-
-#if 0
- if (pAC->GIni.GIMacsFound == 2) {
- Ret = request_irq(dev->irq, SkGeIsr, SA_SHIRQ, pAC->Name, dev);
- } else if (pAC->GIni.GIMacsFound == 1) {
- Ret = request_irq(dev->irq, SkGeIsrOnePort, SA_SHIRQ,
- pAC->Name, dev);
- } else {
- printk(KERN_WARNING "%s: Illegal number of ports: %d\n",
- dev->name, pAC->GIni.GIMacsFound);
- return -EAGAIN;
- }
-
- if (Ret) {
- printk(KERN_WARNING "%s: Requested IRQ %d is busy.\n",
- dev->name, dev->irq);
- return -EAGAIN;
- }
-#endif
- pAC->AllocFlag |= SK_ALLOC_IRQ;
-
- /* Alloc memory for this board (Mem for RxD/TxD) : */
- if(!BoardAllocMem(pAC)) {
- printk("No memory for descriptor rings.\n");
- return(-EAGAIN);
- }
-
- SkCsSetReceiveFlags(pAC,
- SKCS_PROTO_IP | SKCS_PROTO_TCP | SKCS_PROTO_UDP,
- &pAC->CsOfs1, &pAC->CsOfs2, 0);
- pAC->CsOfs = (pAC->CsOfs2 << 16) | pAC->CsOfs1;
-
- BoardInitMem(pAC);
-#if 0
- SetQueueSizes(pAC);
-#else
- /* tschilling: New common function with minimum size check. */
- DualNet = SK_FALSE;
- if (pAC->RlmtNets == 2) {
- DualNet = SK_TRUE;
- }
-
- if (SkGeInitAssignRamToQueues(
- pAC,
- pAC->ActivePort,
- DualNet)) {
- BoardFreeMem(pAC);
- printk("SkGeInitAssignRamToQueues failed.\n");
- return(-EAGAIN);
- }
-#endif
-
- /* Print adapter specific string from vpd */
- ProductStr(pAC);
-#ifdef SK98_INFO
- printk("%s: %s\n", dev->name, pAC->DeviceStr);
-
- /* Print configuration settings */
- printk(" PrefPort:%c RlmtMode:%s\n",
- 'A' + pAC->Rlmt.Net[0].Port[pAC->Rlmt.Net[0].PrefPort]->PortNumber,
- (pAC->RlmtMode==0) ? "Check Link State" :
- ((pAC->RlmtMode==1) ? "Check Link State" :
- ((pAC->RlmtMode==3) ? "Check Local Port" :
- ((pAC->RlmtMode==7) ? "Check Segmentation" :
- ((pAC->RlmtMode==17) ? "Dual Check Link State" :"Error")))));
-#endif
-
- SkGeYellowLED(pAC, pAC->IoBase, 1);
-
- /*
- * Register the device here
- */
- pAC->Next = SkGeRootDev;
- SkGeRootDev = dev;
-
- return (0);
-} /* SkGeBoardInit */
-
-
-/*****************************************************************************
- *
- * BoardAllocMem - allocate the memory for the descriptor rings
- *
- * Description:
- * This function allocates the memory for all descriptor rings.
- * Each ring is aligned for the desriptor alignment and no ring
- * has a 4 GByte boundary in it (because the upper 32 bit must
- * be constant for all descriptiors in one rings).
- *
- * Returns:
- * SK_TRUE, if all memory could be allocated
- * SK_FALSE, if not
- */
-static SK_BOOL BoardAllocMem(
-SK_AC *pAC)
-{
-caddr_t pDescrMem; /* pointer to descriptor memory area */
-size_t AllocLength; /* length of complete descriptor area */
-int i; /* loop counter */
-unsigned long BusAddr;
-
-
- /* rings plus one for alignment (do not cross 4 GB boundary) */
- /* RX_RING_SIZE is assumed bigger than TX_RING_SIZE */
-#if (BITS_PER_LONG == 32)
- AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound + 8;
-#else
- AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound
- + RX_RING_SIZE + 8;
-#endif
-
- pDescrMem = pci_alloc_consistent(pAC->PciDev, AllocLength,
- &pAC->pDescrMemDMA);
-
- if (pDescrMem == NULL) {
- return (SK_FALSE);
- }
- pAC->pDescrMem = pDescrMem;
- BusAddr = (unsigned long) pAC->pDescrMemDMA;
-
- /* Descriptors need 8 byte alignment, and this is ensured
- * by pci_alloc_consistent.
- */
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
- ("TX%d/A: pDescrMem: %lX, PhysDescrMem: %lX\n",
- i, (unsigned long) pDescrMem,
- BusAddr));
- pAC->TxPort[i][0].pTxDescrRing = pDescrMem;
- pAC->TxPort[i][0].VTxDescrRing = BusAddr;
- pDescrMem += TX_RING_SIZE;
- BusAddr += TX_RING_SIZE;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
- ("RX%d: pDescrMem: %lX, PhysDescrMem: %lX\n",
- i, (unsigned long) pDescrMem,
- (unsigned long)BusAddr));
- pAC->RxPort[i].pRxDescrRing = pDescrMem;
- pAC->RxPort[i].VRxDescrRing = BusAddr;
- pDescrMem += RX_RING_SIZE;
- BusAddr += RX_RING_SIZE;
- } /* for */
-
- return (SK_TRUE);
-} /* BoardAllocMem */
-
-
-/****************************************************************************
- *
- * BoardFreeMem - reverse of BoardAllocMem
- *
- * Description:
- * Free all memory allocated in BoardAllocMem: adapter context,
- * descriptor rings, locks.
- *
- * Returns: N/A
- */
-static void BoardFreeMem(
-SK_AC *pAC)
-{
-size_t AllocLength; /* length of complete descriptor area */
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("BoardFreeMem\n"));
-#if (BITS_PER_LONG == 32)
- AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound + 8;
-#else
- AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound
- + RX_RING_SIZE + 8;
-#endif
-
- pci_free_consistent(pAC->PciDev, AllocLength,
- pAC->pDescrMem, pAC->pDescrMemDMA);
- pAC->pDescrMem = NULL;
-} /* BoardFreeMem */
-
-
-/*****************************************************************************
- *
- * BoardInitMem - initiate the descriptor rings
- *
- * Description:
- * This function sets the descriptor rings up in memory.
- * The adapter is initialized with the descriptor start addresses.
- *
- * Returns: N/A
- */
-static void BoardInitMem(
-SK_AC *pAC) /* pointer to adapter context */
-{
-int i; /* loop counter */
-int RxDescrSize; /* the size of a rx descriptor rounded up to alignment*/
-int TxDescrSize; /* the size of a tx descriptor rounded up to alignment*/
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("BoardInitMem\n"));
-
- RxDescrSize = (((sizeof(RXD) - 1) / DESCR_ALIGN) + 1) * DESCR_ALIGN;
- pAC->RxDescrPerRing = RX_RING_SIZE / RxDescrSize;
- TxDescrSize = (((sizeof(TXD) - 1) / DESCR_ALIGN) + 1) * DESCR_ALIGN;
- pAC->TxDescrPerRing = TX_RING_SIZE / RxDescrSize;
-
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- SetupRing(
- pAC,
- pAC->TxPort[i][0].pTxDescrRing,
- pAC->TxPort[i][0].VTxDescrRing,
- (RXD**)&pAC->TxPort[i][0].pTxdRingHead,
- (RXD**)&pAC->TxPort[i][0].pTxdRingTail,
- (RXD**)&pAC->TxPort[i][0].pTxdRingPrev,
- &pAC->TxPort[i][0].TxdRingFree,
- SK_TRUE);
- SetupRing(
- pAC,
- pAC->RxPort[i].pRxDescrRing,
- pAC->RxPort[i].VRxDescrRing,
- &pAC->RxPort[i].pRxdRingHead,
- &pAC->RxPort[i].pRxdRingTail,
- &pAC->RxPort[i].pRxdRingPrev,
- &pAC->RxPort[i].RxdRingFree,
- SK_FALSE);
- }
-} /* BoardInitMem */
-
-
-/*****************************************************************************
- *
- * SetupRing - create one descriptor ring
- *
- * Description:
- * This function creates one descriptor ring in the given memory area.
- * The head, tail and number of free descriptors in the ring are set.
- *
- * Returns:
- * none
- */
-static void SetupRing(
-SK_AC *pAC,
-void *pMemArea, /* a pointer to the memory area for the ring */
-uintptr_t VMemArea, /* the virtual bus address of the memory area */
-RXD **ppRingHead, /* address where the head should be written */
-RXD **ppRingTail, /* address where the tail should be written */
-RXD **ppRingPrev, /* address where the tail should be written */
-int *pRingFree, /* address where the # of free descr. goes */
-SK_BOOL IsTx) /* flag: is this a tx ring */
-{
-int i; /* loop counter */
-int DescrSize; /* the size of a descriptor rounded up to alignment*/
-int DescrNum; /* number of descriptors per ring */
-RXD *pDescr; /* pointer to a descriptor (receive or transmit) */
-RXD *pNextDescr; /* pointer to the next descriptor */
-RXD *pPrevDescr; /* pointer to the previous descriptor */
-uintptr_t VNextDescr; /* the virtual bus address of the next descriptor */
-
- if (IsTx == SK_TRUE) {
- DescrSize = (((sizeof(TXD) - 1) / DESCR_ALIGN) + 1) *
- DESCR_ALIGN;
- DescrNum = TX_RING_SIZE / DescrSize;
- } else {
- DescrSize = (((sizeof(RXD) - 1) / DESCR_ALIGN) + 1) *
- DESCR_ALIGN;
- DescrNum = RX_RING_SIZE / DescrSize;
- }
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
- ("Descriptor size: %d Descriptor Number: %d\n",
- DescrSize,DescrNum));
-
- pDescr = (RXD*) pMemArea;
- pPrevDescr = NULL;
- pNextDescr = (RXD*) (((char*)pDescr) + DescrSize);
- VNextDescr = VMemArea + DescrSize;
- for(i=0; i<DescrNum; i++) {
- /* set the pointers right */
- pDescr->VNextRxd = VNextDescr & 0xffffffffULL;
- pDescr->pNextRxd = pNextDescr;
- pDescr->TcpSumStarts = pAC->CsOfs;
-
- /* advance one step */
- pPrevDescr = pDescr;
- pDescr = pNextDescr;
- pNextDescr = (RXD*) (((char*)pDescr) + DescrSize);
- VNextDescr += DescrSize;
- }
- pPrevDescr->pNextRxd = (RXD*) pMemArea;
- pPrevDescr->VNextRxd = VMemArea;
- pDescr = (RXD*) pMemArea;
- *ppRingHead = (RXD*) pMemArea;
- *ppRingTail = *ppRingHead;
- *ppRingPrev = pPrevDescr;
- *pRingFree = DescrNum;
-} /* SetupRing */
-
-
-/*****************************************************************************
- *
- * PortReInitBmu - re-initiate the descriptor rings for one port
- *
- * Description:
- * This function reinitializes the descriptor rings of one port
- * in memory. The port must be stopped before.
- * The HW is initialized with the descriptor start addresses.
- *
- * Returns:
- * none
- */
-static void PortReInitBmu(
-SK_AC *pAC, /* pointer to adapter context */
-int PortIndex) /* index of the port for which to re-init */
-{
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("PortReInitBmu "));
-
- /* set address of first descriptor of ring in BMU */
- SK_OUT32(pAC->IoBase, TxQueueAddr[PortIndex][TX_PRIO_LOW]+
- TX_Q_CUR_DESCR_LOW,
- (uint32_t)(((caddr_t)
- (pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxdRingHead) -
- pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxDescrRing +
- pAC->TxPort[PortIndex][TX_PRIO_LOW].VTxDescrRing) &
- 0xFFFFFFFF));
- SK_OUT32(pAC->IoBase, TxQueueAddr[PortIndex][TX_PRIO_LOW]+
- TX_Q_DESCR_HIGH,
- (uint32_t)(((caddr_t)
- (pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxdRingHead) -
- pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxDescrRing +
- pAC->TxPort[PortIndex][TX_PRIO_LOW].VTxDescrRing) >> 32));
- SK_OUT32(pAC->IoBase, RxQueueAddr[PortIndex]+RX_Q_CUR_DESCR_LOW,
- (uint32_t)(((caddr_t)(pAC->RxPort[PortIndex].pRxdRingHead) -
- pAC->RxPort[PortIndex].pRxDescrRing +
- pAC->RxPort[PortIndex].VRxDescrRing) & 0xFFFFFFFF));
- SK_OUT32(pAC->IoBase, RxQueueAddr[PortIndex]+RX_Q_DESCR_HIGH,
- (uint32_t)(((caddr_t)(pAC->RxPort[PortIndex].pRxdRingHead) -
- pAC->RxPort[PortIndex].pRxDescrRing +
- pAC->RxPort[PortIndex].VRxDescrRing) >> 32));
-} /* PortReInitBmu */
-
-
-/****************************************************************************
- *
- * SkGeIsr - handle adapter interrupts
- *
- * Description:
- * The interrupt routine is called when the network adapter
- * generates an interrupt. It may also be called if another device
- * shares this interrupt vector with the driver.
- *
- * Returns: N/A
- *
- */
-#if 0
-static void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs)
-#else
-void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs)
-#endif
-{
-struct SK_NET_DEVICE *dev = (struct SK_NET_DEVICE *)dev_id;
-DEV_NET *pNet;
-SK_AC *pAC;
-SK_U32 IntSrc; /* interrupts source register contents */
-
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
-
- /*
- * Check and process if its our interrupt
- */
- SK_IN32(pAC->IoBase, B0_SP_ISRC, &IntSrc);
- if (IntSrc == 0) {
- return;
- }
-
- while (((IntSrc & IRQ_MASK) & ~SPECIAL_IRQS) != 0) {
-#if 0 /* software irq currently not used */
- if (IntSrc & IRQ_SW) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("Software IRQ\n"));
- }
-#endif
- if (IntSrc & IRQ_EOF_RX1) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF RX1 IRQ\n"));
- ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
- SK_PNMI_CNT_RX_INTR(pAC, 0);
- }
- if (IntSrc & IRQ_EOF_RX2) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF RX2 IRQ\n"));
- ReceiveIrq(pAC, &pAC->RxPort[1], SK_TRUE);
- SK_PNMI_CNT_RX_INTR(pAC, 1);
- }
-#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
- if (IntSrc & IRQ_EOF_AS_TX1) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF AS TX1 IRQ\n"));
- SK_PNMI_CNT_TX_INTR(pAC, 0);
- spin_lock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
- FreeTxDescriptors(pAC, &pAC->TxPort[0][TX_PRIO_LOW]);
- spin_unlock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
- }
- if (IntSrc & IRQ_EOF_AS_TX2) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF AS TX2 IRQ\n"));
- SK_PNMI_CNT_TX_INTR(pAC, 1);
- spin_lock(&pAC->TxPort[1][TX_PRIO_LOW].TxDesRingLock);
- FreeTxDescriptors(pAC, &pAC->TxPort[1][TX_PRIO_LOW]);
- spin_unlock(&pAC->TxPort[1][TX_PRIO_LOW].TxDesRingLock);
- }
-#if 0 /* only if sync. queues used */
- if (IntSrc & IRQ_EOF_SY_TX1) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF SY TX1 IRQ\n"));
- SK_PNMI_CNT_TX_INTR(pAC, 1);
- spin_lock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
- FreeTxDescriptors(pAC, 0, TX_PRIO_HIGH);
- spin_unlock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
- ClearTxIrq(pAC, 0, TX_PRIO_HIGH);
- }
- if (IntSrc & IRQ_EOF_SY_TX2) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF SY TX2 IRQ\n"));
- SK_PNMI_CNT_TX_INTR(pAC, 1);
- spin_lock(&pAC->TxPort[1][TX_PRIO_HIGH].TxDesRingLock);
- FreeTxDescriptors(pAC, 1, TX_PRIO_HIGH);
- spin_unlock(&pAC->TxPort[1][TX_PRIO_HIGH].TxDesRingLock);
- ClearTxIrq(pAC, 1, TX_PRIO_HIGH);
- }
-#endif
-#endif
-
- /* do all IO at once */
- if (IntSrc & IRQ_EOF_RX1)
- ClearAndStartRx(pAC, 0);
- if (IntSrc & IRQ_EOF_RX2)
- ClearAndStartRx(pAC, 1);
-#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
- if (IntSrc & IRQ_EOF_AS_TX1)
- ClearTxIrq(pAC, 0, TX_PRIO_LOW);
- if (IntSrc & IRQ_EOF_AS_TX2)
- ClearTxIrq(pAC, 1, TX_PRIO_LOW);
-#endif
- SK_IN32(pAC->IoBase, B0_ISRC, &IntSrc);
- } /* while (IntSrc & IRQ_MASK != 0) */
-
- if ((IntSrc & SPECIAL_IRQS) || pAC->CheckQueue) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_INT_SRC,
- ("SPECIAL IRQ DP-Cards => %x\n", IntSrc));
- pAC->CheckQueue = SK_FALSE;
- spin_lock(&pAC->SlowPathLock);
- if (IntSrc & SPECIAL_IRQS)
- SkGeSirqIsr(pAC, pAC->IoBase, IntSrc);
-
- SkEventDispatcher(pAC, pAC->IoBase);
- spin_unlock(&pAC->SlowPathLock);
- }
- /*
- * do it all again is case we cleared an interrupt that
- * came in after handling the ring (OUTs may be delayed
- * in hardware buffers, but are through after IN)
- */
-
- ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
- ReceiveIrq(pAC, &pAC->RxPort[1], SK_TRUE);
-
- if (pAC->CheckQueue) {
- pAC->CheckQueue = SK_FALSE;
- spin_lock(&pAC->SlowPathLock);
- SkEventDispatcher(pAC, pAC->IoBase);
- spin_unlock(&pAC->SlowPathLock);
- }
-
-
- /* IRQ is processed - Enable IRQs again*/
- SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
-
- return;
-} /* SkGeIsr */
-
-
-/****************************************************************************
- *
- * SkGeIsrOnePort - handle adapter interrupts for single port adapter
- *
- * Description:
- * The interrupt routine is called when the network adapter
- * generates an interrupt. It may also be called if another device
- * shares this interrupt vector with the driver.
- * This is the same as above, but handles only one port.
- *
- * Returns: N/A
- *
- */
-#if 0
-static void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs)
-#else
-void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs)
-#endif
-{
-struct SK_NET_DEVICE *dev = (struct SK_NET_DEVICE *)dev_id;
-DEV_NET *pNet;
-SK_AC *pAC;
-SK_U32 IntSrc; /* interrupts source register contents */
-
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
-
- /*
- * Check and process if its our interrupt
- */
- SK_IN32(pAC->IoBase, B0_SP_ISRC, &IntSrc);
- if (IntSrc == 0) {
- return;
- }
-
- while (((IntSrc & IRQ_MASK) & ~SPECIAL_IRQS) != 0) {
-#if 0 /* software irq currently not used */
- if (IntSrc & IRQ_SW) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("Software IRQ\n"));
- }
-#endif
- if (IntSrc & IRQ_EOF_RX1) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF RX1 IRQ\n"));
- ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
- SK_PNMI_CNT_RX_INTR(pAC, 0);
- }
-#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
- if (IntSrc & IRQ_EOF_AS_TX1) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF AS TX1 IRQ\n"));
- SK_PNMI_CNT_TX_INTR(pAC, 0);
- spin_lock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
- FreeTxDescriptors(pAC, &pAC->TxPort[0][TX_PRIO_LOW]);
- spin_unlock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
- }
-#if 0 /* only if sync. queues used */
- if (IntSrc & IRQ_EOF_SY_TX1) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_INT_SRC,
- ("EOF SY TX1 IRQ\n"));
- SK_PNMI_CNT_TX_INTR(pAC, 0);
- spin_lock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
- FreeTxDescriptors(pAC, 0, TX_PRIO_HIGH);
- spin_unlock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
- ClearTxIrq(pAC, 0, TX_PRIO_HIGH);
- }
-#endif
-#endif
-
- /* do all IO at once */
- if (IntSrc & IRQ_EOF_RX1)
- ClearAndStartRx(pAC, 0);
-#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
- if (IntSrc & IRQ_EOF_AS_TX1)
- ClearTxIrq(pAC, 0, TX_PRIO_LOW);
-#endif
- SK_IN32(pAC->IoBase, B0_ISRC, &IntSrc);
- } /* while (IntSrc & IRQ_MASK != 0) */
-
- if ((IntSrc & SPECIAL_IRQS) || pAC->CheckQueue) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_INT_SRC,
- ("SPECIAL IRQ SP-Cards => %x\n", IntSrc));
- pAC->CheckQueue = SK_FALSE;
- spin_lock(&pAC->SlowPathLock);
- if (IntSrc & SPECIAL_IRQS)
- SkGeSirqIsr(pAC, pAC->IoBase, IntSrc);
-
- SkEventDispatcher(pAC, pAC->IoBase);
- spin_unlock(&pAC->SlowPathLock);
- }
- /*
- * do it all again is case we cleared an interrupt that
- * came in after handling the ring (OUTs may be delayed
- * in hardware buffers, but are through after IN)
- */
- ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
-
- /* IRQ is processed - Enable IRQs again*/
- SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
-
- return;
-} /* SkGeIsrOnePort */
-
-
-/****************************************************************************
- *
- * SkGeOpen - handle start of initialized adapter
- *
- * Description:
- * This function starts the initialized adapter.
- * The board level variable is set and the adapter is
- * brought to full functionality.
- * The device flags are set for operation.
- * Do all necessary level 2 initialization, enable interrupts and
- * give start command to RLMT.
- *
- * Returns:
- * 0 on success
- * != 0 on error
- */
-#if 0
-static int SkGeOpen(
-#else
-int SkGeOpen(
-#endif
-struct SK_NET_DEVICE *dev)
-{
- DEV_NET *pNet;
- SK_AC *pAC;
- unsigned long Flags; /* for spin lock */
- int i;
- SK_EVPARA EvPara; /* an event parameter union */
-
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeOpen: pAC=0x%lX:\n", (unsigned long)pAC));
-
- if (pAC->BoardLevel == 0) {
- /* level 1 init common modules here */
- if (SkGeInit(pAC, pAC->IoBase, 1) != 0) {
- printk("%s: HWInit (1) failed.\n", pAC->dev[pNet->PortNr]->name);
- return (-1);
- }
- SkI2cInit (pAC, pAC->IoBase, 1);
- SkEventInit (pAC, pAC->IoBase, 1);
- SkPnmiInit (pAC, pAC->IoBase, 1);
- SkAddrInit (pAC, pAC->IoBase, 1);
- SkRlmtInit (pAC, pAC->IoBase, 1);
- SkTimerInit (pAC, pAC->IoBase, 1);
- pAC->BoardLevel = 1;
- }
-
- if (pAC->BoardLevel != 2) {
- /* tschilling: Level 2 init modules here, check return value. */
- if (SkGeInit(pAC, pAC->IoBase, 2) != 0) {
- printk("%s: HWInit (2) failed.\n", pAC->dev[pNet->PortNr]->name);
- return (-1);
- }
- SkI2cInit (pAC, pAC->IoBase, 2);
- SkEventInit (pAC, pAC->IoBase, 2);
- SkPnmiInit (pAC, pAC->IoBase, 2);
- SkAddrInit (pAC, pAC->IoBase, 2);
- SkRlmtInit (pAC, pAC->IoBase, 2);
- SkTimerInit (pAC, pAC->IoBase, 2);
- pAC->BoardLevel = 2;
- }
-
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- /* Enable transmit descriptor polling. */
- SkGePollTxD(pAC, pAC->IoBase, i, SK_TRUE);
- FillRxRing(pAC, &pAC->RxPort[i]);
- }
- SkGeYellowLED(pAC, pAC->IoBase, 1);
-
-#ifdef USE_INT_MOD
-/* moderate only TX complete interrupts (these are not time critical) */
-#define IRQ_MOD_MASK (IRQ_EOF_AS_TX1 | IRQ_EOF_AS_TX2)
- {
- unsigned long ModBase;
- ModBase = 53125000 / INTS_PER_SEC;
- SK_OUT32(pAC->IoBase, B2_IRQM_INI, ModBase);
- SK_OUT32(pAC->IoBase, B2_IRQM_MSK, IRQ_MOD_MASK);
- SK_OUT32(pAC->IoBase, B2_IRQM_CTRL, TIM_START);
- }
-#endif
-
- /* enable Interrupts */
- SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
- SK_OUT32(pAC->IoBase, B0_HWE_IMSK, IRQ_HWE_MASK);
-
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
-
- if ((pAC->RlmtMode != 0) && (pAC->MaxPorts == 0)) {
- EvPara.Para32[0] = pAC->RlmtNets;
- EvPara.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_SET_NETS,
- EvPara);
- EvPara.Para32[0] = pAC->RlmtMode;
- EvPara.Para32[1] = 0;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_MODE_CHANGE,
- EvPara);
- }
-
- EvPara.Para32[0] = pNet->NetNr;
- EvPara.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
- SkEventDispatcher(pAC, pAC->IoBase);
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
-
- pAC->MaxPorts++;
- pNet->Up = 1;
-
- MOD_INC_USE_COUNT;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeOpen suceeded\n"));
-
- return (0);
-} /* SkGeOpen */
-
-
-/****************************************************************************
- *
- * SkGeClose - Stop initialized adapter
- *
- * Description:
- * Close initialized adapter.
- *
- * Returns:
- * 0 - on success
- * error code - on error
- */
-#if 0
-static int SkGeClose(
-#else
-int SkGeClose(
-#endif
-struct SK_NET_DEVICE *dev)
-{
- DEV_NET *pNet;
- SK_AC *pAC;
-
- unsigned long Flags; /* for spin lock */
- int i;
- int PortIdx;
- SK_EVPARA EvPara;
-
- netif_stop_queue(dev);
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
-
- if (pAC->RlmtNets == 1)
- PortIdx = pAC->ActivePort;
- else
- PortIdx = pNet->NetNr;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeClose: pAC=0x%lX ", (unsigned long)pAC));
-
- /*
- * Clear multicast table, promiscuous mode ....
- */
- SkAddrMcClear(pAC, pAC->IoBase, PortIdx, 0);
- SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
- SK_PROM_MODE_NONE);
-
- if (pAC->MaxPorts == 1) {
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- /* disable interrupts */
- SK_OUT32(pAC->IoBase, B0_IMSK, 0);
- EvPara.Para32[0] = pNet->NetNr;
- EvPara.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
- SkEventDispatcher(pAC, pAC->IoBase);
- SK_OUT32(pAC->IoBase, B0_IMSK, 0);
- /* stop the hardware */
- SkGeDeInit(pAC, pAC->IoBase);
- pAC->BoardLevel = 0;
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- } else {
-
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- EvPara.Para32[0] = pNet->NetNr;
- EvPara.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
- SkEventDispatcher(pAC, pAC->IoBase);
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
-
- /* Stop port */
- spin_lock_irqsave(&pAC->TxPort[pNet->PortNr]
- [TX_PRIO_LOW].TxDesRingLock, Flags);
- SkGeStopPort(pAC, pAC->IoBase, pNet->PortNr,
- SK_STOP_ALL, SK_HARD_RST);
- spin_unlock_irqrestore(&pAC->TxPort[pNet->PortNr]
- [TX_PRIO_LOW].TxDesRingLock, Flags);
- }
-
- if (pAC->RlmtNets == 1) {
- /* clear all descriptor rings */
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- ReceiveIrq(pAC, &pAC->RxPort[i], SK_TRUE);
- ClearRxRing(pAC, &pAC->RxPort[i]);
- ClearTxRing(pAC, &pAC->TxPort[i][TX_PRIO_LOW]);
- }
- } else {
- /* clear port descriptor rings */
- ReceiveIrq(pAC, &pAC->RxPort[pNet->PortNr], SK_TRUE);
- ClearRxRing(pAC, &pAC->RxPort[pNet->PortNr]);
- ClearTxRing(pAC, &pAC->TxPort[pNet->PortNr][TX_PRIO_LOW]);
- }
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeClose: done "));
-
- pAC->MaxPorts--;
- pNet->Up = 0;
- MOD_DEC_USE_COUNT;
-
- return (0);
-} /* SkGeClose */
-
-
-/*****************************************************************************
- *
- * SkGeXmit - Linux frame transmit function
- *
- * Description:
- * The system calls this function to send frames onto the wire.
- * It puts the frame in the tx descriptor ring. If the ring is
- * full then, the 'tbusy' flag is set.
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- * WARNING: returning 1 in 'tbusy' case caused system crashes (double
- * allocated skb's) !!!
- */
-#if 0
-static int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev)
-#else
-int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev)
-#endif
-{
-DEV_NET *pNet;
-SK_AC *pAC;
-int Rc; /* return code of XmitFrame */
-
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
-
-#if 0
- if ((!skb_shinfo(skb)->nr_frags) ||
-#else
- if (1 ||
-#endif
- (pAC->GIni.GIChipId == CHIP_ID_GENESIS)) {
- /* Don't activate scatter-gather and hardware checksum */
-
- if (pAC->RlmtNets == 2)
- Rc = XmitFrame(
- pAC,
- &pAC->TxPort[pNet->PortNr][TX_PRIO_LOW],
- skb);
- else
- Rc = XmitFrame(
- pAC,
- &pAC->TxPort[pAC->ActivePort][TX_PRIO_LOW],
- skb);
- } else {
-#if 0
- /* scatter-gather and hardware TCP checksumming anabled*/
- if (pAC->RlmtNets == 2)
- Rc = XmitFrameSG(
- pAC,
- &pAC->TxPort[pNet->PortNr][TX_PRIO_LOW],
- skb);
- else
- Rc = XmitFrameSG(
- pAC,
- &pAC->TxPort[pAC->ActivePort][TX_PRIO_LOW],
- skb);
-#endif
- }
-
- /* Transmitter out of resources? */
- if (Rc <= 0) {
- netif_stop_queue(dev);
- }
-
- /* If not taken, give buffer ownership back to the
- * queueing layer.
- */
- if (Rc < 0)
- return (1);
-
-#if 0
- dev->trans_start = jiffies;
-#endif
- return (0);
-} /* SkGeXmit */
-
-
-/*****************************************************************************
- *
- * XmitFrame - fill one socket buffer into the transmit ring
- *
- * Description:
- * This function puts a message into the transmit descriptor ring
- * if there is a descriptors left.
- * Linux skb's consist of only one continuous buffer.
- * The first step locks the ring. It is held locked
- * all time to avoid problems with SWITCH_../PORT_RESET.
- * Then the descriptoris allocated.
- * The second part is linking the buffer to the descriptor.
- * At the very last, the Control field of the descriptor
- * is made valid for the BMU and a start TX command is given
- * if necessary.
- *
- * Returns:
- * > 0 - on succes: the number of bytes in the message
- * = 0 - on resource shortage: this frame sent or dropped, now
- * the ring is full ( -> set tbusy)
- * < 0 - on failure: other problems ( -> return failure to upper layers)
- */
-static int XmitFrame(
-SK_AC *pAC, /* pointer to adapter context */
-TX_PORT *pTxPort, /* pointer to struct of port to send to */
-struct sk_buff *pMessage) /* pointer to send-message */
-{
-TXD *pTxd; /* the rxd to fill */
-unsigned long Flags;
-SK_U64 PhysAddr;
-int BytesSend;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
- ("X"));
-
- spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);
-#ifndef USE_TX_COMPLETE
- FreeTxDescriptors(pAC, pTxPort);
-#endif
- if (pTxPort->TxdRingFree == 0) {
- /* no enough free descriptors in ring at the moment */
- FreeTxDescriptors(pAC, pTxPort);
- if (pTxPort->TxdRingFree == 0) {
- spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
- SK_PNMI_CNT_NO_TX_BUF(pAC, pTxPort->PortIndex);
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_TX_PROGRESS,
- ("XmitFrame failed\n"));
- /* this message can not be sent now */
- /* Because tbusy seems to be set, the message should not be freed here */
- /* It will be used by the scheduler of the ethernet handler */
- return (-1);
- }
- }
- /* advance head counter behind descriptor needed for this frame */
- pTxd = pTxPort->pTxdRingHead;
- pTxPort->pTxdRingHead = pTxd->pNextTxd;
- pTxPort->TxdRingFree--;
- /* the needed descriptor is reserved now */
-
- /*
- * everything allocated ok, so add buffer to descriptor
- */
-
-#ifdef SK_DUMP_TX
- DumpMsg(pMessage, "XmitFrame");
-#endif
-
- /* set up descriptor and CONTROL dword */
-#if 0
- PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
- virt_to_page(pMessage->data),
- ((unsigned long) pMessage->data &
- ~PAGE_MASK),
- pMessage->len,
- PCI_DMA_TODEVICE);
-#else
- PhysAddr = (SK_U64) pci_phys_to_mem(pAC->PciDev, (u32) pMessage->data);
-#endif
- pTxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
- pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
- pTxd->pMBuf = pMessage;
- pTxd->TBControl = TX_CTRL_OWN_BMU | TX_CTRL_STF |
- TX_CTRL_CHECK_DEFAULT | TX_CTRL_SOFTWARE |
-#ifdef USE_TX_COMPLETE
- TX_CTRL_EOF | TX_CTRL_EOF_IRQ | pMessage->len;
-#else
- TX_CTRL_EOF | pMessage->len;
-#endif
-
- if ((pTxPort->pTxdRingPrev->TBControl & TX_CTRL_OWN_BMU) == 0) {
- /* previous descriptor already done, so give tx start cmd */
- /* StartTx(pAC, pTxPort->HwAddr); */
- SK_OUT8(pTxPort->HwAddr, TX_Q_CTRL, TX_Q_CTRL_START);
- }
- pTxPort->pTxdRingPrev = pTxd;
-
-
- BytesSend = pMessage->len;
- spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
- /* after releasing the lock, the skb may be immidiately freed */
- if (pTxPort->TxdRingFree != 0)
- return (BytesSend);
- else
- return (0);
-
-} /* XmitFrame */
-
-/*****************************************************************************
- *
- * XmitFrameSG - fill one socket buffer into the transmit ring
- * (use SG and TCP/UDP hardware checksumming)
- *
- * Description:
- * This function puts a message into the transmit descriptor ring
- * if there is a descriptors left.
- *
- * Returns:
- * > 0 - on succes: the number of bytes in the message
- * = 0 - on resource shortage: this frame sent or dropped, now
- * the ring is full ( -> set tbusy)
- * < 0 - on failure: other problems ( -> return failure to upper layers)
- */
-#if 0
-static int XmitFrameSG(
-SK_AC *pAC, /* pointer to adapter context */
-TX_PORT *pTxPort, /* pointer to struct of port to send to */
-struct sk_buff *pMessage) /* pointer to send-message */
-{
-
- int i;
- int BytesSend;
- int hlength;
- int protocol;
- skb_frag_t *sk_frag;
- TXD *pTxd;
- TXD *pTxdFst;
- TXD *pTxdLst;
- SK_U64 PhysAddr;
- unsigned long Flags;
-
- spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);
-#ifndef USE_TX_COMPLETE
- FreeTxDescriptors(pAC, pTxPort);
-#endif
- if ((skb_shinfo(pMessage)->nr_frags +1) > pTxPort->TxdRingFree) {
- FreeTxDescriptors(pAC, pTxPort);
- if ((skb_shinfo(pMessage)->nr_frags + 1) > pTxPort->TxdRingFree) {
- spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
- SK_PNMI_CNT_NO_TX_BUF(pAC, pTxPort->PortIndex);
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_TX_PROGRESS,
- ("XmitFrameSG failed - Ring full\n"));
- /* this message can not be sent now */
- return(-1);
- }
- }
-
-
- pTxd = pTxPort->pTxdRingHead;
- pTxdFst = pTxd;
- pTxdLst = pTxd;
- BytesSend = 0;
- protocol = 0;
-
- /* map first fragment (header) */
- PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
- virt_to_page(pMessage->data),
- ((unsigned long) pMessage->data & ~PAGE_MASK),
- skb_headlen(pMessage),
- PCI_DMA_TODEVICE);
-
- pTxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
- pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
-
- /* HW checksum? */
- if (pMessage->ip_summed == CHECKSUM_HW) {
- pTxd->TBControl = TX_CTRL_STF |
- TX_CTRL_ST_FWD |
- skb_headlen(pMessage);
-
- /* We have to use the opcode for tcp here because the opcode for
- udp is not working in the hardware yet (revision 2.0)*/
- protocol = ((SK_U8)pMessage->data[23] & 0xf);
- if ((protocol == 17) && (pAC->GIni.GIChipRev != 0))
- pTxd->TBControl |= BMU_UDP_CHECK;
- else
- pTxd->TBControl |= BMU_TCP_CHECK ;
-
- hlength = ((SK_U8)pMessage->data[14] & 0xf) * 4;
- pTxd->TcpSumOfs = 0; /* PH-Checksum already claculated */
- pTxd->TcpSumSt = 14+hlength+16;
- pTxd->TcpSumWr = 14+hlength;
-
- } else {
- pTxd->TBControl = TX_CTRL_CHECK_DEFAULT |
- TX_CTRL_SOFTWARE |
- TX_CTRL_STF |
- skb_headlen(pMessage);
- }
-
- pTxd = pTxd->pNextTxd;
- pTxPort->TxdRingFree--;
- BytesSend += skb_headlen(pMessage);
-
-
- /* Map SG fragments */
- for (i = 0; i < skb_shinfo(pMessage)->nr_frags; i++) {
- sk_frag = &skb_shinfo(pMessage)->frags[i];
-
- /* we already have the proper value in entry */
- PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
- sk_frag->page,
- sk_frag->page_offset,
- sk_frag->size,
- PCI_DMA_TODEVICE);
-
- pTxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
- pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
- pTxd->pMBuf = pMessage;
-
- /* HW checksum */
- if (pMessage->ip_summed == CHECKSUM_HW) {
- pTxd->TBControl = TX_CTRL_OWN_BMU |
- TX_CTRL_SOFTWARE |
- TX_CTRL_ST_FWD;
-
- /* We have to use the opcode for tcp here because the opcode for
- udp is not working in the hardware yet (revision 2.0)*/
- if ((protocol == 17) && (pAC->GIni.GIChipRev != 0))
- pTxd->TBControl |= BMU_UDP_CHECK ;
- else
- pTxd->TBControl |= BMU_TCP_CHECK ;
-
- } else {
- pTxd->TBControl = TX_CTRL_CHECK_DEFAULT |
- TX_CTRL_SOFTWARE |
- TX_CTRL_OWN_BMU;
- }
-
- /* Last fragment */
- if( (i+1) == skb_shinfo(pMessage)->nr_frags ) {
-#ifdef USE_TX_COMPLETE
- pTxd->TBControl |= TX_CTRL_EOF |
- TX_CTRL_EOF_IRQ |
- sk_frag->size;
-#else
- pTxd->TBControl |= TX_CTRL_EOF |
- sk_frag->size;
-#endif
- pTxdFst->TBControl |= TX_CTRL_OWN_BMU |
- TX_CTRL_SOFTWARE;
-
- } else {
- pTxd->TBControl |= sk_frag->size;
- }
- pTxdLst = pTxd;
- pTxd = pTxd->pNextTxd;
- pTxPort->TxdRingFree--;
- BytesSend += sk_frag->size;
- }
-
- if ((pTxPort->pTxdRingPrev->TBControl & TX_CTRL_OWN_BMU) == 0) {
- /* previous descriptor already done, so give tx start cmd */
- /* StartTx(pAC, pTxPort->HwAddr); */
- SK_OUT8(pTxPort->HwAddr, TX_Q_CTRL, TX_Q_CTRL_START);
- }
-
- pTxPort->pTxdRingPrev = pTxdLst;
- pTxPort->pTxdRingHead = pTxd;
-
- spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
-
- if (pTxPort->TxdRingFree > 0)
- return (BytesSend);
- else
- return (0);
-}
-#endif
-
-
-void dump_frag( SK_U8 *data, int length)
-{
- int i;
-
- printk("Length: %d\n", length);
- for( i=0; i < length; i++ ) {
- printk(" %02x", (SK_U8)*(data + i) );
- if( !((i+1) % 20) )
- printk("\n");
- }
- printk("\n\n");
-
-}
-
-
-/*****************************************************************************
- *
- * FreeTxDescriptors - release descriptors from the descriptor ring
- *
- * Description:
- * This function releases descriptors from a transmit ring if they
- * have been sent by the BMU.
- * If a descriptors is sent, it can be freed and the message can
- * be freed, too.
- * The SOFTWARE controllable bit is used to prevent running around a
- * completely free ring for ever. If this bit is no set in the
- * frame (by XmitFrame), this frame has never been sent or is
- * already freed.
- * The Tx descriptor ring lock must be held while calling this function !!!
- *
- * Returns:
- * none
- */
-static void FreeTxDescriptors(
-SK_AC *pAC, /* pointer to the adapter context */
-TX_PORT *pTxPort) /* pointer to destination port structure */
-{
-TXD *pTxd; /* pointer to the checked descriptor */
-TXD *pNewTail; /* pointer to 'end' of the ring */
-SK_U32 Control; /* TBControl field of descriptor */
-SK_U64 PhysAddr; /* address of DMA mapping */
-
- pNewTail = pTxPort->pTxdRingTail;
- pTxd = pNewTail;
- /*
- * loop forever; exits if TX_CTRL_SOFTWARE bit not set in start frame
- * or TX_CTRL_OWN_BMU bit set in any frame
- */
- while (1) {
- Control = pTxd->TBControl;
- if ((Control & TX_CTRL_SOFTWARE) == 0) {
- /*
- * software controllable bit is set in first
- * fragment when given to BMU. Not set means that
- * this fragment was never sent or is already
- * freed ( -> ring completely free now).
- */
- pTxPort->pTxdRingTail = pTxd;
- netif_wake_queue(pAC->dev[pTxPort->PortIndex]);
- return;
- }
- if (Control & TX_CTRL_OWN_BMU) {
- pTxPort->pTxdRingTail = pTxd;
- if (pTxPort->TxdRingFree > 0) {
- netif_wake_queue(pAC->dev[pTxPort->PortIndex]);
- }
- return;
- }
-
- /* release the DMA mapping */
- PhysAddr = ((SK_U64) pTxd->VDataHigh) << (SK_U64) 32;
- PhysAddr |= (SK_U64) pTxd->VDataLow;
- pci_unmap_page(pAC->PciDev, PhysAddr,
- pTxd->pMBuf->len,
- PCI_DMA_TODEVICE);
-
- if (Control & TX_CTRL_EOF)
- DEV_KFREE_SKB_ANY(pTxd->pMBuf); /* free message */
-
- pTxPort->TxdRingFree++;
- pTxd->TBControl &= ~TX_CTRL_SOFTWARE;
- pTxd = pTxd->pNextTxd; /* point behind fragment with EOF */
- } /* while(forever) */
-} /* FreeTxDescriptors */
-
-/*****************************************************************************
- *
- * FillRxRing - fill the receive ring with valid descriptors
- *
- * Description:
- * This function fills the receive ring descriptors with data
- * segments and makes them valid for the BMU.
- * The active ring is filled completely, if possible.
- * The non-active ring is filled only partial to save memory.
- *
- * Description of rx ring structure:
- * head - points to the descriptor which will be used next by the BMU
- * tail - points to the next descriptor to give to the BMU
- *
- * Returns: N/A
- */
-static void FillRxRing(
-SK_AC *pAC, /* pointer to the adapter context */
-RX_PORT *pRxPort) /* ptr to port struct for which the ring
- should be filled */
-{
-unsigned long Flags;
-
- spin_lock_irqsave(&pRxPort->RxDesRingLock, Flags);
- while (pRxPort->RxdRingFree > pRxPort->RxFillLimit) {
- if(!FillRxDescriptor(pAC, pRxPort))
- break;
- }
- spin_unlock_irqrestore(&pRxPort->RxDesRingLock, Flags);
-} /* FillRxRing */
-
-
-/*****************************************************************************
- *
- * FillRxDescriptor - fill one buffer into the receive ring
- *
- * Description:
- * The function allocates a new receive buffer and
- * puts it into the next descriptor.
- *
- * Returns:
- * SK_TRUE - a buffer was added to the ring
- * SK_FALSE - a buffer could not be added
- */
-static SK_BOOL FillRxDescriptor(
-SK_AC *pAC, /* pointer to the adapter context struct */
-RX_PORT *pRxPort) /* ptr to port struct of ring to fill */
-{
-struct sk_buff *pMsgBlock; /* pointer to a new message block */
-RXD *pRxd; /* the rxd to fill */
-SK_U16 Length; /* data fragment length */
-SK_U64 PhysAddr; /* physical address of a rx buffer */
-
- pMsgBlock = alloc_skb(pAC->RxBufSize, GFP_ATOMIC);
- if (pMsgBlock == NULL) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_ENTRY,
- ("%s: Allocation of rx buffer failed !\n",
- pAC->dev[pRxPort->PortIndex]->name));
- SK_PNMI_CNT_NO_RX_BUF(pAC, pRxPort->PortIndex);
- return(SK_FALSE);
- }
- skb_reserve(pMsgBlock, 2); /* to align IP frames */
- /* skb allocated ok, so add buffer */
- pRxd = pRxPort->pRxdRingTail;
- pRxPort->pRxdRingTail = pRxd->pNextRxd;
- pRxPort->RxdRingFree--;
- Length = pAC->RxBufSize;
-#if 0
- PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
- virt_to_page(pMsgBlock->data),
- ((unsigned long) pMsgBlock->data &
- ~PAGE_MASK),
- pAC->RxBufSize - 2,
- PCI_DMA_FROMDEVICE);
-#else
- PhysAddr = (SK_U64) pci_phys_to_mem(pAC->PciDev, (u32)pMsgBlock->data);
-#endif
- pRxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
- pRxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
- pRxd->pMBuf = pMsgBlock;
- pRxd->RBControl = RX_CTRL_OWN_BMU | RX_CTRL_STF |
- RX_CTRL_EOF_IRQ | RX_CTRL_CHECK_CSUM | Length;
- return (SK_TRUE);
-
-} /* FillRxDescriptor */
-
-
-/*****************************************************************************
- *
- * ReQueueRxBuffer - fill one buffer back into the receive ring
- *
- * Description:
- * Fill a given buffer back into the rx ring. The buffer
- * has been previously allocated and aligned, and its phys.
- * address calculated, so this is no more necessary.
- *
- * Returns: N/A
- */
-static void ReQueueRxBuffer(
-SK_AC *pAC, /* pointer to the adapter context struct */
-RX_PORT *pRxPort, /* ptr to port struct of ring to fill */
-struct sk_buff *pMsg, /* pointer to the buffer */
-SK_U32 PhysHigh, /* phys address high dword */
-SK_U32 PhysLow) /* phys address low dword */
-{
-RXD *pRxd; /* the rxd to fill */
-SK_U16 Length; /* data fragment length */
-
- pRxd = pRxPort->pRxdRingTail;
- pRxPort->pRxdRingTail = pRxd->pNextRxd;
- pRxPort->RxdRingFree--;
- Length = pAC->RxBufSize;
- pRxd->VDataLow = PhysLow;
- pRxd->VDataHigh = PhysHigh;
- pRxd->pMBuf = pMsg;
- pRxd->RBControl = RX_CTRL_OWN_BMU | RX_CTRL_STF |
- RX_CTRL_EOF_IRQ | RX_CTRL_CHECK_CSUM | Length;
- return;
-} /* ReQueueRxBuffer */
-
-
-/*****************************************************************************
- *
- * ReceiveIrq - handle a receive IRQ
- *
- * Description:
- * This function is called when a receive IRQ is set.
- * It walks the receive descriptor ring and sends up all
- * frames that are complete.
- *
- * Returns: N/A
- */
-#if 0
-static void ReceiveIrq(
-#else
-void ReceiveIrq(
-#endif
- SK_AC *pAC, /* pointer to adapter context */
- RX_PORT *pRxPort, /* pointer to receive port struct */
- SK_BOOL SlowPathLock) /* indicates if SlowPathLock is needed */
-{
-RXD *pRxd; /* pointer to receive descriptors */
-SK_U32 Control; /* control field of descriptor */
-struct sk_buff *pMsg; /* pointer to message holding frame */
-struct sk_buff *pNewMsg; /* pointer to a new message for copying frame */
-int FrameLength; /* total length of received frame */
-SK_MBUF *pRlmtMbuf; /* ptr to a buffer for giving a frame to rlmt */
-SK_EVPARA EvPara; /* an event parameter union */
-unsigned long Flags; /* for spin lock */
-int PortIndex = pRxPort->PortIndex;
-unsigned int Offset;
-unsigned int NumBytes;
-unsigned int ForRlmt;
-SK_BOOL IsBc;
-SK_BOOL IsMc;
-SK_BOOL IsBadFrame; /* Bad frame */
-
-SK_U32 FrameStat;
-unsigned short Csum1;
-unsigned short Csum2;
-unsigned short Type;
-#if 0
-int Result;
-#endif
-SK_U64 PhysAddr;
-
-rx_start:
- /* do forever; exit if RX_CTRL_OWN_BMU found */
- for ( pRxd = pRxPort->pRxdRingHead ;
- pRxPort->RxdRingFree < pAC->RxDescrPerRing ;
- pRxd = pRxd->pNextRxd,
- pRxPort->pRxdRingHead = pRxd,
- pRxPort->RxdRingFree ++) {
-
- /*
- * For a better understanding of this loop
- * Go through every descriptor beginning at the head
- * Please note: the ring might be completely received so the OWN bit
- * set is not a good crirteria to leave that loop.
- * Therefore the RingFree counter is used.
- * On entry of this loop pRxd is a pointer to the Rxd that needs
- * to be checked next.
- */
-
- Control = pRxd->RBControl;
-
- /* check if this descriptor is ready */
- if ((Control & RX_CTRL_OWN_BMU) != 0) {
- /* this descriptor is not yet ready */
- /* This is the usual end of the loop */
- /* We don't need to start the ring again */
- FillRxRing(pAC, pRxPort);
- return;
- }
-
- /* get length of frame and check it */
- FrameLength = Control & RX_CTRL_LEN_MASK;
- if (FrameLength > pAC->RxBufSize) {
- goto rx_failed;
- }
-
- /* check for STF and EOF */
- if ((Control & (RX_CTRL_STF | RX_CTRL_EOF)) !=
- (RX_CTRL_STF | RX_CTRL_EOF)) {
- goto rx_failed;
- }
-
- /* here we have a complete frame in the ring */
- pMsg = pRxd->pMBuf;
-
- FrameStat = pRxd->FrameStat;
-
- /* check for frame length mismatch */
-#define XMR_FS_LEN_SHIFT 18
-#define GMR_FS_LEN_SHIFT 16
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- if (FrameLength != (SK_U32) (FrameStat >> XMR_FS_LEN_SHIFT)) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_RX_PROGRESS,
- ("skge: Frame length mismatch (%u/%u).\n",
- FrameLength,
- (SK_U32) (FrameStat >> XMR_FS_LEN_SHIFT)));
- goto rx_failed;
- }
- }
- else {
- if (FrameLength != (SK_U32) (FrameStat >> GMR_FS_LEN_SHIFT)) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_RX_PROGRESS,
- ("skge: Frame length mismatch (%u/%u).\n",
- FrameLength,
- (SK_U32) (FrameStat >> XMR_FS_LEN_SHIFT)));
- goto rx_failed;
- }
- }
-
- /* Set Rx Status */
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
- IsBc = (FrameStat & XMR_FS_BC) != 0;
- IsMc = (FrameStat & XMR_FS_MC) != 0;
- IsBadFrame = (FrameStat &
- (XMR_FS_ANY_ERR | XMR_FS_2L_VLAN)) != 0;
- } else {
- IsBc = (FrameStat & GMR_FS_BC) != 0;
- IsMc = (FrameStat & GMR_FS_MC) != 0;
- IsBadFrame = (((FrameStat & GMR_FS_ANY_ERR) != 0) ||
- ((FrameStat & GMR_FS_RX_OK) == 0));
- }
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 0,
- ("Received frame of length %d on port %d\n",
- FrameLength, PortIndex));
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 0,
- ("Number of free rx descriptors: %d\n",
- pRxPort->RxdRingFree));
-/* DumpMsg(pMsg, "Rx"); */
-
- if ((Control & RX_CTRL_STAT_VALID) != RX_CTRL_STAT_VALID ||
- (IsBadFrame)) {
-#if 0
- (FrameStat & (XMR_FS_ANY_ERR | XMR_FS_2L_VLAN)) != 0) {
-#endif
- /* there is a receive error in this frame */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_RX_PROGRESS,
- ("skge: Error in received frame, dropped!\n"
- "Control: %x\nRxStat: %x\n",
- Control, FrameStat));
-
- PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
- PhysAddr |= (SK_U64) pRxd->VDataLow;
- pci_dma_sync_single(pAC->PciDev,
- (dma_addr_t) PhysAddr,
- FrameLength,
- PCI_DMA_FROMDEVICE);
- ReQueueRxBuffer(pAC, pRxPort, pMsg,
- pRxd->VDataHigh, pRxd->VDataLow);
-
- continue;
- }
-
- /*
- * if short frame then copy data to reduce memory waste
- */
- if ((FrameLength < SK_COPY_THRESHOLD) &&
- ((pNewMsg = alloc_skb(FrameLength+2, GFP_ATOMIC)) != NULL)) {
- /*
- * Short frame detected and allocation successfull
- */
- /* use new skb and copy data */
- skb_reserve(pNewMsg, 2);
- skb_put(pNewMsg, FrameLength);
- PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
- PhysAddr |= (SK_U64) pRxd->VDataLow;
-
- pci_dma_sync_single(pAC->PciDev,
- (dma_addr_t) PhysAddr,
- FrameLength,
- PCI_DMA_FROMDEVICE);
- eth_copy_and_sum(pNewMsg, pMsg->data,
- FrameLength, 0);
- ReQueueRxBuffer(pAC, pRxPort, pMsg,
- pRxd->VDataHigh, pRxd->VDataLow);
- pMsg = pNewMsg;
-
- }
- else {
- /*
- * if large frame, or SKB allocation failed, pass
- * the SKB directly to the networking
- */
-
- PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
- PhysAddr |= (SK_U64) pRxd->VDataLow;
-
- /* release the DMA mapping */
- pci_unmap_single(pAC->PciDev,
- PhysAddr,
- pAC->RxBufSize - 2,
- PCI_DMA_FROMDEVICE);
-
- /* set length in message */
- skb_put(pMsg, FrameLength);
- /* hardware checksum */
- Type = ntohs(*((short*)&pMsg->data[12]));
- if (Type == 0x800) {
- Csum1=le16_to_cpu(pRxd->TcpSums & 0xffff);
- Csum2=le16_to_cpu((pRxd->TcpSums >> 16) & 0xffff);
-#if 0
- if ((((Csum1 & 0xfffe) && (Csum2 & 0xfffe)) &&
- (pAC->GIni.GIChipId == CHIP_ID_GENESIS)) ||
- (pAC->GIni.GIChipId == CHIP_ID_YUKON)) {
- Result = SkCsGetReceiveInfo(pAC,
- &pMsg->data[14],
- Csum1, Csum2, pRxPort->PortIndex);
- if (Result ==
- SKCS_STATUS_IP_FRAGMENT ||
- Result ==
- SKCS_STATUS_IP_CSUM_OK ||
- Result ==
- SKCS_STATUS_TCP_CSUM_OK ||
- Result ==
- SKCS_STATUS_UDP_CSUM_OK) {
- pMsg->ip_summed =
- CHECKSUM_UNNECESSARY;
- } else {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_RX_PROGRESS,
- ("skge: CRC error. Frame dropped!\n"));
- goto rx_failed;
- }
- }/* checksumControl calculation valid */
-#endif
- } /* IP frame */
- } /* frame > SK_COPY_TRESHOLD */
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 1,("V"));
- ForRlmt = SK_RLMT_RX_PROTOCOL;
-#if 0
- IsBc = (FrameStat & XMR_FS_BC)==XMR_FS_BC;
-#endif
- SK_RLMT_PRE_LOOKAHEAD(pAC, PortIndex, FrameLength,
- IsBc, &Offset, &NumBytes);
- if (NumBytes != 0) {
-#if 0
- IsMc = (FrameStat & XMR_FS_MC)==XMR_FS_MC;
-#endif
- SK_RLMT_LOOKAHEAD(pAC, PortIndex,
- &pMsg->data[Offset],
- IsBc, IsMc, &ForRlmt);
- }
- if (ForRlmt == SK_RLMT_RX_PROTOCOL) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 1,("W"));
- /* send up only frames from active port */
- if ((PortIndex == pAC->ActivePort) ||
- (pAC->RlmtNets == 2)) {
- /* frame for upper layer */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 1,("U"));
-#ifdef xDEBUG
- DumpMsg(pMsg, "Rx");
-#endif
- SK_PNMI_CNT_RX_OCTETS_DELIVERED(pAC,
- FrameLength, pRxPort->PortIndex);
-
-#if 0
- pMsg->dev = pAC->dev[pRxPort->PortIndex];
- pMsg->protocol = eth_type_trans(pMsg,
- pAC->dev[pRxPort->PortIndex]);
- netif_rx(pMsg);
- pAC->dev[pRxPort->PortIndex]->last_rx = jiffies;
-#else
- NetReceive(pMsg->data, pMsg->len);
- dev_kfree_skb_any(pMsg);
-#endif
- }
- else {
- /* drop frame */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_RX_PROGRESS,
- ("D"));
- DEV_KFREE_SKB(pMsg);
- }
-
- } /* if not for rlmt */
- else {
- /* packet for rlmt */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_RX_PROGRESS, ("R"));
- pRlmtMbuf = SkDrvAllocRlmtMbuf(pAC,
- pAC->IoBase, FrameLength);
- if (pRlmtMbuf != NULL) {
- pRlmtMbuf->pNext = NULL;
- pRlmtMbuf->Length = FrameLength;
- pRlmtMbuf->PortIdx = PortIndex;
- EvPara.pParaPtr = pRlmtMbuf;
- memcpy((char*)(pRlmtMbuf->pData),
- (char*)(pMsg->data),
- FrameLength);
-
- /* SlowPathLock needed? */
- if (SlowPathLock == SK_TRUE) {
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- SkEventQueue(pAC, SKGE_RLMT,
- SK_RLMT_PACKET_RECEIVED,
- EvPara);
- pAC->CheckQueue = SK_TRUE;
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- } else {
- SkEventQueue(pAC, SKGE_RLMT,
- SK_RLMT_PACKET_RECEIVED,
- EvPara);
- pAC->CheckQueue = SK_TRUE;
- }
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
- SK_DBGCAT_DRV_RX_PROGRESS,
- ("Q"));
- }
-#if 0
- if ((pAC->dev[pRxPort->PortIndex]->flags &
- (IFF_PROMISC | IFF_ALLMULTI)) != 0 ||
- (ForRlmt & SK_RLMT_RX_PROTOCOL) ==
- SK_RLMT_RX_PROTOCOL) {
- pMsg->dev = pAC->dev[pRxPort->PortIndex];
- pMsg->protocol = eth_type_trans(pMsg,
- pAC->dev[pRxPort->PortIndex]);
- netif_rx(pMsg);
- pAC->dev[pRxPort->PortIndex]->last_rx = jiffies;
- }
-#else
- if (0) {
- }
-#endif
- else {
- DEV_KFREE_SKB(pMsg);
- }
-
- } /* if packet for rlmt */
- } /* for ... scanning the RXD ring */
-
- /* RXD ring is empty -> fill and restart */
- FillRxRing(pAC, pRxPort);
- /* do not start if called from Close */
- if (pAC->BoardLevel > 0) {
- ClearAndStartRx(pAC, PortIndex);
- }
- return;
-
-rx_failed:
- /* remove error frame */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ERROR,
- ("Schrottdescriptor, length: 0x%x\n", FrameLength));
-
- /* release the DMA mapping */
-
- PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
- PhysAddr |= (SK_U64) pRxd->VDataLow;
- pci_unmap_page(pAC->PciDev,
- PhysAddr,
- pAC->RxBufSize - 2,
- PCI_DMA_FROMDEVICE);
- DEV_KFREE_SKB_IRQ(pRxd->pMBuf);
- pRxd->pMBuf = NULL;
- pRxPort->RxdRingFree++;
- pRxPort->pRxdRingHead = pRxd->pNextRxd;
- goto rx_start;
-
-} /* ReceiveIrq */
-
-
-/*****************************************************************************
- *
- * ClearAndStartRx - give a start receive command to BMU, clear IRQ
- *
- * Description:
- * This function sends a start command and a clear interrupt
- * command for one receive queue to the BMU.
- *
- * Returns: N/A
- * none
- */
-static void ClearAndStartRx(
-SK_AC *pAC, /* pointer to the adapter context */
-int PortIndex) /* index of the receive port (XMAC) */
-{
- SK_OUT8(pAC->IoBase, RxQueueAddr[PortIndex]+RX_Q_CTRL,
- RX_Q_CTRL_START | RX_Q_CTRL_CLR_I_EOF);
-} /* ClearAndStartRx */
-
-
-/*****************************************************************************
- *
- * ClearTxIrq - give a clear transmit IRQ command to BMU
- *
- * Description:
- * This function sends a clear tx IRQ command for one
- * transmit queue to the BMU.
- *
- * Returns: N/A
- */
-static void ClearTxIrq(
-SK_AC *pAC, /* pointer to the adapter context */
-int PortIndex, /* index of the transmit port (XMAC) */
-int Prio) /* priority or normal queue */
-{
- SK_OUT8(pAC->IoBase, TxQueueAddr[PortIndex][Prio]+TX_Q_CTRL,
- TX_Q_CTRL_CLR_I_EOF);
-} /* ClearTxIrq */
-
-
-/*****************************************************************************
- *
- * ClearRxRing - remove all buffers from the receive ring
- *
- * Description:
- * This function removes all receive buffers from the ring.
- * The receive BMU must be stopped before calling this function.
- *
- * Returns: N/A
- */
-static void ClearRxRing(
-SK_AC *pAC, /* pointer to adapter context */
-RX_PORT *pRxPort) /* pointer to rx port struct */
-{
-RXD *pRxd; /* pointer to the current descriptor */
-unsigned long Flags;
-SK_U64 PhysAddr;
-
- if (pRxPort->RxdRingFree == pAC->RxDescrPerRing) {
- return;
- }
- spin_lock_irqsave(&pRxPort->RxDesRingLock, Flags);
- pRxd = pRxPort->pRxdRingHead;
- do {
- if (pRxd->pMBuf != NULL) {
-
- PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
- PhysAddr |= (SK_U64) pRxd->VDataLow;
- pci_unmap_page(pAC->PciDev,
- PhysAddr,
- pAC->RxBufSize - 2,
- PCI_DMA_FROMDEVICE);
- DEV_KFREE_SKB(pRxd->pMBuf);
- pRxd->pMBuf = NULL;
- }
- pRxd->RBControl &= RX_CTRL_OWN_BMU;
- pRxd = pRxd->pNextRxd;
- pRxPort->RxdRingFree++;
- } while (pRxd != pRxPort->pRxdRingTail);
- pRxPort->pRxdRingTail = pRxPort->pRxdRingHead;
- spin_unlock_irqrestore(&pRxPort->RxDesRingLock, Flags);
-} /* ClearRxRing */
-
-
-/*****************************************************************************
- *
- * ClearTxRing - remove all buffers from the transmit ring
- *
- * Description:
- * This function removes all transmit buffers from the ring.
- * The transmit BMU must be stopped before calling this function
- * and transmitting at the upper level must be disabled.
- * The BMU own bit of all descriptors is cleared, the rest is
- * done by calling FreeTxDescriptors.
- *
- * Returns: N/A
- */
-static void ClearTxRing(
-SK_AC *pAC, /* pointer to adapter context */
-TX_PORT *pTxPort) /* pointer to tx prt struct */
-{
-TXD *pTxd; /* pointer to the current descriptor */
-int i;
-unsigned long Flags;
-
- spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);
- pTxd = pTxPort->pTxdRingHead;
- for (i=0; i<pAC->TxDescrPerRing; i++) {
- pTxd->TBControl &= ~TX_CTRL_OWN_BMU;
- pTxd = pTxd->pNextTxd;
- }
- FreeTxDescriptors(pAC, pTxPort);
- spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
-} /* ClearTxRing */
-
-
-#if 0
-/*****************************************************************************
- *
- * SetQueueSizes - configure the sizes of rx and tx queues
- *
- * Description:
- * This function assigns the sizes for active and passive port
- * to the appropriate HWinit structure variables.
- * The passive port(s) get standard values, all remaining RAM
- * is given to the active port.
- * The queue sizes are in kbyte and must be multiple of 8.
- * The limits for the number of buffers filled into the rx rings
- * is also set in this routine.
- *
- * Returns:
- * none
- */
-static void SetQueueSizes(
-SK_AC *pAC) /* pointer to the adapter context */
-{
-int StandbyRam; /* adapter RAM used for a standby port */
-int RemainingRam; /* adapter RAM available for the active port */
-int RxRam; /* RAM used for the active port receive queue */
-int i; /* loop counter */
-
-if (pAC->RlmtNets == 1) {
- StandbyRam = SK_RLMT_STANDBY_QRXSIZE + SK_RLMT_STANDBY_QXASIZE +
- SK_RLMT_STANDBY_QXSSIZE;
- RemainingRam = pAC->GIni.GIRamSize -
- (pAC->GIni.GIMacsFound-1) * StandbyRam;
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- pAC->GIni.GP[i].PRxQSize = SK_RLMT_STANDBY_QRXSIZE;
- pAC->GIni.GP[i].PXSQSize = SK_RLMT_STANDBY_QXSSIZE;
- pAC->GIni.GP[i].PXAQSize = SK_RLMT_STANDBY_QXASIZE;
- }
- RxRam = (RemainingRam * 8 / 10) & ~7;
- pAC->GIni.GP[pAC->ActivePort].PRxQSize = RxRam;
- pAC->GIni.GP[pAC->ActivePort].PXSQSize = 0;
- pAC->GIni.GP[pAC->ActivePort].PXAQSize =
- (RemainingRam - RxRam) & ~7;
- pAC->RxQueueSize = RxRam;
- pAC->TxSQueueSize = 0;
- pAC->TxAQueueSize = (RemainingRam - RxRam) & ~7;
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("queue sizes settings - rx:%d txA:%d txS:%d\n",
- pAC->RxQueueSize,pAC->TxAQueueSize, pAC->TxSQueueSize));
-} else {
- RemainingRam = pAC->GIni.GIRamSize/pAC->GIni.GIMacsFound;
- RxRam = (RemainingRam * 8 / 10) & ~7;
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- pAC->GIni.GP[i].PRxQSize = RxRam;
- pAC->GIni.GP[i].PXSQSize = 0;
- pAC->GIni.GP[i].PXAQSize = (RemainingRam - RxRam) & ~7;
- }
-
- pAC->RxQueueSize = RxRam;
- pAC->TxSQueueSize = 0;
- pAC->TxAQueueSize = (RemainingRam - RxRam) & ~7;
-}
- for (i=0; i<SK_MAX_MACS; i++) {
- pAC->RxPort[i].RxFillLimit = pAC->RxDescrPerRing;
- }
-
- if (pAC->RlmtNets == 2) {
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- pAC->RxPort[i].RxFillLimit = pAC->RxDescrPerRing - 100;
- }
- } else {
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- pAC->RxPort[i].RxFillLimit = pAC->RxDescrPerRing - 100;
- }
- /*
- * Do not set the Limit to 0, because this could cause
- * wrap around with ReQueue'ed buffers (a buffer could
- * be requeued in the same position, made accessable to
- * the hardware, and the hardware could change its
- * contents!
- */
- pAC->RxPort[pAC->ActivePort].RxFillLimit = 1;
- }
-
-#ifdef DEBUG
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
- ("i: %d, RxQSize: %d, PXSQsize: %d, PXAQSize: %d\n",
- i,
- pAC->GIni.GP[i].PRxQSize,
- pAC->GIni.GP[i].PXSQSize,
- pAC->GIni.GP[i].PXAQSize));
- }
-#endif
-} /* SetQueueSizes */
-
-
-/*****************************************************************************
- *
- * SkGeSetMacAddr - Set the hardware MAC address
- *
- * Description:
- * This function sets the MAC address used by the adapter.
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- */
-static int SkGeSetMacAddr(struct SK_NET_DEVICE *dev, void *p)
-{
-
-DEV_NET *pNet = (DEV_NET*) dev->priv;
-SK_AC *pAC = pNet->pAC;
-
-struct sockaddr *addr = p;
-unsigned long Flags;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeSetMacAddr starts now...\n"));
- if(netif_running(dev))
- return -EBUSY;
-
- memcpy(dev->dev_addr, addr->sa_data,dev->addr_len);
-
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
-
- if (pAC->RlmtNets == 2)
- SkAddrOverride(pAC, pAC->IoBase, pNet->NetNr,
- (SK_MAC_ADDR*)dev->dev_addr, SK_ADDR_VIRTUAL_ADDRESS);
- else
- SkAddrOverride(pAC, pAC->IoBase, pAC->ActivePort,
- (SK_MAC_ADDR*)dev->dev_addr, SK_ADDR_VIRTUAL_ADDRESS);
-
-
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- return 0;
-} /* SkGeSetMacAddr */
-#endif
-
-
-/*****************************************************************************
- *
- * SkGeSetRxMode - set receive mode
- *
- * Description:
- * This function sets the receive mode of an adapter. The adapter
- * supports promiscuous mode, allmulticast mode and a number of
- * multicast addresses. If more multicast addresses the available
- * are selected, a hash function in the hardware is used.
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- */
-#if 0
-static void SkGeSetRxMode(struct SK_NET_DEVICE *dev)
-{
-
-DEV_NET *pNet;
-SK_AC *pAC;
-
-struct dev_mc_list *pMcList;
-int i;
-int PortIdx;
-unsigned long Flags;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeSetRxMode starts now... "));
-
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
- if (pAC->RlmtNets == 1)
- PortIdx = pAC->ActivePort;
- else
- PortIdx = pNet->NetNr;
-
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- if (dev->flags & IFF_PROMISC) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("PROMISCUOUS mode\n"));
- SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
- SK_PROM_MODE_LLC);
- } else if (dev->flags & IFF_ALLMULTI) {
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("ALLMULTI mode\n"));
- SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
- SK_PROM_MODE_ALL_MC);
- } else {
- SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
- SK_PROM_MODE_NONE);
- SkAddrMcClear(pAC, pAC->IoBase, PortIdx, 0);
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("Number of MC entries: %d ", dev->mc_count));
-
- pMcList = dev->mc_list;
- for (i=0; i<dev->mc_count; i++, pMcList = pMcList->next) {
- SkAddrMcAdd(pAC, pAC->IoBase, PortIdx,
- (SK_MAC_ADDR*)pMcList->dmi_addr, 0);
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_MCA,
- ("%02x:%02x:%02x:%02x:%02x:%02x\n",
- pMcList->dmi_addr[0],
- pMcList->dmi_addr[1],
- pMcList->dmi_addr[2],
- pMcList->dmi_addr[3],
- pMcList->dmi_addr[4],
- pMcList->dmi_addr[5]));
- }
- SkAddrMcUpdate(pAC, pAC->IoBase, PortIdx);
- }
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
-
- return;
-} /* SkGeSetRxMode */
-
-
-/*****************************************************************************
- *
- * SkGeChangeMtu - set the MTU to another value
- *
- * Description:
- * This function sets is called whenever the MTU size is changed
- * (ifconfig mtu xxx dev ethX). If the MTU is bigger than standard
- * ethernet MTU size, long frame support is activated.
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- */
-static int SkGeChangeMtu(struct SK_NET_DEVICE *dev, int NewMtu)
-{
-DEV_NET *pNet;
-DEV_NET *pOtherNet;
-SK_AC *pAC;
-unsigned long Flags;
-int i;
-SK_EVPARA EvPara;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeChangeMtu starts now...\n"));
-
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
-
- if ((NewMtu < 68) || (NewMtu > SK_JUMBO_MTU)) {
- return -EINVAL;
- }
-
- if(pAC->BoardLevel != 2) {
- return -EINVAL;
- }
-
- pNet->Mtu = NewMtu;
- pOtherNet = (DEV_NET*)pAC->dev[1 - pNet->NetNr]->priv;
- if ((pOtherNet->Mtu > 1500) && (NewMtu <= 1500) && (pOtherNet->Up==1)) {
- return(0);
- }
-
- EvPara.Para32[0] = pNet->NetNr;
- EvPara.Para32[1] = -1;
-
- pAC->RxBufSize = NewMtu + 32;
- dev->mtu = NewMtu;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("New MTU: %d\n", NewMtu));
-
- /* prevent reconfiguration while changing the MTU */
-
- /* disable interrupts */
- SK_OUT32(pAC->IoBase, B0_IMSK, 0);
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
-
- /* Found more than one port */
- if ((pAC->GIni.GIMacsFound == 2 ) &&
- (pAC->RlmtNets == 2)) {
- /* Stop both ports */
- EvPara.Para32[0] = 0;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
- EvPara.Para32[0] = 1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
- } else {
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
- }
-
- SkEventDispatcher(pAC, pAC->IoBase);
-
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- spin_lock_irqsave(
- &pAC->TxPort[i][TX_PRIO_LOW].TxDesRingLock, Flags);
- netif_stop_queue(pAC->dev[i]);
-
- }
-
- /*
- * adjust number of rx buffers allocated
- */
- if (NewMtu > 1500) {
- /* use less rx buffers */
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- /* Found more than one port */
- if ((pAC->GIni.GIMacsFound == 2 ) &&
- (pAC->RlmtNets == 2)) {
- pAC->RxPort[i].RxFillLimit =
- pAC->RxDescrPerRing - 100;
- } else {
- if (i == pAC->ActivePort)
- pAC->RxPort[i].RxFillLimit =
- pAC->RxDescrPerRing - 100;
- else
- pAC->RxPort[i].RxFillLimit =
- pAC->RxDescrPerRing - 10;
- }
- }
- }
- else {
- /* use normal amount of rx buffers */
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- /* Found more than one port */
- if ((pAC->GIni.GIMacsFound == 2 ) &&
- (pAC->RlmtNets == 2)) {
- pAC->RxPort[i].RxFillLimit = 1;
- } else {
- if (i == pAC->ActivePort)
- pAC->RxPort[i].RxFillLimit = 1;
- else
- pAC->RxPort[i].RxFillLimit =
- pAC->RxDescrPerRing - 100;
- }
- }
- }
-
- SkGeDeInit(pAC, pAC->IoBase);
-
- /*
- * enable/disable hardware support for long frames
- */
- if (NewMtu > 1500) {
-/* pAC->JumboActivated = SK_TRUE; /#* is never set back !!! */
- pAC->GIni.GIPortUsage = SK_JUMBO_LINK;
- }
- else {
- if ((pAC->GIni.GIMacsFound == 2 ) &&
- (pAC->RlmtNets == 2)) {
- pAC->GIni.GIPortUsage = SK_MUL_LINK;
- } else {
- pAC->GIni.GIPortUsage = SK_RED_LINK;
- }
- }
-
- SkGeInit( pAC, pAC->IoBase, 1);
- SkI2cInit( pAC, pAC->IoBase, 1);
- SkEventInit(pAC, pAC->IoBase, 1);
- SkPnmiInit( pAC, pAC->IoBase, 1);
- SkAddrInit( pAC, pAC->IoBase, 1);
- SkRlmtInit( pAC, pAC->IoBase, 1);
- SkTimerInit(pAC, pAC->IoBase, 1);
-
- /*
- * tschilling:
- * Speed and others are set back to default in level 1 init!
- */
- GetConfiguration(pAC);
-
- SkGeInit( pAC, pAC->IoBase, 2);
- SkI2cInit( pAC, pAC->IoBase, 2);
- SkEventInit(pAC, pAC->IoBase, 2);
- SkPnmiInit( pAC, pAC->IoBase, 2);
- SkAddrInit( pAC, pAC->IoBase, 2);
- SkRlmtInit( pAC, pAC->IoBase, 2);
- SkTimerInit(pAC, pAC->IoBase, 2);
-
- /*
- * clear and reinit the rx rings here
- */
- for (i=0; i<pAC->GIni.GIMacsFound; i++) {
- ReceiveIrq(pAC, &pAC->RxPort[i], SK_TRUE);
- ClearRxRing(pAC, &pAC->RxPort[i]);
- FillRxRing(pAC, &pAC->RxPort[i]);
-
- /* Enable transmit descriptor polling. */
- SkGePollTxD(pAC, pAC->IoBase, i, SK_TRUE);
- FillRxRing(pAC, &pAC->RxPort[i]);
- };
-
- SkGeYellowLED(pAC, pAC->IoBase, 1);
-
-#ifdef USE_INT_MOD
- {
- unsigned long ModBase;
- ModBase = 53125000 / INTS_PER_SEC;
- SK_OUT32(pAC->IoBase, B2_IRQM_INI, ModBase);
- SK_OUT32(pAC->IoBase, B2_IRQM_MSK, IRQ_MOD_MASK);
- SK_OUT32(pAC->IoBase, B2_IRQM_CTRL, TIM_START);
- }
-#endif
-
- netif_start_queue(pAC->dev[pNet->PortNr]);
- for (i=pAC->GIni.GIMacsFound-1; i>=0; i--) {
- spin_unlock(&pAC->TxPort[i][TX_PRIO_LOW].TxDesRingLock);
- }
-
- /* enable Interrupts */
- SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
- SK_OUT32(pAC->IoBase, B0_HWE_IMSK, IRQ_HWE_MASK);
-
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
- SkEventDispatcher(pAC, pAC->IoBase);
-
- /* Found more than one port */
- if ((pAC->GIni.GIMacsFound == 2 ) &&
- (pAC->RlmtNets == 2)) {
- /* Start both ports */
- EvPara.Para32[0] = pAC->RlmtNets;
- EvPara.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_SET_NETS,
- EvPara);
-
-
- EvPara.Para32[1] = -1;
- EvPara.Para32[0] = pNet->PortNr;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
-
- if (pOtherNet->Up) {
- EvPara.Para32[0] = pOtherNet->PortNr;
- SkEventQueue(pAC, SKGE_RLMT,
- SK_RLMT_START, EvPara);
- }
- } else {
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
- }
-
- SkEventDispatcher(pAC, pAC->IoBase);
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
-
- return 0;
-} /* SkGeChangeMtu */
-
-
-/*****************************************************************************
- *
- * SkGeStats - return ethernet device statistics
- *
- * Description:
- * This function return statistic data about the ethernet device
- * to the operating system.
- *
- * Returns:
- * pointer to the statistic structure.
- */
-static struct net_device_stats *SkGeStats(struct SK_NET_DEVICE *dev)
-{
-DEV_NET *pNet = (DEV_NET*) dev->priv;
-SK_AC *pAC = pNet->pAC;
-SK_PNMI_STRUCT_DATA *pPnmiStruct; /* structure for all Pnmi-Data */
-SK_PNMI_STAT *pPnmiStat; /* pointer to virtual XMAC stat. data */
-SK_PNMI_CONF *pPnmiConf; /* pointer to virtual link config. */
-unsigned int Size; /* size of pnmi struct */
-unsigned long Flags; /* for spin lock */
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeStats starts now...\n"));
- pPnmiStruct = &pAC->PnmiStruct;
- memset(pPnmiStruct, 0, sizeof(SK_PNMI_STRUCT_DATA));
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- Size = SK_PNMI_STRUCT_SIZE;
- SkPnmiGetStruct(pAC, pAC->IoBase, pPnmiStruct, &Size, pNet->NetNr);
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- pPnmiStat = &pPnmiStruct->Stat[0];
- pPnmiConf = &pPnmiStruct->Conf[0];
-
- pAC->stats.rx_packets = (SK_U32) pPnmiStruct->RxDeliveredCts & 0xFFFFFFFF;
- pAC->stats.tx_packets = (SK_U32) pPnmiStat->StatTxOkCts & 0xFFFFFFFF;
- pAC->stats.rx_bytes = (SK_U32) pPnmiStruct->RxOctetsDeliveredCts;
- pAC->stats.tx_bytes = (SK_U32) pPnmiStat->StatTxOctetsOkCts;
-
- if (pNet->Mtu <= 1500) {
- pAC->stats.rx_errors = (SK_U32) pPnmiStruct->InErrorsCts & 0xFFFFFFFF;
- } else {
- pAC->stats.rx_errors = (SK_U32) ((pPnmiStruct->InErrorsCts -
- pPnmiStat->StatRxTooLongCts) & 0xFFFFFFFF);
- }
-
-
- if (pAC->GIni.GP[0].PhyType == SK_PHY_XMAC && pAC->HWRevision < 12)
- pAC->stats.rx_errors = pAC->stats.rx_errors - pPnmiStat->StatRxShortsCts;
-
- pAC->stats.tx_errors = (SK_U32) pPnmiStat->StatTxSingleCollisionCts & 0xFFFFFFFF;
- pAC->stats.rx_dropped = (SK_U32) pPnmiStruct->RxNoBufCts & 0xFFFFFFFF;
- pAC->stats.tx_dropped = (SK_U32) pPnmiStruct->TxNoBufCts & 0xFFFFFFFF;
- pAC->stats.multicast = (SK_U32) pPnmiStat->StatRxMulticastOkCts & 0xFFFFFFFF;
- pAC->stats.collisions = (SK_U32) pPnmiStat->StatTxSingleCollisionCts & 0xFFFFFFFF;
-
- /* detailed rx_errors: */
- pAC->stats.rx_length_errors = (SK_U32) pPnmiStat->StatRxRuntCts & 0xFFFFFFFF;
- pAC->stats.rx_over_errors = (SK_U32) pPnmiStat->StatRxFifoOverflowCts & 0xFFFFFFFF;
- pAC->stats.rx_crc_errors = (SK_U32) pPnmiStat->StatRxFcsCts & 0xFFFFFFFF;
- pAC->stats.rx_frame_errors = (SK_U32) pPnmiStat->StatRxFramingCts & 0xFFFFFFFF;
- pAC->stats.rx_fifo_errors = (SK_U32) pPnmiStat->StatRxFifoOverflowCts & 0xFFFFFFFF;
- pAC->stats.rx_missed_errors = (SK_U32) pPnmiStat->StatRxMissedCts & 0xFFFFFFFF;
-
- /* detailed tx_errors */
- pAC->stats.tx_aborted_errors = (SK_U32) 0;
- pAC->stats.tx_carrier_errors = (SK_U32) pPnmiStat->StatTxCarrierCts & 0xFFFFFFFF;
- pAC->stats.tx_fifo_errors = (SK_U32) pPnmiStat->StatTxFifoUnderrunCts & 0xFFFFFFFF;
- pAC->stats.tx_heartbeat_errors = (SK_U32) pPnmiStat->StatTxCarrierCts & 0xFFFFFFFF;
- pAC->stats.tx_window_errors = (SK_U32) 0;
-
- return(&pAC->stats);
-} /* SkGeStats */
-
-
-/*****************************************************************************
- *
- * SkGeIoctl - IO-control function
- *
- * Description:
- * This function is called if an ioctl is issued on the device.
- * There are three subfunction for reading, writing and test-writing
- * the private MIB data structure (usefull for SysKonnect-internal tools).
- *
- * Returns:
- * 0, if everything is ok
- * !=0, on error
- */
-static int SkGeIoctl(struct SK_NET_DEVICE *dev, struct ifreq *rq, int cmd)
-{
-DEV_NET *pNet;
-SK_AC *pAC;
-
-SK_GE_IOCTL Ioctl;
-unsigned int Err = 0;
-int Size;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeIoctl starts now...\n"));
-
- pNet = (DEV_NET*) dev->priv;
- pAC = pNet->pAC;
-
- if(copy_from_user(&Ioctl, rq->ifr_data, sizeof(SK_GE_IOCTL))) {
- return -EFAULT;
- }
-
- switch(cmd) {
- case SK_IOCTL_SETMIB:
- case SK_IOCTL_PRESETMIB:
- if (!capable(CAP_NET_ADMIN)) return -EPERM;
- case SK_IOCTL_GETMIB:
- if(copy_from_user(&pAC->PnmiStruct, Ioctl.pData,
- Ioctl.Len<sizeof(pAC->PnmiStruct)?
- Ioctl.Len : sizeof(pAC->PnmiStruct))) {
- return -EFAULT;
- }
- Size = SkGeIocMib(pNet, Ioctl.Len, cmd);
- if(copy_to_user(Ioctl.pData, &pAC->PnmiStruct,
- Ioctl.Len<Size? Ioctl.Len : Size)) {
- return -EFAULT;
- }
- Ioctl.Len = Size;
- if(copy_to_user(rq->ifr_data, &Ioctl, sizeof(SK_GE_IOCTL))) {
- return -EFAULT;
- }
- break;
- default:
- Err = -EOPNOTSUPP;
- }
- return(Err);
-} /* SkGeIoctl */
-
-
-/*****************************************************************************
- *
- * SkGeIocMib - handle a GetMib, SetMib- or PresetMib-ioctl message
- *
- * Description:
- * This function reads/writes the MIB data using PNMI (Private Network
- * Management Interface).
- * The destination for the data must be provided with the
- * ioctl call and is given to the driver in the form of
- * a user space address.
- * Copying from the user-provided data area into kernel messages
- * and back is done by copy_from_user and copy_to_user calls in
- * SkGeIoctl.
- *
- * Returns:
- * returned size from PNMI call
- */
-static int SkGeIocMib(
-DEV_NET *pNet, /* pointer to the adapter context */
-unsigned int Size, /* length of ioctl data */
-int mode) /* flag for set/preset */
-{
-unsigned long Flags; /* for spin lock */
-SK_AC *pAC;
-
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("SkGeIocMib starts now...\n"));
- pAC = pNet->pAC;
- /* access MIB */
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- switch(mode) {
- case SK_IOCTL_GETMIB:
- SkPnmiGetStruct(pAC, pAC->IoBase, &pAC->PnmiStruct, &Size,
- pNet->NetNr);
- break;
- case SK_IOCTL_PRESETMIB:
- SkPnmiPreSetStruct(pAC, pAC->IoBase, &pAC->PnmiStruct, &Size,
- pNet->NetNr);
- break;
- case SK_IOCTL_SETMIB:
- SkPnmiSetStruct(pAC, pAC->IoBase, &pAC->PnmiStruct, &Size,
- pNet->NetNr);
- break;
- default:
- break;
- }
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
- ("MIB data access succeeded\n"));
- return (Size);
-} /* SkGeIocMib */
-#endif
-
-
-/*****************************************************************************
- *
- * GetConfiguration - read configuration information
- *
- * Description:
- * This function reads per-adapter configuration information from
- * the options provided on the command line.
- *
- * Returns:
- * none
- */
-static void GetConfiguration(
-SK_AC *pAC) /* pointer to the adapter context structure */
-{
-SK_I32 Port; /* preferred port */
-int LinkSpeed; /* Link speed */
-int AutoNeg; /* auto negotiation off (0) or on (1) */
-int DuplexCap; /* duplex capabilities (0=both, 1=full, 2=half */
-int MSMode; /* master / slave mode selection */
-SK_BOOL AutoSet;
-SK_BOOL DupSet;
-/*
- * The two parameters AutoNeg. and DuplexCap. map to one configuration
- * parameter. The mapping is described by this table:
- * DuplexCap -> | both | full | half |
- * AutoNeg | | | |
- * -----------------------------------------------------------------
- * Off | illegal | Full | Half |
- * -----------------------------------------------------------------
- * On | AutoBoth | AutoFull | AutoHalf |
- * -----------------------------------------------------------------
- * Sense | AutoSense | AutoSense | AutoSense |
- */
-int Capabilities[3][3] =
- { { -1, SK_LMODE_FULL, SK_LMODE_HALF},
- {SK_LMODE_AUTOBOTH, SK_LMODE_AUTOFULL, SK_LMODE_AUTOHALF},
- {SK_LMODE_AUTOSENSE, SK_LMODE_AUTOSENSE, SK_LMODE_AUTOSENSE} };
-#define DC_BOTH 0
-#define DC_FULL 1
-#define DC_HALF 2
-#define AN_OFF 0
-#define AN_ON 1
-#define AN_SENS 2
-
- /* settings for port A */
- /* settings link speed */
- LinkSpeed = SK_LSPEED_AUTO; /* default: do auto select */
- if (Speed_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- Speed_A[pAC->Index] != NULL) {
- if (strcmp(Speed_A[pAC->Index],"")==0) {
- LinkSpeed = SK_LSPEED_AUTO;
- }
- else if (strcmp(Speed_A[pAC->Index],"Auto")==0) {
- LinkSpeed = SK_LSPEED_AUTO;
- }
- else if (strcmp(Speed_A[pAC->Index],"10")==0) {
- LinkSpeed = SK_LSPEED_10MBPS;
- }
- else if (strcmp(Speed_A[pAC->Index],"100")==0) {
- LinkSpeed = SK_LSPEED_100MBPS;
- }
- else if (strcmp(Speed_A[pAC->Index],"1000")==0) {
- LinkSpeed = SK_LSPEED_1000MBPS;
- }
- else printk("%s: Illegal value for Speed_A\n",
- pAC->dev[0]->name);
- }
-
- /* Check speed parameter */
- /* Only copper type adapter and GE V2 cards */
- if (((pAC->GIni.GIChipId != CHIP_ID_YUKON) ||
- (pAC->GIni.GICopperType != SK_TRUE)) &&
- ((LinkSpeed != SK_LSPEED_AUTO) &&
- (LinkSpeed != SK_LSPEED_1000MBPS))) {
- printk("%s: Illegal value for Speed_A. "
- "Not a copper card or GE V2 card\n Using "
- "speed 1000\n", pAC->dev[0]->name);
- LinkSpeed = SK_LSPEED_1000MBPS;
- }
- pAC->GIni.GP[0].PLinkSpeed = LinkSpeed;
-
- /* Autonegotiation */
- AutoNeg = AN_ON; /* tschilling: Default: Autonegotiation on! */
- AutoSet = SK_FALSE;
- if (AutoNeg_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- AutoNeg_A[pAC->Index] != NULL) {
- AutoSet = SK_TRUE;
- if (strcmp(AutoNeg_A[pAC->Index],"")==0) {
- AutoSet = SK_FALSE;
- }
- else if (strcmp(AutoNeg_A[pAC->Index],"On")==0) {
- AutoNeg = AN_ON;
- }
- else if (strcmp(AutoNeg_A[pAC->Index],"Off")==0) {
- AutoNeg = AN_OFF;
- }
- else if (strcmp(AutoNeg_A[pAC->Index],"Sense")==0) {
- AutoNeg = AN_SENS;
- }
- else printk("%s: Illegal value for AutoNeg_A\n",
- pAC->dev[0]->name);
- }
-
- DuplexCap = DC_BOTH;
- DupSet = SK_FALSE;
- if (DupCap_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- DupCap_A[pAC->Index] != NULL) {
- DupSet = SK_TRUE;
- if (strcmp(DupCap_A[pAC->Index],"")==0) {
- DupSet = SK_FALSE;
- }
- else if (strcmp(DupCap_A[pAC->Index],"Both")==0) {
- DuplexCap = DC_BOTH;
- }
- else if (strcmp(DupCap_A[pAC->Index],"Full")==0) {
- DuplexCap = DC_FULL;
- }
- else if (strcmp(DupCap_A[pAC->Index],"Half")==0) {
- DuplexCap = DC_HALF;
- }
- else printk("%s: Illegal value for DupCap_A\n",
- pAC->dev[0]->name);
- }
-
- /* check for illegal combinations */
- if (AutoSet && AutoNeg==AN_SENS && DupSet) {
- printk("%s, Port A: DuplexCapabilities"
- " ignored using Sense mode\n", pAC->dev[0]->name);
- }
- if (AutoSet && AutoNeg==AN_OFF && DupSet && DuplexCap==DC_BOTH){
- printk("%s, Port A: Illegal combination"
- " of values AutoNeg. and DuplexCap.\n Using "
- "Full Duplex\n", pAC->dev[0]->name);
-
- DuplexCap = DC_FULL;
- }
- if (AutoSet && AutoNeg==AN_OFF && !DupSet) {
- DuplexCap = DC_FULL;
- }
-
- if (!AutoSet && DupSet) {
- printk("%s, Port A: Duplex setting not"
- " possible in\n default AutoNegotiation mode"
- " (Sense).\n Using AutoNegotiation On\n",
- pAC->dev[0]->name);
- AutoNeg = AN_ON;
- }
-
- /* set the desired mode */
- pAC->GIni.GP[0].PLinkModeConf =
- Capabilities[AutoNeg][DuplexCap];
-
- pAC->GIni.GP[0].PFlowCtrlMode = SK_FLOW_MODE_SYM_OR_REM;
- if (FlowCtrl_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- FlowCtrl_A[pAC->Index] != NULL) {
- if (strcmp(FlowCtrl_A[pAC->Index],"") == 0) {
- }
- else if (strcmp(FlowCtrl_A[pAC->Index],"SymOrRem") == 0) {
- pAC->GIni.GP[0].PFlowCtrlMode =
- SK_FLOW_MODE_SYM_OR_REM;
- }
- else if (strcmp(FlowCtrl_A[pAC->Index],"Sym")==0) {
- pAC->GIni.GP[0].PFlowCtrlMode =
- SK_FLOW_MODE_SYMMETRIC;
- }
- else if (strcmp(FlowCtrl_A[pAC->Index],"LocSend")==0) {
- pAC->GIni.GP[0].PFlowCtrlMode =
- SK_FLOW_MODE_LOC_SEND;
- }
- else if (strcmp(FlowCtrl_A[pAC->Index],"None")==0) {
- pAC->GIni.GP[0].PFlowCtrlMode =
- SK_FLOW_MODE_NONE;
- }
- else printk("Illegal value for FlowCtrl_A\n");
- }
- if (AutoNeg==AN_OFF && pAC->GIni.GP[0].PFlowCtrlMode!=
- SK_FLOW_MODE_NONE) {
- printk("%s, Port A: FlowControl"
- " impossible without AutoNegotiation,"
- " disabled\n", pAC->dev[0]->name);
- pAC->GIni.GP[0].PFlowCtrlMode = SK_FLOW_MODE_NONE;
- }
-
- MSMode = SK_MS_MODE_AUTO; /* default: do auto select */
- if (Role_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- Role_A[pAC->Index] != NULL) {
- if (strcmp(Role_A[pAC->Index],"")==0) {
- }
- else if (strcmp(Role_A[pAC->Index],"Auto")==0) {
- MSMode = SK_MS_MODE_AUTO;
- }
- else if (strcmp(Role_A[pAC->Index],"Master")==0) {
- MSMode = SK_MS_MODE_MASTER;
- }
- else if (strcmp(Role_A[pAC->Index],"Slave")==0) {
- MSMode = SK_MS_MODE_SLAVE;
- }
- else printk("%s: Illegal value for Role_A\n",
- pAC->dev[0]->name);
- }
- pAC->GIni.GP[0].PMSMode = MSMode;
-
-
- /* settings for port B */
- /* settings link speed */
- LinkSpeed = SK_LSPEED_AUTO; /* default: do auto select */
- if (Speed_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- Speed_B[pAC->Index] != NULL) {
- if (strcmp(Speed_B[pAC->Index],"")==0) {
- LinkSpeed = SK_LSPEED_AUTO;
- }
- else if (strcmp(Speed_B[pAC->Index],"Auto")==0) {
- LinkSpeed = SK_LSPEED_AUTO;
- }
- else if (strcmp(Speed_B[pAC->Index],"10")==0) {
- LinkSpeed = SK_LSPEED_10MBPS;
- }
- else if (strcmp(Speed_B[pAC->Index],"100")==0) {
- LinkSpeed = SK_LSPEED_100MBPS;
- }
- else if (strcmp(Speed_B[pAC->Index],"1000")==0) {
- LinkSpeed = SK_LSPEED_1000MBPS;
- }
- else printk("%s: Illegal value for Speed_B\n",
- pAC->dev[1]->name);
- }
-
- /* Check speed parameter */
- /* Only copper type adapter and GE V2 cards */
- if (((pAC->GIni.GIChipId != CHIP_ID_YUKON) ||
- (pAC->GIni.GICopperType != SK_TRUE)) &&
- ((LinkSpeed != SK_LSPEED_AUTO) &&
- (LinkSpeed != SK_LSPEED_1000MBPS))) {
- printk("%s: Illegal value for Speed_B. "
- "Not a copper card or GE V2 card\n Using "
- "speed 1000\n", pAC->dev[1]->name);
- LinkSpeed = SK_LSPEED_1000MBPS;
- }
- pAC->GIni.GP[1].PLinkSpeed = LinkSpeed;
-
- /* Auto negotiation */
- AutoNeg = AN_SENS; /* default: do auto Sense */
- AutoSet = SK_FALSE;
- if (AutoNeg_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- AutoNeg_B[pAC->Index] != NULL) {
- AutoSet = SK_TRUE;
- if (strcmp(AutoNeg_B[pAC->Index],"")==0) {
- AutoSet = SK_FALSE;
- }
- else if (strcmp(AutoNeg_B[pAC->Index],"On")==0) {
- AutoNeg = AN_ON;
- }
- else if (strcmp(AutoNeg_B[pAC->Index],"Off")==0) {
- AutoNeg = AN_OFF;
- }
- else if (strcmp(AutoNeg_B[pAC->Index],"Sense")==0) {
- AutoNeg = AN_SENS;
- }
- else printk("Illegal value for AutoNeg_B\n");
- }
-
- DuplexCap = DC_BOTH;
- DupSet = SK_FALSE;
- if (DupCap_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- DupCap_B[pAC->Index] != NULL) {
- DupSet = SK_TRUE;
- if (strcmp(DupCap_B[pAC->Index],"")==0) {
- DupSet = SK_FALSE;
- }
- else if (strcmp(DupCap_B[pAC->Index],"Both")==0) {
- DuplexCap = DC_BOTH;
- }
- else if (strcmp(DupCap_B[pAC->Index],"Full")==0) {
- DuplexCap = DC_FULL;
- }
- else if (strcmp(DupCap_B[pAC->Index],"Half")==0) {
- DuplexCap = DC_HALF;
- }
- else printk("Illegal value for DupCap_B\n");
- }
-
- /* check for illegal combinations */
- if (AutoSet && AutoNeg==AN_SENS && DupSet) {
- printk("%s, Port B: DuplexCapabilities"
- " ignored using Sense mode\n", pAC->dev[1]->name);
- }
- if (AutoSet && AutoNeg==AN_OFF && DupSet && DuplexCap==DC_BOTH){
- printk("%s, Port B: Illegal combination"
- " of values AutoNeg. and DuplexCap.\n Using "
- "Full Duplex\n", pAC->dev[1]->name);
-
- DuplexCap = DC_FULL;
- }
- if (AutoSet && AutoNeg==AN_OFF && !DupSet) {
- DuplexCap = DC_FULL;
- }
-
- if (!AutoSet && DupSet) {
- printk("%s, Port B: Duplex setting not"
- " possible in\n default AutoNegotiation mode"
- " (Sense).\n Using AutoNegotiation On\n",
- pAC->dev[1]->name);
- AutoNeg = AN_ON;
- }
-
- /* set the desired mode */
- pAC->GIni.GP[1].PLinkModeConf =
- Capabilities[AutoNeg][DuplexCap];
-
- pAC->GIni.GP[1].PFlowCtrlMode = SK_FLOW_MODE_SYM_OR_REM;
- if (FlowCtrl_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- FlowCtrl_B[pAC->Index] != NULL) {
- if (strcmp(FlowCtrl_B[pAC->Index],"") == 0) {
- }
- else if (strcmp(FlowCtrl_B[pAC->Index],"SymOrRem") == 0) {
- pAC->GIni.GP[1].PFlowCtrlMode =
- SK_FLOW_MODE_SYM_OR_REM;
- }
- else if (strcmp(FlowCtrl_B[pAC->Index],"Sym")==0) {
- pAC->GIni.GP[1].PFlowCtrlMode =
- SK_FLOW_MODE_SYMMETRIC;
- }
- else if (strcmp(FlowCtrl_B[pAC->Index],"LocSend")==0) {
- pAC->GIni.GP[1].PFlowCtrlMode =
- SK_FLOW_MODE_LOC_SEND;
- }
- else if (strcmp(FlowCtrl_B[pAC->Index],"None")==0) {
- pAC->GIni.GP[1].PFlowCtrlMode =
- SK_FLOW_MODE_NONE;
- }
- else printk("Illegal value for FlowCtrl_B\n");
- }
- if (AutoNeg==AN_OFF && pAC->GIni.GP[1].PFlowCtrlMode!=
- SK_FLOW_MODE_NONE) {
- printk("%s, Port B: FlowControl"
- " impossible without AutoNegotiation,"
- " disabled\n", pAC->dev[1]->name);
- pAC->GIni.GP[1].PFlowCtrlMode = SK_FLOW_MODE_NONE;
- }
-
- MSMode = SK_MS_MODE_AUTO; /* default: do auto select */
- if (Role_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- Role_B[pAC->Index] != NULL) {
- if (strcmp(Role_B[pAC->Index],"")==0) {
- }
- else if (strcmp(Role_B[pAC->Index],"Auto")==0) {
- MSMode = SK_MS_MODE_AUTO;
- }
- else if (strcmp(Role_B[pAC->Index],"Master")==0) {
- MSMode = SK_MS_MODE_MASTER;
- }
- else if (strcmp(Role_B[pAC->Index],"Slave")==0) {
- MSMode = SK_MS_MODE_SLAVE;
- }
- else printk("%s: Illegal value for Role_B\n",
- pAC->dev[1]->name);
- }
- pAC->GIni.GP[1].PMSMode = MSMode;
-
-
- /* settings for both ports */
- pAC->ActivePort = 0;
- if (PrefPort != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- PrefPort[pAC->Index] != NULL) {
- if (strcmp(PrefPort[pAC->Index],"") == 0) { /* Auto */
- pAC->ActivePort = 0;
- pAC->Rlmt.Net[0].Preference = -1; /* auto */
- pAC->Rlmt.Net[0].PrefPort = 0;
- }
- else if (strcmp(PrefPort[pAC->Index],"A") == 0) {
- /*
- * do not set ActivePort here, thus a port
- * switch is issued after net up.
- */
- Port = 0;
- pAC->Rlmt.Net[0].Preference = Port;
- pAC->Rlmt.Net[0].PrefPort = Port;
- }
- else if (strcmp(PrefPort[pAC->Index],"B") == 0) {
- /*
- * do not set ActivePort here, thus a port
- * switch is issued after net up.
- */
- Port = 1;
- pAC->Rlmt.Net[0].Preference = Port;
- pAC->Rlmt.Net[0].PrefPort = Port;
- }
- else printk("%s: Illegal value for PrefPort\n",
- pAC->dev[0]->name);
- }
-
- pAC->RlmtNets = 1;
-
- if (RlmtMode != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
- RlmtMode[pAC->Index] != NULL) {
- if (strcmp(RlmtMode[pAC->Index], "") == 0) {
- pAC->RlmtMode = 0;
- }
- else if (strcmp(RlmtMode[pAC->Index], "CheckLinkState") == 0) {
- pAC->RlmtMode = SK_RLMT_CHECK_LINK;
- }
- else if (strcmp(RlmtMode[pAC->Index], "CheckLocalPort") == 0) {
- pAC->RlmtMode = SK_RLMT_CHECK_LINK |
- SK_RLMT_CHECK_LOC_LINK;
- }
- else if (strcmp(RlmtMode[pAC->Index], "CheckSeg") == 0) {
- pAC->RlmtMode = SK_RLMT_CHECK_LINK |
- SK_RLMT_CHECK_LOC_LINK |
- SK_RLMT_CHECK_SEG;
- }
- else if ((strcmp(RlmtMode[pAC->Index], "DualNet") == 0) &&
- (pAC->GIni.GIMacsFound == 2)) {
- pAC->RlmtMode = SK_RLMT_CHECK_LINK;
- pAC->RlmtNets = 2;
- }
- else {
- printk("%s: Illegal value for"
- " RlmtMode, using default\n", pAC->dev[0]->name);
- pAC->RlmtMode = 0;
- }
- }
- else {
- pAC->RlmtMode = 0;
- }
-} /* GetConfiguration */
-
-
-/*****************************************************************************
- *
- * ProductStr - return a adapter identification string from vpd
- *
- * Description:
- * This function reads the product name string from the vpd area
- * and puts it the field pAC->DeviceString.
- *
- * Returns: N/A
- */
-static void ProductStr(
-SK_AC *pAC /* pointer to adapter context */
-)
-{
-int StrLen = 80; /* length of the string, defined in SK_AC */
-char Keyword[] = VPD_NAME; /* vpd productname identifier */
-int ReturnCode; /* return code from vpd_read */
-unsigned long Flags;
-
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- ReturnCode = VpdRead(pAC, pAC->IoBase, Keyword, pAC->DeviceStr,
- &StrLen);
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
- if (ReturnCode != 0) {
- /* there was an error reading the vpd data */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ERROR,
- ("Error reading VPD data: %d\n", ReturnCode));
- pAC->DeviceStr[0] = '\0';
- }
-} /* ProductStr */
-
-
-/****************************************************************************/
-/* functions for common modules *********************************************/
-/****************************************************************************/
-
-
-/*****************************************************************************
- *
- * SkDrvAllocRlmtMbuf - allocate an RLMT mbuf
- *
- * Description:
- * This routine returns an RLMT mbuf or NULL. The RLMT Mbuf structure
- * is embedded into a socket buff data area.
- *
- * Context:
- * runtime
- *
- * Returns:
- * NULL or pointer to Mbuf.
- */
-SK_MBUF *SkDrvAllocRlmtMbuf(
-SK_AC *pAC, /* pointer to adapter context */
-SK_IOC IoC, /* the IO-context */
-unsigned BufferSize) /* size of the requested buffer */
-{
-SK_MBUF *pRlmtMbuf; /* pointer to a new rlmt-mbuf structure */
-struct sk_buff *pMsgBlock; /* pointer to a new message block */
-
- pMsgBlock = alloc_skb(BufferSize + sizeof(SK_MBUF), GFP_ATOMIC);
- if (pMsgBlock == NULL) {
- return (NULL);
- }
- pRlmtMbuf = (SK_MBUF*) pMsgBlock->data;
- skb_reserve(pMsgBlock, sizeof(SK_MBUF));
- pRlmtMbuf->pNext = NULL;
- pRlmtMbuf->pOs = pMsgBlock;
- pRlmtMbuf->pData = pMsgBlock->data; /* Data buffer. */
- pRlmtMbuf->Size = BufferSize; /* Data buffer size. */
- pRlmtMbuf->Length = 0; /* Length of packet (<= Size). */
- return (pRlmtMbuf);
-
-} /* SkDrvAllocRlmtMbuf */
-
-
-/*****************************************************************************
- *
- * SkDrvFreeRlmtMbuf - free an RLMT mbuf
- *
- * Description:
- * This routine frees one or more RLMT mbuf(s).
- *
- * Context:
- * runtime
- *
- * Returns:
- * Nothing
- */
-void SkDrvFreeRlmtMbuf(
-SK_AC *pAC, /* pointer to adapter context */
-SK_IOC IoC, /* the IO-context */
-SK_MBUF *pMbuf) /* size of the requested buffer */
-{
-SK_MBUF *pFreeMbuf;
-SK_MBUF *pNextMbuf;
-
- pFreeMbuf = pMbuf;
- do {
- pNextMbuf = pFreeMbuf->pNext;
- DEV_KFREE_SKB_ANY(pFreeMbuf->pOs);
- pFreeMbuf = pNextMbuf;
- } while ( pFreeMbuf != NULL );
-} /* SkDrvFreeRlmtMbuf */
-
-
-/*****************************************************************************
- *
- * SkOsGetTime - provide a time value
- *
- * Description:
- * This routine provides a time value. The unit is 1/HZ (defined by Linux).
- * It is not used for absolute time, but only for time differences.
- *
- *
- * Returns:
- * Time value
- */
-SK_U64 SkOsGetTime(SK_AC *pAC)
-{
-#if 0
- return jiffies;
-#else
- return get_timer(0);
-#endif
-} /* SkOsGetTime */
-
-
-/*****************************************************************************
- *
- * SkPciReadCfgDWord - read a 32 bit value from pci config space
- *
- * Description:
- * This routine reads a 32 bit value from the pci configuration
- * space.
- *
- * Returns:
- * 0 - indicate everything worked ok.
- * != 0 - error indication
- */
-int SkPciReadCfgDWord(
-SK_AC *pAC, /* Adapter Control structure pointer */
-int PciAddr, /* PCI register address */
-SK_U32 *pVal) /* pointer to store the read value */
-{
- pci_read_config_dword(pAC->PciDev, PciAddr, pVal);
- return(0);
-} /* SkPciReadCfgDWord */
-
-
-/*****************************************************************************
- *
- * SkPciReadCfgWord - read a 16 bit value from pci config space
- *
- * Description:
- * This routine reads a 16 bit value from the pci configuration
- * space.
- *
- * Returns:
- * 0 - indicate everything worked ok.
- * != 0 - error indication
- */
-int SkPciReadCfgWord(
-SK_AC *pAC, /* Adapter Control structure pointer */
-int PciAddr, /* PCI register address */
-SK_U16 *pVal) /* pointer to store the read value */
-{
- pci_read_config_word(pAC->PciDev, PciAddr, pVal);
- return(0);
-} /* SkPciReadCfgWord */
-
-
-/*****************************************************************************
- *
- * SkPciReadCfgByte - read a 8 bit value from pci config space
- *
- * Description:
- * This routine reads a 8 bit value from the pci configuration
- * space.
- *
- * Returns:
- * 0 - indicate everything worked ok.
- * != 0 - error indication
- */
-int SkPciReadCfgByte(
-SK_AC *pAC, /* Adapter Control structure pointer */
-int PciAddr, /* PCI register address */
-SK_U8 *pVal) /* pointer to store the read value */
-{
- pci_read_config_byte(pAC->PciDev, PciAddr, pVal);
- return(0);
-} /* SkPciReadCfgByte */
-
-
-/*****************************************************************************
- *
- * SkPciWriteCfgDWord - write a 32 bit value to pci config space
- *
- * Description:
- * This routine writes a 32 bit value to the pci configuration
- * space.
- *
- * Returns:
- * 0 - indicate everything worked ok.
- * != 0 - error indication
- */
-int SkPciWriteCfgDWord(
-SK_AC *pAC, /* Adapter Control structure pointer */
-int PciAddr, /* PCI register address */
-SK_U32 Val) /* pointer to store the read value */
-{
- pci_write_config_dword(pAC->PciDev, PciAddr, Val);
- return(0);
-} /* SkPciWriteCfgDWord */
-
-
-/*****************************************************************************
- *
- * SkPciWriteCfgWord - write a 16 bit value to pci config space
- *
- * Description:
- * This routine writes a 16 bit value to the pci configuration
- * space. The flag PciConfigUp indicates whether the config space
- * is accesible or must be set up first.
- *
- * Returns:
- * 0 - indicate everything worked ok.
- * != 0 - error indication
- */
-int SkPciWriteCfgWord(
-SK_AC *pAC, /* Adapter Control structure pointer */
-int PciAddr, /* PCI register address */
-SK_U16 Val) /* pointer to store the read value */
-{
- pci_write_config_word(pAC->PciDev, PciAddr, Val);
- return(0);
-} /* SkPciWriteCfgWord */
-
-
-/*****************************************************************************
- *
- * SkPciWriteCfgWord - write a 8 bit value to pci config space
- *
- * Description:
- * This routine writes a 8 bit value to the pci configuration
- * space. The flag PciConfigUp indicates whether the config space
- * is accesible or must be set up first.
- *
- * Returns:
- * 0 - indicate everything worked ok.
- * != 0 - error indication
- */
-int SkPciWriteCfgByte(
-SK_AC *pAC, /* Adapter Control structure pointer */
-int PciAddr, /* PCI register address */
-SK_U8 Val) /* pointer to store the read value */
-{
- pci_write_config_byte(pAC->PciDev, PciAddr, Val);
- return(0);
-} /* SkPciWriteCfgByte */
-
-
-/*****************************************************************************
- *
- * SkDrvEvent - handle driver events
- *
- * Description:
- * This function handles events from all modules directed to the driver
- *
- * Context:
- * Is called under protection of slow path lock.
- *
- * Returns:
- * 0 if everything ok
- * < 0 on error
- *
- */
-int SkDrvEvent(
-SK_AC *pAC, /* pointer to adapter context */
-SK_IOC IoC, /* io-context */
-SK_U32 Event, /* event-id */
-SK_EVPARA Param) /* event-parameter */
-{
-SK_MBUF *pRlmtMbuf; /* pointer to a rlmt-mbuf structure */
-struct sk_buff *pMsg; /* pointer to a message block */
-int FromPort; /* the port from which we switch away */
-int ToPort; /* the port we switch to */
-SK_EVPARA NewPara; /* parameter for further events */
-#if 0
-int Stat;
-#endif
-unsigned long Flags;
-SK_BOOL DualNet;
-
- switch (Event) {
- case SK_DRV_ADAP_FAIL:
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("ADAPTER FAIL EVENT\n"));
- printk("%s: Adapter failed.\n", pAC->dev[0]->name);
- /* disable interrupts */
- SK_OUT32(pAC->IoBase, B0_IMSK, 0);
- /* cgoos */
- break;
- case SK_DRV_PORT_FAIL:
- FromPort = Param.Para32[0];
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("PORT FAIL EVENT, Port: %d\n", FromPort));
- if (FromPort == 0) {
- printk("%s: Port A failed.\n", pAC->dev[0]->name);
- } else {
- printk("%s: Port B failed.\n", pAC->dev[1]->name);
- }
- /* cgoos */
- break;
- case SK_DRV_PORT_RESET: /* SK_U32 PortIdx */
- /* action list 4 */
- FromPort = Param.Para32[0];
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("PORT RESET EVENT, Port: %d ", FromPort));
- NewPara.Para64 = FromPort;
- SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_XMAC_RESET, NewPara);
- spin_lock_irqsave(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
- SkGeStopPort(pAC, IoC, FromPort, SK_STOP_ALL, SK_HARD_RST);
-#if 0
- pAC->dev[Param.Para32[0]]->flags &= ~IFF_RUNNING;
-#endif
- spin_unlock_irqrestore(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
-
- /* clear rx ring from received frames */
- ReceiveIrq(pAC, &pAC->RxPort[FromPort], SK_FALSE);
-
- ClearTxRing(pAC, &pAC->TxPort[FromPort][TX_PRIO_LOW]);
- spin_lock_irqsave(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
-
- /* tschilling: Handling of return value inserted. */
- if (SkGeInitPort(pAC, IoC, FromPort)) {
- if (FromPort == 0) {
- printk("%s: SkGeInitPort A failed.\n", pAC->dev[0]->name);
- } else {
- printk("%s: SkGeInitPort B failed.\n", pAC->dev[1]->name);
- }
- }
- SkAddrMcUpdate(pAC,IoC, FromPort);
- PortReInitBmu(pAC, FromPort);
- SkGePollTxD(pAC, IoC, FromPort, SK_TRUE);
- ClearAndStartRx(pAC, FromPort);
- spin_unlock_irqrestore(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
- break;
- case SK_DRV_NET_UP: /* SK_U32 PortIdx */
- /* action list 5 */
- FromPort = Param.Para32[0];
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("NET UP EVENT, Port: %d ", Param.Para32[0]));
-#ifdef SK98_INFO
- printk("%s: network connection up using"
- " port %c\n", pAC->dev[Param.Para32[0]]->name, 'A'+Param.Para32[0]);
-
- /* tschilling: Values changed according to LinkSpeedUsed. */
- Stat = pAC->GIni.GP[FromPort].PLinkSpeedUsed;
- if (Stat == SK_LSPEED_STAT_10MBPS) {
- printk(" speed: 10\n");
- } else if (Stat == SK_LSPEED_STAT_100MBPS) {
- printk(" speed: 100\n");
- } else if (Stat == SK_LSPEED_STAT_1000MBPS) {
- printk(" speed: 1000\n");
- } else {
- printk(" speed: unknown\n");
- }
-
- Stat = pAC->GIni.GP[FromPort].PLinkModeStatus;
- if (Stat == SK_LMODE_STAT_AUTOHALF ||
- Stat == SK_LMODE_STAT_AUTOFULL) {
- printk(" autonegotiation: yes\n");
- }
- else {
- printk(" autonegotiation: no\n");
- }
- if (Stat == SK_LMODE_STAT_AUTOHALF ||
- Stat == SK_LMODE_STAT_HALF) {
- printk(" duplex mode: half\n");
- }
- else {
- printk(" duplex mode: full\n");
- }
- Stat = pAC->GIni.GP[FromPort].PFlowCtrlStatus;
- if (Stat == SK_FLOW_STAT_REM_SEND ) {
- printk(" flowctrl: remote send\n");
- }
- else if (Stat == SK_FLOW_STAT_LOC_SEND ){
- printk(" flowctrl: local send\n");
- }
- else if (Stat == SK_FLOW_STAT_SYMMETRIC ){
- printk(" flowctrl: symmetric\n");
- }
- else {
- printk(" flowctrl: none\n");
- }
-
- /* tschilling: Check against CopperType now. */
- if ((pAC->GIni.GICopperType == SK_TRUE) &&
- (pAC->GIni.GP[FromPort].PLinkSpeedUsed ==
- SK_LSPEED_STAT_1000MBPS)) {
- Stat = pAC->GIni.GP[FromPort].PMSStatus;
- if (Stat == SK_MS_STAT_MASTER ) {
- printk(" role: master\n");
- }
- else if (Stat == SK_MS_STAT_SLAVE ) {
- printk(" role: slave\n");
- }
- else {
- printk(" role: ???\n");
- }
- }
-
-#ifdef SK_ZEROCOPY
- if (pAC->GIni.GIChipId == CHIP_ID_YUKON)
- printk(" scatter-gather: enabled\n");
- else
- printk(" scatter-gather: disabled\n");
-
-#else
- printk(" scatter-gather: disabled\n");
-#endif
-#endif /* SK98_INFO */
-
- if ((Param.Para32[0] != pAC->ActivePort) &&
- (pAC->RlmtNets == 1)) {
- NewPara.Para32[0] = pAC->ActivePort;
- NewPara.Para32[1] = Param.Para32[0];
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_SWITCH_INTERN,
- NewPara);
- }
-
- /* Inform the world that link protocol is up. */
-#if 0
- pAC->dev[Param.Para32[0]]->flags |= IFF_RUNNING;
-#endif
-
- break;
- case SK_DRV_NET_DOWN: /* SK_U32 Reason */
- /* action list 7 */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("NET DOWN EVENT "));
-#ifdef SK98_INFO
- printk("%s: network connection down\n", pAC->dev[Param.Para32[1]]->name);
-#endif
-#if 0
- pAC->dev[Param.Para32[1]]->flags &= ~IFF_RUNNING;
-#endif
- break;
- case SK_DRV_SWITCH_HARD: /* SK_U32 FromPortIdx SK_U32 ToPortIdx */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("PORT SWITCH HARD "));
- case SK_DRV_SWITCH_SOFT: /* SK_U32 FromPortIdx SK_U32 ToPortIdx */
- /* action list 6 */
- printk("%s: switching to port %c\n", pAC->dev[0]->name,
- 'A'+Param.Para32[1]);
- case SK_DRV_SWITCH_INTERN: /* SK_U32 FromPortIdx SK_U32 ToPortIdx */
- FromPort = Param.Para32[0];
- ToPort = Param.Para32[1];
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("PORT SWITCH EVENT, From: %d To: %d (Pref %d) ",
- FromPort, ToPort, pAC->Rlmt.Net[0].PrefPort));
- NewPara.Para64 = FromPort;
- SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_XMAC_RESET, NewPara);
- NewPara.Para64 = ToPort;
- SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_XMAC_RESET, NewPara);
- spin_lock_irqsave(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
- spin_lock_irqsave(
- &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
- SkGeStopPort(pAC, IoC, FromPort, SK_STOP_ALL, SK_SOFT_RST);
- SkGeStopPort(pAC, IoC, ToPort, SK_STOP_ALL, SK_SOFT_RST);
- spin_unlock_irqrestore(
- &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
- spin_unlock_irqrestore(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
-
- ReceiveIrq(pAC, &pAC->RxPort[FromPort], SK_FALSE); /* clears rx ring */
- ReceiveIrq(pAC, &pAC->RxPort[ToPort], SK_FALSE); /* clears rx ring */
-
- ClearTxRing(pAC, &pAC->TxPort[FromPort][TX_PRIO_LOW]);
- ClearTxRing(pAC, &pAC->TxPort[ToPort][TX_PRIO_LOW]);
- spin_lock_irqsave(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
- spin_lock_irqsave(
- &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
- pAC->ActivePort = ToPort;
-#if 0
- SetQueueSizes(pAC);
-#else
- /* tschilling: New common function with minimum size check. */
- DualNet = SK_FALSE;
- if (pAC->RlmtNets == 2) {
- DualNet = SK_TRUE;
- }
-
- if (SkGeInitAssignRamToQueues(
- pAC,
- pAC->ActivePort,
- DualNet)) {
- spin_unlock_irqrestore(
- &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
- spin_unlock_irqrestore(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
- printk("SkGeInitAssignRamToQueues failed.\n");
- break;
- }
-#endif
- /* tschilling: Handling of return values inserted. */
- if (SkGeInitPort(pAC, IoC, FromPort) ||
- SkGeInitPort(pAC, IoC, ToPort)) {
- printk("%s: SkGeInitPort failed.\n", pAC->dev[0]->name);
- }
- if (Event == SK_DRV_SWITCH_SOFT) {
- SkMacRxTxEnable(pAC, IoC, FromPort);
- }
- SkMacRxTxEnable(pAC, IoC, ToPort);
- SkAddrSwap(pAC, IoC, FromPort, ToPort);
- SkAddrMcUpdate(pAC, IoC, FromPort);
- SkAddrMcUpdate(pAC, IoC, ToPort);
- PortReInitBmu(pAC, FromPort);
- PortReInitBmu(pAC, ToPort);
- SkGePollTxD(pAC, IoC, FromPort, SK_TRUE);
- SkGePollTxD(pAC, IoC, ToPort, SK_TRUE);
- ClearAndStartRx(pAC, FromPort);
- ClearAndStartRx(pAC, ToPort);
- spin_unlock_irqrestore(
- &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
- spin_unlock_irqrestore(
- &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
- Flags);
- break;
- case SK_DRV_RLMT_SEND: /* SK_MBUF *pMb */
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("RLS "));
- pRlmtMbuf = (SK_MBUF*) Param.pParaPtr;
- pMsg = (struct sk_buff*) pRlmtMbuf->pOs;
- skb_put(pMsg, pRlmtMbuf->Length);
- if (XmitFrame(pAC, &pAC->TxPort[pRlmtMbuf->PortIdx][TX_PRIO_LOW],
- pMsg) < 0)
-
- DEV_KFREE_SKB_ANY(pMsg);
- break;
- default:
- break;
- }
- SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
- ("END EVENT "));
-
- return (0);
-} /* SkDrvEvent */
-
-
-/*****************************************************************************
- *
- * SkErrorLog - log errors
- *
- * Description:
- * This function logs errors to the system buffer and to the console
- *
- * Returns:
- * 0 if everything ok
- * < 0 on error
- *
- */
-void SkErrorLog(
-SK_AC *pAC,
-int ErrClass,
-int ErrNum,
-char *pErrorMsg)
-{
-char ClassStr[80];
-
- switch (ErrClass) {
- case SK_ERRCL_OTHER:
- strcpy(ClassStr, "Other error");
- break;
- case SK_ERRCL_CONFIG:
- strcpy(ClassStr, "Configuration error");
- break;
- case SK_ERRCL_INIT:
- strcpy(ClassStr, "Initialization error");
- break;
- case SK_ERRCL_NORES:
- strcpy(ClassStr, "Out of resources error");
- break;
- case SK_ERRCL_SW:
- strcpy(ClassStr, "internal Software error");
- break;
- case SK_ERRCL_HW:
- strcpy(ClassStr, "Hardware failure");
- break;
- case SK_ERRCL_COMM:
- strcpy(ClassStr, "Communication error");
- break;
- }
- printk(KERN_INFO "%s: -- ERROR --\n Class: %s\n"
- " Nr: 0x%x\n Msg: %s\n", pAC->dev[0]->name,
- ClassStr, ErrNum, pErrorMsg);
-
-} /* SkErrorLog */
-
-#ifdef DEBUG
-/****************************************************************************/
-/* "debug only" section *****************************************************/
-/****************************************************************************/
-
-
-/*****************************************************************************
- *
- * DumpMsg - print a frame
- *
- * Description:
- * This function prints frames to the system logfile/to the console.
- *
- * Returns: N/A
- *
- */
-static void DumpMsg(struct sk_buff *skb, char *str)
-{
- int msglen;
-
- if (skb == NULL) {
- printk("DumpMsg(): NULL-Message\n");
- return;
- }
-
- if (skb->data == NULL) {
- printk("DumpMsg(): Message empty\n");
- return;
- }
-
- msglen = skb->len;
- if (msglen > 64)
- msglen = 64;
-
- printk("--- Begin of message from %s , len %d (from %d) ----\n", str, msglen, skb->len);
-
- DumpData((char *)skb->data, msglen);
-
- printk("------- End of message ---------\n");
-} /* DumpMsg */
-
-
-/*****************************************************************************
- *
- * DumpData - print a data area
- *
- * Description:
- * This function prints a area of data to the system logfile/to the
- * console.
- *
- * Returns: N/A
- *
- */
-static void DumpData(char *p, int size)
-{
-register int i;
-int haddr, addr;
-char hex_buffer[180];
-char asc_buffer[180];
-char HEXCHAR[] = "0123456789ABCDEF";
-
- addr = 0;
- haddr = 0;
- hex_buffer[0] = 0;
- asc_buffer[0] = 0;
- for (i=0; i < size; ) {
- if (*p >= '0' && *p <='z')
- asc_buffer[addr] = *p;
- else
- asc_buffer[addr] = '.';
- addr++;
- asc_buffer[addr] = 0;
- hex_buffer[haddr] = HEXCHAR[(*p & 0xf0) >> 4];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[*p & 0x0f];
- haddr++;
- hex_buffer[haddr] = ' ';
- haddr++;
- hex_buffer[haddr] = 0;
- p++;
- i++;
- if (i%16 == 0) {
- printk("%s %s\n", hex_buffer, asc_buffer);
- addr = 0;
- haddr = 0;
- }
- }
-} /* DumpData */
-
-
-/*****************************************************************************
- *
- * DumpLong - print a data area as long values
- *
- * Description:
- * This function prints a area of data to the system logfile/to the
- * console.
- *
- * Returns: N/A
- *
- */
-static void DumpLong(char *pc, int size)
-{
-register int i;
-int haddr, addr;
-char hex_buffer[180];
-char asc_buffer[180];
-char HEXCHAR[] = "0123456789ABCDEF";
-long *p;
-int l;
-
- addr = 0;
- haddr = 0;
- hex_buffer[0] = 0;
- asc_buffer[0] = 0;
- p = (long*) pc;
- for (i=0; i < size; ) {
- l = (long) *p;
- hex_buffer[haddr] = HEXCHAR[(l >> 28) & 0xf];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[(l >> 24) & 0xf];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[(l >> 20) & 0xf];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[(l >> 16) & 0xf];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[(l >> 12) & 0xf];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[(l >> 8) & 0xf];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[(l >> 4) & 0xf];
- haddr++;
- hex_buffer[haddr] = HEXCHAR[l & 0x0f];
- haddr++;
- hex_buffer[haddr] = ' ';
- haddr++;
- hex_buffer[haddr] = 0;
- p++;
- i++;
- if (i%8 == 0) {
- printk("%4x %s\n", (i-8)*4, hex_buffer);
- haddr = 0;
- }
- }
- printk("------------------------\n");
-} /* DumpLong */
-
-#endif
+/******************************************************************************
+ *
+ * Name: skge.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: The main driver source module
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * Driver for SysKonnect Gigabit Ethernet Server Adapters:
+ *
+ * SK-9871 (single link 1000Base-ZX)
+ * SK-9872 (dual link 1000Base-ZX)
+ * SK-9861 (single link 1000Base-SX, VF45 Volition Plug)
+ * SK-9862 (dual link 1000Base-SX, VF45 Volition Plug)
+ * SK-9841 (single link 1000Base-LX)
+ * SK-9842 (dual link 1000Base-LX)
+ * SK-9843 (single link 1000Base-SX)
+ * SK-9844 (dual link 1000Base-SX)
+ * SK-9821 (single link 1000Base-T)
+ * SK-9822 (dual link 1000Base-T)
+ * SK-9881 (single link 1000Base-SX V2 LC)
+ * SK-9871 (single link 1000Base-ZX V2)
+ * SK-9861 (single link 1000Base-SX V2, VF45 Volition Plug)
+ * SK-9841 (single link 1000Base-LX V2)
+ * SK-9843 (single link 1000Base-SX V2)
+ * SK-9821 (single link 1000Base-T V2)
+ *
+ * Created 10-Feb-1999, based on Linux' acenic.c, 3c59x.c and
+ * SysKonnects GEnesis Solaris driver
+ * Author: Christoph Goos (cgoos@syskonnect.de)
+ * Mirko Lindner (mlindner@syskonnect.de)
+ *
+ * Address all question to: linux@syskonnect.de
+ *
+ * The technical manual for the adapters is available from SysKonnect's
+ * web pages: www.syskonnect.com
+ * Goto "Support" and search Knowledge Base for "manual".
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skge.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.46 2003/02/25 14:16:36 mlindner
+ * Fix: Copyright statement
+ *
+ * Revision 1.45 2003/02/25 13:25:55 mlindner
+ * Add: Performance improvements
+ * Add: Support for various vendors
+ * Fix: Init function
+ *
+ * Revision 1.44 2003/01/09 09:25:26 mlindner
+ * Fix: Remove useless init_module/cleanup_module forward declarations
+ *
+ * Revision 1.43 2002/11/29 08:42:41 mlindner
+ * Fix: Boot message
+ *
+ * Revision 1.42 2002/11/28 13:30:23 mlindner
+ * Add: New frame check
+ *
+ * Revision 1.41 2002/11/27 13:55:18 mlindner
+ * Fix: Drop wrong csum packets
+ * Fix: Initialize proc_entry after hw check
+ *
+ * Revision 1.40 2002/10/31 07:50:37 tschilli
+ * Function SkGeInitAssignRamToQueues() from common module inserted.
+ * Autonegotiation is set to ON for all adapters.
+ * LinkSpeedUsed is used in link up status report.
+ * Role parameter will show up for 1000 Mbps links only.
+ * GetConfiguration() inserted after init level 1 in SkGeChangeMtu().
+ * All return values of SkGeInit() and SkGeInitPort() are checked.
+ *
+ * Revision 1.39 2002/10/02 12:56:05 mlindner
+ * Add: Support for Yukon
+ * Add: Support for ZEROCOPY, scatter-gather and hw checksum
+ * Add: New transmit ring function (use SG and TCP/UDP hardware checksumming)
+ * Add: New init function
+ * Add: Speed check and setup
+ * Add: Merge source for kernel 2.2.x and 2.4.x
+ * Add: Opcode check for tcp
+ * Add: Frame length check
+ * Fix: Transmit complete interrupt
+ * Fix: Interrupt moderation
+ *
+ * Revision 1.29.2.13 2002/01/14 12:44:52 mlindner
+ * Fix: Rlmt modes
+ *
+ * Revision 1.29.2.12 2001/12/07 12:06:18 mlindner
+ * Fix: malloc -> slab changes
+ *
+ * Revision 1.29.2.11 2001/12/06 15:19:20 mlindner
+ * Add: DMA attributes
+ * Fix: Module initialisation
+ * Fix: pci_map_single and pci_unmap_single replaced
+ *
+ * Revision 1.29.2.10 2001/12/06 09:56:50 mlindner
+ * Corrected some printk's
+ *
+ * Revision 1.29.2.9 2001/09/05 12:15:34 mlindner
+ * Add: LBFO Changes
+ * Fix: Counter Errors (Jumbo == to long errors)
+ * Fix: Changed pAC->PciDev declaration
+ * Fix: too short counters
+ *
+ * Revision 1.29.2.8 2001/06/25 12:10:44 mlindner
+ * fix: ReceiveIrq() changed.
+ *
+ * Revision 1.29.2.7 2001/06/25 08:07:05 mlindner
+ * fix: RLMT locking in ReceiveIrq() changed.
+ *
+ * Revision 1.29.2.6 2001/05/21 07:59:29 mlindner
+ * fix: MTU init problems
+ *
+ * Revision 1.29.2.5 2001/05/08 11:25:08 mlindner
+ * fix: removed VLAN error message
+ *
+ * Revision 1.29.2.4 2001/05/04 13:31:43 gklug
+ * fix: do not handle eth_copy on bad fragments received.
+ *
+ * Revision 1.29.2.3 2001/04/23 08:06:43 mlindner
+ * Fix: error handling
+ *
+ * Revision 1.29.2.2 2001/03/15 12:04:54 mlindner
+ * Fixed memory problem
+ *
+ * Revision 1.29.2.1 2001/03/12 16:41:44 mlindner
+ * add: procfs function
+ * add: dual-net function
+ * add: RLMT networks
+ * add: extended PNMI features
+ *
+ * Kernel 2.4.x specific:
+ * Revision 1.xx 2000/09/12 13:31:56 cgoos
+ * Fixed missign "dev=NULL in skge_probe.
+ * Added counting for jumbo frames (corrects error statistic).
+ * Removed VLAN tag check (enables VLAN support).
+ *
+ * Kernel 2.2.x specific:
+ * Revision 1.29 2000/02/21 13:31:56 cgoos
+ * Fixed "unused" warning for UltraSPARC change.
+ *
+ * Partially kernel 2.2.x specific:
+ * Revision 1.28 2000/02/21 10:32:36 cgoos
+ * Added fixes for UltraSPARC.
+ * Now printing RlmtMode and PrefPort setting at startup.
+ * Changed XmitFrame return value.
+ * Fixed rx checksum calculation for BIG ENDIAN systems.
+ * Fixed rx jumbo frames counted as ierrors.
+ *
+ *
+ * Revision 1.27 1999/11/25 09:06:28 cgoos
+ * Changed base_addr to unsigned long.
+ *
+ * Revision 1.26 1999/11/22 13:29:16 cgoos
+ * Changed license header to GPL.
+ * Changes for inclusion in linux kernel (2.2.13).
+ * Removed 2.0.x defines.
+ * Changed SkGeProbe to skge_probe.
+ * Added checks in SkGeIoctl.
+ *
+ * Revision 1.25 1999/10/07 14:47:52 cgoos
+ * Changed 984x to 98xx.
+ *
+ * Revision 1.24 1999/09/30 07:21:01 cgoos
+ * Removed SK_RLMT_SLOW_LOOKAHEAD option.
+ * Giving spanning tree packets also to OS now.
+ *
+ * Revision 1.23 1999/09/29 07:36:50 cgoos
+ * Changed assignment for IsBc/IsMc.
+ *
+ * Revision 1.22 1999/09/28 12:57:09 cgoos
+ * Added CheckQueue also to Single-Port-ISR.
+ *
+ * Revision 1.21 1999/09/28 12:42:41 cgoos
+ * Changed parameter strings for RlmtMode.
+ *
+ * Revision 1.20 1999/09/28 12:37:57 cgoos
+ * Added CheckQueue for fast delivery of RLMT frames.
+ *
+ * Revision 1.19 1999/09/16 07:57:25 cgoos
+ * Copperfield changes.
+ *
+ * Revision 1.18 1999/09/03 13:06:30 cgoos
+ * Fixed RlmtMode=CheckSeg bug: wrong DEV_KFREE_SKB in RLMT_SEND caused
+ * double allocated skb's.
+ * FrameStat in ReceiveIrq was accessed via wrong Rxd.
+ * Queue size for async. standby Tx queue was zero.
+ * FillRxLimit of 0 could cause problems with ReQueue, changed to 1.
+ * Removed debug output of checksum statistic.
+ *
+ * Revision 1.17 1999/08/11 13:55:27 cgoos
+ * Transmit descriptor polling was not reenabled after SkGePortInit.
+ *
+ * Revision 1.16 1999/07/27 15:17:29 cgoos
+ * Added some "\n" in output strings (removed while debuging...).
+ *
+ * Revision 1.15 1999/07/23 12:09:30 cgoos
+ * Performance optimization, rx checksumming, large frame support.
+ *
+ * Revision 1.14 1999/07/14 11:26:27 cgoos
+ * Removed Link LED settings (now in RLMT).
+ * Added status output at NET UP.
+ * Fixed SMP problems with Tx and SWITCH running in parallel.
+ * Fixed return code problem at RLMT_SEND event.
+ *
+ * Revision 1.13 1999/04/07 10:11:42 cgoos
+ * Fixed Single Port problems.
+ * Fixed Multi-Adapter problems.
+ * Always display startup string.
+ *
+ * Revision 1.12 1999/03/29 12:26:37 cgoos
+ * Reversed locking to fine granularity.
+ * Fixed skb double alloc problem (caused by incorrect xmit return code).
+ * Enhanced function descriptions.
+ *
+ * Revision 1.11 1999/03/15 13:10:51 cgoos
+ * Changed device identifier in output string to ethX.
+ *
+ * Revision 1.10 1999/03/15 12:12:34 cgoos
+ * Changed copyright notice.
+ *
+ * Revision 1.9 1999/03/15 12:10:17 cgoos
+ * Changed locking to one driver lock.
+ * Added check of SK_AC-size (for consistency with library).
+ *
+ * Revision 1.8 1999/03/08 11:44:02 cgoos
+ * Fixed missing dev->tbusy in SkGeXmit.
+ * Changed large frame (jumbo) buffer number.
+ * Added copying of short frames.
+ *
+ * Revision 1.7 1999/03/04 13:26:57 cgoos
+ * Fixed spinlock calls for SMP.
+ *
+ * Revision 1.6 1999/03/02 09:53:51 cgoos
+ * Added descriptor revertion for big endian machines.
+ *
+ * Revision 1.5 1999/03/01 08:50:59 cgoos
+ * Fixed SkGeChangeMtu.
+ * Fixed pci config space accesses.
+ *
+ * Revision 1.4 1999/02/18 15:48:44 cgoos
+ * Corrected some printk's.
+ *
+ * Revision 1.3 1999/02/18 12:45:55 cgoos
+ * Changed SK_MAX_CARD_PARAM to default 16
+ *
+ * Revision 1.2 1999/02/18 10:55:32 cgoos
+ * Removed SkGeDrvTimeStamp function.
+ * Printing "ethX:" before adapter type at adapter init.
+ *
+ *
+ * 10-Feb-1999 cg Created, based on Linux' acenic.c, 3c59x.c and
+ * SysKonnects GEnesis Solaris driver
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Possible compiler options (#define xxx / -Dxxx):
+ *
+ * debugging can be enable by changing SK_DEBUG_CHKMOD and
+ * SK_DEBUG_CHKCAT in makefile (described there).
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This is the main module of the Linux GE driver.
+ *
+ * All source files except skge.c, skdrv1st.h, skdrv2nd.h and sktypes.h
+ * are part of SysKonnect's COMMON MODULES for the SK-98xx adapters.
+ * Those are used for drivers on multiple OS', so some thing may seem
+ * unnecessary complicated on Linux. Please do not try to 'clean up'
+ * them without VERY good reasons, because this will make it more
+ * difficult to keep the Linux driver in synchronisation with the
+ * other versions.
+ *
+ * Include file hierarchy:
+ *
+ * <linux/module.h>
+ *
+ * "h/skdrv1st.h"
+ * <linux/version.h>
+ * <linux/types.h>
+ * <linux/kernel.h>
+ * <linux/string.h>
+ * <linux/errno.h>
+ * <linux/ioport.h>
+ * <linux/slab.h>
+ * <linux/interrupt.h>
+ * <linux/pci.h>
+ * <asm/byteorder.h>
+ * <asm/bitops.h>
+ * <asm/io.h>
+ * <linux/netdevice.h>
+ * <linux/etherdevice.h>
+ * <linux/skbuff.h>
+ * those three depending on kernel version used:
+ * <linux/bios32.h>
+ * <linux/init.h>
+ * <asm/uaccess.h>
+ * <net/checksum.h>
+ *
+ * "h/skerror.h"
+ * "h/skdebug.h"
+ * "h/sktypes.h"
+ * "h/lm80.h"
+ * "h/xmac_ii.h"
+ *
+ * "h/skdrv2nd.h"
+ * "h/skqueue.h"
+ * "h/skgehwt.h"
+ * "h/sktimer.h"
+ * "h/ski2c.h"
+ * "h/skgepnmi.h"
+ * "h/skvpd.h"
+ * "h/skgehw.h"
+ * "h/skgeinit.h"
+ * "h/skaddr.h"
+ * "h/skgesirq.h"
+ * "h/skcsum.h"
+ * "h/skrlmt.h"
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+#include "h/skversion.h"
+#if 0
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/proc_fs.h>
+#endif
+#include "h/skdrv1st.h"
+#include "h/skdrv2nd.h"
+
+
+/* defines ******************************************************************/
+/* for debuging on x86 only */
+/* #define BREAKPOINT() asm(" int $3"); */
+
+/* use the scatter-gather functionality with sendfile() */
+#if 0
+#define SK_ZEROCOPY
+#endif
+
+/* use of a transmit complete interrupt */
+#define USE_TX_COMPLETE
+
+/* use interrupt moderation (for tx complete only) */
+#define USE_INT_MOD
+#define INTS_PER_SEC 1000
+
+/*
+ * threshold for copying small receive frames
+ * set to 0 to avoid copying, set to 9001 to copy all frames
+ */
+#define SK_COPY_THRESHOLD 50
+
+/* number of adapters that can be configured via command line params */
+#define SK_MAX_CARD_PARAM 16
+
+
+/*
+ * use those defines for a compile-in version of the driver instead
+ * of command line parameters
+ */
+/* #define LINK_SPEED_A {"Auto", } */
+/* #define LINK_SPEED_B {"Auto", } */
+/* #define AUTO_NEG_A {"Sense", } */
+/* #define AUTO_NEG_B {"Sense", } */
+/* #define DUP_CAP_A {"Both", } */
+/* #define DUP_CAP_B {"Both", } */
+/* #define FLOW_CTRL_A {"SymOrRem", } */
+/* #define FLOW_CTRL_B {"SymOrRem", } */
+/* #define ROLE_A {"Auto", } */
+/* #define ROLE_B {"Auto", } */
+/* #define PREF_PORT {"A", } */
+/* #define RLMT_MODE {"CheckLinkState", } */
+
+#define DEV_KFREE_SKB(skb) dev_kfree_skb(skb)
+#define DEV_KFREE_SKB_IRQ(skb) dev_kfree_skb_irq(skb)
+#define DEV_KFREE_SKB_ANY(skb) dev_kfree_skb_any(skb)
+
+/* function prototypes ******************************************************/
+static void FreeResources(struct SK_NET_DEVICE *dev);
+static int SkGeBoardInit(struct SK_NET_DEVICE *dev, SK_AC *pAC);
+static SK_BOOL BoardAllocMem(SK_AC *pAC);
+static void BoardFreeMem(SK_AC *pAC);
+static void BoardInitMem(SK_AC *pAC);
+static void SetupRing(SK_AC*, void*, uintptr_t, RXD**, RXD**, RXD**,
+ int*, SK_BOOL);
+
+#if 0
+static void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs);
+static void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs);
+static int SkGeOpen(struct SK_NET_DEVICE *dev);
+static int SkGeClose(struct SK_NET_DEVICE *dev);
+static int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev);
+static int SkGeSetMacAddr(struct SK_NET_DEVICE *dev, void *p);
+static void SkGeSetRxMode(struct SK_NET_DEVICE *dev);
+static struct net_device_stats *SkGeStats(struct SK_NET_DEVICE *dev);
+static int SkGeIoctl(struct SK_NET_DEVICE *dev, struct ifreq *rq, int cmd);
+#else
+void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs);
+void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs);
+int SkGeOpen(struct SK_NET_DEVICE *dev);
+int SkGeClose(struct SK_NET_DEVICE *dev);
+int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev);
+#endif
+static void GetConfiguration(SK_AC*);
+static void ProductStr(SK_AC*);
+static int XmitFrame(SK_AC*, TX_PORT*, struct sk_buff*);
+static void FreeTxDescriptors(SK_AC*pAC, TX_PORT*);
+static void FillRxRing(SK_AC*, RX_PORT*);
+static SK_BOOL FillRxDescriptor(SK_AC*, RX_PORT*);
+#if 0
+static void ReceiveIrq(SK_AC*, RX_PORT*, SK_BOOL);
+#else
+void ReceiveIrq(SK_AC*, RX_PORT*, SK_BOOL);
+#endif
+static void ClearAndStartRx(SK_AC*, int);
+static void ClearTxIrq(SK_AC*, int, int);
+static void ClearRxRing(SK_AC*, RX_PORT*);
+static void ClearTxRing(SK_AC*, TX_PORT*);
+#if 0
+static void SetQueueSizes(SK_AC *pAC);
+
+static int SkGeChangeMtu(struct SK_NET_DEVICE *dev, int new_mtu);
+#endif
+static void PortReInitBmu(SK_AC*, int);
+#if 0
+static int SkGeIocMib(DEV_NET*, unsigned int, int);
+static int XmitFrameSG(SK_AC*, TX_PORT*, struct sk_buff*);
+#endif
+
+/*Extern */
+
+/* external Proc function */
+extern int proc_read(
+ char *buffer,
+ char **buffer_location,
+ off_t offset,
+ int buffer_length,
+ int *eof,
+ void *data);
+
+#ifdef DEBUG
+static void DumpMsg(struct sk_buff*, char*);
+static void DumpData(char*, int);
+static void DumpLong(char*, int);
+#endif
+void dump_frag( SK_U8 *data, int length);
+
+/* global variables *********************************************************/
+#if 0
+static const char *BootString = BOOT_STRING;
+#endif
+struct SK_NET_DEVICE *SkGeRootDev = NULL;
+static int probed __initdata = 0;
+
+/* local variables **********************************************************/
+static uintptr_t TxQueueAddr[SK_MAX_MACS][2] = {{0x680, 0x600},{0x780, 0x700}};
+static uintptr_t RxQueueAddr[SK_MAX_MACS] = {0x400, 0x480};
+
+
+/* local variables **********************************************************/
+const char SK_Root_Dir_entry[8];
+
+#if 0
+static struct proc_dir_entry *pSkRootDir;
+#endif
+
+
+static struct pci_device_id supported[] = {
+ {PCI_VENDOR_ID_3COM, 0x1700},
+ {PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_GE},
+ {PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_YU},
+ {}
+};
+
+
+/*****************************************************************************
+ *
+ * skge_probe - find all SK-98xx adapters
+ *
+ * Description:
+ * This function scans the PCI bus for SK-98xx adapters. Resources for
+ * each adapter are allocated and the adapter is brought into Init 1
+ * state.
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ */
+#if 0
+static int __init skge_probe (void)
+#else
+int skge_probe (struct eth_device ** ret_dev)
+#endif
+{
+#if 0
+ int proc_root_initialized = 0;
+#endif
+ int boards_found = 0;
+#if 0
+ int vendor_flag = SK_FALSE;
+#endif
+ SK_AC *pAC;
+ DEV_NET *pNet = NULL;
+#if 0
+ struct proc_dir_entry *pProcFile;
+ struct pci_dev *pdev = NULL;
+ unsigned long base_address;
+#else
+ u32 base_address;
+#endif
+ struct SK_NET_DEVICE *dev = NULL;
+#if 0
+ SK_BOOL DeviceFound = SK_FALSE;
+#endif
+ SK_BOOL BootStringCount = SK_FALSE;
+#if 1
+ pci_dev_t devno;
+#endif
+
+ if (probed)
+ return -ENODEV;
+ probed++;
+
+ if (!pci_present()) /* is PCI support present? */
+ return -ENODEV;
+
+#if 0
+ while((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET << 8, pdev)))
+#else
+ while((devno = pci_find_devices (supported, boards_found)) >= 0)
+#endif
+ {
+
+ dev = NULL;
+ pNet = NULL;
+
+
+#if 0
+ SK_PCI_ISCOMPLIANT(vendor_flag, pdev);
+ if (!vendor_flag)
+ continue;
+#endif
+
+/* if ((pdev->vendor != PCI_VENDOR_ID_SYSKONNECT) &&
+ ((pdev->device != PCI_DEVICE_ID_SYSKONNECT_GE) ||
+ (pdev->device != PCI_DEVICE_ID_SYSKONNECT_YU))){
+ continue;
+ }
+*/
+#if 0
+ /* Configure DMA attributes. */
+ if (pci_set_dma_mask(pdev, (u64) 0xffffffffffffffff) &&
+ pci_set_dma_mask(pdev, (u64) 0xffffffff))
+ continue;
+#endif
+
+
+#if 0
+ if ((dev = init_etherdev(dev, sizeof(DEV_NET))) == NULL) {
+ printk(KERN_ERR "Unable to allocate etherdev "
+ "structure!\n");
+ break;
+ }
+#else
+ dev = malloc (sizeof *dev);
+ memset(dev, 0, sizeof(*dev));
+ dev->priv = malloc(sizeof(DEV_NET));
+#endif
+
+ if (dev->priv == NULL) {
+ printk(KERN_ERR "Unable to allocate adapter "
+ "structure!\n");
+ break;
+ }
+
+ pNet = dev->priv;
+ pNet->pAC = kmalloc(sizeof(SK_AC), GFP_KERNEL);
+ if (pNet->pAC == NULL){
+ kfree(dev->priv);
+ printk(KERN_ERR "Unable to allocate adapter "
+ "structure!\n");
+ break;
+ }
+
+ /* Print message */
+ if (!BootStringCount) {
+ /* set display flag to TRUE so that */
+ /* we only display this string ONCE */
+ BootStringCount = SK_TRUE;
+#ifdef SK98_INFO
+ printk("%s\n", BootString);
+#endif
+ }
+
+ memset(pNet->pAC, 0, sizeof(SK_AC));
+ pAC = pNet->pAC;
+#if 0
+ pAC->PciDev = pdev;
+ pAC->PciDevId = pdev->device;
+ pAC->dev[0] = dev;
+ pAC->dev[1] = dev;
+#else
+ pAC->PciDev = devno;
+ ret_dev[0] = pAC->dev[0] = dev;
+ ret_dev[1] = pAC->dev[1] = dev;
+#endif
+ sprintf(pAC->Name, "SysKonnect SK-98xx");
+ pAC->CheckQueue = SK_FALSE;
+
+ pNet->Mtu = 1500;
+ pNet->Up = 0;
+#if 0
+ dev->irq = pdev->irq;
+
+ dev->open = &SkGeOpen;
+ dev->stop = &SkGeClose;
+ dev->hard_start_xmit = &SkGeXmit;
+ dev->get_stats = &SkGeStats;
+ dev->set_multicast_list = &SkGeSetRxMode;
+ dev->set_mac_address = &SkGeSetMacAddr;
+ dev->do_ioctl = &SkGeIoctl;
+ dev->change_mtu = &SkGeChangeMtu;
+ dev->flags &= ~IFF_RUNNING;
+#endif
+
+#ifdef SK_ZEROCOPY
+ if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
+ /* Use only if yukon hardware */
+ /* SK and ZEROCOPY - fly baby... */
+ dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
+ }
+#endif
+
+#if 0
+ /*
+ * Dummy value.
+ */
+ dev->base_addr = 42;
+ pci_set_master(pdev);
+
+ pci_set_master(pdev);
+ base_address = pci_resource_start (pdev, 0);
+#else
+ pci_write_config_dword(devno,
+ PCI_COMMAND,
+ PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
+ pci_read_config_dword (devno, PCI_BASE_ADDRESS_0,
+ &base_address);
+#endif
+
+#ifdef SK_BIG_ENDIAN
+ /*
+ * On big endian machines, we use the adapter's aibility of
+ * reading the descriptors as big endian.
+ */
+ {
+ SK_U32 our2;
+ SkPciReadCfgDWord(pAC, PCI_OUR_REG_2, &our2);
+ our2 |= PCI_REV_DESC;
+ SkPciWriteCfgDWord(pAC, PCI_OUR_REG_2, our2);
+ }
+#endif
+
+ /*
+ * Remap the regs into kernel space.
+ */
+#if 0
+ pAC->IoBase = (char*)ioremap(base_address, 0x4000);
+#else
+ pAC->IoBase = (char*)pci_mem_to_phys(devno, base_address);
+#endif
+
+ if (!pAC->IoBase){
+ printk(KERN_ERR "%s: Unable to map I/O register, "
+ "SK 98xx No. %i will be disabled.\n",
+ dev->name, boards_found);
+ kfree(dev);
+ break;
+ }
+
+ pAC->Index = boards_found;
+ if (SkGeBoardInit(dev, pAC)) {
+ FreeResources(dev);
+ kfree(dev);
+ continue;
+ }
+
+#if 0
+ memcpy((caddr_t) &dev->dev_addr,
+ (caddr_t) &pAC->Addr.Net[0].CurrentMacAddress, 6);
+#else
+ memcpy((caddr_t) &dev->enetaddr,
+ (caddr_t) &pAC->Addr.Net[0].CurrentMacAddress, 6);
+#endif
+
+#if 0
+ /* First adapter... Create proc and print message */
+ if (!DeviceFound) {
+ DeviceFound = SK_TRUE;
+ SK_MEMCPY(&SK_Root_Dir_entry, BootString,
+ sizeof(SK_Root_Dir_entry) - 1);
+
+ /*Create proc (directory)*/
+ if(!proc_root_initialized) {
+ pSkRootDir = create_proc_entry(SK_Root_Dir_entry,
+ S_IFDIR | S_IWUSR | S_IRUGO | S_IXUGO, proc_net);
+ proc_root_initialized = 1;
+ }
+
+ pSkRootDir->owner = THIS_MODULE;
+ }
+
+
+ /* Create proc file */
+ pProcFile = create_proc_entry(dev->name,
+ S_IFREG | S_IXUSR | S_IWGRP | S_IROTH,
+ pSkRootDir);
+
+
+ pProcFile->read_proc = proc_read;
+ pProcFile->write_proc = NULL;
+ pProcFile->nlink = 1;
+ pProcFile->size = sizeof(dev->name + 1);
+ pProcFile->data = (void *)pProcFile;
+#endif
+
+ pNet->PortNr = 0;
+ pNet->NetNr = 0;
+
+#ifdef SK_ZEROCOPY
+ if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
+ /* SG and ZEROCOPY - fly baby... */
+ dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
+ }
+#endif
+
+ boards_found++;
+
+ /* More then one port found */
+ if ((pAC->GIni.GIMacsFound == 2 ) && (pAC->RlmtNets == 2)) {
+#if 0
+ if ((dev = init_etherdev(NULL, sizeof(DEV_NET))) == 0) {
+ printk(KERN_ERR "Unable to allocate etherdev "
+ "structure!\n");
+ break;
+ }
+#else
+ dev = malloc (sizeof *dev);
+ memset(dev, 0, sizeof(*dev));
+ dev->priv = malloc(sizeof(DEV_NET));
+#endif
+
+ pAC->dev[1] = dev;
+ pNet = dev->priv;
+ pNet->PortNr = 1;
+ pNet->NetNr = 1;
+ pNet->pAC = pAC;
+ pNet->Mtu = 1500;
+ pNet->Up = 0;
+
+#if 0
+ dev->open = &SkGeOpen;
+ dev->stop = &SkGeClose;
+ dev->hard_start_xmit = &SkGeXmit;
+ dev->get_stats = &SkGeStats;
+ dev->set_multicast_list = &SkGeSetRxMode;
+ dev->set_mac_address = &SkGeSetMacAddr;
+ dev->do_ioctl = &SkGeIoctl;
+ dev->change_mtu = &SkGeChangeMtu;
+ dev->flags &= ~IFF_RUNNING;
+#endif
+
+#ifdef SK_ZEROCOPY
+ if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
+ /* SG and ZEROCOPY - fly baby... */
+ dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
+ }
+#endif
+
+#if 0
+ pProcFile = create_proc_entry(dev->name,
+ S_IFREG | S_IXUSR | S_IWGRP | S_IROTH,
+ pSkRootDir);
+
+
+ pProcFile->read_proc = proc_read;
+ pProcFile->write_proc = NULL;
+ pProcFile->nlink = 1;
+ pProcFile->size = sizeof(dev->name + 1);
+ pProcFile->data = (void *)pProcFile;
+#endif
+
+#if 0
+ memcpy((caddr_t) &dev->dev_addr,
+ (caddr_t) &pAC->Addr.Net[1].CurrentMacAddress, 6);
+#else
+ memcpy((caddr_t) &dev->enetaddr,
+ (caddr_t) &pAC->Addr.Net[1].CurrentMacAddress, 6);
+#endif
+
+ printk("%s: %s\n", dev->name, pAC->DeviceStr);
+ printk(" PrefPort:B RlmtMode:Dual Check Link State\n");
+
+ }
+
+
+ /* Save the hardware revision */
+ pAC->HWRevision = (((pAC->GIni.GIPciHwRev >> 4) & 0x0F)*10) +
+ (pAC->GIni.GIPciHwRev & 0x0F);
+
+ /*
+ * This is bollocks, but we need to tell the net-init
+ * code that it shall go for the next device.
+ */
+#if 0
+#ifndef MODULE
+ dev->base_addr = 0;
+#endif
+#endif
+ }
+
+ /*
+ * If we're at this point we're going through skge_probe() for
+ * the first time. Return success (0) if we've initialized 1
+ * or more boards. Otherwise, return failure (-ENODEV).
+ */
+
+ return boards_found;
+} /* skge_probe */
+
+
+/*****************************************************************************
+ *
+ * FreeResources - release resources allocated for adapter
+ *
+ * Description:
+ * This function releases the IRQ, unmaps the IO and
+ * frees the desriptor ring.
+ *
+ * Returns: N/A
+ *
+ */
+static void FreeResources(struct SK_NET_DEVICE *dev)
+{
+SK_U32 AllocFlag;
+DEV_NET *pNet;
+SK_AC *pAC;
+
+ if (dev->priv) {
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+ AllocFlag = pAC->AllocFlag;
+#if 0
+ if (AllocFlag & SK_ALLOC_IRQ) {
+ free_irq(dev->irq, dev);
+ }
+ if (pAC->IoBase) {
+ iounmap(pAC->IoBase);
+ }
+#endif
+ if (pAC->pDescrMem) {
+ BoardFreeMem(pAC);
+ }
+ }
+
+} /* FreeResources */
+
+#if 0
+MODULE_AUTHOR("Mirko Lindner <mlindner@syskonnect.de>");
+MODULE_DESCRIPTION("SysKonnect SK-NET Gigabit Ethernet SK-98xx driver");
+MODULE_LICENSE("GPL");
+MODULE_PARM(Speed_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(Speed_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(AutoNeg_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(AutoNeg_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(DupCap_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(DupCap_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(FlowCtrl_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(FlowCtrl_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(Role_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(Role_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(PrefPort, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+MODULE_PARM(RlmtMode, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");
+/* not used, just there because every driver should have them: */
+MODULE_PARM(options, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "i");
+MODULE_PARM(debug, "i");
+#endif
+
+
+#ifdef LINK_SPEED_A
+static char *Speed_A[SK_MAX_CARD_PARAM] = LINK_SPEED_A;
+#else
+static char *Speed_A[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef LINK_SPEED_B
+static char *Speed_B[SK_MAX_CARD_PARAM] = LINK_SPEED_B;
+#else
+static char *Speed_B[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef AUTO_NEG_A
+static char *AutoNeg_A[SK_MAX_CARD_PARAM] = AUTO_NEG_A;
+#else
+static char *AutoNeg_A[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef DUP_CAP_A
+static char *DupCap_A[SK_MAX_CARD_PARAM] = DUP_CAP_A;
+#else
+static char *DupCap_A[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef FLOW_CTRL_A
+static char *FlowCtrl_A[SK_MAX_CARD_PARAM] = FLOW_CTRL_A;
+#else
+static char *FlowCtrl_A[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef ROLE_A
+static char *Role_A[SK_MAX_CARD_PARAM] = ROLE_A;
+#else
+static char *Role_A[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef AUTO_NEG_B
+static char *AutoNeg_B[SK_MAX_CARD_PARAM] = AUTO_NEG_B;
+#else
+static char *AutoNeg_B[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef DUP_CAP_B
+static char *DupCap_B[SK_MAX_CARD_PARAM] = DUP_CAP_B;
+#else
+static char *DupCap_B[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef FLOW_CTRL_B
+static char *FlowCtrl_B[SK_MAX_CARD_PARAM] = FLOW_CTRL_B;
+#else
+static char *FlowCtrl_B[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef ROLE_B
+static char *Role_B[SK_MAX_CARD_PARAM] = ROLE_B;
+#else
+static char *Role_B[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef PREF_PORT
+static char *PrefPort[SK_MAX_CARD_PARAM] = PREF_PORT;
+#else
+static char *PrefPort[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#ifdef RLMT_MODE
+static char *RlmtMode[SK_MAX_CARD_PARAM] = RLMT_MODE;
+#else
+static char *RlmtMode[SK_MAX_CARD_PARAM] = {"", };
+#endif
+
+#if 0
+static int debug = 0; /* not used */
+static int options[SK_MAX_CARD_PARAM] = {0, }; /* not used */
+
+
+/*****************************************************************************
+ *
+ * skge_init_module - module initialization function
+ *
+ * Description:
+ * Very simple, only call skge_probe and return approriate result.
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ */
+static int __init skge_init_module(void)
+{
+ int cards;
+ SkGeRootDev = NULL;
+
+ /* just to avoid warnings ... */
+ debug = 0;
+ options[0] = 0;
+
+ cards = skge_probe();
+ if (cards == 0) {
+ printk("sk98lin: No adapter found.\n");
+ }
+ return cards ? 0 : -ENODEV;
+} /* skge_init_module */
+
+
+/*****************************************************************************
+ *
+ * skge_cleanup_module - module unload function
+ *
+ * Description:
+ * Disable adapter if it is still running, free resources,
+ * free device struct.
+ *
+ * Returns: N/A
+ */
+static void __exit skge_cleanup_module(void)
+{
+DEV_NET *pNet;
+SK_AC *pAC;
+struct SK_NET_DEVICE *next;
+unsigned long Flags;
+SK_EVPARA EvPara;
+
+ while (SkGeRootDev) {
+ pNet = (DEV_NET*) SkGeRootDev->priv;
+ pAC = pNet->pAC;
+ next = pAC->Next;
+
+ netif_stop_queue(SkGeRootDev);
+ SkGeYellowLED(pAC, pAC->IoBase, 0);
+
+ if(pAC->BoardLevel == 2) {
+ /* board is still alive */
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ EvPara.Para32[0] = 0;
+ EvPara.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
+ EvPara.Para32[0] = 1;
+ EvPara.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
+ SkEventDispatcher(pAC, pAC->IoBase);
+ /* disable interrupts */
+ SK_OUT32(pAC->IoBase, B0_IMSK, 0);
+ SkGeDeInit(pAC, pAC->IoBase);
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ pAC->BoardLevel = 0;
+ /* We do NOT check here, if IRQ was pending, of course*/
+ }
+
+ if(pAC->BoardLevel == 1) {
+ /* board is still alive */
+ SkGeDeInit(pAC, pAC->IoBase);
+ pAC->BoardLevel = 0;
+ }
+
+ if ((pAC->GIni.GIMacsFound == 2) && pAC->RlmtNets == 2){
+ unregister_netdev(pAC->dev[1]);
+ kfree(pAC->dev[1]);
+ }
+
+ FreeResources(SkGeRootDev);
+
+ SkGeRootDev->get_stats = NULL;
+ /*
+ * otherwise unregister_netdev calls get_stats with
+ * invalid IO ... :-(
+ */
+ unregister_netdev(SkGeRootDev);
+ kfree(SkGeRootDev);
+ kfree(pAC);
+ SkGeRootDev = next;
+ }
+
+ /* clear proc-dir */
+ remove_proc_entry(pSkRootDir->name, proc_net);
+
+} /* skge_cleanup_module */
+
+module_init(skge_init_module);
+module_exit(skge_cleanup_module);
+#endif
+
+
+/*****************************************************************************
+ *
+ * SkGeBoardInit - do level 0 and 1 initialization
+ *
+ * Description:
+ * This function prepares the board hardware for running. The desriptor
+ * ring is set up, the IRQ is allocated and the configuration settings
+ * are examined.
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ */
+static int __init SkGeBoardInit(struct SK_NET_DEVICE *dev, SK_AC *pAC)
+{
+short i;
+unsigned long Flags;
+char *DescrString = "sk98lin: Driver for Linux"; /* this is given to PNMI */
+char *VerStr = VER_STRING;
+#if 0
+int Ret; /* return code of request_irq */
+#endif
+SK_BOOL DualNet;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("IoBase: %08lX\n", (unsigned long)pAC->IoBase));
+ for (i=0; i<SK_MAX_MACS; i++) {
+ pAC->TxPort[i][0].HwAddr = pAC->IoBase + TxQueueAddr[i][0];
+ pAC->TxPort[i][0].PortIndex = i;
+ pAC->RxPort[i].HwAddr = pAC->IoBase + RxQueueAddr[i];
+ pAC->RxPort[i].PortIndex = i;
+ }
+
+ /* Initialize the mutexes */
+ for (i=0; i<SK_MAX_MACS; i++) {
+ spin_lock_init(&pAC->TxPort[i][0].TxDesRingLock);
+ spin_lock_init(&pAC->RxPort[i].RxDesRingLock);
+ }
+ spin_lock_init(&pAC->SlowPathLock);
+
+ /* level 0 init common modules here */
+
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ /* Does a RESET on board ...*/
+ if (SkGeInit(pAC, pAC->IoBase, 0) != 0) {
+ printk("HWInit (0) failed.\n");
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ return(-EAGAIN);
+ }
+ SkI2cInit( pAC, pAC->IoBase, 0);
+ SkEventInit(pAC, pAC->IoBase, 0);
+ SkPnmiInit( pAC, pAC->IoBase, 0);
+ SkAddrInit( pAC, pAC->IoBase, 0);
+ SkRlmtInit( pAC, pAC->IoBase, 0);
+ SkTimerInit(pAC, pAC->IoBase, 0);
+
+ pAC->BoardLevel = 0;
+ pAC->RxBufSize = ETH_BUF_SIZE;
+
+ SK_PNMI_SET_DRIVER_DESCR(pAC, DescrString);
+ SK_PNMI_SET_DRIVER_VER(pAC, VerStr);
+
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+
+ /* level 1 init common modules here (HW init) */
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ if (SkGeInit(pAC, pAC->IoBase, 1) != 0) {
+ printk("HWInit (1) failed.\n");
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ return(-EAGAIN);
+ }
+ SkI2cInit( pAC, pAC->IoBase, 1);
+ SkEventInit(pAC, pAC->IoBase, 1);
+ SkPnmiInit( pAC, pAC->IoBase, 1);
+ SkAddrInit( pAC, pAC->IoBase, 1);
+ SkRlmtInit( pAC, pAC->IoBase, 1);
+ SkTimerInit(pAC, pAC->IoBase, 1);
+
+ GetConfiguration(pAC);
+ if (pAC->RlmtNets == 2) {
+ pAC->GIni.GIPortUsage = SK_MUL_LINK;
+ }
+
+ pAC->BoardLevel = 1;
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+
+#if 0
+ if (pAC->GIni.GIMacsFound == 2) {
+ Ret = request_irq(dev->irq, SkGeIsr, SA_SHIRQ, pAC->Name, dev);
+ } else if (pAC->GIni.GIMacsFound == 1) {
+ Ret = request_irq(dev->irq, SkGeIsrOnePort, SA_SHIRQ,
+ pAC->Name, dev);
+ } else {
+ printk(KERN_WARNING "%s: Illegal number of ports: %d\n",
+ dev->name, pAC->GIni.GIMacsFound);
+ return -EAGAIN;
+ }
+
+ if (Ret) {
+ printk(KERN_WARNING "%s: Requested IRQ %d is busy.\n",
+ dev->name, dev->irq);
+ return -EAGAIN;
+ }
+#endif
+ pAC->AllocFlag |= SK_ALLOC_IRQ;
+
+ /* Alloc memory for this board (Mem for RxD/TxD) : */
+ if(!BoardAllocMem(pAC)) {
+ printk("No memory for descriptor rings.\n");
+ return(-EAGAIN);
+ }
+
+ SkCsSetReceiveFlags(pAC,
+ SKCS_PROTO_IP | SKCS_PROTO_TCP | SKCS_PROTO_UDP,
+ &pAC->CsOfs1, &pAC->CsOfs2, 0);
+ pAC->CsOfs = (pAC->CsOfs2 << 16) | pAC->CsOfs1;
+
+ BoardInitMem(pAC);
+#if 0
+ SetQueueSizes(pAC);
+#else
+ /* tschilling: New common function with minimum size check. */
+ DualNet = SK_FALSE;
+ if (pAC->RlmtNets == 2) {
+ DualNet = SK_TRUE;
+ }
+
+ if (SkGeInitAssignRamToQueues(
+ pAC,
+ pAC->ActivePort,
+ DualNet)) {
+ BoardFreeMem(pAC);
+ printk("SkGeInitAssignRamToQueues failed.\n");
+ return(-EAGAIN);
+ }
+#endif
+
+ /* Print adapter specific string from vpd */
+ ProductStr(pAC);
+#ifdef SK98_INFO
+ printk("%s: %s\n", dev->name, pAC->DeviceStr);
+
+ /* Print configuration settings */
+ printk(" PrefPort:%c RlmtMode:%s\n",
+ 'A' + pAC->Rlmt.Net[0].Port[pAC->Rlmt.Net[0].PrefPort]->PortNumber,
+ (pAC->RlmtMode==0) ? "Check Link State" :
+ ((pAC->RlmtMode==1) ? "Check Link State" :
+ ((pAC->RlmtMode==3) ? "Check Local Port" :
+ ((pAC->RlmtMode==7) ? "Check Segmentation" :
+ ((pAC->RlmtMode==17) ? "Dual Check Link State" :"Error")))));
+#endif
+
+ SkGeYellowLED(pAC, pAC->IoBase, 1);
+
+ /*
+ * Register the device here
+ */
+ pAC->Next = SkGeRootDev;
+ SkGeRootDev = dev;
+
+ return (0);
+} /* SkGeBoardInit */
+
+
+/*****************************************************************************
+ *
+ * BoardAllocMem - allocate the memory for the descriptor rings
+ *
+ * Description:
+ * This function allocates the memory for all descriptor rings.
+ * Each ring is aligned for the desriptor alignment and no ring
+ * has a 4 GByte boundary in it (because the upper 32 bit must
+ * be constant for all descriptiors in one rings).
+ *
+ * Returns:
+ * SK_TRUE, if all memory could be allocated
+ * SK_FALSE, if not
+ */
+static SK_BOOL BoardAllocMem(
+SK_AC *pAC)
+{
+caddr_t pDescrMem; /* pointer to descriptor memory area */
+size_t AllocLength; /* length of complete descriptor area */
+int i; /* loop counter */
+unsigned long BusAddr;
+
+
+ /* rings plus one for alignment (do not cross 4 GB boundary) */
+ /* RX_RING_SIZE is assumed bigger than TX_RING_SIZE */
+#if (BITS_PER_LONG == 32)
+ AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound + 8;
+#else
+ AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound
+ + RX_RING_SIZE + 8;
+#endif
+
+ pDescrMem = pci_alloc_consistent(pAC->PciDev, AllocLength,
+ &pAC->pDescrMemDMA);
+
+ if (pDescrMem == NULL) {
+ return (SK_FALSE);
+ }
+ pAC->pDescrMem = pDescrMem;
+ BusAddr = (unsigned long) pAC->pDescrMemDMA;
+
+ /* Descriptors need 8 byte alignment, and this is ensured
+ * by pci_alloc_consistent.
+ */
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
+ ("TX%d/A: pDescrMem: %lX, PhysDescrMem: %lX\n",
+ i, (unsigned long) pDescrMem,
+ BusAddr));
+ pAC->TxPort[i][0].pTxDescrRing = pDescrMem;
+ pAC->TxPort[i][0].VTxDescrRing = BusAddr;
+ pDescrMem += TX_RING_SIZE;
+ BusAddr += TX_RING_SIZE;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
+ ("RX%d: pDescrMem: %lX, PhysDescrMem: %lX\n",
+ i, (unsigned long) pDescrMem,
+ (unsigned long)BusAddr));
+ pAC->RxPort[i].pRxDescrRing = pDescrMem;
+ pAC->RxPort[i].VRxDescrRing = BusAddr;
+ pDescrMem += RX_RING_SIZE;
+ BusAddr += RX_RING_SIZE;
+ } /* for */
+
+ return (SK_TRUE);
+} /* BoardAllocMem */
+
+
+/****************************************************************************
+ *
+ * BoardFreeMem - reverse of BoardAllocMem
+ *
+ * Description:
+ * Free all memory allocated in BoardAllocMem: adapter context,
+ * descriptor rings, locks.
+ *
+ * Returns: N/A
+ */
+static void BoardFreeMem(
+SK_AC *pAC)
+{
+size_t AllocLength; /* length of complete descriptor area */
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("BoardFreeMem\n"));
+#if (BITS_PER_LONG == 32)
+ AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound + 8;
+#else
+ AllocLength = (RX_RING_SIZE + TX_RING_SIZE) * pAC->GIni.GIMacsFound
+ + RX_RING_SIZE + 8;
+#endif
+
+ pci_free_consistent(pAC->PciDev, AllocLength,
+ pAC->pDescrMem, pAC->pDescrMemDMA);
+ pAC->pDescrMem = NULL;
+} /* BoardFreeMem */
+
+
+/*****************************************************************************
+ *
+ * BoardInitMem - initiate the descriptor rings
+ *
+ * Description:
+ * This function sets the descriptor rings up in memory.
+ * The adapter is initialized with the descriptor start addresses.
+ *
+ * Returns: N/A
+ */
+static void BoardInitMem(
+SK_AC *pAC) /* pointer to adapter context */
+{
+int i; /* loop counter */
+int RxDescrSize; /* the size of a rx descriptor rounded up to alignment*/
+int TxDescrSize; /* the size of a tx descriptor rounded up to alignment*/
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("BoardInitMem\n"));
+
+ RxDescrSize = (((sizeof(RXD) - 1) / DESCR_ALIGN) + 1) * DESCR_ALIGN;
+ pAC->RxDescrPerRing = RX_RING_SIZE / RxDescrSize;
+ TxDescrSize = (((sizeof(TXD) - 1) / DESCR_ALIGN) + 1) * DESCR_ALIGN;
+ pAC->TxDescrPerRing = TX_RING_SIZE / RxDescrSize;
+
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ SetupRing(
+ pAC,
+ pAC->TxPort[i][0].pTxDescrRing,
+ pAC->TxPort[i][0].VTxDescrRing,
+ (RXD**)&pAC->TxPort[i][0].pTxdRingHead,
+ (RXD**)&pAC->TxPort[i][0].pTxdRingTail,
+ (RXD**)&pAC->TxPort[i][0].pTxdRingPrev,
+ &pAC->TxPort[i][0].TxdRingFree,
+ SK_TRUE);
+ SetupRing(
+ pAC,
+ pAC->RxPort[i].pRxDescrRing,
+ pAC->RxPort[i].VRxDescrRing,
+ &pAC->RxPort[i].pRxdRingHead,
+ &pAC->RxPort[i].pRxdRingTail,
+ &pAC->RxPort[i].pRxdRingPrev,
+ &pAC->RxPort[i].RxdRingFree,
+ SK_FALSE);
+ }
+} /* BoardInitMem */
+
+
+/*****************************************************************************
+ *
+ * SetupRing - create one descriptor ring
+ *
+ * Description:
+ * This function creates one descriptor ring in the given memory area.
+ * The head, tail and number of free descriptors in the ring are set.
+ *
+ * Returns:
+ * none
+ */
+static void SetupRing(
+SK_AC *pAC,
+void *pMemArea, /* a pointer to the memory area for the ring */
+uintptr_t VMemArea, /* the virtual bus address of the memory area */
+RXD **ppRingHead, /* address where the head should be written */
+RXD **ppRingTail, /* address where the tail should be written */
+RXD **ppRingPrev, /* address where the tail should be written */
+int *pRingFree, /* address where the # of free descr. goes */
+SK_BOOL IsTx) /* flag: is this a tx ring */
+{
+int i; /* loop counter */
+int DescrSize; /* the size of a descriptor rounded up to alignment*/
+int DescrNum; /* number of descriptors per ring */
+RXD *pDescr; /* pointer to a descriptor (receive or transmit) */
+RXD *pNextDescr; /* pointer to the next descriptor */
+RXD *pPrevDescr; /* pointer to the previous descriptor */
+uintptr_t VNextDescr; /* the virtual bus address of the next descriptor */
+
+ if (IsTx == SK_TRUE) {
+ DescrSize = (((sizeof(TXD) - 1) / DESCR_ALIGN) + 1) *
+ DESCR_ALIGN;
+ DescrNum = TX_RING_SIZE / DescrSize;
+ } else {
+ DescrSize = (((sizeof(RXD) - 1) / DESCR_ALIGN) + 1) *
+ DESCR_ALIGN;
+ DescrNum = RX_RING_SIZE / DescrSize;
+ }
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
+ ("Descriptor size: %d Descriptor Number: %d\n",
+ DescrSize,DescrNum));
+
+ pDescr = (RXD*) pMemArea;
+ pPrevDescr = NULL;
+ pNextDescr = (RXD*) (((char*)pDescr) + DescrSize);
+ VNextDescr = VMemArea + DescrSize;
+ for(i=0; i<DescrNum; i++) {
+ /* set the pointers right */
+ pDescr->VNextRxd = VNextDescr & 0xffffffffULL;
+ pDescr->pNextRxd = pNextDescr;
+ pDescr->TcpSumStarts = pAC->CsOfs;
+
+ /* advance one step */
+ pPrevDescr = pDescr;
+ pDescr = pNextDescr;
+ pNextDescr = (RXD*) (((char*)pDescr) + DescrSize);
+ VNextDescr += DescrSize;
+ }
+ pPrevDescr->pNextRxd = (RXD*) pMemArea;
+ pPrevDescr->VNextRxd = VMemArea;
+ pDescr = (RXD*) pMemArea;
+ *ppRingHead = (RXD*) pMemArea;
+ *ppRingTail = *ppRingHead;
+ *ppRingPrev = pPrevDescr;
+ *pRingFree = DescrNum;
+} /* SetupRing */
+
+
+/*****************************************************************************
+ *
+ * PortReInitBmu - re-initiate the descriptor rings for one port
+ *
+ * Description:
+ * This function reinitializes the descriptor rings of one port
+ * in memory. The port must be stopped before.
+ * The HW is initialized with the descriptor start addresses.
+ *
+ * Returns:
+ * none
+ */
+static void PortReInitBmu(
+SK_AC *pAC, /* pointer to adapter context */
+int PortIndex) /* index of the port for which to re-init */
+{
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("PortReInitBmu "));
+
+ /* set address of first descriptor of ring in BMU */
+ SK_OUT32(pAC->IoBase, TxQueueAddr[PortIndex][TX_PRIO_LOW]+
+ TX_Q_CUR_DESCR_LOW,
+ (uint32_t)(((caddr_t)
+ (pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxdRingHead) -
+ pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxDescrRing +
+ pAC->TxPort[PortIndex][TX_PRIO_LOW].VTxDescrRing) &
+ 0xFFFFFFFF));
+ SK_OUT32(pAC->IoBase, TxQueueAddr[PortIndex][TX_PRIO_LOW]+
+ TX_Q_DESCR_HIGH,
+ (uint32_t)(((caddr_t)
+ (pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxdRingHead) -
+ pAC->TxPort[PortIndex][TX_PRIO_LOW].pTxDescrRing +
+ pAC->TxPort[PortIndex][TX_PRIO_LOW].VTxDescrRing) >> 32));
+ SK_OUT32(pAC->IoBase, RxQueueAddr[PortIndex]+RX_Q_CUR_DESCR_LOW,
+ (uint32_t)(((caddr_t)(pAC->RxPort[PortIndex].pRxdRingHead) -
+ pAC->RxPort[PortIndex].pRxDescrRing +
+ pAC->RxPort[PortIndex].VRxDescrRing) & 0xFFFFFFFF));
+ SK_OUT32(pAC->IoBase, RxQueueAddr[PortIndex]+RX_Q_DESCR_HIGH,
+ (uint32_t)(((caddr_t)(pAC->RxPort[PortIndex].pRxdRingHead) -
+ pAC->RxPort[PortIndex].pRxDescrRing +
+ pAC->RxPort[PortIndex].VRxDescrRing) >> 32));
+} /* PortReInitBmu */
+
+
+/****************************************************************************
+ *
+ * SkGeIsr - handle adapter interrupts
+ *
+ * Description:
+ * The interrupt routine is called when the network adapter
+ * generates an interrupt. It may also be called if another device
+ * shares this interrupt vector with the driver.
+ *
+ * Returns: N/A
+ *
+ */
+#if 0
+static void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs)
+#else
+void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs)
+#endif
+{
+struct SK_NET_DEVICE *dev = (struct SK_NET_DEVICE *)dev_id;
+DEV_NET *pNet;
+SK_AC *pAC;
+SK_U32 IntSrc; /* interrupts source register contents */
+
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+
+ /*
+ * Check and process if its our interrupt
+ */
+ SK_IN32(pAC->IoBase, B0_SP_ISRC, &IntSrc);
+ if (IntSrc == 0) {
+ return;
+ }
+
+ while (((IntSrc & IRQ_MASK) & ~SPECIAL_IRQS) != 0) {
+#if 0 /* software irq currently not used */
+ if (IntSrc & IRQ_SW) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("Software IRQ\n"));
+ }
+#endif
+ if (IntSrc & IRQ_EOF_RX1) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF RX1 IRQ\n"));
+ ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
+ SK_PNMI_CNT_RX_INTR(pAC, 0);
+ }
+ if (IntSrc & IRQ_EOF_RX2) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF RX2 IRQ\n"));
+ ReceiveIrq(pAC, &pAC->RxPort[1], SK_TRUE);
+ SK_PNMI_CNT_RX_INTR(pAC, 1);
+ }
+#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
+ if (IntSrc & IRQ_EOF_AS_TX1) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF AS TX1 IRQ\n"));
+ SK_PNMI_CNT_TX_INTR(pAC, 0);
+ spin_lock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
+ FreeTxDescriptors(pAC, &pAC->TxPort[0][TX_PRIO_LOW]);
+ spin_unlock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
+ }
+ if (IntSrc & IRQ_EOF_AS_TX2) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF AS TX2 IRQ\n"));
+ SK_PNMI_CNT_TX_INTR(pAC, 1);
+ spin_lock(&pAC->TxPort[1][TX_PRIO_LOW].TxDesRingLock);
+ FreeTxDescriptors(pAC, &pAC->TxPort[1][TX_PRIO_LOW]);
+ spin_unlock(&pAC->TxPort[1][TX_PRIO_LOW].TxDesRingLock);
+ }
+#if 0 /* only if sync. queues used */
+ if (IntSrc & IRQ_EOF_SY_TX1) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF SY TX1 IRQ\n"));
+ SK_PNMI_CNT_TX_INTR(pAC, 1);
+ spin_lock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
+ FreeTxDescriptors(pAC, 0, TX_PRIO_HIGH);
+ spin_unlock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
+ ClearTxIrq(pAC, 0, TX_PRIO_HIGH);
+ }
+ if (IntSrc & IRQ_EOF_SY_TX2) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF SY TX2 IRQ\n"));
+ SK_PNMI_CNT_TX_INTR(pAC, 1);
+ spin_lock(&pAC->TxPort[1][TX_PRIO_HIGH].TxDesRingLock);
+ FreeTxDescriptors(pAC, 1, TX_PRIO_HIGH);
+ spin_unlock(&pAC->TxPort[1][TX_PRIO_HIGH].TxDesRingLock);
+ ClearTxIrq(pAC, 1, TX_PRIO_HIGH);
+ }
+#endif
+#endif
+
+ /* do all IO at once */
+ if (IntSrc & IRQ_EOF_RX1)
+ ClearAndStartRx(pAC, 0);
+ if (IntSrc & IRQ_EOF_RX2)
+ ClearAndStartRx(pAC, 1);
+#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
+ if (IntSrc & IRQ_EOF_AS_TX1)
+ ClearTxIrq(pAC, 0, TX_PRIO_LOW);
+ if (IntSrc & IRQ_EOF_AS_TX2)
+ ClearTxIrq(pAC, 1, TX_PRIO_LOW);
+#endif
+ SK_IN32(pAC->IoBase, B0_ISRC, &IntSrc);
+ } /* while (IntSrc & IRQ_MASK != 0) */
+
+ if ((IntSrc & SPECIAL_IRQS) || pAC->CheckQueue) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_INT_SRC,
+ ("SPECIAL IRQ DP-Cards => %x\n", IntSrc));
+ pAC->CheckQueue = SK_FALSE;
+ spin_lock(&pAC->SlowPathLock);
+ if (IntSrc & SPECIAL_IRQS)
+ SkGeSirqIsr(pAC, pAC->IoBase, IntSrc);
+
+ SkEventDispatcher(pAC, pAC->IoBase);
+ spin_unlock(&pAC->SlowPathLock);
+ }
+ /*
+ * do it all again is case we cleared an interrupt that
+ * came in after handling the ring (OUTs may be delayed
+ * in hardware buffers, but are through after IN)
+ */
+
+ ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
+ ReceiveIrq(pAC, &pAC->RxPort[1], SK_TRUE);
+
+ if (pAC->CheckQueue) {
+ pAC->CheckQueue = SK_FALSE;
+ spin_lock(&pAC->SlowPathLock);
+ SkEventDispatcher(pAC, pAC->IoBase);
+ spin_unlock(&pAC->SlowPathLock);
+ }
+
+
+ /* IRQ is processed - Enable IRQs again*/
+ SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
+
+ return;
+} /* SkGeIsr */
+
+
+/****************************************************************************
+ *
+ * SkGeIsrOnePort - handle adapter interrupts for single port adapter
+ *
+ * Description:
+ * The interrupt routine is called when the network adapter
+ * generates an interrupt. It may also be called if another device
+ * shares this interrupt vector with the driver.
+ * This is the same as above, but handles only one port.
+ *
+ * Returns: N/A
+ *
+ */
+#if 0
+static void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs)
+#else
+void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs)
+#endif
+{
+struct SK_NET_DEVICE *dev = (struct SK_NET_DEVICE *)dev_id;
+DEV_NET *pNet;
+SK_AC *pAC;
+SK_U32 IntSrc; /* interrupts source register contents */
+
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+
+ /*
+ * Check and process if its our interrupt
+ */
+ SK_IN32(pAC->IoBase, B0_SP_ISRC, &IntSrc);
+ if (IntSrc == 0) {
+ return;
+ }
+
+ while (((IntSrc & IRQ_MASK) & ~SPECIAL_IRQS) != 0) {
+#if 0 /* software irq currently not used */
+ if (IntSrc & IRQ_SW) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("Software IRQ\n"));
+ }
+#endif
+ if (IntSrc & IRQ_EOF_RX1) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF RX1 IRQ\n"));
+ ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
+ SK_PNMI_CNT_RX_INTR(pAC, 0);
+ }
+#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
+ if (IntSrc & IRQ_EOF_AS_TX1) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF AS TX1 IRQ\n"));
+ SK_PNMI_CNT_TX_INTR(pAC, 0);
+ spin_lock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
+ FreeTxDescriptors(pAC, &pAC->TxPort[0][TX_PRIO_LOW]);
+ spin_unlock(&pAC->TxPort[0][TX_PRIO_LOW].TxDesRingLock);
+ }
+#if 0 /* only if sync. queues used */
+ if (IntSrc & IRQ_EOF_SY_TX1) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_INT_SRC,
+ ("EOF SY TX1 IRQ\n"));
+ SK_PNMI_CNT_TX_INTR(pAC, 0);
+ spin_lock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
+ FreeTxDescriptors(pAC, 0, TX_PRIO_HIGH);
+ spin_unlock(&pAC->TxPort[0][TX_PRIO_HIGH].TxDesRingLock);
+ ClearTxIrq(pAC, 0, TX_PRIO_HIGH);
+ }
+#endif
+#endif
+
+ /* do all IO at once */
+ if (IntSrc & IRQ_EOF_RX1)
+ ClearAndStartRx(pAC, 0);
+#ifdef USE_TX_COMPLETE /* only if tx complete interrupt used */
+ if (IntSrc & IRQ_EOF_AS_TX1)
+ ClearTxIrq(pAC, 0, TX_PRIO_LOW);
+#endif
+ SK_IN32(pAC->IoBase, B0_ISRC, &IntSrc);
+ } /* while (IntSrc & IRQ_MASK != 0) */
+
+ if ((IntSrc & SPECIAL_IRQS) || pAC->CheckQueue) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_INT_SRC,
+ ("SPECIAL IRQ SP-Cards => %x\n", IntSrc));
+ pAC->CheckQueue = SK_FALSE;
+ spin_lock(&pAC->SlowPathLock);
+ if (IntSrc & SPECIAL_IRQS)
+ SkGeSirqIsr(pAC, pAC->IoBase, IntSrc);
+
+ SkEventDispatcher(pAC, pAC->IoBase);
+ spin_unlock(&pAC->SlowPathLock);
+ }
+ /*
+ * do it all again is case we cleared an interrupt that
+ * came in after handling the ring (OUTs may be delayed
+ * in hardware buffers, but are through after IN)
+ */
+ ReceiveIrq(pAC, &pAC->RxPort[0], SK_TRUE);
+
+ /* IRQ is processed - Enable IRQs again*/
+ SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
+
+ return;
+} /* SkGeIsrOnePort */
+
+
+/****************************************************************************
+ *
+ * SkGeOpen - handle start of initialized adapter
+ *
+ * Description:
+ * This function starts the initialized adapter.
+ * The board level variable is set and the adapter is
+ * brought to full functionality.
+ * The device flags are set for operation.
+ * Do all necessary level 2 initialization, enable interrupts and
+ * give start command to RLMT.
+ *
+ * Returns:
+ * 0 on success
+ * != 0 on error
+ */
+#if 0
+static int SkGeOpen(
+#else
+int SkGeOpen(
+#endif
+struct SK_NET_DEVICE *dev)
+{
+ DEV_NET *pNet;
+ SK_AC *pAC;
+ unsigned long Flags; /* for spin lock */
+ int i;
+ SK_EVPARA EvPara; /* an event parameter union */
+
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeOpen: pAC=0x%lX:\n", (unsigned long)pAC));
+
+ if (pAC->BoardLevel == 0) {
+ /* level 1 init common modules here */
+ if (SkGeInit(pAC, pAC->IoBase, 1) != 0) {
+ printk("%s: HWInit (1) failed.\n", pAC->dev[pNet->PortNr]->name);
+ return (-1);
+ }
+ SkI2cInit (pAC, pAC->IoBase, 1);
+ SkEventInit (pAC, pAC->IoBase, 1);
+ SkPnmiInit (pAC, pAC->IoBase, 1);
+ SkAddrInit (pAC, pAC->IoBase, 1);
+ SkRlmtInit (pAC, pAC->IoBase, 1);
+ SkTimerInit (pAC, pAC->IoBase, 1);
+ pAC->BoardLevel = 1;
+ }
+
+ if (pAC->BoardLevel != 2) {
+ /* tschilling: Level 2 init modules here, check return value. */
+ if (SkGeInit(pAC, pAC->IoBase, 2) != 0) {
+ printk("%s: HWInit (2) failed.\n", pAC->dev[pNet->PortNr]->name);
+ return (-1);
+ }
+ SkI2cInit (pAC, pAC->IoBase, 2);
+ SkEventInit (pAC, pAC->IoBase, 2);
+ SkPnmiInit (pAC, pAC->IoBase, 2);
+ SkAddrInit (pAC, pAC->IoBase, 2);
+ SkRlmtInit (pAC, pAC->IoBase, 2);
+ SkTimerInit (pAC, pAC->IoBase, 2);
+ pAC->BoardLevel = 2;
+ }
+
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ /* Enable transmit descriptor polling. */
+ SkGePollTxD(pAC, pAC->IoBase, i, SK_TRUE);
+ FillRxRing(pAC, &pAC->RxPort[i]);
+ }
+ SkGeYellowLED(pAC, pAC->IoBase, 1);
+
+#ifdef USE_INT_MOD
+/* moderate only TX complete interrupts (these are not time critical) */
+#define IRQ_MOD_MASK (IRQ_EOF_AS_TX1 | IRQ_EOF_AS_TX2)
+ {
+ unsigned long ModBase;
+ ModBase = 53125000 / INTS_PER_SEC;
+ SK_OUT32(pAC->IoBase, B2_IRQM_INI, ModBase);
+ SK_OUT32(pAC->IoBase, B2_IRQM_MSK, IRQ_MOD_MASK);
+ SK_OUT32(pAC->IoBase, B2_IRQM_CTRL, TIM_START);
+ }
+#endif
+
+ /* enable Interrupts */
+ SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
+ SK_OUT32(pAC->IoBase, B0_HWE_IMSK, IRQ_HWE_MASK);
+
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+
+ if ((pAC->RlmtMode != 0) && (pAC->MaxPorts == 0)) {
+ EvPara.Para32[0] = pAC->RlmtNets;
+ EvPara.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_SET_NETS,
+ EvPara);
+ EvPara.Para32[0] = pAC->RlmtMode;
+ EvPara.Para32[1] = 0;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_MODE_CHANGE,
+ EvPara);
+ }
+
+ EvPara.Para32[0] = pNet->NetNr;
+ EvPara.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
+ SkEventDispatcher(pAC, pAC->IoBase);
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+
+ pAC->MaxPorts++;
+ pNet->Up = 1;
+
+ MOD_INC_USE_COUNT;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeOpen suceeded\n"));
+
+ return (0);
+} /* SkGeOpen */
+
+
+/****************************************************************************
+ *
+ * SkGeClose - Stop initialized adapter
+ *
+ * Description:
+ * Close initialized adapter.
+ *
+ * Returns:
+ * 0 - on success
+ * error code - on error
+ */
+#if 0
+static int SkGeClose(
+#else
+int SkGeClose(
+#endif
+struct SK_NET_DEVICE *dev)
+{
+ DEV_NET *pNet;
+ SK_AC *pAC;
+
+ unsigned long Flags; /* for spin lock */
+ int i;
+ int PortIdx;
+ SK_EVPARA EvPara;
+
+ netif_stop_queue(dev);
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+
+ if (pAC->RlmtNets == 1)
+ PortIdx = pAC->ActivePort;
+ else
+ PortIdx = pNet->NetNr;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeClose: pAC=0x%lX ", (unsigned long)pAC));
+
+ /*
+ * Clear multicast table, promiscuous mode ....
+ */
+ SkAddrMcClear(pAC, pAC->IoBase, PortIdx, 0);
+ SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
+ SK_PROM_MODE_NONE);
+
+ if (pAC->MaxPorts == 1) {
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ /* disable interrupts */
+ SK_OUT32(pAC->IoBase, B0_IMSK, 0);
+ EvPara.Para32[0] = pNet->NetNr;
+ EvPara.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
+ SkEventDispatcher(pAC, pAC->IoBase);
+ SK_OUT32(pAC->IoBase, B0_IMSK, 0);
+ /* stop the hardware */
+ SkGeDeInit(pAC, pAC->IoBase);
+ pAC->BoardLevel = 0;
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ } else {
+
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ EvPara.Para32[0] = pNet->NetNr;
+ EvPara.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
+ SkEventDispatcher(pAC, pAC->IoBase);
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+
+ /* Stop port */
+ spin_lock_irqsave(&pAC->TxPort[pNet->PortNr]
+ [TX_PRIO_LOW].TxDesRingLock, Flags);
+ SkGeStopPort(pAC, pAC->IoBase, pNet->PortNr,
+ SK_STOP_ALL, SK_HARD_RST);
+ spin_unlock_irqrestore(&pAC->TxPort[pNet->PortNr]
+ [TX_PRIO_LOW].TxDesRingLock, Flags);
+ }
+
+ if (pAC->RlmtNets == 1) {
+ /* clear all descriptor rings */
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ ReceiveIrq(pAC, &pAC->RxPort[i], SK_TRUE);
+ ClearRxRing(pAC, &pAC->RxPort[i]);
+ ClearTxRing(pAC, &pAC->TxPort[i][TX_PRIO_LOW]);
+ }
+ } else {
+ /* clear port descriptor rings */
+ ReceiveIrq(pAC, &pAC->RxPort[pNet->PortNr], SK_TRUE);
+ ClearRxRing(pAC, &pAC->RxPort[pNet->PortNr]);
+ ClearTxRing(pAC, &pAC->TxPort[pNet->PortNr][TX_PRIO_LOW]);
+ }
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeClose: done "));
+
+ pAC->MaxPorts--;
+ pNet->Up = 0;
+ MOD_DEC_USE_COUNT;
+
+ return (0);
+} /* SkGeClose */
+
+
+/*****************************************************************************
+ *
+ * SkGeXmit - Linux frame transmit function
+ *
+ * Description:
+ * The system calls this function to send frames onto the wire.
+ * It puts the frame in the tx descriptor ring. If the ring is
+ * full then, the 'tbusy' flag is set.
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ * WARNING: returning 1 in 'tbusy' case caused system crashes (double
+ * allocated skb's) !!!
+ */
+#if 0
+static int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev)
+#else
+int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev)
+#endif
+{
+DEV_NET *pNet;
+SK_AC *pAC;
+int Rc; /* return code of XmitFrame */
+
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+
+#if 0
+ if ((!skb_shinfo(skb)->nr_frags) ||
+#else
+ if (1 ||
+#endif
+ (pAC->GIni.GIChipId == CHIP_ID_GENESIS)) {
+ /* Don't activate scatter-gather and hardware checksum */
+
+ if (pAC->RlmtNets == 2)
+ Rc = XmitFrame(
+ pAC,
+ &pAC->TxPort[pNet->PortNr][TX_PRIO_LOW],
+ skb);
+ else
+ Rc = XmitFrame(
+ pAC,
+ &pAC->TxPort[pAC->ActivePort][TX_PRIO_LOW],
+ skb);
+ } else {
+#if 0
+ /* scatter-gather and hardware TCP checksumming anabled*/
+ if (pAC->RlmtNets == 2)
+ Rc = XmitFrameSG(
+ pAC,
+ &pAC->TxPort[pNet->PortNr][TX_PRIO_LOW],
+ skb);
+ else
+ Rc = XmitFrameSG(
+ pAC,
+ &pAC->TxPort[pAC->ActivePort][TX_PRIO_LOW],
+ skb);
+#endif
+ }
+
+ /* Transmitter out of resources? */
+ if (Rc <= 0) {
+ netif_stop_queue(dev);
+ }
+
+ /* If not taken, give buffer ownership back to the
+ * queueing layer.
+ */
+ if (Rc < 0)
+ return (1);
+
+#if 0
+ dev->trans_start = jiffies;
+#endif
+ return (0);
+} /* SkGeXmit */
+
+
+/*****************************************************************************
+ *
+ * XmitFrame - fill one socket buffer into the transmit ring
+ *
+ * Description:
+ * This function puts a message into the transmit descriptor ring
+ * if there is a descriptors left.
+ * Linux skb's consist of only one continuous buffer.
+ * The first step locks the ring. It is held locked
+ * all time to avoid problems with SWITCH_../PORT_RESET.
+ * Then the descriptoris allocated.
+ * The second part is linking the buffer to the descriptor.
+ * At the very last, the Control field of the descriptor
+ * is made valid for the BMU and a start TX command is given
+ * if necessary.
+ *
+ * Returns:
+ * > 0 - on succes: the number of bytes in the message
+ * = 0 - on resource shortage: this frame sent or dropped, now
+ * the ring is full ( -> set tbusy)
+ * < 0 - on failure: other problems ( -> return failure to upper layers)
+ */
+static int XmitFrame(
+SK_AC *pAC, /* pointer to adapter context */
+TX_PORT *pTxPort, /* pointer to struct of port to send to */
+struct sk_buff *pMessage) /* pointer to send-message */
+{
+TXD *pTxd; /* the rxd to fill */
+unsigned long Flags;
+SK_U64 PhysAddr;
+int BytesSend;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
+ ("X"));
+
+ spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);
+#ifndef USE_TX_COMPLETE
+ FreeTxDescriptors(pAC, pTxPort);
+#endif
+ if (pTxPort->TxdRingFree == 0) {
+ /* no enough free descriptors in ring at the moment */
+ FreeTxDescriptors(pAC, pTxPort);
+ if (pTxPort->TxdRingFree == 0) {
+ spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
+ SK_PNMI_CNT_NO_TX_BUF(pAC, pTxPort->PortIndex);
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_TX_PROGRESS,
+ ("XmitFrame failed\n"));
+ /* this message can not be sent now */
+ /* Because tbusy seems to be set, the message should not be freed here */
+ /* It will be used by the scheduler of the ethernet handler */
+ return (-1);
+ }
+ }
+ /* advance head counter behind descriptor needed for this frame */
+ pTxd = pTxPort->pTxdRingHead;
+ pTxPort->pTxdRingHead = pTxd->pNextTxd;
+ pTxPort->TxdRingFree--;
+ /* the needed descriptor is reserved now */
+
+ /*
+ * everything allocated ok, so add buffer to descriptor
+ */
+
+#ifdef SK_DUMP_TX
+ DumpMsg(pMessage, "XmitFrame");
+#endif
+
+ /* set up descriptor and CONTROL dword */
+#if 0
+ PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
+ virt_to_page(pMessage->data),
+ ((unsigned long) pMessage->data &
+ ~PAGE_MASK),
+ pMessage->len,
+ PCI_DMA_TODEVICE);
+#else
+ PhysAddr = (SK_U64) pci_phys_to_mem(pAC->PciDev, (u32) pMessage->data);
+#endif
+ pTxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
+ pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
+ pTxd->pMBuf = pMessage;
+ pTxd->TBControl = TX_CTRL_OWN_BMU | TX_CTRL_STF |
+ TX_CTRL_CHECK_DEFAULT | TX_CTRL_SOFTWARE |
+#ifdef USE_TX_COMPLETE
+ TX_CTRL_EOF | TX_CTRL_EOF_IRQ | pMessage->len;
+#else
+ TX_CTRL_EOF | pMessage->len;
+#endif
+
+ if ((pTxPort->pTxdRingPrev->TBControl & TX_CTRL_OWN_BMU) == 0) {
+ /* previous descriptor already done, so give tx start cmd */
+ /* StartTx(pAC, pTxPort->HwAddr); */
+ SK_OUT8(pTxPort->HwAddr, TX_Q_CTRL, TX_Q_CTRL_START);
+ }
+ pTxPort->pTxdRingPrev = pTxd;
+
+
+ BytesSend = pMessage->len;
+ spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
+ /* after releasing the lock, the skb may be immidiately freed */
+ if (pTxPort->TxdRingFree != 0)
+ return (BytesSend);
+ else
+ return (0);
+
+} /* XmitFrame */
+
+/*****************************************************************************
+ *
+ * XmitFrameSG - fill one socket buffer into the transmit ring
+ * (use SG and TCP/UDP hardware checksumming)
+ *
+ * Description:
+ * This function puts a message into the transmit descriptor ring
+ * if there is a descriptors left.
+ *
+ * Returns:
+ * > 0 - on succes: the number of bytes in the message
+ * = 0 - on resource shortage: this frame sent or dropped, now
+ * the ring is full ( -> set tbusy)
+ * < 0 - on failure: other problems ( -> return failure to upper layers)
+ */
+#if 0
+static int XmitFrameSG(
+SK_AC *pAC, /* pointer to adapter context */
+TX_PORT *pTxPort, /* pointer to struct of port to send to */
+struct sk_buff *pMessage) /* pointer to send-message */
+{
+
+ int i;
+ int BytesSend;
+ int hlength;
+ int protocol;
+ skb_frag_t *sk_frag;
+ TXD *pTxd;
+ TXD *pTxdFst;
+ TXD *pTxdLst;
+ SK_U64 PhysAddr;
+ unsigned long Flags;
+
+ spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);
+#ifndef USE_TX_COMPLETE
+ FreeTxDescriptors(pAC, pTxPort);
+#endif
+ if ((skb_shinfo(pMessage)->nr_frags +1) > pTxPort->TxdRingFree) {
+ FreeTxDescriptors(pAC, pTxPort);
+ if ((skb_shinfo(pMessage)->nr_frags + 1) > pTxPort->TxdRingFree) {
+ spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
+ SK_PNMI_CNT_NO_TX_BUF(pAC, pTxPort->PortIndex);
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_TX_PROGRESS,
+ ("XmitFrameSG failed - Ring full\n"));
+ /* this message can not be sent now */
+ return(-1);
+ }
+ }
+
+
+ pTxd = pTxPort->pTxdRingHead;
+ pTxdFst = pTxd;
+ pTxdLst = pTxd;
+ BytesSend = 0;
+ protocol = 0;
+
+ /* map first fragment (header) */
+ PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
+ virt_to_page(pMessage->data),
+ ((unsigned long) pMessage->data & ~PAGE_MASK),
+ skb_headlen(pMessage),
+ PCI_DMA_TODEVICE);
+
+ pTxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
+ pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
+
+ /* HW checksum? */
+ if (pMessage->ip_summed == CHECKSUM_HW) {
+ pTxd->TBControl = TX_CTRL_STF |
+ TX_CTRL_ST_FWD |
+ skb_headlen(pMessage);
+
+ /* We have to use the opcode for tcp here because the opcode for
+ udp is not working in the hardware yet (revision 2.0)*/
+ protocol = ((SK_U8)pMessage->data[23] & 0xf);
+ if ((protocol == 17) && (pAC->GIni.GIChipRev != 0))
+ pTxd->TBControl |= BMU_UDP_CHECK;
+ else
+ pTxd->TBControl |= BMU_TCP_CHECK ;
+
+ hlength = ((SK_U8)pMessage->data[14] & 0xf) * 4;
+ pTxd->TcpSumOfs = 0; /* PH-Checksum already claculated */
+ pTxd->TcpSumSt = 14+hlength+16;
+ pTxd->TcpSumWr = 14+hlength;
+
+ } else {
+ pTxd->TBControl = TX_CTRL_CHECK_DEFAULT |
+ TX_CTRL_SOFTWARE |
+ TX_CTRL_STF |
+ skb_headlen(pMessage);
+ }
+
+ pTxd = pTxd->pNextTxd;
+ pTxPort->TxdRingFree--;
+ BytesSend += skb_headlen(pMessage);
+
+
+ /* Map SG fragments */
+ for (i = 0; i < skb_shinfo(pMessage)->nr_frags; i++) {
+ sk_frag = &skb_shinfo(pMessage)->frags[i];
+
+ /* we already have the proper value in entry */
+ PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
+ sk_frag->page,
+ sk_frag->page_offset,
+ sk_frag->size,
+ PCI_DMA_TODEVICE);
+
+ pTxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
+ pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
+ pTxd->pMBuf = pMessage;
+
+ /* HW checksum */
+ if (pMessage->ip_summed == CHECKSUM_HW) {
+ pTxd->TBControl = TX_CTRL_OWN_BMU |
+ TX_CTRL_SOFTWARE |
+ TX_CTRL_ST_FWD;
+
+ /* We have to use the opcode for tcp here because the opcode for
+ udp is not working in the hardware yet (revision 2.0)*/
+ if ((protocol == 17) && (pAC->GIni.GIChipRev != 0))
+ pTxd->TBControl |= BMU_UDP_CHECK ;
+ else
+ pTxd->TBControl |= BMU_TCP_CHECK ;
+
+ } else {
+ pTxd->TBControl = TX_CTRL_CHECK_DEFAULT |
+ TX_CTRL_SOFTWARE |
+ TX_CTRL_OWN_BMU;
+ }
+
+ /* Last fragment */
+ if( (i+1) == skb_shinfo(pMessage)->nr_frags ) {
+#ifdef USE_TX_COMPLETE
+ pTxd->TBControl |= TX_CTRL_EOF |
+ TX_CTRL_EOF_IRQ |
+ sk_frag->size;
+#else
+ pTxd->TBControl |= TX_CTRL_EOF |
+ sk_frag->size;
+#endif
+ pTxdFst->TBControl |= TX_CTRL_OWN_BMU |
+ TX_CTRL_SOFTWARE;
+
+ } else {
+ pTxd->TBControl |= sk_frag->size;
+ }
+ pTxdLst = pTxd;
+ pTxd = pTxd->pNextTxd;
+ pTxPort->TxdRingFree--;
+ BytesSend += sk_frag->size;
+ }
+
+ if ((pTxPort->pTxdRingPrev->TBControl & TX_CTRL_OWN_BMU) == 0) {
+ /* previous descriptor already done, so give tx start cmd */
+ /* StartTx(pAC, pTxPort->HwAddr); */
+ SK_OUT8(pTxPort->HwAddr, TX_Q_CTRL, TX_Q_CTRL_START);
+ }
+
+ pTxPort->pTxdRingPrev = pTxdLst;
+ pTxPort->pTxdRingHead = pTxd;
+
+ spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
+
+ if (pTxPort->TxdRingFree > 0)
+ return (BytesSend);
+ else
+ return (0);
+}
+#endif
+
+
+void dump_frag( SK_U8 *data, int length)
+{
+ int i;
+
+ printk("Length: %d\n", length);
+ for( i=0; i < length; i++ ) {
+ printk(" %02x", (SK_U8)*(data + i) );
+ if( !((i+1) % 20) )
+ printk("\n");
+ }
+ printk("\n\n");
+
+}
+
+
+/*****************************************************************************
+ *
+ * FreeTxDescriptors - release descriptors from the descriptor ring
+ *
+ * Description:
+ * This function releases descriptors from a transmit ring if they
+ * have been sent by the BMU.
+ * If a descriptors is sent, it can be freed and the message can
+ * be freed, too.
+ * The SOFTWARE controllable bit is used to prevent running around a
+ * completely free ring for ever. If this bit is no set in the
+ * frame (by XmitFrame), this frame has never been sent or is
+ * already freed.
+ * The Tx descriptor ring lock must be held while calling this function !!!
+ *
+ * Returns:
+ * none
+ */
+static void FreeTxDescriptors(
+SK_AC *pAC, /* pointer to the adapter context */
+TX_PORT *pTxPort) /* pointer to destination port structure */
+{
+TXD *pTxd; /* pointer to the checked descriptor */
+TXD *pNewTail; /* pointer to 'end' of the ring */
+SK_U32 Control; /* TBControl field of descriptor */
+SK_U64 PhysAddr; /* address of DMA mapping */
+
+ pNewTail = pTxPort->pTxdRingTail;
+ pTxd = pNewTail;
+ /*
+ * loop forever; exits if TX_CTRL_SOFTWARE bit not set in start frame
+ * or TX_CTRL_OWN_BMU bit set in any frame
+ */
+ while (1) {
+ Control = pTxd->TBControl;
+ if ((Control & TX_CTRL_SOFTWARE) == 0) {
+ /*
+ * software controllable bit is set in first
+ * fragment when given to BMU. Not set means that
+ * this fragment was never sent or is already
+ * freed ( -> ring completely free now).
+ */
+ pTxPort->pTxdRingTail = pTxd;
+ netif_wake_queue(pAC->dev[pTxPort->PortIndex]);
+ return;
+ }
+ if (Control & TX_CTRL_OWN_BMU) {
+ pTxPort->pTxdRingTail = pTxd;
+ if (pTxPort->TxdRingFree > 0) {
+ netif_wake_queue(pAC->dev[pTxPort->PortIndex]);
+ }
+ return;
+ }
+
+ /* release the DMA mapping */
+ PhysAddr = ((SK_U64) pTxd->VDataHigh) << (SK_U64) 32;
+ PhysAddr |= (SK_U64) pTxd->VDataLow;
+ pci_unmap_page(pAC->PciDev, PhysAddr,
+ pTxd->pMBuf->len,
+ PCI_DMA_TODEVICE);
+
+ if (Control & TX_CTRL_EOF)
+ DEV_KFREE_SKB_ANY(pTxd->pMBuf); /* free message */
+
+ pTxPort->TxdRingFree++;
+ pTxd->TBControl &= ~TX_CTRL_SOFTWARE;
+ pTxd = pTxd->pNextTxd; /* point behind fragment with EOF */
+ } /* while(forever) */
+} /* FreeTxDescriptors */
+
+/*****************************************************************************
+ *
+ * FillRxRing - fill the receive ring with valid descriptors
+ *
+ * Description:
+ * This function fills the receive ring descriptors with data
+ * segments and makes them valid for the BMU.
+ * The active ring is filled completely, if possible.
+ * The non-active ring is filled only partial to save memory.
+ *
+ * Description of rx ring structure:
+ * head - points to the descriptor which will be used next by the BMU
+ * tail - points to the next descriptor to give to the BMU
+ *
+ * Returns: N/A
+ */
+static void FillRxRing(
+SK_AC *pAC, /* pointer to the adapter context */
+RX_PORT *pRxPort) /* ptr to port struct for which the ring
+ should be filled */
+{
+unsigned long Flags;
+
+ spin_lock_irqsave(&pRxPort->RxDesRingLock, Flags);
+ while (pRxPort->RxdRingFree > pRxPort->RxFillLimit) {
+ if(!FillRxDescriptor(pAC, pRxPort))
+ break;
+ }
+ spin_unlock_irqrestore(&pRxPort->RxDesRingLock, Flags);
+} /* FillRxRing */
+
+
+/*****************************************************************************
+ *
+ * FillRxDescriptor - fill one buffer into the receive ring
+ *
+ * Description:
+ * The function allocates a new receive buffer and
+ * puts it into the next descriptor.
+ *
+ * Returns:
+ * SK_TRUE - a buffer was added to the ring
+ * SK_FALSE - a buffer could not be added
+ */
+static SK_BOOL FillRxDescriptor(
+SK_AC *pAC, /* pointer to the adapter context struct */
+RX_PORT *pRxPort) /* ptr to port struct of ring to fill */
+{
+struct sk_buff *pMsgBlock; /* pointer to a new message block */
+RXD *pRxd; /* the rxd to fill */
+SK_U16 Length; /* data fragment length */
+SK_U64 PhysAddr; /* physical address of a rx buffer */
+
+ pMsgBlock = alloc_skb(pAC->RxBufSize, GFP_ATOMIC);
+ if (pMsgBlock == NULL) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_ENTRY,
+ ("%s: Allocation of rx buffer failed !\n",
+ pAC->dev[pRxPort->PortIndex]->name));
+ SK_PNMI_CNT_NO_RX_BUF(pAC, pRxPort->PortIndex);
+ return(SK_FALSE);
+ }
+ skb_reserve(pMsgBlock, 2); /* to align IP frames */
+ /* skb allocated ok, so add buffer */
+ pRxd = pRxPort->pRxdRingTail;
+ pRxPort->pRxdRingTail = pRxd->pNextRxd;
+ pRxPort->RxdRingFree--;
+ Length = pAC->RxBufSize;
+#if 0
+ PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,
+ virt_to_page(pMsgBlock->data),
+ ((unsigned long) pMsgBlock->data &
+ ~PAGE_MASK),
+ pAC->RxBufSize - 2,
+ PCI_DMA_FROMDEVICE);
+#else
+ PhysAddr = (SK_U64) pci_phys_to_mem(pAC->PciDev, (u32)pMsgBlock->data);
+#endif
+ pRxd->VDataLow = (SK_U32) (PhysAddr & 0xffffffff);
+ pRxd->VDataHigh = (SK_U32) (PhysAddr >> 32);
+ pRxd->pMBuf = pMsgBlock;
+ pRxd->RBControl = RX_CTRL_OWN_BMU | RX_CTRL_STF |
+ RX_CTRL_EOF_IRQ | RX_CTRL_CHECK_CSUM | Length;
+ return (SK_TRUE);
+
+} /* FillRxDescriptor */
+
+
+/*****************************************************************************
+ *
+ * ReQueueRxBuffer - fill one buffer back into the receive ring
+ *
+ * Description:
+ * Fill a given buffer back into the rx ring. The buffer
+ * has been previously allocated and aligned, and its phys.
+ * address calculated, so this is no more necessary.
+ *
+ * Returns: N/A
+ */
+static void ReQueueRxBuffer(
+SK_AC *pAC, /* pointer to the adapter context struct */
+RX_PORT *pRxPort, /* ptr to port struct of ring to fill */
+struct sk_buff *pMsg, /* pointer to the buffer */
+SK_U32 PhysHigh, /* phys address high dword */
+SK_U32 PhysLow) /* phys address low dword */
+{
+RXD *pRxd; /* the rxd to fill */
+SK_U16 Length; /* data fragment length */
+
+ pRxd = pRxPort->pRxdRingTail;
+ pRxPort->pRxdRingTail = pRxd->pNextRxd;
+ pRxPort->RxdRingFree--;
+ Length = pAC->RxBufSize;
+ pRxd->VDataLow = PhysLow;
+ pRxd->VDataHigh = PhysHigh;
+ pRxd->pMBuf = pMsg;
+ pRxd->RBControl = RX_CTRL_OWN_BMU | RX_CTRL_STF |
+ RX_CTRL_EOF_IRQ | RX_CTRL_CHECK_CSUM | Length;
+ return;
+} /* ReQueueRxBuffer */
+
+
+/*****************************************************************************
+ *
+ * ReceiveIrq - handle a receive IRQ
+ *
+ * Description:
+ * This function is called when a receive IRQ is set.
+ * It walks the receive descriptor ring and sends up all
+ * frames that are complete.
+ *
+ * Returns: N/A
+ */
+#if 0
+static void ReceiveIrq(
+#else
+void ReceiveIrq(
+#endif
+ SK_AC *pAC, /* pointer to adapter context */
+ RX_PORT *pRxPort, /* pointer to receive port struct */
+ SK_BOOL SlowPathLock) /* indicates if SlowPathLock is needed */
+{
+RXD *pRxd; /* pointer to receive descriptors */
+SK_U32 Control; /* control field of descriptor */
+struct sk_buff *pMsg; /* pointer to message holding frame */
+struct sk_buff *pNewMsg; /* pointer to a new message for copying frame */
+int FrameLength; /* total length of received frame */
+SK_MBUF *pRlmtMbuf; /* ptr to a buffer for giving a frame to rlmt */
+SK_EVPARA EvPara; /* an event parameter union */
+unsigned long Flags; /* for spin lock */
+int PortIndex = pRxPort->PortIndex;
+unsigned int Offset;
+unsigned int NumBytes;
+unsigned int ForRlmt;
+SK_BOOL IsBc;
+SK_BOOL IsMc;
+SK_BOOL IsBadFrame; /* Bad frame */
+
+SK_U32 FrameStat;
+unsigned short Csum1;
+unsigned short Csum2;
+unsigned short Type;
+#if 0
+int Result;
+#endif
+SK_U64 PhysAddr;
+
+rx_start:
+ /* do forever; exit if RX_CTRL_OWN_BMU found */
+ for ( pRxd = pRxPort->pRxdRingHead ;
+ pRxPort->RxdRingFree < pAC->RxDescrPerRing ;
+ pRxd = pRxd->pNextRxd,
+ pRxPort->pRxdRingHead = pRxd,
+ pRxPort->RxdRingFree ++) {
+
+ /*
+ * For a better understanding of this loop
+ * Go through every descriptor beginning at the head
+ * Please note: the ring might be completely received so the OWN bit
+ * set is not a good crirteria to leave that loop.
+ * Therefore the RingFree counter is used.
+ * On entry of this loop pRxd is a pointer to the Rxd that needs
+ * to be checked next.
+ */
+
+ Control = pRxd->RBControl;
+
+ /* check if this descriptor is ready */
+ if ((Control & RX_CTRL_OWN_BMU) != 0) {
+ /* this descriptor is not yet ready */
+ /* This is the usual end of the loop */
+ /* We don't need to start the ring again */
+ FillRxRing(pAC, pRxPort);
+ return;
+ }
+
+ /* get length of frame and check it */
+ FrameLength = Control & RX_CTRL_LEN_MASK;
+ if (FrameLength > pAC->RxBufSize) {
+ goto rx_failed;
+ }
+
+ /* check for STF and EOF */
+ if ((Control & (RX_CTRL_STF | RX_CTRL_EOF)) !=
+ (RX_CTRL_STF | RX_CTRL_EOF)) {
+ goto rx_failed;
+ }
+
+ /* here we have a complete frame in the ring */
+ pMsg = pRxd->pMBuf;
+
+ FrameStat = pRxd->FrameStat;
+
+ /* check for frame length mismatch */
+#define XMR_FS_LEN_SHIFT 18
+#define GMR_FS_LEN_SHIFT 16
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ if (FrameLength != (SK_U32) (FrameStat >> XMR_FS_LEN_SHIFT)) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_RX_PROGRESS,
+ ("skge: Frame length mismatch (%u/%u).\n",
+ FrameLength,
+ (SK_U32) (FrameStat >> XMR_FS_LEN_SHIFT)));
+ goto rx_failed;
+ }
+ }
+ else {
+ if (FrameLength != (SK_U32) (FrameStat >> GMR_FS_LEN_SHIFT)) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_RX_PROGRESS,
+ ("skge: Frame length mismatch (%u/%u).\n",
+ FrameLength,
+ (SK_U32) (FrameStat >> XMR_FS_LEN_SHIFT)));
+ goto rx_failed;
+ }
+ }
+
+ /* Set Rx Status */
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+ IsBc = (FrameStat & XMR_FS_BC) != 0;
+ IsMc = (FrameStat & XMR_FS_MC) != 0;
+ IsBadFrame = (FrameStat &
+ (XMR_FS_ANY_ERR | XMR_FS_2L_VLAN)) != 0;
+ } else {
+ IsBc = (FrameStat & GMR_FS_BC) != 0;
+ IsMc = (FrameStat & GMR_FS_MC) != 0;
+ IsBadFrame = (((FrameStat & GMR_FS_ANY_ERR) != 0) ||
+ ((FrameStat & GMR_FS_RX_OK) == 0));
+ }
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 0,
+ ("Received frame of length %d on port %d\n",
+ FrameLength, PortIndex));
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 0,
+ ("Number of free rx descriptors: %d\n",
+ pRxPort->RxdRingFree));
+/* DumpMsg(pMsg, "Rx"); */
+
+ if ((Control & RX_CTRL_STAT_VALID) != RX_CTRL_STAT_VALID ||
+ (IsBadFrame)) {
+#if 0
+ (FrameStat & (XMR_FS_ANY_ERR | XMR_FS_2L_VLAN)) != 0) {
+#endif
+ /* there is a receive error in this frame */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_RX_PROGRESS,
+ ("skge: Error in received frame, dropped!\n"
+ "Control: %x\nRxStat: %x\n",
+ Control, FrameStat));
+
+ PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
+ PhysAddr |= (SK_U64) pRxd->VDataLow;
+ pci_dma_sync_single(pAC->PciDev,
+ (dma_addr_t) PhysAddr,
+ FrameLength,
+ PCI_DMA_FROMDEVICE);
+ ReQueueRxBuffer(pAC, pRxPort, pMsg,
+ pRxd->VDataHigh, pRxd->VDataLow);
+
+ continue;
+ }
+
+ /*
+ * if short frame then copy data to reduce memory waste
+ */
+ if ((FrameLength < SK_COPY_THRESHOLD) &&
+ ((pNewMsg = alloc_skb(FrameLength+2, GFP_ATOMIC)) != NULL)) {
+ /*
+ * Short frame detected and allocation successfull
+ */
+ /* use new skb and copy data */
+ skb_reserve(pNewMsg, 2);
+ skb_put(pNewMsg, FrameLength);
+ PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
+ PhysAddr |= (SK_U64) pRxd->VDataLow;
+
+ pci_dma_sync_single(pAC->PciDev,
+ (dma_addr_t) PhysAddr,
+ FrameLength,
+ PCI_DMA_FROMDEVICE);
+ eth_copy_and_sum(pNewMsg, pMsg->data,
+ FrameLength, 0);
+ ReQueueRxBuffer(pAC, pRxPort, pMsg,
+ pRxd->VDataHigh, pRxd->VDataLow);
+ pMsg = pNewMsg;
+
+ }
+ else {
+ /*
+ * if large frame, or SKB allocation failed, pass
+ * the SKB directly to the networking
+ */
+
+ PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
+ PhysAddr |= (SK_U64) pRxd->VDataLow;
+
+ /* release the DMA mapping */
+ pci_unmap_single(pAC->PciDev,
+ PhysAddr,
+ pAC->RxBufSize - 2,
+ PCI_DMA_FROMDEVICE);
+
+ /* set length in message */
+ skb_put(pMsg, FrameLength);
+ /* hardware checksum */
+ Type = ntohs(*((short*)&pMsg->data[12]));
+ if (Type == 0x800) {
+ Csum1=le16_to_cpu(pRxd->TcpSums & 0xffff);
+ Csum2=le16_to_cpu((pRxd->TcpSums >> 16) & 0xffff);
+#if 0
+ if ((((Csum1 & 0xfffe) && (Csum2 & 0xfffe)) &&
+ (pAC->GIni.GIChipId == CHIP_ID_GENESIS)) ||
+ (pAC->GIni.GIChipId == CHIP_ID_YUKON)) {
+ Result = SkCsGetReceiveInfo(pAC,
+ &pMsg->data[14],
+ Csum1, Csum2, pRxPort->PortIndex);
+ if (Result ==
+ SKCS_STATUS_IP_FRAGMENT ||
+ Result ==
+ SKCS_STATUS_IP_CSUM_OK ||
+ Result ==
+ SKCS_STATUS_TCP_CSUM_OK ||
+ Result ==
+ SKCS_STATUS_UDP_CSUM_OK) {
+ pMsg->ip_summed =
+ CHECKSUM_UNNECESSARY;
+ } else {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_RX_PROGRESS,
+ ("skge: CRC error. Frame dropped!\n"));
+ goto rx_failed;
+ }
+ }/* checksumControl calculation valid */
+#endif
+ } /* IP frame */
+ } /* frame > SK_COPY_TRESHOLD */
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 1,("V"));
+ ForRlmt = SK_RLMT_RX_PROTOCOL;
+#if 0
+ IsBc = (FrameStat & XMR_FS_BC)==XMR_FS_BC;
+#endif
+ SK_RLMT_PRE_LOOKAHEAD(pAC, PortIndex, FrameLength,
+ IsBc, &Offset, &NumBytes);
+ if (NumBytes != 0) {
+#if 0
+ IsMc = (FrameStat & XMR_FS_MC)==XMR_FS_MC;
+#endif
+ SK_RLMT_LOOKAHEAD(pAC, PortIndex,
+ &pMsg->data[Offset],
+ IsBc, IsMc, &ForRlmt);
+ }
+ if (ForRlmt == SK_RLMT_RX_PROTOCOL) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 1,("W"));
+ /* send up only frames from active port */
+ if ((PortIndex == pAC->ActivePort) ||
+ (pAC->RlmtNets == 2)) {
+ /* frame for upper layer */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, 1,("U"));
+#ifdef xDEBUG
+ DumpMsg(pMsg, "Rx");
+#endif
+ SK_PNMI_CNT_RX_OCTETS_DELIVERED(pAC,
+ FrameLength, pRxPort->PortIndex);
+
+#if 0
+ pMsg->dev = pAC->dev[pRxPort->PortIndex];
+ pMsg->protocol = eth_type_trans(pMsg,
+ pAC->dev[pRxPort->PortIndex]);
+ netif_rx(pMsg);
+ pAC->dev[pRxPort->PortIndex]->last_rx = jiffies;
+#else
+ NetReceive(pMsg->data, pMsg->len);
+ dev_kfree_skb_any(pMsg);
+#endif
+ }
+ else {
+ /* drop frame */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_RX_PROGRESS,
+ ("D"));
+ DEV_KFREE_SKB(pMsg);
+ }
+
+ } /* if not for rlmt */
+ else {
+ /* packet for rlmt */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_RX_PROGRESS, ("R"));
+ pRlmtMbuf = SkDrvAllocRlmtMbuf(pAC,
+ pAC->IoBase, FrameLength);
+ if (pRlmtMbuf != NULL) {
+ pRlmtMbuf->pNext = NULL;
+ pRlmtMbuf->Length = FrameLength;
+ pRlmtMbuf->PortIdx = PortIndex;
+ EvPara.pParaPtr = pRlmtMbuf;
+ memcpy((char*)(pRlmtMbuf->pData),
+ (char*)(pMsg->data),
+ FrameLength);
+
+ /* SlowPathLock needed? */
+ if (SlowPathLock == SK_TRUE) {
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ SkEventQueue(pAC, SKGE_RLMT,
+ SK_RLMT_PACKET_RECEIVED,
+ EvPara);
+ pAC->CheckQueue = SK_TRUE;
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ } else {
+ SkEventQueue(pAC, SKGE_RLMT,
+ SK_RLMT_PACKET_RECEIVED,
+ EvPara);
+ pAC->CheckQueue = SK_TRUE;
+ }
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV,
+ SK_DBGCAT_DRV_RX_PROGRESS,
+ ("Q"));
+ }
+#if 0
+ if ((pAC->dev[pRxPort->PortIndex]->flags &
+ (IFF_PROMISC | IFF_ALLMULTI)) != 0 ||
+ (ForRlmt & SK_RLMT_RX_PROTOCOL) ==
+ SK_RLMT_RX_PROTOCOL) {
+ pMsg->dev = pAC->dev[pRxPort->PortIndex];
+ pMsg->protocol = eth_type_trans(pMsg,
+ pAC->dev[pRxPort->PortIndex]);
+ netif_rx(pMsg);
+ pAC->dev[pRxPort->PortIndex]->last_rx = jiffies;
+ }
+#else
+ if (0) {
+ }
+#endif
+ else {
+ DEV_KFREE_SKB(pMsg);
+ }
+
+ } /* if packet for rlmt */
+ } /* for ... scanning the RXD ring */
+
+ /* RXD ring is empty -> fill and restart */
+ FillRxRing(pAC, pRxPort);
+ /* do not start if called from Close */
+ if (pAC->BoardLevel > 0) {
+ ClearAndStartRx(pAC, PortIndex);
+ }
+ return;
+
+rx_failed:
+ /* remove error frame */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ERROR,
+ ("Schrottdescriptor, length: 0x%x\n", FrameLength));
+
+ /* release the DMA mapping */
+
+ PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
+ PhysAddr |= (SK_U64) pRxd->VDataLow;
+ pci_unmap_page(pAC->PciDev,
+ PhysAddr,
+ pAC->RxBufSize - 2,
+ PCI_DMA_FROMDEVICE);
+ DEV_KFREE_SKB_IRQ(pRxd->pMBuf);
+ pRxd->pMBuf = NULL;
+ pRxPort->RxdRingFree++;
+ pRxPort->pRxdRingHead = pRxd->pNextRxd;
+ goto rx_start;
+
+} /* ReceiveIrq */
+
+
+/*****************************************************************************
+ *
+ * ClearAndStartRx - give a start receive command to BMU, clear IRQ
+ *
+ * Description:
+ * This function sends a start command and a clear interrupt
+ * command for one receive queue to the BMU.
+ *
+ * Returns: N/A
+ * none
+ */
+static void ClearAndStartRx(
+SK_AC *pAC, /* pointer to the adapter context */
+int PortIndex) /* index of the receive port (XMAC) */
+{
+ SK_OUT8(pAC->IoBase, RxQueueAddr[PortIndex]+RX_Q_CTRL,
+ RX_Q_CTRL_START | RX_Q_CTRL_CLR_I_EOF);
+} /* ClearAndStartRx */
+
+
+/*****************************************************************************
+ *
+ * ClearTxIrq - give a clear transmit IRQ command to BMU
+ *
+ * Description:
+ * This function sends a clear tx IRQ command for one
+ * transmit queue to the BMU.
+ *
+ * Returns: N/A
+ */
+static void ClearTxIrq(
+SK_AC *pAC, /* pointer to the adapter context */
+int PortIndex, /* index of the transmit port (XMAC) */
+int Prio) /* priority or normal queue */
+{
+ SK_OUT8(pAC->IoBase, TxQueueAddr[PortIndex][Prio]+TX_Q_CTRL,
+ TX_Q_CTRL_CLR_I_EOF);
+} /* ClearTxIrq */
+
+
+/*****************************************************************************
+ *
+ * ClearRxRing - remove all buffers from the receive ring
+ *
+ * Description:
+ * This function removes all receive buffers from the ring.
+ * The receive BMU must be stopped before calling this function.
+ *
+ * Returns: N/A
+ */
+static void ClearRxRing(
+SK_AC *pAC, /* pointer to adapter context */
+RX_PORT *pRxPort) /* pointer to rx port struct */
+{
+RXD *pRxd; /* pointer to the current descriptor */
+unsigned long Flags;
+SK_U64 PhysAddr;
+
+ if (pRxPort->RxdRingFree == pAC->RxDescrPerRing) {
+ return;
+ }
+ spin_lock_irqsave(&pRxPort->RxDesRingLock, Flags);
+ pRxd = pRxPort->pRxdRingHead;
+ do {
+ if (pRxd->pMBuf != NULL) {
+
+ PhysAddr = ((SK_U64) pRxd->VDataHigh) << (SK_U64)32;
+ PhysAddr |= (SK_U64) pRxd->VDataLow;
+ pci_unmap_page(pAC->PciDev,
+ PhysAddr,
+ pAC->RxBufSize - 2,
+ PCI_DMA_FROMDEVICE);
+ DEV_KFREE_SKB(pRxd->pMBuf);
+ pRxd->pMBuf = NULL;
+ }
+ pRxd->RBControl &= RX_CTRL_OWN_BMU;
+ pRxd = pRxd->pNextRxd;
+ pRxPort->RxdRingFree++;
+ } while (pRxd != pRxPort->pRxdRingTail);
+ pRxPort->pRxdRingTail = pRxPort->pRxdRingHead;
+ spin_unlock_irqrestore(&pRxPort->RxDesRingLock, Flags);
+} /* ClearRxRing */
+
+
+/*****************************************************************************
+ *
+ * ClearTxRing - remove all buffers from the transmit ring
+ *
+ * Description:
+ * This function removes all transmit buffers from the ring.
+ * The transmit BMU must be stopped before calling this function
+ * and transmitting at the upper level must be disabled.
+ * The BMU own bit of all descriptors is cleared, the rest is
+ * done by calling FreeTxDescriptors.
+ *
+ * Returns: N/A
+ */
+static void ClearTxRing(
+SK_AC *pAC, /* pointer to adapter context */
+TX_PORT *pTxPort) /* pointer to tx prt struct */
+{
+TXD *pTxd; /* pointer to the current descriptor */
+int i;
+unsigned long Flags;
+
+ spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);
+ pTxd = pTxPort->pTxdRingHead;
+ for (i=0; i<pAC->TxDescrPerRing; i++) {
+ pTxd->TBControl &= ~TX_CTRL_OWN_BMU;
+ pTxd = pTxd->pNextTxd;
+ }
+ FreeTxDescriptors(pAC, pTxPort);
+ spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);
+} /* ClearTxRing */
+
+
+#if 0
+/*****************************************************************************
+ *
+ * SetQueueSizes - configure the sizes of rx and tx queues
+ *
+ * Description:
+ * This function assigns the sizes for active and passive port
+ * to the appropriate HWinit structure variables.
+ * The passive port(s) get standard values, all remaining RAM
+ * is given to the active port.
+ * The queue sizes are in kbyte and must be multiple of 8.
+ * The limits for the number of buffers filled into the rx rings
+ * is also set in this routine.
+ *
+ * Returns:
+ * none
+ */
+static void SetQueueSizes(
+SK_AC *pAC) /* pointer to the adapter context */
+{
+int StandbyRam; /* adapter RAM used for a standby port */
+int RemainingRam; /* adapter RAM available for the active port */
+int RxRam; /* RAM used for the active port receive queue */
+int i; /* loop counter */
+
+if (pAC->RlmtNets == 1) {
+ StandbyRam = SK_RLMT_STANDBY_QRXSIZE + SK_RLMT_STANDBY_QXASIZE +
+ SK_RLMT_STANDBY_QXSSIZE;
+ RemainingRam = pAC->GIni.GIRamSize -
+ (pAC->GIni.GIMacsFound-1) * StandbyRam;
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ pAC->GIni.GP[i].PRxQSize = SK_RLMT_STANDBY_QRXSIZE;
+ pAC->GIni.GP[i].PXSQSize = SK_RLMT_STANDBY_QXSSIZE;
+ pAC->GIni.GP[i].PXAQSize = SK_RLMT_STANDBY_QXASIZE;
+ }
+ RxRam = (RemainingRam * 8 / 10) & ~7;
+ pAC->GIni.GP[pAC->ActivePort].PRxQSize = RxRam;
+ pAC->GIni.GP[pAC->ActivePort].PXSQSize = 0;
+ pAC->GIni.GP[pAC->ActivePort].PXAQSize =
+ (RemainingRam - RxRam) & ~7;
+ pAC->RxQueueSize = RxRam;
+ pAC->TxSQueueSize = 0;
+ pAC->TxAQueueSize = (RemainingRam - RxRam) & ~7;
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("queue sizes settings - rx:%d txA:%d txS:%d\n",
+ pAC->RxQueueSize,pAC->TxAQueueSize, pAC->TxSQueueSize));
+} else {
+ RemainingRam = pAC->GIni.GIRamSize/pAC->GIni.GIMacsFound;
+ RxRam = (RemainingRam * 8 / 10) & ~7;
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ pAC->GIni.GP[i].PRxQSize = RxRam;
+ pAC->GIni.GP[i].PXSQSize = 0;
+ pAC->GIni.GP[i].PXAQSize = (RemainingRam - RxRam) & ~7;
+ }
+
+ pAC->RxQueueSize = RxRam;
+ pAC->TxSQueueSize = 0;
+ pAC->TxAQueueSize = (RemainingRam - RxRam) & ~7;
+}
+ for (i=0; i<SK_MAX_MACS; i++) {
+ pAC->RxPort[i].RxFillLimit = pAC->RxDescrPerRing;
+ }
+
+ if (pAC->RlmtNets == 2) {
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ pAC->RxPort[i].RxFillLimit = pAC->RxDescrPerRing - 100;
+ }
+ } else {
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ pAC->RxPort[i].RxFillLimit = pAC->RxDescrPerRing - 100;
+ }
+ /*
+ * Do not set the Limit to 0, because this could cause
+ * wrap around with ReQueue'ed buffers (a buffer could
+ * be requeued in the same position, made accessable to
+ * the hardware, and the hardware could change its
+ * contents!
+ */
+ pAC->RxPort[pAC->ActivePort].RxFillLimit = 1;
+ }
+
+#ifdef DEBUG
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,
+ ("i: %d, RxQSize: %d, PXSQsize: %d, PXAQSize: %d\n",
+ i,
+ pAC->GIni.GP[i].PRxQSize,
+ pAC->GIni.GP[i].PXSQSize,
+ pAC->GIni.GP[i].PXAQSize));
+ }
+#endif
+} /* SetQueueSizes */
+
+
+/*****************************************************************************
+ *
+ * SkGeSetMacAddr - Set the hardware MAC address
+ *
+ * Description:
+ * This function sets the MAC address used by the adapter.
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ */
+static int SkGeSetMacAddr(struct SK_NET_DEVICE *dev, void *p)
+{
+
+DEV_NET *pNet = (DEV_NET*) dev->priv;
+SK_AC *pAC = pNet->pAC;
+
+struct sockaddr *addr = p;
+unsigned long Flags;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeSetMacAddr starts now...\n"));
+ if(netif_running(dev))
+ return -EBUSY;
+
+ memcpy(dev->dev_addr, addr->sa_data,dev->addr_len);
+
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+
+ if (pAC->RlmtNets == 2)
+ SkAddrOverride(pAC, pAC->IoBase, pNet->NetNr,
+ (SK_MAC_ADDR*)dev->dev_addr, SK_ADDR_VIRTUAL_ADDRESS);
+ else
+ SkAddrOverride(pAC, pAC->IoBase, pAC->ActivePort,
+ (SK_MAC_ADDR*)dev->dev_addr, SK_ADDR_VIRTUAL_ADDRESS);
+
+
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ return 0;
+} /* SkGeSetMacAddr */
+#endif
+
+
+/*****************************************************************************
+ *
+ * SkGeSetRxMode - set receive mode
+ *
+ * Description:
+ * This function sets the receive mode of an adapter. The adapter
+ * supports promiscuous mode, allmulticast mode and a number of
+ * multicast addresses. If more multicast addresses the available
+ * are selected, a hash function in the hardware is used.
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ */
+#if 0
+static void SkGeSetRxMode(struct SK_NET_DEVICE *dev)
+{
+
+DEV_NET *pNet;
+SK_AC *pAC;
+
+struct dev_mc_list *pMcList;
+int i;
+int PortIdx;
+unsigned long Flags;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeSetRxMode starts now... "));
+
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+ if (pAC->RlmtNets == 1)
+ PortIdx = pAC->ActivePort;
+ else
+ PortIdx = pNet->NetNr;
+
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ if (dev->flags & IFF_PROMISC) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("PROMISCUOUS mode\n"));
+ SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
+ SK_PROM_MODE_LLC);
+ } else if (dev->flags & IFF_ALLMULTI) {
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("ALLMULTI mode\n"));
+ SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
+ SK_PROM_MODE_ALL_MC);
+ } else {
+ SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,
+ SK_PROM_MODE_NONE);
+ SkAddrMcClear(pAC, pAC->IoBase, PortIdx, 0);
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("Number of MC entries: %d ", dev->mc_count));
+
+ pMcList = dev->mc_list;
+ for (i=0; i<dev->mc_count; i++, pMcList = pMcList->next) {
+ SkAddrMcAdd(pAC, pAC->IoBase, PortIdx,
+ (SK_MAC_ADDR*)pMcList->dmi_addr, 0);
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_MCA,
+ ("%02x:%02x:%02x:%02x:%02x:%02x\n",
+ pMcList->dmi_addr[0],
+ pMcList->dmi_addr[1],
+ pMcList->dmi_addr[2],
+ pMcList->dmi_addr[3],
+ pMcList->dmi_addr[4],
+ pMcList->dmi_addr[5]));
+ }
+ SkAddrMcUpdate(pAC, pAC->IoBase, PortIdx);
+ }
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+
+ return;
+} /* SkGeSetRxMode */
+
+
+/*****************************************************************************
+ *
+ * SkGeChangeMtu - set the MTU to another value
+ *
+ * Description:
+ * This function sets is called whenever the MTU size is changed
+ * (ifconfig mtu xxx dev ethX). If the MTU is bigger than standard
+ * ethernet MTU size, long frame support is activated.
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ */
+static int SkGeChangeMtu(struct SK_NET_DEVICE *dev, int NewMtu)
+{
+DEV_NET *pNet;
+DEV_NET *pOtherNet;
+SK_AC *pAC;
+unsigned long Flags;
+int i;
+SK_EVPARA EvPara;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeChangeMtu starts now...\n"));
+
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+
+ if ((NewMtu < 68) || (NewMtu > SK_JUMBO_MTU)) {
+ return -EINVAL;
+ }
+
+ if(pAC->BoardLevel != 2) {
+ return -EINVAL;
+ }
+
+ pNet->Mtu = NewMtu;
+ pOtherNet = (DEV_NET*)pAC->dev[1 - pNet->NetNr]->priv;
+ if ((pOtherNet->Mtu > 1500) && (NewMtu <= 1500) && (pOtherNet->Up==1)) {
+ return(0);
+ }
+
+ EvPara.Para32[0] = pNet->NetNr;
+ EvPara.Para32[1] = -1;
+
+ pAC->RxBufSize = NewMtu + 32;
+ dev->mtu = NewMtu;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("New MTU: %d\n", NewMtu));
+
+ /* prevent reconfiguration while changing the MTU */
+
+ /* disable interrupts */
+ SK_OUT32(pAC->IoBase, B0_IMSK, 0);
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+
+ /* Found more than one port */
+ if ((pAC->GIni.GIMacsFound == 2 ) &&
+ (pAC->RlmtNets == 2)) {
+ /* Stop both ports */
+ EvPara.Para32[0] = 0;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
+ EvPara.Para32[0] = 1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
+ } else {
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);
+ }
+
+ SkEventDispatcher(pAC, pAC->IoBase);
+
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ spin_lock_irqsave(
+ &pAC->TxPort[i][TX_PRIO_LOW].TxDesRingLock, Flags);
+ netif_stop_queue(pAC->dev[i]);
+
+ }
+
+ /*
+ * adjust number of rx buffers allocated
+ */
+ if (NewMtu > 1500) {
+ /* use less rx buffers */
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ /* Found more than one port */
+ if ((pAC->GIni.GIMacsFound == 2 ) &&
+ (pAC->RlmtNets == 2)) {
+ pAC->RxPort[i].RxFillLimit =
+ pAC->RxDescrPerRing - 100;
+ } else {
+ if (i == pAC->ActivePort)
+ pAC->RxPort[i].RxFillLimit =
+ pAC->RxDescrPerRing - 100;
+ else
+ pAC->RxPort[i].RxFillLimit =
+ pAC->RxDescrPerRing - 10;
+ }
+ }
+ }
+ else {
+ /* use normal amount of rx buffers */
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ /* Found more than one port */
+ if ((pAC->GIni.GIMacsFound == 2 ) &&
+ (pAC->RlmtNets == 2)) {
+ pAC->RxPort[i].RxFillLimit = 1;
+ } else {
+ if (i == pAC->ActivePort)
+ pAC->RxPort[i].RxFillLimit = 1;
+ else
+ pAC->RxPort[i].RxFillLimit =
+ pAC->RxDescrPerRing - 100;
+ }
+ }
+ }
+
+ SkGeDeInit(pAC, pAC->IoBase);
+
+ /*
+ * enable/disable hardware support for long frames
+ */
+ if (NewMtu > 1500) {
+/* pAC->JumboActivated = SK_TRUE; /#* is never set back !!! */
+ pAC->GIni.GIPortUsage = SK_JUMBO_LINK;
+ }
+ else {
+ if ((pAC->GIni.GIMacsFound == 2 ) &&
+ (pAC->RlmtNets == 2)) {
+ pAC->GIni.GIPortUsage = SK_MUL_LINK;
+ } else {
+ pAC->GIni.GIPortUsage = SK_RED_LINK;
+ }
+ }
+
+ SkGeInit( pAC, pAC->IoBase, 1);
+ SkI2cInit( pAC, pAC->IoBase, 1);
+ SkEventInit(pAC, pAC->IoBase, 1);
+ SkPnmiInit( pAC, pAC->IoBase, 1);
+ SkAddrInit( pAC, pAC->IoBase, 1);
+ SkRlmtInit( pAC, pAC->IoBase, 1);
+ SkTimerInit(pAC, pAC->IoBase, 1);
+
+ /*
+ * tschilling:
+ * Speed and others are set back to default in level 1 init!
+ */
+ GetConfiguration(pAC);
+
+ SkGeInit( pAC, pAC->IoBase, 2);
+ SkI2cInit( pAC, pAC->IoBase, 2);
+ SkEventInit(pAC, pAC->IoBase, 2);
+ SkPnmiInit( pAC, pAC->IoBase, 2);
+ SkAddrInit( pAC, pAC->IoBase, 2);
+ SkRlmtInit( pAC, pAC->IoBase, 2);
+ SkTimerInit(pAC, pAC->IoBase, 2);
+
+ /*
+ * clear and reinit the rx rings here
+ */
+ for (i=0; i<pAC->GIni.GIMacsFound; i++) {
+ ReceiveIrq(pAC, &pAC->RxPort[i], SK_TRUE);
+ ClearRxRing(pAC, &pAC->RxPort[i]);
+ FillRxRing(pAC, &pAC->RxPort[i]);
+
+ /* Enable transmit descriptor polling. */
+ SkGePollTxD(pAC, pAC->IoBase, i, SK_TRUE);
+ FillRxRing(pAC, &pAC->RxPort[i]);
+ };
+
+ SkGeYellowLED(pAC, pAC->IoBase, 1);
+
+#ifdef USE_INT_MOD
+ {
+ unsigned long ModBase;
+ ModBase = 53125000 / INTS_PER_SEC;
+ SK_OUT32(pAC->IoBase, B2_IRQM_INI, ModBase);
+ SK_OUT32(pAC->IoBase, B2_IRQM_MSK, IRQ_MOD_MASK);
+ SK_OUT32(pAC->IoBase, B2_IRQM_CTRL, TIM_START);
+ }
+#endif
+
+ netif_start_queue(pAC->dev[pNet->PortNr]);
+ for (i=pAC->GIni.GIMacsFound-1; i>=0; i--) {
+ spin_unlock(&pAC->TxPort[i][TX_PRIO_LOW].TxDesRingLock);
+ }
+
+ /* enable Interrupts */
+ SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK);
+ SK_OUT32(pAC->IoBase, B0_HWE_IMSK, IRQ_HWE_MASK);
+
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
+ SkEventDispatcher(pAC, pAC->IoBase);
+
+ /* Found more than one port */
+ if ((pAC->GIni.GIMacsFound == 2 ) &&
+ (pAC->RlmtNets == 2)) {
+ /* Start both ports */
+ EvPara.Para32[0] = pAC->RlmtNets;
+ EvPara.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_SET_NETS,
+ EvPara);
+
+
+ EvPara.Para32[1] = -1;
+ EvPara.Para32[0] = pNet->PortNr;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
+
+ if (pOtherNet->Up) {
+ EvPara.Para32[0] = pOtherNet->PortNr;
+ SkEventQueue(pAC, SKGE_RLMT,
+ SK_RLMT_START, EvPara);
+ }
+ } else {
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_START, EvPara);
+ }
+
+ SkEventDispatcher(pAC, pAC->IoBase);
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+
+ return 0;
+} /* SkGeChangeMtu */
+
+
+/*****************************************************************************
+ *
+ * SkGeStats - return ethernet device statistics
+ *
+ * Description:
+ * This function return statistic data about the ethernet device
+ * to the operating system.
+ *
+ * Returns:
+ * pointer to the statistic structure.
+ */
+static struct net_device_stats *SkGeStats(struct SK_NET_DEVICE *dev)
+{
+DEV_NET *pNet = (DEV_NET*) dev->priv;
+SK_AC *pAC = pNet->pAC;
+SK_PNMI_STRUCT_DATA *pPnmiStruct; /* structure for all Pnmi-Data */
+SK_PNMI_STAT *pPnmiStat; /* pointer to virtual XMAC stat. data */
+SK_PNMI_CONF *pPnmiConf; /* pointer to virtual link config. */
+unsigned int Size; /* size of pnmi struct */
+unsigned long Flags; /* for spin lock */
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeStats starts now...\n"));
+ pPnmiStruct = &pAC->PnmiStruct;
+ memset(pPnmiStruct, 0, sizeof(SK_PNMI_STRUCT_DATA));
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ Size = SK_PNMI_STRUCT_SIZE;
+ SkPnmiGetStruct(pAC, pAC->IoBase, pPnmiStruct, &Size, pNet->NetNr);
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ pPnmiStat = &pPnmiStruct->Stat[0];
+ pPnmiConf = &pPnmiStruct->Conf[0];
+
+ pAC->stats.rx_packets = (SK_U32) pPnmiStruct->RxDeliveredCts & 0xFFFFFFFF;
+ pAC->stats.tx_packets = (SK_U32) pPnmiStat->StatTxOkCts & 0xFFFFFFFF;
+ pAC->stats.rx_bytes = (SK_U32) pPnmiStruct->RxOctetsDeliveredCts;
+ pAC->stats.tx_bytes = (SK_U32) pPnmiStat->StatTxOctetsOkCts;
+
+ if (pNet->Mtu <= 1500) {
+ pAC->stats.rx_errors = (SK_U32) pPnmiStruct->InErrorsCts & 0xFFFFFFFF;
+ } else {
+ pAC->stats.rx_errors = (SK_U32) ((pPnmiStruct->InErrorsCts -
+ pPnmiStat->StatRxTooLongCts) & 0xFFFFFFFF);
+ }
+
+
+ if (pAC->GIni.GP[0].PhyType == SK_PHY_XMAC && pAC->HWRevision < 12)
+ pAC->stats.rx_errors = pAC->stats.rx_errors - pPnmiStat->StatRxShortsCts;
+
+ pAC->stats.tx_errors = (SK_U32) pPnmiStat->StatTxSingleCollisionCts & 0xFFFFFFFF;
+ pAC->stats.rx_dropped = (SK_U32) pPnmiStruct->RxNoBufCts & 0xFFFFFFFF;
+ pAC->stats.tx_dropped = (SK_U32) pPnmiStruct->TxNoBufCts & 0xFFFFFFFF;
+ pAC->stats.multicast = (SK_U32) pPnmiStat->StatRxMulticastOkCts & 0xFFFFFFFF;
+ pAC->stats.collisions = (SK_U32) pPnmiStat->StatTxSingleCollisionCts & 0xFFFFFFFF;
+
+ /* detailed rx_errors: */
+ pAC->stats.rx_length_errors = (SK_U32) pPnmiStat->StatRxRuntCts & 0xFFFFFFFF;
+ pAC->stats.rx_over_errors = (SK_U32) pPnmiStat->StatRxFifoOverflowCts & 0xFFFFFFFF;
+ pAC->stats.rx_crc_errors = (SK_U32) pPnmiStat->StatRxFcsCts & 0xFFFFFFFF;
+ pAC->stats.rx_frame_errors = (SK_U32) pPnmiStat->StatRxFramingCts & 0xFFFFFFFF;
+ pAC->stats.rx_fifo_errors = (SK_U32) pPnmiStat->StatRxFifoOverflowCts & 0xFFFFFFFF;
+ pAC->stats.rx_missed_errors = (SK_U32) pPnmiStat->StatRxMissedCts & 0xFFFFFFFF;
+
+ /* detailed tx_errors */
+ pAC->stats.tx_aborted_errors = (SK_U32) 0;
+ pAC->stats.tx_carrier_errors = (SK_U32) pPnmiStat->StatTxCarrierCts & 0xFFFFFFFF;
+ pAC->stats.tx_fifo_errors = (SK_U32) pPnmiStat->StatTxFifoUnderrunCts & 0xFFFFFFFF;
+ pAC->stats.tx_heartbeat_errors = (SK_U32) pPnmiStat->StatTxCarrierCts & 0xFFFFFFFF;
+ pAC->stats.tx_window_errors = (SK_U32) 0;
+
+ return(&pAC->stats);
+} /* SkGeStats */
+
+
+/*****************************************************************************
+ *
+ * SkGeIoctl - IO-control function
+ *
+ * Description:
+ * This function is called if an ioctl is issued on the device.
+ * There are three subfunction for reading, writing and test-writing
+ * the private MIB data structure (usefull for SysKonnect-internal tools).
+ *
+ * Returns:
+ * 0, if everything is ok
+ * !=0, on error
+ */
+static int SkGeIoctl(struct SK_NET_DEVICE *dev, struct ifreq *rq, int cmd)
+{
+DEV_NET *pNet;
+SK_AC *pAC;
+
+SK_GE_IOCTL Ioctl;
+unsigned int Err = 0;
+int Size;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeIoctl starts now...\n"));
+
+ pNet = (DEV_NET*) dev->priv;
+ pAC = pNet->pAC;
+
+ if(copy_from_user(&Ioctl, rq->ifr_data, sizeof(SK_GE_IOCTL))) {
+ return -EFAULT;
+ }
+
+ switch(cmd) {
+ case SK_IOCTL_SETMIB:
+ case SK_IOCTL_PRESETMIB:
+ if (!capable(CAP_NET_ADMIN)) return -EPERM;
+ case SK_IOCTL_GETMIB:
+ if(copy_from_user(&pAC->PnmiStruct, Ioctl.pData,
+ Ioctl.Len<sizeof(pAC->PnmiStruct)?
+ Ioctl.Len : sizeof(pAC->PnmiStruct))) {
+ return -EFAULT;
+ }
+ Size = SkGeIocMib(pNet, Ioctl.Len, cmd);
+ if(copy_to_user(Ioctl.pData, &pAC->PnmiStruct,
+ Ioctl.Len<Size? Ioctl.Len : Size)) {
+ return -EFAULT;
+ }
+ Ioctl.Len = Size;
+ if(copy_to_user(rq->ifr_data, &Ioctl, sizeof(SK_GE_IOCTL))) {
+ return -EFAULT;
+ }
+ break;
+ default:
+ Err = -EOPNOTSUPP;
+ }
+ return(Err);
+} /* SkGeIoctl */
+
+
+/*****************************************************************************
+ *
+ * SkGeIocMib - handle a GetMib, SetMib- or PresetMib-ioctl message
+ *
+ * Description:
+ * This function reads/writes the MIB data using PNMI (Private Network
+ * Management Interface).
+ * The destination for the data must be provided with the
+ * ioctl call and is given to the driver in the form of
+ * a user space address.
+ * Copying from the user-provided data area into kernel messages
+ * and back is done by copy_from_user and copy_to_user calls in
+ * SkGeIoctl.
+ *
+ * Returns:
+ * returned size from PNMI call
+ */
+static int SkGeIocMib(
+DEV_NET *pNet, /* pointer to the adapter context */
+unsigned int Size, /* length of ioctl data */
+int mode) /* flag for set/preset */
+{
+unsigned long Flags; /* for spin lock */
+SK_AC *pAC;
+
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("SkGeIocMib starts now...\n"));
+ pAC = pNet->pAC;
+ /* access MIB */
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ switch(mode) {
+ case SK_IOCTL_GETMIB:
+ SkPnmiGetStruct(pAC, pAC->IoBase, &pAC->PnmiStruct, &Size,
+ pNet->NetNr);
+ break;
+ case SK_IOCTL_PRESETMIB:
+ SkPnmiPreSetStruct(pAC, pAC->IoBase, &pAC->PnmiStruct, &Size,
+ pNet->NetNr);
+ break;
+ case SK_IOCTL_SETMIB:
+ SkPnmiSetStruct(pAC, pAC->IoBase, &pAC->PnmiStruct, &Size,
+ pNet->NetNr);
+ break;
+ default:
+ break;
+ }
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,
+ ("MIB data access succeeded\n"));
+ return (Size);
+} /* SkGeIocMib */
+#endif
+
+
+/*****************************************************************************
+ *
+ * GetConfiguration - read configuration information
+ *
+ * Description:
+ * This function reads per-adapter configuration information from
+ * the options provided on the command line.
+ *
+ * Returns:
+ * none
+ */
+static void GetConfiguration(
+SK_AC *pAC) /* pointer to the adapter context structure */
+{
+SK_I32 Port; /* preferred port */
+int LinkSpeed; /* Link speed */
+int AutoNeg; /* auto negotiation off (0) or on (1) */
+int DuplexCap; /* duplex capabilities (0=both, 1=full, 2=half */
+int MSMode; /* master / slave mode selection */
+SK_BOOL AutoSet;
+SK_BOOL DupSet;
+/*
+ * The two parameters AutoNeg. and DuplexCap. map to one configuration
+ * parameter. The mapping is described by this table:
+ * DuplexCap -> | both | full | half |
+ * AutoNeg | | | |
+ * -----------------------------------------------------------------
+ * Off | illegal | Full | Half |
+ * -----------------------------------------------------------------
+ * On | AutoBoth | AutoFull | AutoHalf |
+ * -----------------------------------------------------------------
+ * Sense | AutoSense | AutoSense | AutoSense |
+ */
+int Capabilities[3][3] =
+ { { -1, SK_LMODE_FULL, SK_LMODE_HALF},
+ {SK_LMODE_AUTOBOTH, SK_LMODE_AUTOFULL, SK_LMODE_AUTOHALF},
+ {SK_LMODE_AUTOSENSE, SK_LMODE_AUTOSENSE, SK_LMODE_AUTOSENSE} };
+#define DC_BOTH 0
+#define DC_FULL 1
+#define DC_HALF 2
+#define AN_OFF 0
+#define AN_ON 1
+#define AN_SENS 2
+
+ /* settings for port A */
+ /* settings link speed */
+ LinkSpeed = SK_LSPEED_AUTO; /* default: do auto select */
+ if (Speed_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ Speed_A[pAC->Index] != NULL) {
+ if (strcmp(Speed_A[pAC->Index],"")==0) {
+ LinkSpeed = SK_LSPEED_AUTO;
+ }
+ else if (strcmp(Speed_A[pAC->Index],"Auto")==0) {
+ LinkSpeed = SK_LSPEED_AUTO;
+ }
+ else if (strcmp(Speed_A[pAC->Index],"10")==0) {
+ LinkSpeed = SK_LSPEED_10MBPS;
+ }
+ else if (strcmp(Speed_A[pAC->Index],"100")==0) {
+ LinkSpeed = SK_LSPEED_100MBPS;
+ }
+ else if (strcmp(Speed_A[pAC->Index],"1000")==0) {
+ LinkSpeed = SK_LSPEED_1000MBPS;
+ }
+ else printk("%s: Illegal value for Speed_A\n",
+ pAC->dev[0]->name);
+ }
+
+ /* Check speed parameter */
+ /* Only copper type adapter and GE V2 cards */
+ if (((pAC->GIni.GIChipId != CHIP_ID_YUKON) ||
+ (pAC->GIni.GICopperType != SK_TRUE)) &&
+ ((LinkSpeed != SK_LSPEED_AUTO) &&
+ (LinkSpeed != SK_LSPEED_1000MBPS))) {
+ printk("%s: Illegal value for Speed_A. "
+ "Not a copper card or GE V2 card\n Using "
+ "speed 1000\n", pAC->dev[0]->name);
+ LinkSpeed = SK_LSPEED_1000MBPS;
+ }
+ pAC->GIni.GP[0].PLinkSpeed = LinkSpeed;
+
+ /* Autonegotiation */
+ AutoNeg = AN_ON; /* tschilling: Default: Autonegotiation on! */
+ AutoSet = SK_FALSE;
+ if (AutoNeg_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ AutoNeg_A[pAC->Index] != NULL) {
+ AutoSet = SK_TRUE;
+ if (strcmp(AutoNeg_A[pAC->Index],"")==0) {
+ AutoSet = SK_FALSE;
+ }
+ else if (strcmp(AutoNeg_A[pAC->Index],"On")==0) {
+ AutoNeg = AN_ON;
+ }
+ else if (strcmp(AutoNeg_A[pAC->Index],"Off")==0) {
+ AutoNeg = AN_OFF;
+ }
+ else if (strcmp(AutoNeg_A[pAC->Index],"Sense")==0) {
+ AutoNeg = AN_SENS;
+ }
+ else printk("%s: Illegal value for AutoNeg_A\n",
+ pAC->dev[0]->name);
+ }
+
+ DuplexCap = DC_BOTH;
+ DupSet = SK_FALSE;
+ if (DupCap_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ DupCap_A[pAC->Index] != NULL) {
+ DupSet = SK_TRUE;
+ if (strcmp(DupCap_A[pAC->Index],"")==0) {
+ DupSet = SK_FALSE;
+ }
+ else if (strcmp(DupCap_A[pAC->Index],"Both")==0) {
+ DuplexCap = DC_BOTH;
+ }
+ else if (strcmp(DupCap_A[pAC->Index],"Full")==0) {
+ DuplexCap = DC_FULL;
+ }
+ else if (strcmp(DupCap_A[pAC->Index],"Half")==0) {
+ DuplexCap = DC_HALF;
+ }
+ else printk("%s: Illegal value for DupCap_A\n",
+ pAC->dev[0]->name);
+ }
+
+ /* check for illegal combinations */
+ if (AutoSet && AutoNeg==AN_SENS && DupSet) {
+ printk("%s, Port A: DuplexCapabilities"
+ " ignored using Sense mode\n", pAC->dev[0]->name);
+ }
+ if (AutoSet && AutoNeg==AN_OFF && DupSet && DuplexCap==DC_BOTH){
+ printk("%s, Port A: Illegal combination"
+ " of values AutoNeg. and DuplexCap.\n Using "
+ "Full Duplex\n", pAC->dev[0]->name);
+
+ DuplexCap = DC_FULL;
+ }
+ if (AutoSet && AutoNeg==AN_OFF && !DupSet) {
+ DuplexCap = DC_FULL;
+ }
+
+ if (!AutoSet && DupSet) {
+ printk("%s, Port A: Duplex setting not"
+ " possible in\n default AutoNegotiation mode"
+ " (Sense).\n Using AutoNegotiation On\n",
+ pAC->dev[0]->name);
+ AutoNeg = AN_ON;
+ }
+
+ /* set the desired mode */
+ pAC->GIni.GP[0].PLinkModeConf =
+ Capabilities[AutoNeg][DuplexCap];
+
+ pAC->GIni.GP[0].PFlowCtrlMode = SK_FLOW_MODE_SYM_OR_REM;
+ if (FlowCtrl_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ FlowCtrl_A[pAC->Index] != NULL) {
+ if (strcmp(FlowCtrl_A[pAC->Index],"") == 0) {
+ }
+ else if (strcmp(FlowCtrl_A[pAC->Index],"SymOrRem") == 0) {
+ pAC->GIni.GP[0].PFlowCtrlMode =
+ SK_FLOW_MODE_SYM_OR_REM;
+ }
+ else if (strcmp(FlowCtrl_A[pAC->Index],"Sym")==0) {
+ pAC->GIni.GP[0].PFlowCtrlMode =
+ SK_FLOW_MODE_SYMMETRIC;
+ }
+ else if (strcmp(FlowCtrl_A[pAC->Index],"LocSend")==0) {
+ pAC->GIni.GP[0].PFlowCtrlMode =
+ SK_FLOW_MODE_LOC_SEND;
+ }
+ else if (strcmp(FlowCtrl_A[pAC->Index],"None")==0) {
+ pAC->GIni.GP[0].PFlowCtrlMode =
+ SK_FLOW_MODE_NONE;
+ }
+ else printk("Illegal value for FlowCtrl_A\n");
+ }
+ if (AutoNeg==AN_OFF && pAC->GIni.GP[0].PFlowCtrlMode!=
+ SK_FLOW_MODE_NONE) {
+ printk("%s, Port A: FlowControl"
+ " impossible without AutoNegotiation,"
+ " disabled\n", pAC->dev[0]->name);
+ pAC->GIni.GP[0].PFlowCtrlMode = SK_FLOW_MODE_NONE;
+ }
+
+ MSMode = SK_MS_MODE_AUTO; /* default: do auto select */
+ if (Role_A != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ Role_A[pAC->Index] != NULL) {
+ if (strcmp(Role_A[pAC->Index],"")==0) {
+ }
+ else if (strcmp(Role_A[pAC->Index],"Auto")==0) {
+ MSMode = SK_MS_MODE_AUTO;
+ }
+ else if (strcmp(Role_A[pAC->Index],"Master")==0) {
+ MSMode = SK_MS_MODE_MASTER;
+ }
+ else if (strcmp(Role_A[pAC->Index],"Slave")==0) {
+ MSMode = SK_MS_MODE_SLAVE;
+ }
+ else printk("%s: Illegal value for Role_A\n",
+ pAC->dev[0]->name);
+ }
+ pAC->GIni.GP[0].PMSMode = MSMode;
+
+
+ /* settings for port B */
+ /* settings link speed */
+ LinkSpeed = SK_LSPEED_AUTO; /* default: do auto select */
+ if (Speed_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ Speed_B[pAC->Index] != NULL) {
+ if (strcmp(Speed_B[pAC->Index],"")==0) {
+ LinkSpeed = SK_LSPEED_AUTO;
+ }
+ else if (strcmp(Speed_B[pAC->Index],"Auto")==0) {
+ LinkSpeed = SK_LSPEED_AUTO;
+ }
+ else if (strcmp(Speed_B[pAC->Index],"10")==0) {
+ LinkSpeed = SK_LSPEED_10MBPS;
+ }
+ else if (strcmp(Speed_B[pAC->Index],"100")==0) {
+ LinkSpeed = SK_LSPEED_100MBPS;
+ }
+ else if (strcmp(Speed_B[pAC->Index],"1000")==0) {
+ LinkSpeed = SK_LSPEED_1000MBPS;
+ }
+ else printk("%s: Illegal value for Speed_B\n",
+ pAC->dev[1]->name);
+ }
+
+ /* Check speed parameter */
+ /* Only copper type adapter and GE V2 cards */
+ if (((pAC->GIni.GIChipId != CHIP_ID_YUKON) ||
+ (pAC->GIni.GICopperType != SK_TRUE)) &&
+ ((LinkSpeed != SK_LSPEED_AUTO) &&
+ (LinkSpeed != SK_LSPEED_1000MBPS))) {
+ printk("%s: Illegal value for Speed_B. "
+ "Not a copper card or GE V2 card\n Using "
+ "speed 1000\n", pAC->dev[1]->name);
+ LinkSpeed = SK_LSPEED_1000MBPS;
+ }
+ pAC->GIni.GP[1].PLinkSpeed = LinkSpeed;
+
+ /* Auto negotiation */
+ AutoNeg = AN_SENS; /* default: do auto Sense */
+ AutoSet = SK_FALSE;
+ if (AutoNeg_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ AutoNeg_B[pAC->Index] != NULL) {
+ AutoSet = SK_TRUE;
+ if (strcmp(AutoNeg_B[pAC->Index],"")==0) {
+ AutoSet = SK_FALSE;
+ }
+ else if (strcmp(AutoNeg_B[pAC->Index],"On")==0) {
+ AutoNeg = AN_ON;
+ }
+ else if (strcmp(AutoNeg_B[pAC->Index],"Off")==0) {
+ AutoNeg = AN_OFF;
+ }
+ else if (strcmp(AutoNeg_B[pAC->Index],"Sense")==0) {
+ AutoNeg = AN_SENS;
+ }
+ else printk("Illegal value for AutoNeg_B\n");
+ }
+
+ DuplexCap = DC_BOTH;
+ DupSet = SK_FALSE;
+ if (DupCap_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ DupCap_B[pAC->Index] != NULL) {
+ DupSet = SK_TRUE;
+ if (strcmp(DupCap_B[pAC->Index],"")==0) {
+ DupSet = SK_FALSE;
+ }
+ else if (strcmp(DupCap_B[pAC->Index],"Both")==0) {
+ DuplexCap = DC_BOTH;
+ }
+ else if (strcmp(DupCap_B[pAC->Index],"Full")==0) {
+ DuplexCap = DC_FULL;
+ }
+ else if (strcmp(DupCap_B[pAC->Index],"Half")==0) {
+ DuplexCap = DC_HALF;
+ }
+ else printk("Illegal value for DupCap_B\n");
+ }
+
+ /* check for illegal combinations */
+ if (AutoSet && AutoNeg==AN_SENS && DupSet) {
+ printk("%s, Port B: DuplexCapabilities"
+ " ignored using Sense mode\n", pAC->dev[1]->name);
+ }
+ if (AutoSet && AutoNeg==AN_OFF && DupSet && DuplexCap==DC_BOTH){
+ printk("%s, Port B: Illegal combination"
+ " of values AutoNeg. and DuplexCap.\n Using "
+ "Full Duplex\n", pAC->dev[1]->name);
+
+ DuplexCap = DC_FULL;
+ }
+ if (AutoSet && AutoNeg==AN_OFF && !DupSet) {
+ DuplexCap = DC_FULL;
+ }
+
+ if (!AutoSet && DupSet) {
+ printk("%s, Port B: Duplex setting not"
+ " possible in\n default AutoNegotiation mode"
+ " (Sense).\n Using AutoNegotiation On\n",
+ pAC->dev[1]->name);
+ AutoNeg = AN_ON;
+ }
+
+ /* set the desired mode */
+ pAC->GIni.GP[1].PLinkModeConf =
+ Capabilities[AutoNeg][DuplexCap];
+
+ pAC->GIni.GP[1].PFlowCtrlMode = SK_FLOW_MODE_SYM_OR_REM;
+ if (FlowCtrl_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ FlowCtrl_B[pAC->Index] != NULL) {
+ if (strcmp(FlowCtrl_B[pAC->Index],"") == 0) {
+ }
+ else if (strcmp(FlowCtrl_B[pAC->Index],"SymOrRem") == 0) {
+ pAC->GIni.GP[1].PFlowCtrlMode =
+ SK_FLOW_MODE_SYM_OR_REM;
+ }
+ else if (strcmp(FlowCtrl_B[pAC->Index],"Sym")==0) {
+ pAC->GIni.GP[1].PFlowCtrlMode =
+ SK_FLOW_MODE_SYMMETRIC;
+ }
+ else if (strcmp(FlowCtrl_B[pAC->Index],"LocSend")==0) {
+ pAC->GIni.GP[1].PFlowCtrlMode =
+ SK_FLOW_MODE_LOC_SEND;
+ }
+ else if (strcmp(FlowCtrl_B[pAC->Index],"None")==0) {
+ pAC->GIni.GP[1].PFlowCtrlMode =
+ SK_FLOW_MODE_NONE;
+ }
+ else printk("Illegal value for FlowCtrl_B\n");
+ }
+ if (AutoNeg==AN_OFF && pAC->GIni.GP[1].PFlowCtrlMode!=
+ SK_FLOW_MODE_NONE) {
+ printk("%s, Port B: FlowControl"
+ " impossible without AutoNegotiation,"
+ " disabled\n", pAC->dev[1]->name);
+ pAC->GIni.GP[1].PFlowCtrlMode = SK_FLOW_MODE_NONE;
+ }
+
+ MSMode = SK_MS_MODE_AUTO; /* default: do auto select */
+ if (Role_B != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ Role_B[pAC->Index] != NULL) {
+ if (strcmp(Role_B[pAC->Index],"")==0) {
+ }
+ else if (strcmp(Role_B[pAC->Index],"Auto")==0) {
+ MSMode = SK_MS_MODE_AUTO;
+ }
+ else if (strcmp(Role_B[pAC->Index],"Master")==0) {
+ MSMode = SK_MS_MODE_MASTER;
+ }
+ else if (strcmp(Role_B[pAC->Index],"Slave")==0) {
+ MSMode = SK_MS_MODE_SLAVE;
+ }
+ else printk("%s: Illegal value for Role_B\n",
+ pAC->dev[1]->name);
+ }
+ pAC->GIni.GP[1].PMSMode = MSMode;
+
+
+ /* settings for both ports */
+ pAC->ActivePort = 0;
+ if (PrefPort != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ PrefPort[pAC->Index] != NULL) {
+ if (strcmp(PrefPort[pAC->Index],"") == 0) { /* Auto */
+ pAC->ActivePort = 0;
+ pAC->Rlmt.Net[0].Preference = -1; /* auto */
+ pAC->Rlmt.Net[0].PrefPort = 0;
+ }
+ else if (strcmp(PrefPort[pAC->Index],"A") == 0) {
+ /*
+ * do not set ActivePort here, thus a port
+ * switch is issued after net up.
+ */
+ Port = 0;
+ pAC->Rlmt.Net[0].Preference = Port;
+ pAC->Rlmt.Net[0].PrefPort = Port;
+ }
+ else if (strcmp(PrefPort[pAC->Index],"B") == 0) {
+ /*
+ * do not set ActivePort here, thus a port
+ * switch is issued after net up.
+ */
+ Port = 1;
+ pAC->Rlmt.Net[0].Preference = Port;
+ pAC->Rlmt.Net[0].PrefPort = Port;
+ }
+ else printk("%s: Illegal value for PrefPort\n",
+ pAC->dev[0]->name);
+ }
+
+ pAC->RlmtNets = 1;
+
+ if (RlmtMode != NULL && pAC->Index<SK_MAX_CARD_PARAM &&
+ RlmtMode[pAC->Index] != NULL) {
+ if (strcmp(RlmtMode[pAC->Index], "") == 0) {
+ pAC->RlmtMode = 0;
+ }
+ else if (strcmp(RlmtMode[pAC->Index], "CheckLinkState") == 0) {
+ pAC->RlmtMode = SK_RLMT_CHECK_LINK;
+ }
+ else if (strcmp(RlmtMode[pAC->Index], "CheckLocalPort") == 0) {
+ pAC->RlmtMode = SK_RLMT_CHECK_LINK |
+ SK_RLMT_CHECK_LOC_LINK;
+ }
+ else if (strcmp(RlmtMode[pAC->Index], "CheckSeg") == 0) {
+ pAC->RlmtMode = SK_RLMT_CHECK_LINK |
+ SK_RLMT_CHECK_LOC_LINK |
+ SK_RLMT_CHECK_SEG;
+ }
+ else if ((strcmp(RlmtMode[pAC->Index], "DualNet") == 0) &&
+ (pAC->GIni.GIMacsFound == 2)) {
+ pAC->RlmtMode = SK_RLMT_CHECK_LINK;
+ pAC->RlmtNets = 2;
+ }
+ else {
+ printk("%s: Illegal value for"
+ " RlmtMode, using default\n", pAC->dev[0]->name);
+ pAC->RlmtMode = 0;
+ }
+ }
+ else {
+ pAC->RlmtMode = 0;
+ }
+} /* GetConfiguration */
+
+
+/*****************************************************************************
+ *
+ * ProductStr - return a adapter identification string from vpd
+ *
+ * Description:
+ * This function reads the product name string from the vpd area
+ * and puts it the field pAC->DeviceString.
+ *
+ * Returns: N/A
+ */
+static void ProductStr(
+SK_AC *pAC /* pointer to adapter context */
+)
+{
+int StrLen = 80; /* length of the string, defined in SK_AC */
+char Keyword[] = VPD_NAME; /* vpd productname identifier */
+int ReturnCode; /* return code from vpd_read */
+unsigned long Flags;
+
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ ReturnCode = VpdRead(pAC, pAC->IoBase, Keyword, pAC->DeviceStr,
+ &StrLen);
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+ if (ReturnCode != 0) {
+ /* there was an error reading the vpd data */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ERROR,
+ ("Error reading VPD data: %d\n", ReturnCode));
+ pAC->DeviceStr[0] = '\0';
+ }
+} /* ProductStr */
+
+
+/****************************************************************************/
+/* functions for common modules *********************************************/
+/****************************************************************************/
+
+
+/*****************************************************************************
+ *
+ * SkDrvAllocRlmtMbuf - allocate an RLMT mbuf
+ *
+ * Description:
+ * This routine returns an RLMT mbuf or NULL. The RLMT Mbuf structure
+ * is embedded into a socket buff data area.
+ *
+ * Context:
+ * runtime
+ *
+ * Returns:
+ * NULL or pointer to Mbuf.
+ */
+SK_MBUF *SkDrvAllocRlmtMbuf(
+SK_AC *pAC, /* pointer to adapter context */
+SK_IOC IoC, /* the IO-context */
+unsigned BufferSize) /* size of the requested buffer */
+{
+SK_MBUF *pRlmtMbuf; /* pointer to a new rlmt-mbuf structure */
+struct sk_buff *pMsgBlock; /* pointer to a new message block */
+
+ pMsgBlock = alloc_skb(BufferSize + sizeof(SK_MBUF), GFP_ATOMIC);
+ if (pMsgBlock == NULL) {
+ return (NULL);
+ }
+ pRlmtMbuf = (SK_MBUF*) pMsgBlock->data;
+ skb_reserve(pMsgBlock, sizeof(SK_MBUF));
+ pRlmtMbuf->pNext = NULL;
+ pRlmtMbuf->pOs = pMsgBlock;
+ pRlmtMbuf->pData = pMsgBlock->data; /* Data buffer. */
+ pRlmtMbuf->Size = BufferSize; /* Data buffer size. */
+ pRlmtMbuf->Length = 0; /* Length of packet (<= Size). */
+ return (pRlmtMbuf);
+
+} /* SkDrvAllocRlmtMbuf */
+
+
+/*****************************************************************************
+ *
+ * SkDrvFreeRlmtMbuf - free an RLMT mbuf
+ *
+ * Description:
+ * This routine frees one or more RLMT mbuf(s).
+ *
+ * Context:
+ * runtime
+ *
+ * Returns:
+ * Nothing
+ */
+void SkDrvFreeRlmtMbuf(
+SK_AC *pAC, /* pointer to adapter context */
+SK_IOC IoC, /* the IO-context */
+SK_MBUF *pMbuf) /* size of the requested buffer */
+{
+SK_MBUF *pFreeMbuf;
+SK_MBUF *pNextMbuf;
+
+ pFreeMbuf = pMbuf;
+ do {
+ pNextMbuf = pFreeMbuf->pNext;
+ DEV_KFREE_SKB_ANY(pFreeMbuf->pOs);
+ pFreeMbuf = pNextMbuf;
+ } while ( pFreeMbuf != NULL );
+} /* SkDrvFreeRlmtMbuf */
+
+
+/*****************************************************************************
+ *
+ * SkOsGetTime - provide a time value
+ *
+ * Description:
+ * This routine provides a time value. The unit is 1/HZ (defined by Linux).
+ * It is not used for absolute time, but only for time differences.
+ *
+ *
+ * Returns:
+ * Time value
+ */
+SK_U64 SkOsGetTime(SK_AC *pAC)
+{
+#if 0
+ return jiffies;
+#else
+ return get_timer(0);
+#endif
+} /* SkOsGetTime */
+
+
+/*****************************************************************************
+ *
+ * SkPciReadCfgDWord - read a 32 bit value from pci config space
+ *
+ * Description:
+ * This routine reads a 32 bit value from the pci configuration
+ * space.
+ *
+ * Returns:
+ * 0 - indicate everything worked ok.
+ * != 0 - error indication
+ */
+int SkPciReadCfgDWord(
+SK_AC *pAC, /* Adapter Control structure pointer */
+int PciAddr, /* PCI register address */
+SK_U32 *pVal) /* pointer to store the read value */
+{
+ pci_read_config_dword(pAC->PciDev, PciAddr, pVal);
+ return(0);
+} /* SkPciReadCfgDWord */
+
+
+/*****************************************************************************
+ *
+ * SkPciReadCfgWord - read a 16 bit value from pci config space
+ *
+ * Description:
+ * This routine reads a 16 bit value from the pci configuration
+ * space.
+ *
+ * Returns:
+ * 0 - indicate everything worked ok.
+ * != 0 - error indication
+ */
+int SkPciReadCfgWord(
+SK_AC *pAC, /* Adapter Control structure pointer */
+int PciAddr, /* PCI register address */
+SK_U16 *pVal) /* pointer to store the read value */
+{
+ pci_read_config_word(pAC->PciDev, PciAddr, pVal);
+ return(0);
+} /* SkPciReadCfgWord */
+
+
+/*****************************************************************************
+ *
+ * SkPciReadCfgByte - read a 8 bit value from pci config space
+ *
+ * Description:
+ * This routine reads a 8 bit value from the pci configuration
+ * space.
+ *
+ * Returns:
+ * 0 - indicate everything worked ok.
+ * != 0 - error indication
+ */
+int SkPciReadCfgByte(
+SK_AC *pAC, /* Adapter Control structure pointer */
+int PciAddr, /* PCI register address */
+SK_U8 *pVal) /* pointer to store the read value */
+{
+ pci_read_config_byte(pAC->PciDev, PciAddr, pVal);
+ return(0);
+} /* SkPciReadCfgByte */
+
+
+/*****************************************************************************
+ *
+ * SkPciWriteCfgDWord - write a 32 bit value to pci config space
+ *
+ * Description:
+ * This routine writes a 32 bit value to the pci configuration
+ * space.
+ *
+ * Returns:
+ * 0 - indicate everything worked ok.
+ * != 0 - error indication
+ */
+int SkPciWriteCfgDWord(
+SK_AC *pAC, /* Adapter Control structure pointer */
+int PciAddr, /* PCI register address */
+SK_U32 Val) /* pointer to store the read value */
+{
+ pci_write_config_dword(pAC->PciDev, PciAddr, Val);
+ return(0);
+} /* SkPciWriteCfgDWord */
+
+
+/*****************************************************************************
+ *
+ * SkPciWriteCfgWord - write a 16 bit value to pci config space
+ *
+ * Description:
+ * This routine writes a 16 bit value to the pci configuration
+ * space. The flag PciConfigUp indicates whether the config space
+ * is accesible or must be set up first.
+ *
+ * Returns:
+ * 0 - indicate everything worked ok.
+ * != 0 - error indication
+ */
+int SkPciWriteCfgWord(
+SK_AC *pAC, /* Adapter Control structure pointer */
+int PciAddr, /* PCI register address */
+SK_U16 Val) /* pointer to store the read value */
+{
+ pci_write_config_word(pAC->PciDev, PciAddr, Val);
+ return(0);
+} /* SkPciWriteCfgWord */
+
+
+/*****************************************************************************
+ *
+ * SkPciWriteCfgWord - write a 8 bit value to pci config space
+ *
+ * Description:
+ * This routine writes a 8 bit value to the pci configuration
+ * space. The flag PciConfigUp indicates whether the config space
+ * is accesible or must be set up first.
+ *
+ * Returns:
+ * 0 - indicate everything worked ok.
+ * != 0 - error indication
+ */
+int SkPciWriteCfgByte(
+SK_AC *pAC, /* Adapter Control structure pointer */
+int PciAddr, /* PCI register address */
+SK_U8 Val) /* pointer to store the read value */
+{
+ pci_write_config_byte(pAC->PciDev, PciAddr, Val);
+ return(0);
+} /* SkPciWriteCfgByte */
+
+
+/*****************************************************************************
+ *
+ * SkDrvEvent - handle driver events
+ *
+ * Description:
+ * This function handles events from all modules directed to the driver
+ *
+ * Context:
+ * Is called under protection of slow path lock.
+ *
+ * Returns:
+ * 0 if everything ok
+ * < 0 on error
+ *
+ */
+int SkDrvEvent(
+SK_AC *pAC, /* pointer to adapter context */
+SK_IOC IoC, /* io-context */
+SK_U32 Event, /* event-id */
+SK_EVPARA Param) /* event-parameter */
+{
+SK_MBUF *pRlmtMbuf; /* pointer to a rlmt-mbuf structure */
+struct sk_buff *pMsg; /* pointer to a message block */
+int FromPort; /* the port from which we switch away */
+int ToPort; /* the port we switch to */
+SK_EVPARA NewPara; /* parameter for further events */
+#if 0
+int Stat;
+#endif
+unsigned long Flags;
+SK_BOOL DualNet;
+
+ switch (Event) {
+ case SK_DRV_ADAP_FAIL:
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("ADAPTER FAIL EVENT\n"));
+ printk("%s: Adapter failed.\n", pAC->dev[0]->name);
+ /* disable interrupts */
+ SK_OUT32(pAC->IoBase, B0_IMSK, 0);
+ /* cgoos */
+ break;
+ case SK_DRV_PORT_FAIL:
+ FromPort = Param.Para32[0];
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("PORT FAIL EVENT, Port: %d\n", FromPort));
+ if (FromPort == 0) {
+ printk("%s: Port A failed.\n", pAC->dev[0]->name);
+ } else {
+ printk("%s: Port B failed.\n", pAC->dev[1]->name);
+ }
+ /* cgoos */
+ break;
+ case SK_DRV_PORT_RESET: /* SK_U32 PortIdx */
+ /* action list 4 */
+ FromPort = Param.Para32[0];
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("PORT RESET EVENT, Port: %d ", FromPort));
+ NewPara.Para64 = FromPort;
+ SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_XMAC_RESET, NewPara);
+ spin_lock_irqsave(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+ SkGeStopPort(pAC, IoC, FromPort, SK_STOP_ALL, SK_HARD_RST);
+#if 0
+ pAC->dev[Param.Para32[0]]->flags &= ~IFF_RUNNING;
+#endif
+ spin_unlock_irqrestore(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+
+ /* clear rx ring from received frames */
+ ReceiveIrq(pAC, &pAC->RxPort[FromPort], SK_FALSE);
+
+ ClearTxRing(pAC, &pAC->TxPort[FromPort][TX_PRIO_LOW]);
+ spin_lock_irqsave(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+
+ /* tschilling: Handling of return value inserted. */
+ if (SkGeInitPort(pAC, IoC, FromPort)) {
+ if (FromPort == 0) {
+ printk("%s: SkGeInitPort A failed.\n", pAC->dev[0]->name);
+ } else {
+ printk("%s: SkGeInitPort B failed.\n", pAC->dev[1]->name);
+ }
+ }
+ SkAddrMcUpdate(pAC,IoC, FromPort);
+ PortReInitBmu(pAC, FromPort);
+ SkGePollTxD(pAC, IoC, FromPort, SK_TRUE);
+ ClearAndStartRx(pAC, FromPort);
+ spin_unlock_irqrestore(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+ break;
+ case SK_DRV_NET_UP: /* SK_U32 PortIdx */
+ /* action list 5 */
+ FromPort = Param.Para32[0];
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("NET UP EVENT, Port: %d ", Param.Para32[0]));
+#ifdef SK98_INFO
+ printk("%s: network connection up using"
+ " port %c\n", pAC->dev[Param.Para32[0]]->name, 'A'+Param.Para32[0]);
+
+ /* tschilling: Values changed according to LinkSpeedUsed. */
+ Stat = pAC->GIni.GP[FromPort].PLinkSpeedUsed;
+ if (Stat == SK_LSPEED_STAT_10MBPS) {
+ printk(" speed: 10\n");
+ } else if (Stat == SK_LSPEED_STAT_100MBPS) {
+ printk(" speed: 100\n");
+ } else if (Stat == SK_LSPEED_STAT_1000MBPS) {
+ printk(" speed: 1000\n");
+ } else {
+ printk(" speed: unknown\n");
+ }
+
+ Stat = pAC->GIni.GP[FromPort].PLinkModeStatus;
+ if (Stat == SK_LMODE_STAT_AUTOHALF ||
+ Stat == SK_LMODE_STAT_AUTOFULL) {
+ printk(" autonegotiation: yes\n");
+ }
+ else {
+ printk(" autonegotiation: no\n");
+ }
+ if (Stat == SK_LMODE_STAT_AUTOHALF ||
+ Stat == SK_LMODE_STAT_HALF) {
+ printk(" duplex mode: half\n");
+ }
+ else {
+ printk(" duplex mode: full\n");
+ }
+ Stat = pAC->GIni.GP[FromPort].PFlowCtrlStatus;
+ if (Stat == SK_FLOW_STAT_REM_SEND ) {
+ printk(" flowctrl: remote send\n");
+ }
+ else if (Stat == SK_FLOW_STAT_LOC_SEND ){
+ printk(" flowctrl: local send\n");
+ }
+ else if (Stat == SK_FLOW_STAT_SYMMETRIC ){
+ printk(" flowctrl: symmetric\n");
+ }
+ else {
+ printk(" flowctrl: none\n");
+ }
+
+ /* tschilling: Check against CopperType now. */
+ if ((pAC->GIni.GICopperType == SK_TRUE) &&
+ (pAC->GIni.GP[FromPort].PLinkSpeedUsed ==
+ SK_LSPEED_STAT_1000MBPS)) {
+ Stat = pAC->GIni.GP[FromPort].PMSStatus;
+ if (Stat == SK_MS_STAT_MASTER ) {
+ printk(" role: master\n");
+ }
+ else if (Stat == SK_MS_STAT_SLAVE ) {
+ printk(" role: slave\n");
+ }
+ else {
+ printk(" role: ???\n");
+ }
+ }
+
+#ifdef SK_ZEROCOPY
+ if (pAC->GIni.GIChipId == CHIP_ID_YUKON)
+ printk(" scatter-gather: enabled\n");
+ else
+ printk(" scatter-gather: disabled\n");
+
+#else
+ printk(" scatter-gather: disabled\n");
+#endif
+#endif /* SK98_INFO */
+
+ if ((Param.Para32[0] != pAC->ActivePort) &&
+ (pAC->RlmtNets == 1)) {
+ NewPara.Para32[0] = pAC->ActivePort;
+ NewPara.Para32[1] = Param.Para32[0];
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_SWITCH_INTERN,
+ NewPara);
+ }
+
+ /* Inform the world that link protocol is up. */
+#if 0
+ pAC->dev[Param.Para32[0]]->flags |= IFF_RUNNING;
+#endif
+
+ break;
+ case SK_DRV_NET_DOWN: /* SK_U32 Reason */
+ /* action list 7 */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("NET DOWN EVENT "));
+#ifdef SK98_INFO
+ printk("%s: network connection down\n", pAC->dev[Param.Para32[1]]->name);
+#endif
+#if 0
+ pAC->dev[Param.Para32[1]]->flags &= ~IFF_RUNNING;
+#endif
+ break;
+ case SK_DRV_SWITCH_HARD: /* SK_U32 FromPortIdx SK_U32 ToPortIdx */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("PORT SWITCH HARD "));
+ case SK_DRV_SWITCH_SOFT: /* SK_U32 FromPortIdx SK_U32 ToPortIdx */
+ /* action list 6 */
+ printk("%s: switching to port %c\n", pAC->dev[0]->name,
+ 'A'+Param.Para32[1]);
+ case SK_DRV_SWITCH_INTERN: /* SK_U32 FromPortIdx SK_U32 ToPortIdx */
+ FromPort = Param.Para32[0];
+ ToPort = Param.Para32[1];
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("PORT SWITCH EVENT, From: %d To: %d (Pref %d) ",
+ FromPort, ToPort, pAC->Rlmt.Net[0].PrefPort));
+ NewPara.Para64 = FromPort;
+ SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_XMAC_RESET, NewPara);
+ NewPara.Para64 = ToPort;
+ SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_XMAC_RESET, NewPara);
+ spin_lock_irqsave(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+ spin_lock_irqsave(
+ &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
+ SkGeStopPort(pAC, IoC, FromPort, SK_STOP_ALL, SK_SOFT_RST);
+ SkGeStopPort(pAC, IoC, ToPort, SK_STOP_ALL, SK_SOFT_RST);
+ spin_unlock_irqrestore(
+ &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
+ spin_unlock_irqrestore(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+
+ ReceiveIrq(pAC, &pAC->RxPort[FromPort], SK_FALSE); /* clears rx ring */
+ ReceiveIrq(pAC, &pAC->RxPort[ToPort], SK_FALSE); /* clears rx ring */
+
+ ClearTxRing(pAC, &pAC->TxPort[FromPort][TX_PRIO_LOW]);
+ ClearTxRing(pAC, &pAC->TxPort[ToPort][TX_PRIO_LOW]);
+ spin_lock_irqsave(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+ spin_lock_irqsave(
+ &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
+ pAC->ActivePort = ToPort;
+#if 0
+ SetQueueSizes(pAC);
+#else
+ /* tschilling: New common function with minimum size check. */
+ DualNet = SK_FALSE;
+ if (pAC->RlmtNets == 2) {
+ DualNet = SK_TRUE;
+ }
+
+ if (SkGeInitAssignRamToQueues(
+ pAC,
+ pAC->ActivePort,
+ DualNet)) {
+ spin_unlock_irqrestore(
+ &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
+ spin_unlock_irqrestore(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+ printk("SkGeInitAssignRamToQueues failed.\n");
+ break;
+ }
+#endif
+ /* tschilling: Handling of return values inserted. */
+ if (SkGeInitPort(pAC, IoC, FromPort) ||
+ SkGeInitPort(pAC, IoC, ToPort)) {
+ printk("%s: SkGeInitPort failed.\n", pAC->dev[0]->name);
+ }
+ if (Event == SK_DRV_SWITCH_SOFT) {
+ SkMacRxTxEnable(pAC, IoC, FromPort);
+ }
+ SkMacRxTxEnable(pAC, IoC, ToPort);
+ SkAddrSwap(pAC, IoC, FromPort, ToPort);
+ SkAddrMcUpdate(pAC, IoC, FromPort);
+ SkAddrMcUpdate(pAC, IoC, ToPort);
+ PortReInitBmu(pAC, FromPort);
+ PortReInitBmu(pAC, ToPort);
+ SkGePollTxD(pAC, IoC, FromPort, SK_TRUE);
+ SkGePollTxD(pAC, IoC, ToPort, SK_TRUE);
+ ClearAndStartRx(pAC, FromPort);
+ ClearAndStartRx(pAC, ToPort);
+ spin_unlock_irqrestore(
+ &pAC->TxPort[ToPort][TX_PRIO_LOW].TxDesRingLock, Flags);
+ spin_unlock_irqrestore(
+ &pAC->TxPort[FromPort][TX_PRIO_LOW].TxDesRingLock,
+ Flags);
+ break;
+ case SK_DRV_RLMT_SEND: /* SK_MBUF *pMb */
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("RLS "));
+ pRlmtMbuf = (SK_MBUF*) Param.pParaPtr;
+ pMsg = (struct sk_buff*) pRlmtMbuf->pOs;
+ skb_put(pMsg, pRlmtMbuf->Length);
+ if (XmitFrame(pAC, &pAC->TxPort[pRlmtMbuf->PortIdx][TX_PRIO_LOW],
+ pMsg) < 0)
+
+ DEV_KFREE_SKB_ANY(pMsg);
+ break;
+ default:
+ break;
+ }
+ SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_EVENT,
+ ("END EVENT "));
+
+ return (0);
+} /* SkDrvEvent */
+
+
+/*****************************************************************************
+ *
+ * SkErrorLog - log errors
+ *
+ * Description:
+ * This function logs errors to the system buffer and to the console
+ *
+ * Returns:
+ * 0 if everything ok
+ * < 0 on error
+ *
+ */
+void SkErrorLog(
+SK_AC *pAC,
+int ErrClass,
+int ErrNum,
+char *pErrorMsg)
+{
+char ClassStr[80];
+
+ switch (ErrClass) {
+ case SK_ERRCL_OTHER:
+ strcpy(ClassStr, "Other error");
+ break;
+ case SK_ERRCL_CONFIG:
+ strcpy(ClassStr, "Configuration error");
+ break;
+ case SK_ERRCL_INIT:
+ strcpy(ClassStr, "Initialization error");
+ break;
+ case SK_ERRCL_NORES:
+ strcpy(ClassStr, "Out of resources error");
+ break;
+ case SK_ERRCL_SW:
+ strcpy(ClassStr, "internal Software error");
+ break;
+ case SK_ERRCL_HW:
+ strcpy(ClassStr, "Hardware failure");
+ break;
+ case SK_ERRCL_COMM:
+ strcpy(ClassStr, "Communication error");
+ break;
+ }
+ printk(KERN_INFO "%s: -- ERROR --\n Class: %s\n"
+ " Nr: 0x%x\n Msg: %s\n", pAC->dev[0]->name,
+ ClassStr, ErrNum, pErrorMsg);
+
+} /* SkErrorLog */
+
+#ifdef DEBUG
+/****************************************************************************/
+/* "debug only" section *****************************************************/
+/****************************************************************************/
+
+
+/*****************************************************************************
+ *
+ * DumpMsg - print a frame
+ *
+ * Description:
+ * This function prints frames to the system logfile/to the console.
+ *
+ * Returns: N/A
+ *
+ */
+static void DumpMsg(struct sk_buff *skb, char *str)
+{
+ int msglen;
+
+ if (skb == NULL) {
+ printk("DumpMsg(): NULL-Message\n");
+ return;
+ }
+
+ if (skb->data == NULL) {
+ printk("DumpMsg(): Message empty\n");
+ return;
+ }
+
+ msglen = skb->len;
+ if (msglen > 64)
+ msglen = 64;
+
+ printk("--- Begin of message from %s , len %d (from %d) ----\n", str, msglen, skb->len);
+
+ DumpData((char *)skb->data, msglen);
+
+ printk("------- End of message ---------\n");
+} /* DumpMsg */
+
+
+/*****************************************************************************
+ *
+ * DumpData - print a data area
+ *
+ * Description:
+ * This function prints a area of data to the system logfile/to the
+ * console.
+ *
+ * Returns: N/A
+ *
+ */
+static void DumpData(char *p, int size)
+{
+register int i;
+int haddr, addr;
+char hex_buffer[180];
+char asc_buffer[180];
+char HEXCHAR[] = "0123456789ABCDEF";
+
+ addr = 0;
+ haddr = 0;
+ hex_buffer[0] = 0;
+ asc_buffer[0] = 0;
+ for (i=0; i < size; ) {
+ if (*p >= '0' && *p <='z')
+ asc_buffer[addr] = *p;
+ else
+ asc_buffer[addr] = '.';
+ addr++;
+ asc_buffer[addr] = 0;
+ hex_buffer[haddr] = HEXCHAR[(*p & 0xf0) >> 4];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[*p & 0x0f];
+ haddr++;
+ hex_buffer[haddr] = ' ';
+ haddr++;
+ hex_buffer[haddr] = 0;
+ p++;
+ i++;
+ if (i%16 == 0) {
+ printk("%s %s\n", hex_buffer, asc_buffer);
+ addr = 0;
+ haddr = 0;
+ }
+ }
+} /* DumpData */
+
+
+/*****************************************************************************
+ *
+ * DumpLong - print a data area as long values
+ *
+ * Description:
+ * This function prints a area of data to the system logfile/to the
+ * console.
+ *
+ * Returns: N/A
+ *
+ */
+static void DumpLong(char *pc, int size)
+{
+register int i;
+int haddr, addr;
+char hex_buffer[180];
+char asc_buffer[180];
+char HEXCHAR[] = "0123456789ABCDEF";
+long *p;
+int l;
+
+ addr = 0;
+ haddr = 0;
+ hex_buffer[0] = 0;
+ asc_buffer[0] = 0;
+ p = (long*) pc;
+ for (i=0; i < size; ) {
+ l = (long) *p;
+ hex_buffer[haddr] = HEXCHAR[(l >> 28) & 0xf];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[(l >> 24) & 0xf];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[(l >> 20) & 0xf];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[(l >> 16) & 0xf];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[(l >> 12) & 0xf];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[(l >> 8) & 0xf];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[(l >> 4) & 0xf];
+ haddr++;
+ hex_buffer[haddr] = HEXCHAR[l & 0x0f];
+ haddr++;
+ hex_buffer[haddr] = ' ';
+ haddr++;
+ hex_buffer[haddr] = 0;
+ p++;
+ i++;
+ if (i%8 == 0) {
+ printk("%4x %s\n", (i-8)*4, hex_buffer);
+ haddr = 0;
+ }
+ }
+ printk("------------------------\n");
+} /* DumpLong */
+
+#endif
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skgehwt.c u-boot-2009.03/drivers/net/sk98lin/skgehwt.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skgehwt.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skgehwt.c 2009-03-31 14:54:29.393756000 -0700
@@ -1,215 +1,218 @@
-/******************************************************************************
- *
- * Name: skgehwt.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.13 $
- * Date: $Date: 1999/11/22 13:31:12 $
- * Purpose: Hardware Timer.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998,1999 SysKonnect,
- * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skgehwt.c,v $
- * Revision 1.13 1999/11/22 13:31:12 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.12 1998/10/15 15:11:34 gklug
- * fix: ID_sccs to SysKonnectFileId
- *
- * Revision 1.11 1998/10/08 15:27:51 gklug
- * chg: correction factor is host clock dependent
- *
- * Revision 1.10 1998/09/15 14:18:31 cgoos
- * Changed more BOOLEANs to SK_xxx
- *
- * Revision 1.9 1998/09/15 14:16:06 cgoos
- * Changed line 107: FALSE to SK_FALSE
- *
- * Revision 1.8 1998/08/24 13:04:44 gklug
- * fix: typo
- *
- * Revision 1.7 1998/08/19 09:50:49 gklug
- * fix: remove struct keyword from c-code (see CCC) add typedefs
- *
- * Revision 1.6 1998/08/17 09:59:02 gklug
- * fix: typos
- *
- * Revision 1.5 1998/08/14 07:09:10 gklug
- * fix: chg pAc -> pAC
- *
- * Revision 1.4 1998/08/10 14:14:52 gklug
- * rmv: unneccessary SK_ADDR macro
- *
- * Revision 1.3 1998/08/07 12:53:44 gklug
- * fix: first compiled version
- *
- * Revision 1.2 1998/08/07 09:19:29 gklug
- * adapt functions to the C coding conventions
- * rmv unneccessary functions.
- *
- * Revision 1.1 1998/08/05 11:28:36 gklug
- * first version: adapted from SMT/FDDI
- *
- *
- *
- *
- ******************************************************************************/
-
-
-#include <config.h>
-
-/*
- Event queue and dispatcher
-*/
-static const char SysKonnectFileId[] =
- "$Header: /usr56/projects/ge/schedule/skgehwt.c,v 1.13 1999/11/22 13:31:12 cgoos Exp $" ;
-
-#include "h/skdrv1st.h" /* Driver Specific Definitions */
-#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
-
-#ifdef __C2MAN__
-/*
- Hardware Timer function queue management.
-
- General Description:
-
- */
-intro()
-{}
-#endif
-
-/*
- * Prototypes of local functions.
- */
-#define SK_HWT_MAX (65000)
-
-/* correction factor */
-#define SK_HWT_FAC (1000 * (SK_U32)pAC->GIni.GIHstClkFact / 100)
-
-/*
- * Initialize hardware timer.
- *
- * Must be called during init level 1.
- */
-void SkHwtInit(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc) /* IoContext */
-{
- pAC->Hwt.TStart = 0 ;
- pAC->Hwt.TStop = 0 ;
- pAC->Hwt.TActive = SK_FALSE ;
-
- SkHwtStop(pAC,Ioc) ;
-}
-
-/*
- *
- * Start hardware timer (clock ticks are 16us).
- *
- */
-void SkHwtStart(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc, /* IoContext */
-SK_U32 Time) /* Time in units of 16us to load the timer with. */
-{
- SK_U32 Cnt ;
-
- if (Time > SK_HWT_MAX)
- Time = SK_HWT_MAX ;
-
- pAC->Hwt.TStart = Time ;
- pAC->Hwt.TStop = 0L ;
-
- Cnt = Time ;
-
- /*
- * if time < 16 us
- * time = 16 us
- */
- if (!Cnt) {
- Cnt++ ;
- }
-
- SK_OUT32(Ioc, B2_TI_INI, Cnt * SK_HWT_FAC) ;
- SK_OUT16(Ioc, B2_TI_CRTL, TIM_START) ; /* Start timer. */
-
- pAC->Hwt.TActive = SK_TRUE ;
-}
-
-/*
- * Stop hardware timer.
- * and clear the timer IRQ
- */
-void SkHwtStop(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc) /* IoContext */
-{
- SK_OUT16(Ioc, B2_TI_CRTL, TIM_STOP) ;
- SK_OUT16(Ioc, B2_TI_CRTL, TIM_CLR_IRQ) ;
-
- pAC->Hwt.TActive = SK_FALSE ;
-}
-
-
-/*
- * Stop hardware timer and read time elapsed since last start.
- *
- * returns
- * The elapsed time since last start in units of 16us.
- *
- */
-SK_U32 SkHwtRead(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc) /* IoContext */
-{
- SK_U32 TRead ;
- SK_U32 IStatus ;
-
- if (pAC->Hwt.TActive) {
- SkHwtStop(pAC,Ioc) ;
-
- SK_IN32(Ioc, B2_TI_VAL, &TRead);
- TRead /= SK_HWT_FAC;
-
- SK_IN32(Ioc, B0_ISRC, &IStatus);
-
- /* Check if timer expired (or wraparound). */
- if ((TRead > pAC->Hwt.TStart) || (IStatus & IS_TIMINT)) {
- SkHwtStop(pAC,Ioc) ;
- pAC->Hwt.TStop = pAC->Hwt.TStart ;
- } else {
- pAC->Hwt.TStop = pAC->Hwt.TStart - TRead ;
- }
- }
- return (pAC->Hwt.TStop) ;
-}
-
-/*
- * interrupt source= timer
- */
-void SkHwtIsr(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc) /* IoContext */
-{
- SkHwtStop(pAC,Ioc);
- pAC->Hwt.TStop = pAC->Hwt.TStart;
- SkTimerDone(pAC,Ioc) ;
-}
-/* End of file */
+/******************************************************************************
+ *
+ * Name: skgehwt.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Hardware Timer.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998,1999 SysKonnect,
+ * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgehwt.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.13 1999/11/22 13:31:12 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.12 1998/10/15 15:11:34 gklug
+ * fix: ID_sccs to SysKonnectFileId
+ *
+ * Revision 1.11 1998/10/08 15:27:51 gklug
+ * chg: correction factor is host clock dependent
+ *
+ * Revision 1.10 1998/09/15 14:18:31 cgoos
+ * Changed more BOOLEANs to SK_xxx
+ *
+ * Revision 1.9 1998/09/15 14:16:06 cgoos
+ * Changed line 107: FALSE to SK_FALSE
+ *
+ * Revision 1.8 1998/08/24 13:04:44 gklug
+ * fix: typo
+ *
+ * Revision 1.7 1998/08/19 09:50:49 gklug
+ * fix: remove struct keyword from c-code (see CCC) add typedefs
+ *
+ * Revision 1.6 1998/08/17 09:59:02 gklug
+ * fix: typos
+ *
+ * Revision 1.5 1998/08/14 07:09:10 gklug
+ * fix: chg pAc -> pAC
+ *
+ * Revision 1.4 1998/08/10 14:14:52 gklug
+ * rmv: unneccessary SK_ADDR macro
+ *
+ * Revision 1.3 1998/08/07 12:53:44 gklug
+ * fix: first compiled version
+ *
+ * Revision 1.2 1998/08/07 09:19:29 gklug
+ * adapt functions to the C coding conventions
+ * rmv unneccessary functions.
+ *
+ * Revision 1.1 1998/08/05 11:28:36 gklug
+ * first version: adapted from SMT/FDDI
+ *
+ *
+ *
+ *
+ ******************************************************************************/
+
+
+#include <config.h>
+
+/*
+ Event queue and dispatcher
+*/
+static const char SysKonnectFileId[] =
+ "$Header: C:\qaz\__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/drivers/net/sk98lin/skgehwt.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $" ;
+
+#include "h/skdrv1st.h" /* Driver Specific Definitions */
+#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
+
+#ifdef __C2MAN__
+/*
+ Hardware Timer function queue management.
+
+ General Description:
+
+ */
+intro()
+{}
+#endif
+
+/*
+ * Prototypes of local functions.
+ */
+#define SK_HWT_MAX (65000)
+
+/* correction factor */
+#define SK_HWT_FAC (1000 * (SK_U32)pAC->GIni.GIHstClkFact / 100)
+
+/*
+ * Initialize hardware timer.
+ *
+ * Must be called during init level 1.
+ */
+void SkHwtInit(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc) /* IoContext */
+{
+ pAC->Hwt.TStart = 0 ;
+ pAC->Hwt.TStop = 0 ;
+ pAC->Hwt.TActive = SK_FALSE ;
+
+ SkHwtStop(pAC,Ioc) ;
+}
+
+/*
+ *
+ * Start hardware timer (clock ticks are 16us).
+ *
+ */
+void SkHwtStart(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc, /* IoContext */
+SK_U32 Time) /* Time in units of 16us to load the timer with. */
+{
+ SK_U32 Cnt ;
+
+ if (Time > SK_HWT_MAX)
+ Time = SK_HWT_MAX ;
+
+ pAC->Hwt.TStart = Time ;
+ pAC->Hwt.TStop = 0L ;
+
+ Cnt = Time ;
+
+ /*
+ * if time < 16 us
+ * time = 16 us
+ */
+ if (!Cnt) {
+ Cnt++ ;
+ }
+
+ SK_OUT32(Ioc, B2_TI_INI, Cnt * SK_HWT_FAC) ;
+ SK_OUT16(Ioc, B2_TI_CRTL, TIM_START) ; /* Start timer. */
+
+ pAC->Hwt.TActive = SK_TRUE ;
+}
+
+/*
+ * Stop hardware timer.
+ * and clear the timer IRQ
+ */
+void SkHwtStop(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc) /* IoContext */
+{
+ SK_OUT16(Ioc, B2_TI_CRTL, TIM_STOP) ;
+ SK_OUT16(Ioc, B2_TI_CRTL, TIM_CLR_IRQ) ;
+
+ pAC->Hwt.TActive = SK_FALSE ;
+}
+
+
+/*
+ * Stop hardware timer and read time elapsed since last start.
+ *
+ * returns
+ * The elapsed time since last start in units of 16us.
+ *
+ */
+SK_U32 SkHwtRead(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc) /* IoContext */
+{
+ SK_U32 TRead ;
+ SK_U32 IStatus ;
+
+ if (pAC->Hwt.TActive) {
+ SkHwtStop(pAC,Ioc) ;
+
+ SK_IN32(Ioc, B2_TI_VAL, &TRead);
+ TRead /= SK_HWT_FAC;
+
+ SK_IN32(Ioc, B0_ISRC, &IStatus);
+
+ /* Check if timer expired (or wraparound). */
+ if ((TRead > pAC->Hwt.TStart) || (IStatus & IS_TIMINT)) {
+ SkHwtStop(pAC,Ioc) ;
+ pAC->Hwt.TStop = pAC->Hwt.TStart ;
+ } else {
+ pAC->Hwt.TStop = pAC->Hwt.TStart - TRead ;
+ }
+ }
+ return (pAC->Hwt.TStop) ;
+}
+
+/*
+ * interrupt source= timer
+ */
+void SkHwtIsr(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc) /* IoContext */
+{
+ SkHwtStop(pAC,Ioc);
+ pAC->Hwt.TStop = pAC->Hwt.TStart;
+ SkTimerDone(pAC,Ioc) ;
+}
+/* End of file */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skgeinit.c u-boot-2009.03/drivers/net/sk98lin/skgeinit.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skgeinit.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skgeinit.c 2009-03-31 14:54:29.440630400 -0700
@@ -1,2367 +1,2370 @@
-/******************************************************************************
- *
- * Name: skgeinit.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.85 $
- * Date: $Date: 2003/02/05 15:30:33 $
- * Purpose: Contains functions to initialize the GE HW
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skgeinit.c,v $
- * Revision 1.85 2003/02/05 15:30:33 rschmidt
- * Corrected setting of GIHstClkFact (Host Clock Factor) and
- * GIPollTimerVal (Descr. Poll Timer Init Value) for YUKON.
- * Editorial changes.
- *
- * Revision 1.84 2003/01/28 09:57:25 rschmidt
- * Added detection of YUKON-Lite Rev. A0 (stored in GIYukonLite).
- * Disabled Rx GMAC FIFO Flush for YUKON-Lite Rev. A0.
- * Added support for CLK_RUN (YUKON-Lite).
- * Added additional check of PME from D3cold for setting GIVauxAvail.
- * Editorial changes.
- *
- * Revision 1.83 2002/12/17 16:15:41 rschmidt
- * Added default setting of PhyType (Copper) for YUKON.
- * Added define around check for HW self test results.
- * Editorial changes.
- *
- * Revision 1.82 2002/12/05 13:40:21 rschmidt
- * Added setting of Rx GMAC FIFO Flush Mask register.
- * Corrected PhyType with new define SK_PHY_MARV_FIBER when
- * YUKON Fiber board was found.
- * Editorial changes.
- *
- * Revision 1.81 2002/11/15 12:48:35 rschmidt
- * Replaced message SKERR_HWI_E018 with SKERR_HWI_E024 for Rx queue error
- * in SkGeStopPort().
- * Added init for pAC->GIni.GIGenesis with SK_FALSE in YUKON-branch.
- * Editorial changes.
- *
- * Revision 1.80 2002/11/12 17:28:30 rschmidt
- * Initialized GIPciSlot64 and GIPciClock66 in SkGeInit1().
- * Reduced PCI FIFO watermarks for 32bit/33MHz bus in SkGeInitBmu().
- * Editorial changes.
- *
- * Revision 1.79 2002/10/21 09:31:02 mkarl
- * Changed SkGeInitAssignRamToQueues(), removed call to
- * SkGeInitAssignRamToQueues in SkGeInit1 and fixed compiler warning in
- * SkGeInit1.
- *
- * Revision 1.78 2002/10/16 15:55:07 mkarl
- * Fixed a bug in SkGeInitAssignRamToQueues.
- *
- * Revision 1.77 2002/10/14 15:07:22 rschmidt
- * Corrected timeout handling for Rx queue in SkGeStopPort() (#10748)
- * Editorial changes.
- *
- * Revision 1.76 2002/10/11 09:24:38 mkarl
- * Added check for HW self test results.
- *
- * Revision 1.75 2002/10/09 16:56:44 mkarl
- * Now call SkGeInitAssignRamToQueues() in Init Level 1 in order to assign
- * the adapter memory to the queues. This default assignment is not suitable
- * for dual net mode.
- *
- * Revision 1.74 2002/09/12 08:45:06 rwahl
- * Set defaults for PMSCap, PLinkSpeed & PLinkSpeedCap dependent on PHY.
- *
- * Revision 1.73 2002/08/16 15:19:45 rschmidt
- * Corrected check for Tx queues in SkGeCheckQSize().
- * Added init for new entry GIGenesis and GICopperType
- * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis.
- * Replaced wrong 1st para pAC with IoC in SK_IN/OUT macros.
- *
- * Revision 1.72 2002/08/12 13:38:55 rschmidt
- * Added check if VAUX is available (stored in GIVauxAvail)
- * Initialized PLinkSpeedCap in Port struct with SK_LSPEED_CAP_1000MBPS
- * Editorial changes.
- *
- * Revision 1.71 2002/08/08 16:32:58 rschmidt
- * Added check for Tx queues in SkGeCheckQSize().
- * Added start of Time Stamp Timer (YUKON) in SkGeInit2().
- * Editorial changes.
- *
- * Revision 1.70 2002/07/23 16:04:26 rschmidt
- * Added init for GIWolOffs (HW-Bug in YUKON 1st rev.)
- * Minor changes
- *
- * Revision 1.69 2002/07/17 17:07:08 rwahl
- * - SkGeInit1(): fixed PHY type debug output; corrected init of GIFunc
- * table & GIMacType.
- * - Editorial changes.
- *
- * Revision 1.68 2002/07/15 18:38:31 rwahl
- * Added initialization for MAC type dependent function table.
- *
- * Revision 1.67 2002/07/15 15:45:39 rschmidt
- * Added Tx Store & Forward for YUKON (GMAC Tx FIFO is only 1 kB)
- * Replaced SK_PHY_MARV by SK_PHY_MARV_COPPER
- * Editorial changes
- *
- * Revision 1.66 2002/06/10 09:35:08 rschmidt
- * Replaced C++ comments (//)
- * Editorial changes
- *
- * Revision 1.65 2002/06/05 08:33:37 rschmidt
- * Changed GIRamSize and Reset sequence for YUKON.
- * SkMacInit() replaced by SkXmInitMac() resp. SkGmInitMac()
- *
- * Revision 1.64 2002/04/25 13:03:20 rschmidt
- * Changes for handling YUKON.
- * Removed reference to xmac_ii.h (not necessary).
- * Moved all defines into header file.
- * Replaced all SkXm...() functions with SkMac...() to handle also
- * YUKON's GMAC.
- * Added handling for GMAC FIFO in SkGeInitMacFifo(), SkGeStopPort().
- * Removed 'goto'-directive from SkGeCfgSync(), SkGeCheckQSize().
- * Replaced all XMAC-access macros by functions: SkMacRxTxDisable(),
- * SkMacFlushTxFifo().
- * Optimized timeout handling in SkGeStopPort().
- * Initialized PLinkSpeed in Port struct with SK_LSPEED_AUTO.
- * Release of GMAC Link Control reset in SkGeInit1().
- * Initialized GIChipId and GIChipRev in GE Init structure.
- * Added GIRamSize and PhyType values for YUKON.
- * Removed use of PRxCmd to setup XMAC.
- * Moved setting of XM_RX_DIS_CEXT to SkXmInitMac().
- * Use of SkGeXmitLED() only for GENESIS.
- * Changes for V-CPU support.
- * Editorial changes.
- *
- * Revision 1.63 2001/04/05 11:02:09 rassmann
- * Stop Port check of the STOP bit did not take 2/18 sec as wanted.
- *
- * Revision 1.62 2001/02/07 07:54:21 rassmann
- * Corrected copyright.
- *
- * Revision 1.61 2001/01/31 15:31:40 gklug
- * fix: problem with autosensing an SR8800 switch
- *
- * Revision 1.60 2000/10/18 12:22:21 cgoos
- * Added workaround for half duplex hangup.
- *
- * Revision 1.59 2000/10/10 11:22:06 gklug
- * add: in manual half duplex mode ignore carrier extension errors
- *
- * Revision 1.58 2000/10/02 14:10:27 rassmann
- * Reading BCOM PHY after releasing reset until it returns a valid value.
- *
- * Revision 1.57 2000/08/03 14:55:28 rassmann
- * Waiting for I2C to be ready before de-initializing adapter
- * (prevents sensors from hanging up).
- *
- * Revision 1.56 2000/07/27 12:16:48 gklug
- * fix: Stop Port check of the STOP bit does now take 2/18 sec as wanted
- *
- * Revision 1.55 1999/11/22 13:32:26 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.54 1999/10/26 07:32:54 malthoff
- * Initialize PHWLinkUp with SK_FALSE. Required for Diagnostics.
- *
- * Revision 1.53 1999/08/12 19:13:50 malthoff
- * Fix for 1000BT. Do not owerwrite XM_MMU_CMD when
- * disabling receiver and transmitter. Other bits
- * may be lost.
- *
- * Revision 1.52 1999/07/01 09:29:54 gklug
- * fix: DoInitRamQueue needs pAC
- *
- * Revision 1.51 1999/07/01 08:42:21 gklug
- * chg: use Store & forward for RAM buffer when Jumbos are used
- *
- * Revision 1.50 1999/05/27 13:19:38 cgoos
- * Added Tx PCI watermark initialization.
- * Removed Tx RAM queue Store & Forward setting.
- *
- * Revision 1.49 1999/05/20 14:32:45 malthoff
- * SkGeLinkLED() is completly removed now.
- *
- * Revision 1.48 1999/05/19 07:28:24 cgoos
- * SkGeLinkLED no more available for drivers.
- * Changes for 1000Base-T.
- *
- * Revision 1.47 1999/04/08 13:57:45 gklug
- * add: Init of new port struct fiels PLinkResCt
- * chg: StopPort Timer check
- *
- * Revision 1.46 1999/03/25 07:42:15 malthoff
- * SkGeStopPort(): Add workaround for cache incoherency.
- * Create error log entry, disable port, and
- * exit loop if it does not terminate.
- * Add XM_RX_LENERR_OK to the default value for the
- * XMAC receive command register.
- *
- * Revision 1.45 1999/03/12 16:24:47 malthoff
- * Remove PPollRxD and PPollTxD.
- * Add check for GIPollTimerVal.
- *
- * Revision 1.44 1999/03/12 13:40:23 malthoff
- * Fix: SkGeXmitLED(), SK_LED_TST mode does not work.
- * Add: Jumbo frame support.
- * Chg: Resolution of parameter IntTime in SkGeCfgSync().
- *
- * Revision 1.43 1999/02/09 10:29:46 malthoff
- * Bugfix: The previous modification again also for the second location.
- *
- * Revision 1.42 1999/02/09 09:35:16 malthoff
- * Bugfix: The bits '66 MHz Capable' and 'NEWCAP are reset while
- * clearing the error bits in the PCI status register.
- *
- * Revision 1.41 1999/01/18 13:07:02 malthoff
- * Bugfix: Do not use CFG cycles after during Init- or Runtime, because
- * they may not be available after Boottime.
- *
- * Revision 1.40 1999/01/11 12:40:49 malthoff
- * Bug fix: PCI_STATUS: clearing error bits sets the UDF bit.
- *
- * Revision 1.39 1998/12/11 15:17:33 gklug
- * chg: Init LipaAutoNeg with Unknown
- *
- * Revision 1.38 1998/12/10 11:02:57 malthoff
- * Disable Error Log Message when calling SkGeInit(level 2)
- * more than once.
- *
- * Revision 1.37 1998/12/07 12:18:25 gklug
- * add: refinement of autosense mode: take into account the autoneg cap of LiPa
- *
- * Revision 1.36 1998/12/07 07:10:39 gklug
- * fix: init values of LinkBroken/ Capabilities for management
- *
- * Revision 1.35 1998/12/02 10:56:20 gklug
- * fix: do NOT init LoinkSync Counter.
- *
- * Revision 1.34 1998/12/01 10:53:21 gklug
- * add: init of additional Counters for workaround
- *
- * Revision 1.33 1998/12/01 10:00:49 gklug
- * add: init PIsave var in Port struct
- *
- * Revision 1.32 1998/11/26 14:50:40 gklug
- * chg: Default is autosensing with AUTOFULL mode
- *
- * Revision 1.31 1998/11/25 15:36:16 gklug
- * fix: do NOT stop LED Timer when port should be stopped
- *
- * Revision 1.30 1998/11/24 13:15:28 gklug
- * add: Init PCkeckPar struct member
- *
- * Revision 1.29 1998/11/18 13:19:27 malthoff
- * Disable packet arbiter timeouts on receive side.
- * Use maximum timeout value for packet arbiter
- * transmit timeouts.
- * Add TestStopBit() function to handle stop RX/TX
- * problem with active descriptor poll timers.
- * Bug Fix: Descriptor Poll Timer not started, because
- * GIPollTimerVal was initialized with 0.
- *
- * Revision 1.28 1998/11/13 14:24:26 malthoff
- * Bug Fix: SkGeStopPort() may hang if a Packet Arbiter Timout
- * is pending or occurs while waiting for TX_STOP and RX_STOP.
- * The PA timeout is cleared now while waiting for TX- or RX_STOP.
- *
- * Revision 1.27 1998/11/02 11:04:36 malthoff
- * fix the last fix
- *
- * Revision 1.26 1998/11/02 10:37:03 malthoff
- * Fix: SkGePollTxD() enables always the synchronounous poll timer.
- *
- * Revision 1.25 1998/10/28 07:12:43 cgoos
- * Fixed "LED_STOP" in SkGeLnkSyncCnt, "== SK_INIT_IO" in SkGeInit.
- * Removed: Reset of RAM Interface in SkGeStopPort.
- *
- * Revision 1.24 1998/10/27 08:13:12 malthoff
- * Remove temporary code.
- *
- * Revision 1.23 1998/10/26 07:45:03 malthoff
- * Add Address Calculation Workaround: If the EPROM byte
- * Id is 3, the address offset is 512 kB.
- * Initialize default values for PLinkMode and PFlowCtrlMode.
- *
- * Revision 1.22 1998/10/22 09:46:47 gklug
- * fix SysKonnectFileId typo
- *
- * Revision 1.21 1998/10/20 12:11:56 malthoff
- * Don't dendy the Queue config if the size of the unused
- * Rx qeueu is zero.
- *
- * Revision 1.20 1998/10/19 07:27:58 malthoff
- * SkGeInitRamIface() is public to be called by diagnostics.
- *
- * Revision 1.19 1998/10/16 13:33:45 malthoff
- * Fix: enabling descriptor polling is not allowed until
- * the descriptor addresses are set. Descriptor polling
- * must be handled by the driver.
- *
- * Revision 1.18 1998/10/16 10:58:27 malthoff
- * Remove temp. code for Diag prototype.
- * Remove lint warning for dummy reads.
- * Call SkGeLoadLnkSyncCnt() during SkGeInitPort().
- *
- * Revision 1.17 1998/10/14 09:16:06 malthoff
- * Change parameter LimCount and programming of
- * the limit counter in SkGeCfgSync().
- *
- * Revision 1.16 1998/10/13 09:21:16 malthoff
- * Don't set XM_RX_SELF_RX in RxCmd Reg, because it's
- * like a Loopback Mode in half duplex.
- *
- * Revision 1.15 1998/10/09 06:47:40 malthoff
- * SkGeInitMacArb(): set recovery counters init value
- * to zero although this counters are not uesd.
- * Bug fix in Rx Upper/Lower Pause Threshold calculation.
- * Add XM_RX_SELF_RX to RxCmd.
- *
- * Revision 1.14 1998/10/06 15:15:53 malthoff
- * Make sure no pending IRQ is cleared in SkGeLoadLnkSyncCnt().
- *
- * Revision 1.13 1998/10/06 14:09:36 malthoff
- * Add SkGeLoadLnkSyncCnt(). Modify
- * the 'port stopped' condition according
- * to the current problem report.
- *
- * Revision 1.12 1998/10/05 08:17:21 malthoff
- * Add functions: SkGePollRxD(), SkGePollTxD(),
- * DoCalcAddr(), SkGeCheckQSize(),
- * DoInitRamQueue(), and SkGeCfgSync().
- * Add coding for SkGeInitMacArb(), SkGeInitPktArb(),
- * SkGeInitMacFifo(), SkGeInitRamBufs(),
- * SkGeInitRamIface(), and SkGeInitBmu().
- *
- * Revision 1.11 1998/09/29 08:26:29 malthoff
- * bug fix: SkGeInit0() 'i' should be increment.
- *
- * Revision 1.10 1998/09/28 13:19:01 malthoff
- * Coding time: Save the done work.
- * Modify SkGeLinkLED(), add SkGeXmitLED(),
- * define SkGeCheckQSize(), SkGeInitMacArb(),
- * SkGeInitPktArb(), SkGeInitMacFifo(),
- * SkGeInitRamBufs(), SkGeInitRamIface(),
- * and SkGeInitBmu(). Do coding for SkGeStopPort(),
- * SkGeInit1(), SkGeInit2(), and SkGeInit3().
- * Do coding for SkGeDinit() and SkGeInitPort().
- *
- * Revision 1.9 1998/09/16 14:29:05 malthoff
- * Some minor changes.
- *
- * Revision 1.8 1998/09/11 05:29:14 gklug
- * add: init state of a port
- *
- * Revision 1.7 1998/09/04 09:26:25 malthoff
- * Short temporary modification.
- *
- * Revision 1.6 1998/09/04 08:27:59 malthoff
- * Remark the do-while in StopPort() because it never ends
- * without a GE adapter.
- *
- * Revision 1.5 1998/09/03 14:05:45 malthoff
- * Change comment for SkGeInitPort(). Do not
- * repair the queue sizes if invalid.
- *
- * Revision 1.4 1998/09/03 10:03:19 malthoff
- * Implement the new interface according to the
- * reviewed interface specification.
- *
- * Revision 1.3 1998/08/19 09:11:25 gklug
- * fix: struct are removed from c-source (see CCC)
- *
- * Revision 1.2 1998/07/28 12:33:58 malthoff
- * Add 'IoC' parameter in function declaration and SK IO macros.
- *
- * Revision 1.1 1998/07/23 09:48:57 malthoff
- * Creation. First dummy 'C' file.
- * SkGeInit(Level 0) is card_start for GE.
- * SkGeDeInit() is card_stop for GE.
- *
- *
- ******************************************************************************/
-
-#include <config.h>
-
-#include "h/skdrv1st.h"
-#include "h/skdrv2nd.h"
-
-/* global variables ***********************************************************/
-
-/* local variables ************************************************************/
-
-static const char SysKonnectFileId[] =
- "@(#)$Id: skgeinit.c,v 1.85 2003/02/05 15:30:33 rschmidt Exp $ (C) SK ";
-
-struct s_QOffTab {
- int RxQOff; /* Receive Queue Address Offset */
- int XsQOff; /* Sync Tx Queue Address Offset */
- int XaQOff; /* Async Tx Queue Address Offset */
-};
-static struct s_QOffTab QOffTab[] = {
- {Q_R1, Q_XS1, Q_XA1}, {Q_R2, Q_XS2, Q_XA2}
-};
-
-
-/******************************************************************************
- *
- * SkGePollRxD() - Enable / Disable Descriptor Polling of RxD Ring
- *
- * Description:
- * Enable or disable the descriptor polling of the receive descriptor
- * ring (RxD) for port 'Port'.
- * The new configuration is *not* saved over any SkGeStopPort() and
- * SkGeInitPort() calls.
- *
- * Returns:
- * nothing
- */
-void SkGePollRxD(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL PollRxD) /* SK_TRUE (enable pol.), SK_FALSE (disable pol.) */
-{
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), (PollRxD) ?
- CSR_ENA_POL : CSR_DIS_POL);
-} /* SkGePollRxD */
-
-
-/******************************************************************************
- *
- * SkGePollTxD() - Enable / Disable Descriptor Polling of TxD Rings
- *
- * Description:
- * Enable or disable the descriptor polling of the transmit descriptor
- * ring(s) (TxD) for port 'Port'.
- * The new configuration is *not* saved over any SkGeStopPort() and
- * SkGeInitPort() calls.
- *
- * Returns:
- * nothing
- */
-void SkGePollTxD(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL PollTxD) /* SK_TRUE (enable pol.), SK_FALSE (disable pol.) */
-{
- SK_GEPORT *pPrt;
- SK_U32 DWord;
-
- pPrt = &pAC->GIni.GP[Port];
-
- DWord = (PollTxD) ? CSR_ENA_POL : CSR_DIS_POL;
-
- if (pPrt->PXSQSize != 0) {
- SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), DWord);
- }
-
- if (pPrt->PXAQSize != 0) {
- SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), DWord);
- }
-} /* SkGePollTxD */
-
-
-/******************************************************************************
- *
- * SkGeYellowLED() - Switch the yellow LED on or off.
- *
- * Description:
- * Switch the yellow LED on or off.
- *
- * Note:
- * This function may be called any time after SkGeInit(Level 1).
- *
- * Returns:
- * nothing
- */
-void SkGeYellowLED(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int State) /* yellow LED state, 0 = OFF, 0 != ON */
-{
- if (State == 0) {
- /* Switch yellow LED OFF */
- SK_OUT8(IoC, B0_LED, LED_STAT_OFF);
- }
- else {
- /* Switch yellow LED ON */
- SK_OUT8(IoC, B0_LED, LED_STAT_ON);
- }
-} /* SkGeYellowLED */
-
-
-/******************************************************************************
- *
- * SkGeXmitLED() - Modify the Operational Mode of a transmission LED.
- *
- * Description:
- * The Rx or Tx LED which is specified by 'Led' will be
- * enabled, disabled or switched on in test mode.
- *
- * Note:
- * 'Led' must contain the address offset of the LEDs INI register.
- *
- * Usage:
- * SkGeXmitLED(pAC, IoC, MR_ADDR(Port, TX_LED_INI), SK_LED_ENA);
- *
- * Returns:
- * nothing
- */
-void SkGeXmitLED(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Led, /* offset to the LED Init Value register */
-int Mode) /* Mode may be SK_LED_DIS, SK_LED_ENA, SK_LED_TST */
-{
- SK_U32 LedIni;
-
- switch (Mode) {
- case SK_LED_ENA:
- LedIni = SK_XMIT_DUR * (SK_U32)pAC->GIni.GIHstClkFact / 100;
- SK_OUT32(IoC, Led + XMIT_LED_INI, LedIni);
- SK_OUT8(IoC, Led + XMIT_LED_CTRL, LED_START);
- break;
- case SK_LED_TST:
- SK_OUT8(IoC, Led + XMIT_LED_TST, LED_T_ON);
- SK_OUT32(IoC, Led + XMIT_LED_CNT, 100);
- SK_OUT8(IoC, Led + XMIT_LED_CTRL, LED_START);
- break;
- case SK_LED_DIS:
- default:
- /*
- * Do NOT stop the LED Timer here. The LED might be
- * in on state. But it needs to go off.
- */
- SK_OUT32(IoC, Led + XMIT_LED_CNT, 0);
- SK_OUT8(IoC, Led + XMIT_LED_TST, LED_T_OFF);
- break;
- }
-
- /*
- * 1000BT: The Transmit LED is driven by the PHY.
- * But the default LED configuration is used for
- * Level One and Broadcom PHYs.
- * (Broadcom: It may be that PHY_B_PEC_EN_LTR has to be set.)
- * (In this case it has to be added here. But we will see. XXX)
- */
-} /* SkGeXmitLED */
-
-
-/******************************************************************************
- *
- * DoCalcAddr() - Calculates the start and the end address of a queue.
- *
- * Description:
- * This function calculates the start and the end address of a queue.
- * Afterwards the 'StartVal' is incremented to the next start position.
- * If the port is already initialized the calculated values
- * will be checked against the configured values and an
- * error will be returned, if they are not equal.
- * If the port is not initialized the values will be written to
- * *StartAdr and *EndAddr.
- *
- * Returns:
- * 0: success
- * 1: configuration error
- */
-static int DoCalcAddr(
-SK_AC *pAC, /* adapter context */
-SK_GEPORT *pPrt, /* port index */
-int QuSize, /* size of the queue to configure in kB */
-SK_U32 *StartVal, /* start value for address calculation */
-SK_U32 *QuStartAddr, /* start addr to calculate */
-SK_U32 *QuEndAddr) /* end address to calculate */
-{
- SK_U32 EndVal;
- SK_U32 NextStart;
- int Rtv;
-
- Rtv = 0;
- if (QuSize == 0) {
- EndVal = *StartVal;
- NextStart = EndVal;
- }
- else {
- EndVal = *StartVal + ((SK_U32)QuSize * 1024) - 1;
- NextStart = EndVal + 1;
- }
-
- if (pPrt->PState >= SK_PRT_INIT) {
- if (*StartVal != *QuStartAddr || EndVal != *QuEndAddr) {
- Rtv = 1;
- }
- }
- else {
- *QuStartAddr = *StartVal;
- *QuEndAddr = EndVal;
- }
-
- *StartVal = NextStart;
- return(Rtv);
-} /* DoCalcAddr */
-
-/******************************************************************************
- *
- * SkGeInitAssignRamToQueues() - allocate default queue sizes
- *
- * Description:
- * This function assigns the memory to the different queues and ports.
- * When DualNet is set to SK_TRUE all ports get the same amount of memory.
- * Otherwise the first port gets most of the memory and all the
- * other ports just the required minimum.
- * This function can only be called when pAC->GIni.GIRamSize and
- * pAC->GIni.GIMacsFound have been initialized, usually this happens
- * at init level 1
- *
- * Returns:
- * 0 - ok
- * 1 - invalid input values
- * 2 - not enough memory
- */
-
-int SkGeInitAssignRamToQueues(
-SK_AC *pAC, /* Adapter context */
-int ActivePort, /* Active Port in RLMT mode */
-SK_BOOL DualNet) /* adapter context */
-{
- int i;
- int UsedKilobytes; /* memory already assigned */
- int ActivePortKilobytes; /* memory available for active port */
- SK_GEPORT *pGePort;
-
- UsedKilobytes = 0;
-
- if (ActivePort >= pAC->GIni.GIMacsFound) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
- ("SkGeInitAssignRamToQueues: ActivePort (%d) invalid\n",
- ActivePort));
- return(1);
- }
- if (((pAC->GIni.GIMacsFound * (SK_MIN_RXQ_SIZE + SK_MIN_TXQ_SIZE)) +
- ((RAM_QUOTA_SYNC == 0) ? 0 : SK_MIN_TXQ_SIZE)) > pAC->GIni.GIRamSize) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
- ("SkGeInitAssignRamToQueues: Not enough memory (%d)\n",
- pAC->GIni.GIRamSize));
- return(2);
- }
-
-
- if (DualNet) {
- /* every port gets the same amount of memory */
- ActivePortKilobytes = pAC->GIni.GIRamSize / pAC->GIni.GIMacsFound;
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
-
- pGePort = &pAC->GIni.GP[i];
-
- /* take away the minimum memory for active queues */
- ActivePortKilobytes -= (SK_MIN_RXQ_SIZE + SK_MIN_TXQ_SIZE);
-
- /* receive queue gets the minimum + 80% of the rest */
- pGePort->PRxQSize = (int) (ROUND_QUEUE_SIZE_KB((
- ActivePortKilobytes * (unsigned long) RAM_QUOTA_RX) / 100))
- + SK_MIN_RXQ_SIZE;
-
- ActivePortKilobytes -= (pGePort->PRxQSize - SK_MIN_RXQ_SIZE);
-
- /* synchronous transmit queue */
- pGePort->PXSQSize = 0;
-
- /* asynchronous transmit queue */
- pGePort->PXAQSize = (int) ROUND_QUEUE_SIZE_KB(ActivePortKilobytes +
- SK_MIN_TXQ_SIZE);
- }
- }
- else {
- /* Rlmt Mode or single link adapter */
-
- /* Set standby queue size defaults for all standby ports */
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
-
- if (i != ActivePort) {
- pGePort = &pAC->GIni.GP[i];
-
- pGePort->PRxQSize = SK_MIN_RXQ_SIZE;
- pGePort->PXAQSize = SK_MIN_TXQ_SIZE;
- pGePort->PXSQSize = 0;
-
- /* Count used RAM */
- UsedKilobytes += pGePort->PRxQSize + pGePort->PXAQSize;
- }
- }
- /* what's left? */
- ActivePortKilobytes = pAC->GIni.GIRamSize - UsedKilobytes;
-
- /* assign it to the active port */
- /* first take away the minimum memory */
- ActivePortKilobytes -= (SK_MIN_RXQ_SIZE + SK_MIN_TXQ_SIZE);
- pGePort = &pAC->GIni.GP[ActivePort];
-
- /* receive queue get's the minimum + 80% of the rest */
- pGePort->PRxQSize = (int) (ROUND_QUEUE_SIZE_KB((ActivePortKilobytes *
- (unsigned long) RAM_QUOTA_RX) / 100)) + SK_MIN_RXQ_SIZE;
-
- ActivePortKilobytes -= (pGePort->PRxQSize - SK_MIN_RXQ_SIZE);
-
- /* synchronous transmit queue */
- pGePort->PXSQSize = 0;
-
- /* asynchronous transmit queue */
- pGePort->PXAQSize = (int) ROUND_QUEUE_SIZE_KB(ActivePortKilobytes) +
- SK_MIN_TXQ_SIZE;
- }
-#ifdef VCPU
- VCPUprintf(0, "PRxQSize=%u, PXSQSize=%u, PXAQSize=%u\n",
- pGePort->PRxQSize, pGePort->PXSQSize, pGePort->PXAQSize);
-#endif /* VCPU */
-
- return(0);
-} /* SkGeInitAssignRamToQueues */
-
-/******************************************************************************
- *
- * SkGeCheckQSize() - Checks the Adapters Queue Size Configuration
- *
- * Description:
- * This function verifies the Queue Size Configuration specified
- * in the variables PRxQSize, PXSQSize, and PXAQSize of all
- * used ports.
- * This requirements must be fullfilled to have a valid configuration:
- * - The size of all queues must not exceed GIRamSize.
- * - The queue sizes must be specified in units of 8 kB.
- * - The size of Rx queues of available ports must not be
- * smaller than 16 kB.
- * - The size of at least one Tx queue (synch. or asynch.)
- * of available ports must not be smaller than 16 kB
- * when Jumbo Frames are used.
- * - The RAM start and end addresses must not be changed
- * for ports which are already initialized.
- * Furthermore SkGeCheckQSize() defines the Start and End Addresses
- * of all ports and stores them into the HWAC port structure.
- *
- * Returns:
- * 0: Queue Size Configuration valid
- * 1: Queue Size Configuration invalid
- */
-static int SkGeCheckQSize(
-SK_AC *pAC, /* adapter context */
-int Port) /* port index */
-{
- SK_GEPORT *pPrt;
- int UsedMem; /* total memory used (max. found ports) */
- int i;
- int Rtv;
- int Rtv2;
- SK_U32 StartAddr;
-
- UsedMem = 0;
- Rtv = 0;
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
- pPrt = &pAC->GIni.GP[i];
-
- if ((pPrt->PRxQSize & QZ_UNITS) != 0 ||
- (pPrt->PXSQSize & QZ_UNITS) != 0 ||
- (pPrt->PXAQSize & QZ_UNITS) != 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E012, SKERR_HWI_E012MSG);
- return(1);
- }
-
- if (i == Port && pPrt->PRxQSize < SK_MIN_RXQ_SIZE) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E011, SKERR_HWI_E011MSG);
- return(1);
- }
-
- /*
- * the size of at least one Tx queue (synch. or asynch.) has to be > 0.
- * if Jumbo Frames are used, this size has to be >= 16 kB.
- */
- if ((i == Port && pPrt->PXSQSize == 0 && pPrt->PXAQSize == 0) ||
- (pAC->GIni.GIPortUsage == SK_JUMBO_LINK &&
- ((pPrt->PXSQSize > 0 && pPrt->PXSQSize < SK_MIN_TXQ_SIZE) ||
- (pPrt->PXAQSize > 0 && pPrt->PXAQSize < SK_MIN_TXQ_SIZE)))) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E023, SKERR_HWI_E023MSG);
- return(1);
- }
-
- UsedMem += pPrt->PRxQSize + pPrt->PXSQSize + pPrt->PXAQSize;
- }
-
- if (UsedMem > pAC->GIni.GIRamSize) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E012, SKERR_HWI_E012MSG);
- return(1);
- }
-
- /* Now start address calculation */
- StartAddr = pAC->GIni.GIRamOffs;
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
- pPrt = &pAC->GIni.GP[i];
-
- /* Calculate/Check values for the receive queue */
- Rtv2 = DoCalcAddr(pAC, pPrt, pPrt->PRxQSize, &StartAddr,
- &pPrt->PRxQRamStart, &pPrt->PRxQRamEnd);
- Rtv |= Rtv2;
-
- /* Calculate/Check values for the synchronous Tx queue */
- Rtv2 = DoCalcAddr(pAC, pPrt, pPrt->PXSQSize, &StartAddr,
- &pPrt->PXsQRamStart, &pPrt->PXsQRamEnd);
- Rtv |= Rtv2;
-
- /* Calculate/Check values for the asynchronous Tx queue */
- Rtv2 = DoCalcAddr(pAC, pPrt, pPrt->PXAQSize, &StartAddr,
- &pPrt->PXaQRamStart, &pPrt->PXaQRamEnd);
- Rtv |= Rtv2;
-
- if (Rtv) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E013, SKERR_HWI_E013MSG);
- return(1);
- }
- }
-
- return(0);
-} /* SkGeCheckQSize */
-
-
-/******************************************************************************
- *
- * SkGeInitMacArb() - Initialize the MAC Arbiter
- *
- * Description:
- * This function initializes the MAC Arbiter.
- * It must not be called if there is still an
- * initialized or active port.
- *
- * Returns:
- * nothing
- */
-static void SkGeInitMacArb(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- /* release local reset */
- SK_OUT16(IoC, B3_MA_TO_CTRL, MA_RST_CLR);
-
- /* configure timeout values */
- SK_OUT8(IoC, B3_MA_TOINI_RX1, SK_MAC_TO_53);
- SK_OUT8(IoC, B3_MA_TOINI_RX2, SK_MAC_TO_53);
- SK_OUT8(IoC, B3_MA_TOINI_TX1, SK_MAC_TO_53);
- SK_OUT8(IoC, B3_MA_TOINI_TX2, SK_MAC_TO_53);
-
- SK_OUT8(IoC, B3_MA_RCINI_RX1, 0);
- SK_OUT8(IoC, B3_MA_RCINI_RX2, 0);
- SK_OUT8(IoC, B3_MA_RCINI_TX1, 0);
- SK_OUT8(IoC, B3_MA_RCINI_TX2, 0);
-
- /* recovery values are needed for XMAC II Rev. B2 only */
- /* Fast Output Enable Mode was intended to use with Rev. B2, but now? */
-
- /*
- * There is no start or enable button to push, therefore
- * the MAC arbiter is configured and enabled now.
- */
-} /* SkGeInitMacArb */
-
-
-/******************************************************************************
- *
- * SkGeInitPktArb() - Initialize the Packet Arbiter
- *
- * Description:
- * This function initializes the Packet Arbiter.
- * It must not be called if there is still an
- * initialized or active port.
- *
- * Returns:
- * nothing
- */
-static void SkGeInitPktArb(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- /* release local reset */
- SK_OUT16(IoC, B3_PA_CTRL, PA_RST_CLR);
-
- /* configure timeout values */
- SK_OUT16(IoC, B3_PA_TOINI_RX1, SK_PKT_TO_MAX);
- SK_OUT16(IoC, B3_PA_TOINI_RX2, SK_PKT_TO_MAX);
- SK_OUT16(IoC, B3_PA_TOINI_TX1, SK_PKT_TO_MAX);
- SK_OUT16(IoC, B3_PA_TOINI_TX2, SK_PKT_TO_MAX);
-
- /*
- * enable timeout timers if jumbo frames not used
- * NOTE: the packet arbiter timeout interrupt is needed for
- * half duplex hangup workaround
- */
- if (pAC->GIni.GIPortUsage != SK_JUMBO_LINK) {
- if (pAC->GIni.GIMacsFound == 1) {
- SK_OUT16(IoC, B3_PA_CTRL, PA_ENA_TO_TX1);
- }
- else {
- SK_OUT16(IoC, B3_PA_CTRL, PA_ENA_TO_TX1 | PA_ENA_TO_TX2);
- }
- }
-} /* SkGeInitPktArb */
-
-
-/******************************************************************************
- *
- * SkGeInitMacFifo() - Initialize the MAC FIFOs
- *
- * Description:
- * Initialize all MAC FIFOs of the specified port
- *
- * Returns:
- * nothing
- */
-static void SkGeInitMacFifo(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U16 Word;
-#ifdef VCPU
- SK_U32 DWord;
-#endif /* VCPU */
- /*
- * For each FIFO:
- * - release local reset
- * - use default value for MAC FIFO size
- * - setup defaults for the control register
- * - enable the FIFO
- */
-
- Word = GMF_RX_CTRL_DEF;
-
- if (pAC->GIni.GIGenesis) {
- /* Configure Rx MAC FIFO */
- SK_OUT8(IoC, MR_ADDR(Port, RX_MFF_CTRL2), MFF_RST_CLR);
- SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_RX_CTRL_DEF);
- SK_OUT8(IoC, MR_ADDR(Port, RX_MFF_CTRL2), MFF_ENA_OP_MD);
-
- /* Configure Tx MAC FIFO */
- SK_OUT8(IoC, MR_ADDR(Port, TX_MFF_CTRL2), MFF_RST_CLR);
- SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_TX_CTRL_DEF);
- SK_OUT8(IoC, MR_ADDR(Port, TX_MFF_CTRL2), MFF_ENA_OP_MD);
-
- /* Enable frame flushing if jumbo frames used */
- if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
- SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_ENA_FLUSH);
- }
- }
- else {
- /* set Rx GMAC FIFO Flush Mask */
- SK_OUT16(IoC, MR_ADDR(Port, RX_GMF_FL_MSK), (SK_U16)RX_FF_FL_DEF_MSK);
-
- if (pAC->GIni.GIYukonLite && pAC->GIni.GIChipId == CHIP_ID_YUKON) {
-
- Word &= ~GMF_RX_F_FL_ON;
- }
-
- /* Configure Rx MAC FIFO */
- SK_OUT8(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), (SK_U8)GMF_RST_CLR);
- SK_OUT16(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), Word);
-
- /* set Rx GMAC FIFO Flush Threshold (default: 0x0a -> 56 bytes) */
- SK_OUT16(IoC, MR_ADDR(Port, RX_GMF_FL_THR), RX_GMF_FL_THR_DEF);
-
- /* Configure Tx MAC FIFO */
- SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U8)GMF_RST_CLR);
- SK_OUT16(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U16)GMF_TX_CTRL_DEF);
-
-#ifdef VCPU
- SK_IN32(IoC, MR_ADDR(Port, RX_GMF_AF_THR), &DWord);
- SK_IN32(IoC, MR_ADDR(Port, TX_GMF_AE_THR), &DWord);
-#endif /* VCPU */
-
- /* set Tx GMAC FIFO Almost Empty Threshold */
-/* SK_OUT32(IoC, MR_ADDR(Port, TX_GMF_AE_THR), 0); */
- }
-} /* SkGeInitMacFifo */
-
-
-/******************************************************************************
- *
- * SkGeLoadLnkSyncCnt() - Load the Link Sync Counter and starts counting
- *
- * Description:
- * This function starts the Link Sync Counter of the specified
- * port and enables the generation of an Link Sync IRQ.
- * The Link Sync Counter may be used to detect an active link,
- * if autonegotiation is not used.
- *
- * Note:
- * o To ensure receiving the Link Sync Event the LinkSyncCounter
- * should be initialized BEFORE clearing the XMAC's reset!
- * o Enable IS_LNK_SYNC_M1 and IS_LNK_SYNC_M2 after calling this
- * function.
- *
- * Returns:
- * nothing
- */
-void SkGeLoadLnkSyncCnt(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_U32 CntVal) /* Counter value */
-{
- SK_U32 OrgIMsk;
- SK_U32 NewIMsk;
- SK_U32 ISrc;
- SK_BOOL IrqPend;
-
- /* stop counter */
- SK_OUT8(IoC, MR_ADDR(Port, LNK_SYNC_CTRL), LED_STOP);
-
- /*
- * ASIC problem:
- * Each time starting the Link Sync Counter an IRQ is generated
- * by the adapter. See problem report entry from 21.07.98
- *
- * Workaround: Disable Link Sync IRQ and clear the unexpeced IRQ
- * if no IRQ is already pending.
- */
- IrqPend = SK_FALSE;
- SK_IN32(IoC, B0_ISRC, &ISrc);
- SK_IN32(IoC, B0_IMSK, &OrgIMsk);
- if (Port == MAC_1) {
- NewIMsk = OrgIMsk & ~IS_LNK_SYNC_M1;
- if ((ISrc & IS_LNK_SYNC_M1) != 0) {
- IrqPend = SK_TRUE;
- }
- }
- else {
- NewIMsk = OrgIMsk & ~IS_LNK_SYNC_M2;
- if ((ISrc & IS_LNK_SYNC_M2) != 0) {
- IrqPend = SK_TRUE;
- }
- }
- if (!IrqPend) {
- SK_OUT32(IoC, B0_IMSK, NewIMsk);
- }
-
- /* load counter */
- SK_OUT32(IoC, MR_ADDR(Port, LNK_SYNC_INI), CntVal);
-
- /* start counter */
- SK_OUT8(IoC, MR_ADDR(Port, LNK_SYNC_CTRL), LED_START);
-
- if (!IrqPend) {
- /* clear the unexpected IRQ, and restore the interrupt mask */
- SK_OUT8(IoC, MR_ADDR(Port, LNK_SYNC_CTRL), LED_CLR_IRQ);
- SK_OUT32(IoC, B0_IMSK, OrgIMsk);
- }
-} /* SkGeLoadLnkSyncCnt*/
-
-
-/******************************************************************************
- *
- * SkGeCfgSync() - Configure synchronous bandwidth for this port.
- *
- * Description:
- * This function may be used to configure synchronous bandwidth
- * to the specified port. This may be done any time after
- * initializing the port. The configuration values are NOT saved
- * in the HWAC port structure and will be overwritten any
- * time when stopping and starting the port.
- * Any values for the synchronous configuration will be ignored
- * if the size of the synchronous queue is zero!
- *
- * The default configuration for the synchronous service is
- * TXA_ENA_FSYNC. This means if the size of
- * the synchronous queue is unequal zero but no specific
- * synchronous bandwidth is configured, the synchronous queue
- * will always have the 'unlimited' transmit priority!
- *
- * This mode will be restored if the synchronous bandwidth is
- * deallocated ('IntTime' = 0 and 'LimCount' = 0).
- *
- * Returns:
- * 0: success
- * 1: parameter configuration error
- * 2: try to configure quality of service although no
- * synchronous queue is configured
- */
-int SkGeCfgSync(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_U32 IntTime, /* Interval Timer Value in units of 8ns */
-SK_U32 LimCount, /* Number of bytes to transfer during IntTime */
-int SyncMode) /* Sync Mode: TXA_ENA_ALLOC | TXA_DIS_ALLOC | 0 */
-{
- int Rtv;
-
- Rtv = 0;
-
- /* check the parameters */
- if (LimCount > IntTime ||
- (LimCount == 0 && IntTime != 0) ||
- (LimCount != 0 && IntTime == 0)) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E010, SKERR_HWI_E010MSG);
- return(1);
- }
-
- if (pAC->GIni.GP[Port].PXSQSize == 0) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E009, SKERR_HWI_E009MSG);
- return(2);
- }
-
- /* calculate register values */
- IntTime = (IntTime / 2) * pAC->GIni.GIHstClkFact / 100;
- LimCount = LimCount / 8;
-
- if (IntTime > TXA_MAX_VAL || LimCount > TXA_MAX_VAL) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E010, SKERR_HWI_E010MSG);
- return(1);
- }
-
- /*
- * - Enable 'Force Sync' to ensure the synchronous queue
- * has the priority while configuring the new values.
- * - Also 'disable alloc' to ensure the settings complies
- * to the SyncMode parameter.
- * - Disable 'Rate Control' to configure the new values.
- * - write IntTime and LimCount
- * - start 'Rate Control' and disable 'Force Sync'
- * if Interval Timer or Limit Counter not zero.
- */
- SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL),
- TXA_ENA_FSYNC | TXA_DIS_ALLOC | TXA_STOP_RC);
-
- SK_OUT32(IoC, MR_ADDR(Port, TXA_ITI_INI), IntTime);
- SK_OUT32(IoC, MR_ADDR(Port, TXA_LIM_INI), LimCount);
-
- SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL),
- (SK_U8)(SyncMode & (TXA_ENA_ALLOC | TXA_DIS_ALLOC)));
-
- if (IntTime != 0 || LimCount != 0) {
- SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL), TXA_DIS_FSYNC | TXA_START_RC);
- }
-
- return(0);
-} /* SkGeCfgSync */
-
-
-/******************************************************************************
- *
- * DoInitRamQueue() - Initialize the RAM Buffer Address of a single Queue
- *
- * Desccription:
- * If the queue is used, enable and initialize it.
- * Make sure the queue is still reset, if it is not used.
- *
- * Returns:
- * nothing
- */
-static void DoInitRamQueue(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int QuIoOffs, /* Queue IO Address Offset */
-SK_U32 QuStartAddr, /* Queue Start Address */
-SK_U32 QuEndAddr, /* Queue End Address */
-int QuType) /* Queue Type (SK_RX_SRAM_Q|SK_RX_BRAM_Q|SK_TX_RAM_Q) */
-{
- SK_U32 RxUpThresVal;
- SK_U32 RxLoThresVal;
-
- if (QuStartAddr != QuEndAddr) {
- /* calculate thresholds, assume we have a big Rx queue */
- RxUpThresVal = (QuEndAddr + 1 - QuStartAddr - SK_RB_ULPP) / 8;
- RxLoThresVal = (QuEndAddr + 1 - QuStartAddr - SK_RB_LLPP_B)/8;
-
- /* build HW address format */
- QuStartAddr = QuStartAddr / 8;
- QuEndAddr = QuEndAddr / 8;
-
- /* release local reset */
- SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_RST_CLR);
-
- /* configure addresses */
- SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_START), QuStartAddr);
- SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_END), QuEndAddr);
- SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_WP), QuStartAddr);
- SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_RP), QuStartAddr);
-
- switch (QuType) {
- case SK_RX_SRAM_Q:
- /* configure threshold for small Rx Queue */
- RxLoThresVal += (SK_RB_LLPP_B - SK_RB_LLPP_S) / 8;
-
- /* continue with SK_RX_BRAM_Q */
- case SK_RX_BRAM_Q:
- /* write threshold for Rx Queue */
-
- SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_RX_UTPP), RxUpThresVal);
- SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_RX_LTPP), RxLoThresVal);
-
- /* the high priority threshold not used */
- break;
- case SK_TX_RAM_Q:
- /*
- * Do NOT use Store & Forward under normal operation due to
- * performance optimization (GENESIS only).
- * But if Jumbo Frames are configured (XMAC Tx FIFO is only 4 kB)
- * or YUKON is used ((GMAC Tx FIFO is only 1 kB)
- * we NEED Store & Forward of the RAM buffer.
- */
- if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK ||
- !pAC->GIni.GIGenesis) {
- /* enable Store & Forward Mode for the Tx Side */
- SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_ENA_STFWD);
- }
- break;
- }
-
- /* set queue operational */
- SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_ENA_OP_MD);
- }
- else {
- /* ensure the queue is still disabled */
- SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_RST_SET);
- }
-} /* DoInitRamQueue */
-
-
-/******************************************************************************
- *
- * SkGeInitRamBufs() - Initialize the RAM Buffer Queues
- *
- * Description:
- * Initialize all RAM Buffer Queues of the specified port
- *
- * Returns:
- * nothing
- */
-static void SkGeInitRamBufs(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- int RxQType;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PRxQSize == SK_MIN_RXQ_SIZE) {
- RxQType = SK_RX_SRAM_Q; /* small Rx Queue */
- } else {
- RxQType = SK_RX_BRAM_Q; /* big Rx Queue */
- }
-
- DoInitRamQueue(pAC, IoC, pPrt->PRxQOff, pPrt->PRxQRamStart,
- pPrt->PRxQRamEnd, RxQType);
-
- DoInitRamQueue(pAC, IoC, pPrt->PXsQOff, pPrt->PXsQRamStart,
- pPrt->PXsQRamEnd, SK_TX_RAM_Q);
-
- DoInitRamQueue(pAC, IoC, pPrt->PXaQOff, pPrt->PXaQRamStart,
- pPrt->PXaQRamEnd, SK_TX_RAM_Q);
-
-} /* SkGeInitRamBufs */
-
-
-/******************************************************************************
- *
- * SkGeInitRamIface() - Initialize the RAM Interface
- *
- * Description:
- * This function initializes the Adapters RAM Interface.
- *
- * Note:
- * This function is used in the diagnostics.
- *
- * Returns:
- * nothing
- */
-void SkGeInitRamIface(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- /* release local reset */
- SK_OUT16(IoC, B3_RI_CTRL, RI_RST_CLR);
-
- /* configure timeout values */
- SK_OUT8(IoC, B3_RI_WTO_R1, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_WTO_XA1, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_WTO_XS1, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_RTO_R1, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_RTO_XA1, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_RTO_XS1, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_WTO_R2, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_WTO_XA2, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_WTO_XS2, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_RTO_R2, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_RTO_XA2, SK_RI_TO_53);
- SK_OUT8(IoC, B3_RI_RTO_XS2, SK_RI_TO_53);
-
-} /* SkGeInitRamIface */
-
-
-/******************************************************************************
- *
- * SkGeInitBmu() - Initialize the BMU state machines
- *
- * Description:
- * Initialize all BMU state machines of the specified port
- *
- * Returns:
- * nothing
- */
-static void SkGeInitBmu(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U32 RxWm;
- SK_U32 TxWm;
-
- pPrt = &pAC->GIni.GP[Port];
-
- RxWm = SK_BMU_RX_WM;
- TxWm = SK_BMU_TX_WM;
-
- if (!pAC->GIni.GIPciSlot64 && !pAC->GIni.GIPciClock66) {
- /* for better performance */
- RxWm /= 2;
- TxWm /= 2;
- }
-
- /* Rx Queue: Release all local resets and set the watermark */
- SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), CSR_CLR_RESET);
- SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_F), RxWm);
-
- /*
- * Tx Queue: Release all local resets if the queue is used !
- * set watermark
- */
- if (pPrt->PXSQSize != 0) {
- SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_CLR_RESET);
- SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_F), TxWm);
- }
-
- if (pPrt->PXAQSize != 0) {
- SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_CLR_RESET);
- SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_F), TxWm);
- }
- /*
- * Do NOT enable the descriptor poll timers here, because
- * the descriptor addresses are not specified yet.
- */
-} /* SkGeInitBmu */
-
-
-/******************************************************************************
- *
- * TestStopBit() - Test the stop bit of the queue
- *
- * Description:
- * Stopping a queue is not as simple as it seems to be.
- * If descriptor polling is enabled, it may happen
- * that RX/TX stop is done and SV idle is NOT set.
- * In this case we have to issue another stop command.
- *
- * Returns:
- * The queues control status register
- */
-static SK_U32 TestStopBit(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int QuIoOffs) /* Queue IO Address Offset */
-{
- SK_U32 QuCsr; /* CSR contents */
-
- SK_IN32(IoC, Q_ADDR(QuIoOffs, Q_CSR), &QuCsr);
-
- if ((QuCsr & (CSR_STOP | CSR_SV_IDLE)) == 0) {
- /* Stop Descriptor overridden by start command */
- SK_OUT32(IoC, Q_ADDR(QuIoOffs, Q_CSR), CSR_STOP);
-
- SK_IN32(IoC, Q_ADDR(QuIoOffs, Q_CSR), &QuCsr);
- }
-
- return(QuCsr);
-} /* TestStopBit */
-
-
-/******************************************************************************
- *
- * SkGeStopPort() - Stop the Rx/Tx activity of the port 'Port'.
- *
- * Description:
- * After calling this function the descriptor rings and Rx and Tx
- * queues of this port may be reconfigured.
- *
- * It is possible to stop the receive and transmit path separate or
- * both together.
- *
- * Dir = SK_STOP_TX Stops the transmit path only and resets the MAC.
- * The receive queue is still active and
- * the pending Rx frames may be still transferred
- * into the RxD.
- * SK_STOP_RX Stop the receive path. The tansmit path
- * has to be stopped once before.
- * SK_STOP_ALL SK_STOP_TX + SK_STOP_RX
- *
- * RstMode = SK_SOFT_RST Resets the MAC. The PHY is still alive.
- * SK_HARD_RST Resets the MAC and the PHY.
- *
- * Example:
- * 1) A Link Down event was signaled for a port. Therefore the activity
- * of this port should be stopped and a hardware reset should be issued
- * to enable the workaround of XMAC errata #2. But the received frames
- * should not be discarded.
- * ...
- * SkGeStopPort(pAC, IoC, Port, SK_STOP_TX, SK_HARD_RST);
- * (transfer all pending Rx frames)
- * SkGeStopPort(pAC, IoC, Port, SK_STOP_RX, SK_HARD_RST);
- * ...
- *
- * 2) An event was issued which request the driver to switch
- * the 'virtual active' link to an other already active port
- * as soon as possible. The frames in the receive queue of this
- * port may be lost. But the PHY must not be reset during this
- * event.
- * ...
- * SkGeStopPort(pAC, IoC, Port, SK_STOP_ALL, SK_SOFT_RST);
- * ...
- *
- * Extended Description:
- * If SK_STOP_TX is set,
- * o disable the MAC's receive and transmitter to prevent
- * from sending incomplete frames
- * o stop the port's transmit queues before terminating the
- * BMUs to prevent from performing incomplete PCI cycles
- * on the PCI bus
- * - The network Rx and Tx activity and PCI Tx transfer is
- * disabled now.
- * o reset the MAC depending on the RstMode
- * o Stop Interval Timer and Limit Counter of Tx Arbiter,
- * also disable Force Sync bit and Enable Alloc bit.
- * o perform a local reset of the port's Tx path
- * - reset the PCI FIFO of the async Tx queue
- * - reset the PCI FIFO of the sync Tx queue
- * - reset the RAM Buffer async Tx queue
- * - reset the RAM Buffer sync Tx queue
- * - reset the MAC Tx FIFO
- * o switch Link and Tx LED off, stop the LED counters
- *
- * If SK_STOP_RX is set,
- * o stop the port's receive queue
- * - The path data transfer activity is fully stopped now.
- * o perform a local reset of the port's Rx path
- * - reset the PCI FIFO of the Rx queue
- * - reset the RAM Buffer receive queue
- * - reset the MAC Rx FIFO
- * o switch Rx LED off, stop the LED counter
- *
- * If all ports are stopped,
- * o reset the RAM Interface.
- *
- * Notes:
- * o This function may be called during the driver states RESET_PORT and
- * SWITCH_PORT.
- */
-void SkGeStopPort(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* I/O context */
-int Port, /* port to stop (MAC_1 + n) */
-int Dir, /* Direction to Stop (SK_STOP_RX, SK_STOP_TX, SK_STOP_ALL) */
-int RstMode)/* Reset Mode (SK_SOFT_RST, SK_HARD_RST) */
-{
-#ifndef SK_DIAG
- SK_EVPARA Para;
-#endif /* !SK_DIAG */
- SK_GEPORT *pPrt;
- SK_U32 DWord;
- SK_U32 XsCsr;
- SK_U32 XaCsr;
- SK_U64 ToutStart;
- int i;
- int ToutCnt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if ((Dir & SK_STOP_TX) != 0) {
- /* disable receiver and transmitter */
- SkMacRxTxDisable(pAC, IoC, Port);
-
- /* stop both transmit queues */
- /*
- * If the BMU is in the reset state CSR_STOP will terminate
- * immediately.
- */
- SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_STOP);
- SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_STOP);
-
- ToutStart = SkOsGetTime(pAC);
- ToutCnt = 0;
- do {
- /*
- * Clear packet arbiter timeout to make sure
- * this loop will terminate.
- */
- SK_OUT16(IoC, B3_PA_CTRL, (Port == MAC_1) ? PA_CLR_TO_TX1 :
- PA_CLR_TO_TX2);
-
- /*
- * If the transfer stucks at the MAC the STOP command will not
- * terminate if we don't flush the XMAC's transmit FIFO !
- */
- SkMacFlushTxFifo(pAC, IoC, Port);
-
- XsCsr = TestStopBit(pAC, IoC, pPrt->PXsQOff);
- XaCsr = TestStopBit(pAC, IoC, pPrt->PXaQOff);
-
- if (SkOsGetTime(pAC) - ToutStart > (SK_TICKS_PER_SEC / 18)) {
- /*
- * Timeout of 1/18 second reached.
- * This needs to be checked at 1/18 sec only.
- */
- ToutCnt++;
- if (ToutCnt > 1) {
- /* Might be a problem when the driver event handler
- * calls StopPort again. XXX.
- */
-
- /* Fatal Error, Loop aborted */
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_HWI_E018,
- SKERR_HWI_E018MSG);
-#ifndef SK_DIAG
- Para.Para64 = Port;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
-#endif /* !SK_DIAG */
- return;
- }
- /*
- * Cache incoherency workaround: Assume a start command
- * has been lost while sending the frame.
- */
- ToutStart = SkOsGetTime(pAC);
-
- if ((XsCsr & CSR_STOP) != 0) {
- SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_START);
- }
- if ((XaCsr & CSR_STOP) != 0) {
- SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_START);
- }
- }
-
- /*
- * Because of the ASIC problem report entry from 21.08.1998 it is
- * required to wait until CSR_STOP is reset and CSR_SV_IDLE is set.
- */
- } while ((XsCsr & (CSR_STOP | CSR_SV_IDLE)) != CSR_SV_IDLE ||
- (XaCsr & (CSR_STOP | CSR_SV_IDLE)) != CSR_SV_IDLE);
-
- /* Reset the MAC depending on the RstMode */
- if (RstMode == SK_SOFT_RST) {
- SkMacSoftRst(pAC, IoC, Port);
- }
- else {
- SkMacHardRst(pAC, IoC, Port);
- }
-
- /* Disable Force Sync bit and Enable Alloc bit */
- SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL),
- TXA_DIS_FSYNC | TXA_DIS_ALLOC | TXA_STOP_RC);
-
- /* Stop Interval Timer and Limit Counter of Tx Arbiter */
- SK_OUT32(IoC, MR_ADDR(Port, TXA_ITI_INI), 0L);
- SK_OUT32(IoC, MR_ADDR(Port, TXA_LIM_INI), 0L);
-
- /* Perform a local reset of the port's Tx path */
-
- /* Reset the PCI FIFO of the async Tx queue */
- SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_SET_RESET);
- /* Reset the PCI FIFO of the sync Tx queue */
- SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_SET_RESET);
- /* Reset the RAM Buffer async Tx queue */
- SK_OUT8(IoC, RB_ADDR(pPrt->PXaQOff, RB_CTRL), RB_RST_SET);
- /* Reset the RAM Buffer sync Tx queue */
- SK_OUT8(IoC, RB_ADDR(pPrt->PXsQOff, RB_CTRL), RB_RST_SET);
-
- /* Reset Tx MAC FIFO */
- if (pAC->GIni.GIGenesis) {
- /* Note: MFF_RST_SET does NOT reset the XMAC ! */
- SK_OUT8(IoC, MR_ADDR(Port, TX_MFF_CTRL2), MFF_RST_SET);
-
- /* switch Link and Tx LED off, stop the LED counters */
- /* Link LED is switched off by the RLMT and the Diag itself */
- SkGeXmitLED(pAC, IoC, MR_ADDR(Port, TX_LED_INI), SK_LED_DIS);
- }
- else {
- /* Reset TX MAC FIFO */
- SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U8)GMF_RST_SET);
- }
- }
-
- if ((Dir & SK_STOP_RX) != 0) {
- /*
- * The RX Stop Command will not terminate if no buffers
- * are queued in the RxD ring. But it will always reach
- * the Idle state. Therefore we can use this feature to
- * stop the transfer of received packets.
- */
- /* stop the port's receive queue */
- SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), CSR_STOP);
-
- i = 100;
- do {
- /*
- * Clear packet arbiter timeout to make sure
- * this loop will terminate
- */
- SK_OUT16(IoC, B3_PA_CTRL, (Port == MAC_1) ? PA_CLR_TO_RX1 :
- PA_CLR_TO_RX2);
-
- DWord = TestStopBit(pAC, IoC, pPrt->PRxQOff);
-
- /* timeout if i==0 (bug fix for #10748) */
- if (--i == 0) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_HWI_E024,
- SKERR_HWI_E024MSG);
- break;
- }
- /*
- * because of the ASIC problem report entry from 21.08.98
- * it is required to wait until CSR_STOP is reset and
- * CSR_SV_IDLE is set.
- */
- } while ((DWord & (CSR_STOP | CSR_SV_IDLE)) != CSR_SV_IDLE);
-
- /* The path data transfer activity is fully stopped now */
-
- /* Perform a local reset of the port's Rx path */
-
- /* Reset the PCI FIFO of the Rx queue */
- SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), CSR_SET_RESET);
- /* Reset the RAM Buffer receive queue */
- SK_OUT8(IoC, RB_ADDR(pPrt->PRxQOff, RB_CTRL), RB_RST_SET);
-
- /* Reset Rx MAC FIFO */
- if (pAC->GIni.GIGenesis) {
-
- SK_OUT8(IoC, MR_ADDR(Port, RX_MFF_CTRL2), MFF_RST_SET);
-
- /* switch Rx LED off, stop the LED counter */
- SkGeXmitLED(pAC, IoC, MR_ADDR(Port, RX_LED_INI), SK_LED_DIS);
- }
- else {
- /* Reset Rx MAC FIFO */
- SK_OUT8(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), (SK_U8)GMF_RST_SET);
- }
- }
-} /* SkGeStopPort */
-
-
-/******************************************************************************
- *
- * SkGeInit0() - Level 0 Initialization
- *
- * Description:
- * - Initialize the BMU address offsets
- *
- * Returns:
- * nothing
- */
-static void SkGeInit0(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- int i;
- SK_GEPORT *pPrt;
-
- for (i = 0; i < SK_MAX_MACS; i++) {
- pPrt = &pAC->GIni.GP[i];
-
- pPrt->PState = SK_PRT_RESET;
- pPrt->PRxQOff = QOffTab[i].RxQOff;
- pPrt->PXsQOff = QOffTab[i].XsQOff;
- pPrt->PXaQOff = QOffTab[i].XaQOff;
- pPrt->PCheckPar = SK_FALSE;
- pPrt->PIsave = 0;
- pPrt->PPrevShorts = 0;
- pPrt->PLinkResCt = 0;
- pPrt->PAutoNegTOCt = 0;
- pPrt->PPrevRx = 0;
- pPrt->PPrevFcs = 0;
- pPrt->PRxLim = SK_DEF_RX_WA_LIM;
- pPrt->PLinkMode = SK_LMODE_AUTOFULL;
- pPrt->PLinkSpeedCap = SK_LSPEED_CAP_1000MBPS;
- pPrt->PLinkSpeed = SK_LSPEED_1000MBPS;
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_UNKNOWN;
- pPrt->PLinkModeConf = SK_LMODE_AUTOSENSE;
- pPrt->PFlowCtrlMode = SK_FLOW_MODE_SYM_OR_REM;
- pPrt->PLinkBroken = SK_TRUE; /* See WA code */
- pPrt->PLinkCap = (SK_LMODE_CAP_HALF | SK_LMODE_CAP_FULL |
- SK_LMODE_CAP_AUTOHALF | SK_LMODE_CAP_AUTOFULL);
- pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
- pPrt->PFlowCtrlCap = SK_FLOW_MODE_SYM_OR_REM;
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
- pPrt->PMSCap = 0;
- pPrt->PMSMode = SK_MS_MODE_AUTO;
- pPrt->PMSStatus = SK_MS_STAT_UNSET;
- pPrt->PAutoNegFail = SK_FALSE;
- pPrt->PLipaAutoNeg = SK_LIPA_UNKNOWN;
- pPrt->PHWLinkUp = SK_FALSE;
- }
-
- pAC->GIni.GIPortUsage = SK_RED_LINK;
-
-} /* SkGeInit0*/
-
-#ifdef SK_PCI_RESET
-
-/******************************************************************************
- *
- * SkGePciReset() - Reset PCI interface
- *
- * Description:
- * o Read PCI configuration.
- * o Change power state to 3.
- * o Change power state to 0.
- * o Restore PCI configuration.
- *
- * Returns:
- * 0: Success.
- * 1: Power state could not be changed to 3.
- */
-static int SkGePciReset(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- int i;
- SK_U16 PmCtlSts;
- SK_U32 Bp1;
- SK_U32 Bp2;
- SK_U16 PciCmd;
- SK_U8 Cls;
- SK_U8 Lat;
- SK_U8 ConfigSpace[PCI_CFG_SIZE];
-
- /*
- * Note: Switching to D3 state is like a software reset.
- * Switching from D3 to D0 is a hardware reset.
- * We have to save and restore the configuration space.
- */
- for (i = 0; i < PCI_CFG_SIZE; i++) {
- SkPciReadCfgDWord(pAC, i*4, &ConfigSpace[i]);
- }
-
- /* We know the RAM Interface Arbiter is enabled. */
- SkPciWriteCfgWord(pAC, PCI_PM_CTL_STS, PCI_PM_STATE_D3);
- SkPciReadCfgWord(pAC, PCI_PM_CTL_STS, &PmCtlSts);
-
- if ((PmCtlSts & PCI_PM_STATE_MSK) != PCI_PM_STATE_D3) {
- return(1);
- }
-
- /* Return to D0 state. */
- SkPciWriteCfgWord(pAC, PCI_PM_CTL_STS, PCI_PM_STATE_D0);
-
- /* Check for D0 state. */
- SkPciReadCfgWord(pAC, PCI_PM_CTL_STS, &PmCtlSts);
-
- if ((PmCtlSts & PCI_PM_STATE_MSK) != PCI_PM_STATE_D0) {
- return(1);
- }
-
- /* Check PCI Config Registers. */
- SkPciReadCfgWord(pAC, PCI_COMMAND, &PciCmd);
- SkPciReadCfgByte(pAC, PCI_CACHE_LSZ, &Cls);
- SkPciReadCfgDWord(pAC, PCI_BASE_1ST, &Bp1);
- SkPciReadCfgDWord(pAC, PCI_BASE_2ND, &Bp2);
- SkPciReadCfgByte(pAC, PCI_LAT_TIM, &Lat);
-
- if (PciCmd != 0 || Cls != 0 || (Bp1 & 0xfffffff0L) != 0 || Bp2 != 1 ||
- Lat != 0) {
- return(1);
- }
-
- /* Restore PCI Config Space. */
- for (i = 0; i < PCI_CFG_SIZE; i++) {
- SkPciWriteCfgDWord(pAC, i*4, ConfigSpace[i]);
- }
-
- return(0);
-} /* SkGePciReset */
-
-#endif /* SK_PCI_RESET */
-
-/******************************************************************************
- *
- * SkGeInit1() - Level 1 Initialization
- *
- * Description:
- * o Do a software reset.
- * o Clear all reset bits.
- * o Verify that the detected hardware is present.
- * Return an error if not.
- * o Get the hardware configuration
- * + Read the number of MACs/Ports.
- * + Read the RAM size.
- * + Read the PCI Revision Id.
- * + Find out the adapters host clock speed
- * + Read and check the PHY type
- *
- * Returns:
- * 0: success
- * 5: Unexpected PHY type detected
- * 6: HW self test failed
- */
-static int SkGeInit1(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- SK_U8 Byte;
- SK_U16 Word;
- SK_U16 CtrlStat;
- SK_U32 FlashAddr;
- int RetVal;
- int i;
-
- RetVal = 0;
-
- /* save CLK_RUN bits (YUKON-Lite) */
- SK_IN16(IoC, B0_CTST, &CtrlStat);
-
-#ifdef SK_PCI_RESET
- (void)SkGePciReset(pAC, IoC);
-#endif /* SK_PCI_RESET */
-
- /* do the SW-reset */
- SK_OUT8(IoC, B0_CTST, CS_RST_SET);
-
- /* release the SW-reset */
- SK_OUT8(IoC, B0_CTST, CS_RST_CLR);
-
- /* reset all error bits in the PCI STATUS register */
- /*
- * Note: PCI Cfg cycles cannot be used, because they are not
- * available on some platforms after 'boot time'.
- */
- SK_IN16(IoC, PCI_C(PCI_STATUS), &Word);
-
- SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);
- SK_OUT16(IoC, PCI_C(PCI_STATUS), Word | PCI_ERRBITS);
- SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
-
- /* release Master Reset */
- SK_OUT8(IoC, B0_CTST, CS_MRST_CLR);
-
-#ifdef CLK_RUN
- CtrlStat |= CS_CLK_RUN_ENA;
-#endif /* CLK_RUN */
-
- /* restore CLK_RUN bits */
- SK_OUT16(IoC, B0_CTST, CtrlStat &
- (CS_CLK_RUN_HOT | CS_CLK_RUN_RST | CS_CLK_RUN_ENA));
-
- /* read Chip Identification Number */
- SK_IN8(IoC, B2_CHIP_ID, &Byte);
- pAC->GIni.GIChipId = Byte;
-
- /* read number of MACs */
- SK_IN8(IoC, B2_MAC_CFG, &Byte);
- pAC->GIni.GIMacsFound = (Byte & CONFIG_SYS_SNG_MAC) ? 1 : 2;
-
- /* get Chip Revision Number */
- pAC->GIni.GIChipRev = (SK_U8)((Byte & CONFIG_SYS_CHIP_R_MSK) >> 4);
-
- /* get diff. PCI parameters */
- SK_IN16(IoC, B0_CTST, &CtrlStat);
-
- /* read the adapters RAM size */
- SK_IN8(IoC, B2_E_0, &Byte);
-
- if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
-
- pAC->GIni.GIGenesis = SK_TRUE;
-
- if (Byte == 3) {
- /* special case: 4 x 64k x 36, offset = 0x80000 */
- pAC->GIni.GIRamSize = 1024;
- pAC->GIni.GIRamOffs = (SK_U32)512 * 1024;
- }
- else {
- pAC->GIni.GIRamSize = (int)Byte * 512;
- pAC->GIni.GIRamOffs = 0;
- }
- /* all GE adapters work with 53.125 MHz host clock */
- pAC->GIni.GIHstClkFact = SK_FACT_53;
-
- /* set Descr. Poll Timer Init Value to 250 ms */
- pAC->GIni.GIPollTimerVal =
- SK_DPOLL_DEF * (SK_U32)pAC->GIni.GIHstClkFact / 100;
- }
- else {
- pAC->GIni.GIGenesis = SK_FALSE;
-
-#ifndef VCPU
- pAC->GIni.GIRamSize = (Byte == 0) ? 128 : (int)Byte * 4;
-#else
- pAC->GIni.GIRamSize = 128;
-#endif
- pAC->GIni.GIRamOffs = 0;
-
- /* WA for chip Rev. A */
- pAC->GIni.GIWolOffs = (pAC->GIni.GIChipRev == 0) ? WOL_REG_OFFS : 0;
-
- /* get PM Capabilities of PCI config space */
- SK_IN16(IoC, PCI_C(PCI_PM_CAP_REG), &Word);
-
- /* check if VAUX is available */
- if (((CtrlStat & CS_VAUX_AVAIL) != 0) &&
- /* check also if PME from D3cold is set */
- ((Word & PCI_PME_D3C_SUP) != 0)) {
- /* set entry in GE init struct */
- pAC->GIni.GIVauxAvail = SK_TRUE;
- }
-
- /* save Flash-Address Register */
- SK_IN32(IoC, B2_FAR, &FlashAddr);
-
- /* test Flash-Address Register */
- SK_OUT8(IoC, B2_FAR + 3, 0xff);
- SK_IN8(IoC, B2_FAR + 3, &Byte);
-
- pAC->GIni.GIYukonLite = (SK_BOOL)(Byte != 0);
-
- /* restore Flash-Address Register */
- SK_OUT32(IoC, B2_FAR, FlashAddr);
-
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
- /* set GMAC Link Control reset */
- SK_OUT16(IoC, MR_ADDR(i, GMAC_LINK_CTRL), GMLC_RST_SET);
-
- /* clear GMAC Link Control reset */
- SK_OUT16(IoC, MR_ADDR(i, GMAC_LINK_CTRL), GMLC_RST_CLR);
- }
- /* all YU chips work with 78.125 MHz host clock */
- pAC->GIni.GIHstClkFact = SK_FACT_78;
-
- pAC->GIni.GIPollTimerVal = SK_DPOLL_MAX; /* 215 ms */
- }
-
- /* check if 64-bit PCI Slot is present */
- pAC->GIni.GIPciSlot64 = (SK_BOOL)((CtrlStat & CS_BUS_SLOT_SZ) != 0);
-
- /* check if 66 MHz PCI Clock is active */
- pAC->GIni.GIPciClock66 = (SK_BOOL)((CtrlStat & CS_BUS_CLOCK) != 0);
-
- /* read PCI HW Revision Id. */
- SK_IN8(IoC, PCI_C(PCI_REV_ID), &Byte);
- pAC->GIni.GIPciHwRev = Byte;
-
- /* read the PMD type */
- SK_IN8(IoC, B2_PMD_TYP, &Byte);
- pAC->GIni.GICopperType = (SK_U8)(Byte == 'T');
-
- /* read the PHY type */
- SK_IN8(IoC, B2_E_1, &Byte);
-
- Byte &= 0x0f; /* the PHY type is stored in the lower nibble */
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
-
- if (pAC->GIni.GIGenesis) {
- switch (Byte) {
- case SK_PHY_XMAC:
- pAC->GIni.GP[i].PhyAddr = PHY_ADDR_XMAC;
- break;
- case SK_PHY_BCOM:
- pAC->GIni.GP[i].PhyAddr = PHY_ADDR_BCOM;
- pAC->GIni.GP[i].PMSCap =
- SK_MS_CAP_AUTO | SK_MS_CAP_MASTER | SK_MS_CAP_SLAVE;
- break;
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- pAC->GIni.GP[i].PhyAddr = PHY_ADDR_LONE;
- break;
- case SK_PHY_NAT:
- pAC->GIni.GP[i].PhyAddr = PHY_ADDR_NAT;
- break;
-#endif /* OTHER_PHY */
- default:
- /* ERROR: unexpected PHY type detected */
- RetVal = 5;
- break;
- }
- }
- else {
- if (Byte == 0) {
- /* if this field is not initialized */
- Byte = SK_PHY_MARV_COPPER;
- pAC->GIni.GICopperType = SK_TRUE;
- }
- pAC->GIni.GP[i].PhyAddr = PHY_ADDR_MARV;
-
- if (pAC->GIni.GICopperType) {
- pAC->GIni.GP[i].PLinkSpeedCap = SK_LSPEED_CAP_AUTO |
- SK_LSPEED_CAP_10MBPS | SK_LSPEED_CAP_100MBPS |
- SK_LSPEED_CAP_1000MBPS;
- pAC->GIni.GP[i].PLinkSpeed = SK_LSPEED_AUTO;
- pAC->GIni.GP[i].PMSCap =
- SK_MS_CAP_AUTO | SK_MS_CAP_MASTER | SK_MS_CAP_SLAVE;
- }
- else {
- Byte = SK_PHY_MARV_FIBER;
- }
- }
-
- pAC->GIni.GP[i].PhyType = Byte;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
- ("PHY type: %d PHY addr: %04x\n", Byte,
- pAC->GIni.GP[i].PhyAddr));
- }
-
- /* get Mac Type & set function pointers dependent on */
- if (pAC->GIni.GIGenesis) {
- pAC->GIni.GIMacType = SK_MAC_XMAC;
-
- pAC->GIni.GIFunc.pFnMacUpdateStats = SkXmUpdateStats;
- pAC->GIni.GIFunc.pFnMacStatistic = SkXmMacStatistic;
- pAC->GIni.GIFunc.pFnMacResetCounter = SkXmResetCounter;
- pAC->GIni.GIFunc.pFnMacOverflow = SkXmOverflowStatus;
- }
- else {
- pAC->GIni.GIMacType = SK_MAC_GMAC;
-
- pAC->GIni.GIFunc.pFnMacUpdateStats = SkGmUpdateStats;
- pAC->GIni.GIFunc.pFnMacStatistic = SkGmMacStatistic;
- pAC->GIni.GIFunc.pFnMacResetCounter = SkGmResetCounter;
- pAC->GIni.GIFunc.pFnMacOverflow = SkGmOverflowStatus;
-
-#ifdef SPECIAL_HANDLING
- if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
- /* check HW self test result */
- SK_IN8(IoC, B2_E_3, &Byte);
- if ((Byte & B2_E3_RES_MASK) != 0) {
- RetVal = 6;
- }
- }
-#endif
- }
- return(RetVal);
-} /* SkGeInit1 */
-
-
-/******************************************************************************
- *
- * SkGeInit2() - Level 2 Initialization
- *
- * Description:
- * - start the Blink Source Counter
- * - start the Descriptor Poll Timer
- * - configure the MAC-Arbiter
- * - configure the Packet-Arbiter
- * - enable the Tx Arbiters
- * - enable the RAM Interface Arbiter
- *
- * Returns:
- * nothing
- */
-static void SkGeInit2(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- SK_U32 DWord;
- int i;
-
- /* start the Descriptor Poll Timer */
- if (pAC->GIni.GIPollTimerVal != 0) {
- if (pAC->GIni.GIPollTimerVal > SK_DPOLL_MAX) {
- pAC->GIni.GIPollTimerVal = SK_DPOLL_MAX;
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E017, SKERR_HWI_E017MSG);
- }
- SK_OUT32(IoC, B28_DPT_INI, pAC->GIni.GIPollTimerVal);
- SK_OUT8(IoC, B28_DPT_CTRL, DPT_START);
- }
-
- if (pAC->GIni.GIGenesis) {
- /* start the Blink Source Counter */
- DWord = SK_BLK_DUR * (SK_U32)pAC->GIni.GIHstClkFact / 100;
-
- SK_OUT32(IoC, B2_BSC_INI, DWord);
- SK_OUT8(IoC, B2_BSC_CTRL, BSC_START);
-
- /*
- * Configure the MAC Arbiter and the Packet Arbiter.
- * They will be started once and never be stopped.
- */
- SkGeInitMacArb(pAC, IoC);
-
- SkGeInitPktArb(pAC, IoC);
- }
- else {
- /* start Time Stamp Timer */
- SK_OUT8(IoC, GMAC_TI_ST_CTRL, (SK_U8)GMT_ST_START);
- }
-
- /* enable the Tx Arbiters */
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
- SK_OUT8(IoC, MR_ADDR(i, TXA_CTRL), TXA_ENA_ARB);
- }
-
- /* enable the RAM Interface Arbiter */
- SkGeInitRamIface(pAC, IoC);
-
-} /* SkGeInit2 */
-
-/******************************************************************************
- *
- * SkGeInit() - Initialize the GE Adapter with the specified level.
- *
- * Description:
- * Level 0: Initialize the Module structures.
- * Level 1: Generic Hardware Initialization. The IOP/MemBase pointer has
- * to be set before calling this level.
- *
- * o Do a software reset.
- * o Clear all reset bits.
- * o Verify that the detected hardware is present.
- * Return an error if not.
- * o Get the hardware configuration
- * + Set GIMacsFound with the number of MACs.
- * + Store the RAM size in GIRamSize.
- * + Save the PCI Revision ID in GIPciHwRev.
- * o return an error
- * if Number of MACs > SK_MAX_MACS
- *
- * After returning from Level 0 the adapter
- * may be accessed with IO operations.
- *
- * Level 2: start the Blink Source Counter
- *
- * Returns:
- * 0: success
- * 1: Number of MACs exceeds SK_MAX_MACS (after level 1)
- * 2: Adapter not present or not accessible
- * 3: Illegal initialization level
- * 4: Initialization Level 1 Call missing
- * 5: Unexpected PHY type detected
- * 6: HW self test failed
- */
-int SkGeInit(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Level) /* initialization level */
-{
- int RetVal; /* return value */
- SK_U32 DWord;
-
- RetVal = 0;
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
- ("SkGeInit(Level %d)\n", Level));
-
- switch (Level) {
- case SK_INIT_DATA:
- /* Initialization Level 0 */
- SkGeInit0(pAC, IoC);
- pAC->GIni.GILevel = SK_INIT_DATA;
- break;
-
- case SK_INIT_IO:
- /* Initialization Level 1 */
- RetVal = SkGeInit1(pAC, IoC);
- if (RetVal != 0) {
- break;
- }
-
- /* check if the adapter seems to be accessible */
- SK_OUT32(IoC, B2_IRQM_INI, 0x11335577L);
- SK_IN32(IoC, B2_IRQM_INI, &DWord);
- SK_OUT32(IoC, B2_IRQM_INI, 0L);
-
- if (DWord != 0x11335577L) {
- RetVal = 2;
- break;
- }
-
- /* check if the number of GIMacsFound matches SK_MAX_MACS */
- if (pAC->GIni.GIMacsFound > SK_MAX_MACS) {
- RetVal = 1;
- break;
- }
-
- /* Level 1 successfully passed */
- pAC->GIni.GILevel = SK_INIT_IO;
- break;
-
- case SK_INIT_RUN:
- /* Initialization Level 2 */
- if (pAC->GIni.GILevel != SK_INIT_IO) {
-#ifndef SK_DIAG
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E002, SKERR_HWI_E002MSG);
-#endif /* !SK_DIAG */
- RetVal = 4;
- break;
- }
- SkGeInit2(pAC, IoC);
-
- /* Level 2 successfully passed */
- pAC->GIni.GILevel = SK_INIT_RUN;
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E003, SKERR_HWI_E003MSG);
- RetVal = 3;
- break;
- }
-
- return(RetVal);
-} /* SkGeInit */
-
-
-/******************************************************************************
- *
- * SkGeDeInit() - Deinitialize the adapter
- *
- * Description:
- * All ports of the adapter will be stopped if not already done.
- * Do a software reset and switch off all LEDs.
- *
- * Returns:
- * nothing
- */
-void SkGeDeInit(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC) /* IO context */
-{
- int i;
- SK_U16 Word;
-
-#ifndef VCPU
- /* ensure I2C is ready */
- SkI2cWaitIrq(pAC, IoC);
-#endif
-
- /* stop all current transfer activity */
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
- if (pAC->GIni.GP[i].PState != SK_PRT_STOP &&
- pAC->GIni.GP[i].PState != SK_PRT_RESET) {
-
- SkGeStopPort(pAC, IoC, i, SK_STOP_ALL, SK_HARD_RST);
- }
- }
-
- /* Reset all bits in the PCI STATUS register */
- /*
- * Note: PCI Cfg cycles cannot be used, because they are not
- * available on some platforms after 'boot time'.
- */
- SK_IN16(IoC, PCI_C(PCI_STATUS), &Word);
-
- SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);
- SK_OUT16(IoC, PCI_C(PCI_STATUS), Word | PCI_ERRBITS);
- SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
-
- /* do the reset, all LEDs are switched off now */
- SK_OUT8(IoC, B0_CTST, CS_RST_SET);
-} /* SkGeDeInit */
-
-
-/******************************************************************************
- *
- * SkGeInitPort() Initialize the specified port.
- *
- * Description:
- * PRxQSize, PXSQSize, and PXAQSize has to be
- * configured for the specified port before calling this function.
- * The descriptor rings has to be initialized too.
- *
- * o (Re)configure queues of the specified port.
- * o configure the MAC of the specified port.
- * o put ASIC and MAC(s) in operational mode.
- * o initialize Rx/Tx and Sync LED
- * o initialize RAM Buffers and MAC FIFOs
- *
- * The port is ready to connect when returning.
- *
- * Note:
- * The MAC's Rx and Tx state machine is still disabled when returning.
- *
- * Returns:
- * 0: success
- * 1: Queue size initialization error. The configured values
- * for PRxQSize, PXSQSize, or PXAQSize are invalid for one
- * or more queues. The specified port was NOT initialized.
- * An error log entry was generated.
- * 2: The port has to be stopped before it can be initialized again.
- */
-int SkGeInitPort(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port to configure */
-{
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (SkGeCheckQSize(pAC, Port) != 0) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E004, SKERR_HWI_E004MSG);
- return(1);
- }
-
- if (pPrt->PState == SK_PRT_INIT || pPrt->PState == SK_PRT_RUN) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E005, SKERR_HWI_E005MSG);
- return(2);
- }
-
- /* configuration ok, initialize the Port now */
-
- if (pAC->GIni.GIGenesis) {
- /* initialize Rx, Tx and Link LED */
- /*
- * If 1000BT Phy needs LED initialization than swap
- * LED and XMAC initialization order
- */
- SkGeXmitLED(pAC, IoC, MR_ADDR(Port, TX_LED_INI), SK_LED_ENA);
- SkGeXmitLED(pAC, IoC, MR_ADDR(Port, RX_LED_INI), SK_LED_ENA);
- /* The Link LED is initialized by RLMT or Diagnostics itself */
-
- SkXmInitMac(pAC, IoC, Port);
- }
- else {
-
- SkGmInitMac(pAC, IoC, Port);
- }
-
- /* do NOT initialize the Link Sync Counter */
-
- SkGeInitMacFifo(pAC, IoC, Port);
-
- SkGeInitRamBufs(pAC, IoC, Port);
-
- if (pPrt->PXSQSize != 0) {
- /* enable Force Sync bit if synchronous queue available */
- SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL), TXA_ENA_FSYNC);
- }
-
- SkGeInitBmu(pAC, IoC, Port);
-
- /* mark port as initialized */
- pPrt->PState = SK_PRT_INIT;
-
- return(0);
-} /* SkGeInitPort */
+/******************************************************************************
+ *
+ * Name: skgeinit.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Contains functions to initialize the GE HW
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgeinit.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.85 2003/02/05 15:30:33 rschmidt
+ * Corrected setting of GIHstClkFact (Host Clock Factor) and
+ * GIPollTimerVal (Descr. Poll Timer Init Value) for YUKON.
+ * Editorial changes.
+ *
+ * Revision 1.84 2003/01/28 09:57:25 rschmidt
+ * Added detection of YUKON-Lite Rev. A0 (stored in GIYukonLite).
+ * Disabled Rx GMAC FIFO Flush for YUKON-Lite Rev. A0.
+ * Added support for CLK_RUN (YUKON-Lite).
+ * Added additional check of PME from D3cold for setting GIVauxAvail.
+ * Editorial changes.
+ *
+ * Revision 1.83 2002/12/17 16:15:41 rschmidt
+ * Added default setting of PhyType (Copper) for YUKON.
+ * Added define around check for HW self test results.
+ * Editorial changes.
+ *
+ * Revision 1.82 2002/12/05 13:40:21 rschmidt
+ * Added setting of Rx GMAC FIFO Flush Mask register.
+ * Corrected PhyType with new define SK_PHY_MARV_FIBER when
+ * YUKON Fiber board was found.
+ * Editorial changes.
+ *
+ * Revision 1.81 2002/11/15 12:48:35 rschmidt
+ * Replaced message SKERR_HWI_E018 with SKERR_HWI_E024 for Rx queue error
+ * in SkGeStopPort().
+ * Added init for pAC->GIni.GIGenesis with SK_FALSE in YUKON-branch.
+ * Editorial changes.
+ *
+ * Revision 1.80 2002/11/12 17:28:30 rschmidt
+ * Initialized GIPciSlot64 and GIPciClock66 in SkGeInit1().
+ * Reduced PCI FIFO watermarks for 32bit/33MHz bus in SkGeInitBmu().
+ * Editorial changes.
+ *
+ * Revision 1.79 2002/10/21 09:31:02 mkarl
+ * Changed SkGeInitAssignRamToQueues(), removed call to
+ * SkGeInitAssignRamToQueues in SkGeInit1 and fixed compiler warning in
+ * SkGeInit1.
+ *
+ * Revision 1.78 2002/10/16 15:55:07 mkarl
+ * Fixed a bug in SkGeInitAssignRamToQueues.
+ *
+ * Revision 1.77 2002/10/14 15:07:22 rschmidt
+ * Corrected timeout handling for Rx queue in SkGeStopPort() (#10748)
+ * Editorial changes.
+ *
+ * Revision 1.76 2002/10/11 09:24:38 mkarl
+ * Added check for HW self test results.
+ *
+ * Revision 1.75 2002/10/09 16:56:44 mkarl
+ * Now call SkGeInitAssignRamToQueues() in Init Level 1 in order to assign
+ * the adapter memory to the queues. This default assignment is not suitable
+ * for dual net mode.
+ *
+ * Revision 1.74 2002/09/12 08:45:06 rwahl
+ * Set defaults for PMSCap, PLinkSpeed & PLinkSpeedCap dependent on PHY.
+ *
+ * Revision 1.73 2002/08/16 15:19:45 rschmidt
+ * Corrected check for Tx queues in SkGeCheckQSize().
+ * Added init for new entry GIGenesis and GICopperType
+ * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis.
+ * Replaced wrong 1st para pAC with IoC in SK_IN/OUT macros.
+ *
+ * Revision 1.72 2002/08/12 13:38:55 rschmidt
+ * Added check if VAUX is available (stored in GIVauxAvail)
+ * Initialized PLinkSpeedCap in Port struct with SK_LSPEED_CAP_1000MBPS
+ * Editorial changes.
+ *
+ * Revision 1.71 2002/08/08 16:32:58 rschmidt
+ * Added check for Tx queues in SkGeCheckQSize().
+ * Added start of Time Stamp Timer (YUKON) in SkGeInit2().
+ * Editorial changes.
+ *
+ * Revision 1.70 2002/07/23 16:04:26 rschmidt
+ * Added init for GIWolOffs (HW-Bug in YUKON 1st rev.)
+ * Minor changes
+ *
+ * Revision 1.69 2002/07/17 17:07:08 rwahl
+ * - SkGeInit1(): fixed PHY type debug output; corrected init of GIFunc
+ * table & GIMacType.
+ * - Editorial changes.
+ *
+ * Revision 1.68 2002/07/15 18:38:31 rwahl
+ * Added initialization for MAC type dependent function table.
+ *
+ * Revision 1.67 2002/07/15 15:45:39 rschmidt
+ * Added Tx Store & Forward for YUKON (GMAC Tx FIFO is only 1 kB)
+ * Replaced SK_PHY_MARV by SK_PHY_MARV_COPPER
+ * Editorial changes
+ *
+ * Revision 1.66 2002/06/10 09:35:08 rschmidt
+ * Replaced C++ comments (//)
+ * Editorial changes
+ *
+ * Revision 1.65 2002/06/05 08:33:37 rschmidt
+ * Changed GIRamSize and Reset sequence for YUKON.
+ * SkMacInit() replaced by SkXmInitMac() resp. SkGmInitMac()
+ *
+ * Revision 1.64 2002/04/25 13:03:20 rschmidt
+ * Changes for handling YUKON.
+ * Removed reference to xmac_ii.h (not necessary).
+ * Moved all defines into header file.
+ * Replaced all SkXm...() functions with SkMac...() to handle also
+ * YUKON's GMAC.
+ * Added handling for GMAC FIFO in SkGeInitMacFifo(), SkGeStopPort().
+ * Removed 'goto'-directive from SkGeCfgSync(), SkGeCheckQSize().
+ * Replaced all XMAC-access macros by functions: SkMacRxTxDisable(),
+ * SkMacFlushTxFifo().
+ * Optimized timeout handling in SkGeStopPort().
+ * Initialized PLinkSpeed in Port struct with SK_LSPEED_AUTO.
+ * Release of GMAC Link Control reset in SkGeInit1().
+ * Initialized GIChipId and GIChipRev in GE Init structure.
+ * Added GIRamSize and PhyType values for YUKON.
+ * Removed use of PRxCmd to setup XMAC.
+ * Moved setting of XM_RX_DIS_CEXT to SkXmInitMac().
+ * Use of SkGeXmitLED() only for GENESIS.
+ * Changes for V-CPU support.
+ * Editorial changes.
+ *
+ * Revision 1.63 2001/04/05 11:02:09 rassmann
+ * Stop Port check of the STOP bit did not take 2/18 sec as wanted.
+ *
+ * Revision 1.62 2001/02/07 07:54:21 rassmann
+ * Corrected copyright.
+ *
+ * Revision 1.61 2001/01/31 15:31:40 gklug
+ * fix: problem with autosensing an SR8800 switch
+ *
+ * Revision 1.60 2000/10/18 12:22:21 cgoos
+ * Added workaround for half duplex hangup.
+ *
+ * Revision 1.59 2000/10/10 11:22:06 gklug
+ * add: in manual half duplex mode ignore carrier extension errors
+ *
+ * Revision 1.58 2000/10/02 14:10:27 rassmann
+ * Reading BCOM PHY after releasing reset until it returns a valid value.
+ *
+ * Revision 1.57 2000/08/03 14:55:28 rassmann
+ * Waiting for I2C to be ready before de-initializing adapter
+ * (prevents sensors from hanging up).
+ *
+ * Revision 1.56 2000/07/27 12:16:48 gklug
+ * fix: Stop Port check of the STOP bit does now take 2/18 sec as wanted
+ *
+ * Revision 1.55 1999/11/22 13:32:26 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.54 1999/10/26 07:32:54 malthoff
+ * Initialize PHWLinkUp with SK_FALSE. Required for Diagnostics.
+ *
+ * Revision 1.53 1999/08/12 19:13:50 malthoff
+ * Fix for 1000BT. Do not owerwrite XM_MMU_CMD when
+ * disabling receiver and transmitter. Other bits
+ * may be lost.
+ *
+ * Revision 1.52 1999/07/01 09:29:54 gklug
+ * fix: DoInitRamQueue needs pAC
+ *
+ * Revision 1.51 1999/07/01 08:42:21 gklug
+ * chg: use Store & forward for RAM buffer when Jumbos are used
+ *
+ * Revision 1.50 1999/05/27 13:19:38 cgoos
+ * Added Tx PCI watermark initialization.
+ * Removed Tx RAM queue Store & Forward setting.
+ *
+ * Revision 1.49 1999/05/20 14:32:45 malthoff
+ * SkGeLinkLED() is completly removed now.
+ *
+ * Revision 1.48 1999/05/19 07:28:24 cgoos
+ * SkGeLinkLED no more available for drivers.
+ * Changes for 1000Base-T.
+ *
+ * Revision 1.47 1999/04/08 13:57:45 gklug
+ * add: Init of new port struct fiels PLinkResCt
+ * chg: StopPort Timer check
+ *
+ * Revision 1.46 1999/03/25 07:42:15 malthoff
+ * SkGeStopPort(): Add workaround for cache incoherency.
+ * Create error log entry, disable port, and
+ * exit loop if it does not terminate.
+ * Add XM_RX_LENERR_OK to the default value for the
+ * XMAC receive command register.
+ *
+ * Revision 1.45 1999/03/12 16:24:47 malthoff
+ * Remove PPollRxD and PPollTxD.
+ * Add check for GIPollTimerVal.
+ *
+ * Revision 1.44 1999/03/12 13:40:23 malthoff
+ * Fix: SkGeXmitLED(), SK_LED_TST mode does not work.
+ * Add: Jumbo frame support.
+ * Chg: Resolution of parameter IntTime in SkGeCfgSync().
+ *
+ * Revision 1.43 1999/02/09 10:29:46 malthoff
+ * Bugfix: The previous modification again also for the second location.
+ *
+ * Revision 1.42 1999/02/09 09:35:16 malthoff
+ * Bugfix: The bits '66 MHz Capable' and 'NEWCAP are reset while
+ * clearing the error bits in the PCI status register.
+ *
+ * Revision 1.41 1999/01/18 13:07:02 malthoff
+ * Bugfix: Do not use CFG cycles after during Init- or Runtime, because
+ * they may not be available after Boottime.
+ *
+ * Revision 1.40 1999/01/11 12:40:49 malthoff
+ * Bug fix: PCI_STATUS: clearing error bits sets the UDF bit.
+ *
+ * Revision 1.39 1998/12/11 15:17:33 gklug
+ * chg: Init LipaAutoNeg with Unknown
+ *
+ * Revision 1.38 1998/12/10 11:02:57 malthoff
+ * Disable Error Log Message when calling SkGeInit(level 2)
+ * more than once.
+ *
+ * Revision 1.37 1998/12/07 12:18:25 gklug
+ * add: refinement of autosense mode: take into account the autoneg cap of LiPa
+ *
+ * Revision 1.36 1998/12/07 07:10:39 gklug
+ * fix: init values of LinkBroken/ Capabilities for management
+ *
+ * Revision 1.35 1998/12/02 10:56:20 gklug
+ * fix: do NOT init LoinkSync Counter.
+ *
+ * Revision 1.34 1998/12/01 10:53:21 gklug
+ * add: init of additional Counters for workaround
+ *
+ * Revision 1.33 1998/12/01 10:00:49 gklug
+ * add: init PIsave var in Port struct
+ *
+ * Revision 1.32 1998/11/26 14:50:40 gklug
+ * chg: Default is autosensing with AUTOFULL mode
+ *
+ * Revision 1.31 1998/11/25 15:36:16 gklug
+ * fix: do NOT stop LED Timer when port should be stopped
+ *
+ * Revision 1.30 1998/11/24 13:15:28 gklug
+ * add: Init PCkeckPar struct member
+ *
+ * Revision 1.29 1998/11/18 13:19:27 malthoff
+ * Disable packet arbiter timeouts on receive side.
+ * Use maximum timeout value for packet arbiter
+ * transmit timeouts.
+ * Add TestStopBit() function to handle stop RX/TX
+ * problem with active descriptor poll timers.
+ * Bug Fix: Descriptor Poll Timer not started, because
+ * GIPollTimerVal was initialized with 0.
+ *
+ * Revision 1.28 1998/11/13 14:24:26 malthoff
+ * Bug Fix: SkGeStopPort() may hang if a Packet Arbiter Timout
+ * is pending or occurs while waiting for TX_STOP and RX_STOP.
+ * The PA timeout is cleared now while waiting for TX- or RX_STOP.
+ *
+ * Revision 1.27 1998/11/02 11:04:36 malthoff
+ * fix the last fix
+ *
+ * Revision 1.26 1998/11/02 10:37:03 malthoff
+ * Fix: SkGePollTxD() enables always the synchronounous poll timer.
+ *
+ * Revision 1.25 1998/10/28 07:12:43 cgoos
+ * Fixed "LED_STOP" in SkGeLnkSyncCnt, "== SK_INIT_IO" in SkGeInit.
+ * Removed: Reset of RAM Interface in SkGeStopPort.
+ *
+ * Revision 1.24 1998/10/27 08:13:12 malthoff
+ * Remove temporary code.
+ *
+ * Revision 1.23 1998/10/26 07:45:03 malthoff
+ * Add Address Calculation Workaround: If the EPROM byte
+ * Id is 3, the address offset is 512 kB.
+ * Initialize default values for PLinkMode and PFlowCtrlMode.
+ *
+ * Revision 1.22 1998/10/22 09:46:47 gklug
+ * fix SysKonnectFileId typo
+ *
+ * Revision 1.21 1998/10/20 12:11:56 malthoff
+ * Don't dendy the Queue config if the size of the unused
+ * Rx qeueu is zero.
+ *
+ * Revision 1.20 1998/10/19 07:27:58 malthoff
+ * SkGeInitRamIface() is public to be called by diagnostics.
+ *
+ * Revision 1.19 1998/10/16 13:33:45 malthoff
+ * Fix: enabling descriptor polling is not allowed until
+ * the descriptor addresses are set. Descriptor polling
+ * must be handled by the driver.
+ *
+ * Revision 1.18 1998/10/16 10:58:27 malthoff
+ * Remove temp. code for Diag prototype.
+ * Remove lint warning for dummy reads.
+ * Call SkGeLoadLnkSyncCnt() during SkGeInitPort().
+ *
+ * Revision 1.17 1998/10/14 09:16:06 malthoff
+ * Change parameter LimCount and programming of
+ * the limit counter in SkGeCfgSync().
+ *
+ * Revision 1.16 1998/10/13 09:21:16 malthoff
+ * Don't set XM_RX_SELF_RX in RxCmd Reg, because it's
+ * like a Loopback Mode in half duplex.
+ *
+ * Revision 1.15 1998/10/09 06:47:40 malthoff
+ * SkGeInitMacArb(): set recovery counters init value
+ * to zero although this counters are not uesd.
+ * Bug fix in Rx Upper/Lower Pause Threshold calculation.
+ * Add XM_RX_SELF_RX to RxCmd.
+ *
+ * Revision 1.14 1998/10/06 15:15:53 malthoff
+ * Make sure no pending IRQ is cleared in SkGeLoadLnkSyncCnt().
+ *
+ * Revision 1.13 1998/10/06 14:09:36 malthoff
+ * Add SkGeLoadLnkSyncCnt(). Modify
+ * the 'port stopped' condition according
+ * to the current problem report.
+ *
+ * Revision 1.12 1998/10/05 08:17:21 malthoff
+ * Add functions: SkGePollRxD(), SkGePollTxD(),
+ * DoCalcAddr(), SkGeCheckQSize(),
+ * DoInitRamQueue(), and SkGeCfgSync().
+ * Add coding for SkGeInitMacArb(), SkGeInitPktArb(),
+ * SkGeInitMacFifo(), SkGeInitRamBufs(),
+ * SkGeInitRamIface(), and SkGeInitBmu().
+ *
+ * Revision 1.11 1998/09/29 08:26:29 malthoff
+ * bug fix: SkGeInit0() 'i' should be increment.
+ *
+ * Revision 1.10 1998/09/28 13:19:01 malthoff
+ * Coding time: Save the done work.
+ * Modify SkGeLinkLED(), add SkGeXmitLED(),
+ * define SkGeCheckQSize(), SkGeInitMacArb(),
+ * SkGeInitPktArb(), SkGeInitMacFifo(),
+ * SkGeInitRamBufs(), SkGeInitRamIface(),
+ * and SkGeInitBmu(). Do coding for SkGeStopPort(),
+ * SkGeInit1(), SkGeInit2(), and SkGeInit3().
+ * Do coding for SkGeDinit() and SkGeInitPort().
+ *
+ * Revision 1.9 1998/09/16 14:29:05 malthoff
+ * Some minor changes.
+ *
+ * Revision 1.8 1998/09/11 05:29:14 gklug
+ * add: init state of a port
+ *
+ * Revision 1.7 1998/09/04 09:26:25 malthoff
+ * Short temporary modification.
+ *
+ * Revision 1.6 1998/09/04 08:27:59 malthoff
+ * Remark the do-while in StopPort() because it never ends
+ * without a GE adapter.
+ *
+ * Revision 1.5 1998/09/03 14:05:45 malthoff
+ * Change comment for SkGeInitPort(). Do not
+ * repair the queue sizes if invalid.
+ *
+ * Revision 1.4 1998/09/03 10:03:19 malthoff
+ * Implement the new interface according to the
+ * reviewed interface specification.
+ *
+ * Revision 1.3 1998/08/19 09:11:25 gklug
+ * fix: struct are removed from c-source (see CCC)
+ *
+ * Revision 1.2 1998/07/28 12:33:58 malthoff
+ * Add 'IoC' parameter in function declaration and SK IO macros.
+ *
+ * Revision 1.1 1998/07/23 09:48:57 malthoff
+ * Creation. First dummy 'C' file.
+ * SkGeInit(Level 0) is card_start for GE.
+ * SkGeDeInit() is card_stop for GE.
+ *
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+#include "h/skdrv1st.h"
+#include "h/skdrv2nd.h"
+
+/* global variables ***********************************************************/
+
+/* local variables ************************************************************/
+
+static const char SysKonnectFileId[] =
+ "@(#)$Id: skgeinit.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $ (C) SK ";
+
+struct s_QOffTab {
+ int RxQOff; /* Receive Queue Address Offset */
+ int XsQOff; /* Sync Tx Queue Address Offset */
+ int XaQOff; /* Async Tx Queue Address Offset */
+};
+static struct s_QOffTab QOffTab[] = {
+ {Q_R1, Q_XS1, Q_XA1}, {Q_R2, Q_XS2, Q_XA2}
+};
+
+
+/******************************************************************************
+ *
+ * SkGePollRxD() - Enable / Disable Descriptor Polling of RxD Ring
+ *
+ * Description:
+ * Enable or disable the descriptor polling of the receive descriptor
+ * ring (RxD) for port 'Port'.
+ * The new configuration is *not* saved over any SkGeStopPort() and
+ * SkGeInitPort() calls.
+ *
+ * Returns:
+ * nothing
+ */
+void SkGePollRxD(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL PollRxD) /* SK_TRUE (enable pol.), SK_FALSE (disable pol.) */
+{
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), (PollRxD) ?
+ CSR_ENA_POL : CSR_DIS_POL);
+} /* SkGePollRxD */
+
+
+/******************************************************************************
+ *
+ * SkGePollTxD() - Enable / Disable Descriptor Polling of TxD Rings
+ *
+ * Description:
+ * Enable or disable the descriptor polling of the transmit descriptor
+ * ring(s) (TxD) for port 'Port'.
+ * The new configuration is *not* saved over any SkGeStopPort() and
+ * SkGeInitPort() calls.
+ *
+ * Returns:
+ * nothing
+ */
+void SkGePollTxD(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL PollTxD) /* SK_TRUE (enable pol.), SK_FALSE (disable pol.) */
+{
+ SK_GEPORT *pPrt;
+ SK_U32 DWord;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ DWord = (PollTxD) ? CSR_ENA_POL : CSR_DIS_POL;
+
+ if (pPrt->PXSQSize != 0) {
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), DWord);
+ }
+
+ if (pPrt->PXAQSize != 0) {
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), DWord);
+ }
+} /* SkGePollTxD */
+
+
+/******************************************************************************
+ *
+ * SkGeYellowLED() - Switch the yellow LED on or off.
+ *
+ * Description:
+ * Switch the yellow LED on or off.
+ *
+ * Note:
+ * This function may be called any time after SkGeInit(Level 1).
+ *
+ * Returns:
+ * nothing
+ */
+void SkGeYellowLED(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int State) /* yellow LED state, 0 = OFF, 0 != ON */
+{
+ if (State == 0) {
+ /* Switch yellow LED OFF */
+ SK_OUT8(IoC, B0_LED, LED_STAT_OFF);
+ }
+ else {
+ /* Switch yellow LED ON */
+ SK_OUT8(IoC, B0_LED, LED_STAT_ON);
+ }
+} /* SkGeYellowLED */
+
+
+/******************************************************************************
+ *
+ * SkGeXmitLED() - Modify the Operational Mode of a transmission LED.
+ *
+ * Description:
+ * The Rx or Tx LED which is specified by 'Led' will be
+ * enabled, disabled or switched on in test mode.
+ *
+ * Note:
+ * 'Led' must contain the address offset of the LEDs INI register.
+ *
+ * Usage:
+ * SkGeXmitLED(pAC, IoC, MR_ADDR(Port, TX_LED_INI), SK_LED_ENA);
+ *
+ * Returns:
+ * nothing
+ */
+void SkGeXmitLED(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Led, /* offset to the LED Init Value register */
+int Mode) /* Mode may be SK_LED_DIS, SK_LED_ENA, SK_LED_TST */
+{
+ SK_U32 LedIni;
+
+ switch (Mode) {
+ case SK_LED_ENA:
+ LedIni = SK_XMIT_DUR * (SK_U32)pAC->GIni.GIHstClkFact / 100;
+ SK_OUT32(IoC, Led + XMIT_LED_INI, LedIni);
+ SK_OUT8(IoC, Led + XMIT_LED_CTRL, LED_START);
+ break;
+ case SK_LED_TST:
+ SK_OUT8(IoC, Led + XMIT_LED_TST, LED_T_ON);
+ SK_OUT32(IoC, Led + XMIT_LED_CNT, 100);
+ SK_OUT8(IoC, Led + XMIT_LED_CTRL, LED_START);
+ break;
+ case SK_LED_DIS:
+ default:
+ /*
+ * Do NOT stop the LED Timer here. The LED might be
+ * in on state. But it needs to go off.
+ */
+ SK_OUT32(IoC, Led + XMIT_LED_CNT, 0);
+ SK_OUT8(IoC, Led + XMIT_LED_TST, LED_T_OFF);
+ break;
+ }
+
+ /*
+ * 1000BT: The Transmit LED is driven by the PHY.
+ * But the default LED configuration is used for
+ * Level One and Broadcom PHYs.
+ * (Broadcom: It may be that PHY_B_PEC_EN_LTR has to be set.)
+ * (In this case it has to be added here. But we will see. XXX)
+ */
+} /* SkGeXmitLED */
+
+
+/******************************************************************************
+ *
+ * DoCalcAddr() - Calculates the start and the end address of a queue.
+ *
+ * Description:
+ * This function calculates the start and the end address of a queue.
+ * Afterwards the 'StartVal' is incremented to the next start position.
+ * If the port is already initialized the calculated values
+ * will be checked against the configured values and an
+ * error will be returned, if they are not equal.
+ * If the port is not initialized the values will be written to
+ * *StartAdr and *EndAddr.
+ *
+ * Returns:
+ * 0: success
+ * 1: configuration error
+ */
+static int DoCalcAddr(
+SK_AC *pAC, /* adapter context */
+SK_GEPORT *pPrt, /* port index */
+int QuSize, /* size of the queue to configure in kB */
+SK_U32 *StartVal, /* start value for address calculation */
+SK_U32 *QuStartAddr, /* start addr to calculate */
+SK_U32 *QuEndAddr) /* end address to calculate */
+{
+ SK_U32 EndVal;
+ SK_U32 NextStart;
+ int Rtv;
+
+ Rtv = 0;
+ if (QuSize == 0) {
+ EndVal = *StartVal;
+ NextStart = EndVal;
+ }
+ else {
+ EndVal = *StartVal + ((SK_U32)QuSize * 1024) - 1;
+ NextStart = EndVal + 1;
+ }
+
+ if (pPrt->PState >= SK_PRT_INIT) {
+ if (*StartVal != *QuStartAddr || EndVal != *QuEndAddr) {
+ Rtv = 1;
+ }
+ }
+ else {
+ *QuStartAddr = *StartVal;
+ *QuEndAddr = EndVal;
+ }
+
+ *StartVal = NextStart;
+ return(Rtv);
+} /* DoCalcAddr */
+
+/******************************************************************************
+ *
+ * SkGeInitAssignRamToQueues() - allocate default queue sizes
+ *
+ * Description:
+ * This function assigns the memory to the different queues and ports.
+ * When DualNet is set to SK_TRUE all ports get the same amount of memory.
+ * Otherwise the first port gets most of the memory and all the
+ * other ports just the required minimum.
+ * This function can only be called when pAC->GIni.GIRamSize and
+ * pAC->GIni.GIMacsFound have been initialized, usually this happens
+ * at init level 1
+ *
+ * Returns:
+ * 0 - ok
+ * 1 - invalid input values
+ * 2 - not enough memory
+ */
+
+int SkGeInitAssignRamToQueues(
+SK_AC *pAC, /* Adapter context */
+int ActivePort, /* Active Port in RLMT mode */
+SK_BOOL DualNet) /* adapter context */
+{
+ int i;
+ int UsedKilobytes; /* memory already assigned */
+ int ActivePortKilobytes; /* memory available for active port */
+ SK_GEPORT *pGePort;
+
+ UsedKilobytes = 0;
+
+ if (ActivePort >= pAC->GIni.GIMacsFound) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
+ ("SkGeInitAssignRamToQueues: ActivePort (%d) invalid\n",
+ ActivePort));
+ return(1);
+ }
+ if (((pAC->GIni.GIMacsFound * (SK_MIN_RXQ_SIZE + SK_MIN_TXQ_SIZE)) +
+ ((RAM_QUOTA_SYNC == 0) ? 0 : SK_MIN_TXQ_SIZE)) > pAC->GIni.GIRamSize) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
+ ("SkGeInitAssignRamToQueues: Not enough memory (%d)\n",
+ pAC->GIni.GIRamSize));
+ return(2);
+ }
+
+
+ if (DualNet) {
+ /* every port gets the same amount of memory */
+ ActivePortKilobytes = pAC->GIni.GIRamSize / pAC->GIni.GIMacsFound;
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+
+ pGePort = &pAC->GIni.GP[i];
+
+ /* take away the minimum memory for active queues */
+ ActivePortKilobytes -= (SK_MIN_RXQ_SIZE + SK_MIN_TXQ_SIZE);
+
+ /* receive queue gets the minimum + 80% of the rest */
+ pGePort->PRxQSize = (int) (ROUND_QUEUE_SIZE_KB((
+ ActivePortKilobytes * (unsigned long) RAM_QUOTA_RX) / 100))
+ + SK_MIN_RXQ_SIZE;
+
+ ActivePortKilobytes -= (pGePort->PRxQSize - SK_MIN_RXQ_SIZE);
+
+ /* synchronous transmit queue */
+ pGePort->PXSQSize = 0;
+
+ /* asynchronous transmit queue */
+ pGePort->PXAQSize = (int) ROUND_QUEUE_SIZE_KB(ActivePortKilobytes +
+ SK_MIN_TXQ_SIZE);
+ }
+ }
+ else {
+ /* Rlmt Mode or single link adapter */
+
+ /* Set standby queue size defaults for all standby ports */
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+
+ if (i != ActivePort) {
+ pGePort = &pAC->GIni.GP[i];
+
+ pGePort->PRxQSize = SK_MIN_RXQ_SIZE;
+ pGePort->PXAQSize = SK_MIN_TXQ_SIZE;
+ pGePort->PXSQSize = 0;
+
+ /* Count used RAM */
+ UsedKilobytes += pGePort->PRxQSize + pGePort->PXAQSize;
+ }
+ }
+ /* what's left? */
+ ActivePortKilobytes = pAC->GIni.GIRamSize - UsedKilobytes;
+
+ /* assign it to the active port */
+ /* first take away the minimum memory */
+ ActivePortKilobytes -= (SK_MIN_RXQ_SIZE + SK_MIN_TXQ_SIZE);
+ pGePort = &pAC->GIni.GP[ActivePort];
+
+ /* receive queue get's the minimum + 80% of the rest */
+ pGePort->PRxQSize = (int) (ROUND_QUEUE_SIZE_KB((ActivePortKilobytes *
+ (unsigned long) RAM_QUOTA_RX) / 100)) + SK_MIN_RXQ_SIZE;
+
+ ActivePortKilobytes -= (pGePort->PRxQSize - SK_MIN_RXQ_SIZE);
+
+ /* synchronous transmit queue */
+ pGePort->PXSQSize = 0;
+
+ /* asynchronous transmit queue */
+ pGePort->PXAQSize = (int) ROUND_QUEUE_SIZE_KB(ActivePortKilobytes) +
+ SK_MIN_TXQ_SIZE;
+ }
+#ifdef VCPU
+ VCPUprintf(0, "PRxQSize=%u, PXSQSize=%u, PXAQSize=%u\n",
+ pGePort->PRxQSize, pGePort->PXSQSize, pGePort->PXAQSize);
+#endif /* VCPU */
+
+ return(0);
+} /* SkGeInitAssignRamToQueues */
+
+/******************************************************************************
+ *
+ * SkGeCheckQSize() - Checks the Adapters Queue Size Configuration
+ *
+ * Description:
+ * This function verifies the Queue Size Configuration specified
+ * in the variables PRxQSize, PXSQSize, and PXAQSize of all
+ * used ports.
+ * This requirements must be fullfilled to have a valid configuration:
+ * - The size of all queues must not exceed GIRamSize.
+ * - The queue sizes must be specified in units of 8 kB.
+ * - The size of Rx queues of available ports must not be
+ * smaller than 16 kB.
+ * - The size of at least one Tx queue (synch. or asynch.)
+ * of available ports must not be smaller than 16 kB
+ * when Jumbo Frames are used.
+ * - The RAM start and end addresses must not be changed
+ * for ports which are already initialized.
+ * Furthermore SkGeCheckQSize() defines the Start and End Addresses
+ * of all ports and stores them into the HWAC port structure.
+ *
+ * Returns:
+ * 0: Queue Size Configuration valid
+ * 1: Queue Size Configuration invalid
+ */
+static int SkGeCheckQSize(
+SK_AC *pAC, /* adapter context */
+int Port) /* port index */
+{
+ SK_GEPORT *pPrt;
+ int UsedMem; /* total memory used (max. found ports) */
+ int i;
+ int Rtv;
+ int Rtv2;
+ SK_U32 StartAddr;
+
+ UsedMem = 0;
+ Rtv = 0;
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+ pPrt = &pAC->GIni.GP[i];
+
+ if ((pPrt->PRxQSize & QZ_UNITS) != 0 ||
+ (pPrt->PXSQSize & QZ_UNITS) != 0 ||
+ (pPrt->PXAQSize & QZ_UNITS) != 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E012, SKERR_HWI_E012MSG);
+ return(1);
+ }
+
+ if (i == Port && pPrt->PRxQSize < SK_MIN_RXQ_SIZE) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E011, SKERR_HWI_E011MSG);
+ return(1);
+ }
+
+ /*
+ * the size of at least one Tx queue (synch. or asynch.) has to be > 0.
+ * if Jumbo Frames are used, this size has to be >= 16 kB.
+ */
+ if ((i == Port && pPrt->PXSQSize == 0 && pPrt->PXAQSize == 0) ||
+ (pAC->GIni.GIPortUsage == SK_JUMBO_LINK &&
+ ((pPrt->PXSQSize > 0 && pPrt->PXSQSize < SK_MIN_TXQ_SIZE) ||
+ (pPrt->PXAQSize > 0 && pPrt->PXAQSize < SK_MIN_TXQ_SIZE)))) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E023, SKERR_HWI_E023MSG);
+ return(1);
+ }
+
+ UsedMem += pPrt->PRxQSize + pPrt->PXSQSize + pPrt->PXAQSize;
+ }
+
+ if (UsedMem > pAC->GIni.GIRamSize) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E012, SKERR_HWI_E012MSG);
+ return(1);
+ }
+
+ /* Now start address calculation */
+ StartAddr = pAC->GIni.GIRamOffs;
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+ pPrt = &pAC->GIni.GP[i];
+
+ /* Calculate/Check values for the receive queue */
+ Rtv2 = DoCalcAddr(pAC, pPrt, pPrt->PRxQSize, &StartAddr,
+ &pPrt->PRxQRamStart, &pPrt->PRxQRamEnd);
+ Rtv |= Rtv2;
+
+ /* Calculate/Check values for the synchronous Tx queue */
+ Rtv2 = DoCalcAddr(pAC, pPrt, pPrt->PXSQSize, &StartAddr,
+ &pPrt->PXsQRamStart, &pPrt->PXsQRamEnd);
+ Rtv |= Rtv2;
+
+ /* Calculate/Check values for the asynchronous Tx queue */
+ Rtv2 = DoCalcAddr(pAC, pPrt, pPrt->PXAQSize, &StartAddr,
+ &pPrt->PXaQRamStart, &pPrt->PXaQRamEnd);
+ Rtv |= Rtv2;
+
+ if (Rtv) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E013, SKERR_HWI_E013MSG);
+ return(1);
+ }
+ }
+
+ return(0);
+} /* SkGeCheckQSize */
+
+
+/******************************************************************************
+ *
+ * SkGeInitMacArb() - Initialize the MAC Arbiter
+ *
+ * Description:
+ * This function initializes the MAC Arbiter.
+ * It must not be called if there is still an
+ * initialized or active port.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGeInitMacArb(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ /* release local reset */
+ SK_OUT16(IoC, B3_MA_TO_CTRL, MA_RST_CLR);
+
+ /* configure timeout values */
+ SK_OUT8(IoC, B3_MA_TOINI_RX1, SK_MAC_TO_53);
+ SK_OUT8(IoC, B3_MA_TOINI_RX2, SK_MAC_TO_53);
+ SK_OUT8(IoC, B3_MA_TOINI_TX1, SK_MAC_TO_53);
+ SK_OUT8(IoC, B3_MA_TOINI_TX2, SK_MAC_TO_53);
+
+ SK_OUT8(IoC, B3_MA_RCINI_RX1, 0);
+ SK_OUT8(IoC, B3_MA_RCINI_RX2, 0);
+ SK_OUT8(IoC, B3_MA_RCINI_TX1, 0);
+ SK_OUT8(IoC, B3_MA_RCINI_TX2, 0);
+
+ /* recovery values are needed for XMAC II Rev. B2 only */
+ /* Fast Output Enable Mode was intended to use with Rev. B2, but now? */
+
+ /*
+ * There is no start or enable button to push, therefore
+ * the MAC arbiter is configured and enabled now.
+ */
+} /* SkGeInitMacArb */
+
+
+/******************************************************************************
+ *
+ * SkGeInitPktArb() - Initialize the Packet Arbiter
+ *
+ * Description:
+ * This function initializes the Packet Arbiter.
+ * It must not be called if there is still an
+ * initialized or active port.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGeInitPktArb(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ /* release local reset */
+ SK_OUT16(IoC, B3_PA_CTRL, PA_RST_CLR);
+
+ /* configure timeout values */
+ SK_OUT16(IoC, B3_PA_TOINI_RX1, SK_PKT_TO_MAX);
+ SK_OUT16(IoC, B3_PA_TOINI_RX2, SK_PKT_TO_MAX);
+ SK_OUT16(IoC, B3_PA_TOINI_TX1, SK_PKT_TO_MAX);
+ SK_OUT16(IoC, B3_PA_TOINI_TX2, SK_PKT_TO_MAX);
+
+ /*
+ * enable timeout timers if jumbo frames not used
+ * NOTE: the packet arbiter timeout interrupt is needed for
+ * half duplex hangup workaround
+ */
+ if (pAC->GIni.GIPortUsage != SK_JUMBO_LINK) {
+ if (pAC->GIni.GIMacsFound == 1) {
+ SK_OUT16(IoC, B3_PA_CTRL, PA_ENA_TO_TX1);
+ }
+ else {
+ SK_OUT16(IoC, B3_PA_CTRL, PA_ENA_TO_TX1 | PA_ENA_TO_TX2);
+ }
+ }
+} /* SkGeInitPktArb */
+
+
+/******************************************************************************
+ *
+ * SkGeInitMacFifo() - Initialize the MAC FIFOs
+ *
+ * Description:
+ * Initialize all MAC FIFOs of the specified port
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGeInitMacFifo(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U16 Word;
+#ifdef VCPU
+ SK_U32 DWord;
+#endif /* VCPU */
+ /*
+ * For each FIFO:
+ * - release local reset
+ * - use default value for MAC FIFO size
+ * - setup defaults for the control register
+ * - enable the FIFO
+ */
+
+ Word = GMF_RX_CTRL_DEF;
+
+ if (pAC->GIni.GIGenesis) {
+ /* Configure Rx MAC FIFO */
+ SK_OUT8(IoC, MR_ADDR(Port, RX_MFF_CTRL2), MFF_RST_CLR);
+ SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_RX_CTRL_DEF);
+ SK_OUT8(IoC, MR_ADDR(Port, RX_MFF_CTRL2), MFF_ENA_OP_MD);
+
+ /* Configure Tx MAC FIFO */
+ SK_OUT8(IoC, MR_ADDR(Port, TX_MFF_CTRL2), MFF_RST_CLR);
+ SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_TX_CTRL_DEF);
+ SK_OUT8(IoC, MR_ADDR(Port, TX_MFF_CTRL2), MFF_ENA_OP_MD);
+
+ /* Enable frame flushing if jumbo frames used */
+ if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
+ SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_ENA_FLUSH);
+ }
+ }
+ else {
+ /* set Rx GMAC FIFO Flush Mask */
+ SK_OUT16(IoC, MR_ADDR(Port, RX_GMF_FL_MSK), (SK_U16)RX_FF_FL_DEF_MSK);
+
+ if (pAC->GIni.GIYukonLite && pAC->GIni.GIChipId == CHIP_ID_YUKON) {
+
+ Word &= ~GMF_RX_F_FL_ON;
+ }
+
+ /* Configure Rx MAC FIFO */
+ SK_OUT8(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), (SK_U8)GMF_RST_CLR);
+ SK_OUT16(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), Word);
+
+ /* set Rx GMAC FIFO Flush Threshold (default: 0x0a -> 56 bytes) */
+ SK_OUT16(IoC, MR_ADDR(Port, RX_GMF_FL_THR), RX_GMF_FL_THR_DEF);
+
+ /* Configure Tx MAC FIFO */
+ SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U8)GMF_RST_CLR);
+ SK_OUT16(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U16)GMF_TX_CTRL_DEF);
+
+#ifdef VCPU
+ SK_IN32(IoC, MR_ADDR(Port, RX_GMF_AF_THR), &DWord);
+ SK_IN32(IoC, MR_ADDR(Port, TX_GMF_AE_THR), &DWord);
+#endif /* VCPU */
+
+ /* set Tx GMAC FIFO Almost Empty Threshold */
+/* SK_OUT32(IoC, MR_ADDR(Port, TX_GMF_AE_THR), 0); */
+ }
+} /* SkGeInitMacFifo */
+
+
+/******************************************************************************
+ *
+ * SkGeLoadLnkSyncCnt() - Load the Link Sync Counter and starts counting
+ *
+ * Description:
+ * This function starts the Link Sync Counter of the specified
+ * port and enables the generation of an Link Sync IRQ.
+ * The Link Sync Counter may be used to detect an active link,
+ * if autonegotiation is not used.
+ *
+ * Note:
+ * o To ensure receiving the Link Sync Event the LinkSyncCounter
+ * should be initialized BEFORE clearing the XMAC's reset!
+ * o Enable IS_LNK_SYNC_M1 and IS_LNK_SYNC_M2 after calling this
+ * function.
+ *
+ * Returns:
+ * nothing
+ */
+void SkGeLoadLnkSyncCnt(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_U32 CntVal) /* Counter value */
+{
+ SK_U32 OrgIMsk;
+ SK_U32 NewIMsk;
+ SK_U32 ISrc;
+ SK_BOOL IrqPend;
+
+ /* stop counter */
+ SK_OUT8(IoC, MR_ADDR(Port, LNK_SYNC_CTRL), LED_STOP);
+
+ /*
+ * ASIC problem:
+ * Each time starting the Link Sync Counter an IRQ is generated
+ * by the adapter. See problem report entry from 21.07.98
+ *
+ * Workaround: Disable Link Sync IRQ and clear the unexpeced IRQ
+ * if no IRQ is already pending.
+ */
+ IrqPend = SK_FALSE;
+ SK_IN32(IoC, B0_ISRC, &ISrc);
+ SK_IN32(IoC, B0_IMSK, &OrgIMsk);
+ if (Port == MAC_1) {
+ NewIMsk = OrgIMsk & ~IS_LNK_SYNC_M1;
+ if ((ISrc & IS_LNK_SYNC_M1) != 0) {
+ IrqPend = SK_TRUE;
+ }
+ }
+ else {
+ NewIMsk = OrgIMsk & ~IS_LNK_SYNC_M2;
+ if ((ISrc & IS_LNK_SYNC_M2) != 0) {
+ IrqPend = SK_TRUE;
+ }
+ }
+ if (!IrqPend) {
+ SK_OUT32(IoC, B0_IMSK, NewIMsk);
+ }
+
+ /* load counter */
+ SK_OUT32(IoC, MR_ADDR(Port, LNK_SYNC_INI), CntVal);
+
+ /* start counter */
+ SK_OUT8(IoC, MR_ADDR(Port, LNK_SYNC_CTRL), LED_START);
+
+ if (!IrqPend) {
+ /* clear the unexpected IRQ, and restore the interrupt mask */
+ SK_OUT8(IoC, MR_ADDR(Port, LNK_SYNC_CTRL), LED_CLR_IRQ);
+ SK_OUT32(IoC, B0_IMSK, OrgIMsk);
+ }
+} /* SkGeLoadLnkSyncCnt*/
+
+
+/******************************************************************************
+ *
+ * SkGeCfgSync() - Configure synchronous bandwidth for this port.
+ *
+ * Description:
+ * This function may be used to configure synchronous bandwidth
+ * to the specified port. This may be done any time after
+ * initializing the port. The configuration values are NOT saved
+ * in the HWAC port structure and will be overwritten any
+ * time when stopping and starting the port.
+ * Any values for the synchronous configuration will be ignored
+ * if the size of the synchronous queue is zero!
+ *
+ * The default configuration for the synchronous service is
+ * TXA_ENA_FSYNC. This means if the size of
+ * the synchronous queue is unequal zero but no specific
+ * synchronous bandwidth is configured, the synchronous queue
+ * will always have the 'unlimited' transmit priority!
+ *
+ * This mode will be restored if the synchronous bandwidth is
+ * deallocated ('IntTime' = 0 and 'LimCount' = 0).
+ *
+ * Returns:
+ * 0: success
+ * 1: parameter configuration error
+ * 2: try to configure quality of service although no
+ * synchronous queue is configured
+ */
+int SkGeCfgSync(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_U32 IntTime, /* Interval Timer Value in units of 8ns */
+SK_U32 LimCount, /* Number of bytes to transfer during IntTime */
+int SyncMode) /* Sync Mode: TXA_ENA_ALLOC | TXA_DIS_ALLOC | 0 */
+{
+ int Rtv;
+
+ Rtv = 0;
+
+ /* check the parameters */
+ if (LimCount > IntTime ||
+ (LimCount == 0 && IntTime != 0) ||
+ (LimCount != 0 && IntTime == 0)) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E010, SKERR_HWI_E010MSG);
+ return(1);
+ }
+
+ if (pAC->GIni.GP[Port].PXSQSize == 0) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E009, SKERR_HWI_E009MSG);
+ return(2);
+ }
+
+ /* calculate register values */
+ IntTime = (IntTime / 2) * pAC->GIni.GIHstClkFact / 100;
+ LimCount = LimCount / 8;
+
+ if (IntTime > TXA_MAX_VAL || LimCount > TXA_MAX_VAL) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E010, SKERR_HWI_E010MSG);
+ return(1);
+ }
+
+ /*
+ * - Enable 'Force Sync' to ensure the synchronous queue
+ * has the priority while configuring the new values.
+ * - Also 'disable alloc' to ensure the settings complies
+ * to the SyncMode parameter.
+ * - Disable 'Rate Control' to configure the new values.
+ * - write IntTime and LimCount
+ * - start 'Rate Control' and disable 'Force Sync'
+ * if Interval Timer or Limit Counter not zero.
+ */
+ SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL),
+ TXA_ENA_FSYNC | TXA_DIS_ALLOC | TXA_STOP_RC);
+
+ SK_OUT32(IoC, MR_ADDR(Port, TXA_ITI_INI), IntTime);
+ SK_OUT32(IoC, MR_ADDR(Port, TXA_LIM_INI), LimCount);
+
+ SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL),
+ (SK_U8)(SyncMode & (TXA_ENA_ALLOC | TXA_DIS_ALLOC)));
+
+ if (IntTime != 0 || LimCount != 0) {
+ SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL), TXA_DIS_FSYNC | TXA_START_RC);
+ }
+
+ return(0);
+} /* SkGeCfgSync */
+
+
+/******************************************************************************
+ *
+ * DoInitRamQueue() - Initialize the RAM Buffer Address of a single Queue
+ *
+ * Desccription:
+ * If the queue is used, enable and initialize it.
+ * Make sure the queue is still reset, if it is not used.
+ *
+ * Returns:
+ * nothing
+ */
+static void DoInitRamQueue(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int QuIoOffs, /* Queue IO Address Offset */
+SK_U32 QuStartAddr, /* Queue Start Address */
+SK_U32 QuEndAddr, /* Queue End Address */
+int QuType) /* Queue Type (SK_RX_SRAM_Q|SK_RX_BRAM_Q|SK_TX_RAM_Q) */
+{
+ SK_U32 RxUpThresVal;
+ SK_U32 RxLoThresVal;
+
+ if (QuStartAddr != QuEndAddr) {
+ /* calculate thresholds, assume we have a big Rx queue */
+ RxUpThresVal = (QuEndAddr + 1 - QuStartAddr - SK_RB_ULPP) / 8;
+ RxLoThresVal = (QuEndAddr + 1 - QuStartAddr - SK_RB_LLPP_B)/8;
+
+ /* build HW address format */
+ QuStartAddr = QuStartAddr / 8;
+ QuEndAddr = QuEndAddr / 8;
+
+ /* release local reset */
+ SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_RST_CLR);
+
+ /* configure addresses */
+ SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_START), QuStartAddr);
+ SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_END), QuEndAddr);
+ SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_WP), QuStartAddr);
+ SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_RP), QuStartAddr);
+
+ switch (QuType) {
+ case SK_RX_SRAM_Q:
+ /* configure threshold for small Rx Queue */
+ RxLoThresVal += (SK_RB_LLPP_B - SK_RB_LLPP_S) / 8;
+
+ /* continue with SK_RX_BRAM_Q */
+ case SK_RX_BRAM_Q:
+ /* write threshold for Rx Queue */
+
+ SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_RX_UTPP), RxUpThresVal);
+ SK_OUT32(IoC, RB_ADDR(QuIoOffs, RB_RX_LTPP), RxLoThresVal);
+
+ /* the high priority threshold not used */
+ break;
+ case SK_TX_RAM_Q:
+ /*
+ * Do NOT use Store & Forward under normal operation due to
+ * performance optimization (GENESIS only).
+ * But if Jumbo Frames are configured (XMAC Tx FIFO is only 4 kB)
+ * or YUKON is used ((GMAC Tx FIFO is only 1 kB)
+ * we NEED Store & Forward of the RAM buffer.
+ */
+ if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK ||
+ !pAC->GIni.GIGenesis) {
+ /* enable Store & Forward Mode for the Tx Side */
+ SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_ENA_STFWD);
+ }
+ break;
+ }
+
+ /* set queue operational */
+ SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_ENA_OP_MD);
+ }
+ else {
+ /* ensure the queue is still disabled */
+ SK_OUT8(IoC, RB_ADDR(QuIoOffs, RB_CTRL), RB_RST_SET);
+ }
+} /* DoInitRamQueue */
+
+
+/******************************************************************************
+ *
+ * SkGeInitRamBufs() - Initialize the RAM Buffer Queues
+ *
+ * Description:
+ * Initialize all RAM Buffer Queues of the specified port
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGeInitRamBufs(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ int RxQType;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PRxQSize == SK_MIN_RXQ_SIZE) {
+ RxQType = SK_RX_SRAM_Q; /* small Rx Queue */
+ } else {
+ RxQType = SK_RX_BRAM_Q; /* big Rx Queue */
+ }
+
+ DoInitRamQueue(pAC, IoC, pPrt->PRxQOff, pPrt->PRxQRamStart,
+ pPrt->PRxQRamEnd, RxQType);
+
+ DoInitRamQueue(pAC, IoC, pPrt->PXsQOff, pPrt->PXsQRamStart,
+ pPrt->PXsQRamEnd, SK_TX_RAM_Q);
+
+ DoInitRamQueue(pAC, IoC, pPrt->PXaQOff, pPrt->PXaQRamStart,
+ pPrt->PXaQRamEnd, SK_TX_RAM_Q);
+
+} /* SkGeInitRamBufs */
+
+
+/******************************************************************************
+ *
+ * SkGeInitRamIface() - Initialize the RAM Interface
+ *
+ * Description:
+ * This function initializes the Adapters RAM Interface.
+ *
+ * Note:
+ * This function is used in the diagnostics.
+ *
+ * Returns:
+ * nothing
+ */
+void SkGeInitRamIface(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ /* release local reset */
+ SK_OUT16(IoC, B3_RI_CTRL, RI_RST_CLR);
+
+ /* configure timeout values */
+ SK_OUT8(IoC, B3_RI_WTO_R1, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_WTO_XA1, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_WTO_XS1, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_RTO_R1, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_RTO_XA1, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_RTO_XS1, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_WTO_R2, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_WTO_XA2, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_WTO_XS2, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_RTO_R2, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_RTO_XA2, SK_RI_TO_53);
+ SK_OUT8(IoC, B3_RI_RTO_XS2, SK_RI_TO_53);
+
+} /* SkGeInitRamIface */
+
+
+/******************************************************************************
+ *
+ * SkGeInitBmu() - Initialize the BMU state machines
+ *
+ * Description:
+ * Initialize all BMU state machines of the specified port
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGeInitBmu(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U32 RxWm;
+ SK_U32 TxWm;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ RxWm = SK_BMU_RX_WM;
+ TxWm = SK_BMU_TX_WM;
+
+ if (!pAC->GIni.GIPciSlot64 && !pAC->GIni.GIPciClock66) {
+ /* for better performance */
+ RxWm /= 2;
+ TxWm /= 2;
+ }
+
+ /* Rx Queue: Release all local resets and set the watermark */
+ SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), CSR_CLR_RESET);
+ SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_F), RxWm);
+
+ /*
+ * Tx Queue: Release all local resets if the queue is used !
+ * set watermark
+ */
+ if (pPrt->PXSQSize != 0) {
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_CLR_RESET);
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_F), TxWm);
+ }
+
+ if (pPrt->PXAQSize != 0) {
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_CLR_RESET);
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_F), TxWm);
+ }
+ /*
+ * Do NOT enable the descriptor poll timers here, because
+ * the descriptor addresses are not specified yet.
+ */
+} /* SkGeInitBmu */
+
+
+/******************************************************************************
+ *
+ * TestStopBit() - Test the stop bit of the queue
+ *
+ * Description:
+ * Stopping a queue is not as simple as it seems to be.
+ * If descriptor polling is enabled, it may happen
+ * that RX/TX stop is done and SV idle is NOT set.
+ * In this case we have to issue another stop command.
+ *
+ * Returns:
+ * The queues control status register
+ */
+static SK_U32 TestStopBit(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int QuIoOffs) /* Queue IO Address Offset */
+{
+ SK_U32 QuCsr; /* CSR contents */
+
+ SK_IN32(IoC, Q_ADDR(QuIoOffs, Q_CSR), &QuCsr);
+
+ if ((QuCsr & (CSR_STOP | CSR_SV_IDLE)) == 0) {
+ /* Stop Descriptor overridden by start command */
+ SK_OUT32(IoC, Q_ADDR(QuIoOffs, Q_CSR), CSR_STOP);
+
+ SK_IN32(IoC, Q_ADDR(QuIoOffs, Q_CSR), &QuCsr);
+ }
+
+ return(QuCsr);
+} /* TestStopBit */
+
+
+/******************************************************************************
+ *
+ * SkGeStopPort() - Stop the Rx/Tx activity of the port 'Port'.
+ *
+ * Description:
+ * After calling this function the descriptor rings and Rx and Tx
+ * queues of this port may be reconfigured.
+ *
+ * It is possible to stop the receive and transmit path separate or
+ * both together.
+ *
+ * Dir = SK_STOP_TX Stops the transmit path only and resets the MAC.
+ * The receive queue is still active and
+ * the pending Rx frames may be still transferred
+ * into the RxD.
+ * SK_STOP_RX Stop the receive path. The tansmit path
+ * has to be stopped once before.
+ * SK_STOP_ALL SK_STOP_TX + SK_STOP_RX
+ *
+ * RstMode = SK_SOFT_RST Resets the MAC. The PHY is still alive.
+ * SK_HARD_RST Resets the MAC and the PHY.
+ *
+ * Example:
+ * 1) A Link Down event was signaled for a port. Therefore the activity
+ * of this port should be stopped and a hardware reset should be issued
+ * to enable the workaround of XMAC errata #2. But the received frames
+ * should not be discarded.
+ * ...
+ * SkGeStopPort(pAC, IoC, Port, SK_STOP_TX, SK_HARD_RST);
+ * (transfer all pending Rx frames)
+ * SkGeStopPort(pAC, IoC, Port, SK_STOP_RX, SK_HARD_RST);
+ * ...
+ *
+ * 2) An event was issued which request the driver to switch
+ * the 'virtual active' link to an other already active port
+ * as soon as possible. The frames in the receive queue of this
+ * port may be lost. But the PHY must not be reset during this
+ * event.
+ * ...
+ * SkGeStopPort(pAC, IoC, Port, SK_STOP_ALL, SK_SOFT_RST);
+ * ...
+ *
+ * Extended Description:
+ * If SK_STOP_TX is set,
+ * o disable the MAC's receive and transmitter to prevent
+ * from sending incomplete frames
+ * o stop the port's transmit queues before terminating the
+ * BMUs to prevent from performing incomplete PCI cycles
+ * on the PCI bus
+ * - The network Rx and Tx activity and PCI Tx transfer is
+ * disabled now.
+ * o reset the MAC depending on the RstMode
+ * o Stop Interval Timer and Limit Counter of Tx Arbiter,
+ * also disable Force Sync bit and Enable Alloc bit.
+ * o perform a local reset of the port's Tx path
+ * - reset the PCI FIFO of the async Tx queue
+ * - reset the PCI FIFO of the sync Tx queue
+ * - reset the RAM Buffer async Tx queue
+ * - reset the RAM Buffer sync Tx queue
+ * - reset the MAC Tx FIFO
+ * o switch Link and Tx LED off, stop the LED counters
+ *
+ * If SK_STOP_RX is set,
+ * o stop the port's receive queue
+ * - The path data transfer activity is fully stopped now.
+ * o perform a local reset of the port's Rx path
+ * - reset the PCI FIFO of the Rx queue
+ * - reset the RAM Buffer receive queue
+ * - reset the MAC Rx FIFO
+ * o switch Rx LED off, stop the LED counter
+ *
+ * If all ports are stopped,
+ * o reset the RAM Interface.
+ *
+ * Notes:
+ * o This function may be called during the driver states RESET_PORT and
+ * SWITCH_PORT.
+ */
+void SkGeStopPort(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* I/O context */
+int Port, /* port to stop (MAC_1 + n) */
+int Dir, /* Direction to Stop (SK_STOP_RX, SK_STOP_TX, SK_STOP_ALL) */
+int RstMode)/* Reset Mode (SK_SOFT_RST, SK_HARD_RST) */
+{
+#ifndef SK_DIAG
+ SK_EVPARA Para;
+#endif /* !SK_DIAG */
+ SK_GEPORT *pPrt;
+ SK_U32 DWord;
+ SK_U32 XsCsr;
+ SK_U32 XaCsr;
+ SK_U64 ToutStart;
+ int i;
+ int ToutCnt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if ((Dir & SK_STOP_TX) != 0) {
+ /* disable receiver and transmitter */
+ SkMacRxTxDisable(pAC, IoC, Port);
+
+ /* stop both transmit queues */
+ /*
+ * If the BMU is in the reset state CSR_STOP will terminate
+ * immediately.
+ */
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_STOP);
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_STOP);
+
+ ToutStart = SkOsGetTime(pAC);
+ ToutCnt = 0;
+ do {
+ /*
+ * Clear packet arbiter timeout to make sure
+ * this loop will terminate.
+ */
+ SK_OUT16(IoC, B3_PA_CTRL, (Port == MAC_1) ? PA_CLR_TO_TX1 :
+ PA_CLR_TO_TX2);
+
+ /*
+ * If the transfer stucks at the MAC the STOP command will not
+ * terminate if we don't flush the XMAC's transmit FIFO !
+ */
+ SkMacFlushTxFifo(pAC, IoC, Port);
+
+ XsCsr = TestStopBit(pAC, IoC, pPrt->PXsQOff);
+ XaCsr = TestStopBit(pAC, IoC, pPrt->PXaQOff);
+
+ if (SkOsGetTime(pAC) - ToutStart > (SK_TICKS_PER_SEC / 18)) {
+ /*
+ * Timeout of 1/18 second reached.
+ * This needs to be checked at 1/18 sec only.
+ */
+ ToutCnt++;
+ if (ToutCnt > 1) {
+ /* Might be a problem when the driver event handler
+ * calls StopPort again. XXX.
+ */
+
+ /* Fatal Error, Loop aborted */
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_HWI_E018,
+ SKERR_HWI_E018MSG);
+#ifndef SK_DIAG
+ Para.Para64 = Port;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+#endif /* !SK_DIAG */
+ return;
+ }
+ /*
+ * Cache incoherency workaround: Assume a start command
+ * has been lost while sending the frame.
+ */
+ ToutStart = SkOsGetTime(pAC);
+
+ if ((XsCsr & CSR_STOP) != 0) {
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_START);
+ }
+ if ((XaCsr & CSR_STOP) != 0) {
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_START);
+ }
+ }
+
+ /*
+ * Because of the ASIC problem report entry from 21.08.1998 it is
+ * required to wait until CSR_STOP is reset and CSR_SV_IDLE is set.
+ */
+ } while ((XsCsr & (CSR_STOP | CSR_SV_IDLE)) != CSR_SV_IDLE ||
+ (XaCsr & (CSR_STOP | CSR_SV_IDLE)) != CSR_SV_IDLE);
+
+ /* Reset the MAC depending on the RstMode */
+ if (RstMode == SK_SOFT_RST) {
+ SkMacSoftRst(pAC, IoC, Port);
+ }
+ else {
+ SkMacHardRst(pAC, IoC, Port);
+ }
+
+ /* Disable Force Sync bit and Enable Alloc bit */
+ SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL),
+ TXA_DIS_FSYNC | TXA_DIS_ALLOC | TXA_STOP_RC);
+
+ /* Stop Interval Timer and Limit Counter of Tx Arbiter */
+ SK_OUT32(IoC, MR_ADDR(Port, TXA_ITI_INI), 0L);
+ SK_OUT32(IoC, MR_ADDR(Port, TXA_LIM_INI), 0L);
+
+ /* Perform a local reset of the port's Tx path */
+
+ /* Reset the PCI FIFO of the async Tx queue */
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXaQOff, Q_CSR), CSR_SET_RESET);
+ /* Reset the PCI FIFO of the sync Tx queue */
+ SK_OUT32(IoC, Q_ADDR(pPrt->PXsQOff, Q_CSR), CSR_SET_RESET);
+ /* Reset the RAM Buffer async Tx queue */
+ SK_OUT8(IoC, RB_ADDR(pPrt->PXaQOff, RB_CTRL), RB_RST_SET);
+ /* Reset the RAM Buffer sync Tx queue */
+ SK_OUT8(IoC, RB_ADDR(pPrt->PXsQOff, RB_CTRL), RB_RST_SET);
+
+ /* Reset Tx MAC FIFO */
+ if (pAC->GIni.GIGenesis) {
+ /* Note: MFF_RST_SET does NOT reset the XMAC ! */
+ SK_OUT8(IoC, MR_ADDR(Port, TX_MFF_CTRL2), MFF_RST_SET);
+
+ /* switch Link and Tx LED off, stop the LED counters */
+ /* Link LED is switched off by the RLMT and the Diag itself */
+ SkGeXmitLED(pAC, IoC, MR_ADDR(Port, TX_LED_INI), SK_LED_DIS);
+ }
+ else {
+ /* Reset TX MAC FIFO */
+ SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U8)GMF_RST_SET);
+ }
+ }
+
+ if ((Dir & SK_STOP_RX) != 0) {
+ /*
+ * The RX Stop Command will not terminate if no buffers
+ * are queued in the RxD ring. But it will always reach
+ * the Idle state. Therefore we can use this feature to
+ * stop the transfer of received packets.
+ */
+ /* stop the port's receive queue */
+ SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), CSR_STOP);
+
+ i = 100;
+ do {
+ /*
+ * Clear packet arbiter timeout to make sure
+ * this loop will terminate
+ */
+ SK_OUT16(IoC, B3_PA_CTRL, (Port == MAC_1) ? PA_CLR_TO_RX1 :
+ PA_CLR_TO_RX2);
+
+ DWord = TestStopBit(pAC, IoC, pPrt->PRxQOff);
+
+ /* timeout if i==0 (bug fix for #10748) */
+ if (--i == 0) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_HWI_E024,
+ SKERR_HWI_E024MSG);
+ break;
+ }
+ /*
+ * because of the ASIC problem report entry from 21.08.98
+ * it is required to wait until CSR_STOP is reset and
+ * CSR_SV_IDLE is set.
+ */
+ } while ((DWord & (CSR_STOP | CSR_SV_IDLE)) != CSR_SV_IDLE);
+
+ /* The path data transfer activity is fully stopped now */
+
+ /* Perform a local reset of the port's Rx path */
+
+ /* Reset the PCI FIFO of the Rx queue */
+ SK_OUT32(IoC, Q_ADDR(pPrt->PRxQOff, Q_CSR), CSR_SET_RESET);
+ /* Reset the RAM Buffer receive queue */
+ SK_OUT8(IoC, RB_ADDR(pPrt->PRxQOff, RB_CTRL), RB_RST_SET);
+
+ /* Reset Rx MAC FIFO */
+ if (pAC->GIni.GIGenesis) {
+
+ SK_OUT8(IoC, MR_ADDR(Port, RX_MFF_CTRL2), MFF_RST_SET);
+
+ /* switch Rx LED off, stop the LED counter */
+ SkGeXmitLED(pAC, IoC, MR_ADDR(Port, RX_LED_INI), SK_LED_DIS);
+ }
+ else {
+ /* Reset Rx MAC FIFO */
+ SK_OUT8(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), (SK_U8)GMF_RST_SET);
+ }
+ }
+} /* SkGeStopPort */
+
+
+/******************************************************************************
+ *
+ * SkGeInit0() - Level 0 Initialization
+ *
+ * Description:
+ * - Initialize the BMU address offsets
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGeInit0(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ int i;
+ SK_GEPORT *pPrt;
+
+ for (i = 0; i < SK_MAX_MACS; i++) {
+ pPrt = &pAC->GIni.GP[i];
+
+ pPrt->PState = SK_PRT_RESET;
+ pPrt->PRxQOff = QOffTab[i].RxQOff;
+ pPrt->PXsQOff = QOffTab[i].XsQOff;
+ pPrt->PXaQOff = QOffTab[i].XaQOff;
+ pPrt->PCheckPar = SK_FALSE;
+ pPrt->PIsave = 0;
+ pPrt->PPrevShorts = 0;
+ pPrt->PLinkResCt = 0;
+ pPrt->PAutoNegTOCt = 0;
+ pPrt->PPrevRx = 0;
+ pPrt->PPrevFcs = 0;
+ pPrt->PRxLim = SK_DEF_RX_WA_LIM;
+ pPrt->PLinkMode = SK_LMODE_AUTOFULL;
+ pPrt->PLinkSpeedCap = SK_LSPEED_CAP_1000MBPS;
+ pPrt->PLinkSpeed = SK_LSPEED_1000MBPS;
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_UNKNOWN;
+ pPrt->PLinkModeConf = SK_LMODE_AUTOSENSE;
+ pPrt->PFlowCtrlMode = SK_FLOW_MODE_SYM_OR_REM;
+ pPrt->PLinkBroken = SK_TRUE; /* See WA code */
+ pPrt->PLinkCap = (SK_LMODE_CAP_HALF | SK_LMODE_CAP_FULL |
+ SK_LMODE_CAP_AUTOHALF | SK_LMODE_CAP_AUTOFULL);
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
+ pPrt->PFlowCtrlCap = SK_FLOW_MODE_SYM_OR_REM;
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
+ pPrt->PMSCap = 0;
+ pPrt->PMSMode = SK_MS_MODE_AUTO;
+ pPrt->PMSStatus = SK_MS_STAT_UNSET;
+ pPrt->PAutoNegFail = SK_FALSE;
+ pPrt->PLipaAutoNeg = SK_LIPA_UNKNOWN;
+ pPrt->PHWLinkUp = SK_FALSE;
+ }
+
+ pAC->GIni.GIPortUsage = SK_RED_LINK;
+
+} /* SkGeInit0*/
+
+#ifdef SK_PCI_RESET
+
+/******************************************************************************
+ *
+ * SkGePciReset() - Reset PCI interface
+ *
+ * Description:
+ * o Read PCI configuration.
+ * o Change power state to 3.
+ * o Change power state to 0.
+ * o Restore PCI configuration.
+ *
+ * Returns:
+ * 0: Success.
+ * 1: Power state could not be changed to 3.
+ */
+static int SkGePciReset(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ int i;
+ SK_U16 PmCtlSts;
+ SK_U32 Bp1;
+ SK_U32 Bp2;
+ SK_U16 PciCmd;
+ SK_U8 Cls;
+ SK_U8 Lat;
+ SK_U8 ConfigSpace[PCI_CFG_SIZE];
+
+ /*
+ * Note: Switching to D3 state is like a software reset.
+ * Switching from D3 to D0 is a hardware reset.
+ * We have to save and restore the configuration space.
+ */
+ for (i = 0; i < PCI_CFG_SIZE; i++) {
+ SkPciReadCfgDWord(pAC, i*4, &ConfigSpace[i]);
+ }
+
+ /* We know the RAM Interface Arbiter is enabled. */
+ SkPciWriteCfgWord(pAC, PCI_PM_CTL_STS, PCI_PM_STATE_D3);
+ SkPciReadCfgWord(pAC, PCI_PM_CTL_STS, &PmCtlSts);
+
+ if ((PmCtlSts & PCI_PM_STATE_MSK) != PCI_PM_STATE_D3) {
+ return(1);
+ }
+
+ /* Return to D0 state. */
+ SkPciWriteCfgWord(pAC, PCI_PM_CTL_STS, PCI_PM_STATE_D0);
+
+ /* Check for D0 state. */
+ SkPciReadCfgWord(pAC, PCI_PM_CTL_STS, &PmCtlSts);
+
+ if ((PmCtlSts & PCI_PM_STATE_MSK) != PCI_PM_STATE_D0) {
+ return(1);
+ }
+
+ /* Check PCI Config Registers. */
+ SkPciReadCfgWord(pAC, PCI_COMMAND, &PciCmd);
+ SkPciReadCfgByte(pAC, PCI_CACHE_LSZ, &Cls);
+ SkPciReadCfgDWord(pAC, PCI_BASE_1ST, &Bp1);
+ SkPciReadCfgDWord(pAC, PCI_BASE_2ND, &Bp2);
+ SkPciReadCfgByte(pAC, PCI_LAT_TIM, &Lat);
+
+ if (PciCmd != 0 || Cls != 0 || (Bp1 & 0xfffffff0L) != 0 || Bp2 != 1 ||
+ Lat != 0) {
+ return(1);
+ }
+
+ /* Restore PCI Config Space. */
+ for (i = 0; i < PCI_CFG_SIZE; i++) {
+ SkPciWriteCfgDWord(pAC, i*4, ConfigSpace[i]);
+ }
+
+ return(0);
+} /* SkGePciReset */
+
+#endif /* SK_PCI_RESET */
+
+/******************************************************************************
+ *
+ * SkGeInit1() - Level 1 Initialization
+ *
+ * Description:
+ * o Do a software reset.
+ * o Clear all reset bits.
+ * o Verify that the detected hardware is present.
+ * Return an error if not.
+ * o Get the hardware configuration
+ * + Read the number of MACs/Ports.
+ * + Read the RAM size.
+ * + Read the PCI Revision Id.
+ * + Find out the adapters host clock speed
+ * + Read and check the PHY type
+ *
+ * Returns:
+ * 0: success
+ * 5: Unexpected PHY type detected
+ * 6: HW self test failed
+ */
+static int SkGeInit1(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ SK_U8 Byte;
+ SK_U16 Word;
+ SK_U16 CtrlStat;
+ SK_U32 FlashAddr;
+ int RetVal;
+ int i;
+
+ RetVal = 0;
+
+ /* save CLK_RUN bits (YUKON-Lite) */
+ SK_IN16(IoC, B0_CTST, &CtrlStat);
+
+#ifdef SK_PCI_RESET
+ (void)SkGePciReset(pAC, IoC);
+#endif /* SK_PCI_RESET */
+
+ /* do the SW-reset */
+ SK_OUT8(IoC, B0_CTST, CS_RST_SET);
+
+ /* release the SW-reset */
+ SK_OUT8(IoC, B0_CTST, CS_RST_CLR);
+
+ /* reset all error bits in the PCI STATUS register */
+ /*
+ * Note: PCI Cfg cycles cannot be used, because they are not
+ * available on some platforms after 'boot time'.
+ */
+ SK_IN16(IoC, PCI_C(PCI_STATUS), &Word);
+
+ SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+ SK_OUT16(IoC, PCI_C(PCI_STATUS), Word | PCI_ERRBITS);
+ SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
+
+ /* release Master Reset */
+ SK_OUT8(IoC, B0_CTST, CS_MRST_CLR);
+
+#ifdef CLK_RUN
+ CtrlStat |= CS_CLK_RUN_ENA;
+#endif /* CLK_RUN */
+
+ /* restore CLK_RUN bits */
+ SK_OUT16(IoC, B0_CTST, CtrlStat &
+ (CS_CLK_RUN_HOT | CS_CLK_RUN_RST | CS_CLK_RUN_ENA));
+
+ /* read Chip Identification Number */
+ SK_IN8(IoC, B2_CHIP_ID, &Byte);
+ pAC->GIni.GIChipId = Byte;
+
+ /* read number of MACs */
+ SK_IN8(IoC, B2_MAC_CFG, &Byte);
+ pAC->GIni.GIMacsFound = (Byte & CONFIG_SYS_SNG_MAC) ? 1 : 2;
+
+ /* get Chip Revision Number */
+ pAC->GIni.GIChipRev = (SK_U8)((Byte & CONFIG_SYS_CHIP_R_MSK) >> 4);
+
+ /* get diff. PCI parameters */
+ SK_IN16(IoC, B0_CTST, &CtrlStat);
+
+ /* read the adapters RAM size */
+ SK_IN8(IoC, B2_E_0, &Byte);
+
+ if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) {
+
+ pAC->GIni.GIGenesis = SK_TRUE;
+
+ if (Byte == 3) {
+ /* special case: 4 x 64k x 36, offset = 0x80000 */
+ pAC->GIni.GIRamSize = 1024;
+ pAC->GIni.GIRamOffs = (SK_U32)512 * 1024;
+ }
+ else {
+ pAC->GIni.GIRamSize = (int)Byte * 512;
+ pAC->GIni.GIRamOffs = 0;
+ }
+ /* all GE adapters work with 53.125 MHz host clock */
+ pAC->GIni.GIHstClkFact = SK_FACT_53;
+
+ /* set Descr. Poll Timer Init Value to 250 ms */
+ pAC->GIni.GIPollTimerVal =
+ SK_DPOLL_DEF * (SK_U32)pAC->GIni.GIHstClkFact / 100;
+ }
+ else {
+ pAC->GIni.GIGenesis = SK_FALSE;
+
+#ifndef VCPU
+ pAC->GIni.GIRamSize = (Byte == 0) ? 128 : (int)Byte * 4;
+#else
+ pAC->GIni.GIRamSize = 128;
+#endif
+ pAC->GIni.GIRamOffs = 0;
+
+ /* WA for chip Rev. A */
+ pAC->GIni.GIWolOffs = (pAC->GIni.GIChipRev == 0) ? WOL_REG_OFFS : 0;
+
+ /* get PM Capabilities of PCI config space */
+ SK_IN16(IoC, PCI_C(PCI_PM_CAP_REG), &Word);
+
+ /* check if VAUX is available */
+ if (((CtrlStat & CS_VAUX_AVAIL) != 0) &&
+ /* check also if PME from D3cold is set */
+ ((Word & PCI_PME_D3C_SUP) != 0)) {
+ /* set entry in GE init struct */
+ pAC->GIni.GIVauxAvail = SK_TRUE;
+ }
+
+ /* save Flash-Address Register */
+ SK_IN32(IoC, B2_FAR, &FlashAddr);
+
+ /* test Flash-Address Register */
+ SK_OUT8(IoC, B2_FAR + 3, 0xff);
+ SK_IN8(IoC, B2_FAR + 3, &Byte);
+
+ pAC->GIni.GIYukonLite = (SK_BOOL)(Byte != 0);
+
+ /* restore Flash-Address Register */
+ SK_OUT32(IoC, B2_FAR, FlashAddr);
+
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+ /* set GMAC Link Control reset */
+ SK_OUT16(IoC, MR_ADDR(i, GMAC_LINK_CTRL), GMLC_RST_SET);
+
+ /* clear GMAC Link Control reset */
+ SK_OUT16(IoC, MR_ADDR(i, GMAC_LINK_CTRL), GMLC_RST_CLR);
+ }
+ /* all YU chips work with 78.125 MHz host clock */
+ pAC->GIni.GIHstClkFact = SK_FACT_78;
+
+ pAC->GIni.GIPollTimerVal = SK_DPOLL_MAX; /* 215 ms */
+ }
+
+ /* check if 64-bit PCI Slot is present */
+ pAC->GIni.GIPciSlot64 = (SK_BOOL)((CtrlStat & CS_BUS_SLOT_SZ) != 0);
+
+ /* check if 66 MHz PCI Clock is active */
+ pAC->GIni.GIPciClock66 = (SK_BOOL)((CtrlStat & CS_BUS_CLOCK) != 0);
+
+ /* read PCI HW Revision Id. */
+ SK_IN8(IoC, PCI_C(PCI_REV_ID), &Byte);
+ pAC->GIni.GIPciHwRev = Byte;
+
+ /* read the PMD type */
+ SK_IN8(IoC, B2_PMD_TYP, &Byte);
+ pAC->GIni.GICopperType = (SK_U8)(Byte == 'T');
+
+ /* read the PHY type */
+ SK_IN8(IoC, B2_E_1, &Byte);
+
+ Byte &= 0x0f; /* the PHY type is stored in the lower nibble */
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+
+ if (pAC->GIni.GIGenesis) {
+ switch (Byte) {
+ case SK_PHY_XMAC:
+ pAC->GIni.GP[i].PhyAddr = PHY_ADDR_XMAC;
+ break;
+ case SK_PHY_BCOM:
+ pAC->GIni.GP[i].PhyAddr = PHY_ADDR_BCOM;
+ pAC->GIni.GP[i].PMSCap =
+ SK_MS_CAP_AUTO | SK_MS_CAP_MASTER | SK_MS_CAP_SLAVE;
+ break;
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ pAC->GIni.GP[i].PhyAddr = PHY_ADDR_LONE;
+ break;
+ case SK_PHY_NAT:
+ pAC->GIni.GP[i].PhyAddr = PHY_ADDR_NAT;
+ break;
+#endif /* OTHER_PHY */
+ default:
+ /* ERROR: unexpected PHY type detected */
+ RetVal = 5;
+ break;
+ }
+ }
+ else {
+ if (Byte == 0) {
+ /* if this field is not initialized */
+ Byte = SK_PHY_MARV_COPPER;
+ pAC->GIni.GICopperType = SK_TRUE;
+ }
+ pAC->GIni.GP[i].PhyAddr = PHY_ADDR_MARV;
+
+ if (pAC->GIni.GICopperType) {
+ pAC->GIni.GP[i].PLinkSpeedCap = SK_LSPEED_CAP_AUTO |
+ SK_LSPEED_CAP_10MBPS | SK_LSPEED_CAP_100MBPS |
+ SK_LSPEED_CAP_1000MBPS;
+ pAC->GIni.GP[i].PLinkSpeed = SK_LSPEED_AUTO;
+ pAC->GIni.GP[i].PMSCap =
+ SK_MS_CAP_AUTO | SK_MS_CAP_MASTER | SK_MS_CAP_SLAVE;
+ }
+ else {
+ Byte = SK_PHY_MARV_FIBER;
+ }
+ }
+
+ pAC->GIni.GP[i].PhyType = Byte;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
+ ("PHY type: %d PHY addr: %04x\n", Byte,
+ pAC->GIni.GP[i].PhyAddr));
+ }
+
+ /* get Mac Type & set function pointers dependent on */
+ if (pAC->GIni.GIGenesis) {
+ pAC->GIni.GIMacType = SK_MAC_XMAC;
+
+ pAC->GIni.GIFunc.pFnMacUpdateStats = SkXmUpdateStats;
+ pAC->GIni.GIFunc.pFnMacStatistic = SkXmMacStatistic;
+ pAC->GIni.GIFunc.pFnMacResetCounter = SkXmResetCounter;
+ pAC->GIni.GIFunc.pFnMacOverflow = SkXmOverflowStatus;
+ }
+ else {
+ pAC->GIni.GIMacType = SK_MAC_GMAC;
+
+ pAC->GIni.GIFunc.pFnMacUpdateStats = SkGmUpdateStats;
+ pAC->GIni.GIFunc.pFnMacStatistic = SkGmMacStatistic;
+ pAC->GIni.GIFunc.pFnMacResetCounter = SkGmResetCounter;
+ pAC->GIni.GIFunc.pFnMacOverflow = SkGmOverflowStatus;
+
+#ifdef SPECIAL_HANDLING
+ if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {
+ /* check HW self test result */
+ SK_IN8(IoC, B2_E_3, &Byte);
+ if ((Byte & B2_E3_RES_MASK) != 0) {
+ RetVal = 6;
+ }
+ }
+#endif
+ }
+ return(RetVal);
+} /* SkGeInit1 */
+
+
+/******************************************************************************
+ *
+ * SkGeInit2() - Level 2 Initialization
+ *
+ * Description:
+ * - start the Blink Source Counter
+ * - start the Descriptor Poll Timer
+ * - configure the MAC-Arbiter
+ * - configure the Packet-Arbiter
+ * - enable the Tx Arbiters
+ * - enable the RAM Interface Arbiter
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGeInit2(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ SK_U32 DWord;
+ int i;
+
+ /* start the Descriptor Poll Timer */
+ if (pAC->GIni.GIPollTimerVal != 0) {
+ if (pAC->GIni.GIPollTimerVal > SK_DPOLL_MAX) {
+ pAC->GIni.GIPollTimerVal = SK_DPOLL_MAX;
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E017, SKERR_HWI_E017MSG);
+ }
+ SK_OUT32(IoC, B28_DPT_INI, pAC->GIni.GIPollTimerVal);
+ SK_OUT8(IoC, B28_DPT_CTRL, DPT_START);
+ }
+
+ if (pAC->GIni.GIGenesis) {
+ /* start the Blink Source Counter */
+ DWord = SK_BLK_DUR * (SK_U32)pAC->GIni.GIHstClkFact / 100;
+
+ SK_OUT32(IoC, B2_BSC_INI, DWord);
+ SK_OUT8(IoC, B2_BSC_CTRL, BSC_START);
+
+ /*
+ * Configure the MAC Arbiter and the Packet Arbiter.
+ * They will be started once and never be stopped.
+ */
+ SkGeInitMacArb(pAC, IoC);
+
+ SkGeInitPktArb(pAC, IoC);
+ }
+ else {
+ /* start Time Stamp Timer */
+ SK_OUT8(IoC, GMAC_TI_ST_CTRL, (SK_U8)GMT_ST_START);
+ }
+
+ /* enable the Tx Arbiters */
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+ SK_OUT8(IoC, MR_ADDR(i, TXA_CTRL), TXA_ENA_ARB);
+ }
+
+ /* enable the RAM Interface Arbiter */
+ SkGeInitRamIface(pAC, IoC);
+
+} /* SkGeInit2 */
+
+/******************************************************************************
+ *
+ * SkGeInit() - Initialize the GE Adapter with the specified level.
+ *
+ * Description:
+ * Level 0: Initialize the Module structures.
+ * Level 1: Generic Hardware Initialization. The IOP/MemBase pointer has
+ * to be set before calling this level.
+ *
+ * o Do a software reset.
+ * o Clear all reset bits.
+ * o Verify that the detected hardware is present.
+ * Return an error if not.
+ * o Get the hardware configuration
+ * + Set GIMacsFound with the number of MACs.
+ * + Store the RAM size in GIRamSize.
+ * + Save the PCI Revision ID in GIPciHwRev.
+ * o return an error
+ * if Number of MACs > SK_MAX_MACS
+ *
+ * After returning from Level 0 the adapter
+ * may be accessed with IO operations.
+ *
+ * Level 2: start the Blink Source Counter
+ *
+ * Returns:
+ * 0: success
+ * 1: Number of MACs exceeds SK_MAX_MACS (after level 1)
+ * 2: Adapter not present or not accessible
+ * 3: Illegal initialization level
+ * 4: Initialization Level 1 Call missing
+ * 5: Unexpected PHY type detected
+ * 6: HW self test failed
+ */
+int SkGeInit(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Level) /* initialization level */
+{
+ int RetVal; /* return value */
+ SK_U32 DWord;
+
+ RetVal = 0;
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_INIT,
+ ("SkGeInit(Level %d)\n", Level));
+
+ switch (Level) {
+ case SK_INIT_DATA:
+ /* Initialization Level 0 */
+ SkGeInit0(pAC, IoC);
+ pAC->GIni.GILevel = SK_INIT_DATA;
+ break;
+
+ case SK_INIT_IO:
+ /* Initialization Level 1 */
+ RetVal = SkGeInit1(pAC, IoC);
+ if (RetVal != 0) {
+ break;
+ }
+
+ /* check if the adapter seems to be accessible */
+ SK_OUT32(IoC, B2_IRQM_INI, 0x11335577L);
+ SK_IN32(IoC, B2_IRQM_INI, &DWord);
+ SK_OUT32(IoC, B2_IRQM_INI, 0L);
+
+ if (DWord != 0x11335577L) {
+ RetVal = 2;
+ break;
+ }
+
+ /* check if the number of GIMacsFound matches SK_MAX_MACS */
+ if (pAC->GIni.GIMacsFound > SK_MAX_MACS) {
+ RetVal = 1;
+ break;
+ }
+
+ /* Level 1 successfully passed */
+ pAC->GIni.GILevel = SK_INIT_IO;
+ break;
+
+ case SK_INIT_RUN:
+ /* Initialization Level 2 */
+ if (pAC->GIni.GILevel != SK_INIT_IO) {
+#ifndef SK_DIAG
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E002, SKERR_HWI_E002MSG);
+#endif /* !SK_DIAG */
+ RetVal = 4;
+ break;
+ }
+ SkGeInit2(pAC, IoC);
+
+ /* Level 2 successfully passed */
+ pAC->GIni.GILevel = SK_INIT_RUN;
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E003, SKERR_HWI_E003MSG);
+ RetVal = 3;
+ break;
+ }
+
+ return(RetVal);
+} /* SkGeInit */
+
+
+/******************************************************************************
+ *
+ * SkGeDeInit() - Deinitialize the adapter
+ *
+ * Description:
+ * All ports of the adapter will be stopped if not already done.
+ * Do a software reset and switch off all LEDs.
+ *
+ * Returns:
+ * nothing
+ */
+void SkGeDeInit(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC) /* IO context */
+{
+ int i;
+ SK_U16 Word;
+
+#ifndef VCPU
+ /* ensure I2C is ready */
+ SkI2cWaitIrq(pAC, IoC);
+#endif
+
+ /* stop all current transfer activity */
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+ if (pAC->GIni.GP[i].PState != SK_PRT_STOP &&
+ pAC->GIni.GP[i].PState != SK_PRT_RESET) {
+
+ SkGeStopPort(pAC, IoC, i, SK_STOP_ALL, SK_HARD_RST);
+ }
+ }
+
+ /* Reset all bits in the PCI STATUS register */
+ /*
+ * Note: PCI Cfg cycles cannot be used, because they are not
+ * available on some platforms after 'boot time'.
+ */
+ SK_IN16(IoC, PCI_C(PCI_STATUS), &Word);
+
+ SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+ SK_OUT16(IoC, PCI_C(PCI_STATUS), Word | PCI_ERRBITS);
+ SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
+
+ /* do the reset, all LEDs are switched off now */
+ SK_OUT8(IoC, B0_CTST, CS_RST_SET);
+} /* SkGeDeInit */
+
+
+/******************************************************************************
+ *
+ * SkGeInitPort() Initialize the specified port.
+ *
+ * Description:
+ * PRxQSize, PXSQSize, and PXAQSize has to be
+ * configured for the specified port before calling this function.
+ * The descriptor rings has to be initialized too.
+ *
+ * o (Re)configure queues of the specified port.
+ * o configure the MAC of the specified port.
+ * o put ASIC and MAC(s) in operational mode.
+ * o initialize Rx/Tx and Sync LED
+ * o initialize RAM Buffers and MAC FIFOs
+ *
+ * The port is ready to connect when returning.
+ *
+ * Note:
+ * The MAC's Rx and Tx state machine is still disabled when returning.
+ *
+ * Returns:
+ * 0: success
+ * 1: Queue size initialization error. The configured values
+ * for PRxQSize, PXSQSize, or PXAQSize are invalid for one
+ * or more queues. The specified port was NOT initialized.
+ * An error log entry was generated.
+ * 2: The port has to be stopped before it can be initialized again.
+ */
+int SkGeInitPort(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port to configure */
+{
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (SkGeCheckQSize(pAC, Port) != 0) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E004, SKERR_HWI_E004MSG);
+ return(1);
+ }
+
+ if (pPrt->PState == SK_PRT_INIT || pPrt->PState == SK_PRT_RUN) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E005, SKERR_HWI_E005MSG);
+ return(2);
+ }
+
+ /* configuration ok, initialize the Port now */
+
+ if (pAC->GIni.GIGenesis) {
+ /* initialize Rx, Tx and Link LED */
+ /*
+ * If 1000BT Phy needs LED initialization than swap
+ * LED and XMAC initialization order
+ */
+ SkGeXmitLED(pAC, IoC, MR_ADDR(Port, TX_LED_INI), SK_LED_ENA);
+ SkGeXmitLED(pAC, IoC, MR_ADDR(Port, RX_LED_INI), SK_LED_ENA);
+ /* The Link LED is initialized by RLMT or Diagnostics itself */
+
+ SkXmInitMac(pAC, IoC, Port);
+ }
+ else {
+
+ SkGmInitMac(pAC, IoC, Port);
+ }
+
+ /* do NOT initialize the Link Sync Counter */
+
+ SkGeInitMacFifo(pAC, IoC, Port);
+
+ SkGeInitRamBufs(pAC, IoC, Port);
+
+ if (pPrt->PXSQSize != 0) {
+ /* enable Force Sync bit if synchronous queue available */
+ SK_OUT8(IoC, MR_ADDR(Port, TXA_CTRL), TXA_ENA_FSYNC);
+ }
+
+ SkGeInitBmu(pAC, IoC, Port);
+
+ /* mark port as initialized */
+ pPrt->PState = SK_PRT_INIT;
+
+ return(0);
+} /* SkGeInitPort */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skgemib.c u-boot-2009.03/drivers/net/sk98lin/skgemib.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skgemib.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skgemib.c 2009-03-31 14:54:29.471880000 -0700
@@ -1,1056 +1,1059 @@
-/*****************************************************************************
- *
- * Name: skgemib.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.7 $
- * Date: $Date: 2002/12/16 09:04:34 $
- * Purpose: Private Network Management Interface Management Database
- *
- ****************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/*****************************************************************************
- *
- * History:
- *
- * $Log: skgemib.c,v $
- * Revision 1.7 2002/12/16 09:04:34 tschilli
- * Code for VCT handling added.
- *
- * Revision 1.6 2002/08/09 15:40:21 rwahl
- * Editorial change (renamed ConfSpeedCap).
- *
- * Revision 1.5 2002/08/09 11:05:34 rwahl
- * Added oid handling for link speed cap.
- *
- * Revision 1.4 2002/08/09 09:40:27 rwahl
- * Added support for NDIS OID_PNP_xxx.
- *
- * Revision 1.3 2002/07/17 19:39:54 rwahl
- * Added handler for OID_SKGE_SPEED_MODE & OID_SKGE_SPEED_STATUS.
- *
- * Revision 1.2 2002/05/22 08:59:00 rwahl
- * - static functions only for release build.
- * - Source file must be included.
- *
- * Revision 1.1 2002/05/22 08:12:42 rwahl
- * Initial version.
- *
- ****************************************************************************/
-
-#include <config.h>
-
-/*
- * PRIVATE OID handler function prototypes
- */
-PNMI_STATIC int Addr(SK_AC *pAC, SK_IOC IoC, int action,
- SK_U32 Id, char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int CsumStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int General(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int Mac8023Stat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int MacPrivateConf(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int MacPrivateStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int Monitor(SK_AC *pAC, SK_IOC IoC, int action,
- SK_U32 Id, char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int OidStruct(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int Perform(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int* pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int Rlmt(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int RlmtStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int SensorStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int Vpd(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC int Vct(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-
-#ifdef SK_POWER_MGMT
-PNMI_STATIC int PowerManagement(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance,
- unsigned int TableIndex, SK_U32 NetIndex);
-#endif
-
-
-/* defines *******************************************************************/
-#define ID_TABLE_SIZE (sizeof(IdTable)/sizeof(IdTable[0]))
-
-
-/* global variables **********************************************************/
-
-/*
- * Table to correlate OID with handler function and index to
- * hardware register stored in StatAddress if applicable.
- */
-PNMI_STATIC const SK_PNMI_TAB_ENTRY IdTable[] = {
- {OID_GEN_XMIT_OK,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX},
- {OID_GEN_RCV_OK,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX},
- {OID_GEN_XMIT_ERROR,
- 0,
- 0,
- 0,
- SK_PNMI_RO, General, 0},
- {OID_GEN_RCV_ERROR,
- 0,
- 0,
- 0,
- SK_PNMI_RO, General, 0},
- {OID_GEN_RCV_NO_BUFFER,
- 0,
- 0,
- 0,
- SK_PNMI_RO, General, 0},
- {OID_GEN_DIRECTED_FRAMES_XMIT,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_UNICAST},
- {OID_GEN_MULTICAST_FRAMES_XMIT,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_MULTICAST},
- {OID_GEN_BROADCAST_FRAMES_XMIT,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_BROADCAST},
- {OID_GEN_DIRECTED_FRAMES_RCV,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_UNICAST},
- {OID_GEN_MULTICAST_FRAMES_RCV,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_MULTICAST},
- {OID_GEN_BROADCAST_FRAMES_RCV,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_BROADCAST},
- {OID_GEN_RCV_CRC_ERROR,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_FCS},
- {OID_GEN_TRANSMIT_QUEUE_LENGTH,
- 0,
- 0,
- 0,
- SK_PNMI_RO, General, 0},
- {OID_802_3_PERMANENT_ADDRESS,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, 0},
- {OID_802_3_CURRENT_ADDRESS,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, 0},
- {OID_802_3_RCV_ERROR_ALIGNMENT,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_FRAMING},
- {OID_802_3_XMIT_ONE_COLLISION,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_SINGLE_COL},
- {OID_802_3_XMIT_MORE_COLLISIONS,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_MULTI_COL},
- {OID_802_3_XMIT_DEFERRED,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_DEFFERAL},
- {OID_802_3_XMIT_MAX_COLLISIONS,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_EXCESS_COL},
- {OID_802_3_RCV_OVERRUN,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_OVERFLOW},
- {OID_802_3_XMIT_UNDERRUN,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_UNDERRUN},
- {OID_802_3_XMIT_TIMES_CRS_LOST,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_CARRIER},
- {OID_802_3_XMIT_LATE_COLLISIONS,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_LATE_COL},
-#ifdef SK_POWER_MGMT
- {OID_PNP_CAPABILITIES,
- 0,
- 0,
- 0,
- SK_PNMI_RO, PowerManagement, 0},
- {OID_PNP_SET_POWER,
- 0,
- 0,
- 0,
- SK_PNMI_WO, PowerManagement, 0},
- {OID_PNP_QUERY_POWER,
- 0,
- 0,
- 0,
- SK_PNMI_RO, PowerManagement, 0},
- {OID_PNP_ADD_WAKE_UP_PATTERN,
- 0,
- 0,
- 0,
- SK_PNMI_WO, PowerManagement, 0},
- {OID_PNP_REMOVE_WAKE_UP_PATTERN,
- 0,
- 0,
- 0,
- SK_PNMI_WO, PowerManagement, 0},
- {OID_PNP_ENABLE_WAKE_UP,
- 0,
- 0,
- 0,
- SK_PNMI_RW, PowerManagement, 0},
-#endif /* SK_POWER_MGMT */
- {OID_SKGE_MDB_VERSION,
- 1,
- 0,
- SK_PNMI_MAI_OFF(MgmtDBVersion),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_SUPPORTED_LIST,
- 0,
- 0,
- 0,
- SK_PNMI_RO, General, 0},
- {OID_SKGE_ALL_DATA,
- 0,
- 0,
- 0,
- SK_PNMI_RW, OidStruct, 0},
- {OID_SKGE_VPD_FREE_BYTES,
- 1,
- 0,
- SK_PNMI_MAI_OFF(VpdFreeBytes),
- SK_PNMI_RO, Vpd, 0},
- {OID_SKGE_VPD_ENTRIES_LIST,
- 1,
- 0,
- SK_PNMI_MAI_OFF(VpdEntriesList),
- SK_PNMI_RO, Vpd, 0},
- {OID_SKGE_VPD_ENTRIES_NUMBER,
- 1,
- 0,
- SK_PNMI_MAI_OFF(VpdEntriesNumber),
- SK_PNMI_RO, Vpd, 0},
- {OID_SKGE_VPD_KEY,
- SK_PNMI_VPD_ENTRIES,
- sizeof(SK_PNMI_VPD),
- SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdKey),
- SK_PNMI_RO, Vpd, 0},
- {OID_SKGE_VPD_VALUE,
- SK_PNMI_VPD_ENTRIES,
- sizeof(SK_PNMI_VPD),
- SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdValue),
- SK_PNMI_RO, Vpd, 0},
- {OID_SKGE_VPD_ACCESS,
- SK_PNMI_VPD_ENTRIES,
- sizeof(SK_PNMI_VPD),
- SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdAccess),
- SK_PNMI_RO, Vpd, 0},
- {OID_SKGE_VPD_ACTION,
- SK_PNMI_VPD_ENTRIES,
- sizeof(SK_PNMI_VPD),
- SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdAction),
- SK_PNMI_RW, Vpd, 0},
- {OID_SKGE_PORT_NUMBER,
- 1,
- 0,
- SK_PNMI_MAI_OFF(PortNumber),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_DEVICE_TYPE,
- 1,
- 0,
- SK_PNMI_MAI_OFF(DeviceType),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_DRIVER_DESCR,
- 1,
- 0,
- SK_PNMI_MAI_OFF(DriverDescr),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_DRIVER_VERSION,
- 1,
- 0,
- SK_PNMI_MAI_OFF(DriverVersion),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_HW_DESCR,
- 1,
- 0,
- SK_PNMI_MAI_OFF(HwDescr),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_HW_VERSION,
- 1,
- 0,
- SK_PNMI_MAI_OFF(HwVersion),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_CHIPSET,
- 1,
- 0,
- SK_PNMI_MAI_OFF(Chipset),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_ACTION,
- 1,
- 0,
- SK_PNMI_MAI_OFF(Action),
- SK_PNMI_RW, Perform, 0},
- {OID_SKGE_RESULT,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TestResult),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_BUS_TYPE,
- 1,
- 0,
- SK_PNMI_MAI_OFF(BusType),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_BUS_SPEED,
- 1,
- 0,
- SK_PNMI_MAI_OFF(BusSpeed),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_BUS_WIDTH,
- 1,
- 0,
- SK_PNMI_MAI_OFF(BusWidth),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TX_SW_QUEUE_LEN,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TxSwQueueLen),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TX_SW_QUEUE_MAX,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TxSwQueueMax),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TX_RETRY,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TxRetryCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_RX_INTR_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RxIntrCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TX_INTR_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TxIntrCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_RX_NO_BUF_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RxNoBufCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TX_NO_BUF_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TxNoBufCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TX_USED_DESCR_NO,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TxUsedDescrNo),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_RX_DELIVERED_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RxDeliveredCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_RX_OCTETS_DELIV_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RxOctetsDeliveredCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_RX_HW_ERROR_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RxHwErrorsCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TX_HW_ERROR_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TxHwErrorsCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_IN_ERRORS_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(InErrorsCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_OUT_ERROR_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(OutErrorsCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_ERR_RECOVERY_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(ErrRecoveryCts),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_SYSUPTIME,
- 1,
- 0,
- SK_PNMI_MAI_OFF(SysUpTime),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_SENSOR_NUMBER,
- 1,
- 0,
- SK_PNMI_MAI_OFF(SensorNumber),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_SENSOR_INDEX,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorIndex),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_DESCR,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorDescr),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_TYPE,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorType),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_VALUE,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorValue),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_WAR_THRES_LOW,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningThresholdLow),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_WAR_THRES_UPP,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningThresholdHigh),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_ERR_THRES_LOW,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorThresholdLow),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_ERR_THRES_UPP,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorThresholdHigh),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_STATUS,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorStatus),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_WAR_CTS,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningCts),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_ERR_CTS,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorCts),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_WAR_TIME,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningTimestamp),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_SENSOR_ERR_TIME,
- SK_PNMI_SENSOR_ENTRIES,
- sizeof(SK_PNMI_SENSOR),
- SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorTimestamp),
- SK_PNMI_RO, SensorStat, 0},
- {OID_SKGE_CHKSM_NUMBER,
- 1,
- 0,
- SK_PNMI_MAI_OFF(ChecksumNumber),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_CHKSM_RX_OK_CTS,
- SKCS_NUM_PROTOCOLS,
- sizeof(SK_PNMI_CHECKSUM),
- SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumRxOkCts),
- SK_PNMI_RO, CsumStat, 0},
- {OID_SKGE_CHKSM_RX_UNABLE_CTS,
- SKCS_NUM_PROTOCOLS,
- sizeof(SK_PNMI_CHECKSUM),
- SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumRxUnableCts),
- SK_PNMI_RO, CsumStat, 0},
- {OID_SKGE_CHKSM_RX_ERR_CTS,
- SKCS_NUM_PROTOCOLS,
- sizeof(SK_PNMI_CHECKSUM),
- SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumRxErrCts),
- SK_PNMI_RO, CsumStat, 0},
- {OID_SKGE_CHKSM_TX_OK_CTS,
- SKCS_NUM_PROTOCOLS,
- sizeof(SK_PNMI_CHECKSUM),
- SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumTxOkCts),
- SK_PNMI_RO, CsumStat, 0},
- {OID_SKGE_CHKSM_TX_UNABLE_CTS,
- SKCS_NUM_PROTOCOLS,
- sizeof(SK_PNMI_CHECKSUM),
- SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumTxUnableCts),
- SK_PNMI_RO, CsumStat, 0},
- {OID_SKGE_STAT_TX,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX},
- {OID_SKGE_STAT_TX_OCTETS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxOctetsOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_OCTET},
- {OID_SKGE_STAT_TX_BROADCAST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxBroadcastOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_BROADCAST},
- {OID_SKGE_STAT_TX_MULTICAST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMulticastOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MULTICAST},
- {OID_SKGE_STAT_TX_UNICAST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxUnicastOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_UNICAST},
- {OID_SKGE_STAT_TX_LONGFRAMES,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxLongFramesCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_LONGFRAMES},
- {OID_SKGE_STAT_TX_BURST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxBurstCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_BURST},
- {OID_SKGE_STAT_TX_PFLOWC,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxPauseMacCtrlCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_PMACC},
- {OID_SKGE_STAT_TX_FLOWC,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMacCtrlCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MACC},
- {OID_SKGE_STAT_TX_SINGLE_COL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxSingleCollisionCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_SINGLE_COL},
- {OID_SKGE_STAT_TX_MULTI_COL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMultipleCollisionCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MULTI_COL},
- {OID_SKGE_STAT_TX_EXCESS_COL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxExcessiveCollisionCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_EXCESS_COL},
- {OID_SKGE_STAT_TX_LATE_COL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxLateCollisionCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_LATE_COL},
- {OID_SKGE_STAT_TX_DEFFERAL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxDeferralCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_DEFFERAL},
- {OID_SKGE_STAT_TX_EXCESS_DEF,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxExcessiveDeferralCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_EXCESS_DEF},
- {OID_SKGE_STAT_TX_UNDERRUN,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxFifoUnderrunCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_UNDERRUN},
- {OID_SKGE_STAT_TX_CARRIER,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxCarrierCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_CARRIER},
-/* {OID_SKGE_STAT_TX_UTIL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxUtilization),
- SK_PNMI_RO, MacPrivateStat, (SK_U16)(-1)}, */
- {OID_SKGE_STAT_TX_64,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx64Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_64},
- {OID_SKGE_STAT_TX_127,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx127Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_127},
- {OID_SKGE_STAT_TX_255,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx255Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_255},
- {OID_SKGE_STAT_TX_511,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx511Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_511},
- {OID_SKGE_STAT_TX_1023,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx1023Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_1023},
- {OID_SKGE_STAT_TX_MAX,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMaxCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MAX},
- {OID_SKGE_STAT_TX_SYNC,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxSyncCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_SYNC},
- {OID_SKGE_STAT_TX_SYNC_OCTETS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxSyncOctetsCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_SYNC_OCTET},
- {OID_SKGE_STAT_RX,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX},
- {OID_SKGE_STAT_RX_OCTETS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxOctetsOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_OCTET},
- {OID_SKGE_STAT_RX_BROADCAST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxBroadcastOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_BROADCAST},
- {OID_SKGE_STAT_RX_MULTICAST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMulticastOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MULTICAST},
- {OID_SKGE_STAT_RX_UNICAST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxUnicastOkCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_UNICAST},
- {OID_SKGE_STAT_RX_LONGFRAMES,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxLongFramesCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_LONGFRAMES},
- {OID_SKGE_STAT_RX_PFLOWC,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxPauseMacCtrlCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_PMACC},
- {OID_SKGE_STAT_RX_FLOWC,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMacCtrlCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MACC},
- {OID_SKGE_STAT_RX_PFLOWC_ERR,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxPauseMacCtrlErrorCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_PMACC_ERR},
- {OID_SKGE_STAT_RX_FLOWC_UNKWN,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMacCtrlUnknownCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MACC_UNKWN},
- {OID_SKGE_STAT_RX_BURST,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxBurstCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_BURST},
- {OID_SKGE_STAT_RX_MISSED,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMissedCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MISSED},
- {OID_SKGE_STAT_RX_FRAMING,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxFramingCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_FRAMING},
- {OID_SKGE_STAT_RX_OVERFLOW,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxFifoOverflowCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_OVERFLOW},
- {OID_SKGE_STAT_RX_JABBER,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxJabberCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_JABBER},
- {OID_SKGE_STAT_RX_CARRIER,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxCarrierCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_CARRIER},
- {OID_SKGE_STAT_RX_IR_LENGTH,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxIRLengthCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_IRLENGTH},
- {OID_SKGE_STAT_RX_SYMBOL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxSymbolCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_SYMBOL},
- {OID_SKGE_STAT_RX_SHORTS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxShortsCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_SHORTS},
- {OID_SKGE_STAT_RX_RUNT,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxRuntCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_RUNT},
- {OID_SKGE_STAT_RX_CEXT,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxCextCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_CEXT},
- {OID_SKGE_STAT_RX_TOO_LONG,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxTooLongCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_TOO_LONG},
- {OID_SKGE_STAT_RX_FCS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxFcsCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_FCS},
-/* {OID_SKGE_STAT_RX_UTIL,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxUtilization),
- SK_PNMI_RO, MacPrivateStat, (SK_U16)(-1)}, */
- {OID_SKGE_STAT_RX_64,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx64Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_64},
- {OID_SKGE_STAT_RX_127,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx127Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_127},
- {OID_SKGE_STAT_RX_255,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx255Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_255},
- {OID_SKGE_STAT_RX_511,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx511Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_511},
- {OID_SKGE_STAT_RX_1023,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx1023Cts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_1023},
- {OID_SKGE_STAT_RX_MAX,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_STAT),
- SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMaxCts),
- SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MAX},
- {OID_SKGE_PHYS_CUR_ADDR,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfMacCurrentAddr),
- SK_PNMI_RW, Addr, 0},
- {OID_SKGE_PHYS_FAC_ADDR,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfMacFactoryAddr),
- SK_PNMI_RO, Addr, 0},
- {OID_SKGE_PMD,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPMD),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_CONNECTOR,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfConnector),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_LINK_CAP,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkCapability),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_LINK_MODE,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkMode),
- SK_PNMI_RW, MacPrivateConf, 0},
- {OID_SKGE_LINK_MODE_STATUS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkModeStatus),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_LINK_STATUS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkStatus),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_FLOWCTRL_CAP,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlCapability),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_FLOWCTRL_MODE,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlMode),
- SK_PNMI_RW, MacPrivateConf, 0},
- {OID_SKGE_FLOWCTRL_STATUS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlStatus),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_PHY_OPERATION_CAP,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationCapability),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_PHY_OPERATION_MODE,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationMode),
- SK_PNMI_RW, MacPrivateConf, 0},
- {OID_SKGE_PHY_OPERATION_STATUS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationStatus),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_SPEED_CAP,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfSpeedCapability),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_SPEED_MODE,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfSpeedMode),
- SK_PNMI_RW, MacPrivateConf, 0},
- {OID_SKGE_SPEED_STATUS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_CONF),
- SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfSpeedStatus),
- SK_PNMI_RO, MacPrivateConf, 0},
- {OID_SKGE_TRAP,
- 1,
- 0,
- SK_PNMI_MAI_OFF(Trap),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_TRAP_NUMBER,
- 1,
- 0,
- SK_PNMI_MAI_OFF(TrapNumber),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_RLMT_MODE,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtMode),
- SK_PNMI_RW, Rlmt, 0},
- {OID_SKGE_RLMT_PORT_NUMBER,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtPortNumber),
- SK_PNMI_RO, Rlmt, 0},
- {OID_SKGE_RLMT_PORT_ACTIVE,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtPortActive),
- SK_PNMI_RO, Rlmt, 0},
- {OID_SKGE_RLMT_PORT_PREFERRED,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtPortPreferred),
- SK_PNMI_RW, Rlmt, 0},
- {OID_SKGE_RLMT_CHANGE_CTS,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtChangeCts),
- SK_PNMI_RO, Rlmt, 0},
- {OID_SKGE_RLMT_CHANGE_TIME,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtChangeTime),
- SK_PNMI_RO, Rlmt, 0},
- {OID_SKGE_RLMT_CHANGE_ESTIM,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtChangeEstimate),
- SK_PNMI_RO, Rlmt, 0},
- {OID_SKGE_RLMT_CHANGE_THRES,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtChangeThreshold),
- SK_PNMI_RW, Rlmt, 0},
- {OID_SKGE_RLMT_PORT_INDEX,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_RLMT),
- SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtIndex),
- SK_PNMI_RO, RlmtStat, 0},
- {OID_SKGE_RLMT_STATUS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_RLMT),
- SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtStatus),
- SK_PNMI_RO, RlmtStat, 0},
- {OID_SKGE_RLMT_TX_HELLO_CTS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_RLMT),
- SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtTxHelloCts),
- SK_PNMI_RO, RlmtStat, 0},
- {OID_SKGE_RLMT_RX_HELLO_CTS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_RLMT),
- SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtRxHelloCts),
- SK_PNMI_RO, RlmtStat, 0},
- {OID_SKGE_RLMT_TX_SP_REQ_CTS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_RLMT),
- SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtTxSpHelloReqCts),
- SK_PNMI_RO, RlmtStat, 0},
- {OID_SKGE_RLMT_RX_SP_CTS,
- SK_PNMI_MAC_ENTRIES,
- sizeof(SK_PNMI_RLMT),
- SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtRxSpHelloCts),
- SK_PNMI_RO, RlmtStat, 0},
- {OID_SKGE_RLMT_MONITOR_NUMBER,
- 1,
- 0,
- SK_PNMI_MAI_OFF(RlmtMonitorNumber),
- SK_PNMI_RO, General, 0},
- {OID_SKGE_RLMT_MONITOR_INDEX,
- SK_PNMI_MONITOR_ENTRIES,
- sizeof(SK_PNMI_RLMT_MONITOR),
- SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorIndex),
- SK_PNMI_RO, Monitor, 0},
- {OID_SKGE_RLMT_MONITOR_ADDR,
- SK_PNMI_MONITOR_ENTRIES,
- sizeof(SK_PNMI_RLMT_MONITOR),
- SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorAddr),
- SK_PNMI_RO, Monitor, 0},
- {OID_SKGE_RLMT_MONITOR_ERRS,
- SK_PNMI_MONITOR_ENTRIES,
- sizeof(SK_PNMI_RLMT_MONITOR),
- SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorErrorCts),
- SK_PNMI_RO, Monitor, 0},
- {OID_SKGE_RLMT_MONITOR_TIMESTAMP,
- SK_PNMI_MONITOR_ENTRIES,
- sizeof(SK_PNMI_RLMT_MONITOR),
- SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorTimestamp),
- SK_PNMI_RO, Monitor, 0},
- {OID_SKGE_RLMT_MONITOR_ADMIN,
- SK_PNMI_MONITOR_ENTRIES,
- sizeof(SK_PNMI_RLMT_MONITOR),
- SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorAdmin),
- SK_PNMI_RW, Monitor, 0},
- {OID_SKGE_MTU,
- 1,
- 0,
- SK_PNMI_MAI_OFF(MtuSize),
- SK_PNMI_RW, MacPrivateConf, 0},
- {OID_SKGE_VCT_GET,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Vct, 0},
- {OID_SKGE_VCT_SET,
- 0,
- 0,
- 0,
- SK_PNMI_WO, Vct, 0},
- {OID_SKGE_VCT_STATUS,
- 0,
- 0,
- 0,
- SK_PNMI_RO, Vct, 0},
-};
+/*****************************************************************************
+ *
+ * Name: skgemib.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Private Network Management Interface Management Database
+ *
+ ****************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/*****************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgemib.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.7 2002/12/16 09:04:34 tschilli
+ * Code for VCT handling added.
+ *
+ * Revision 1.6 2002/08/09 15:40:21 rwahl
+ * Editorial change (renamed ConfSpeedCap).
+ *
+ * Revision 1.5 2002/08/09 11:05:34 rwahl
+ * Added oid handling for link speed cap.
+ *
+ * Revision 1.4 2002/08/09 09:40:27 rwahl
+ * Added support for NDIS OID_PNP_xxx.
+ *
+ * Revision 1.3 2002/07/17 19:39:54 rwahl
+ * Added handler for OID_SKGE_SPEED_MODE & OID_SKGE_SPEED_STATUS.
+ *
+ * Revision 1.2 2002/05/22 08:59:00 rwahl
+ * - static functions only for release build.
+ * - Source file must be included.
+ *
+ * Revision 1.1 2002/05/22 08:12:42 rwahl
+ * Initial version.
+ *
+ ****************************************************************************/
+
+#include <config.h>
+
+/*
+ * PRIVATE OID handler function prototypes
+ */
+PNMI_STATIC int Addr(SK_AC *pAC, SK_IOC IoC, int action,
+ SK_U32 Id, char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int CsumStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int General(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int Mac8023Stat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int MacPrivateConf(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int MacPrivateStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int Monitor(SK_AC *pAC, SK_IOC IoC, int action,
+ SK_U32 Id, char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int OidStruct(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int Perform(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int* pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int Rlmt(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int RlmtStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int SensorStat(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int Vpd(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC int Vct(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+
+#ifdef SK_POWER_MGMT
+PNMI_STATIC int PowerManagement(SK_AC *pAC, SK_IOC IoC, int action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance,
+ unsigned int TableIndex, SK_U32 NetIndex);
+#endif
+
+
+/* defines *******************************************************************/
+#define ID_TABLE_SIZE (sizeof(IdTable)/sizeof(IdTable[0]))
+
+
+/* global variables **********************************************************/
+
+/*
+ * Table to correlate OID with handler function and index to
+ * hardware register stored in StatAddress if applicable.
+ */
+PNMI_STATIC const SK_PNMI_TAB_ENTRY IdTable[] = {
+ {OID_GEN_XMIT_OK,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX},
+ {OID_GEN_RCV_OK,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX},
+ {OID_GEN_XMIT_ERROR,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, General, 0},
+ {OID_GEN_RCV_ERROR,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, General, 0},
+ {OID_GEN_RCV_NO_BUFFER,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, General, 0},
+ {OID_GEN_DIRECTED_FRAMES_XMIT,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_UNICAST},
+ {OID_GEN_MULTICAST_FRAMES_XMIT,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_MULTICAST},
+ {OID_GEN_BROADCAST_FRAMES_XMIT,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_BROADCAST},
+ {OID_GEN_DIRECTED_FRAMES_RCV,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_UNICAST},
+ {OID_GEN_MULTICAST_FRAMES_RCV,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_MULTICAST},
+ {OID_GEN_BROADCAST_FRAMES_RCV,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_BROADCAST},
+ {OID_GEN_RCV_CRC_ERROR,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_FCS},
+ {OID_GEN_TRANSMIT_QUEUE_LENGTH,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, General, 0},
+ {OID_802_3_PERMANENT_ADDRESS,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, 0},
+ {OID_802_3_CURRENT_ADDRESS,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, 0},
+ {OID_802_3_RCV_ERROR_ALIGNMENT,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_FRAMING},
+ {OID_802_3_XMIT_ONE_COLLISION,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_SINGLE_COL},
+ {OID_802_3_XMIT_MORE_COLLISIONS,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_MULTI_COL},
+ {OID_802_3_XMIT_DEFERRED,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_DEFFERAL},
+ {OID_802_3_XMIT_MAX_COLLISIONS,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_EXCESS_COL},
+ {OID_802_3_RCV_OVERRUN,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HRX_OVERFLOW},
+ {OID_802_3_XMIT_UNDERRUN,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_UNDERRUN},
+ {OID_802_3_XMIT_TIMES_CRS_LOST,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_CARRIER},
+ {OID_802_3_XMIT_LATE_COLLISIONS,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Mac8023Stat, SK_PNMI_HTX_LATE_COL},
+#ifdef SK_POWER_MGMT
+ {OID_PNP_CAPABILITIES,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, PowerManagement, 0},
+ {OID_PNP_SET_POWER,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_WO, PowerManagement, 0},
+ {OID_PNP_QUERY_POWER,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, PowerManagement, 0},
+ {OID_PNP_ADD_WAKE_UP_PATTERN,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_WO, PowerManagement, 0},
+ {OID_PNP_REMOVE_WAKE_UP_PATTERN,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_WO, PowerManagement, 0},
+ {OID_PNP_ENABLE_WAKE_UP,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RW, PowerManagement, 0},
+#endif /* SK_POWER_MGMT */
+ {OID_SKGE_MDB_VERSION,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(MgmtDBVersion),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_SUPPORTED_LIST,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_ALL_DATA,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RW, OidStruct, 0},
+ {OID_SKGE_VPD_FREE_BYTES,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(VpdFreeBytes),
+ SK_PNMI_RO, Vpd, 0},
+ {OID_SKGE_VPD_ENTRIES_LIST,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(VpdEntriesList),
+ SK_PNMI_RO, Vpd, 0},
+ {OID_SKGE_VPD_ENTRIES_NUMBER,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(VpdEntriesNumber),
+ SK_PNMI_RO, Vpd, 0},
+ {OID_SKGE_VPD_KEY,
+ SK_PNMI_VPD_ENTRIES,
+ sizeof(SK_PNMI_VPD),
+ SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdKey),
+ SK_PNMI_RO, Vpd, 0},
+ {OID_SKGE_VPD_VALUE,
+ SK_PNMI_VPD_ENTRIES,
+ sizeof(SK_PNMI_VPD),
+ SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdValue),
+ SK_PNMI_RO, Vpd, 0},
+ {OID_SKGE_VPD_ACCESS,
+ SK_PNMI_VPD_ENTRIES,
+ sizeof(SK_PNMI_VPD),
+ SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdAccess),
+ SK_PNMI_RO, Vpd, 0},
+ {OID_SKGE_VPD_ACTION,
+ SK_PNMI_VPD_ENTRIES,
+ sizeof(SK_PNMI_VPD),
+ SK_PNMI_OFF(Vpd) + SK_PNMI_VPD_OFF(VpdAction),
+ SK_PNMI_RW, Vpd, 0},
+ {OID_SKGE_PORT_NUMBER,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(PortNumber),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_DEVICE_TYPE,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(DeviceType),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_DRIVER_DESCR,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(DriverDescr),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_DRIVER_VERSION,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(DriverVersion),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_HW_DESCR,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(HwDescr),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_HW_VERSION,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(HwVersion),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_CHIPSET,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(Chipset),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_ACTION,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(Action),
+ SK_PNMI_RW, Perform, 0},
+ {OID_SKGE_RESULT,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TestResult),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_BUS_TYPE,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(BusType),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_BUS_SPEED,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(BusSpeed),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_BUS_WIDTH,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(BusWidth),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TX_SW_QUEUE_LEN,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TxSwQueueLen),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TX_SW_QUEUE_MAX,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TxSwQueueMax),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TX_RETRY,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TxRetryCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_RX_INTR_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RxIntrCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TX_INTR_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TxIntrCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_RX_NO_BUF_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RxNoBufCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TX_NO_BUF_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TxNoBufCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TX_USED_DESCR_NO,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TxUsedDescrNo),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_RX_DELIVERED_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RxDeliveredCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_RX_OCTETS_DELIV_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RxOctetsDeliveredCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_RX_HW_ERROR_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RxHwErrorsCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TX_HW_ERROR_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TxHwErrorsCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_IN_ERRORS_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(InErrorsCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_OUT_ERROR_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(OutErrorsCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_ERR_RECOVERY_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(ErrRecoveryCts),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_SYSUPTIME,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(SysUpTime),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_SENSOR_NUMBER,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(SensorNumber),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_SENSOR_INDEX,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorIndex),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_DESCR,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorDescr),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_TYPE,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorType),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_VALUE,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorValue),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_WAR_THRES_LOW,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningThresholdLow),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_WAR_THRES_UPP,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningThresholdHigh),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_ERR_THRES_LOW,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorThresholdLow),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_ERR_THRES_UPP,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorThresholdHigh),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_STATUS,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorStatus),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_WAR_CTS,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningCts),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_ERR_CTS,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorCts),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_WAR_TIME,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorWarningTimestamp),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_SENSOR_ERR_TIME,
+ SK_PNMI_SENSOR_ENTRIES,
+ sizeof(SK_PNMI_SENSOR),
+ SK_PNMI_OFF(Sensor) + SK_PNMI_SEN_OFF(SensorErrorTimestamp),
+ SK_PNMI_RO, SensorStat, 0},
+ {OID_SKGE_CHKSM_NUMBER,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(ChecksumNumber),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_CHKSM_RX_OK_CTS,
+ SKCS_NUM_PROTOCOLS,
+ sizeof(SK_PNMI_CHECKSUM),
+ SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumRxOkCts),
+ SK_PNMI_RO, CsumStat, 0},
+ {OID_SKGE_CHKSM_RX_UNABLE_CTS,
+ SKCS_NUM_PROTOCOLS,
+ sizeof(SK_PNMI_CHECKSUM),
+ SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumRxUnableCts),
+ SK_PNMI_RO, CsumStat, 0},
+ {OID_SKGE_CHKSM_RX_ERR_CTS,
+ SKCS_NUM_PROTOCOLS,
+ sizeof(SK_PNMI_CHECKSUM),
+ SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumRxErrCts),
+ SK_PNMI_RO, CsumStat, 0},
+ {OID_SKGE_CHKSM_TX_OK_CTS,
+ SKCS_NUM_PROTOCOLS,
+ sizeof(SK_PNMI_CHECKSUM),
+ SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumTxOkCts),
+ SK_PNMI_RO, CsumStat, 0},
+ {OID_SKGE_CHKSM_TX_UNABLE_CTS,
+ SKCS_NUM_PROTOCOLS,
+ sizeof(SK_PNMI_CHECKSUM),
+ SK_PNMI_OFF(Checksum) + SK_PNMI_CHK_OFF(ChecksumTxUnableCts),
+ SK_PNMI_RO, CsumStat, 0},
+ {OID_SKGE_STAT_TX,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX},
+ {OID_SKGE_STAT_TX_OCTETS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxOctetsOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_OCTET},
+ {OID_SKGE_STAT_TX_BROADCAST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxBroadcastOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_BROADCAST},
+ {OID_SKGE_STAT_TX_MULTICAST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMulticastOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MULTICAST},
+ {OID_SKGE_STAT_TX_UNICAST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxUnicastOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_UNICAST},
+ {OID_SKGE_STAT_TX_LONGFRAMES,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxLongFramesCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_LONGFRAMES},
+ {OID_SKGE_STAT_TX_BURST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxBurstCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_BURST},
+ {OID_SKGE_STAT_TX_PFLOWC,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxPauseMacCtrlCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_PMACC},
+ {OID_SKGE_STAT_TX_FLOWC,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMacCtrlCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MACC},
+ {OID_SKGE_STAT_TX_SINGLE_COL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxSingleCollisionCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_SINGLE_COL},
+ {OID_SKGE_STAT_TX_MULTI_COL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMultipleCollisionCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MULTI_COL},
+ {OID_SKGE_STAT_TX_EXCESS_COL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxExcessiveCollisionCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_EXCESS_COL},
+ {OID_SKGE_STAT_TX_LATE_COL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxLateCollisionCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_LATE_COL},
+ {OID_SKGE_STAT_TX_DEFFERAL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxDeferralCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_DEFFERAL},
+ {OID_SKGE_STAT_TX_EXCESS_DEF,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxExcessiveDeferralCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_EXCESS_DEF},
+ {OID_SKGE_STAT_TX_UNDERRUN,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxFifoUnderrunCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_UNDERRUN},
+ {OID_SKGE_STAT_TX_CARRIER,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxCarrierCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_CARRIER},
+/* {OID_SKGE_STAT_TX_UTIL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxUtilization),
+ SK_PNMI_RO, MacPrivateStat, (SK_U16)(-1)}, */
+ {OID_SKGE_STAT_TX_64,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx64Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_64},
+ {OID_SKGE_STAT_TX_127,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx127Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_127},
+ {OID_SKGE_STAT_TX_255,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx255Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_255},
+ {OID_SKGE_STAT_TX_511,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx511Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_511},
+ {OID_SKGE_STAT_TX_1023,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTx1023Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_1023},
+ {OID_SKGE_STAT_TX_MAX,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxMaxCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_MAX},
+ {OID_SKGE_STAT_TX_SYNC,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxSyncCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_SYNC},
+ {OID_SKGE_STAT_TX_SYNC_OCTETS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatTxSyncOctetsCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HTX_SYNC_OCTET},
+ {OID_SKGE_STAT_RX,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX},
+ {OID_SKGE_STAT_RX_OCTETS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxOctetsOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_OCTET},
+ {OID_SKGE_STAT_RX_BROADCAST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxBroadcastOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_BROADCAST},
+ {OID_SKGE_STAT_RX_MULTICAST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMulticastOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MULTICAST},
+ {OID_SKGE_STAT_RX_UNICAST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxUnicastOkCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_UNICAST},
+ {OID_SKGE_STAT_RX_LONGFRAMES,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxLongFramesCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_LONGFRAMES},
+ {OID_SKGE_STAT_RX_PFLOWC,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxPauseMacCtrlCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_PMACC},
+ {OID_SKGE_STAT_RX_FLOWC,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMacCtrlCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MACC},
+ {OID_SKGE_STAT_RX_PFLOWC_ERR,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxPauseMacCtrlErrorCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_PMACC_ERR},
+ {OID_SKGE_STAT_RX_FLOWC_UNKWN,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMacCtrlUnknownCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MACC_UNKWN},
+ {OID_SKGE_STAT_RX_BURST,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxBurstCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_BURST},
+ {OID_SKGE_STAT_RX_MISSED,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMissedCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MISSED},
+ {OID_SKGE_STAT_RX_FRAMING,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxFramingCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_FRAMING},
+ {OID_SKGE_STAT_RX_OVERFLOW,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxFifoOverflowCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_OVERFLOW},
+ {OID_SKGE_STAT_RX_JABBER,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxJabberCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_JABBER},
+ {OID_SKGE_STAT_RX_CARRIER,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxCarrierCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_CARRIER},
+ {OID_SKGE_STAT_RX_IR_LENGTH,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxIRLengthCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_IRLENGTH},
+ {OID_SKGE_STAT_RX_SYMBOL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxSymbolCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_SYMBOL},
+ {OID_SKGE_STAT_RX_SHORTS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxShortsCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_SHORTS},
+ {OID_SKGE_STAT_RX_RUNT,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxRuntCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_RUNT},
+ {OID_SKGE_STAT_RX_CEXT,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxCextCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_CEXT},
+ {OID_SKGE_STAT_RX_TOO_LONG,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxTooLongCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_TOO_LONG},
+ {OID_SKGE_STAT_RX_FCS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxFcsCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_FCS},
+/* {OID_SKGE_STAT_RX_UTIL,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxUtilization),
+ SK_PNMI_RO, MacPrivateStat, (SK_U16)(-1)}, */
+ {OID_SKGE_STAT_RX_64,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx64Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_64},
+ {OID_SKGE_STAT_RX_127,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx127Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_127},
+ {OID_SKGE_STAT_RX_255,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx255Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_255},
+ {OID_SKGE_STAT_RX_511,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx511Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_511},
+ {OID_SKGE_STAT_RX_1023,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRx1023Cts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_1023},
+ {OID_SKGE_STAT_RX_MAX,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_STAT),
+ SK_PNMI_OFF(Stat) + SK_PNMI_STA_OFF(StatRxMaxCts),
+ SK_PNMI_RO, MacPrivateStat, SK_PNMI_HRX_MAX},
+ {OID_SKGE_PHYS_CUR_ADDR,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfMacCurrentAddr),
+ SK_PNMI_RW, Addr, 0},
+ {OID_SKGE_PHYS_FAC_ADDR,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfMacFactoryAddr),
+ SK_PNMI_RO, Addr, 0},
+ {OID_SKGE_PMD,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPMD),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_CONNECTOR,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfConnector),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_LINK_CAP,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkCapability),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_LINK_MODE,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkMode),
+ SK_PNMI_RW, MacPrivateConf, 0},
+ {OID_SKGE_LINK_MODE_STATUS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkModeStatus),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_LINK_STATUS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfLinkStatus),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_FLOWCTRL_CAP,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlCapability),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_FLOWCTRL_MODE,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlMode),
+ SK_PNMI_RW, MacPrivateConf, 0},
+ {OID_SKGE_FLOWCTRL_STATUS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlStatus),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_PHY_OPERATION_CAP,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationCapability),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_PHY_OPERATION_MODE,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationMode),
+ SK_PNMI_RW, MacPrivateConf, 0},
+ {OID_SKGE_PHY_OPERATION_STATUS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationStatus),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_SPEED_CAP,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfSpeedCapability),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_SPEED_MODE,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfSpeedMode),
+ SK_PNMI_RW, MacPrivateConf, 0},
+ {OID_SKGE_SPEED_STATUS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_CONF),
+ SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfSpeedStatus),
+ SK_PNMI_RO, MacPrivateConf, 0},
+ {OID_SKGE_TRAP,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(Trap),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_TRAP_NUMBER,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(TrapNumber),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_RLMT_MODE,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtMode),
+ SK_PNMI_RW, Rlmt, 0},
+ {OID_SKGE_RLMT_PORT_NUMBER,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtPortNumber),
+ SK_PNMI_RO, Rlmt, 0},
+ {OID_SKGE_RLMT_PORT_ACTIVE,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtPortActive),
+ SK_PNMI_RO, Rlmt, 0},
+ {OID_SKGE_RLMT_PORT_PREFERRED,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtPortPreferred),
+ SK_PNMI_RW, Rlmt, 0},
+ {OID_SKGE_RLMT_CHANGE_CTS,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtChangeCts),
+ SK_PNMI_RO, Rlmt, 0},
+ {OID_SKGE_RLMT_CHANGE_TIME,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtChangeTime),
+ SK_PNMI_RO, Rlmt, 0},
+ {OID_SKGE_RLMT_CHANGE_ESTIM,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtChangeEstimate),
+ SK_PNMI_RO, Rlmt, 0},
+ {OID_SKGE_RLMT_CHANGE_THRES,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtChangeThreshold),
+ SK_PNMI_RW, Rlmt, 0},
+ {OID_SKGE_RLMT_PORT_INDEX,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_RLMT),
+ SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtIndex),
+ SK_PNMI_RO, RlmtStat, 0},
+ {OID_SKGE_RLMT_STATUS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_RLMT),
+ SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtStatus),
+ SK_PNMI_RO, RlmtStat, 0},
+ {OID_SKGE_RLMT_TX_HELLO_CTS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_RLMT),
+ SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtTxHelloCts),
+ SK_PNMI_RO, RlmtStat, 0},
+ {OID_SKGE_RLMT_RX_HELLO_CTS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_RLMT),
+ SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtRxHelloCts),
+ SK_PNMI_RO, RlmtStat, 0},
+ {OID_SKGE_RLMT_TX_SP_REQ_CTS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_RLMT),
+ SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtTxSpHelloReqCts),
+ SK_PNMI_RO, RlmtStat, 0},
+ {OID_SKGE_RLMT_RX_SP_CTS,
+ SK_PNMI_MAC_ENTRIES,
+ sizeof(SK_PNMI_RLMT),
+ SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtRxSpHelloCts),
+ SK_PNMI_RO, RlmtStat, 0},
+ {OID_SKGE_RLMT_MONITOR_NUMBER,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(RlmtMonitorNumber),
+ SK_PNMI_RO, General, 0},
+ {OID_SKGE_RLMT_MONITOR_INDEX,
+ SK_PNMI_MONITOR_ENTRIES,
+ sizeof(SK_PNMI_RLMT_MONITOR),
+ SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorIndex),
+ SK_PNMI_RO, Monitor, 0},
+ {OID_SKGE_RLMT_MONITOR_ADDR,
+ SK_PNMI_MONITOR_ENTRIES,
+ sizeof(SK_PNMI_RLMT_MONITOR),
+ SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorAddr),
+ SK_PNMI_RO, Monitor, 0},
+ {OID_SKGE_RLMT_MONITOR_ERRS,
+ SK_PNMI_MONITOR_ENTRIES,
+ sizeof(SK_PNMI_RLMT_MONITOR),
+ SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorErrorCts),
+ SK_PNMI_RO, Monitor, 0},
+ {OID_SKGE_RLMT_MONITOR_TIMESTAMP,
+ SK_PNMI_MONITOR_ENTRIES,
+ sizeof(SK_PNMI_RLMT_MONITOR),
+ SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorTimestamp),
+ SK_PNMI_RO, Monitor, 0},
+ {OID_SKGE_RLMT_MONITOR_ADMIN,
+ SK_PNMI_MONITOR_ENTRIES,
+ sizeof(SK_PNMI_RLMT_MONITOR),
+ SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorAdmin),
+ SK_PNMI_RW, Monitor, 0},
+ {OID_SKGE_MTU,
+ 1,
+ 0,
+ SK_PNMI_MAI_OFF(MtuSize),
+ SK_PNMI_RW, MacPrivateConf, 0},
+ {OID_SKGE_VCT_GET,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Vct, 0},
+ {OID_SKGE_VCT_SET,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_WO, Vct, 0},
+ {OID_SKGE_VCT_STATUS,
+ 0,
+ 0,
+ 0,
+ SK_PNMI_RO, Vct, 0},
+};
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skgepnmi.c u-boot-2009.03/drivers/net/sk98lin/skgepnmi.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skgepnmi.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skgepnmi.c 2009-03-31 14:54:29.534379200 -0700
@@ -1,8306 +1,8309 @@
-/*****************************************************************************
- *
- * Name: skgepnmi.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.102 $
- * Date: $Date: 2002/12/16 14:03:24 $
- * Purpose: Private Network Management Interface
- *
- ****************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/*****************************************************************************
- *
- * History:
- *
- * $Log: skgepnmi.c,v $
- * Revision 1.102 2002/12/16 14:03:24 tschilli
- * VCT code in Vct() changed.
- *
- * Revision 1.101 2002/12/16 09:04:10 tschilli
- * Code for VCT handling added.
- *
- * Revision 1.100 2002/09/26 14:28:13 tschilli
- * For XMAC the values in the SK_PNMI_PORT Port struct are copied to
- * the new SK_PNMI_PORT BufPort struct during a MacUpdate() call.
- * These values are used when GetPhysStatVal() is called. With this
- * mechanism you get the best results when software corrections for
- * counters are needed. Example: RX_LONGFRAMES.
- *
- * Revision 1.99 2002/09/17 12:31:19 tschilli
- * OID_SKGE_TX_HW_ERROR_CTS, OID_SKGE_OUT_ERROR_CTS, OID_GEN_XMIT_ERROR:
- * Double count of SK_PNMI_HTX_EXCESS_COL in function General() removed.
- * OID_PNP_CAPABILITIES: sizeof(SK_PM_WAKE_UP_CAPABILITIES) changed to
- * sizeof(SK_PNP_CAPABILITIES) in function PowerManagement().
- *
- * Revision 1.98 2002/09/10 09:00:03 rwahl
- * Adapted boolean definitions according sktypes.
- *
- * Revision 1.97 2002/09/05 15:07:03 rwahl
- * Editorial changes.
- *
- * Revision 1.96 2002/09/05 11:04:14 rwahl
- * - Rx/Tx packets statistics of virtual port were zero on link down (#10750)
- * - For GMAC the overflow IRQ for Rx longframe counter was not counted.
- * - Incorrect calculation for oids OID_SKGE_RX_HW_ERROR_CTS,
- * OID_SKGE_IN_ERRORS_CTS, OID_GEN_RCV_ERROR.
- * - Moved correction for OID_SKGE_STAT_RX_TOO_LONG to GetPhysStatVal().
- * - Editorial changes.
- *
- * Revision 1.95 2002/09/04 08:53:37 rwahl
- * - Incorrect statistics for Rx_too_long counter with jumbo frame (#10751)
- * - StatRxFrameTooLong & StatRxPMaccErr counters were not reset.
- * - Fixed compiler warning for debug msg arg types.
- *
- * Revision 1.94 2002/08/09 15:42:14 rwahl
- * - Fixed StatAddr table for GMAC.
- * - VirtualConf(): returned indeterminated status for speed oids if no
- * active port.
- *
- * Revision 1.93 2002/08/09 11:04:59 rwahl
- * Added handler for link speed caps.
- *
- * Revision 1.92 2002/08/09 09:43:03 rwahl
- * - Added handler for NDIS OID_PNP_xxx ids.
- *
- * Revision 1.91 2002/07/17 19:53:03 rwahl
- * - Added StatOvrflwBit table for XMAC & GMAC.
- * - Extended StatAddr table for GMAC. Added check of number of counters
- * in enumeration and size of StatAddr table on init level.
- * - Added use of GIFunc table.
- * - ChipSet is not static anymore,
- * - Extended SIRQ event handler for both mac types.
- * - Fixed rx short counter bug (#10620)
- * - Added handler for oids SKGE_SPEED_MODE & SKGE_SPEED_STATUS.
- * - Extendet GetPhysStatVal() for GMAC.
- * - Editorial changes.
- *
- * Revision 1.90 2002/05/22 08:56:25 rwahl
- * - Moved OID table to separate source file.
- * - Fix: TX_DEFFERAL counter incremented in full-duplex mode.
- * - Use string definitions for error msgs.
- *
- * Revision 1.89 2001/09/18 10:01:30 mkunz
- * some OID's fixed for dualnetmode
- *
- * Revision 1.88 2001/08/02 07:58:08 rwahl
- * - Fixed NetIndex to csum module at ResetCounter().
- *
- * Revision 1.87 2001/04/06 13:35:09 mkunz
- * -Bugs fixed in handling of OID_SKGE_MTU and the VPD OID's
- *
- * Revision 1.86 2001/03/09 09:18:03 mkunz
- * Changes in SK_DBG_MSG
- *
- * Revision 1.85 2001/03/08 09:37:31 mkunz
- * Bugfix in ResetCounter for Pnmi.Port structure
- *
- * Revision 1.84 2001/03/06 09:04:55 mkunz
- * Made some changes in instance calculation
- *
- * Revision 1.83 2001/02/15 09:15:32 mkunz
- * Necessary changes for dual net mode added
- *
- * Revision 1.82 2001/02/07 08:24:19 mkunz
- * -Made changes in handling of OID_SKGE_MTU
- *
- * Revision 1.81 2001/02/06 09:58:00 mkunz
- * -Vpd bug fixed
- * -OID_SKGE_MTU added
- * -pnmi support for dual net mode. Interface function and macros extended
- *
- * Revision 1.80 2001/01/22 13:41:35 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.79 2000/12/05 14:57:40 cgoos
- * SetStruct failed before first Link Up (link mode of virtual
- * port "INDETERMINATED").
- *
- * Revision 1.78 2000/09/12 10:44:58 cgoos
- * Fixed SK_PNMI_STORE_U32 calls with typecasted argument.
- *
- * Revision 1.77 2000/09/07 08:10:19 rwahl
- * - Modified algorithm for 64bit NDIS statistic counters;
- * returns 64bit or 32bit value depending on passed buffer
- * size. Indicate capability for 64bit NDIS counter, if passed
- * buffer size is zero. OID_GEN_XMIT_ERROR, OID_GEN_RCV_ERROR,
- * and OID_GEN_RCV_NO_BUFFER handled as 64bit counter, too.
- * - corrected OID_SKGE_RLMT_PORT_PREFERRED.
- *
- * Revision 1.76 2000/08/03 15:23:39 rwahl
- * - Correction for FrameTooLong counter has to be moved to OID handling
- * routines (instead of statistic counter routine).
- * - Fix in XMAC Reset Event handling: Only offset counter for hardware
- * statistic registers are updated.
- *
- * Revision 1.75 2000/08/01 16:46:05 rwahl
- * - Added StatRxLongFrames counter and correction of FrameTooLong counter.
- * - Added directive to control width (default = 32bit) of NDIS statistic
- * counters (SK_NDIS_64BIT_CTR).
- *
- * Revision 1.74 2000/07/04 11:41:53 rwahl
- * - Added volition connector type.
- *
- * Revision 1.73 2000/03/15 16:33:10 rwahl
- * Fixed bug 10510; wrong reset of virtual port statistic counters.
- *
- * Revision 1.72 1999/12/06 16:15:53 rwahl
- * Fixed problem of instance range for current and factory MAC address.
- *
- * Revision 1.71 1999/12/06 10:14:20 rwahl
- * Fixed bug 10476; set operation for PHY_OPERATION_MODE.
- *
- * Revision 1.70 1999/11/22 13:33:34 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.69 1999/10/18 11:42:15 rwahl
- * Added typecasts for checking event dependent param (debug only).
- *
- * Revision 1.68 1999/10/06 09:35:59 cgoos
- * Added state check to PHY_READ call (hanged if called during startup).
- *
- * Revision 1.67 1999/09/22 09:53:20 rwahl
- * - Read Broadcom register for updating fcs error counter (1000Base-T).
- *
- * Revision 1.66 1999/08/26 13:47:56 rwahl
- * Added SK_DRIVER_SENDEVENT when queueing RLMT_CHANGE_THRES trap.
- *
- * Revision 1.65 1999/07/26 07:49:35 cgoos
- * Added two typecasts to avoid compiler warnings.
- *
- * Revision 1.64 1999/05/20 09:24:12 cgoos
- * Changes for 1000Base-T (sensors, Master/Slave).
- *
- * Revision 1.63 1999/04/13 15:11:58 mhaveman
- * Moved include of rlmt.h to header skgepnmi.h because some macros
- * are needed there.
- *
- * Revision 1.62 1999/04/13 15:08:07 mhaveman
- * Replaced again SK_RLMT_CHECK_LINK with SK_PNMI_RLMT_MODE_CHK_LINK
- * to grant unified interface by only using the PNMI header file.
- * SK_PNMI_RLMT_MODE_CHK_LINK is defined the same as SK_RLMT_CHECK_LINK.
- *
- * Revision 1.61 1999/04/13 15:02:48 mhaveman
- * Changes caused by review:
- * -Changed some comments
- * -Removed redundant check for OID_SKGE_PHYS_FAC_ADDR
- * -Optimized PRESET check.
- * -Meaning of error SK_ADDR_DUPLICATE_ADDRESS changed. Set of same
- * address will now not cause this error. Removed corresponding check.
- *
- * Revision 1.60 1999/03/23 10:41:23 mhaveman
- * Added comments.
- *
- * Revision 1.59 1999/02/19 08:01:28 mhaveman
- * Fixed bug 10372 that after counter reset all ports were displayed
- * as inactive.
- *
- * Revision 1.58 1999/02/16 18:04:47 mhaveman
- * Fixed problem of twisted OIDs SENSOR_WAR_TIME and SENSOR_ERR_TIME.
- *
- * Revision 1.56 1999/01/27 12:29:11 mhaveman
- * SkTimerStart was called with time value in milli seconds but needs
- * micro seconds.
- *
- * Revision 1.55 1999/01/25 15:00:38 mhaveman
- * Added support to allow multiple ports to be active. If this feature in
- * future will be used, the Management Data Base variables PORT_ACTIVE
- * and PORT_PREFERED should be moved to the port specific part of RLMT.
- * Currently they return the values of the first active physical port
- * found. A set to the virtual port will actually change all active
- * physical ports. A get returns the melted values of all active physical
- * ports. If the port values differ a return value INDETERMINATED will
- * be returned. This effects especially the CONF group.
- *
- * Revision 1.54 1999/01/19 10:10:22 mhaveman
- * -Fixed bug 10354: Counter values of virtual port were wrong after port
- * switches
- * -Added check if a switch to the same port is notified.
- *
- * Revision 1.53 1999/01/07 09:25:21 mhaveman
- * Forgot to initialize a variable.
- *
- * Revision 1.52 1999/01/05 10:34:33 mhaveman
- * Fixed little error in RlmtChangeEstimate calculation.
- *
- * Revision 1.51 1999/01/05 09:59:07 mhaveman
- * -Moved timer start to init level 2
- * -Redesigned port switch average calculation to avoid 64bit
- * arithmetic.
- *
- * Revision 1.50 1998/12/10 15:13:59 mhaveman
- * -Fixed: PHYS_CUR_ADDR returned wrong addresses
- * -Fixed: RLMT_PORT_PREFERED and RLMT_CHANGE_THRES preset returned
- * always BAD_VALUE.
- * -Fixed: TRAP buffer seemed to sometimes suddenly empty
- *
- * Revision 1.49 1998/12/09 16:17:07 mhaveman
- * Fixed: Couldnot delete VPD keys on UNIX.
- *
- * Revision 1.48 1998/12/09 14:11:10 mhaveman
- * -Add: Debugmessage for XMAC_RESET supressed to minimize output.
- * -Fixed: RlmtChangeThreshold will now be initialized.
- * -Fixed: VPD_ENTRIES_LIST extended value with unnecessary space char.
- * -Fixed: On VPD key creation an invalid key name could be created
- * (e.g. A5)
- * -Some minor changes in comments and code.
- *
- * Revision 1.47 1998/12/08 16:00:31 mhaveman
- * -Fixed: For RLMT_PORT_ACTIVE will now be returned a 0 if no port
- * is active.
- * -Fixed: For the RLMT statistics group only the last value was
- * returned and the rest of the buffer was filled with 0xff
- * -Fixed: Mysteriously the preset on RLMT_MODE still returned
- * BAD_VALUE.
- * Revision 1.46 1998/12/08 10:04:56 mhaveman
- * -Fixed: Preset on RLMT_MODE returned always BAD_VALUE error.
- * -Fixed: Alignment error in GetStruct
- * -Fixed: If for Get/Preset/SetStruct the buffer size is equal or
- * larger than SK_PNMI_MIN_STRUCT_SIZE the return value is stored
- * to the buffer. In this case the caller should always return
- * ok to its upper routines. Only if the buffer size is less
- * than SK_PNMI_MIN_STRUCT_SIZE and the return value is unequal
- * to 0, an error should be returned by the caller.
- * -Fixed: Wrong number of instances with RLMT statistic.
- * -Fixed: Return now SK_LMODE_STAT_UNKNOWN if the LinkModeStatus is 0.
- *
- * Revision 1.45 1998/12/03 17:17:24 mhaveman
- * -Removed for VPD create action the buffer size limitation to 4 bytes.
- * -Pass now physical/active physical port to ADDR for CUR_ADDR set
- *
- * Revision 1.44 1998/12/03 15:14:35 mhaveman
- * Another change to Vpd instance evaluation.
- *
- * Revision 1.43 1998/12/03 14:18:10 mhaveman
- * -Fixed problem in PnmiSetStruct. It was impossible to set any value.
- * -Removed VPD key evaluation for VPD_FREE_BYTES and VPD_ACTION.
- *
- * Revision 1.42 1998/12/03 11:31:47 mhaveman
- * Inserted cast to satisfy lint.
- *
- * Revision 1.41 1998/12/03 11:28:16 mhaveman
- * Removed SK_PNMI_CHECKPTR
- *
- * Revision 1.40 1998/12/03 11:19:07 mhaveman
- * Fixed problems
- * -A set to virtual port will now be ignored. A set with broadcast
- * address to any port will be ignored.
- * -GetStruct function made VPD instance calculation wrong.
- * -Prefered port returned -1 instead of 0.
- *
- * Revision 1.39 1998/11/26 15:30:29 mhaveman
- * Added sense mode to link mode.
- *
- * Revision 1.38 1998/11/23 15:34:00 mhaveman
- * -Fixed bug for RX counters. On an RX overflow interrupt the high
- * words of all RX counters were incremented.
- * -SET operations on FLOWCTRL_MODE and LINK_MODE accept now the
- * value 0, which has no effect. It is usefull for multiple instance
- * SETs.
- *
- * Revision 1.37 1998/11/20 08:02:04 mhaveman
- * -Fixed: Ports were compared with MAX_SENSORS
- * -Fixed: Crash in GetTrapEntry with MEMSET macro
- * -Fixed: Conversions between physical, logical port index and instance
- *
- * Revision 1.36 1998/11/16 07:48:53 mhaveman
- * Casted SK_DRIVER_SENDEVENT with (void) to eleminate compiler warnings
- * on Solaris.
- *
- * Revision 1.35 1998/11/16 07:45:34 mhaveman
- * SkAddrOverride now returns value and will be checked.
- *
- * Revision 1.34 1998/11/10 13:40:37 mhaveman
- * Needed to change interface, because NT driver needs a return value
- * of needed buffer space on TOO_SHORT errors. Therefore all
- * SkPnmiGet/Preset/Set functions now have a pointer to the length
- * parameter, where the needed space on error is returned.
- *
- * Revision 1.33 1998/11/03 13:52:46 mhaveman
- * Made file lint conform.
- *
- * Revision 1.32 1998/11/03 13:19:07 mhaveman
- * The events SK_HWEV_SET_LMODE and SK_HWEV_SET_FLOWMODE pass now in
- * Para32[0] the physical MAC index and in Para32[1] the new mode.
- *
- * Revision 1.31 1998/11/03 12:30:40 gklug
- * fix: compiler warning memset
- *
- * Revision 1.30 1998/11/03 12:04:46 mhaveman
- * Fixed problem in SENSOR_VALUE, which wrote beyond the buffer end
- * Fixed alignment problem with CHIPSET.
- *
- * Revision 1.29 1998/11/02 11:23:54 mhaveman
- * Corrected SK_ERROR_LOG to SK_ERR_LOG. Sorry.
- *
- * Revision 1.28 1998/11/02 10:47:16 mhaveman
- * Added syslog messages for internal errors.
- *
- * Revision 1.27 1998/10/30 15:48:06 mhaveman
- * Fixed problems after simulation of SK_PNMI_EVT_CHG_EST_TIMER and
- * RlmtChangeThreshold calculation.
- *
- * Revision 1.26 1998/10/29 15:36:55 mhaveman
- * -Fixed bug in trap buffer handling.
- * -OID_SKGE_DRIVER_DESCR, OID_SKGE_DRIVER_VERSION, OID_SKGE_HW_DESCR,
- * OID_SKGE_HW_VERSION, OID_SKGE_VPD_ENTRIES_LIST, OID_SKGE_VPD_KEY,
- * OID_SKGE_VPD_VALUE, and OID_SKGE_SENSOR_DESCR return values with
- * a leading octet before each string storing the string length.
- * -Perform a RlmtUpdate during SK_PNMI_EVT_XMAC_RESET to minimize
- * RlmtUpdate calls in GetStatVal.
- * -Inserted SK_PNMI_CHECKFLAGS macro increase readability.
- *
- * Revision 1.25 1998/10/29 08:50:36 mhaveman
- * Fixed problems after second event simulation.
- *
- * Revision 1.24 1998/10/28 08:44:37 mhaveman
- * -Fixed alignment problem
- * -Fixed problems during event simulation
- * -Fixed sequence of error return code (INSTANCE -> ACCESS -> SHORT)
- * -Changed type of parameter Instance back to SK_U32 because of VPD
- * -Updated new VPD function calls
- *
- * Revision 1.23 1998/10/23 10:16:37 mhaveman
- * Fixed bugs after buffer test simulation.
- *
- * Revision 1.22 1998/10/21 13:23:52 mhaveman
- * -Call syntax of SkOsGetTime() changed to SkOsGetTime(pAc).
- * -Changed calculation of hundrets of seconds.
- *
- * Revision 1.20 1998/10/20 07:30:45 mhaveman
- * Made type changes to unsigned integer where possible.
- *
- * Revision 1.19 1998/10/19 10:51:30 mhaveman
- * -Made Bug fixes after simulation run
- * -Renamed RlmtMAC... to RlmtPort...
- * -Marked workarounds with Errata comments
- *
- * Revision 1.18 1998/10/14 07:50:08 mhaveman
- * -For OID_SKGE_LINK_STATUS the link down detection has moved from RLMT
- * to HWACCESS.
- * -Provided all MEMCPY/MEMSET macros with (char *) pointers, because
- * Solaris throwed warnings when mapping to bcopy/bset.
- *
- * Revision 1.17 1998/10/13 07:42:01 mhaveman
- * -Added OIDs OID_SKGE_TRAP_NUMBER and OID_SKGE_ALL_DATA
- * -Removed old cvs history entries
- * -Renamed MacNumber to PortNumber
- *
- * Revision 1.16 1998/10/07 10:52:49 mhaveman
- * -Inserted handling of some OID_GEN_ Ids for windows
- * -Fixed problem with 803.2 statistic.
- *
- * Revision 1.15 1998/10/01 09:16:29 mhaveman
- * Added Debug messages for function call and UpdateFlag tracing.
- *
- * Revision 1.14 1998/09/30 13:39:09 mhaveman
- * -Reduced namings of 'MAC' by replacing them with 'PORT'.
- * -Completed counting of OID_SKGE_RX_HW_ERROR_CTS,
- * OID_SKGE_TX_HW_ERROR_CTS,
- * OID_SKGE_IN_ERRORS_CTS, and OID_SKGE_OUT_ERROR_CTS.
- * -SET check for RlmtMode
- *
- * Revision 1.13 1998/09/28 13:13:08 mhaveman
- * Hide strcmp, strlen, and strncpy behind macros SK_STRCMP, SK_STRLEN,
- * and SK_STRNCPY. (Same reasons as for mem.. and MEM..)
- *
- * Revision 1.12 1998/09/16 08:18:36 cgoos
- * Fix: XM_INxx and XM_OUTxx called with different parameter order:
- * sometimes IoC,Mac,... sometimes Mac,IoC,... Now always first variant.
- * Fix: inserted "Pnmi." into some pAC->pDriverDescription / Version.
- * Change: memset, memcpy to makros SK_MEMSET, SK_MEMCPY
- *
- * Revision 1.11 1998/09/04 17:01:45 mhaveman
- * Added SyncCounter as macro and OID_SKGE_.._NO_DESCR_CTS to
- * OID_SKGE_RX_NO_BUF_CTS.
- *
- * Revision 1.10 1998/09/04 14:35:35 mhaveman
- * Added macro counters, that are counted by driver.
- *
- ****************************************************************************/
-
-
-#include <config.h>
-
-static const char SysKonnectFileId[] =
- "@(#) $Id: skgepnmi.c,v 1.102 2002/12/16 14:03:24 tschilli Exp $"
- " (C) SysKonnect.";
-
-#include "h/skdrv1st.h"
-#include "h/sktypes.h"
-#include "h/xmac_ii.h"
-#include "h/skdebug.h"
-#include "h/skqueue.h"
-#include "h/skgepnmi.h"
-#include "h/skgesirq.h"
-#include "h/skcsum.h"
-#include "h/skvpd.h"
-#include "h/skgehw.h"
-#include "h/skgeinit.h"
-#include "h/skdrv2nd.h"
-#include "h/skgepnm2.h"
-#ifdef SK_POWER_MGMT
-#include "h/skgepmgt.h"
-#endif
-/* defines *******************************************************************/
-
-#ifndef DEBUG
-#define PNMI_STATIC static
-#else /* DEBUG */
-#define PNMI_STATIC
-#endif /* DEBUG */
-
-/*
- * Public Function prototypes
- */
-int SkPnmiInit(SK_AC *pAC, SK_IOC IoC, int level);
-int SkPnmiGetVar(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, void *pBuf,
- unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
-int SkPnmiPreSetVar(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, void *pBuf,
- unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
-int SkPnmiSetVar(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, void *pBuf,
- unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
-int SkPnmiGetStruct(SK_AC *pAC, SK_IOC IoC, void *pBuf,
- unsigned int *pLen, SK_U32 NetIndex);
-int SkPnmiPreSetStruct(SK_AC *pAC, SK_IOC IoC, void *pBuf,
- unsigned int *pLen, SK_U32 NetIndex);
-int SkPnmiSetStruct(SK_AC *pAC, SK_IOC IoC, void *pBuf,
- unsigned int *pLen, SK_U32 NetIndex);
-int SkPnmiEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Param);
-
-
-/*
- * Private Function prototypes
- */
-
-PNMI_STATIC SK_U8 CalculateLinkModeStatus(SK_AC *pAC, SK_IOC IoC, unsigned int
- PhysPortIndex);
-PNMI_STATIC SK_U8 CalculateLinkStatus(SK_AC *pAC, SK_IOC IoC, unsigned int
- PhysPortIndex);
-PNMI_STATIC void CopyMac(char *pDst, SK_MAC_ADDR *pMac);
-PNMI_STATIC void CopyTrapQueue(SK_AC *pAC, char *pDstBuf);
-PNMI_STATIC SK_U64 GetPhysStatVal(SK_AC *pAC, SK_IOC IoC,
- unsigned int PhysPortIndex, unsigned int StatIndex);
-PNMI_STATIC SK_U64 GetStatVal(SK_AC *pAC, SK_IOC IoC, unsigned int LogPortIndex,
- unsigned int StatIndex, SK_U32 NetIndex);
-PNMI_STATIC char* GetTrapEntry(SK_AC *pAC, SK_U32 TrapId, unsigned int Size);
-PNMI_STATIC void GetTrapQueueLen(SK_AC *pAC, unsigned int *pLen,
- unsigned int *pEntries);
-PNMI_STATIC int GetVpdKeyArr(SK_AC *pAC, SK_IOC IoC, char *pKeyArr,
- unsigned int KeyArrLen, unsigned int *pKeyNo);
-PNMI_STATIC int LookupId(SK_U32 Id);
-PNMI_STATIC int MacUpdate(SK_AC *pAC, SK_IOC IoC, unsigned int FirstMac,
- unsigned int LastMac);
-PNMI_STATIC int PnmiStruct(SK_AC *pAC, SK_IOC IoC, int Action, char *pBuf,
- unsigned int *pLen, SK_U32 NetIndex);
-PNMI_STATIC int PnmiVar(SK_AC *pAC, SK_IOC IoC, int Action, SK_U32 Id,
- char *pBuf, unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
-PNMI_STATIC void QueueRlmtNewMacTrap(SK_AC *pAC, unsigned int ActiveMac);
-PNMI_STATIC void QueueRlmtPortTrap(SK_AC *pAC, SK_U32 TrapId,
- unsigned int PortIndex);
-PNMI_STATIC void QueueSensorTrap(SK_AC *pAC, SK_U32 TrapId,
- unsigned int SensorIndex);
-PNMI_STATIC void QueueSimpleTrap(SK_AC *pAC, SK_U32 TrapId);
-PNMI_STATIC void ResetCounter(SK_AC *pAC, SK_IOC IoC, SK_U32 NetIndex);
-PNMI_STATIC int RlmtUpdate(SK_AC *pAC, SK_IOC IoC, SK_U32 NetIndex);
-PNMI_STATIC int SirqUpdate(SK_AC *pAC, SK_IOC IoC);
-PNMI_STATIC void VirtualConf(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, char *pBuf);
-PNMI_STATIC int Vct(SK_AC *pAC, SK_IOC IoC, int Action, SK_U32 Id, char *pBuf,
- unsigned int *pLen, SK_U32 Instance, unsigned int TableIndex, SK_U32 NetIndex);
-PNMI_STATIC void CheckVctStatus(SK_AC *, SK_IOC, char *, SK_U32, SK_U32);
-
-/*
- * Table to correlate OID with handler function and index to
- * hardware register stored in StatAddress if applicable.
- */
-#include "skgemib.c"
-
-/* global variables **********************************************************/
-
-/*
- * Overflow status register bit table and corresponding counter
- * dependent on MAC type - the number relates to the size of overflow
- * mask returned by the pFnMacOverflow function
- */
-PNMI_STATIC const SK_U16 StatOvrflwBit[][SK_PNMI_MAC_TYPES] = {
-/* Bit0 */ { SK_PNMI_HTX, SK_PNMI_HTX_UNICAST},
-/* Bit1 */ { SK_PNMI_HTX_OCTETHIGH, SK_PNMI_HTX_BROADCAST},
-/* Bit2 */ { SK_PNMI_HTX_OCTETLOW, SK_PNMI_HTX_PMACC},
-/* Bit3 */ { SK_PNMI_HTX_BROADCAST, SK_PNMI_HTX_MULTICAST},
-/* Bit4 */ { SK_PNMI_HTX_MULTICAST, SK_PNMI_HTX_OCTETLOW},
-/* Bit5 */ { SK_PNMI_HTX_UNICAST, SK_PNMI_HTX_OCTETHIGH},
-/* Bit6 */ { SK_PNMI_HTX_LONGFRAMES, SK_PNMI_HTX_64},
-/* Bit7 */ { SK_PNMI_HTX_BURST, SK_PNMI_HTX_127},
-/* Bit8 */ { SK_PNMI_HTX_PMACC, SK_PNMI_HTX_255},
-/* Bit9 */ { SK_PNMI_HTX_MACC, SK_PNMI_HTX_511},
-/* Bit10 */ { SK_PNMI_HTX_SINGLE_COL, SK_PNMI_HTX_1023},
-/* Bit11 */ { SK_PNMI_HTX_MULTI_COL, SK_PNMI_HTX_MAX},
-/* Bit12 */ { SK_PNMI_HTX_EXCESS_COL, SK_PNMI_HTX_LONGFRAMES},
-/* Bit13 */ { SK_PNMI_HTX_LATE_COL, SK_PNMI_HTX_RESERVED},
-/* Bit14 */ { SK_PNMI_HTX_DEFFERAL, SK_PNMI_HTX_COL},
-/* Bit15 */ { SK_PNMI_HTX_EXCESS_DEF, SK_PNMI_HTX_LATE_COL},
-/* Bit16 */ { SK_PNMI_HTX_UNDERRUN, SK_PNMI_HTX_EXCESS_COL},
-/* Bit17 */ { SK_PNMI_HTX_CARRIER, SK_PNMI_HTX_MULTI_COL},
-/* Bit18 */ { SK_PNMI_HTX_UTILUNDER, SK_PNMI_HTX_SINGLE_COL},
-/* Bit19 */ { SK_PNMI_HTX_UTILOVER, SK_PNMI_HTX_UNDERRUN},
-/* Bit20 */ { SK_PNMI_HTX_64, SK_PNMI_HTX_RESERVED},
-/* Bit21 */ { SK_PNMI_HTX_127, SK_PNMI_HTX_RESERVED},
-/* Bit22 */ { SK_PNMI_HTX_255, SK_PNMI_HTX_RESERVED},
-/* Bit23 */ { SK_PNMI_HTX_511, SK_PNMI_HTX_RESERVED},
-/* Bit24 */ { SK_PNMI_HTX_1023, SK_PNMI_HTX_RESERVED},
-/* Bit25 */ { SK_PNMI_HTX_MAX, SK_PNMI_HTX_RESERVED},
-/* Bit26 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
-/* Bit27 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
-/* Bit28 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
-/* Bit29 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
-/* Bit30 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
-/* Bit31 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
-/* Bit32 */ { SK_PNMI_HRX, SK_PNMI_HRX_UNICAST},
-/* Bit33 */ { SK_PNMI_HRX_OCTETHIGH, SK_PNMI_HRX_BROADCAST},
-/* Bit34 */ { SK_PNMI_HRX_OCTETLOW, SK_PNMI_HRX_PMACC},
-/* Bit35 */ { SK_PNMI_HRX_BROADCAST, SK_PNMI_HRX_MULTICAST},
-/* Bit36 */ { SK_PNMI_HRX_MULTICAST, SK_PNMI_HRX_FCS},
-/* Bit37 */ { SK_PNMI_HRX_UNICAST, SK_PNMI_HRX_RESERVED},
-/* Bit38 */ { SK_PNMI_HRX_PMACC, SK_PNMI_HRX_OCTETLOW},
-/* Bit39 */ { SK_PNMI_HRX_MACC, SK_PNMI_HRX_OCTETHIGH},
-/* Bit40 */ { SK_PNMI_HRX_PMACC_ERR, SK_PNMI_HRX_BADOCTETLOW},
-/* Bit41 */ { SK_PNMI_HRX_MACC_UNKWN, SK_PNMI_HRX_BADOCTETHIGH},
-/* Bit42 */ { SK_PNMI_HRX_BURST, SK_PNMI_HRX_UNDERSIZE},
-/* Bit43 */ { SK_PNMI_HRX_MISSED, SK_PNMI_HRX_RUNT},
-/* Bit44 */ { SK_PNMI_HRX_FRAMING, SK_PNMI_HRX_64},
-/* Bit45 */ { SK_PNMI_HRX_OVERFLOW, SK_PNMI_HRX_127},
-/* Bit46 */ { SK_PNMI_HRX_JABBER, SK_PNMI_HRX_255},
-/* Bit47 */ { SK_PNMI_HRX_CARRIER, SK_PNMI_HRX_511},
-/* Bit48 */ { SK_PNMI_HRX_IRLENGTH, SK_PNMI_HRX_1023},
-/* Bit49 */ { SK_PNMI_HRX_SYMBOL, SK_PNMI_HRX_MAX},
-/* Bit50 */ { SK_PNMI_HRX_SHORTS, SK_PNMI_HRX_LONGFRAMES},
-/* Bit51 */ { SK_PNMI_HRX_RUNT, SK_PNMI_HRX_TOO_LONG},
-/* Bit52 */ { SK_PNMI_HRX_TOO_LONG, SK_PNMI_HRX_JABBER},
-/* Bit53 */ { SK_PNMI_HRX_FCS, SK_PNMI_HRX_RESERVED},
-/* Bit54 */ { SK_PNMI_HRX_RESERVED, SK_PNMI_HRX_OVERFLOW},
-/* Bit55 */ { SK_PNMI_HRX_CEXT, SK_PNMI_HRX_RESERVED},
-/* Bit56 */ { SK_PNMI_HRX_UTILUNDER, SK_PNMI_HRX_RESERVED},
-/* Bit57 */ { SK_PNMI_HRX_UTILOVER, SK_PNMI_HRX_RESERVED},
-/* Bit58 */ { SK_PNMI_HRX_64, SK_PNMI_HRX_RESERVED},
-/* Bit59 */ { SK_PNMI_HRX_127, SK_PNMI_HRX_RESERVED},
-/* Bit60 */ { SK_PNMI_HRX_255, SK_PNMI_HRX_RESERVED},
-/* Bit61 */ { SK_PNMI_HRX_511, SK_PNMI_HRX_RESERVED},
-/* Bit62 */ { SK_PNMI_HRX_1023, SK_PNMI_HRX_RESERVED},
-/* Bit63 */ { SK_PNMI_HRX_MAX, SK_PNMI_HRX_RESERVED}
-};
-
-/*
- * Table for hardware register saving on resets and port switches
- */
-PNMI_STATIC const SK_PNMI_STATADDR StatAddr[SK_PNMI_MAX_IDX][SK_PNMI_MAC_TYPES] = {
- /* SK_PNMI_HTX */
- {{XM_TXF_OK, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_OCTETHIGH */
- {{XM_TXO_OK_HI, SK_TRUE}, {GM_TXO_OK_HI, SK_TRUE}},
- /* SK_PNMI_HTX_OCTETLOW */
- {{XM_TXO_OK_LO, SK_FALSE}, {GM_TXO_OK_LO, SK_FALSE}},
- /* SK_PNMI_HTX_BROADCAST */
- {{XM_TXF_BC_OK, SK_TRUE}, {GM_TXF_BC_OK, SK_TRUE}},
- /* SK_PNMI_HTX_MULTICAST */
- {{XM_TXF_MC_OK, SK_TRUE}, {GM_TXF_MC_OK, SK_TRUE}},
- /* SK_PNMI_HTX_UNICAST */
- {{XM_TXF_UC_OK, SK_TRUE}, {GM_TXF_UC_OK, SK_TRUE}},
- /* SK_PNMI_HTX_BURST */
- {{XM_TXE_BURST, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_PMACC */
- {{XM_TXF_MPAUSE, SK_TRUE}, {GM_TXF_MPAUSE, SK_TRUE}},
- /* SK_PNMI_HTX_MACC */
- {{XM_TXF_MCTRL, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_COL */
- {{0, SK_FALSE}, {GM_TXF_COL, SK_TRUE}},
- /* SK_PNMI_HTX_SINGLE_COL */
- {{XM_TXF_SNG_COL, SK_TRUE}, {GM_TXF_SNG_COL, SK_TRUE}},
- /* SK_PNMI_HTX_MULTI_COL */
- {{XM_TXF_MUL_COL, SK_TRUE}, {GM_TXF_MUL_COL, SK_TRUE}},
- /* SK_PNMI_HTX_EXCESS_COL */
- {{XM_TXF_ABO_COL, SK_TRUE}, {GM_TXF_ABO_COL, SK_TRUE}},
- /* SK_PNMI_HTX_LATE_COL */
- {{XM_TXF_LAT_COL, SK_TRUE}, {GM_TXF_LAT_COL, SK_TRUE}},
- /* SK_PNMI_HTX_DEFFERAL */
- {{XM_TXF_DEF, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_EXCESS_DEF */
- {{XM_TXF_EX_DEF, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_UNDERRUN */
- {{XM_TXE_FIFO_UR, SK_TRUE}, {GM_TXE_FIFO_UR, SK_TRUE}},
- /* SK_PNMI_HTX_CARRIER */
- {{XM_TXE_CS_ERR, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_UTILUNDER */
- {{0, SK_FALSE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_UTILOVER */
- {{0, SK_FALSE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_64 */
- {{XM_TXF_64B, SK_TRUE}, {GM_TXF_64B, SK_TRUE}},
- /* SK_PNMI_HTX_127 */
- {{XM_TXF_127B, SK_TRUE}, {GM_TXF_127B, SK_TRUE}},
- /* SK_PNMI_HTX_255 */
- {{XM_TXF_255B, SK_TRUE}, {GM_TXF_255B, SK_TRUE}},
- /* SK_PNMI_HTX_511 */
- {{XM_TXF_511B, SK_TRUE}, {GM_TXF_511B, SK_TRUE}},
- /* SK_PNMI_HTX_1023 */
- {{XM_TXF_1023B, SK_TRUE}, {GM_TXF_1023B, SK_TRUE}},
- /* SK_PNMI_HTX_MAX */
- {{XM_TXF_MAX_SZ, SK_TRUE}, {GM_TXF_1518B, SK_TRUE}},
- /* SK_PNMI_HTX_LONGFRAMES */
- {{XM_TXF_LONG, SK_TRUE}, {GM_TXF_MAX_SZ, SK_TRUE}},
- /* SK_PNMI_HTX_SYNC */
- {{0, SK_FALSE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_SYNC_OCTET */
- {{0, SK_FALSE}, {0, SK_FALSE}},
- /* SK_PNMI_HTX_RESERVED */
- {{0, SK_FALSE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX */
- {{XM_RXF_OK, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_OCTETHIGH */
- {{XM_RXO_OK_HI, SK_TRUE}, {GM_RXO_OK_HI, SK_TRUE}},
- /* SK_PNMI_HRX_OCTETLOW */
- {{XM_RXO_OK_LO, SK_FALSE}, {GM_RXO_OK_LO, SK_FALSE}},
- /* SK_PNMI_HRX_BADOCTETHIGH */
- {{0, SK_FALSE}, {GM_RXO_ERR_HI, SK_TRUE}},
- /* SK_PNMI_HRX_BADOCTETLOW */
- {{0, SK_FALSE}, {GM_RXO_ERR_LO, SK_TRUE}},
- /* SK_PNMI_HRX_BROADCAST */
- {{XM_RXF_BC_OK, SK_TRUE}, {GM_RXF_BC_OK, SK_TRUE}},
- /* SK_PNMI_HRX_MULTICAST */
- {{XM_RXF_MC_OK, SK_TRUE}, {GM_RXF_MC_OK, SK_TRUE}},
- /* SK_PNMI_HRX_UNICAST */
- {{XM_RXF_UC_OK, SK_TRUE}, {GM_RXF_UC_OK, SK_TRUE}},
- /* SK_PNMI_HRX_PMACC */
- {{XM_RXF_MPAUSE, SK_TRUE}, {GM_RXF_MPAUSE, SK_TRUE}},
- /* SK_PNMI_HRX_MACC */
- {{XM_RXF_MCTRL, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_PMACC_ERR */
- {{XM_RXF_INV_MP, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_MACC_UNKWN */
- {{XM_RXF_INV_MOC, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_BURST */
- {{XM_RXE_BURST, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_MISSED */
- {{XM_RXE_FMISS, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_FRAMING */
- {{XM_RXF_FRA_ERR, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_UNDERSIZE */
- {{0, SK_FALSE},{GM_RXF_SHT, SK_TRUE}},
- /* SK_PNMI_HRX_OVERFLOW */
- {{XM_RXE_FIFO_OV, SK_TRUE}, {GM_RXE_FIFO_OV, SK_TRUE}},
- /* SK_PNMI_HRX_JABBER */
- {{XM_RXF_JAB_PKT, SK_TRUE}, {GM_RXF_JAB_PKT, SK_TRUE}},
- /* SK_PNMI_HRX_CARRIER */
- {{XM_RXE_CAR_ERR, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_IRLENGTH */
- {{XM_RXF_LEN_ERR, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_SYMBOL */
- {{XM_RXE_SYM_ERR, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_SHORTS */
- {{XM_RXE_SHT_ERR, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_RUNT */
- {{XM_RXE_RUNT, SK_TRUE}, {GM_RXE_FRAG, SK_TRUE}},
- /* SK_PNMI_HRX_TOO_LONG */
- {{XM_RXF_LNG_ERR, SK_TRUE}, {GM_RXF_LNG_ERR, SK_TRUE}},
- /* SK_PNMI_HRX_FCS */
- {{XM_RXF_FCS_ERR, SK_TRUE}, {GM_RXF_FCS_ERR, SK_TRUE}},
- /* SK_PNMI_HRX_CEXT */
- {{XM_RXF_CEX_ERR, SK_TRUE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_UTILUNDER */
- {{0, SK_FALSE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_UTILOVER */
- {{0, SK_FALSE}, {0, SK_FALSE}},
- /* SK_PNMI_HRX_64 */
- {{XM_RXF_64B, SK_TRUE}, {GM_RXF_64B, SK_TRUE}},
- /* SK_PNMI_HRX_127 */
- {{XM_RXF_127B, SK_TRUE}, {GM_RXF_127B, SK_TRUE}},
- /* SK_PNMI_HRX_255 */
- {{XM_RXF_255B, SK_TRUE}, {GM_RXF_255B, SK_TRUE}},
- /* SK_PNMI_HRX_511 */
- {{XM_RXF_511B, SK_TRUE}, {GM_RXF_511B, SK_TRUE}},
- /* SK_PNMI_HRX_1023 */
- {{XM_RXF_1023B, SK_TRUE}, {GM_RXF_1023B, SK_TRUE}},
- /* SK_PNMI_HRX_MAX */
- {{XM_RXF_MAX_SZ, SK_TRUE}, {GM_RXF_1518B, SK_TRUE}},
- /* SK_PNMI_HRX_LONGFRAMES */
- {{0, SK_FALSE}, {GM_RXF_MAX_SZ, SK_TRUE}},
- /* SK_PNMI_HRX_RESERVED */
- {{0, SK_FALSE}, {0, SK_FALSE}}
-};
-
-
-/*****************************************************************************
- *
- * Public functions
- *
- */
-
-/*****************************************************************************
- *
- * SkPnmiInit - Init function of PNMI
- *
- * Description:
- * SK_INIT_DATA: Initialises the data structures
- * SK_INIT_IO: Resets the XMAC statistics, determines the device and
- * connector type.
- * SK_INIT_RUN: Starts a timer event for port switch per hour
- * calculation.
- *
- * Returns:
- * Always 0
- */
-int SkPnmiInit(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Level) /* Initialization level */
-{
- unsigned int PortMax; /* Number of ports */
- unsigned int PortIndex; /* Current port index in loop */
- SK_U16 Val16; /* Multiple purpose 16 bit variable */
- SK_U8 Val8; /* Mulitple purpose 8 bit variable */
- SK_EVPARA EventParam; /* Event struct for timer event */
- SK_GEPORT *pPrt;
- SK_PNMI_VCT *pVctBackupData;
-
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiInit: Called, level=%d\n", Level));
-
- switch (Level) {
-
- case SK_INIT_DATA:
- SK_MEMSET((char *)&pAC->Pnmi, 0, sizeof(pAC->Pnmi));
- pAC->Pnmi.TrapBufFree = SK_PNMI_TRAP_QUEUE_LEN;
- pAC->Pnmi.StartUpTime = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
- pAC->Pnmi.RlmtChangeThreshold = SK_PNMI_DEF_RLMT_CHG_THRES;
- for (PortIndex = 0; PortIndex < SK_MAX_MACS; PortIndex ++) {
-
- pAC->Pnmi.Port[PortIndex].ActiveFlag = SK_FALSE;
- pAC->Pnmi.DualNetActiveFlag = SK_FALSE;
- }
-
-#ifdef SK_PNMI_CHECK
- if (SK_PNMI_MAX_IDX != SK_PNMI_CNT_NO) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR049, SK_PNMI_ERR049MSG);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_INIT | SK_DBGCAT_FATAL,
- ("CounterOffset struct size (%d) differs from"
- "SK_PNMI_MAX_IDX (%d)\n",
- SK_PNMI_CNT_NO, SK_PNMI_MAX_IDX));
- BRK;
- }
-
- if (SK_PNMI_MAX_IDX !=
- (sizeof(StatAddr) / (sizeof(SK_PNMI_STATADDR) * SK_PNMI_MAC_TYPES))) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR050, SK_PNMI_ERR050MSG);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_INIT | SK_DBGCAT_FATAL,
- ("StatAddr table size (%d) differs from "
- "SK_PNMI_MAX_IDX (%d)\n",
- (sizeof(StatAddr) /
- (sizeof(SK_PNMI_STATADDR) * SK_PNMI_MAC_TYPES)),
- SK_PNMI_MAX_IDX));
- BRK;
- }
-#endif /* SK_PNMI_CHECK */
- break;
-
- case SK_INIT_IO:
- /*
- * Reset MAC counters
- */
- PortMax = pAC->GIni.GIMacsFound;
-
- for (PortIndex = 0; PortIndex < PortMax; PortIndex ++) {
-
- pAC->GIni.GIFunc.pFnMacResetCounter(pAC, IoC, PortIndex);
- }
-
- /* Initialize DSP variables for Vct() to 0xff => Never written! */
- for (PortIndex = 0; PortIndex < PortMax; PortIndex ++) {
- pPrt = &pAC->GIni.GP[PortIndex];
- pPrt->PCableLen =0xff;
- pVctBackupData = &pAC->Pnmi.VctBackup[PortIndex];
- pVctBackupData->PCableLen = 0xff;
- }
-
- /*
- * Get pci bus speed
- */
- SK_IN16(IoC, B0_CTST, &Val16);
- if ((Val16 & CS_BUS_CLOCK) == 0) {
-
- pAC->Pnmi.PciBusSpeed = 33;
- }
- else {
- pAC->Pnmi.PciBusSpeed = 66;
- }
-
- /*
- * Get pci bus width
- */
- SK_IN16(IoC, B0_CTST, &Val16);
- if ((Val16 & CS_BUS_SLOT_SZ) == 0) {
-
- pAC->Pnmi.PciBusWidth = 32;
- }
- else {
- pAC->Pnmi.PciBusWidth = 64;
- }
-
- /*
- * Get chipset
- */
- switch (pAC->GIni.GIChipId) {
- case CHIP_ID_GENESIS:
- pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_XMAC;
- break;
-
- case CHIP_ID_YUKON:
- pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON;
- break;
-
- default:
- break;
- }
-
- /*
- * Get PMD and DeviceType
- */
- SK_IN8(IoC, B2_PMD_TYP, &Val8);
- switch (Val8) {
- case 'S':
- pAC->Pnmi.PMD = 3;
- if (pAC->GIni.GIMacsFound > 1) {
-
- pAC->Pnmi.DeviceType = 0x00020002;
- }
- else {
- pAC->Pnmi.DeviceType = 0x00020001;
- }
- break;
-
- case 'L':
- pAC->Pnmi.PMD = 2;
- if (pAC->GIni.GIMacsFound > 1) {
-
- pAC->Pnmi.DeviceType = 0x00020004;
- }
- else {
- pAC->Pnmi.DeviceType = 0x00020003;
- }
- break;
-
- case 'C':
- pAC->Pnmi.PMD = 4;
- if (pAC->GIni.GIMacsFound > 1) {
-
- pAC->Pnmi.DeviceType = 0x00020006;
- }
- else {
- pAC->Pnmi.DeviceType = 0x00020005;
- }
- break;
-
- case 'T':
- pAC->Pnmi.PMD = 5;
- if (pAC->GIni.GIMacsFound > 1) {
-
- pAC->Pnmi.DeviceType = 0x00020008;
- }
- else {
- pAC->Pnmi.DeviceType = 0x00020007;
- }
- break;
-
- default :
- pAC->Pnmi.PMD = 1;
- pAC->Pnmi.DeviceType = 0;
- break;
- }
-
- /*
- * Get connector
- */
- SK_IN8(IoC, B2_CONN_TYP, &Val8);
- switch (Val8) {
- case 'C':
- pAC->Pnmi.Connector = 2;
- break;
-
- case 'D':
- pAC->Pnmi.Connector = 3;
- break;
-
- case 'F':
- pAC->Pnmi.Connector = 4;
- break;
-
- case 'J':
- pAC->Pnmi.Connector = 5;
- break;
-
- case 'V':
- pAC->Pnmi.Connector = 6;
- break;
-
- default:
- pAC->Pnmi.Connector = 1;
- break;
- }
- break;
-
- case SK_INIT_RUN:
- /*
- * Start timer for RLMT change counter
- */
- SK_MEMSET((char *) &EventParam, 0, sizeof(EventParam));
- SkTimerStart(pAC, IoC, &pAC->Pnmi.RlmtChangeEstimate.EstTimer,
- 28125000, SKGE_PNMI, SK_PNMI_EVT_CHG_EST_TIMER,
- EventParam);
- break;
-
- default:
- break; /* Nothing todo */
- }
-
- return (0);
-}
-
-/*****************************************************************************
- *
- * SkPnmiGetVar - Retrieves the value of a single OID
- *
- * Description:
- * Calls a general sub-function for all this stuff. If the instance
- * -1 is passed, the values of all instances are returned in an
- * array of values.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed
- * SK_PNMI_ERR_GENERAL A general severe internal error occured
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to take
- * the data.
- * SK_PNMI_ERR_UNKNOWN_OID The requested OID is unknown
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-int SkPnmiGetVar(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-SK_U32 Id, /* Object ID that is to be processed */
-void *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiGetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",
- Id, *pLen, Instance, NetIndex));
-
- return (PnmiVar(pAC, IoC, SK_PNMI_GET, Id, (char *)pBuf, pLen,
- Instance, NetIndex));
-}
-
-/*****************************************************************************
- *
- * SkPnmiPreSetVar - Presets the value of a single OID
- *
- * Description:
- * Calls a general sub-function for all this stuff. The preset does
- * the same as a set, but returns just before finally setting the
- * new value. This is usefull to check if a set might be successfull.
- * If as instance a -1 is passed, an array of values is supposed and
- * all instance of the OID will be set.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_OID The requested OID is unknown.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-int SkPnmiPreSetVar(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-SK_U32 Id, /* Object ID that is to be processed */
-void *pBuf, /* Buffer which stores the mgmt data to be set */
-unsigned int *pLen, /* Total length of mgmt data */
-SK_U32 Instance, /* Instance (1..n) that is to be set or -1 */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiPreSetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",
- Id, *pLen, Instance, NetIndex));
-
-
- return (PnmiVar(pAC, IoC, SK_PNMI_PRESET, Id, (char *)pBuf, pLen,
- Instance, NetIndex));
-}
-
-/*****************************************************************************
- *
- * SkPnmiSetVar - Sets the value of a single OID
- *
- * Description:
- * Calls a general sub-function for all this stuff. The preset does
- * the same as a set, but returns just before finally setting the
- * new value. This is usefull to check if a set might be successfull.
- * If as instance a -1 is passed, an array of values is supposed and
- * all instance of the OID will be set.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_OID The requested OID is unknown.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-int SkPnmiSetVar(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-SK_U32 Id, /* Object ID that is to be processed */
-void *pBuf, /* Buffer which stores the mgmt data to be set */
-unsigned int *pLen, /* Total length of mgmt data */
-SK_U32 Instance, /* Instance (1..n) that is to be set or -1 */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiSetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",
- Id, *pLen, Instance, NetIndex));
-
- return (PnmiVar(pAC, IoC, SK_PNMI_SET, Id, (char *)pBuf, pLen,
- Instance, NetIndex));
-}
-
-/*****************************************************************************
- *
- * SkPnmiGetStruct - Retrieves the management database in SK_PNMI_STRUCT_DATA
- *
- * Description:
- * Runs through the IdTable, queries the single OIDs and stores the
- * returned data into the management database structure
- * SK_PNMI_STRUCT_DATA. The offset of the OID in the structure
- * is stored in the IdTable. The return value of the function will also
- * be stored in SK_PNMI_STRUCT_DATA if the passed buffer has the
- * minimum size of SK_PNMI_MIN_STRUCT_SIZE.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed
- * SK_PNMI_ERR_GENERAL A general severe internal error occured
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to take
- * the data.
- * SK_PNMI_ERR_UNKNOWN_NET The requested NetIndex doesn't exist
- */
-int SkPnmiGetStruct(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-void *pBuf, /* Buffer which will store the retrieved data */
-unsigned int *pLen, /* Length of buffer */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- int Ret;
- unsigned int TableIndex;
- unsigned int DstOffset;
- unsigned int InstanceNo;
- unsigned int InstanceCnt;
- SK_U32 Instance;
- unsigned int TmpLen;
- char KeyArr[SK_PNMI_VPD_ENTRIES][SK_PNMI_VPD_KEY_SIZE];
-
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiGetStruct: Called, BufLen=%d, NetIndex=%d\n",
- *pLen, NetIndex));
-
- if (*pLen < SK_PNMI_STRUCT_SIZE) {
-
- if (*pLen >= SK_PNMI_MIN_STRUCT_SIZE) {
-
- SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_TOO_SHORT,
- (SK_U32)(-1));
- }
-
- *pLen = SK_PNMI_STRUCT_SIZE;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * Check NetIndex
- */
- if (NetIndex >= pAC->Rlmt.NumNets) {
- return (SK_PNMI_ERR_UNKNOWN_NET);
- }
-
- /* Update statistic */
- SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On call");
-
- if ((Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1)) !=
- SK_PNMI_ERR_OK) {
-
- SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (Ret);
- }
-
- if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
-
- SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (Ret);
- }
-
- if ((Ret = SirqUpdate(pAC, IoC)) != SK_PNMI_ERR_OK) {
-
- SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (Ret);
- }
-
- /*
- * Increment semaphores to indicate that an update was
- * already done
- */
- pAC->Pnmi.MacUpdatedFlag ++;
- pAC->Pnmi.RlmtUpdatedFlag ++;
- pAC->Pnmi.SirqUpdatedFlag ++;
-
- /* Get vpd keys for instance calculation */
- Ret = GetVpdKeyArr(pAC, IoC, &KeyArr[0][0], sizeof(KeyArr), &TmpLen);
- if (Ret != SK_PNMI_ERR_OK) {
-
- pAC->Pnmi.MacUpdatedFlag --;
- pAC->Pnmi.RlmtUpdatedFlag --;
- pAC->Pnmi.SirqUpdatedFlag --;
-
- SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");
- SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /* Retrieve values */
- SK_MEMSET((char *)pBuf, 0, SK_PNMI_STRUCT_SIZE);
- for (TableIndex = 0; TableIndex < ID_TABLE_SIZE; TableIndex ++) {
-
- InstanceNo = IdTable[TableIndex].InstanceNo;
- for (InstanceCnt = 1; InstanceCnt <= InstanceNo;
- InstanceCnt ++) {
-
- DstOffset = IdTable[TableIndex].Offset +
- (InstanceCnt - 1) *
- IdTable[TableIndex].StructSize;
-
- /*
- * For the VPD the instance is not an index number
- * but the key itself. Determin with the instance
- * counter the VPD key to be used.
- */
- if (IdTable[TableIndex].Id == OID_SKGE_VPD_KEY ||
- IdTable[TableIndex].Id == OID_SKGE_VPD_VALUE ||
- IdTable[TableIndex].Id == OID_SKGE_VPD_ACCESS ||
- IdTable[TableIndex].Id == OID_SKGE_VPD_ACTION) {
-
- SK_STRNCPY((char *)&Instance, KeyArr[InstanceCnt - 1], 4);
- }
- else {
- Instance = (SK_U32)InstanceCnt;
- }
-
- TmpLen = *pLen - DstOffset;
- Ret = IdTable[TableIndex].Func(pAC, IoC, SK_PNMI_GET,
- IdTable[TableIndex].Id, (char *)pBuf +
- DstOffset, &TmpLen, Instance, TableIndex, NetIndex);
-
- /*
- * An unknown instance error means that we reached
- * the last instance of that variable. Proceed with
- * the next OID in the table and ignore the return
- * code.
- */
- if (Ret == SK_PNMI_ERR_UNKNOWN_INST) {
-
- break;
- }
-
- if (Ret != SK_PNMI_ERR_OK) {
-
- pAC->Pnmi.MacUpdatedFlag --;
- pAC->Pnmi.RlmtUpdatedFlag --;
- pAC->Pnmi.SirqUpdatedFlag --;
-
- SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");
- SK_PNMI_SET_STAT(pBuf, Ret, DstOffset);
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (Ret);
- }
- }
- }
-
- pAC->Pnmi.MacUpdatedFlag --;
- pAC->Pnmi.RlmtUpdatedFlag --;
- pAC->Pnmi.SirqUpdatedFlag --;
-
- *pLen = SK_PNMI_STRUCT_SIZE;
- SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");
- SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_OK, (SK_U32)(-1));
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * SkPnmiPreSetStruct - Presets the management database in SK_PNMI_STRUCT_DATA
- *
- * Description:
- * Calls a general sub-function for all this set stuff. The preset does
- * the same as a set, but returns just before finally setting the
- * new value. This is usefull to check if a set might be successfull.
- * The sub-function runs through the IdTable, checks which OIDs are able
- * to set, and calls the handler function of the OID to perform the
- * preset. The return value of the function will also be stored in
- * SK_PNMI_STRUCT_DATA if the passed buffer has the minimum size of
- * SK_PNMI_MIN_STRUCT_SIZE.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- */
-int SkPnmiPreSetStruct(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-void *pBuf, /* Buffer which contains the data to be set */
-unsigned int *pLen, /* Length of buffer */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiPreSetStruct: Called, BufLen=%d, NetIndex=%d\n",
- *pLen, NetIndex));
-
- return (PnmiStruct(pAC, IoC, SK_PNMI_PRESET, (char *)pBuf,
- pLen, NetIndex));
-}
-
-/*****************************************************************************
- *
- * SkPnmiSetStruct - Sets the management database in SK_PNMI_STRUCT_DATA
- *
- * Description:
- * Calls a general sub-function for all this set stuff. The return value
- * of the function will also be stored in SK_PNMI_STRUCT_DATA if the
- * passed buffer has the minimum size of SK_PNMI_MIN_STRUCT_SIZE.
- * The sub-function runs through the IdTable, checks which OIDs are able
- * to set, and calls the handler function of the OID to perform the
- * set. The return value of the function will also be stored in
- * SK_PNMI_STRUCT_DATA if the passed buffer has the minimum size of
- * SK_PNMI_MIN_STRUCT_SIZE.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- */
-int SkPnmiSetStruct(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-void *pBuf, /* Buffer which contains the data to be set */
-unsigned int *pLen, /* Length of buffer */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiSetStruct: Called, BufLen=%d, NetIndex=%d\n",
- *pLen, NetIndex));
-
- return (PnmiStruct(pAC, IoC, SK_PNMI_SET, (char *)pBuf,
- pLen, NetIndex));
-}
-
-/*****************************************************************************
- *
- * SkPnmiEvent - Event handler
- *
- * Description:
- * Handles the following events:
- * SK_PNMI_EVT_SIRQ_OVERFLOW When a hardware counter overflows an
- * interrupt will be generated which is
- * first handled by SIRQ which generates a
- * this event. The event increments the
- * upper 32 bit of the 64 bit counter.
- * SK_PNMI_EVT_SEN_XXX The event is generated by the I2C module
- * when a sensor reports a warning or
- * error. The event will store a trap
- * message in the trap buffer.
- * SK_PNMI_EVT_CHG_EST_TIMER The timer event was initiated by this
- * module and is used to calculate the
- * port switches per hour.
- * SK_PNMI_EVT_CLEAR_COUNTER The event clears all counters and
- * timestamps.
- * SK_PNMI_EVT_XMAC_RESET The event is generated by the driver
- * before a hard reset of the XMAC is
- * performed. All counters will be saved
- * and added to the hardware counter
- * values after reset to grant continuous
- * counter values.
- * SK_PNMI_EVT_RLMT_PORT_UP Generated by RLMT to notify that a port
- * went logically up. A trap message will
- * be stored to the trap buffer.
- * SK_PNMI_EVT_RLMT_PORT_DOWN Generated by RLMT to notify that a port
- * went logically down. A trap message will
- * be stored to the trap buffer.
- * SK_PNMI_EVT_RLMT_SEGMENTATION Generated by RLMT to notify that two
- * spanning tree root bridges were
- * detected. A trap message will be stored
- * to the trap buffer.
- * SK_PNMI_EVT_RLMT_ACTIVE_DOWN Notifies PNMI that an active port went
- * down. PNMI will not further add the
- * statistic values to the virtual port.
- * SK_PNMI_EVT_RLMT_ACTIVE_UP Notifies PNMI that a port went up and
- * is now an active port. PNMI will now
- * add the statistic data of this port to
- * the virtual port.
- * SK_PNMI_EVT_RLMT_SET_NETS Notifies PNMI about the net mode. The first Parameter
- * contains the number of nets. 1 means single net, 2 means
- * dual net. The second Parameter is -1
- *
- * Returns:
- * Always 0
- */
-int SkPnmiEvent(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-SK_U32 Event, /* Event-Id */
-SK_EVPARA Param) /* Event dependent parameter */
-{
- unsigned int PhysPortIndex;
- unsigned int MaxNetNumber;
- int CounterIndex;
- int Ret;
- SK_U16 MacStatus;
- SK_U64 OverflowStatus;
- SK_U64 Mask;
- int MacType;
- SK_U64 Value;
- SK_U32 Val32;
- SK_U16 Register;
- SK_EVPARA EventParam;
- SK_U64 NewestValue;
- SK_U64 OldestValue;
- SK_U64 Delta;
- SK_PNMI_ESTIMATE *pEst;
- SK_U32 NetIndex;
- SK_GEPORT *pPrt;
- SK_PNMI_VCT *pVctBackupData;
- SK_U32 RetCode;
- int i;
- SK_U32 CableLength;
-
-
-#ifdef DEBUG
- if (Event != SK_PNMI_EVT_XMAC_RESET) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: SkPnmiEvent: Called, Event=0x%x, Param=0x%x\n",
- (unsigned int)Event, (unsigned int)Param.Para64));
- }
-#endif
- SK_PNMI_CHECKFLAGS("SkPnmiEvent: On call");
-
- MacType = pAC->GIni.GIMacType;
-
- switch (Event) {
-
- case SK_PNMI_EVT_SIRQ_OVERFLOW:
- PhysPortIndex = (int)Param.Para32[0];
- MacStatus = (SK_U16)Param.Para32[1];
-#ifdef DEBUG
- if (PhysPortIndex >= SK_MAX_MACS) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SIRQ_OVERFLOW parameter"
- " wrong, PhysPortIndex=0x%x\n",
- PhysPortIndex));
- return (0);
- }
-#endif
- OverflowStatus = 0;
-
- /*
- * Check which source caused an overflow interrupt.
- */
- if ((pAC->GIni.GIFunc.pFnMacOverflow(
- pAC, IoC, PhysPortIndex, MacStatus, &OverflowStatus) != 0) ||
- (OverflowStatus == 0)) {
-
- SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
- return (0);
- }
-
- /*
- * Check the overflow status register and increment
- * the upper dword of corresponding counter.
- */
- for (CounterIndex = 0; CounterIndex < sizeof(Mask) * 8;
- CounterIndex ++) {
-
- Mask = (SK_U64)1 << CounterIndex;
- if ((OverflowStatus & Mask) == 0) {
-
- continue;
- }
-
- switch (StatOvrflwBit[CounterIndex][MacType]) {
-
- case SK_PNMI_HTX_UTILUNDER:
- case SK_PNMI_HTX_UTILOVER:
- XM_IN16(IoC, PhysPortIndex, XM_TX_CMD,
- &Register);
- Register |= XM_TX_SAM_LINE;
- XM_OUT16(IoC, PhysPortIndex, XM_TX_CMD,
- Register);
- break;
-
- case SK_PNMI_HRX_UTILUNDER:
- case SK_PNMI_HRX_UTILOVER:
- XM_IN16(IoC, PhysPortIndex, XM_RX_CMD,
- &Register);
- Register |= XM_RX_SAM_LINE;
- XM_OUT16(IoC, PhysPortIndex, XM_RX_CMD,
- Register);
- break;
-
- case SK_PNMI_HTX_OCTETHIGH:
- case SK_PNMI_HTX_OCTETLOW:
- case SK_PNMI_HTX_RESERVED:
- case SK_PNMI_HRX_OCTETHIGH:
- case SK_PNMI_HRX_OCTETLOW:
- case SK_PNMI_HRX_IRLENGTH:
- case SK_PNMI_HRX_RESERVED:
-
- /*
- * the following counters aren't be handled (id > 63)
- */
- case SK_PNMI_HTX_SYNC:
- case SK_PNMI_HTX_SYNC_OCTET:
- break;
-
- case SK_PNMI_HRX_LONGFRAMES:
- if (MacType == SK_MAC_GMAC) {
- pAC->Pnmi.Port[PhysPortIndex].
- CounterHigh[CounterIndex] ++;
- }
- break;
-
- default:
- pAC->Pnmi.Port[PhysPortIndex].
- CounterHigh[CounterIndex] ++;
- }
- }
- break;
-
- case SK_PNMI_EVT_SEN_WAR_LOW:
-#ifdef DEBUG
- if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SEN_WAR_LOW parameter wrong, SensorIndex=%d\n",
- (unsigned int)Param.Para64));
- return (0);
- }
-#endif
- /*
- * Store a trap message in the trap buffer and generate
- * an event for user space applications with the
- * SK_DRIVER_SENDEVENT macro.
- */
- QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_WAR_LOW,
- (unsigned int)Param.Para64);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
- break;
-
- case SK_PNMI_EVT_SEN_WAR_UPP:
-#ifdef DEBUG
- if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR:SkPnmiEvent: SK_PNMI_EVT_SEN_WAR_UPP parameter wrong, SensorIndex=%d\n",
- (unsigned int)Param.Para64));
- return (0);
- }
-#endif
- /*
- * Store a trap message in the trap buffer and generate
- * an event for user space applications with the
- * SK_DRIVER_SENDEVENT macro.
- */
- QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_WAR_UPP,
- (unsigned int)Param.Para64);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
- break;
-
- case SK_PNMI_EVT_SEN_ERR_LOW:
-#ifdef DEBUG
- if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SEN_ERR_LOW parameter wrong, SensorIndex=%d\n",
- (unsigned int)Param.Para64));
- return (0);
- }
-#endif
- /*
- * Store a trap message in the trap buffer and generate
- * an event for user space applications with the
- * SK_DRIVER_SENDEVENT macro.
- */
- QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_ERR_LOW,
- (unsigned int)Param.Para64);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
- break;
-
- case SK_PNMI_EVT_SEN_ERR_UPP:
-#ifdef DEBUG
- if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SEN_ERR_UPP parameter wrong, SensorIndex=%d\n",
- (unsigned int)Param.Para64));
- return (0);
- }
-#endif
- /*
- * Store a trap message in the trap buffer and generate
- * an event for user space applications with the
- * SK_DRIVER_SENDEVENT macro.
- */
- QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_ERR_UPP,
- (unsigned int)Param.Para64);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
- break;
-
- case SK_PNMI_EVT_CHG_EST_TIMER:
- /*
- * Calculate port switch average on a per hour basis
- * Time interval for check : 28125 ms
- * Number of values for average : 8
- *
- * Be careful in changing these values, on change check
- * - typedef of SK_PNMI_ESTIMATE (Size of EstValue
- * array one less than value number)
- * - Timer initilization SkTimerStart() in SkPnmiInit
- * - Delta value below must be multiplicated with
- * power of 2
- *
- */
- pEst = &pAC->Pnmi.RlmtChangeEstimate;
- CounterIndex = pEst->EstValueIndex + 1;
- if (CounterIndex == 7) {
-
- CounterIndex = 0;
- }
- pEst->EstValueIndex = CounterIndex;
-
- NewestValue = pAC->Pnmi.RlmtChangeCts;
- OldestValue = pEst->EstValue[CounterIndex];
- pEst->EstValue[CounterIndex] = NewestValue;
-
- /*
- * Calculate average. Delta stores the number of
- * port switches per 28125 * 8 = 225000 ms
- */
- if (NewestValue >= OldestValue) {
-
- Delta = NewestValue - OldestValue;
- }
- else {
- /* Overflow situation */
- Delta = (SK_U64)(0 - OldestValue) + NewestValue;
- }
-
- /*
- * Extrapolate delta to port switches per hour.
- * Estimate = Delta * (3600000 / 225000)
- * = Delta * 16
- * = Delta << 4
- */
- pAC->Pnmi.RlmtChangeEstimate.Estimate = Delta << 4;
-
- /*
- * Check if threshold is exceeded. If the threshold is
- * permanently exceeded every 28125 ms an event will be
- * generated to remind the user of this condition.
- */
- if ((pAC->Pnmi.RlmtChangeThreshold != 0) &&
- (pAC->Pnmi.RlmtChangeEstimate.Estimate >=
- pAC->Pnmi.RlmtChangeThreshold)) {
-
- QueueSimpleTrap(pAC, OID_SKGE_TRAP_RLMT_CHANGE_THRES);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
- }
-
- SK_MEMSET((char *) &EventParam, 0, sizeof(EventParam));
- SkTimerStart(pAC, IoC, &pAC->Pnmi.RlmtChangeEstimate.EstTimer,
- 28125000, SKGE_PNMI, SK_PNMI_EVT_CHG_EST_TIMER,
- EventParam);
- break;
-
- case SK_PNMI_EVT_CLEAR_COUNTER:
- /*
- * Param.Para32[0] contains the NetIndex (0 ..1).
- * Param.Para32[1] is reserved, contains -1.
- */
- NetIndex = (SK_U32)Param.Para32[0];
-
-#ifdef DEBUG
- if (NetIndex >= pAC->Rlmt.NumNets) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_CLEAR_COUNTER parameter wrong, NetIndex=%d\n",
- NetIndex));
-
- return (0);
- }
-#endif
-
- /*
- * Set all counters and timestamps to zero
- */
- ResetCounter(pAC, IoC, NetIndex); /* the according NetIndex is required
- as a Parameter of the Event */
- break;
-
- case SK_PNMI_EVT_XMAC_RESET:
- /*
- * To grant continuous counter values store the current
- * XMAC statistic values to the entries 1..n of the
- * CounterOffset array. XMAC Errata #2
- */
-#ifdef DEBUG
- if ((unsigned int)Param.Para64 >= SK_MAX_MACS) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_XMAC_RESET parameter wrong, PhysPortIndex=%d\n",
- (unsigned int)Param.Para64));
- return (0);
- }
-#endif
- PhysPortIndex = (unsigned int)Param.Para64;
-
- /*
- * Update XMAC statistic to get fresh values
- */
- Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
- if (Ret != SK_PNMI_ERR_OK) {
-
- SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
- return (0);
- }
- /*
- * Increment semaphore to indicate that an update was
- * already done
- */
- pAC->Pnmi.MacUpdatedFlag ++;
-
- for (CounterIndex = 0; CounterIndex < SK_PNMI_MAX_IDX;
- CounterIndex ++) {
-
- if (!StatAddr[CounterIndex][MacType].GetOffset) {
-
- continue;
- }
-
- pAC->Pnmi.Port[PhysPortIndex].
- CounterOffset[CounterIndex] = GetPhysStatVal(
- pAC, IoC, PhysPortIndex, CounterIndex);
- pAC->Pnmi.Port[PhysPortIndex].
- CounterHigh[CounterIndex] = 0;
- }
-
- pAC->Pnmi.MacUpdatedFlag --;
- break;
-
- case SK_PNMI_EVT_RLMT_PORT_UP:
- PhysPortIndex = (unsigned int)Param.Para32[0];
-#ifdef DEBUG
- if (PhysPortIndex >= SK_MAX_MACS) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_PORT_UP parameter"
- " wrong, PhysPortIndex=%d\n", PhysPortIndex));
-
- return (0);
- }
-#endif
- /*
- * Store a trap message in the trap buffer and generate an event for
- * user space applications with the SK_DRIVER_SENDEVENT macro.
- */
- QueueRlmtPortTrap(pAC, OID_SKGE_TRAP_RLMT_PORT_UP, PhysPortIndex);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
-
- /* Bugfix for XMAC errata (#10620)*/
- if (pAC->GIni.GIMacType == SK_MAC_XMAC){
-
- /* Add incremental difference to offset (#10620)*/
- (void)pAC->GIni.GIFunc.pFnMacStatistic(pAC, IoC, PhysPortIndex,
- XM_RXE_SHT_ERR, &Val32);
-
- Value = (((SK_U64)pAC->Pnmi.Port[PhysPortIndex].
- CounterHigh[SK_PNMI_HRX_SHORTS] << 32) | (SK_U64)Val32);
- pAC->Pnmi.Port[PhysPortIndex].CounterOffset[SK_PNMI_HRX_SHORTS] +=
- Value - pAC->Pnmi.Port[PhysPortIndex].RxShortZeroMark;
- }
-
- /* Tell VctStatus() that a link was up meanwhile. */
- pAC->Pnmi.VctStatus[PhysPortIndex] |= SK_PNMI_VCT_LINK;
- break;
-
- case SK_PNMI_EVT_RLMT_PORT_DOWN:
- PhysPortIndex = (unsigned int)Param.Para32[0];
-
-#ifdef DEBUG
- if (PhysPortIndex >= SK_MAX_MACS) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_PORT_DOWN parameter"
- " wrong, PhysPortIndex=%d\n", PhysPortIndex));
-
- return (0);
- }
-#endif
- /*
- * Store a trap message in the trap buffer and generate an event for
- * user space applications with the SK_DRIVER_SENDEVENT macro.
- */
- QueueRlmtPortTrap(pAC, OID_SKGE_TRAP_RLMT_PORT_DOWN, PhysPortIndex);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
-
- /* Bugfix #10620 - get zero level for incremental difference */
- if ((pAC->GIni.GIMacType == SK_MAC_XMAC)) {
-
- (void)pAC->GIni.GIFunc.pFnMacStatistic(pAC, IoC, PhysPortIndex,
- XM_RXE_SHT_ERR, &Val32);
- pAC->Pnmi.Port[PhysPortIndex].RxShortZeroMark =
- (((SK_U64)pAC->Pnmi.Port[PhysPortIndex].
- CounterHigh[SK_PNMI_HRX_SHORTS] << 32) | (SK_U64)Val32);
- }
- break;
-
- case SK_PNMI_EVT_RLMT_ACTIVE_DOWN:
- PhysPortIndex = (unsigned int)Param.Para32[0];
- NetIndex = (SK_U32)Param.Para32[1];
-
-#ifdef DEBUG
- if (PhysPortIndex >= SK_MAX_MACS) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_DOWN parameter too high, PhysPort=%d\n",
- PhysPortIndex));
- }
-
- if (NetIndex >= pAC->Rlmt.NumNets) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_DOWN parameter too high, NetIndex=%d\n",
- NetIndex));
- }
-#endif
- /*
- * For now, ignore event if NetIndex != 0.
- */
- if (Param.Para32[1] != 0) {
-
- return (0);
- }
-
- /*
- * Nothing to do if port is already inactive
- */
- if (!pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
-
- return (0);
- }
-
- /*
- * Update statistic counters to calculate new offset for the virtual
- * port and increment semaphore to indicate that an update was already
- * done.
- */
- if (MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1) !=
- SK_PNMI_ERR_OK) {
-
- SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
- return (0);
- }
- pAC->Pnmi.MacUpdatedFlag ++;
-
- /*
- * Calculate new counter offset for virtual port to grant continous
- * counting on port switches. The virtual port consists of all currently
- * active ports. The port down event indicates that a port is removed
- * from the virtual port. Therefore add the counter value of the removed
- * port to the CounterOffset for the virtual port to grant the same
- * counter value.
- */
- for (CounterIndex = 0; CounterIndex < SK_PNMI_MAX_IDX;
- CounterIndex ++) {
-
- if (!StatAddr[CounterIndex][MacType].GetOffset) {
-
- continue;
- }
-
- Value = GetPhysStatVal(pAC, IoC, PhysPortIndex, CounterIndex);
-
- pAC->Pnmi.VirtualCounterOffset[CounterIndex] += Value;
- }
-
- /*
- * Set port to inactive
- */
- pAC->Pnmi.Port[PhysPortIndex].ActiveFlag = SK_FALSE;
-
- pAC->Pnmi.MacUpdatedFlag --;
- break;
-
- case SK_PNMI_EVT_RLMT_ACTIVE_UP:
- PhysPortIndex = (unsigned int)Param.Para32[0];
- NetIndex = (SK_U32)Param.Para32[1];
-
-#ifdef DEBUG
- if (PhysPortIndex >= SK_MAX_MACS) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_UP parameter too high, PhysPort=%d\n",
- PhysPortIndex));
- }
-
- if (NetIndex >= pAC->Rlmt.NumNets) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
- ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_UP parameter too high, NetIndex=%d\n",
- NetIndex));
- }
-#endif
- /*
- * For now, ignore event if NetIndex != 0.
- */
- if (Param.Para32[1] != 0) {
-
- return (0);
- }
-
- /*
- * Nothing to do if port is already active
- */
- if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
-
- return (0);
- }
-
- /*
- * Statistic maintenance
- */
- pAC->Pnmi.RlmtChangeCts ++;
- pAC->Pnmi.RlmtChangeTime = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
-
- /*
- * Store a trap message in the trap buffer and generate an event for
- * user space applications with the SK_DRIVER_SENDEVENT macro.
- */
- QueueRlmtNewMacTrap(pAC, PhysPortIndex);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
-
- /*
- * Update statistic counters to calculate new offset for the virtual
- * port and increment semaphore to indicate that an update was
- * already done.
- */
- if (MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1) !=
- SK_PNMI_ERR_OK) {
-
- SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
- return (0);
- }
- pAC->Pnmi.MacUpdatedFlag ++;
-
- /*
- * Calculate new counter offset for virtual port to grant continous
- * counting on port switches. A new port is added to the virtual port.
- * Therefore substract the counter value of the new port from the
- * CounterOffset for the virtual port to grant the same value.
- */
- for (CounterIndex = 0; CounterIndex < SK_PNMI_MAX_IDX;
- CounterIndex ++) {
-
- if (!StatAddr[CounterIndex][MacType].GetOffset) {
-
- continue;
- }
-
- Value = GetPhysStatVal(pAC, IoC, PhysPortIndex, CounterIndex);
-
- pAC->Pnmi.VirtualCounterOffset[CounterIndex] -= Value;
- }
-
- /*
- * Set port to active
- */
- pAC->Pnmi.Port[PhysPortIndex].ActiveFlag = SK_TRUE;
-
- pAC->Pnmi.MacUpdatedFlag --;
- break;
-
- case SK_PNMI_EVT_RLMT_SEGMENTATION:
- /*
- * Para.Para32[0] contains the NetIndex.
- */
-
- /*
- * Store a trap message in the trap buffer and generate an event for
- * user space applications with the SK_DRIVER_SENDEVENT macro.
- */
- QueueSimpleTrap(pAC, OID_SKGE_TRAP_RLMT_SEGMENTATION);
- (void)SK_DRIVER_SENDEVENT(pAC, IoC);
- break;
-
- case SK_PNMI_EVT_RLMT_SET_NETS:
- /*
- * Param.Para32[0] contains the number of Nets.
- * Param.Para32[1] is reserved, contains -1.
- */
- /*
- * Check number of nets
- */
- MaxNetNumber = pAC->GIni.GIMacsFound;
- if (((unsigned int)Param.Para32[0] < 1)
- || ((unsigned int)Param.Para32[0] > MaxNetNumber)) {
- return (SK_PNMI_ERR_UNKNOWN_NET);
- }
-
- if ((unsigned int)Param.Para32[0] == 1) { /* single net mode */
- pAC->Pnmi.DualNetActiveFlag = SK_FALSE;
- }
- else { /* dual net mode */
- pAC->Pnmi.DualNetActiveFlag = SK_TRUE;
- }
- break;
-
- case SK_PNMI_EVT_VCT_RESET:
- PhysPortIndex = Param.Para32[0];
- pPrt = &pAC->GIni.GP[PhysPortIndex];
- pVctBackupData = &pAC->Pnmi.VctBackup[PhysPortIndex];
-
- if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_PENDING) {
- RetCode = SkGmCableDiagStatus(pAC, IoC, PhysPortIndex, SK_FALSE);
- if (RetCode == 2) {
- /*
- * VCT test is still running.
- * Start VCT timer counter again.
- */
- SK_MEMSET((char *) &Param, 0, sizeof(Param));
- Param.Para32[0] = PhysPortIndex;
- Param.Para32[1] = -1;
- SkTimerStart(pAC, IoC, &pAC->Pnmi.VctTimeout[PhysPortIndex].VctTimer,
- 4000000, SKGE_PNMI, SK_PNMI_EVT_VCT_RESET, Param);
- break;
- }
- pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_PENDING;
- pAC->Pnmi.VctStatus[PhysPortIndex] |=
- (SK_PNMI_VCT_NEW_VCT_DATA | SK_PNMI_VCT_TEST_DONE);
-
- /* Copy results for later use to PNMI struct. */
- for (i = 0; i < 4; i++) {
- if (pPrt->PMdiPairLen[i] > 35) {
- CableLength = 1000 * (((175 * pPrt->PMdiPairLen[i]) / 210) - 28);
- }
- else {
- CableLength = 0;
- }
- pVctBackupData->PMdiPairLen[i] = CableLength;
- pVctBackupData->PMdiPairSts[i] = pPrt->PMdiPairSts[i];
- }
-
- Param.Para32[0] = PhysPortIndex;
- Param.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Param);
- SkEventDispatcher(pAC, IoC);
- }
-
- break;
-
- default:
- break;
- }
-
- SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
- return (0);
-}
-
-
-/******************************************************************************
- *
- * Private functions
- *
- */
-
-/*****************************************************************************
- *
- * PnmiVar - Gets, presets, and sets single OIDs
- *
- * Description:
- * Looks up the requested OID, calls the corresponding handler
- * function, and passes the parameters with the get, preset, or
- * set command. The function is called by SkGePnmiGetVar,
- * SkGePnmiPreSetVar, or SkGePnmiSetVar.
- *
- * Returns:
- * SK_PNMI_ERR_XXX. For details have a look to the description of the
- * calling functions.
- * SK_PNMI_ERR_UNKNOWN_NET The requested NetIndex doesn't exist
- */
-PNMI_STATIC int PnmiVar(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer which stores the mgmt data to be set */
-unsigned int *pLen, /* Total length of mgmt data */
-SK_U32 Instance, /* Instance (1..n) that is to be set or -1 */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int TableIndex;
- int Ret;
-
-
- if ((TableIndex = LookupId(Id)) == (unsigned int)(-1)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_OID);
- }
-
- /*
- * Check NetIndex
- */
- if (NetIndex >= pAC->Rlmt.NumNets) {
- return (SK_PNMI_ERR_UNKNOWN_NET);
- }
-
- SK_PNMI_CHECKFLAGS("PnmiVar: On call");
-
- Ret = IdTable[TableIndex].Func(pAC, IoC, Action, Id, pBuf, pLen,
- Instance, TableIndex, NetIndex);
-
- SK_PNMI_CHECKFLAGS("PnmiVar: On return");
-
- return (Ret);
-}
-
-/*****************************************************************************
- *
- * PnmiStruct - Presets and Sets data in structure SK_PNMI_STRUCT_DATA
- *
- * Description:
- * The return value of the function will also be stored in
- * SK_PNMI_STRUCT_DATA if the passed buffer has the minimum size of
- * SK_PNMI_MIN_STRUCT_SIZE. The sub-function runs through the IdTable,
- * checks which OIDs are able to set, and calls the handler function of
- * the OID to perform the set. The return value of the function will
- * also be stored in SK_PNMI_STRUCT_DATA if the passed buffer has the
- * minimum size of SK_PNMI_MIN_STRUCT_SIZE. The function is called
- * by SkGePnmiPreSetStruct and SkGePnmiSetStruct.
- *
- * Returns:
- * SK_PNMI_ERR_XXX. The codes are described in the calling functions.
- * SK_PNMI_ERR_UNKNOWN_NET The requested NetIndex doesn't exist
- */
-PNMI_STATIC int PnmiStruct(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Set action to be performed */
-char *pBuf, /* Buffer which contains the data to be set */
-unsigned int *pLen, /* Length of buffer */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- int Ret;
- unsigned int TableIndex;
- unsigned int DstOffset;
- unsigned int Len;
- unsigned int InstanceNo;
- unsigned int InstanceCnt;
- SK_U32 Instance;
- SK_U32 Id;
-
-
- /* Check if the passed buffer has the right size */
- if (*pLen < SK_PNMI_STRUCT_SIZE) {
-
- /* Check if we can return the error within the buffer */
- if (*pLen >= SK_PNMI_MIN_STRUCT_SIZE) {
-
- SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_TOO_SHORT,
- (SK_U32)(-1));
- }
-
- *pLen = SK_PNMI_STRUCT_SIZE;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * Check NetIndex
- */
- if (NetIndex >= pAC->Rlmt.NumNets) {
- return (SK_PNMI_ERR_UNKNOWN_NET);
- }
-
- SK_PNMI_CHECKFLAGS("PnmiStruct: On call");
-
- /*
- * Update the values of RLMT and SIRQ and increment semaphores to
- * indicate that an update was already done.
- */
- if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
-
- SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (Ret);
- }
-
- if ((Ret = SirqUpdate(pAC, IoC)) != SK_PNMI_ERR_OK) {
-
- SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (Ret);
- }
-
- pAC->Pnmi.RlmtUpdatedFlag ++;
- pAC->Pnmi.SirqUpdatedFlag ++;
-
- /* Preset/Set values */
- for (TableIndex = 0; TableIndex < ID_TABLE_SIZE; TableIndex ++) {
-
- if ((IdTable[TableIndex].Access != SK_PNMI_RW) &&
- (IdTable[TableIndex].Access != SK_PNMI_WO)) {
-
- continue;
- }
-
- InstanceNo = IdTable[TableIndex].InstanceNo;
- Id = IdTable[TableIndex].Id;
-
- for (InstanceCnt = 1; InstanceCnt <= InstanceNo;
- InstanceCnt ++) {
-
- DstOffset = IdTable[TableIndex].Offset +
- (InstanceCnt - 1) *
- IdTable[TableIndex].StructSize;
-
- /*
- * Because VPD multiple instance variables are
- * not setable we do not need to evaluate VPD
- * instances. Have a look to VPD instance
- * calculation in SkPnmiGetStruct().
- */
- Instance = (SK_U32)InstanceCnt;
-
- /*
- * Evaluate needed buffer length
- */
- Len = 0;
- Ret = IdTable[TableIndex].Func(pAC, IoC,
- SK_PNMI_GET, IdTable[TableIndex].Id,
- NULL, &Len, Instance, TableIndex, NetIndex);
-
- if (Ret == SK_PNMI_ERR_UNKNOWN_INST) {
-
- break;
- }
- if (Ret != SK_PNMI_ERR_TOO_SHORT) {
-
- pAC->Pnmi.RlmtUpdatedFlag --;
- pAC->Pnmi.SirqUpdatedFlag --;
-
- SK_PNMI_CHECKFLAGS("PnmiStruct: On return");
- SK_PNMI_SET_STAT(pBuf,
- SK_PNMI_ERR_GENERAL, DstOffset);
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (SK_PNMI_ERR_GENERAL);
- }
- if (Id == OID_SKGE_VPD_ACTION) {
-
- switch (*(pBuf + DstOffset)) {
-
- case SK_PNMI_VPD_CREATE:
- Len = 3 + *(pBuf + DstOffset + 3);
- break;
-
- case SK_PNMI_VPD_DELETE:
- Len = 3;
- break;
-
- default:
- Len = 1;
- break;
- }
- }
-
- /* Call the OID handler function */
- Ret = IdTable[TableIndex].Func(pAC, IoC, Action,
- IdTable[TableIndex].Id, pBuf + DstOffset,
- &Len, Instance, TableIndex, NetIndex);
-
- if (Ret != SK_PNMI_ERR_OK) {
-
- pAC->Pnmi.RlmtUpdatedFlag --;
- pAC->Pnmi.SirqUpdatedFlag --;
-
- SK_PNMI_CHECKFLAGS("PnmiStruct: On return");
- SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_BAD_VALUE,
- DstOffset);
- *pLen = SK_PNMI_MIN_STRUCT_SIZE;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- }
- }
-
- pAC->Pnmi.RlmtUpdatedFlag --;
- pAC->Pnmi.SirqUpdatedFlag --;
-
- SK_PNMI_CHECKFLAGS("PnmiStruct: On return");
- SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_OK, (SK_U32)(-1));
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * LookupId - Lookup an OID in the IdTable
- *
- * Description:
- * Scans the IdTable to find the table entry of an OID.
- *
- * Returns:
- * The table index or -1 if not found.
- */
-PNMI_STATIC int LookupId(
-SK_U32 Id) /* Object identifier to be searched */
-{
- int i;
-
- for (i = 0; i < ID_TABLE_SIZE; i++) {
-
- if (IdTable[i].Id == Id) {
-
- return i;
- }
- }
-
- return (-1);
-}
-
-/*****************************************************************************
- *
- * OidStruct - Handler of OID_SKGE_ALL_DATA
- *
- * Description:
- * This OID performs a Get/Preset/SetStruct call and returns all data
- * in a SK_PNMI_STRUCT_DATA structure.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int OidStruct(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- if (Id != OID_SKGE_ALL_DATA) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR003,
- SK_PNMI_ERR003MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Check instance. We only handle single instance variables
- */
- if (Instance != (SK_U32)(-1) && Instance != 1) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- switch (Action) {
-
- case SK_PNMI_GET:
- return (SkPnmiGetStruct(pAC, IoC, pBuf, pLen, NetIndex));
-
- case SK_PNMI_PRESET:
- return (SkPnmiPreSetStruct(pAC, IoC, pBuf, pLen, NetIndex));
-
- case SK_PNMI_SET:
- return (SkPnmiSetStruct(pAC, IoC, pBuf, pLen, NetIndex));
- }
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR004, SK_PNMI_ERR004MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
-}
-
-/*****************************************************************************
- *
- * Perform - OID handler of OID_SKGE_ACTION
- *
- * Description:
- * None.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int Perform(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- int Ret;
- SK_U32 ActionOp;
-
-
- /*
- * Check instance. We only handle single instance variables
- */
- if (Instance != (SK_U32)(-1) && Instance != 1) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /* Check if a get should be performed */
- if (Action == SK_PNMI_GET) {
-
- /* A get is easy. We always return the same value */
- ActionOp = (SK_U32)SK_PNMI_ACT_IDLE;
- SK_PNMI_STORE_U32(pBuf, ActionOp);
- *pLen = sizeof(SK_U32);
-
- return (SK_PNMI_ERR_OK);
- }
-
- /* Continue with PRESET/SET action */
- if (*pLen > sizeof(SK_U32)) {
-
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /* Check if the command is a known one */
- SK_PNMI_READ_U32(pBuf, ActionOp);
- if (*pLen > sizeof(SK_U32) ||
- (ActionOp != SK_PNMI_ACT_IDLE &&
- ActionOp != SK_PNMI_ACT_RESET &&
- ActionOp != SK_PNMI_ACT_SELFTEST &&
- ActionOp != SK_PNMI_ACT_RESETCNT)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /* A preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- switch (ActionOp) {
-
- case SK_PNMI_ACT_IDLE:
- /* Nothing to do */
- break;
-
- case SK_PNMI_ACT_RESET:
- /*
- * Perform a driver reset or something that comes near
- * to this.
- */
- Ret = SK_DRIVER_RESET(pAC, IoC);
- if (Ret != 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR005,
- SK_PNMI_ERR005MSG);
-
- return (SK_PNMI_ERR_GENERAL);
- }
- break;
-
- case SK_PNMI_ACT_SELFTEST:
- /*
- * Perform a driver selftest or something similar to this.
- * Currently this feature is not used and will probably
- * implemented in another way.
- */
- Ret = SK_DRIVER_SELFTEST(pAC, IoC);
- pAC->Pnmi.TestResult = Ret;
- break;
-
- case SK_PNMI_ACT_RESETCNT:
- /* Set all counters and timestamps to zero */
- ResetCounter(pAC, IoC, NetIndex);
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR006,
- SK_PNMI_ERR006MSG);
-
- return (SK_PNMI_ERR_GENERAL);
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * Mac8023Stat - OID handler of OID_GEN_XXX and OID_802_3_XXX
- *
- * Description:
- * Retrieves the statistic values of the virtual port (logical
- * index 0). Only special OIDs of NDIS are handled which consist
- * of a 32 bit instead of a 64 bit value. The OIDs are public
- * because perhaps some other platform can use them too.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int Mac8023Stat(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- int Ret;
- SK_U64 StatVal;
- SK_U32 StatVal32;
- SK_BOOL Is64BitReq = SK_FALSE;
-
- /*
- * Only the active Mac is returned
- */
- if (Instance != (SK_U32)(-1) && Instance != 1) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- /*
- * Check action type
- */
- if (Action != SK_PNMI_GET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Check length
- */
- switch (Id) {
-
- case OID_802_3_PERMANENT_ADDRESS:
- case OID_802_3_CURRENT_ADDRESS:
- if (*pLen < sizeof(SK_MAC_ADDR)) {
-
- *pLen = sizeof(SK_MAC_ADDR);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
-#ifndef SK_NDIS_64BIT_CTR
- if (*pLen < sizeof(SK_U32)) {
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
-#else /* SK_NDIS_64BIT_CTR */
-
- /*
- * for compatibility, at least 32bit are required for oid
- */
- if (*pLen < sizeof(SK_U32)) {
- /*
- * but indicate handling for 64bit values,
- * if insufficient space is provided
- */
- *pLen = sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- Is64BitReq = (*pLen < sizeof(SK_U64)) ? SK_FALSE : SK_TRUE;
-#endif /* SK_NDIS_64BIT_CTR */
- break;
- }
-
- /*
- * Update all statistics, because we retrieve virtual MAC, which
- * consists of multiple physical statistics and increment semaphore
- * to indicate that an update was already done.
- */
- Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
- if ( Ret != SK_PNMI_ERR_OK) {
-
- *pLen = 0;
- return (Ret);
- }
- pAC->Pnmi.MacUpdatedFlag ++;
-
- /*
- * Get value (MAC Index 0 identifies the virtual MAC)
- */
- switch (Id) {
-
- case OID_802_3_PERMANENT_ADDRESS:
- CopyMac(pBuf, &pAC->Addr.Net[NetIndex].PermanentMacAddress);
- *pLen = sizeof(SK_MAC_ADDR);
- break;
-
- case OID_802_3_CURRENT_ADDRESS:
- CopyMac(pBuf, &pAC->Addr.Net[NetIndex].CurrentMacAddress);
- *pLen = sizeof(SK_MAC_ADDR);
- break;
-
- default:
- StatVal = GetStatVal(pAC, IoC, 0, IdTable[TableIndex].Param, NetIndex);
-
- /*
- * by default 32bit values are evaluated
- */
- if (!Is64BitReq) {
- StatVal32 = (SK_U32)StatVal;
- SK_PNMI_STORE_U32(pBuf, StatVal32);
- *pLen = sizeof(SK_U32);
- }
- else {
- SK_PNMI_STORE_U64(pBuf, StatVal);
- *pLen = sizeof(SK_U64);
- }
- break;
- }
-
- pAC->Pnmi.MacUpdatedFlag --;
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * MacPrivateStat - OID handler function of OID_SKGE_STAT_XXX
- *
- * Description:
- * Retrieves the XMAC statistic data.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int MacPrivateStat(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int LogPortMax;
- unsigned int LogPortIndex;
- unsigned int PhysPortMax;
- unsigned int Limit;
- unsigned int Offset;
- int Ret;
- SK_U64 StatVal;
-
-
- /*
- * Calculate instance if wished. MAC index 0 is the virtual
- * MAC.
- */
- PhysPortMax = pAC->GIni.GIMacsFound;
- LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
-
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
- LogPortMax--;
- }
-
- if ((Instance != (SK_U32)(-1))) { /* Only one specific instance is queried */
- /* Check instance range */
- if ((Instance < 1) || (Instance > LogPortMax)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
- LogPortIndex = SK_PNMI_PORT_INST2LOG(Instance);
- Limit = LogPortIndex + 1;
- }
-
- else { /* Instance == (SK_U32)(-1), get all Instances of that OID */
-
- LogPortIndex = 0;
- Limit = LogPortMax;
- }
-
-
- /*
- * Check action
- */
- if (Action != SK_PNMI_GET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Check length
- */
- if (*pLen < (Limit - LogPortIndex) * sizeof(SK_U64)) {
-
- *pLen = (Limit - LogPortIndex) * sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * Update XMAC statistic and increment semaphore to indicate that
- * an update was already done.
- */
- Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
- if (Ret != SK_PNMI_ERR_OK) {
-
- *pLen = 0;
- return (Ret);
- }
- pAC->Pnmi.MacUpdatedFlag ++;
-
- /*
- * Get value
- */
- Offset = 0;
- for (; LogPortIndex < Limit; LogPortIndex ++) {
-
- switch (Id) {
-
-/* XXX not yet implemented due to XMAC problems
- case OID_SKGE_STAT_TX_UTIL:
- return (SK_PNMI_ERR_GENERAL);
-*/
-/* XXX not yet implemented due to XMAC problems
- case OID_SKGE_STAT_RX_UTIL:
- return (SK_PNMI_ERR_GENERAL);
-*/
- case OID_SKGE_STAT_RX:
- case OID_SKGE_STAT_TX:
- switch (pAC->GIni.GIMacType) {
- case SK_MAC_XMAC:
- StatVal = GetStatVal(pAC, IoC, LogPortIndex,
- IdTable[TableIndex].Param, NetIndex);
- break;
-
- case SK_MAC_GMAC:
- if (Id == OID_SKGE_STAT_TX) {
-
- StatVal =
- GetStatVal(pAC, IoC, LogPortIndex,
- SK_PNMI_HTX_BROADCAST, NetIndex) +
- GetStatVal(pAC, IoC, LogPortIndex,
- SK_PNMI_HTX_MULTICAST, NetIndex) +
- GetStatVal(pAC, IoC, LogPortIndex,
- SK_PNMI_HTX_UNICAST, NetIndex);
- }
- else {
- StatVal =
- GetStatVal(pAC, IoC, LogPortIndex,
- SK_PNMI_HRX_BROADCAST, NetIndex) +
- GetStatVal(pAC, IoC, LogPortIndex,
- SK_PNMI_HRX_MULTICAST, NetIndex) +
- GetStatVal(pAC, IoC, LogPortIndex,
- SK_PNMI_HRX_UNICAST, NetIndex) +
- GetStatVal(pAC, IoC, LogPortIndex,
- SK_PNMI_HRX_UNDERSIZE, NetIndex);
- }
- break;
-
- default:
- StatVal = 0;
- break;
- }
-
- SK_PNMI_STORE_U64(pBuf + Offset, StatVal);
- break;
-
- default:
- StatVal = GetStatVal(pAC, IoC, LogPortIndex,
- IdTable[TableIndex].Param, NetIndex);
- SK_PNMI_STORE_U64(pBuf + Offset, StatVal);
- break;
- }
-
- Offset += sizeof(SK_U64);
- }
- *pLen = Offset;
-
- pAC->Pnmi.MacUpdatedFlag --;
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * Addr - OID handler function of OID_SKGE_PHYS_CUR_ADDR and _FAC_ADDR
- *
- * Description:
- * Get/Presets/Sets the current and factory MAC address. The MAC
- * address of the virtual port, which is reported to the OS, may
- * not be changed, but the physical ones. A set to the virtual port
- * will be ignored. No error should be reported because otherwise
- * a multiple instance set (-1) would always fail.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int Addr(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- int Ret;
- unsigned int LogPortMax;
- unsigned int PhysPortMax;
- unsigned int LogPortIndex;
- unsigned int PhysPortIndex;
- unsigned int Limit;
- unsigned int Offset = 0;
-
- /*
- * Calculate instance if wished. MAC index 0 is the virtual
- * MAC.
- */
- PhysPortMax = pAC->GIni.GIMacsFound;
- LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
-
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
- LogPortMax--;
- }
-
- if ((Instance != (SK_U32)(-1))) { /* Only one specific instance is queried */
- /* Check instance range */
- if ((Instance < 1) || (Instance > LogPortMax)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
- LogPortIndex = SK_PNMI_PORT_INST2LOG(Instance);
- Limit = LogPortIndex + 1;
- }
-
- else { /* Instance == (SK_U32)(-1), get all Instances of that OID */
-
- LogPortIndex = 0;
- Limit = LogPortMax;
- }
-
- /*
- * Perform Action
- */
- if (Action == SK_PNMI_GET) {
-
- /*
- * Check length
- */
- if (*pLen < (Limit - LogPortIndex) * 6) {
-
- *pLen = (Limit - LogPortIndex) * 6;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * Get value
- */
- for (; LogPortIndex < Limit; LogPortIndex ++) {
-
- switch (Id) {
-
- case OID_SKGE_PHYS_CUR_ADDR:
- if (LogPortIndex == 0) {
- CopyMac(pBuf + Offset, &pAC->Addr.Net[NetIndex].CurrentMacAddress);
- }
- else {
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(pAC, LogPortIndex);
-
- CopyMac(pBuf + Offset,
- &pAC->Addr.Port[PhysPortIndex].CurrentMacAddress);
- }
- Offset += 6;
- break;
-
- case OID_SKGE_PHYS_FAC_ADDR:
- if (LogPortIndex == 0) {
- CopyMac(pBuf + Offset,
- &pAC->Addr.Net[NetIndex].PermanentMacAddress);
- }
- else {
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- CopyMac(pBuf + Offset,
- &pAC->Addr.Port[PhysPortIndex].PermanentMacAddress);
- }
- Offset += 6;
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR008,
- SK_PNMI_ERR008MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
-
- *pLen = Offset;
- }
- else {
- /*
- * The logical MAC address may not be changed only
- * the physical ones
- */
- if (Id == OID_SKGE_PHYS_FAC_ADDR) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Only the current address may be changed
- */
- if (Id != OID_SKGE_PHYS_CUR_ADDR) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR009,
- SK_PNMI_ERR009MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Check length
- */
- if (*pLen < (Limit - LogPortIndex) * 6) {
-
- *pLen = (Limit - LogPortIndex) * 6;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- if (*pLen > (Limit - LogPortIndex) * 6) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /*
- * Check Action
- */
- if (Action == SK_PNMI_PRESET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_OK);
- }
-
- /*
- * Set OID_SKGE_MAC_CUR_ADDR
- */
- for (; LogPortIndex < Limit; LogPortIndex ++, Offset += 6) {
-
- /*
- * A set to virtual port and set of broadcast
- * address will be ignored
- */
- if (LogPortIndex == 0 || SK_MEMCMP(pBuf + Offset,
- "\xff\xff\xff\xff\xff\xff", 6) == 0) {
-
- continue;
- }
-
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(pAC,
- LogPortIndex);
-
- Ret = SkAddrOverride(pAC, IoC, PhysPortIndex,
- (SK_MAC_ADDR *)(pBuf + Offset),
- (LogPortIndex == 0 ? SK_ADDR_VIRTUAL_ADDRESS :
- SK_ADDR_PHYSICAL_ADDRESS));
- if (Ret != SK_ADDR_OVERRIDE_SUCCESS) {
-
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- *pLen = Offset;
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * CsumStat - OID handler function of OID_SKGE_CHKSM_XXX
- *
- * Description:
- * Retrieves the statistic values of the CSUM module. The CSUM data
- * structure must be available in the SK_AC even if the CSUM module
- * is not included, because PNMI reads the statistic data from the
- * CSUM part of SK_AC directly.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int CsumStat(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int Index;
- unsigned int Limit;
- unsigned int Offset = 0;
- SK_U64 StatVal;
-
-
- /*
- * Calculate instance if wished
- */
- if (Instance != (SK_U32)(-1)) {
-
- if ((Instance < 1) || (Instance > SKCS_NUM_PROTOCOLS)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
- Index = (unsigned int)Instance - 1;
- Limit = Index + 1;
- }
- else {
- Index = 0;
- Limit = SKCS_NUM_PROTOCOLS;
- }
-
- /*
- * Check action
- */
- if (Action != SK_PNMI_GET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Check length
- */
- if (*pLen < (Limit - Index) * sizeof(SK_U64)) {
-
- *pLen = (Limit - Index) * sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * Get value
- */
- for (; Index < Limit; Index ++) {
-
- switch (Id) {
-
- case OID_SKGE_CHKSM_RX_OK_CTS:
- StatVal = pAC->Csum.ProtoStats[NetIndex][Index].RxOkCts;
- break;
-
- case OID_SKGE_CHKSM_RX_UNABLE_CTS:
- StatVal = pAC->Csum.ProtoStats[NetIndex][Index].RxUnableCts;
- break;
-
- case OID_SKGE_CHKSM_RX_ERR_CTS:
- StatVal = pAC->Csum.ProtoStats[NetIndex][Index].RxErrCts;
- break;
-
- case OID_SKGE_CHKSM_TX_OK_CTS:
- StatVal = pAC->Csum.ProtoStats[NetIndex][Index].TxOkCts;
- break;
-
- case OID_SKGE_CHKSM_TX_UNABLE_CTS:
- StatVal = pAC->Csum.ProtoStats[NetIndex][Index].TxUnableCts;
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR010,
- SK_PNMI_ERR010MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- SK_PNMI_STORE_U64(pBuf + Offset, StatVal);
- Offset += sizeof(SK_U64);
- }
-
- /*
- * Store used buffer space
- */
- *pLen = Offset;
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * SensorStat - OID handler function of OID_SKGE_SENSOR_XXX
- *
- * Description:
- * Retrieves the statistic values of the I2C module, which handles
- * the temperature and voltage sensors.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int SensorStat(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int i;
- unsigned int Index;
- unsigned int Limit;
- unsigned int Offset;
- unsigned int Len;
- SK_U32 Val32;
- SK_U64 Val64;
-
-
- /*
- * Calculate instance if wished
- */
- if ((Instance != (SK_U32)(-1))) {
-
- if ((Instance < 1) || (Instance > (SK_U32)pAC->I2c.MaxSens)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- Index = (unsigned int)Instance -1;
- Limit = (unsigned int)Instance;
- }
- else {
- Index = 0;
- Limit = (unsigned int) pAC->I2c.MaxSens;
- }
-
- /*
- * Check action
- */
- if (Action != SK_PNMI_GET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Check length
- */
- switch (Id) {
-
- case OID_SKGE_SENSOR_VALUE:
- case OID_SKGE_SENSOR_WAR_THRES_LOW:
- case OID_SKGE_SENSOR_WAR_THRES_UPP:
- case OID_SKGE_SENSOR_ERR_THRES_LOW:
- case OID_SKGE_SENSOR_ERR_THRES_UPP:
- if (*pLen < (Limit - Index) * sizeof(SK_U32)) {
-
- *pLen = (Limit - Index) * sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_SENSOR_DESCR:
- for (Offset = 0, i = Index; i < Limit; i ++) {
-
- Len = (unsigned int)
- SK_STRLEN(pAC->I2c.SenTable[i].SenDesc) + 1;
- if (Len >= SK_PNMI_STRINGLEN2) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR011,
- SK_PNMI_ERR011MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- Offset += Len;
- }
- if (*pLen < Offset) {
-
- *pLen = Offset;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_SENSOR_INDEX:
- case OID_SKGE_SENSOR_TYPE:
- case OID_SKGE_SENSOR_STATUS:
- if (*pLen < Limit - Index) {
-
- *pLen = Limit - Index;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_SENSOR_WAR_CTS:
- case OID_SKGE_SENSOR_WAR_TIME:
- case OID_SKGE_SENSOR_ERR_CTS:
- case OID_SKGE_SENSOR_ERR_TIME:
- if (*pLen < (Limit - Index) * sizeof(SK_U64)) {
-
- *pLen = (Limit - Index) * sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR012,
- SK_PNMI_ERR012MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
-
- }
-
- /*
- * Get value
- */
- for (Offset = 0; Index < Limit; Index ++) {
-
- switch (Id) {
-
- case OID_SKGE_SENSOR_INDEX:
- *(pBuf + Offset) = (char)Index;
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_SENSOR_DESCR:
- Len = SK_STRLEN(pAC->I2c.SenTable[Index].SenDesc);
- SK_MEMCPY(pBuf + Offset + 1,
- pAC->I2c.SenTable[Index].SenDesc, Len);
- *(pBuf + Offset) = (char)Len;
- Offset += Len + 1;
- break;
-
- case OID_SKGE_SENSOR_TYPE:
- *(pBuf + Offset) =
- (char)pAC->I2c.SenTable[Index].SenType;
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_SENSOR_VALUE:
- Val32 = (SK_U32)pAC->I2c.SenTable[Index].SenValue;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- case OID_SKGE_SENSOR_WAR_THRES_LOW:
- Val32 = (SK_U32)pAC->I2c.SenTable[Index].
- SenThreWarnLow;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- case OID_SKGE_SENSOR_WAR_THRES_UPP:
- Val32 = (SK_U32)pAC->I2c.SenTable[Index].
- SenThreWarnHigh;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- case OID_SKGE_SENSOR_ERR_THRES_LOW:
- Val32 = (SK_U32)pAC->I2c.SenTable[Index].
- SenThreErrLow;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- case OID_SKGE_SENSOR_ERR_THRES_UPP:
- Val32 = pAC->I2c.SenTable[Index].SenThreErrHigh;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- case OID_SKGE_SENSOR_STATUS:
- *(pBuf + Offset) =
- (char)pAC->I2c.SenTable[Index].SenErrFlag;
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_SENSOR_WAR_CTS:
- Val64 = pAC->I2c.SenTable[Index].SenWarnCts;
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- case OID_SKGE_SENSOR_ERR_CTS:
- Val64 = pAC->I2c.SenTable[Index].SenErrCts;
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- case OID_SKGE_SENSOR_WAR_TIME:
- Val64 = SK_PNMI_HUNDREDS_SEC(pAC->I2c.SenTable[Index].
- SenBegWarnTS);
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- case OID_SKGE_SENSOR_ERR_TIME:
- Val64 = SK_PNMI_HUNDREDS_SEC(pAC->I2c.SenTable[Index].
- SenBegErrTS);
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- default:
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
- ("SensorStat: Unknown OID should be handled before"));
-
- return (SK_PNMI_ERR_GENERAL);
- }
- }
-
- /*
- * Store used buffer space
- */
- *pLen = Offset;
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * Vpd - OID handler function of OID_SKGE_VPD_XXX
- *
- * Description:
- * Get/preset/set of VPD data. As instance the name of a VPD key
- * can be passed. The Instance parameter is a SK_U32 and can be
- * used as a string buffer for the VPD key, because their maximum
- * length is 4 byte.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int Vpd(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- SK_VPD_STATUS *pVpdStatus;
- unsigned int BufLen;
- char Buf[256];
- char KeyArr[SK_PNMI_VPD_ENTRIES][SK_PNMI_VPD_KEY_SIZE];
- char KeyStr[SK_PNMI_VPD_KEY_SIZE];
- unsigned int KeyNo;
- unsigned int Offset;
- unsigned int Index;
- unsigned int FirstIndex;
- unsigned int LastIndex;
- unsigned int Len;
- int Ret;
- SK_U32 Val32;
-
- /*
- * Get array of all currently stored VPD keys
- */
- Ret = GetVpdKeyArr(pAC, IoC, &KeyArr[0][0], sizeof(KeyArr),
- &KeyNo);
- if (Ret != SK_PNMI_ERR_OK) {
- *pLen = 0;
- return (Ret);
- }
-
- /*
- * If instance is not -1, try to find the requested VPD key for
- * the multiple instance variables. The other OIDs as for example
- * OID VPD_ACTION are single instance variables and must be
- * handled separatly.
- */
- FirstIndex = 0;
- LastIndex = KeyNo;
-
- if ((Instance != (SK_U32)(-1))) {
-
- if (Id == OID_SKGE_VPD_KEY || Id == OID_SKGE_VPD_VALUE ||
- Id == OID_SKGE_VPD_ACCESS) {
-
- SK_STRNCPY(KeyStr, (char *)&Instance, 4);
- KeyStr[4] = 0;
-
- for (Index = 0; Index < KeyNo; Index ++) {
-
- if (SK_STRCMP(KeyStr, KeyArr[Index]) == 0) {
- FirstIndex = Index;
- LastIndex = Index+1;
- break;
- }
- }
- if (Index == KeyNo) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
- }
- else if (Instance != 1) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
- }
-
- /*
- * Get value, if a query should be performed
- */
- if (Action == SK_PNMI_GET) {
-
- switch (Id) {
-
- case OID_SKGE_VPD_FREE_BYTES:
- /* Check length of buffer */
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- /* Get number of free bytes */
- pVpdStatus = VpdStat(pAC, IoC);
- if (pVpdStatus == NULL) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR017,
- SK_PNMI_ERR017MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- if ((pVpdStatus->vpd_status & VPD_VALID) == 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR018,
- SK_PNMI_ERR018MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- Val32 = (SK_U32)pVpdStatus->vpd_free_rw;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_VPD_ENTRIES_LIST:
- /* Check length */
- for (Len = 0, Index = 0; Index < KeyNo; Index ++) {
-
- Len += SK_STRLEN(KeyArr[Index]) + 1;
- }
- if (*pLen < Len) {
-
- *pLen = Len;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /* Get value */
- *(pBuf) = (char)Len - 1;
- for (Offset = 1, Index = 0; Index < KeyNo; Index ++) {
-
- Len = SK_STRLEN(KeyArr[Index]);
- SK_MEMCPY(pBuf + Offset, KeyArr[Index], Len);
-
- Offset += Len;
-
- if (Index < KeyNo - 1) {
-
- *(pBuf + Offset) = ' ';
- Offset ++;
- }
- }
- *pLen = Offset;
- break;
-
- case OID_SKGE_VPD_ENTRIES_NUMBER:
- /* Check length */
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- Val32 = (SK_U32)KeyNo;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_VPD_KEY:
- /* Check buffer length, if it is large enough */
- for (Len = 0, Index = FirstIndex;
- Index < LastIndex; Index ++) {
-
- Len += SK_STRLEN(KeyArr[Index]) + 1;
- }
- if (*pLen < Len) {
-
- *pLen = Len;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * Get the key to an intermediate buffer, because
- * we have to prepend a length byte.
- */
- for (Offset = 0, Index = FirstIndex;
- Index < LastIndex; Index ++) {
-
- Len = SK_STRLEN(KeyArr[Index]);
-
- *(pBuf + Offset) = (char)Len;
- SK_MEMCPY(pBuf + Offset + 1, KeyArr[Index],
- Len);
- Offset += Len + 1;
- }
- *pLen = Offset;
- break;
-
- case OID_SKGE_VPD_VALUE:
- /* Check the buffer length if it is large enough */
- for (Offset = 0, Index = FirstIndex;
- Index < LastIndex; Index ++) {
-
- BufLen = 256;
- if (VpdRead(pAC, IoC, KeyArr[Index], Buf,
- (int *)&BufLen) > 0 ||
- BufLen >= SK_PNMI_VPD_DATALEN) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR021,
- SK_PNMI_ERR021MSG);
-
- return (SK_PNMI_ERR_GENERAL);
- }
- Offset += BufLen + 1;
- }
- if (*pLen < Offset) {
-
- *pLen = Offset;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * Get the value to an intermediate buffer, because
- * we have to prepend a length byte.
- */
- for (Offset = 0, Index = FirstIndex;
- Index < LastIndex; Index ++) {
-
- BufLen = 256;
- if (VpdRead(pAC, IoC, KeyArr[Index], Buf,
- (int *)&BufLen) > 0 ||
- BufLen >= SK_PNMI_VPD_DATALEN) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR022,
- SK_PNMI_ERR022MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- *(pBuf + Offset) = (char)BufLen;
- SK_MEMCPY(pBuf + Offset + 1, Buf, BufLen);
- Offset += BufLen + 1;
- }
- *pLen = Offset;
- break;
-
- case OID_SKGE_VPD_ACCESS:
- if (*pLen < LastIndex - FirstIndex) {
-
- *pLen = LastIndex - FirstIndex;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- for (Offset = 0, Index = FirstIndex;
- Index < LastIndex; Index ++) {
-
- if (VpdMayWrite(KeyArr[Index])) {
-
- *(pBuf + Offset) = SK_PNMI_VPD_RW;
- }
- else {
- *(pBuf + Offset) = SK_PNMI_VPD_RO;
- }
- Offset ++;
- }
- *pLen = Offset;
- break;
-
- case OID_SKGE_VPD_ACTION:
- Offset = LastIndex - FirstIndex;
- if (*pLen < Offset) {
-
- *pLen = Offset;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- SK_MEMSET(pBuf, 0, Offset);
- *pLen = Offset;
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR023,
- SK_PNMI_ERR023MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- else {
- /* The only OID which can be set is VPD_ACTION */
- if (Id != OID_SKGE_VPD_ACTION) {
-
- if (Id == OID_SKGE_VPD_FREE_BYTES ||
- Id == OID_SKGE_VPD_ENTRIES_LIST ||
- Id == OID_SKGE_VPD_ENTRIES_NUMBER ||
- Id == OID_SKGE_VPD_KEY ||
- Id == OID_SKGE_VPD_VALUE ||
- Id == OID_SKGE_VPD_ACCESS) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR024,
- SK_PNMI_ERR024MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * From this point we handle VPD_ACTION. Check the buffer
- * length. It should at least have the size of one byte.
- */
- if (*pLen < 1) {
-
- *pLen = 1;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- /*
- * The first byte contains the VPD action type we should
- * perform.
- */
- switch (*pBuf) {
-
- case SK_PNMI_VPD_IGNORE:
- /* Nothing to do */
- break;
-
- case SK_PNMI_VPD_CREATE:
- /*
- * We have to create a new VPD entry or we modify
- * an existing one. Check first the buffer length.
- */
- if (*pLen < 4) {
-
- *pLen = 4;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- KeyStr[0] = pBuf[1];
- KeyStr[1] = pBuf[2];
- KeyStr[2] = 0;
-
- /*
- * Is the entry writable or does it belong to the
- * read-only area?
- */
- if (!VpdMayWrite(KeyStr)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- Offset = (int)pBuf[3] & 0xFF;
-
- SK_MEMCPY(Buf, pBuf + 4, Offset);
- Buf[Offset] = 0;
-
- /* A preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- /* Write the new entry or modify an existing one */
- Ret = VpdWrite(pAC, IoC, KeyStr, Buf);
- if (Ret == SK_PNMI_VPD_NOWRITE ) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- else if (Ret != SK_PNMI_VPD_OK) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR025,
- SK_PNMI_ERR025MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Perform an update of the VPD data. This is
- * not mandantory, but just to be sure.
- */
- Ret = VpdUpdate(pAC, IoC);
- if (Ret != SK_PNMI_VPD_OK) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR026,
- SK_PNMI_ERR026MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- break;
-
- case SK_PNMI_VPD_DELETE:
- /* Check if the buffer size is plausible */
- if (*pLen < 3) {
-
- *pLen = 3;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- if (*pLen > 3) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- KeyStr[0] = pBuf[1];
- KeyStr[1] = pBuf[2];
- KeyStr[2] = 0;
-
- /* Find the passed key in the array */
- for (Index = 0; Index < KeyNo; Index ++) {
-
- if (SK_STRCMP(KeyStr, KeyArr[Index]) == 0) {
-
- break;
- }
- }
- /*
- * If we cannot find the key it is wrong, so we
- * return an appropriate error value.
- */
- if (Index == KeyNo) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- if (Action == SK_PNMI_PRESET) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- /* Ok, you wanted it and you will get it */
- Ret = VpdDelete(pAC, IoC, KeyStr);
- if (Ret != SK_PNMI_VPD_OK) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR027,
- SK_PNMI_ERR027MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Perform an update of the VPD data. This is
- * not mandantory, but just to be sure.
- */
- Ret = VpdUpdate(pAC, IoC);
- if (Ret != SK_PNMI_VPD_OK) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR028,
- SK_PNMI_ERR028MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- break;
-
- default:
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * General - OID handler function of various single instance OIDs
- *
- * Description:
- * The code is simple. No description necessary.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int General(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- int Ret;
- unsigned int Index;
- unsigned int Len;
- unsigned int Offset;
- unsigned int Val;
- SK_U8 Val8;
- SK_U16 Val16;
- SK_U32 Val32;
- SK_U64 Val64;
- SK_U64 Val64RxHwErrs = 0;
- SK_U64 Val64TxHwErrs = 0;
- SK_BOOL Is64BitReq = SK_FALSE;
- char Buf[256];
- int MacType;
-
- /*
- * Check instance. We only handle single instance variables
- */
- if (Instance != (SK_U32)(-1) && Instance != 1) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- /*
- * Check action. We only allow get requests.
- */
- if (Action != SK_PNMI_GET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- MacType = pAC->GIni.GIMacType;
-
- /*
- * Check length for the various supported OIDs
- */
- switch (Id) {
-
- case OID_GEN_XMIT_ERROR:
- case OID_GEN_RCV_ERROR:
- case OID_GEN_RCV_NO_BUFFER:
-#ifndef SK_NDIS_64BIT_CTR
- if (*pLen < sizeof(SK_U32)) {
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
-#else /* SK_NDIS_64BIT_CTR */
-
- /*
- * for compatibility, at least 32bit are required for oid
- */
- if (*pLen < sizeof(SK_U32)) {
- /*
- * but indicate handling for 64bit values,
- * if insufficient space is provided
- */
- *pLen = sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
-
- Is64BitReq = (*pLen < sizeof(SK_U64)) ? SK_FALSE : SK_TRUE;
-#endif /* SK_NDIS_64BIT_CTR */
- break;
-
- case OID_SKGE_PORT_NUMBER:
- case OID_SKGE_DEVICE_TYPE:
- case OID_SKGE_RESULT:
- case OID_SKGE_RLMT_MONITOR_NUMBER:
- case OID_GEN_TRANSMIT_QUEUE_LENGTH:
- case OID_SKGE_TRAP_NUMBER:
- case OID_SKGE_MDB_VERSION:
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_CHIPSET:
- if (*pLen < sizeof(SK_U16)) {
-
- *pLen = sizeof(SK_U16);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_BUS_TYPE:
- case OID_SKGE_BUS_SPEED:
- case OID_SKGE_BUS_WIDTH:
- case OID_SKGE_SENSOR_NUMBER:
- case OID_SKGE_CHKSM_NUMBER:
- if (*pLen < sizeof(SK_U8)) {
-
- *pLen = sizeof(SK_U8);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_TX_SW_QUEUE_LEN:
- case OID_SKGE_TX_SW_QUEUE_MAX:
- case OID_SKGE_TX_RETRY:
- case OID_SKGE_RX_INTR_CTS:
- case OID_SKGE_TX_INTR_CTS:
- case OID_SKGE_RX_NO_BUF_CTS:
- case OID_SKGE_TX_NO_BUF_CTS:
- case OID_SKGE_TX_USED_DESCR_NO:
- case OID_SKGE_RX_DELIVERED_CTS:
- case OID_SKGE_RX_OCTETS_DELIV_CTS:
- case OID_SKGE_RX_HW_ERROR_CTS:
- case OID_SKGE_TX_HW_ERROR_CTS:
- case OID_SKGE_IN_ERRORS_CTS:
- case OID_SKGE_OUT_ERROR_CTS:
- case OID_SKGE_ERR_RECOVERY_CTS:
- case OID_SKGE_SYSUPTIME:
- if (*pLen < sizeof(SK_U64)) {
-
- *pLen = sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
- /* Checked later */
- break;
- }
-
- /* Update statistic */
- if (Id == OID_SKGE_RX_HW_ERROR_CTS ||
- Id == OID_SKGE_TX_HW_ERROR_CTS ||
- Id == OID_SKGE_IN_ERRORS_CTS ||
- Id == OID_SKGE_OUT_ERROR_CTS ||
- Id == OID_GEN_XMIT_ERROR ||
- Id == OID_GEN_RCV_ERROR) {
-
- /* Force the XMAC to update its statistic counters and
- * Increment semaphore to indicate that an update was
- * already done.
- */
- Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
- if (Ret != SK_PNMI_ERR_OK) {
-
- *pLen = 0;
- return (Ret);
- }
- pAC->Pnmi.MacUpdatedFlag ++;
-
- /*
- * Some OIDs consist of multiple hardware counters. Those
- * values which are contained in all of them will be added
- * now.
- */
- switch (Id) {
-
- case OID_SKGE_RX_HW_ERROR_CTS:
- case OID_SKGE_IN_ERRORS_CTS:
- case OID_GEN_RCV_ERROR:
- Val64RxHwErrs =
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_MISSED, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_FRAMING, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_OVERFLOW, NetIndex)+
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_JABBER, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_CARRIER, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_IRLENGTH, NetIndex)+
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_SYMBOL, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_SHORTS, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_RUNT, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_TOO_LONG, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_FCS, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_CEXT, NetIndex);
- break;
-
- case OID_SKGE_TX_HW_ERROR_CTS:
- case OID_SKGE_OUT_ERROR_CTS:
- case OID_GEN_XMIT_ERROR:
- Val64TxHwErrs =
- GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_EXCESS_COL, NetIndex) +
- GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_LATE_COL, NetIndex)+
- GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_UNDERRUN, NetIndex)+
- GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_CARRIER, NetIndex);
- break;
- }
- }
-
- /*
- * Retrieve value
- */
- switch (Id) {
-
- case OID_SKGE_SUPPORTED_LIST:
- Len = ID_TABLE_SIZE * sizeof(SK_U32);
- if (*pLen < Len) {
-
- *pLen = Len;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- for (Offset = 0, Index = 0; Offset < Len;
- Offset += sizeof(SK_U32), Index ++) {
-
- Val32 = (SK_U32)IdTable[Index].Id;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- }
- *pLen = Len;
- break;
-
- case OID_SKGE_PORT_NUMBER:
- Val32 = (SK_U32)pAC->GIni.GIMacsFound;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_DEVICE_TYPE:
- Val32 = (SK_U32)pAC->Pnmi.DeviceType;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_DRIVER_DESCR:
- if (pAC->Pnmi.pDriverDescription == NULL) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR007,
- SK_PNMI_ERR007MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- Len = SK_STRLEN(pAC->Pnmi.pDriverDescription) + 1;
- if (Len > SK_PNMI_STRINGLEN1) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR029,
- SK_PNMI_ERR029MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- if (*pLen < Len) {
-
- *pLen = Len;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- *pBuf = (char)(Len - 1);
- SK_MEMCPY(pBuf + 1, pAC->Pnmi.pDriverDescription, Len - 1);
- *pLen = Len;
- break;
-
- case OID_SKGE_DRIVER_VERSION:
- if (pAC->Pnmi.pDriverVersion == NULL) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR030,
- SK_PNMI_ERR030MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- Len = SK_STRLEN(pAC->Pnmi.pDriverVersion) + 1;
- if (Len > SK_PNMI_STRINGLEN1) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR031,
- SK_PNMI_ERR031MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- if (*pLen < Len) {
-
- *pLen = Len;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- *pBuf = (char)(Len - 1);
- SK_MEMCPY(pBuf + 1, pAC->Pnmi.pDriverVersion, Len - 1);
- *pLen = Len;
- break;
-
- case OID_SKGE_HW_DESCR:
- /*
- * The hardware description is located in the VPD. This
- * query may move to the initialisation routine. But
- * the VPD data is cached and therefore a call here
- * will not make much difference.
- */
- Len = 256;
- if (VpdRead(pAC, IoC, VPD_NAME, Buf, (int *)&Len) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR032,
- SK_PNMI_ERR032MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- Len ++;
- if (Len > SK_PNMI_STRINGLEN1) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR033,
- SK_PNMI_ERR033MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- if (*pLen < Len) {
-
- *pLen = Len;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- *pBuf = (char)(Len - 1);
- SK_MEMCPY(pBuf + 1, Buf, Len - 1);
- *pLen = Len;
- break;
-
- case OID_SKGE_HW_VERSION:
- /* Oh, I love to do some string manipulation */
- if (*pLen < 5) {
-
- *pLen = 5;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- Val8 = (SK_U8)pAC->GIni.GIPciHwRev;
- pBuf[0] = 4;
- pBuf[1] = 'v';
- pBuf[2] = (char)(0x30 | ((Val8 >> 4) & 0x0F));
- pBuf[3] = '.';
- pBuf[4] = (char)(0x30 | (Val8 & 0x0F));
- *pLen = 5;
- break;
-
- case OID_SKGE_CHIPSET:
- Val16 = pAC->Pnmi.Chipset;
- SK_PNMI_STORE_U16(pBuf, Val16);
- *pLen = sizeof(SK_U16);
- break;
-
- case OID_SKGE_BUS_TYPE:
- *pBuf = (char)SK_PNMI_BUS_PCI;
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_BUS_SPEED:
- *pBuf = pAC->Pnmi.PciBusSpeed;
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_BUS_WIDTH:
- *pBuf = pAC->Pnmi.PciBusWidth;
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_RESULT:
- Val32 = pAC->Pnmi.TestResult;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_SENSOR_NUMBER:
- *pBuf = (char)pAC->I2c.MaxSens;
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_CHKSM_NUMBER:
- *pBuf = SKCS_NUM_PROTOCOLS;
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_TRAP_NUMBER:
- GetTrapQueueLen(pAC, &Len, &Val);
- Val32 = (SK_U32)Val;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_TRAP:
- GetTrapQueueLen(pAC, &Len, &Val);
- if (*pLen < Len) {
-
- *pLen = Len;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- CopyTrapQueue(pAC, pBuf);
- *pLen = Len;
- break;
-
- case OID_SKGE_RLMT_MONITOR_NUMBER:
-/* XXX Not yet implemented by RLMT therefore we return zero elements */
- Val32 = 0;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_TX_SW_QUEUE_LEN:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].TxSwQueueLen;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].TxSwQueueLen +
- pAC->Pnmi.BufPort[1].TxSwQueueLen;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].TxSwQueueLen;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].TxSwQueueLen +
- pAC->Pnmi.Port[1].TxSwQueueLen;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
-
- case OID_SKGE_TX_SW_QUEUE_MAX:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].TxSwQueueMax;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].TxSwQueueMax +
- pAC->Pnmi.BufPort[1].TxSwQueueMax;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].TxSwQueueMax;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].TxSwQueueMax +
- pAC->Pnmi.Port[1].TxSwQueueMax;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_TX_RETRY:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].TxRetryCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].TxRetryCts +
- pAC->Pnmi.BufPort[1].TxRetryCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].TxRetryCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].TxRetryCts +
- pAC->Pnmi.Port[1].TxRetryCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RX_INTR_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].RxIntrCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].RxIntrCts +
- pAC->Pnmi.BufPort[1].RxIntrCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].RxIntrCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].RxIntrCts +
- pAC->Pnmi.Port[1].RxIntrCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_TX_INTR_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].TxIntrCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].TxIntrCts +
- pAC->Pnmi.BufPort[1].TxIntrCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].TxIntrCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].TxIntrCts +
- pAC->Pnmi.Port[1].TxIntrCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RX_NO_BUF_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].RxNoBufCts +
- pAC->Pnmi.BufPort[1].RxNoBufCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].RxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].RxNoBufCts +
- pAC->Pnmi.Port[1].RxNoBufCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_TX_NO_BUF_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].TxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].TxNoBufCts +
- pAC->Pnmi.BufPort[1].TxNoBufCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].TxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].TxNoBufCts +
- pAC->Pnmi.Port[1].TxNoBufCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_TX_USED_DESCR_NO:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].TxUsedDescrNo;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].TxUsedDescrNo +
- pAC->Pnmi.BufPort[1].TxUsedDescrNo;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].TxUsedDescrNo;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].TxUsedDescrNo +
- pAC->Pnmi.Port[1].TxUsedDescrNo;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RX_DELIVERED_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].RxDeliveredCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].RxDeliveredCts +
- pAC->Pnmi.BufPort[1].RxDeliveredCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].RxDeliveredCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].RxDeliveredCts +
- pAC->Pnmi.Port[1].RxDeliveredCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RX_OCTETS_DELIV_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].RxOctetsDeliveredCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].RxOctetsDeliveredCts +
- pAC->Pnmi.BufPort[1].RxOctetsDeliveredCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].RxOctetsDeliveredCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].RxOctetsDeliveredCts +
- pAC->Pnmi.Port[1].RxOctetsDeliveredCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RX_HW_ERROR_CTS:
- SK_PNMI_STORE_U64(pBuf, Val64RxHwErrs);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_TX_HW_ERROR_CTS:
- SK_PNMI_STORE_U64(pBuf, Val64TxHwErrs);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_IN_ERRORS_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = Val64RxHwErrs + pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = Val64RxHwErrs +
- pAC->Pnmi.BufPort[0].RxNoBufCts +
- pAC->Pnmi.BufPort[1].RxNoBufCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = Val64RxHwErrs + pAC->Pnmi.Port[NetIndex].RxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = Val64RxHwErrs +
- pAC->Pnmi.Port[0].RxNoBufCts +
- pAC->Pnmi.Port[1].RxNoBufCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_OUT_ERROR_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = Val64TxHwErrs + pAC->Pnmi.BufPort[NetIndex].TxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = Val64TxHwErrs +
- pAC->Pnmi.BufPort[0].TxNoBufCts +
- pAC->Pnmi.BufPort[1].TxNoBufCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = Val64TxHwErrs + pAC->Pnmi.Port[NetIndex].TxNoBufCts;
- }
- /* Single net mode */
- else {
- Val64 = Val64TxHwErrs +
- pAC->Pnmi.Port[0].TxNoBufCts +
- pAC->Pnmi.Port[1].TxNoBufCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_ERR_RECOVERY_CTS:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].ErrRecoveryCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.BufPort[0].ErrRecoveryCts +
- pAC->Pnmi.BufPort[1].ErrRecoveryCts;
- }
- }
- else {
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- Val64 = pAC->Pnmi.Port[NetIndex].ErrRecoveryCts;
- }
- /* Single net mode */
- else {
- Val64 = pAC->Pnmi.Port[0].ErrRecoveryCts +
- pAC->Pnmi.Port[1].ErrRecoveryCts;
- }
- }
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_SYSUPTIME:
- Val64 = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
- Val64 -= pAC->Pnmi.StartUpTime;
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_MDB_VERSION:
- Val32 = SK_PNMI_MDB_VERSION;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_GEN_RCV_ERROR:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- Val64 = Val64RxHwErrs + pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
- }
- else {
- Val64 = Val64RxHwErrs + pAC->Pnmi.Port[NetIndex].RxNoBufCts;
- }
-
- /*
- * by default 32bit values are evaluated
- */
- if (!Is64BitReq) {
- Val32 = (SK_U32)Val64;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- }
- else {
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- }
- break;
-
- case OID_GEN_XMIT_ERROR:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- Val64 = Val64TxHwErrs + pAC->Pnmi.BufPort[NetIndex].TxNoBufCts;
- }
- else {
- Val64 = Val64TxHwErrs + pAC->Pnmi.Port[NetIndex].TxNoBufCts;
- }
-
- /*
- * by default 32bit values are evaluated
- */
- if (!Is64BitReq) {
- Val32 = (SK_U32)Val64;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- }
- else {
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- }
- break;
-
- case OID_GEN_RCV_NO_BUFFER:
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (MacType == SK_MAC_XMAC) {
- Val64 = pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
- }
- else {
- Val64 = pAC->Pnmi.Port[NetIndex].RxNoBufCts;
- }
-
- /*
- * by default 32bit values are evaluated
- */
- if (!Is64BitReq) {
- Val32 = (SK_U32)Val64;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- }
- else {
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- }
- break;
-
- case OID_GEN_TRANSMIT_QUEUE_LENGTH:
- Val32 = (SK_U32)pAC->Pnmi.Port[NetIndex].TxSwQueueLen;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR034,
- SK_PNMI_ERR034MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- if (Id == OID_SKGE_RX_HW_ERROR_CTS ||
- Id == OID_SKGE_TX_HW_ERROR_CTS ||
- Id == OID_SKGE_IN_ERRORS_CTS ||
- Id == OID_SKGE_OUT_ERROR_CTS ||
- Id == OID_GEN_XMIT_ERROR ||
- Id == OID_GEN_RCV_ERROR) {
-
- pAC->Pnmi.MacUpdatedFlag --;
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * Rlmt - OID handler function of OID_SKGE_RLMT_XXX single instance.
- *
- * Description:
- * Get/Presets/Sets the RLMT OIDs.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int Rlmt(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- int Ret;
- unsigned int PhysPortIndex;
- unsigned int PhysPortMax;
- SK_EVPARA EventParam;
- SK_U32 Val32;
- SK_U64 Val64;
-
-
- /*
- * Check instance. Only single instance OIDs are allowed here.
- */
- if (Instance != (SK_U32)(-1) && Instance != 1) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- /*
- * Perform the requested action
- */
- if (Action == SK_PNMI_GET) {
-
- /*
- * Check if the buffer length is large enough.
- */
-
- switch (Id) {
-
- case OID_SKGE_RLMT_MODE:
- case OID_SKGE_RLMT_PORT_ACTIVE:
- case OID_SKGE_RLMT_PORT_PREFERRED:
- if (*pLen < sizeof(SK_U8)) {
-
- *pLen = sizeof(SK_U8);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_RLMT_PORT_NUMBER:
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_RLMT_CHANGE_CTS:
- case OID_SKGE_RLMT_CHANGE_TIME:
- case OID_SKGE_RLMT_CHANGE_ESTIM:
- case OID_SKGE_RLMT_CHANGE_THRES:
- if (*pLen < sizeof(SK_U64)) {
-
- *pLen = sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR035,
- SK_PNMI_ERR035MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Update RLMT statistic and increment semaphores to indicate
- * that an update was already done. Maybe RLMT will hold its
- * statistic always up to date some time. Then we can
- * remove this type of call.
- */
- if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
-
- *pLen = 0;
- return (Ret);
- }
- pAC->Pnmi.RlmtUpdatedFlag ++;
-
- /*
- * Retrieve Value
- */
- switch (Id) {
-
- case OID_SKGE_RLMT_MODE:
- *pBuf = (char)pAC->Rlmt.Net[0].RlmtMode;
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_RLMT_PORT_NUMBER:
- Val32 = (SK_U32)pAC->GIni.GIMacsFound;
- SK_PNMI_STORE_U32(pBuf, Val32);
- *pLen = sizeof(SK_U32);
- break;
-
- case OID_SKGE_RLMT_PORT_ACTIVE:
- *pBuf = 0;
- /*
- * If multiple ports may become active this OID
- * doesn't make sense any more. A new variable in
- * the port structure should be created. However,
- * for this variable the first active port is
- * returned.
- */
- PhysPortMax = pAC->GIni.GIMacsFound;
-
- for (PhysPortIndex = 0; PhysPortIndex < PhysPortMax;
- PhysPortIndex ++) {
-
- if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
-
- *pBuf = (char)SK_PNMI_PORT_PHYS2LOG(PhysPortIndex);
- break;
- }
- }
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_RLMT_PORT_PREFERRED:
- *pBuf = (char)SK_PNMI_PORT_PHYS2LOG(pAC->Rlmt.Net[NetIndex].Preference);
- *pLen = sizeof(char);
- break;
-
- case OID_SKGE_RLMT_CHANGE_CTS:
- Val64 = pAC->Pnmi.RlmtChangeCts;
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RLMT_CHANGE_TIME:
- Val64 = pAC->Pnmi.RlmtChangeTime;
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RLMT_CHANGE_ESTIM:
- Val64 = pAC->Pnmi.RlmtChangeEstimate.Estimate;
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- case OID_SKGE_RLMT_CHANGE_THRES:
- Val64 = pAC->Pnmi.RlmtChangeThreshold;
- SK_PNMI_STORE_U64(pBuf, Val64);
- *pLen = sizeof(SK_U64);
- break;
-
- default:
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
- ("Rlmt: Unknown OID should be handled before"));
-
- pAC->Pnmi.RlmtUpdatedFlag --;
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- pAC->Pnmi.RlmtUpdatedFlag --;
- }
- else {
- /* Perform a preset or set */
- switch (Id) {
-
- case OID_SKGE_RLMT_MODE:
- /* Check if the buffer length is plausible */
- if (*pLen < sizeof(char)) {
-
- *pLen = sizeof(char);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- /* Check if the value range is correct */
- if (*pLen != sizeof(char) ||
- (*pBuf & SK_PNMI_RLMT_MODE_CHK_LINK) == 0 ||
- *(SK_U8 *)pBuf > 15) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- /* The preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_OK);
- }
- /* Send an event to RLMT to change the mode */
- SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
- EventParam.Para32[0] |= (SK_U32)(*pBuf);
- EventParam.Para32[1] = 0;
- if (SkRlmtEvent(pAC, IoC, SK_RLMT_MODE_CHANGE,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR037,
- SK_PNMI_ERR037MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- break;
-
- case OID_SKGE_RLMT_PORT_PREFERRED:
- /* Check if the buffer length is plausible */
- if (*pLen < sizeof(char)) {
-
- *pLen = sizeof(char);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- /* Check if the value range is correct */
- if (*pLen != sizeof(char) || *(SK_U8 *)pBuf >
- (SK_U8)pAC->GIni.GIMacsFound) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- /* The preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_OK);
- }
-
- /*
- * Send an event to RLMT change the preferred port.
- * A param of -1 means automatic mode. RLMT will
- * make the decision which is the preferred port.
- */
- SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
- EventParam.Para32[0] = (SK_U32)(*pBuf) - 1;
- EventParam.Para32[1] = NetIndex;
- if (SkRlmtEvent(pAC, IoC, SK_RLMT_PREFPORT_CHANGE,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR038,
- SK_PNMI_ERR038MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- break;
-
- case OID_SKGE_RLMT_CHANGE_THRES:
- /* Check if the buffer length is plausible */
- if (*pLen < sizeof(SK_U64)) {
-
- *pLen = sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- /*
- * There are not many restrictions to the
- * value range.
- */
- if (*pLen != sizeof(SK_U64)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- /* A preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_OK);
- }
- /*
- * Store the new threshold, which will be taken
- * on the next timer event.
- */
- SK_PNMI_READ_U64(pBuf, Val64);
- pAC->Pnmi.RlmtChangeThreshold = Val64;
- break;
-
- default:
- /* The other OIDs are not be able for set */
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * RlmtStat - OID handler function of OID_SKGE_RLMT_XXX multiple instance.
- *
- * Description:
- * Performs get requests on multiple instance variables.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int RlmtStat(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int PhysPortMax;
- unsigned int PhysPortIndex;
- unsigned int Limit;
- unsigned int Offset;
- int Ret;
- SK_U32 Val32;
- SK_U64 Val64;
-
- /*
- * Calculate the port indexes from the instance
- */
- PhysPortMax = pAC->GIni.GIMacsFound;
-
- if ((Instance != (SK_U32)(-1))) {
- /* Check instance range */
- if ((Instance < 1) || (Instance > PhysPortMax)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- /* Single net mode */
- PhysPortIndex = Instance - 1;
-
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- PhysPortIndex = NetIndex;
- }
-
- /* Both net modes */
- Limit = PhysPortIndex + 1;
- }
- else {
- /* Single net mode */
- PhysPortIndex = 0;
- Limit = PhysPortMax;
-
- /* Dual net mode */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- PhysPortIndex = NetIndex;
- Limit = PhysPortIndex + 1;
- }
- }
-
- /*
- * Currently only get requests are allowed.
- */
- if (Action != SK_PNMI_GET) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Check if the buffer length is large enough.
- */
- switch (Id) {
-
- case OID_SKGE_RLMT_PORT_INDEX:
- case OID_SKGE_RLMT_STATUS:
- if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U32)) {
-
- *pLen = (Limit - PhysPortIndex) * sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_RLMT_TX_HELLO_CTS:
- case OID_SKGE_RLMT_RX_HELLO_CTS:
- case OID_SKGE_RLMT_TX_SP_REQ_CTS:
- case OID_SKGE_RLMT_RX_SP_CTS:
- if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U64)) {
-
- *pLen = (Limit - PhysPortIndex) * sizeof(SK_U64);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR039,
- SK_PNMI_ERR039MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
-
- }
-
- /*
- * Update statistic and increment semaphores to indicate that
- * an update was already done.
- */
- if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
-
- *pLen = 0;
- return (Ret);
- }
- pAC->Pnmi.RlmtUpdatedFlag ++;
-
- /*
- * Get value
- */
- Offset = 0;
- for (; PhysPortIndex < Limit; PhysPortIndex ++) {
-
- switch (Id) {
-
- case OID_SKGE_RLMT_PORT_INDEX:
- Val32 = PhysPortIndex;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- case OID_SKGE_RLMT_STATUS:
- if (pAC->Rlmt.Port[PhysPortIndex].PortState ==
- SK_RLMT_PS_INIT ||
- pAC->Rlmt.Port[PhysPortIndex].PortState ==
- SK_RLMT_PS_DOWN) {
-
- Val32 = SK_PNMI_RLMT_STATUS_ERROR;
- }
- else if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
-
- Val32 = SK_PNMI_RLMT_STATUS_ACTIVE;
- }
- else {
- Val32 = SK_PNMI_RLMT_STATUS_STANDBY;
- }
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- case OID_SKGE_RLMT_TX_HELLO_CTS:
- Val64 = pAC->Rlmt.Port[PhysPortIndex].TxHelloCts;
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- case OID_SKGE_RLMT_RX_HELLO_CTS:
- Val64 = pAC->Rlmt.Port[PhysPortIndex].RxHelloCts;
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- case OID_SKGE_RLMT_TX_SP_REQ_CTS:
- Val64 = pAC->Rlmt.Port[PhysPortIndex].TxSpHelloReqCts;
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- case OID_SKGE_RLMT_RX_SP_CTS:
- Val64 = pAC->Rlmt.Port[PhysPortIndex].RxSpHelloCts;
- SK_PNMI_STORE_U64(pBuf + Offset, Val64);
- Offset += sizeof(SK_U64);
- break;
-
- default:
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
- ("RlmtStat: Unknown OID should be errored before"));
-
- pAC->Pnmi.RlmtUpdatedFlag --;
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- *pLen = Offset;
-
- pAC->Pnmi.RlmtUpdatedFlag --;
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * MacPrivateConf - OID handler function of OIDs concerning the configuration
- *
- * Description:
- * Get/Presets/Sets the OIDs concerning the configuration.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int MacPrivateConf(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int PhysPortMax;
- unsigned int PhysPortIndex;
- unsigned int LogPortMax;
- unsigned int LogPortIndex;
- unsigned int Limit;
- unsigned int Offset;
- char Val8;
- int Ret;
- SK_EVPARA EventParam;
- SK_U32 Val32;
-
-
- /*
- * Calculate instance if wished. MAC index 0 is the virtual
- * MAC.
- */
- PhysPortMax = pAC->GIni.GIMacsFound;
- LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
-
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
- LogPortMax--;
- }
-
- if ((Instance != (SK_U32)(-1))) { /* Only one specific instance is queried */
- /* Check instance range */
- if ((Instance < 1) || (Instance > LogPortMax)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
- LogPortIndex = SK_PNMI_PORT_INST2LOG(Instance);
- Limit = LogPortIndex + 1;
- }
-
- else { /* Instance == (SK_U32)(-1), get all Instances of that OID */
-
- LogPortIndex = 0;
- Limit = LogPortMax;
- }
-
- /*
- * Perform action
- */
- if (Action == SK_PNMI_GET) {
-
- /*
- * Check length
- */
- switch (Id) {
-
- case OID_SKGE_PMD:
- case OID_SKGE_CONNECTOR:
- case OID_SKGE_LINK_CAP:
- case OID_SKGE_LINK_MODE:
- case OID_SKGE_LINK_MODE_STATUS:
- case OID_SKGE_LINK_STATUS:
- case OID_SKGE_FLOWCTRL_CAP:
- case OID_SKGE_FLOWCTRL_MODE:
- case OID_SKGE_FLOWCTRL_STATUS:
- case OID_SKGE_PHY_OPERATION_CAP:
- case OID_SKGE_PHY_OPERATION_MODE:
- case OID_SKGE_PHY_OPERATION_STATUS:
- case OID_SKGE_SPEED_CAP:
- case OID_SKGE_SPEED_MODE:
- case OID_SKGE_SPEED_STATUS:
- if (*pLen < (Limit - LogPortIndex) * sizeof(SK_U8)) {
-
- *pLen = (Limit - LogPortIndex) *
- sizeof(SK_U8);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_MTU:
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR041,
- SK_PNMI_ERR041MSG);
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Update statistic and increment semaphore to indicate
- * that an update was already done.
- */
- if ((Ret = SirqUpdate(pAC, IoC)) != SK_PNMI_ERR_OK) {
-
- *pLen = 0;
- return (Ret);
- }
- pAC->Pnmi.SirqUpdatedFlag ++;
-
- /*
- * Get value
- */
- Offset = 0;
- for (; LogPortIndex < Limit; LogPortIndex ++) {
-
- switch (Id) {
-
- case OID_SKGE_PMD:
- *(pBuf + Offset) = pAC->Pnmi.PMD;
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_CONNECTOR:
- *(pBuf + Offset) = pAC->Pnmi.Connector;
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_LINK_CAP:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical ports */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PLinkCap;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkCap;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_LINK_MODE:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical ports */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PLinkModeConf;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkModeConf;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_LINK_MODE_STATUS:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) =
- CalculateLinkModeStatus(pAC,
- IoC, PhysPortIndex);
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
- *(pBuf + Offset) = CalculateLinkModeStatus(pAC, IoC, NetIndex);
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_LINK_STATUS:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical ports */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) =
- CalculateLinkStatus(pAC,
- IoC, PhysPortIndex);
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = CalculateLinkStatus(pAC, IoC, NetIndex);
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_FLOWCTRL_CAP:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical ports */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PFlowCtrlCap;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PFlowCtrlCap;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_FLOWCTRL_MODE:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PFlowCtrlMode;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PFlowCtrlMode;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_FLOWCTRL_STATUS:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PFlowCtrlStatus;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PFlowCtrlStatus;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_PHY_OPERATION_CAP:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical ports */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PMSCap;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PMSCap;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_PHY_OPERATION_MODE:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf + Offset);
- }
- else {
- /* Get value for physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PMSMode;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PMSMode;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_PHY_OPERATION_STATUS:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf + Offset);
- }
- else {
- /* Get value for physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PMSStatus;
- }
- Offset += sizeof(char);
- }
- else {
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PMSStatus;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_SPEED_CAP:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf +
- Offset);
- }
- else {
- /* Get value for physical ports */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PLinkSpeedCap;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkSpeedCap;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_SPEED_MODE:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf + Offset);
- }
- else {
- /* Get value for physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PLinkSpeed;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkSpeed;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_SPEED_STATUS:
- if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
- if (LogPortIndex == 0) {
-
- /* Get value for virtual port */
- VirtualConf(pAC, IoC, Id, pBuf + Offset);
- }
- else {
- /* Get value for physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
-
- *(pBuf + Offset) = pAC->GIni.GP[
- PhysPortIndex].PLinkSpeedUsed;
- }
- Offset += sizeof(char);
- }
- else { /* DualNetMode */
-
- *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkSpeedUsed;
- Offset += sizeof(char);
- }
- break;
-
- case OID_SKGE_MTU:
- Val32 = SK_DRIVER_GET_MTU(pAC, IoC, NetIndex);
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- Offset += sizeof(SK_U32);
- break;
-
- default:
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
- ("MacPrivateConf: Unknown OID should be handled before"));
-
- pAC->Pnmi.SirqUpdatedFlag --;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- *pLen = Offset;
- pAC->Pnmi.SirqUpdatedFlag --;
-
- return (SK_PNMI_ERR_OK);
- }
-
- /*
- * From here SET or PRESET action. Check if the passed
- * buffer length is plausible.
- */
- switch (Id) {
-
- case OID_SKGE_LINK_MODE:
- case OID_SKGE_FLOWCTRL_MODE:
- case OID_SKGE_PHY_OPERATION_MODE:
- case OID_SKGE_SPEED_MODE:
- if (*pLen < Limit - LogPortIndex) {
-
- *pLen = Limit - LogPortIndex;
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- if (*pLen != Limit - LogPortIndex) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- break;
-
- case OID_SKGE_MTU:
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- if (*pLen != sizeof(SK_U32)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- break;
-
- default:
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Perform preset or set
- */
- Offset = 0;
- for (; LogPortIndex < Limit; LogPortIndex ++) {
-
- switch (Id) {
-
- case OID_SKGE_LINK_MODE:
- /* Check the value range */
- Val8 = *(pBuf + Offset);
- if (Val8 == 0) {
-
- Offset += sizeof(char);
- break;
- }
- if (Val8 < SK_LMODE_HALF ||
- (LogPortIndex != 0 && Val8 > SK_LMODE_AUTOSENSE) ||
- (LogPortIndex == 0 && Val8 > SK_LMODE_INDETERMINATED)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /* The preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- if (LogPortIndex == 0) {
-
- /*
- * The virtual port consists of all currently
- * active ports. Find them and send an event
- * with the new link mode to SIRQ.
- */
- for (PhysPortIndex = 0;
- PhysPortIndex < PhysPortMax;
- PhysPortIndex ++) {
-
- if (!pAC->Pnmi.Port[PhysPortIndex].
- ActiveFlag) {
-
- continue;
- }
-
- EventParam.Para32[0] = PhysPortIndex;
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC,
- SK_HWEV_SET_LMODE,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR043,
- SK_PNMI_ERR043MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- }
- else {
- /*
- * Send an event with the new link mode to
- * the SIRQ module.
- */
- EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC, SK_HWEV_SET_LMODE,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR043,
- SK_PNMI_ERR043MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_FLOWCTRL_MODE:
- /* Check the value range */
- Val8 = *(pBuf + Offset);
- if (Val8 == 0) {
-
- Offset += sizeof(char);
- break;
- }
- if (Val8 < SK_FLOW_MODE_NONE ||
- (LogPortIndex != 0 && Val8 > SK_FLOW_MODE_SYM_OR_REM) ||
- (LogPortIndex == 0 && Val8 > SK_FLOW_MODE_INDETERMINATED)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /* The preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- if (LogPortIndex == 0) {
-
- /*
- * The virtual port consists of all currently
- * active ports. Find them and send an event
- * with the new flow control mode to SIRQ.
- */
- for (PhysPortIndex = 0;
- PhysPortIndex < PhysPortMax;
- PhysPortIndex ++) {
-
- if (!pAC->Pnmi.Port[PhysPortIndex].
- ActiveFlag) {
-
- continue;
- }
-
- EventParam.Para32[0] = PhysPortIndex;
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC,
- SK_HWEV_SET_FLOWMODE,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR044,
- SK_PNMI_ERR044MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- }
- else {
- /*
- * Send an event with the new flow control
- * mode to the SIRQ module.
- */
- EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC,
- SK_HWEV_SET_FLOWMODE, EventParam)
- > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR044,
- SK_PNMI_ERR044MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_PHY_OPERATION_MODE :
- /* Check the value range */
- Val8 = *(pBuf + Offset);
- if (Val8 == 0) {
- /* mode of this port remains unchanged */
- Offset += sizeof(char);
- break;
- }
- if (Val8 < SK_MS_MODE_AUTO ||
- (LogPortIndex != 0 && Val8 > SK_MS_MODE_SLAVE) ||
- (LogPortIndex == 0 && Val8 > SK_MS_MODE_INDETERMINATED)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /* The preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- if (LogPortIndex == 0) {
-
- /*
- * The virtual port consists of all currently
- * active ports. Find them and send an event
- * with new master/slave (role) mode to SIRQ.
- */
- for (PhysPortIndex = 0;
- PhysPortIndex < PhysPortMax;
- PhysPortIndex ++) {
-
- if (!pAC->Pnmi.Port[PhysPortIndex].
- ActiveFlag) {
-
- continue;
- }
-
- EventParam.Para32[0] = PhysPortIndex;
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC,
- SK_HWEV_SET_ROLE,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR042,
- SK_PNMI_ERR042MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- }
- else {
- /*
- * Send an event with the new master/slave
- * (role) mode to the SIRQ module.
- */
- EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC,
- SK_HWEV_SET_ROLE, EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR042,
- SK_PNMI_ERR042MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
-
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_SPEED_MODE:
- /* Check the value range */
- Val8 = *(pBuf + Offset);
- if (Val8 == 0) {
-
- Offset += sizeof(char);
- break;
- }
- if (Val8 < (SK_LSPEED_AUTO) ||
- (LogPortIndex != 0 && Val8 > (SK_LSPEED_1000MBPS)) ||
- (LogPortIndex == 0 && Val8 > (SK_LSPEED_INDETERMINATED))) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /* The preset ends here */
- if (Action == SK_PNMI_PRESET) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- if (LogPortIndex == 0) {
-
- /*
- * The virtual port consists of all currently
- * active ports. Find them and send an event
- * with the new flow control mode to SIRQ.
- */
- for (PhysPortIndex = 0;
- PhysPortIndex < PhysPortMax;
- PhysPortIndex ++) {
-
- if (!pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
-
- continue;
- }
-
- EventParam.Para32[0] = PhysPortIndex;
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC,
- SK_HWEV_SET_SPEED,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR045,
- SK_PNMI_ERR045MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- }
- else {
- /*
- * Send an event with the new flow control
- * mode to the SIRQ module.
- */
- EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
- pAC, LogPortIndex);
- EventParam.Para32[1] = (SK_U32)Val8;
- if (SkGeSirqEvent(pAC, IoC,
- SK_HWEV_SET_SPEED,
- EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW,
- SK_PNMI_ERR045,
- SK_PNMI_ERR045MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- Offset += sizeof(char);
- break;
-
- case OID_SKGE_MTU :
- /* Check the value range */
- Val32 = *(SK_U32*)(pBuf + Offset);
- if (Val32 == 0) {
- /* mtu of this port remains unchanged */
- Offset += sizeof(SK_U32);
- break;
- }
- if (SK_DRIVER_PRESET_MTU(pAC, IoC, NetIndex, Val32) != 0) {
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- /* The preset ends here */
- if (Action == SK_PNMI_PRESET) {
- return (SK_PNMI_ERR_OK);
- }
-
- if (SK_DRIVER_SET_MTU(pAC, IoC, NetIndex, Val32) != 0) {
- return (SK_PNMI_ERR_GENERAL);
- }
-
- Offset += sizeof(SK_U32);
- break;
-
- default:
- SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
- ("MacPrivateConf: Unknown OID should be handled before set"));
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * Monitor - OID handler function for RLMT_MONITOR_XXX
- *
- * Description:
- * Because RLMT currently does not support the monitoring of
- * remote adapter cards, we return always an empty table.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
- * value range.
- * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-PNMI_STATIC int Monitor(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int Index;
- unsigned int Limit;
- unsigned int Offset;
- unsigned int Entries;
-
-
- /*
- * Calculate instance if wished.
- */
-/* XXX Not yet implemented. Return always an empty table. */
- Entries = 0;
-
- if ((Instance != (SK_U32)(-1))) {
-
- if ((Instance < 1) || (Instance > Entries)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- Index = (unsigned int)Instance - 1;
- Limit = (unsigned int)Instance;
- }
- else {
- Index = 0;
- Limit = Entries;
- }
-
- /*
- * Get/Set value
- */
- if (Action == SK_PNMI_GET) {
-
- for (Offset=0; Index < Limit; Index ++) {
-
- switch (Id) {
-
- case OID_SKGE_RLMT_MONITOR_INDEX:
- case OID_SKGE_RLMT_MONITOR_ADDR:
- case OID_SKGE_RLMT_MONITOR_ERRS:
- case OID_SKGE_RLMT_MONITOR_TIMESTAMP:
- case OID_SKGE_RLMT_MONITOR_ADMIN:
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR046,
- SK_PNMI_ERR046MSG);
-
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- }
- *pLen = Offset;
- }
- else {
- /* Only MONITOR_ADMIN can be set */
- if (Id != OID_SKGE_RLMT_MONITOR_ADMIN) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /* Check if the length is plausible */
- if (*pLen < (Limit - Index)) {
-
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- /* Okay, we have a wide value range */
- if (*pLen != (Limit - Index)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-/*
- for (Offset=0; Index < Limit; Index ++) {
- }
-*/
-/*
- * XXX Not yet implemented. Return always BAD_VALUE, because the table
- * is empty.
- */
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * VirtualConf - Calculates the values of configuration OIDs for virtual port
- *
- * Description:
- * We handle here the get of the configuration group OIDs, which are
- * a little bit complicated. The virtual port consists of all currently
- * active physical ports. If multiple ports are active and configured
- * differently we get in some trouble to return a single value. So we
- * get the value of the first active port and compare it with that of
- * the other active ports. If they are not the same, we return a value
- * that indicates that the state is indeterminated.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void VirtualConf(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf) /* Buffer to which to mgmt data will be retrieved */
-{
- unsigned int PhysPortMax;
- unsigned int PhysPortIndex;
- SK_U8 Val8;
- SK_BOOL PortActiveFlag;
-
-
- *pBuf = 0;
- PortActiveFlag = SK_FALSE;
- PhysPortMax = pAC->GIni.GIMacsFound;
-
- for (PhysPortIndex = 0; PhysPortIndex < PhysPortMax;
- PhysPortIndex ++) {
-
- /* Check if the physical port is active */
- if (!pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
-
- continue;
- }
-
- PortActiveFlag = SK_TRUE;
-
- switch (Id) {
-
- case OID_SKGE_LINK_CAP:
-
- /*
- * Different capabilities should not happen, but
- * in the case of the cases OR them all together.
- * From a curious point of view the virtual port
- * is capable of all found capabilities.
- */
- *pBuf |= pAC->GIni.GP[PhysPortIndex].PLinkCap;
- break;
-
- case OID_SKGE_LINK_MODE:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PLinkModeConf;
- continue;
- }
-
- /*
- * If we find an active port with a different link
- * mode than the first one we return a value that
- * indicates that the link mode is indeterminated.
- */
- if (*pBuf != pAC->GIni.GP[PhysPortIndex].PLinkModeConf
- ) {
-
- *pBuf = SK_LMODE_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_LINK_MODE_STATUS:
- /* Get the link mode of the physical port */
- Val8 = CalculateLinkModeStatus(pAC, IoC, PhysPortIndex);
-
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = Val8;
- continue;
- }
-
- /*
- * If we find an active port with a different link
- * mode status than the first one we return a value
- * that indicates that the link mode status is
- * indeterminated.
- */
- if (*pBuf != Val8) {
-
- *pBuf = SK_LMODE_STAT_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_LINK_STATUS:
- /* Get the link status of the physical port */
- Val8 = CalculateLinkStatus(pAC, IoC, PhysPortIndex);
-
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = Val8;
- continue;
- }
-
- /*
- * If we find an active port with a different link
- * status than the first one, we return a value
- * that indicates that the link status is
- * indeterminated.
- */
- if (*pBuf != Val8) {
-
- *pBuf = SK_PNMI_RLMT_LSTAT_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_FLOWCTRL_CAP:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PFlowCtrlCap;
- continue;
- }
-
- /*
- * From a curious point of view the virtual port
- * is capable of all found capabilities.
- */
- *pBuf |= pAC->GIni.GP[PhysPortIndex].PFlowCtrlCap;
- break;
-
- case OID_SKGE_FLOWCTRL_MODE:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PFlowCtrlMode;
- continue;
- }
-
- /*
- * If we find an active port with a different flow
- * control mode than the first one, we return a value
- * that indicates that the mode is indeterminated.
- */
- if (*pBuf != pAC->GIni.GP[PhysPortIndex].PFlowCtrlMode) {
-
- *pBuf = SK_FLOW_MODE_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_FLOWCTRL_STATUS:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PFlowCtrlStatus;
- continue;
- }
-
- /*
- * If we find an active port with a different flow
- * control status than the first one, we return a
- * value that indicates that the status is
- * indeterminated.
- */
- if (*pBuf != pAC->GIni.GP[PhysPortIndex].PFlowCtrlStatus) {
-
- *pBuf = SK_FLOW_STAT_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_PHY_OPERATION_CAP:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PMSCap;
- continue;
- }
-
- /*
- * From a curious point of view the virtual port
- * is capable of all found capabilities.
- */
- *pBuf |= pAC->GIni.GP[PhysPortIndex].PMSCap;
- break;
-
- case OID_SKGE_PHY_OPERATION_MODE:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PMSMode;
- continue;
- }
-
- /*
- * If we find an active port with a different master/
- * slave mode than the first one, we return a value
- * that indicates that the mode is indeterminated.
- */
- if (*pBuf != pAC->GIni.GP[PhysPortIndex].PMSMode) {
-
- *pBuf = SK_MS_MODE_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_PHY_OPERATION_STATUS:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PMSStatus;
- continue;
- }
-
- /*
- * If we find an active port with a different master/
- * slave status than the first one, we return a
- * value that indicates that the status is
- * indeterminated.
- */
- if (*pBuf != pAC->GIni.GP[PhysPortIndex].PMSStatus) {
-
- *pBuf = SK_MS_STAT_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_SPEED_MODE:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PLinkSpeed;
- continue;
- }
-
- /*
- * If we find an active port with a different flow
- * control mode than the first one, we return a value
- * that indicates that the mode is indeterminated.
- */
- if (*pBuf != pAC->GIni.GP[PhysPortIndex].PLinkSpeed) {
-
- *pBuf = SK_LSPEED_INDETERMINATED;
- }
- break;
-
- case OID_SKGE_SPEED_STATUS:
- /* Check if it is the first active port */
- if (*pBuf == 0) {
-
- *pBuf = pAC->GIni.GP[PhysPortIndex].PLinkSpeedUsed;
- continue;
- }
-
- /*
- * If we find an active port with a different flow
- * control status than the first one, we return a
- * value that indicates that the status is
- * indeterminated.
- */
- if (*pBuf != pAC->GIni.GP[PhysPortIndex].PLinkSpeedUsed) {
-
- *pBuf = SK_LSPEED_STAT_INDETERMINATED;
- }
- break;
- }
- }
-
- /*
- * If no port is active return an indeterminated answer
- */
- if (!PortActiveFlag) {
-
- switch (Id) {
-
- case OID_SKGE_LINK_CAP:
- *pBuf = SK_LMODE_CAP_INDETERMINATED;
- break;
-
- case OID_SKGE_LINK_MODE:
- *pBuf = SK_LMODE_INDETERMINATED;
- break;
-
- case OID_SKGE_LINK_MODE_STATUS:
- *pBuf = SK_LMODE_STAT_INDETERMINATED;
- break;
-
- case OID_SKGE_LINK_STATUS:
- *pBuf = SK_PNMI_RLMT_LSTAT_INDETERMINATED;
- break;
-
- case OID_SKGE_FLOWCTRL_CAP:
- case OID_SKGE_FLOWCTRL_MODE:
- *pBuf = SK_FLOW_MODE_INDETERMINATED;
- break;
-
- case OID_SKGE_FLOWCTRL_STATUS:
- *pBuf = SK_FLOW_STAT_INDETERMINATED;
- break;
-
- case OID_SKGE_PHY_OPERATION_CAP:
- *pBuf = SK_MS_CAP_INDETERMINATED;
- break;
-
- case OID_SKGE_PHY_OPERATION_MODE:
- *pBuf = SK_MS_MODE_INDETERMINATED;
- break;
-
- case OID_SKGE_PHY_OPERATION_STATUS:
- *pBuf = SK_MS_STAT_INDETERMINATED;
- break;
- case OID_SKGE_SPEED_CAP:
- *pBuf = SK_LSPEED_CAP_INDETERMINATED;
- break;
-
- case OID_SKGE_SPEED_MODE:
- *pBuf = SK_LSPEED_INDETERMINATED;
- break;
-
- case OID_SKGE_SPEED_STATUS:
- *pBuf = SK_LSPEED_STAT_INDETERMINATED;
- break;
- }
- }
-}
-
-/*****************************************************************************
- *
- * CalculateLinkStatus - Determins the link status of a physical port
- *
- * Description:
- * Determins the link status the following way:
- * LSTAT_PHY_DOWN: Link is down
- * LSTAT_AUTONEG: Auto-negotiation failed
- * LSTAT_LOG_DOWN: Link is up but RLMT did not yet put the port
- * logically up.
- * LSTAT_LOG_UP: RLMT marked the port as up
- *
- * Returns:
- * Link status of physical port
- */
-PNMI_STATIC SK_U8 CalculateLinkStatus(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-unsigned int PhysPortIndex) /* Physical port index */
-{
- SK_U8 Result;
-
-
- if (!pAC->GIni.GP[PhysPortIndex].PHWLinkUp) {
-
- Result = SK_PNMI_RLMT_LSTAT_PHY_DOWN;
- }
- else if (pAC->GIni.GP[PhysPortIndex].PAutoNegFail > 0) {
-
- Result = SK_PNMI_RLMT_LSTAT_AUTONEG;
- }
- else if (!pAC->Rlmt.Port[PhysPortIndex].PortDown) {
-
- Result = SK_PNMI_RLMT_LSTAT_LOG_UP;
- }
- else {
- Result = SK_PNMI_RLMT_LSTAT_LOG_DOWN;
- }
-
- return (Result);
-}
-
-/*****************************************************************************
- *
- * CalculateLinkModeStatus - Determins the link mode status of a phys. port
- *
- * Description:
- * The COMMON module only tells us if the mode is half or full duplex.
- * But in the decade of auto sensing it is usefull for the user to
- * know if the mode was negotiated or forced. Therefore we have a
- * look to the mode, which was last used by the negotiation process.
- *
- * Returns:
- * The link mode status
- */
-PNMI_STATIC SK_U8 CalculateLinkModeStatus(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-unsigned int PhysPortIndex) /* Physical port index */
-{
- SK_U8 Result;
-
-
- /* Get the current mode, which can be full or half duplex */
- Result = pAC->GIni.GP[PhysPortIndex].PLinkModeStatus;
-
- /* Check if no valid mode could be found (link is down) */
- if (Result < SK_LMODE_STAT_HALF) {
-
- Result = SK_LMODE_STAT_UNKNOWN;
- }
- else if (pAC->GIni.GP[PhysPortIndex].PLinkMode >= SK_LMODE_AUTOHALF) {
-
- /*
- * Auto-negotiation was used to bring up the link. Change
- * the already found duplex status that it indicates
- * auto-negotiation was involved.
- */
- if (Result == SK_LMODE_STAT_HALF) {
-
- Result = SK_LMODE_STAT_AUTOHALF;
- }
- else if (Result == SK_LMODE_STAT_FULL) {
-
- Result = SK_LMODE_STAT_AUTOFULL;
- }
- }
-
- return (Result);
-}
-
-/*****************************************************************************
- *
- * GetVpdKeyArr - Obtain an array of VPD keys
- *
- * Description:
- * Read the VPD keys and build an array of VPD keys, which are
- * easy to access.
- *
- * Returns:
- * SK_PNMI_ERR_OK Task successfully performed.
- * SK_PNMI_ERR_GENERAL Something went wrong.
- */
-PNMI_STATIC int GetVpdKeyArr(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-char *pKeyArr, /* Ptr KeyArray */
-unsigned int KeyArrLen, /* Length of array in bytes */
-unsigned int *pKeyNo) /* Number of keys */
-{
- unsigned int BufKeysLen = SK_PNMI_VPD_BUFSIZE;
- char BufKeys[SK_PNMI_VPD_BUFSIZE];
- unsigned int StartOffset;
- unsigned int Offset;
- int Index;
- int Ret;
-
-
- SK_MEMSET(pKeyArr, 0, KeyArrLen);
-
- /*
- * Get VPD key list
- */
- Ret = VpdKeys(pAC, IoC, (char *)&BufKeys, (int *)&BufKeysLen,
- (int *)pKeyNo);
- if (Ret > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR014,
- SK_PNMI_ERR014MSG);
-
- return (SK_PNMI_ERR_GENERAL);
- }
- /* If no keys are available return now */
- if (*pKeyNo == 0 || BufKeysLen == 0) {
-
- return (SK_PNMI_ERR_OK);
- }
- /*
- * If the key list is too long for us trunc it and give a
- * errorlog notification. This case should not happen because
- * the maximum number of keys is limited due to RAM limitations
- */
- if (*pKeyNo > SK_PNMI_VPD_ENTRIES) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR015,
- SK_PNMI_ERR015MSG);
-
- *pKeyNo = SK_PNMI_VPD_ENTRIES;
- }
-
- /*
- * Now build an array of fixed string length size and copy
- * the keys together.
- */
- for (Index = 0, StartOffset = 0, Offset = 0; Offset < BufKeysLen;
- Offset ++) {
-
- if (BufKeys[Offset] != 0) {
-
- continue;
- }
-
- if (Offset - StartOffset > SK_PNMI_VPD_KEY_SIZE) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR016,
- SK_PNMI_ERR016MSG);
- return (SK_PNMI_ERR_GENERAL);
- }
-
- SK_STRNCPY(pKeyArr + Index * SK_PNMI_VPD_KEY_SIZE,
- &BufKeys[StartOffset], SK_PNMI_VPD_KEY_SIZE);
-
- Index ++;
- StartOffset = Offset + 1;
- }
-
- /* Last key not zero terminated? Get it anyway */
- if (StartOffset < Offset) {
-
- SK_STRNCPY(pKeyArr + Index * SK_PNMI_VPD_KEY_SIZE,
- &BufKeys[StartOffset], SK_PNMI_VPD_KEY_SIZE);
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * SirqUpdate - Let the SIRQ update its internal values
- *
- * Description:
- * Just to be sure that the SIRQ module holds its internal data
- * structures up to date, we send an update event before we make
- * any access.
- *
- * Returns:
- * SK_PNMI_ERR_OK Task successfully performed.
- * SK_PNMI_ERR_GENERAL Something went wrong.
- */
-PNMI_STATIC int SirqUpdate(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC) /* IO context handle */
-{
- SK_EVPARA EventParam;
-
-
- /* Was the module already updated during the current PNMI call? */
- if (pAC->Pnmi.SirqUpdatedFlag > 0) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- /* Send an synchronuous update event to the module */
- SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
- if (SkGeSirqEvent(pAC, IoC, SK_HWEV_UPDATE_STAT, EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR047,
- SK_PNMI_ERR047MSG);
-
- return (SK_PNMI_ERR_GENERAL);
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * RlmtUpdate - Let the RLMT update its internal values
- *
- * Description:
- * Just to be sure that the RLMT module holds its internal data
- * structures up to date, we send an update event before we make
- * any access.
- *
- * Returns:
- * SK_PNMI_ERR_OK Task successfully performed.
- * SK_PNMI_ERR_GENERAL Something went wrong.
- */
-PNMI_STATIC int RlmtUpdate(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- SK_EVPARA EventParam;
-
-
- /* Was the module already updated during the current PNMI call? */
- if (pAC->Pnmi.RlmtUpdatedFlag > 0) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- /* Send an synchronuous update event to the module */
- SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
- EventParam.Para32[0] = NetIndex;
- EventParam.Para32[1] = (SK_U32)-1;
- if (SkRlmtEvent(pAC, IoC, SK_RLMT_STATS_UPDATE, EventParam) > 0) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR048,
- SK_PNMI_ERR048MSG);
-
- return (SK_PNMI_ERR_GENERAL);
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * MacUpdate - Force the XMAC to output the current statistic
- *
- * Description:
- * The XMAC holds its statistic internally. To obtain the current
- * values we send a command so that the statistic data will
- * be written to apredefined memory area on the adapter.
- *
- * Returns:
- * SK_PNMI_ERR_OK Task successfully performed.
- * SK_PNMI_ERR_GENERAL Something went wrong.
- */
-PNMI_STATIC int MacUpdate(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-unsigned int FirstMac, /* Index of the first Mac to be updated */
-unsigned int LastMac) /* Index of the last Mac to be updated */
-{
- unsigned int MacIndex;
-
- /*
- * Were the statistics already updated during the
- * current PNMI call?
- */
- if (pAC->Pnmi.MacUpdatedFlag > 0) {
-
- return (SK_PNMI_ERR_OK);
- }
-
- /* Send an update command to all MACs specified */
- for (MacIndex = FirstMac; MacIndex <= LastMac; MacIndex ++) {
-
- /*
- * 2002-09-13 pweber: Freeze the current sw counters.
- * (That should be done as close as
- * possible to the update of the
- * hw counters)
- */
- if (pAC->GIni.GIMacType == SK_MAC_XMAC) {
- pAC->Pnmi.BufPort[MacIndex] = pAC->Pnmi.Port[MacIndex];
- }
-
- /* 2002-09-13 pweber: Update the hw counter */
- if (pAC->GIni.GIFunc.pFnMacUpdateStats(pAC, IoC, MacIndex) != 0) {
-
- return (SK_PNMI_ERR_GENERAL);
- }
- }
-
- return (SK_PNMI_ERR_OK);
-}
-
-/*****************************************************************************
- *
- * GetStatVal - Retrieve an XMAC statistic counter
- *
- * Description:
- * Retrieves the statistic counter of a virtual or physical port. The
- * virtual port is identified by the index 0. It consists of all
- * currently active ports. To obtain the counter value for this port
- * we must add the statistic counter of all active ports. To grant
- * continuous counter values for the virtual port even when port
- * switches occur we must additionally add a delta value, which was
- * calculated during a SK_PNMI_EVT_RLMT_ACTIVE_UP event.
- *
- * Returns:
- * Requested statistic value
- */
-PNMI_STATIC SK_U64 GetStatVal(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-unsigned int LogPortIndex, /* Index of the logical Port to be processed */
-unsigned int StatIndex, /* Index to statistic value */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
- unsigned int PhysPortIndex;
- unsigned int PhysPortMax;
- SK_U64 Val = 0;
-
-
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
-
- PhysPortIndex = NetIndex;
- Val = GetPhysStatVal(pAC, IoC, PhysPortIndex, StatIndex);
- }
- else { /* Single Net mode */
-
- if (LogPortIndex == 0) {
-
- PhysPortMax = pAC->GIni.GIMacsFound;
-
- /* Add counter of all active ports */
- for (PhysPortIndex = 0; PhysPortIndex < PhysPortMax;
- PhysPortIndex ++) {
-
- if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
-
- Val += GetPhysStatVal(pAC, IoC, PhysPortIndex,
- StatIndex);
- }
- }
-
- /* Correct value because of port switches */
- Val += pAC->Pnmi.VirtualCounterOffset[StatIndex];
- }
- else {
- /* Get counter value of physical port */
- PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(pAC, LogPortIndex);
- Val = GetPhysStatVal(pAC, IoC, PhysPortIndex, StatIndex);
- }
- }
- return (Val);
-}
-
-/*****************************************************************************
- *
- * GetPhysStatVal - Get counter value for physical port
- *
- * Description:
- * Builds a 64bit counter value. Except for the octet counters
- * the lower 32bit are counted in hardware and the upper 32bit
- * in software by monitoring counter overflow interrupts in the
- * event handler. To grant continous counter values during XMAC
- * resets (caused by a workaround) we must add a delta value.
- * The delta was calculated in the event handler when a
- * SK_PNMI_EVT_XMAC_RESET was received.
- *
- * Returns:
- * Counter value
- */
-PNMI_STATIC SK_U64 GetPhysStatVal(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-unsigned int PhysPortIndex, /* Index of the logical Port to be processed */
-unsigned int StatIndex) /* Index to statistic value */
-{
- SK_U64 Val = 0;
- SK_U32 LowVal = 0;
- SK_U32 HighVal = 0;
- SK_U16 Word;
- int MacType;
-
- SK_PNMI_PORT *pPnmiPrt;
- SK_GEMACFUNC *pFnMac;
-
- MacType = pAC->GIni.GIMacType;
-
- /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
- if (pAC->GIni.GIMacType == SK_MAC_XMAC) {
- pPnmiPrt = &pAC->Pnmi.BufPort[PhysPortIndex];
- }
- else {
- pPnmiPrt = &pAC->Pnmi.Port[PhysPortIndex];
- }
-
- pFnMac = &pAC->GIni.GIFunc;
-
- switch (StatIndex) {
- case SK_PNMI_HTX:
- case SK_PNMI_HRX:
- /* Not supported by GMAC */
- if (MacType == SK_MAC_GMAC) {
- return (Val);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
-
- case SK_PNMI_HTX_OCTET:
- case SK_PNMI_HRX_OCTET:
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &HighVal);
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex + 1][MacType].Reg,
- &LowVal);
- break;
-
- case SK_PNMI_HTX_BURST:
- case SK_PNMI_HTX_EXCESS_DEF:
- case SK_PNMI_HTX_CARRIER:
- /* Not supported by GMAC */
- if (MacType == SK_MAC_GMAC) {
- return (Val);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
-
- case SK_PNMI_HTX_MACC:
- /* GMAC only supports PAUSE MAC control frames */
- if (MacType == SK_MAC_GMAC) {
- Val = GetPhysStatVal(pAC, IoC, PhysPortIndex, SK_PNMI_HTX_PMACC);
-
- return (Val);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
-
- case SK_PNMI_HTX_COL:
- case SK_PNMI_HRX_UNDERSIZE:
- /* Not supported by XMAC */
- if (MacType == SK_MAC_XMAC) {
- return (Val);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
-
-
- case SK_PNMI_HTX_DEFFERAL:
- /* Not supported by GMAC */
- if (MacType == SK_MAC_GMAC) {
- return (Val);
- }
-
- /*
- * XMAC counts frames with deferred transmission
- * even in full-duplex mode.
- *
- * In full-duplex mode the counter remains constant!
- */
- if ((pAC->GIni.GP[PhysPortIndex].PLinkModeStatus == SK_LMODE_STAT_AUTOFULL) ||
- (pAC->GIni.GP[PhysPortIndex].PLinkModeStatus == SK_LMODE_STAT_FULL)) {
-
- LowVal = 0;
- HighVal = 0;
- }
- else {
- /* Otherwise get contents of hardware register. */
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[SK_PNMI_HTX_DEFFERAL][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- }
- break;
-
- case SK_PNMI_HRX_BADOCTET:
- /* Not supported by XMAC */
- if (MacType == SK_MAC_XMAC) {
- return (Val);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &HighVal);
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex + 1][MacType].Reg,
- &LowVal);
- break;
-
- case SK_PNMI_HTX_OCTETLOW:
- case SK_PNMI_HRX_OCTETLOW:
- case SK_PNMI_HRX_BADOCTETLOW:
- return (Val);
-
- case SK_PNMI_HRX_LONGFRAMES:
- /* For XMAC the SW counter is managed by PNMI */
- if (MacType == SK_MAC_XMAC) {
- return (pPnmiPrt->StatRxLongFrameCts);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
-
- case SK_PNMI_HRX_TOO_LONG:
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
-
- Val = (((SK_U64)HighVal << 32) | (SK_U64)LowVal);
-
- switch (MacType) {
- case SK_MAC_GMAC:
- /* For GMAC the SW counter is additionally managed by PNMI */
- Val += pPnmiPrt->StatRxFrameTooLongCts;
- break;
-
- case SK_MAC_XMAC:
- /*
- * Frames longer than IEEE 802.3 frame max size are counted
- * by XMAC in frame_too_long counter even reception of long
- * frames was enabled and the frame was correct.
- * So correct the value by subtracting RxLongFrame counter.
- */
- Val -= pPnmiPrt->StatRxLongFrameCts;
- break;
-
- default:
- break;
- }
-
- LowVal = (SK_U32)Val;
- HighVal = (SK_U32)(Val >> 32);
- break;
-
- case SK_PNMI_HRX_SHORTS:
- /* Not supported by GMAC */
- if (MacType == SK_MAC_GMAC) {
- /* GM_RXE_FRAG?? */
- return (Val);
- }
-
- /*
- * XMAC counts short frame errors even if link down (#10620)
- *
- * If link-down the counter remains constant
- */
- if (pAC->GIni.GP[PhysPortIndex].PLinkModeStatus != SK_LMODE_STAT_UNKNOWN) {
-
- /* Otherwise get incremental difference */
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
-
- Val = (((SK_U64)HighVal << 32) | (SK_U64)LowVal);
- Val -= pPnmiPrt->RxShortZeroMark;
-
- LowVal = (SK_U32)Val;
- HighVal = (SK_U32)(Val >> 32);
- }
- break;
-
- case SK_PNMI_HRX_MACC:
- case SK_PNMI_HRX_MACC_UNKWN:
- case SK_PNMI_HRX_BURST:
- case SK_PNMI_HRX_MISSED:
- case SK_PNMI_HRX_FRAMING:
- case SK_PNMI_HRX_CARRIER:
- case SK_PNMI_HRX_IRLENGTH:
- case SK_PNMI_HRX_SYMBOL:
- case SK_PNMI_HRX_CEXT:
- /* Not supported by GMAC */
- if (MacType == SK_MAC_GMAC) {
- /* GM_RXE_FRAG?? */
- return (Val);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
-
- case SK_PNMI_HRX_PMACC_ERR:
- /* For GMAC the SW counter is managed by PNMI */
- if (MacType == SK_MAC_GMAC) {
- return (pPnmiPrt->StatRxPMaccErr);
- }
-
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
-
- /* SW counter managed by PNMI */
- case SK_PNMI_HTX_SYNC:
- LowVal = (SK_U32)pPnmiPrt->StatSyncCts;
- HighVal = (SK_U32)(pPnmiPrt->StatSyncCts >> 32);
- break;
-
- /* SW counter managed by PNMI */
- case SK_PNMI_HTX_SYNC_OCTET:
- LowVal = (SK_U32)pPnmiPrt->StatSyncOctetsCts;
- HighVal = (SK_U32)(pPnmiPrt->StatSyncOctetsCts >> 32);
- break;
-
- case SK_PNMI_HRX_FCS:
- /*
- * Broadcom filters fcs errors and counts it in
- * Receive Error Counter register
- */
- if (pAC->GIni.GP[PhysPortIndex].PhyType == SK_PHY_BCOM) {
- /* do not read while not initialized (PHY_READ hangs!)*/
- if (pAC->GIni.GP[PhysPortIndex].PState) {
- PHY_READ(IoC, &pAC->GIni.GP[PhysPortIndex],
- PhysPortIndex, PHY_BCOM_RE_CTR,
- &Word);
-
- LowVal = Word;
- }
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- }
- else {
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- }
- break;
-
- default:
- (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
- StatAddr[StatIndex][MacType].Reg,
- &LowVal);
- HighVal = pPnmiPrt->CounterHigh[StatIndex];
- break;
- }
-
- Val = (((SK_U64)HighVal << 32) | (SK_U64)LowVal);
-
- /* Correct value because of possible XMAC reset. XMAC Errata #2 */
- Val += pPnmiPrt->CounterOffset[StatIndex];
-
- return (Val);
-}
-
-/*****************************************************************************
- *
- * ResetCounter - Set all counters and timestamps to zero
- *
- * Description:
- * Notifies other common modules which store statistic data to
- * reset their counters and finally reset our own counters.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void ResetCounter(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-SK_U32 NetIndex)
-{
- unsigned int PhysPortIndex;
- SK_EVPARA EventParam;
-
-
- SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
-
- /* Notify sensor module */
- SkEventQueue(pAC, SKGE_I2C, SK_I2CEV_CLEAR, EventParam);
-
- /* Notify RLMT module */
- EventParam.Para32[0] = NetIndex;
- EventParam.Para32[1] = (SK_U32)-1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STATS_CLEAR, EventParam);
- EventParam.Para32[1] = 0;
-
- /* Notify SIRQ module */
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_CLEAR_STAT, EventParam);
-
- /* Notify CSUM module */
-#ifdef SK_USE_CSUM
- EventParam.Para32[0] = NetIndex;
- EventParam.Para32[1] = (SK_U32)-1;
- SkEventQueue(pAC, SKGE_CSUM, SK_CSUM_EVENT_CLEAR_PROTO_STATS,
- EventParam);
-#endif
-
- /* Clear XMAC statistic */
- for (PhysPortIndex = 0; PhysPortIndex <
- (unsigned int)pAC->GIni.GIMacsFound; PhysPortIndex ++) {
-
- (void)pAC->GIni.GIFunc.pFnMacResetCounter(pAC, IoC, PhysPortIndex);
-
- SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].CounterHigh,
- 0, sizeof(pAC->Pnmi.Port[PhysPortIndex].CounterHigh));
- SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
- CounterOffset, 0, sizeof(pAC->Pnmi.Port[
- PhysPortIndex].CounterOffset));
- SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].StatSyncCts,
- 0, sizeof(pAC->Pnmi.Port[PhysPortIndex].StatSyncCts));
- SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
- StatSyncOctetsCts, 0, sizeof(pAC->Pnmi.Port[
- PhysPortIndex].StatSyncOctetsCts));
- SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
- StatRxLongFrameCts, 0, sizeof(pAC->Pnmi.Port[
- PhysPortIndex].StatRxLongFrameCts));
- SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
- StatRxFrameTooLongCts, 0, sizeof(pAC->Pnmi.Port[
- PhysPortIndex].StatRxFrameTooLongCts));
- SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
- StatRxPMaccErr, 0, sizeof(pAC->Pnmi.Port[
- PhysPortIndex].StatRxPMaccErr));
- }
-
- /*
- * Clear local statistics
- */
- SK_MEMSET((char *)&pAC->Pnmi.VirtualCounterOffset, 0,
- sizeof(pAC->Pnmi.VirtualCounterOffset));
- pAC->Pnmi.RlmtChangeCts = 0;
- pAC->Pnmi.RlmtChangeTime = 0;
- SK_MEMSET((char *)&pAC->Pnmi.RlmtChangeEstimate.EstValue[0], 0,
- sizeof(pAC->Pnmi.RlmtChangeEstimate.EstValue));
- pAC->Pnmi.RlmtChangeEstimate.EstValueIndex = 0;
- pAC->Pnmi.RlmtChangeEstimate.Estimate = 0;
- pAC->Pnmi.Port[NetIndex].TxSwQueueMax = 0;
- pAC->Pnmi.Port[NetIndex].TxRetryCts = 0;
- pAC->Pnmi.Port[NetIndex].RxIntrCts = 0;
- pAC->Pnmi.Port[NetIndex].TxIntrCts = 0;
- pAC->Pnmi.Port[NetIndex].RxNoBufCts = 0;
- pAC->Pnmi.Port[NetIndex].TxNoBufCts = 0;
- pAC->Pnmi.Port[NetIndex].TxUsedDescrNo = 0;
- pAC->Pnmi.Port[NetIndex].RxDeliveredCts = 0;
- pAC->Pnmi.Port[NetIndex].RxOctetsDeliveredCts = 0;
- pAC->Pnmi.Port[NetIndex].ErrRecoveryCts = 0;
-}
-
-/*****************************************************************************
- *
- * GetTrapEntry - Get an entry in the trap buffer
- *
- * Description:
- * The trap buffer stores various events. A user application somehow
- * gets notified that an event occured and retrieves the trap buffer
- * contens (or simply polls the buffer). The buffer is organized as
- * a ring which stores the newest traps at the beginning. The oldest
- * traps are overwritten by the newest ones. Each trap entry has a
- * unique number, so that applications may detect new trap entries.
- *
- * Returns:
- * A pointer to the trap entry
- */
-PNMI_STATIC char* GetTrapEntry(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_U32 TrapId, /* SNMP ID of the trap */
-unsigned int Size) /* Space needed for trap entry */
-{
- unsigned int BufPad = pAC->Pnmi.TrapBufPad;
- unsigned int BufFree = pAC->Pnmi.TrapBufFree;
- unsigned int Beg = pAC->Pnmi.TrapQueueBeg;
- unsigned int End = pAC->Pnmi.TrapQueueEnd;
- char *pBuf = &pAC->Pnmi.TrapBuf[0];
- int Wrap;
- unsigned int NeededSpace;
- unsigned int EntrySize;
- SK_U32 Val32;
- SK_U64 Val64;
-
-
- /* Last byte of entry will get a copy of the entry length */
- Size ++;
-
- /*
- * Calculate needed buffer space */
- if (Beg >= Size) {
-
- NeededSpace = Size;
- Wrap = SK_FALSE;
- }
- else {
- NeededSpace = Beg + Size;
- Wrap = SK_TRUE;
- }
-
- /*
- * Check if enough buffer space is provided. Otherwise
- * free some entries. Leave one byte space between begin
- * and end of buffer to make it possible to detect whether
- * the buffer is full or empty
- */
- while (BufFree < NeededSpace + 1) {
-
- if (End == 0) {
-
- End = SK_PNMI_TRAP_QUEUE_LEN;
- }
-
- EntrySize = (unsigned int)*((unsigned char *)pBuf + End - 1);
- BufFree += EntrySize;
- End -= EntrySize;
-#ifdef DEBUG
- SK_MEMSET(pBuf + End, (char)(-1), EntrySize);
-#endif
- if (End == BufPad) {
-#ifdef DEBUG
- SK_MEMSET(pBuf, (char)(-1), End);
-#endif
- BufFree += End;
- End = 0;
- BufPad = 0;
- }
- }
-
- /*
- * Insert new entry as first entry. Newest entries are
- * stored at the beginning of the queue.
- */
- if (Wrap) {
-
- BufPad = Beg;
- Beg = SK_PNMI_TRAP_QUEUE_LEN - Size;
- }
- else {
- Beg = Beg - Size;
- }
- BufFree -= NeededSpace;
-
- /* Save the current offsets */
- pAC->Pnmi.TrapQueueBeg = Beg;
- pAC->Pnmi.TrapQueueEnd = End;
- pAC->Pnmi.TrapBufPad = BufPad;
- pAC->Pnmi.TrapBufFree = BufFree;
-
- /* Initialize the trap entry */
- *(pBuf + Beg + Size - 1) = (char)Size;
- *(pBuf + Beg) = (char)Size;
- Val32 = (pAC->Pnmi.TrapUnique) ++;
- SK_PNMI_STORE_U32(pBuf + Beg + 1, Val32);
- SK_PNMI_STORE_U32(pBuf + Beg + 1 + sizeof(SK_U32), TrapId);
- Val64 = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
- SK_PNMI_STORE_U64(pBuf + Beg + 1 + 2 * sizeof(SK_U32), Val64);
-
- return (pBuf + Beg);
-}
-
-/*****************************************************************************
- *
- * CopyTrapQueue - Copies the trap buffer for the TRAP OID
- *
- * Description:
- * On a query of the TRAP OID the trap buffer contents will be
- * copied continuously to the request buffer, which must be large
- * enough. No length check is performed.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void CopyTrapQueue(
-SK_AC *pAC, /* Pointer to adapter context */
-char *pDstBuf) /* Buffer to which the queued traps will be copied */
-{
- unsigned int BufPad = pAC->Pnmi.TrapBufPad;
- unsigned int Trap = pAC->Pnmi.TrapQueueBeg;
- unsigned int End = pAC->Pnmi.TrapQueueEnd;
- char *pBuf = &pAC->Pnmi.TrapBuf[0];
- unsigned int Len;
- unsigned int DstOff = 0;
-
-
- while (Trap != End) {
-
- Len = (unsigned int)*(pBuf + Trap);
-
- /*
- * Last byte containing a copy of the length will
- * not be copied.
- */
- *(pDstBuf + DstOff) = (char)(Len - 1);
- SK_MEMCPY(pDstBuf + DstOff + 1, pBuf + Trap + 1, Len - 2);
- DstOff += Len - 1;
-
- Trap += Len;
- if (Trap == SK_PNMI_TRAP_QUEUE_LEN) {
-
- Trap = BufPad;
- }
- }
-}
-
-/*****************************************************************************
- *
- * GetTrapQueueLen - Get the length of the trap buffer
- *
- * Description:
- * Evaluates the number of currently stored traps and the needed
- * buffer size to retrieve them.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void GetTrapQueueLen(
-SK_AC *pAC, /* Pointer to adapter context */
-unsigned int *pLen, /* Length in Bytes of all queued traps */
-unsigned int *pEntries) /* Returns number of trapes stored in queue */
-{
- unsigned int BufPad = pAC->Pnmi.TrapBufPad;
- unsigned int Trap = pAC->Pnmi.TrapQueueBeg;
- unsigned int End = pAC->Pnmi.TrapQueueEnd;
- char *pBuf = &pAC->Pnmi.TrapBuf[0];
- unsigned int Len;
- unsigned int Entries = 0;
- unsigned int TotalLen = 0;
-
-
- while (Trap != End) {
-
- Len = (unsigned int)*(pBuf + Trap);
- TotalLen += Len - 1;
- Entries ++;
-
- Trap += Len;
- if (Trap == SK_PNMI_TRAP_QUEUE_LEN) {
-
- Trap = BufPad;
- }
- }
-
- *pEntries = Entries;
- *pLen = TotalLen;
-}
-
-/*****************************************************************************
- *
- * QueueSimpleTrap - Store a simple trap to the trap buffer
- *
- * Description:
- * A simple trap is a trap with now additional data. It consists
- * simply of a trap code.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void QueueSimpleTrap(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_U32 TrapId) /* Type of sensor trap */
-{
- GetTrapEntry(pAC, TrapId, SK_PNMI_TRAP_SIMPLE_LEN);
-}
-
-/*****************************************************************************
- *
- * QueueSensorTrap - Stores a sensor trap in the trap buffer
- *
- * Description:
- * Gets an entry in the trap buffer and fills it with sensor related
- * data.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void QueueSensorTrap(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_U32 TrapId, /* Type of sensor trap */
-unsigned int SensorIndex) /* Index of sensor which caused the trap */
-{
- char *pBuf;
- unsigned int Offset;
- unsigned int DescrLen;
- SK_U32 Val32;
-
-
- /* Get trap buffer entry */
- DescrLen = SK_STRLEN(pAC->I2c.SenTable[SensorIndex].SenDesc);
- pBuf = GetTrapEntry(pAC, TrapId,
- SK_PNMI_TRAP_SENSOR_LEN_BASE + DescrLen);
- Offset = SK_PNMI_TRAP_SIMPLE_LEN;
-
- /* Store additionally sensor trap related data */
- Val32 = OID_SKGE_SENSOR_INDEX;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- *(pBuf + Offset + 4) = 4;
- Val32 = (SK_U32)SensorIndex;
- SK_PNMI_STORE_U32(pBuf + Offset + 5, Val32);
- Offset += 9;
-
- Val32 = (SK_U32)OID_SKGE_SENSOR_DESCR;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- *(pBuf + Offset + 4) = (char)DescrLen;
- SK_MEMCPY(pBuf + Offset + 5, pAC->I2c.SenTable[SensorIndex].SenDesc,
- DescrLen);
- Offset += DescrLen + 5;
-
- Val32 = OID_SKGE_SENSOR_TYPE;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- *(pBuf + Offset + 4) = 1;
- *(pBuf + Offset + 5) = (char)pAC->I2c.SenTable[SensorIndex].SenType;
- Offset += 6;
-
- Val32 = OID_SKGE_SENSOR_VALUE;
- SK_PNMI_STORE_U32(pBuf + Offset, Val32);
- *(pBuf + Offset + 4) = 4;
- Val32 = (SK_U32)pAC->I2c.SenTable[SensorIndex].SenValue;
- SK_PNMI_STORE_U32(pBuf + Offset + 5, Val32);
-}
-
-/*****************************************************************************
- *
- * QueueRlmtNewMacTrap - Store a port switch trap in the trap buffer
- *
- * Description:
- * Nothing further to explain.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void QueueRlmtNewMacTrap(
-SK_AC *pAC, /* Pointer to adapter context */
-unsigned int ActiveMac) /* Index (0..n) of the currently active port */
-{
- char *pBuf;
- SK_U32 Val32;
-
-
- pBuf = GetTrapEntry(pAC, OID_SKGE_TRAP_RLMT_CHANGE_PORT,
- SK_PNMI_TRAP_RLMT_CHANGE_LEN);
-
- Val32 = OID_SKGE_RLMT_PORT_ACTIVE;
- SK_PNMI_STORE_U32(pBuf + SK_PNMI_TRAP_SIMPLE_LEN, Val32);
- *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 4) = 1;
- *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 5) = (char)ActiveMac;
-}
-
-/*****************************************************************************
- *
- * QueueRlmtPortTrap - Store port related RLMT trap to trap buffer
- *
- * Description:
- * Nothing further to explain.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void QueueRlmtPortTrap(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_U32 TrapId, /* Type of RLMT port trap */
-unsigned int PortIndex) /* Index of the port, which changed its state */
-{
- char *pBuf;
- SK_U32 Val32;
-
-
- pBuf = GetTrapEntry(pAC, TrapId, SK_PNMI_TRAP_RLMT_PORT_LEN);
-
- Val32 = OID_SKGE_RLMT_PORT_INDEX;
- SK_PNMI_STORE_U32(pBuf + SK_PNMI_TRAP_SIMPLE_LEN, Val32);
- *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 4) = 1;
- *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 5) = (char)PortIndex;
-}
-
-/*****************************************************************************
- *
- * CopyMac - Copies a MAC address
- *
- * Description:
- * Nothing further to explain.
- *
- * Returns:
- * Nothing
- */
-PNMI_STATIC void CopyMac(
-char *pDst, /* Pointer to destination buffer */
-SK_MAC_ADDR *pMac) /* Pointer of Source */
-{
- int i;
-
-
- for (i = 0; i < sizeof(SK_MAC_ADDR); i ++) {
-
- *(pDst + i) = pMac->a[i];
- }
-}
-
-
-#ifdef SK_POWER_MGMT
-/*****************************************************************************
- *
- * PowerManagement - OID handler function of PowerManagement OIDs
- *
- * Description:
- * The code is simple. No description necessary.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was successfully performed.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter.
- */
-
-PNMI_STATIC int PowerManagement(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which to mgmt data will be retrieved */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
-{
-
- SK_U32 RetCode = SK_PNMI_ERR_GENERAL;
-
- /*
- * Check instance. We only handle single instance variables
- */
- if (Instance != (SK_U32)(-1) && Instance != 1) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- /*
- * Perform action
- */
- if (Action == SK_PNMI_GET) {
-
- /*
- * Check length
- */
- switch (Id) {
-
- case OID_PNP_CAPABILITIES:
- if (*pLen < sizeof(SK_PNP_CAPABILITIES)) {
-
- *pLen = sizeof(SK_PNP_CAPABILITIES);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_PNP_QUERY_POWER:
- case OID_PNP_ENABLE_WAKE_UP:
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_PNP_SET_POWER:
- case OID_PNP_ADD_WAKE_UP_PATTERN:
- case OID_PNP_REMOVE_WAKE_UP_PATTERN:
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR040,
- SK_PNMI_ERR040MSG);
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Get value
- */
- switch (Id) {
-
- case OID_PNP_CAPABILITIES:
- RetCode = SkPowerQueryPnPCapabilities(pAC, IoC, pBuf, pLen);
- break;
-
- case OID_PNP_QUERY_POWER:
- /* The Windows DDK describes: An OID_PNP_QUERY_POWER requests
- the miniport to indicate whether it can transition its NIC
- to the low-power state.
- A miniport driver must always return NDIS_STATUS_SUCCESS
- to a query of OID_PNP_QUERY_POWER. */
- RetCode = SK_PNMI_ERR_OK;
- break;
-
- /* NDIS handles these OIDs as write-only.
- * So in case of get action the buffer with written length = 0
- * is returned
- */
- case OID_PNP_SET_POWER:
- case OID_PNP_ADD_WAKE_UP_PATTERN:
- case OID_PNP_REMOVE_WAKE_UP_PATTERN:
- *pLen = 0;
- RetCode = SK_PNMI_ERR_OK;
- break;
-
- case OID_PNP_ENABLE_WAKE_UP:
- RetCode = SkPowerGetEnableWakeUp(pAC, IoC, pBuf, pLen);
- break;
-
- default:
- RetCode = SK_PNMI_ERR_GENERAL;
- break;
- }
-
- return (RetCode);
- }
-
- /*
- * From here SET or PRESET action. Check if the passed
- * buffer length is plausible.
- */
- switch (Id) {
- case OID_PNP_SET_POWER:
- case OID_PNP_ENABLE_WAKE_UP:
- if (*pLen < sizeof(SK_U32)) {
-
- *pLen = sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- if (*pLen != sizeof(SK_U32)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- break;
-
- case OID_PNP_ADD_WAKE_UP_PATTERN:
- case OID_PNP_REMOVE_WAKE_UP_PATTERN:
- if (*pLen < sizeof(SK_PM_PACKET_PATTERN)) {
-
- *pLen = 0;
- return (SK_PNMI_ERR_BAD_VALUE);
- }
- break;
-
- default:
- *pLen = 0;
- return (SK_PNMI_ERR_READ_ONLY);
- }
-
- /*
- * Perform preset or set
- */
-
- /* POWER module does not support PRESET action */
- if (Action == SK_PNMI_PRESET) {
- return (SK_PNMI_ERR_OK);
- }
-
- switch (Id) {
- case OID_PNP_SET_POWER:
- RetCode = SkPowerSetPower(pAC, IoC, pBuf, pLen);
- break;
-
- case OID_PNP_ADD_WAKE_UP_PATTERN:
- RetCode = SkPowerAddWakeUpPattern(pAC, IoC, pBuf, pLen);
- break;
-
- case OID_PNP_REMOVE_WAKE_UP_PATTERN:
- RetCode = SkPowerRemoveWakeUpPattern(pAC, IoC, pBuf, pLen);
- break;
-
- case OID_PNP_ENABLE_WAKE_UP:
- RetCode = SkPowerSetEnableWakeUp(pAC, IoC, pBuf, pLen);
- break;
-
- default:
- RetCode = SK_PNMI_ERR_GENERAL;
- }
-
- return (RetCode);
-}
-#endif /* SK_POWER_MGMT */
-
-
-/*****************************************************************************
- *
- * Vct - OID handler function of OIDs
- *
- * Description:
- * The code is simple. No description necessary.
- *
- * Returns:
- * SK_PNMI_ERR_OK The request was performed successfully.
- * SK_PNMI_ERR_GENERAL A general severe internal error occured.
- * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
- * the correct data (e.g. a 32bit value is
- * needed, but a 16 bit value was passed).
- * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
- * exist (e.g. port instance 3 on a two port
- * adapter).
- * SK_PNMI_ERR_READ_ONLY Only the Get action is allowed.
- *
- */
-
-PNMI_STATIC int Vct(
-SK_AC *pAC, /* Pointer to adapter context */
-SK_IOC IoC, /* IO context handle */
-int Action, /* Get/PreSet/Set action */
-SK_U32 Id, /* Object ID that is to be processed */
-char *pBuf, /* Buffer to which the mgmt data will be copied */
-unsigned int *pLen, /* On call: buffer length. On return: used buffer */
-SK_U32 Instance, /* Instance (-1,2..n) that is to be queried */
-unsigned int TableIndex, /* Index to the Id table */
-SK_U32 NetIndex) /* NetIndex (0..n), in single net mode always zero */
-{
- SK_GEPORT *pPrt;
- SK_PNMI_VCT *pVctBackupData;
- SK_U32 LogPortMax;
- SK_U32 PhysPortMax;
- SK_U32 PhysPortIndex;
- SK_U32 Limit;
- SK_U32 Offset;
- SK_BOOL Link;
- SK_U32 RetCode = SK_PNMI_ERR_GENERAL;
- int i;
- SK_EVPARA Para;
- SK_U32 CableLength;
-
- /*
- * Calculate the port indexes from the instance.
- */
- PhysPortMax = pAC->GIni.GIMacsFound;
- LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
-
- /* Dual net mode? */
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- LogPortMax--;
- }
-
- if ((Instance != (SK_U32) (-1))) {
- /* Check instance range. */
- if ((Instance < 2) || (Instance > LogPortMax)) {
- *pLen = 0;
- return (SK_PNMI_ERR_UNKNOWN_INST);
- }
-
- if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
- PhysPortIndex = NetIndex;
- }
- else {
- PhysPortIndex = Instance - 2;
- }
- Limit = PhysPortIndex + 1;
- }
- else { /*
- * Instance == (SK_U32) (-1), get all Instances of that OID.
- *
- * Not implemented yet. May be used in future releases.
- */
- PhysPortIndex = 0;
- Limit = PhysPortMax;
- }
-
- pPrt = &pAC->GIni.GP[PhysPortIndex];
- if (pPrt->PHWLinkUp) {
- Link = SK_TRUE;
- }
- else {
- Link = SK_FALSE;
- }
-
- /*
- * Check MAC type.
- */
- if (pPrt->PhyType != SK_PHY_MARV_COPPER) {
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /* Initialize backup data pointer. */
- pVctBackupData = &pAC->Pnmi.VctBackup[PhysPortIndex];
-
- /*
- * Check action type.
- */
- if (Action == SK_PNMI_GET) {
- /*
- * Check length.
- */
- switch (Id) {
-
- case OID_SKGE_VCT_GET:
- if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_PNMI_VCT)) {
- *pLen = (Limit - PhysPortIndex) * sizeof(SK_PNMI_VCT);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- case OID_SKGE_VCT_STATUS:
- if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U8)) {
- *pLen = (Limit - PhysPortIndex) * sizeof(SK_U8);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Get value.
- */
- Offset = 0;
- for (; PhysPortIndex < Limit; PhysPortIndex++) {
- switch (Id) {
-
- case OID_SKGE_VCT_GET:
- if ((Link == SK_FALSE) &&
- (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_PENDING)) {
- RetCode = SkGmCableDiagStatus(pAC, IoC, PhysPortIndex, SK_FALSE);
- if (RetCode == 0) {
- pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_PENDING;
- pAC->Pnmi.VctStatus[PhysPortIndex] |=
- (SK_PNMI_VCT_NEW_VCT_DATA | SK_PNMI_VCT_TEST_DONE);
-
- /* Copy results for later use to PNMI struct. */
- for (i = 0; i < 4; i++) {
- if (pPrt->PMdiPairSts[i] == SK_PNMI_VCT_NORMAL_CABLE) {
- if ((pPrt->PMdiPairLen[i] > 35) && (pPrt->PMdiPairLen[i] < 0xff)) {
- pPrt->PMdiPairSts[i] = SK_PNMI_VCT_IMPEDANCE_MISMATCH;
- }
- }
- if ((pPrt->PMdiPairLen[i] > 35) && (pPrt->PMdiPairLen[i] != 0xff)) {
- CableLength = 1000 * (((175 * pPrt->PMdiPairLen[i]) / 210) - 28);
- }
- else {
- CableLength = 0;
- }
- pVctBackupData->PMdiPairLen[i] = CableLength;
- pVctBackupData->PMdiPairSts[i] = pPrt->PMdiPairSts[i];
- }
-
- Para.Para32[0] = PhysPortIndex;
- Para.Para32[1] = -1;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Para);
- SkEventDispatcher(pAC, IoC);
- }
- else {
- ; /* VCT test is running. */
- }
- }
-
- /* Get all results. */
- CheckVctStatus(pAC, IoC, pBuf, Offset, PhysPortIndex);
- Offset += sizeof(SK_U8);
- *(pBuf + Offset) = pPrt->PCableLen;
- Offset += sizeof(SK_U8);
- for (i = 0; i < 4; i++) {
- SK_PNMI_STORE_U32((pBuf + Offset), pVctBackupData->PMdiPairLen[i]);
- Offset += sizeof(SK_U32);
- }
- for (i = 0; i < 4; i++) {
- *(pBuf + Offset) = pVctBackupData->PMdiPairSts[i];
- Offset += sizeof(SK_U8);
- }
-
- RetCode = SK_PNMI_ERR_OK;
- break;
-
- case OID_SKGE_VCT_STATUS:
- CheckVctStatus(pAC, IoC, pBuf, Offset, PhysPortIndex);
- Offset += sizeof(SK_U8);
- RetCode = SK_PNMI_ERR_OK;
- break;
-
- default:
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- } /* for */
- *pLen = Offset;
- return (RetCode);
-
- } /* if SK_PNMI_GET */
-
- /*
- * From here SET or PRESET action. Check if the passed
- * buffer length is plausible.
- */
-
- /*
- * Check length.
- */
- switch (Id) {
- case OID_SKGE_VCT_SET:
- if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U32)) {
- *pLen = (Limit - PhysPortIndex) * sizeof(SK_U32);
- return (SK_PNMI_ERR_TOO_SHORT);
- }
- break;
-
- default:
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
-
- /*
- * Perform preset or set.
- */
-
- /* VCT does not support PRESET action. */
- if (Action == SK_PNMI_PRESET) {
- return (SK_PNMI_ERR_OK);
- }
-
- Offset = 0;
- for (; PhysPortIndex < Limit; PhysPortIndex++) {
- switch (Id) {
- case OID_SKGE_VCT_SET: /* Start VCT test. */
- if (Link == SK_FALSE) {
- SkGeStopPort(pAC, IoC, PhysPortIndex, SK_STOP_ALL, SK_SOFT_RST);
-
- RetCode = SkGmCableDiagStatus(pAC, IoC, PhysPortIndex, SK_TRUE);
- if (RetCode == 0) { /* RetCode: 0 => Start! */
- pAC->Pnmi.VctStatus[PhysPortIndex] |= SK_PNMI_VCT_PENDING;
- pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_NEW_VCT_DATA;
- pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_LINK;
-
- /*
- * Start VCT timer counter.
- */
- SK_MEMSET((char *) &Para, 0, sizeof(Para));
- Para.Para32[0] = PhysPortIndex;
- Para.Para32[1] = -1;
- SkTimerStart(pAC, IoC, &pAC->Pnmi.VctTimeout[PhysPortIndex].VctTimer,
- 4000000, SKGE_PNMI, SK_PNMI_EVT_VCT_RESET, Para);
- SK_PNMI_STORE_U32((pBuf + Offset), RetCode);
- RetCode = SK_PNMI_ERR_OK;
- }
- else { /* RetCode: 2 => Running! */
- SK_PNMI_STORE_U32((pBuf + Offset), RetCode);
- RetCode = SK_PNMI_ERR_OK;
- }
- }
- else { /* RetCode: 4 => Link! */
- RetCode = 4;
- SK_PNMI_STORE_U32((pBuf + Offset), RetCode);
- RetCode = SK_PNMI_ERR_OK;
- }
- Offset += sizeof(SK_U32);
- break;
-
- default:
- *pLen = 0;
- return (SK_PNMI_ERR_GENERAL);
- }
- } /* for */
- *pLen = Offset;
- return (RetCode);
-
-} /* Vct */
-
-
-PNMI_STATIC void CheckVctStatus(
-SK_AC *pAC,
-SK_IOC IoC,
-char *pBuf,
-SK_U32 Offset,
-SK_U32 PhysPortIndex)
-{
- SK_GEPORT *pPrt;
- SK_PNMI_VCT *pVctData;
- SK_U32 RetCode;
- SK_U8 LinkSpeedUsed;
-
- pPrt = &pAC->GIni.GP[PhysPortIndex];
-
- pVctData = (SK_PNMI_VCT *) (pBuf + Offset);
- pVctData->VctStatus = SK_PNMI_VCT_NONE;
-
- if (!pPrt->PHWLinkUp) {
-
- /* Was a VCT test ever made before? */
- if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_TEST_DONE) {
- if ((pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_LINK)) {
- pVctData->VctStatus |= SK_PNMI_VCT_OLD_VCT_DATA;
- }
- else {
- pVctData->VctStatus |= SK_PNMI_VCT_NEW_VCT_DATA;
- }
- }
-
- /* Check VCT test status. */
- RetCode = SkGmCableDiagStatus(pAC,IoC, PhysPortIndex, SK_FALSE);
- if (RetCode == 2) { /* VCT test is running. */
- pVctData->VctStatus |= SK_PNMI_VCT_RUNNING;
- }
- else { /* VCT data was copied to pAC here. Check PENDING state. */
- if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_PENDING) {
- pVctData->VctStatus |= SK_PNMI_VCT_NEW_VCT_DATA;
- }
- }
-
- if (pPrt->PCableLen != 0xff) { /* Old DSP value. */
- pVctData->VctStatus |= SK_PNMI_VCT_OLD_DSP_DATA;
- }
- }
- else {
-
- /* Was a VCT test ever made before? */
- if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_TEST_DONE) {
- pVctData->VctStatus &= ~SK_PNMI_VCT_NEW_VCT_DATA;
- pVctData->VctStatus |= SK_PNMI_VCT_OLD_VCT_DATA;
- }
-
- /* DSP only valid in 100/1000 modes. */
- LinkSpeedUsed = pAC->GIni.GP[PhysPortIndex].PLinkSpeedUsed;
- if (LinkSpeedUsed != SK_LSPEED_STAT_10MBPS) {
- pVctData->VctStatus |= SK_PNMI_VCT_NEW_DSP_DATA;
- }
- }
-
-} /* CheckVctStatus */
+/*****************************************************************************
+ *
+ * Name: skgepnmi.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Private Network Management Interface
+ *
+ ****************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/*****************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgepnmi.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.102 2002/12/16 14:03:24 tschilli
+ * VCT code in Vct() changed.
+ *
+ * Revision 1.101 2002/12/16 09:04:10 tschilli
+ * Code for VCT handling added.
+ *
+ * Revision 1.100 2002/09/26 14:28:13 tschilli
+ * For XMAC the values in the SK_PNMI_PORT Port struct are copied to
+ * the new SK_PNMI_PORT BufPort struct during a MacUpdate() call.
+ * These values are used when GetPhysStatVal() is called. With this
+ * mechanism you get the best results when software corrections for
+ * counters are needed. Example: RX_LONGFRAMES.
+ *
+ * Revision 1.99 2002/09/17 12:31:19 tschilli
+ * OID_SKGE_TX_HW_ERROR_CTS, OID_SKGE_OUT_ERROR_CTS, OID_GEN_XMIT_ERROR:
+ * Double count of SK_PNMI_HTX_EXCESS_COL in function General() removed.
+ * OID_PNP_CAPABILITIES: sizeof(SK_PM_WAKE_UP_CAPABILITIES) changed to
+ * sizeof(SK_PNP_CAPABILITIES) in function PowerManagement().
+ *
+ * Revision 1.98 2002/09/10 09:00:03 rwahl
+ * Adapted boolean definitions according sktypes.
+ *
+ * Revision 1.97 2002/09/05 15:07:03 rwahl
+ * Editorial changes.
+ *
+ * Revision 1.96 2002/09/05 11:04:14 rwahl
+ * - Rx/Tx packets statistics of virtual port were zero on link down (#10750)
+ * - For GMAC the overflow IRQ for Rx longframe counter was not counted.
+ * - Incorrect calculation for oids OID_SKGE_RX_HW_ERROR_CTS,
+ * OID_SKGE_IN_ERRORS_CTS, OID_GEN_RCV_ERROR.
+ * - Moved correction for OID_SKGE_STAT_RX_TOO_LONG to GetPhysStatVal().
+ * - Editorial changes.
+ *
+ * Revision 1.95 2002/09/04 08:53:37 rwahl
+ * - Incorrect statistics for Rx_too_long counter with jumbo frame (#10751)
+ * - StatRxFrameTooLong & StatRxPMaccErr counters were not reset.
+ * - Fixed compiler warning for debug msg arg types.
+ *
+ * Revision 1.94 2002/08/09 15:42:14 rwahl
+ * - Fixed StatAddr table for GMAC.
+ * - VirtualConf(): returned indeterminated status for speed oids if no
+ * active port.
+ *
+ * Revision 1.93 2002/08/09 11:04:59 rwahl
+ * Added handler for link speed caps.
+ *
+ * Revision 1.92 2002/08/09 09:43:03 rwahl
+ * - Added handler for NDIS OID_PNP_xxx ids.
+ *
+ * Revision 1.91 2002/07/17 19:53:03 rwahl
+ * - Added StatOvrflwBit table for XMAC & GMAC.
+ * - Extended StatAddr table for GMAC. Added check of number of counters
+ * in enumeration and size of StatAddr table on init level.
+ * - Added use of GIFunc table.
+ * - ChipSet is not static anymore,
+ * - Extended SIRQ event handler for both mac types.
+ * - Fixed rx short counter bug (#10620)
+ * - Added handler for oids SKGE_SPEED_MODE & SKGE_SPEED_STATUS.
+ * - Extendet GetPhysStatVal() for GMAC.
+ * - Editorial changes.
+ *
+ * Revision 1.90 2002/05/22 08:56:25 rwahl
+ * - Moved OID table to separate source file.
+ * - Fix: TX_DEFFERAL counter incremented in full-duplex mode.
+ * - Use string definitions for error msgs.
+ *
+ * Revision 1.89 2001/09/18 10:01:30 mkunz
+ * some OID's fixed for dualnetmode
+ *
+ * Revision 1.88 2001/08/02 07:58:08 rwahl
+ * - Fixed NetIndex to csum module at ResetCounter().
+ *
+ * Revision 1.87 2001/04/06 13:35:09 mkunz
+ * -Bugs fixed in handling of OID_SKGE_MTU and the VPD OID's
+ *
+ * Revision 1.86 2001/03/09 09:18:03 mkunz
+ * Changes in SK_DBG_MSG
+ *
+ * Revision 1.85 2001/03/08 09:37:31 mkunz
+ * Bugfix in ResetCounter for Pnmi.Port structure
+ *
+ * Revision 1.84 2001/03/06 09:04:55 mkunz
+ * Made some changes in instance calculation
+ *
+ * Revision 1.83 2001/02/15 09:15:32 mkunz
+ * Necessary changes for dual net mode added
+ *
+ * Revision 1.82 2001/02/07 08:24:19 mkunz
+ * -Made changes in handling of OID_SKGE_MTU
+ *
+ * Revision 1.81 2001/02/06 09:58:00 mkunz
+ * -Vpd bug fixed
+ * -OID_SKGE_MTU added
+ * -pnmi support for dual net mode. Interface function and macros extended
+ *
+ * Revision 1.80 2001/01/22 13:41:35 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.79 2000/12/05 14:57:40 cgoos
+ * SetStruct failed before first Link Up (link mode of virtual
+ * port "INDETERMINATED").
+ *
+ * Revision 1.78 2000/09/12 10:44:58 cgoos
+ * Fixed SK_PNMI_STORE_U32 calls with typecasted argument.
+ *
+ * Revision 1.77 2000/09/07 08:10:19 rwahl
+ * - Modified algorithm for 64bit NDIS statistic counters;
+ * returns 64bit or 32bit value depending on passed buffer
+ * size. Indicate capability for 64bit NDIS counter, if passed
+ * buffer size is zero. OID_GEN_XMIT_ERROR, OID_GEN_RCV_ERROR,
+ * and OID_GEN_RCV_NO_BUFFER handled as 64bit counter, too.
+ * - corrected OID_SKGE_RLMT_PORT_PREFERRED.
+ *
+ * Revision 1.76 2000/08/03 15:23:39 rwahl
+ * - Correction for FrameTooLong counter has to be moved to OID handling
+ * routines (instead of statistic counter routine).
+ * - Fix in XMAC Reset Event handling: Only offset counter for hardware
+ * statistic registers are updated.
+ *
+ * Revision 1.75 2000/08/01 16:46:05 rwahl
+ * - Added StatRxLongFrames counter and correction of FrameTooLong counter.
+ * - Added directive to control width (default = 32bit) of NDIS statistic
+ * counters (SK_NDIS_64BIT_CTR).
+ *
+ * Revision 1.74 2000/07/04 11:41:53 rwahl
+ * - Added volition connector type.
+ *
+ * Revision 1.73 2000/03/15 16:33:10 rwahl
+ * Fixed bug 10510; wrong reset of virtual port statistic counters.
+ *
+ * Revision 1.72 1999/12/06 16:15:53 rwahl
+ * Fixed problem of instance range for current and factory MAC address.
+ *
+ * Revision 1.71 1999/12/06 10:14:20 rwahl
+ * Fixed bug 10476; set operation for PHY_OPERATION_MODE.
+ *
+ * Revision 1.70 1999/11/22 13:33:34 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.69 1999/10/18 11:42:15 rwahl
+ * Added typecasts for checking event dependent param (debug only).
+ *
+ * Revision 1.68 1999/10/06 09:35:59 cgoos
+ * Added state check to PHY_READ call (hanged if called during startup).
+ *
+ * Revision 1.67 1999/09/22 09:53:20 rwahl
+ * - Read Broadcom register for updating fcs error counter (1000Base-T).
+ *
+ * Revision 1.66 1999/08/26 13:47:56 rwahl
+ * Added SK_DRIVER_SENDEVENT when queueing RLMT_CHANGE_THRES trap.
+ *
+ * Revision 1.65 1999/07/26 07:49:35 cgoos
+ * Added two typecasts to avoid compiler warnings.
+ *
+ * Revision 1.64 1999/05/20 09:24:12 cgoos
+ * Changes for 1000Base-T (sensors, Master/Slave).
+ *
+ * Revision 1.63 1999/04/13 15:11:58 mhaveman
+ * Moved include of rlmt.h to header skgepnmi.h because some macros
+ * are needed there.
+ *
+ * Revision 1.62 1999/04/13 15:08:07 mhaveman
+ * Replaced again SK_RLMT_CHECK_LINK with SK_PNMI_RLMT_MODE_CHK_LINK
+ * to grant unified interface by only using the PNMI header file.
+ * SK_PNMI_RLMT_MODE_CHK_LINK is defined the same as SK_RLMT_CHECK_LINK.
+ *
+ * Revision 1.61 1999/04/13 15:02:48 mhaveman
+ * Changes caused by review:
+ * -Changed some comments
+ * -Removed redundant check for OID_SKGE_PHYS_FAC_ADDR
+ * -Optimized PRESET check.
+ * -Meaning of error SK_ADDR_DUPLICATE_ADDRESS changed. Set of same
+ * address will now not cause this error. Removed corresponding check.
+ *
+ * Revision 1.60 1999/03/23 10:41:23 mhaveman
+ * Added comments.
+ *
+ * Revision 1.59 1999/02/19 08:01:28 mhaveman
+ * Fixed bug 10372 that after counter reset all ports were displayed
+ * as inactive.
+ *
+ * Revision 1.58 1999/02/16 18:04:47 mhaveman
+ * Fixed problem of twisted OIDs SENSOR_WAR_TIME and SENSOR_ERR_TIME.
+ *
+ * Revision 1.56 1999/01/27 12:29:11 mhaveman
+ * SkTimerStart was called with time value in milli seconds but needs
+ * micro seconds.
+ *
+ * Revision 1.55 1999/01/25 15:00:38 mhaveman
+ * Added support to allow multiple ports to be active. If this feature in
+ * future will be used, the Management Data Base variables PORT_ACTIVE
+ * and PORT_PREFERED should be moved to the port specific part of RLMT.
+ * Currently they return the values of the first active physical port
+ * found. A set to the virtual port will actually change all active
+ * physical ports. A get returns the melted values of all active physical
+ * ports. If the port values differ a return value INDETERMINATED will
+ * be returned. This effects especially the CONF group.
+ *
+ * Revision 1.54 1999/01/19 10:10:22 mhaveman
+ * -Fixed bug 10354: Counter values of virtual port were wrong after port
+ * switches
+ * -Added check if a switch to the same port is notified.
+ *
+ * Revision 1.53 1999/01/07 09:25:21 mhaveman
+ * Forgot to initialize a variable.
+ *
+ * Revision 1.52 1999/01/05 10:34:33 mhaveman
+ * Fixed little error in RlmtChangeEstimate calculation.
+ *
+ * Revision 1.51 1999/01/05 09:59:07 mhaveman
+ * -Moved timer start to init level 2
+ * -Redesigned port switch average calculation to avoid 64bit
+ * arithmetic.
+ *
+ * Revision 1.50 1998/12/10 15:13:59 mhaveman
+ * -Fixed: PHYS_CUR_ADDR returned wrong addresses
+ * -Fixed: RLMT_PORT_PREFERED and RLMT_CHANGE_THRES preset returned
+ * always BAD_VALUE.
+ * -Fixed: TRAP buffer seemed to sometimes suddenly empty
+ *
+ * Revision 1.49 1998/12/09 16:17:07 mhaveman
+ * Fixed: Couldnot delete VPD keys on UNIX.
+ *
+ * Revision 1.48 1998/12/09 14:11:10 mhaveman
+ * -Add: Debugmessage for XMAC_RESET supressed to minimize output.
+ * -Fixed: RlmtChangeThreshold will now be initialized.
+ * -Fixed: VPD_ENTRIES_LIST extended value with unnecessary space char.
+ * -Fixed: On VPD key creation an invalid key name could be created
+ * (e.g. A5)
+ * -Some minor changes in comments and code.
+ *
+ * Revision 1.47 1998/12/08 16:00:31 mhaveman
+ * -Fixed: For RLMT_PORT_ACTIVE will now be returned a 0 if no port
+ * is active.
+ * -Fixed: For the RLMT statistics group only the last value was
+ * returned and the rest of the buffer was filled with 0xff
+ * -Fixed: Mysteriously the preset on RLMT_MODE still returned
+ * BAD_VALUE.
+ * Revision 1.46 1998/12/08 10:04:56 mhaveman
+ * -Fixed: Preset on RLMT_MODE returned always BAD_VALUE error.
+ * -Fixed: Alignment error in GetStruct
+ * -Fixed: If for Get/Preset/SetStruct the buffer size is equal or
+ * larger than SK_PNMI_MIN_STRUCT_SIZE the return value is stored
+ * to the buffer. In this case the caller should always return
+ * ok to its upper routines. Only if the buffer size is less
+ * than SK_PNMI_MIN_STRUCT_SIZE and the return value is unequal
+ * to 0, an error should be returned by the caller.
+ * -Fixed: Wrong number of instances with RLMT statistic.
+ * -Fixed: Return now SK_LMODE_STAT_UNKNOWN if the LinkModeStatus is 0.
+ *
+ * Revision 1.45 1998/12/03 17:17:24 mhaveman
+ * -Removed for VPD create action the buffer size limitation to 4 bytes.
+ * -Pass now physical/active physical port to ADDR for CUR_ADDR set
+ *
+ * Revision 1.44 1998/12/03 15:14:35 mhaveman
+ * Another change to Vpd instance evaluation.
+ *
+ * Revision 1.43 1998/12/03 14:18:10 mhaveman
+ * -Fixed problem in PnmiSetStruct. It was impossible to set any value.
+ * -Removed VPD key evaluation for VPD_FREE_BYTES and VPD_ACTION.
+ *
+ * Revision 1.42 1998/12/03 11:31:47 mhaveman
+ * Inserted cast to satisfy lint.
+ *
+ * Revision 1.41 1998/12/03 11:28:16 mhaveman
+ * Removed SK_PNMI_CHECKPTR
+ *
+ * Revision 1.40 1998/12/03 11:19:07 mhaveman
+ * Fixed problems
+ * -A set to virtual port will now be ignored. A set with broadcast
+ * address to any port will be ignored.
+ * -GetStruct function made VPD instance calculation wrong.
+ * -Prefered port returned -1 instead of 0.
+ *
+ * Revision 1.39 1998/11/26 15:30:29 mhaveman
+ * Added sense mode to link mode.
+ *
+ * Revision 1.38 1998/11/23 15:34:00 mhaveman
+ * -Fixed bug for RX counters. On an RX overflow interrupt the high
+ * words of all RX counters were incremented.
+ * -SET operations on FLOWCTRL_MODE and LINK_MODE accept now the
+ * value 0, which has no effect. It is usefull for multiple instance
+ * SETs.
+ *
+ * Revision 1.37 1998/11/20 08:02:04 mhaveman
+ * -Fixed: Ports were compared with MAX_SENSORS
+ * -Fixed: Crash in GetTrapEntry with MEMSET macro
+ * -Fixed: Conversions between physical, logical port index and instance
+ *
+ * Revision 1.36 1998/11/16 07:48:53 mhaveman
+ * Casted SK_DRIVER_SENDEVENT with (void) to eleminate compiler warnings
+ * on Solaris.
+ *
+ * Revision 1.35 1998/11/16 07:45:34 mhaveman
+ * SkAddrOverride now returns value and will be checked.
+ *
+ * Revision 1.34 1998/11/10 13:40:37 mhaveman
+ * Needed to change interface, because NT driver needs a return value
+ * of needed buffer space on TOO_SHORT errors. Therefore all
+ * SkPnmiGet/Preset/Set functions now have a pointer to the length
+ * parameter, where the needed space on error is returned.
+ *
+ * Revision 1.33 1998/11/03 13:52:46 mhaveman
+ * Made file lint conform.
+ *
+ * Revision 1.32 1998/11/03 13:19:07 mhaveman
+ * The events SK_HWEV_SET_LMODE and SK_HWEV_SET_FLOWMODE pass now in
+ * Para32[0] the physical MAC index and in Para32[1] the new mode.
+ *
+ * Revision 1.31 1998/11/03 12:30:40 gklug
+ * fix: compiler warning memset
+ *
+ * Revision 1.30 1998/11/03 12:04:46 mhaveman
+ * Fixed problem in SENSOR_VALUE, which wrote beyond the buffer end
+ * Fixed alignment problem with CHIPSET.
+ *
+ * Revision 1.29 1998/11/02 11:23:54 mhaveman
+ * Corrected SK_ERROR_LOG to SK_ERR_LOG. Sorry.
+ *
+ * Revision 1.28 1998/11/02 10:47:16 mhaveman
+ * Added syslog messages for internal errors.
+ *
+ * Revision 1.27 1998/10/30 15:48:06 mhaveman
+ * Fixed problems after simulation of SK_PNMI_EVT_CHG_EST_TIMER and
+ * RlmtChangeThreshold calculation.
+ *
+ * Revision 1.26 1998/10/29 15:36:55 mhaveman
+ * -Fixed bug in trap buffer handling.
+ * -OID_SKGE_DRIVER_DESCR, OID_SKGE_DRIVER_VERSION, OID_SKGE_HW_DESCR,
+ * OID_SKGE_HW_VERSION, OID_SKGE_VPD_ENTRIES_LIST, OID_SKGE_VPD_KEY,
+ * OID_SKGE_VPD_VALUE, and OID_SKGE_SENSOR_DESCR return values with
+ * a leading octet before each string storing the string length.
+ * -Perform a RlmtUpdate during SK_PNMI_EVT_XMAC_RESET to minimize
+ * RlmtUpdate calls in GetStatVal.
+ * -Inserted SK_PNMI_CHECKFLAGS macro increase readability.
+ *
+ * Revision 1.25 1998/10/29 08:50:36 mhaveman
+ * Fixed problems after second event simulation.
+ *
+ * Revision 1.24 1998/10/28 08:44:37 mhaveman
+ * -Fixed alignment problem
+ * -Fixed problems during event simulation
+ * -Fixed sequence of error return code (INSTANCE -> ACCESS -> SHORT)
+ * -Changed type of parameter Instance back to SK_U32 because of VPD
+ * -Updated new VPD function calls
+ *
+ * Revision 1.23 1998/10/23 10:16:37 mhaveman
+ * Fixed bugs after buffer test simulation.
+ *
+ * Revision 1.22 1998/10/21 13:23:52 mhaveman
+ * -Call syntax of SkOsGetTime() changed to SkOsGetTime(pAc).
+ * -Changed calculation of hundrets of seconds.
+ *
+ * Revision 1.20 1998/10/20 07:30:45 mhaveman
+ * Made type changes to unsigned integer where possible.
+ *
+ * Revision 1.19 1998/10/19 10:51:30 mhaveman
+ * -Made Bug fixes after simulation run
+ * -Renamed RlmtMAC... to RlmtPort...
+ * -Marked workarounds with Errata comments
+ *
+ * Revision 1.18 1998/10/14 07:50:08 mhaveman
+ * -For OID_SKGE_LINK_STATUS the link down detection has moved from RLMT
+ * to HWACCESS.
+ * -Provided all MEMCPY/MEMSET macros with (char *) pointers, because
+ * Solaris throwed warnings when mapping to bcopy/bset.
+ *
+ * Revision 1.17 1998/10/13 07:42:01 mhaveman
+ * -Added OIDs OID_SKGE_TRAP_NUMBER and OID_SKGE_ALL_DATA
+ * -Removed old cvs history entries
+ * -Renamed MacNumber to PortNumber
+ *
+ * Revision 1.16 1998/10/07 10:52:49 mhaveman
+ * -Inserted handling of some OID_GEN_ Ids for windows
+ * -Fixed problem with 803.2 statistic.
+ *
+ * Revision 1.15 1998/10/01 09:16:29 mhaveman
+ * Added Debug messages for function call and UpdateFlag tracing.
+ *
+ * Revision 1.14 1998/09/30 13:39:09 mhaveman
+ * -Reduced namings of 'MAC' by replacing them with 'PORT'.
+ * -Completed counting of OID_SKGE_RX_HW_ERROR_CTS,
+ * OID_SKGE_TX_HW_ERROR_CTS,
+ * OID_SKGE_IN_ERRORS_CTS, and OID_SKGE_OUT_ERROR_CTS.
+ * -SET check for RlmtMode
+ *
+ * Revision 1.13 1998/09/28 13:13:08 mhaveman
+ * Hide strcmp, strlen, and strncpy behind macros SK_STRCMP, SK_STRLEN,
+ * and SK_STRNCPY. (Same reasons as for mem.. and MEM..)
+ *
+ * Revision 1.12 1998/09/16 08:18:36 cgoos
+ * Fix: XM_INxx and XM_OUTxx called with different parameter order:
+ * sometimes IoC,Mac,... sometimes Mac,IoC,... Now always first variant.
+ * Fix: inserted "Pnmi." into some pAC->pDriverDescription / Version.
+ * Change: memset, memcpy to makros SK_MEMSET, SK_MEMCPY
+ *
+ * Revision 1.11 1998/09/04 17:01:45 mhaveman
+ * Added SyncCounter as macro and OID_SKGE_.._NO_DESCR_CTS to
+ * OID_SKGE_RX_NO_BUF_CTS.
+ *
+ * Revision 1.10 1998/09/04 14:35:35 mhaveman
+ * Added macro counters, that are counted by driver.
+ *
+ ****************************************************************************/
+
+
+#include <config.h>
+
+static const char SysKonnectFileId[] =
+ "@(#) $Id: skgepnmi.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $"
+ " (C) SysKonnect.";
+
+#include "h/skdrv1st.h"
+#include "h/sktypes.h"
+#include "h/xmac_ii.h"
+#include "h/skdebug.h"
+#include "h/skqueue.h"
+#include "h/skgepnmi.h"
+#include "h/skgesirq.h"
+#include "h/skcsum.h"
+#include "h/skvpd.h"
+#include "h/skgehw.h"
+#include "h/skgeinit.h"
+#include "h/skdrv2nd.h"
+#include "h/skgepnm2.h"
+#ifdef SK_POWER_MGMT
+#include "h/skgepmgt.h"
+#endif
+/* defines *******************************************************************/
+
+#ifndef DEBUG
+#define PNMI_STATIC static
+#else /* DEBUG */
+#define PNMI_STATIC
+#endif /* DEBUG */
+
+/*
+ * Public Function prototypes
+ */
+int SkPnmiInit(SK_AC *pAC, SK_IOC IoC, int level);
+int SkPnmiGetVar(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, void *pBuf,
+ unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
+int SkPnmiPreSetVar(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, void *pBuf,
+ unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
+int SkPnmiSetVar(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, void *pBuf,
+ unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
+int SkPnmiGetStruct(SK_AC *pAC, SK_IOC IoC, void *pBuf,
+ unsigned int *pLen, SK_U32 NetIndex);
+int SkPnmiPreSetStruct(SK_AC *pAC, SK_IOC IoC, void *pBuf,
+ unsigned int *pLen, SK_U32 NetIndex);
+int SkPnmiSetStruct(SK_AC *pAC, SK_IOC IoC, void *pBuf,
+ unsigned int *pLen, SK_U32 NetIndex);
+int SkPnmiEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Param);
+
+
+/*
+ * Private Function prototypes
+ */
+
+PNMI_STATIC SK_U8 CalculateLinkModeStatus(SK_AC *pAC, SK_IOC IoC, unsigned int
+ PhysPortIndex);
+PNMI_STATIC SK_U8 CalculateLinkStatus(SK_AC *pAC, SK_IOC IoC, unsigned int
+ PhysPortIndex);
+PNMI_STATIC void CopyMac(char *pDst, SK_MAC_ADDR *pMac);
+PNMI_STATIC void CopyTrapQueue(SK_AC *pAC, char *pDstBuf);
+PNMI_STATIC SK_U64 GetPhysStatVal(SK_AC *pAC, SK_IOC IoC,
+ unsigned int PhysPortIndex, unsigned int StatIndex);
+PNMI_STATIC SK_U64 GetStatVal(SK_AC *pAC, SK_IOC IoC, unsigned int LogPortIndex,
+ unsigned int StatIndex, SK_U32 NetIndex);
+PNMI_STATIC char* GetTrapEntry(SK_AC *pAC, SK_U32 TrapId, unsigned int Size);
+PNMI_STATIC void GetTrapQueueLen(SK_AC *pAC, unsigned int *pLen,
+ unsigned int *pEntries);
+PNMI_STATIC int GetVpdKeyArr(SK_AC *pAC, SK_IOC IoC, char *pKeyArr,
+ unsigned int KeyArrLen, unsigned int *pKeyNo);
+PNMI_STATIC int LookupId(SK_U32 Id);
+PNMI_STATIC int MacUpdate(SK_AC *pAC, SK_IOC IoC, unsigned int FirstMac,
+ unsigned int LastMac);
+PNMI_STATIC int PnmiStruct(SK_AC *pAC, SK_IOC IoC, int Action, char *pBuf,
+ unsigned int *pLen, SK_U32 NetIndex);
+PNMI_STATIC int PnmiVar(SK_AC *pAC, SK_IOC IoC, int Action, SK_U32 Id,
+ char *pBuf, unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
+PNMI_STATIC void QueueRlmtNewMacTrap(SK_AC *pAC, unsigned int ActiveMac);
+PNMI_STATIC void QueueRlmtPortTrap(SK_AC *pAC, SK_U32 TrapId,
+ unsigned int PortIndex);
+PNMI_STATIC void QueueSensorTrap(SK_AC *pAC, SK_U32 TrapId,
+ unsigned int SensorIndex);
+PNMI_STATIC void QueueSimpleTrap(SK_AC *pAC, SK_U32 TrapId);
+PNMI_STATIC void ResetCounter(SK_AC *pAC, SK_IOC IoC, SK_U32 NetIndex);
+PNMI_STATIC int RlmtUpdate(SK_AC *pAC, SK_IOC IoC, SK_U32 NetIndex);
+PNMI_STATIC int SirqUpdate(SK_AC *pAC, SK_IOC IoC);
+PNMI_STATIC void VirtualConf(SK_AC *pAC, SK_IOC IoC, SK_U32 Id, char *pBuf);
+PNMI_STATIC int Vct(SK_AC *pAC, SK_IOC IoC, int Action, SK_U32 Id, char *pBuf,
+ unsigned int *pLen, SK_U32 Instance, unsigned int TableIndex, SK_U32 NetIndex);
+PNMI_STATIC void CheckVctStatus(SK_AC *, SK_IOC, char *, SK_U32, SK_U32);
+
+/*
+ * Table to correlate OID with handler function and index to
+ * hardware register stored in StatAddress if applicable.
+ */
+#include "skgemib.c"
+
+/* global variables **********************************************************/
+
+/*
+ * Overflow status register bit table and corresponding counter
+ * dependent on MAC type - the number relates to the size of overflow
+ * mask returned by the pFnMacOverflow function
+ */
+PNMI_STATIC const SK_U16 StatOvrflwBit[][SK_PNMI_MAC_TYPES] = {
+/* Bit0 */ { SK_PNMI_HTX, SK_PNMI_HTX_UNICAST},
+/* Bit1 */ { SK_PNMI_HTX_OCTETHIGH, SK_PNMI_HTX_BROADCAST},
+/* Bit2 */ { SK_PNMI_HTX_OCTETLOW, SK_PNMI_HTX_PMACC},
+/* Bit3 */ { SK_PNMI_HTX_BROADCAST, SK_PNMI_HTX_MULTICAST},
+/* Bit4 */ { SK_PNMI_HTX_MULTICAST, SK_PNMI_HTX_OCTETLOW},
+/* Bit5 */ { SK_PNMI_HTX_UNICAST, SK_PNMI_HTX_OCTETHIGH},
+/* Bit6 */ { SK_PNMI_HTX_LONGFRAMES, SK_PNMI_HTX_64},
+/* Bit7 */ { SK_PNMI_HTX_BURST, SK_PNMI_HTX_127},
+/* Bit8 */ { SK_PNMI_HTX_PMACC, SK_PNMI_HTX_255},
+/* Bit9 */ { SK_PNMI_HTX_MACC, SK_PNMI_HTX_511},
+/* Bit10 */ { SK_PNMI_HTX_SINGLE_COL, SK_PNMI_HTX_1023},
+/* Bit11 */ { SK_PNMI_HTX_MULTI_COL, SK_PNMI_HTX_MAX},
+/* Bit12 */ { SK_PNMI_HTX_EXCESS_COL, SK_PNMI_HTX_LONGFRAMES},
+/* Bit13 */ { SK_PNMI_HTX_LATE_COL, SK_PNMI_HTX_RESERVED},
+/* Bit14 */ { SK_PNMI_HTX_DEFFERAL, SK_PNMI_HTX_COL},
+/* Bit15 */ { SK_PNMI_HTX_EXCESS_DEF, SK_PNMI_HTX_LATE_COL},
+/* Bit16 */ { SK_PNMI_HTX_UNDERRUN, SK_PNMI_HTX_EXCESS_COL},
+/* Bit17 */ { SK_PNMI_HTX_CARRIER, SK_PNMI_HTX_MULTI_COL},
+/* Bit18 */ { SK_PNMI_HTX_UTILUNDER, SK_PNMI_HTX_SINGLE_COL},
+/* Bit19 */ { SK_PNMI_HTX_UTILOVER, SK_PNMI_HTX_UNDERRUN},
+/* Bit20 */ { SK_PNMI_HTX_64, SK_PNMI_HTX_RESERVED},
+/* Bit21 */ { SK_PNMI_HTX_127, SK_PNMI_HTX_RESERVED},
+/* Bit22 */ { SK_PNMI_HTX_255, SK_PNMI_HTX_RESERVED},
+/* Bit23 */ { SK_PNMI_HTX_511, SK_PNMI_HTX_RESERVED},
+/* Bit24 */ { SK_PNMI_HTX_1023, SK_PNMI_HTX_RESERVED},
+/* Bit25 */ { SK_PNMI_HTX_MAX, SK_PNMI_HTX_RESERVED},
+/* Bit26 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
+/* Bit27 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
+/* Bit28 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
+/* Bit29 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
+/* Bit30 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
+/* Bit31 */ { SK_PNMI_HTX_RESERVED, SK_PNMI_HTX_RESERVED},
+/* Bit32 */ { SK_PNMI_HRX, SK_PNMI_HRX_UNICAST},
+/* Bit33 */ { SK_PNMI_HRX_OCTETHIGH, SK_PNMI_HRX_BROADCAST},
+/* Bit34 */ { SK_PNMI_HRX_OCTETLOW, SK_PNMI_HRX_PMACC},
+/* Bit35 */ { SK_PNMI_HRX_BROADCAST, SK_PNMI_HRX_MULTICAST},
+/* Bit36 */ { SK_PNMI_HRX_MULTICAST, SK_PNMI_HRX_FCS},
+/* Bit37 */ { SK_PNMI_HRX_UNICAST, SK_PNMI_HRX_RESERVED},
+/* Bit38 */ { SK_PNMI_HRX_PMACC, SK_PNMI_HRX_OCTETLOW},
+/* Bit39 */ { SK_PNMI_HRX_MACC, SK_PNMI_HRX_OCTETHIGH},
+/* Bit40 */ { SK_PNMI_HRX_PMACC_ERR, SK_PNMI_HRX_BADOCTETLOW},
+/* Bit41 */ { SK_PNMI_HRX_MACC_UNKWN, SK_PNMI_HRX_BADOCTETHIGH},
+/* Bit42 */ { SK_PNMI_HRX_BURST, SK_PNMI_HRX_UNDERSIZE},
+/* Bit43 */ { SK_PNMI_HRX_MISSED, SK_PNMI_HRX_RUNT},
+/* Bit44 */ { SK_PNMI_HRX_FRAMING, SK_PNMI_HRX_64},
+/* Bit45 */ { SK_PNMI_HRX_OVERFLOW, SK_PNMI_HRX_127},
+/* Bit46 */ { SK_PNMI_HRX_JABBER, SK_PNMI_HRX_255},
+/* Bit47 */ { SK_PNMI_HRX_CARRIER, SK_PNMI_HRX_511},
+/* Bit48 */ { SK_PNMI_HRX_IRLENGTH, SK_PNMI_HRX_1023},
+/* Bit49 */ { SK_PNMI_HRX_SYMBOL, SK_PNMI_HRX_MAX},
+/* Bit50 */ { SK_PNMI_HRX_SHORTS, SK_PNMI_HRX_LONGFRAMES},
+/* Bit51 */ { SK_PNMI_HRX_RUNT, SK_PNMI_HRX_TOO_LONG},
+/* Bit52 */ { SK_PNMI_HRX_TOO_LONG, SK_PNMI_HRX_JABBER},
+/* Bit53 */ { SK_PNMI_HRX_FCS, SK_PNMI_HRX_RESERVED},
+/* Bit54 */ { SK_PNMI_HRX_RESERVED, SK_PNMI_HRX_OVERFLOW},
+/* Bit55 */ { SK_PNMI_HRX_CEXT, SK_PNMI_HRX_RESERVED},
+/* Bit56 */ { SK_PNMI_HRX_UTILUNDER, SK_PNMI_HRX_RESERVED},
+/* Bit57 */ { SK_PNMI_HRX_UTILOVER, SK_PNMI_HRX_RESERVED},
+/* Bit58 */ { SK_PNMI_HRX_64, SK_PNMI_HRX_RESERVED},
+/* Bit59 */ { SK_PNMI_HRX_127, SK_PNMI_HRX_RESERVED},
+/* Bit60 */ { SK_PNMI_HRX_255, SK_PNMI_HRX_RESERVED},
+/* Bit61 */ { SK_PNMI_HRX_511, SK_PNMI_HRX_RESERVED},
+/* Bit62 */ { SK_PNMI_HRX_1023, SK_PNMI_HRX_RESERVED},
+/* Bit63 */ { SK_PNMI_HRX_MAX, SK_PNMI_HRX_RESERVED}
+};
+
+/*
+ * Table for hardware register saving on resets and port switches
+ */
+PNMI_STATIC const SK_PNMI_STATADDR StatAddr[SK_PNMI_MAX_IDX][SK_PNMI_MAC_TYPES] = {
+ /* SK_PNMI_HTX */
+ {{XM_TXF_OK, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_OCTETHIGH */
+ {{XM_TXO_OK_HI, SK_TRUE}, {GM_TXO_OK_HI, SK_TRUE}},
+ /* SK_PNMI_HTX_OCTETLOW */
+ {{XM_TXO_OK_LO, SK_FALSE}, {GM_TXO_OK_LO, SK_FALSE}},
+ /* SK_PNMI_HTX_BROADCAST */
+ {{XM_TXF_BC_OK, SK_TRUE}, {GM_TXF_BC_OK, SK_TRUE}},
+ /* SK_PNMI_HTX_MULTICAST */
+ {{XM_TXF_MC_OK, SK_TRUE}, {GM_TXF_MC_OK, SK_TRUE}},
+ /* SK_PNMI_HTX_UNICAST */
+ {{XM_TXF_UC_OK, SK_TRUE}, {GM_TXF_UC_OK, SK_TRUE}},
+ /* SK_PNMI_HTX_BURST */
+ {{XM_TXE_BURST, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_PMACC */
+ {{XM_TXF_MPAUSE, SK_TRUE}, {GM_TXF_MPAUSE, SK_TRUE}},
+ /* SK_PNMI_HTX_MACC */
+ {{XM_TXF_MCTRL, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_COL */
+ {{0, SK_FALSE}, {GM_TXF_COL, SK_TRUE}},
+ /* SK_PNMI_HTX_SINGLE_COL */
+ {{XM_TXF_SNG_COL, SK_TRUE}, {GM_TXF_SNG_COL, SK_TRUE}},
+ /* SK_PNMI_HTX_MULTI_COL */
+ {{XM_TXF_MUL_COL, SK_TRUE}, {GM_TXF_MUL_COL, SK_TRUE}},
+ /* SK_PNMI_HTX_EXCESS_COL */
+ {{XM_TXF_ABO_COL, SK_TRUE}, {GM_TXF_ABO_COL, SK_TRUE}},
+ /* SK_PNMI_HTX_LATE_COL */
+ {{XM_TXF_LAT_COL, SK_TRUE}, {GM_TXF_LAT_COL, SK_TRUE}},
+ /* SK_PNMI_HTX_DEFFERAL */
+ {{XM_TXF_DEF, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_EXCESS_DEF */
+ {{XM_TXF_EX_DEF, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_UNDERRUN */
+ {{XM_TXE_FIFO_UR, SK_TRUE}, {GM_TXE_FIFO_UR, SK_TRUE}},
+ /* SK_PNMI_HTX_CARRIER */
+ {{XM_TXE_CS_ERR, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_UTILUNDER */
+ {{0, SK_FALSE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_UTILOVER */
+ {{0, SK_FALSE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_64 */
+ {{XM_TXF_64B, SK_TRUE}, {GM_TXF_64B, SK_TRUE}},
+ /* SK_PNMI_HTX_127 */
+ {{XM_TXF_127B, SK_TRUE}, {GM_TXF_127B, SK_TRUE}},
+ /* SK_PNMI_HTX_255 */
+ {{XM_TXF_255B, SK_TRUE}, {GM_TXF_255B, SK_TRUE}},
+ /* SK_PNMI_HTX_511 */
+ {{XM_TXF_511B, SK_TRUE}, {GM_TXF_511B, SK_TRUE}},
+ /* SK_PNMI_HTX_1023 */
+ {{XM_TXF_1023B, SK_TRUE}, {GM_TXF_1023B, SK_TRUE}},
+ /* SK_PNMI_HTX_MAX */
+ {{XM_TXF_MAX_SZ, SK_TRUE}, {GM_TXF_1518B, SK_TRUE}},
+ /* SK_PNMI_HTX_LONGFRAMES */
+ {{XM_TXF_LONG, SK_TRUE}, {GM_TXF_MAX_SZ, SK_TRUE}},
+ /* SK_PNMI_HTX_SYNC */
+ {{0, SK_FALSE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_SYNC_OCTET */
+ {{0, SK_FALSE}, {0, SK_FALSE}},
+ /* SK_PNMI_HTX_RESERVED */
+ {{0, SK_FALSE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX */
+ {{XM_RXF_OK, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_OCTETHIGH */
+ {{XM_RXO_OK_HI, SK_TRUE}, {GM_RXO_OK_HI, SK_TRUE}},
+ /* SK_PNMI_HRX_OCTETLOW */
+ {{XM_RXO_OK_LO, SK_FALSE}, {GM_RXO_OK_LO, SK_FALSE}},
+ /* SK_PNMI_HRX_BADOCTETHIGH */
+ {{0, SK_FALSE}, {GM_RXO_ERR_HI, SK_TRUE}},
+ /* SK_PNMI_HRX_BADOCTETLOW */
+ {{0, SK_FALSE}, {GM_RXO_ERR_LO, SK_TRUE}},
+ /* SK_PNMI_HRX_BROADCAST */
+ {{XM_RXF_BC_OK, SK_TRUE}, {GM_RXF_BC_OK, SK_TRUE}},
+ /* SK_PNMI_HRX_MULTICAST */
+ {{XM_RXF_MC_OK, SK_TRUE}, {GM_RXF_MC_OK, SK_TRUE}},
+ /* SK_PNMI_HRX_UNICAST */
+ {{XM_RXF_UC_OK, SK_TRUE}, {GM_RXF_UC_OK, SK_TRUE}},
+ /* SK_PNMI_HRX_PMACC */
+ {{XM_RXF_MPAUSE, SK_TRUE}, {GM_RXF_MPAUSE, SK_TRUE}},
+ /* SK_PNMI_HRX_MACC */
+ {{XM_RXF_MCTRL, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_PMACC_ERR */
+ {{XM_RXF_INV_MP, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_MACC_UNKWN */
+ {{XM_RXF_INV_MOC, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_BURST */
+ {{XM_RXE_BURST, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_MISSED */
+ {{XM_RXE_FMISS, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_FRAMING */
+ {{XM_RXF_FRA_ERR, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_UNDERSIZE */
+ {{0, SK_FALSE},{GM_RXF_SHT, SK_TRUE}},
+ /* SK_PNMI_HRX_OVERFLOW */
+ {{XM_RXE_FIFO_OV, SK_TRUE}, {GM_RXE_FIFO_OV, SK_TRUE}},
+ /* SK_PNMI_HRX_JABBER */
+ {{XM_RXF_JAB_PKT, SK_TRUE}, {GM_RXF_JAB_PKT, SK_TRUE}},
+ /* SK_PNMI_HRX_CARRIER */
+ {{XM_RXE_CAR_ERR, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_IRLENGTH */
+ {{XM_RXF_LEN_ERR, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_SYMBOL */
+ {{XM_RXE_SYM_ERR, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_SHORTS */
+ {{XM_RXE_SHT_ERR, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_RUNT */
+ {{XM_RXE_RUNT, SK_TRUE}, {GM_RXE_FRAG, SK_TRUE}},
+ /* SK_PNMI_HRX_TOO_LONG */
+ {{XM_RXF_LNG_ERR, SK_TRUE}, {GM_RXF_LNG_ERR, SK_TRUE}},
+ /* SK_PNMI_HRX_FCS */
+ {{XM_RXF_FCS_ERR, SK_TRUE}, {GM_RXF_FCS_ERR, SK_TRUE}},
+ /* SK_PNMI_HRX_CEXT */
+ {{XM_RXF_CEX_ERR, SK_TRUE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_UTILUNDER */
+ {{0, SK_FALSE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_UTILOVER */
+ {{0, SK_FALSE}, {0, SK_FALSE}},
+ /* SK_PNMI_HRX_64 */
+ {{XM_RXF_64B, SK_TRUE}, {GM_RXF_64B, SK_TRUE}},
+ /* SK_PNMI_HRX_127 */
+ {{XM_RXF_127B, SK_TRUE}, {GM_RXF_127B, SK_TRUE}},
+ /* SK_PNMI_HRX_255 */
+ {{XM_RXF_255B, SK_TRUE}, {GM_RXF_255B, SK_TRUE}},
+ /* SK_PNMI_HRX_511 */
+ {{XM_RXF_511B, SK_TRUE}, {GM_RXF_511B, SK_TRUE}},
+ /* SK_PNMI_HRX_1023 */
+ {{XM_RXF_1023B, SK_TRUE}, {GM_RXF_1023B, SK_TRUE}},
+ /* SK_PNMI_HRX_MAX */
+ {{XM_RXF_MAX_SZ, SK_TRUE}, {GM_RXF_1518B, SK_TRUE}},
+ /* SK_PNMI_HRX_LONGFRAMES */
+ {{0, SK_FALSE}, {GM_RXF_MAX_SZ, SK_TRUE}},
+ /* SK_PNMI_HRX_RESERVED */
+ {{0, SK_FALSE}, {0, SK_FALSE}}
+};
+
+
+/*****************************************************************************
+ *
+ * Public functions
+ *
+ */
+
+/*****************************************************************************
+ *
+ * SkPnmiInit - Init function of PNMI
+ *
+ * Description:
+ * SK_INIT_DATA: Initialises the data structures
+ * SK_INIT_IO: Resets the XMAC statistics, determines the device and
+ * connector type.
+ * SK_INIT_RUN: Starts a timer event for port switch per hour
+ * calculation.
+ *
+ * Returns:
+ * Always 0
+ */
+int SkPnmiInit(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Level) /* Initialization level */
+{
+ unsigned int PortMax; /* Number of ports */
+ unsigned int PortIndex; /* Current port index in loop */
+ SK_U16 Val16; /* Multiple purpose 16 bit variable */
+ SK_U8 Val8; /* Mulitple purpose 8 bit variable */
+ SK_EVPARA EventParam; /* Event struct for timer event */
+ SK_GEPORT *pPrt;
+ SK_PNMI_VCT *pVctBackupData;
+
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiInit: Called, level=%d\n", Level));
+
+ switch (Level) {
+
+ case SK_INIT_DATA:
+ SK_MEMSET((char *)&pAC->Pnmi, 0, sizeof(pAC->Pnmi));
+ pAC->Pnmi.TrapBufFree = SK_PNMI_TRAP_QUEUE_LEN;
+ pAC->Pnmi.StartUpTime = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
+ pAC->Pnmi.RlmtChangeThreshold = SK_PNMI_DEF_RLMT_CHG_THRES;
+ for (PortIndex = 0; PortIndex < SK_MAX_MACS; PortIndex ++) {
+
+ pAC->Pnmi.Port[PortIndex].ActiveFlag = SK_FALSE;
+ pAC->Pnmi.DualNetActiveFlag = SK_FALSE;
+ }
+
+#ifdef SK_PNMI_CHECK
+ if (SK_PNMI_MAX_IDX != SK_PNMI_CNT_NO) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR049, SK_PNMI_ERR049MSG);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_INIT | SK_DBGCAT_FATAL,
+ ("CounterOffset struct size (%d) differs from"
+ "SK_PNMI_MAX_IDX (%d)\n",
+ SK_PNMI_CNT_NO, SK_PNMI_MAX_IDX));
+ BRK;
+ }
+
+ if (SK_PNMI_MAX_IDX !=
+ (sizeof(StatAddr) / (sizeof(SK_PNMI_STATADDR) * SK_PNMI_MAC_TYPES))) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR050, SK_PNMI_ERR050MSG);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_INIT | SK_DBGCAT_FATAL,
+ ("StatAddr table size (%d) differs from "
+ "SK_PNMI_MAX_IDX (%d)\n",
+ (sizeof(StatAddr) /
+ (sizeof(SK_PNMI_STATADDR) * SK_PNMI_MAC_TYPES)),
+ SK_PNMI_MAX_IDX));
+ BRK;
+ }
+#endif /* SK_PNMI_CHECK */
+ break;
+
+ case SK_INIT_IO:
+ /*
+ * Reset MAC counters
+ */
+ PortMax = pAC->GIni.GIMacsFound;
+
+ for (PortIndex = 0; PortIndex < PortMax; PortIndex ++) {
+
+ pAC->GIni.GIFunc.pFnMacResetCounter(pAC, IoC, PortIndex);
+ }
+
+ /* Initialize DSP variables for Vct() to 0xff => Never written! */
+ for (PortIndex = 0; PortIndex < PortMax; PortIndex ++) {
+ pPrt = &pAC->GIni.GP[PortIndex];
+ pPrt->PCableLen =0xff;
+ pVctBackupData = &pAC->Pnmi.VctBackup[PortIndex];
+ pVctBackupData->PCableLen = 0xff;
+ }
+
+ /*
+ * Get pci bus speed
+ */
+ SK_IN16(IoC, B0_CTST, &Val16);
+ if ((Val16 & CS_BUS_CLOCK) == 0) {
+
+ pAC->Pnmi.PciBusSpeed = 33;
+ }
+ else {
+ pAC->Pnmi.PciBusSpeed = 66;
+ }
+
+ /*
+ * Get pci bus width
+ */
+ SK_IN16(IoC, B0_CTST, &Val16);
+ if ((Val16 & CS_BUS_SLOT_SZ) == 0) {
+
+ pAC->Pnmi.PciBusWidth = 32;
+ }
+ else {
+ pAC->Pnmi.PciBusWidth = 64;
+ }
+
+ /*
+ * Get chipset
+ */
+ switch (pAC->GIni.GIChipId) {
+ case CHIP_ID_GENESIS:
+ pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_XMAC;
+ break;
+
+ case CHIP_ID_YUKON:
+ pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON;
+ break;
+
+ default:
+ break;
+ }
+
+ /*
+ * Get PMD and DeviceType
+ */
+ SK_IN8(IoC, B2_PMD_TYP, &Val8);
+ switch (Val8) {
+ case 'S':
+ pAC->Pnmi.PMD = 3;
+ if (pAC->GIni.GIMacsFound > 1) {
+
+ pAC->Pnmi.DeviceType = 0x00020002;
+ }
+ else {
+ pAC->Pnmi.DeviceType = 0x00020001;
+ }
+ break;
+
+ case 'L':
+ pAC->Pnmi.PMD = 2;
+ if (pAC->GIni.GIMacsFound > 1) {
+
+ pAC->Pnmi.DeviceType = 0x00020004;
+ }
+ else {
+ pAC->Pnmi.DeviceType = 0x00020003;
+ }
+ break;
+
+ case 'C':
+ pAC->Pnmi.PMD = 4;
+ if (pAC->GIni.GIMacsFound > 1) {
+
+ pAC->Pnmi.DeviceType = 0x00020006;
+ }
+ else {
+ pAC->Pnmi.DeviceType = 0x00020005;
+ }
+ break;
+
+ case 'T':
+ pAC->Pnmi.PMD = 5;
+ if (pAC->GIni.GIMacsFound > 1) {
+
+ pAC->Pnmi.DeviceType = 0x00020008;
+ }
+ else {
+ pAC->Pnmi.DeviceType = 0x00020007;
+ }
+ break;
+
+ default :
+ pAC->Pnmi.PMD = 1;
+ pAC->Pnmi.DeviceType = 0;
+ break;
+ }
+
+ /*
+ * Get connector
+ */
+ SK_IN8(IoC, B2_CONN_TYP, &Val8);
+ switch (Val8) {
+ case 'C':
+ pAC->Pnmi.Connector = 2;
+ break;
+
+ case 'D':
+ pAC->Pnmi.Connector = 3;
+ break;
+
+ case 'F':
+ pAC->Pnmi.Connector = 4;
+ break;
+
+ case 'J':
+ pAC->Pnmi.Connector = 5;
+ break;
+
+ case 'V':
+ pAC->Pnmi.Connector = 6;
+ break;
+
+ default:
+ pAC->Pnmi.Connector = 1;
+ break;
+ }
+ break;
+
+ case SK_INIT_RUN:
+ /*
+ * Start timer for RLMT change counter
+ */
+ SK_MEMSET((char *) &EventParam, 0, sizeof(EventParam));
+ SkTimerStart(pAC, IoC, &pAC->Pnmi.RlmtChangeEstimate.EstTimer,
+ 28125000, SKGE_PNMI, SK_PNMI_EVT_CHG_EST_TIMER,
+ EventParam);
+ break;
+
+ default:
+ break; /* Nothing todo */
+ }
+
+ return (0);
+}
+
+/*****************************************************************************
+ *
+ * SkPnmiGetVar - Retrieves the value of a single OID
+ *
+ * Description:
+ * Calls a general sub-function for all this stuff. If the instance
+ * -1 is passed, the values of all instances are returned in an
+ * array of values.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to take
+ * the data.
+ * SK_PNMI_ERR_UNKNOWN_OID The requested OID is unknown
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+int SkPnmiGetVar(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+SK_U32 Id, /* Object ID that is to be processed */
+void *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiGetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",
+ Id, *pLen, Instance, NetIndex));
+
+ return (PnmiVar(pAC, IoC, SK_PNMI_GET, Id, (char *)pBuf, pLen,
+ Instance, NetIndex));
+}
+
+/*****************************************************************************
+ *
+ * SkPnmiPreSetVar - Presets the value of a single OID
+ *
+ * Description:
+ * Calls a general sub-function for all this stuff. The preset does
+ * the same as a set, but returns just before finally setting the
+ * new value. This is usefull to check if a set might be successfull.
+ * If as instance a -1 is passed, an array of values is supposed and
+ * all instance of the OID will be set.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_OID The requested OID is unknown.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+int SkPnmiPreSetVar(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+SK_U32 Id, /* Object ID that is to be processed */
+void *pBuf, /* Buffer which stores the mgmt data to be set */
+unsigned int *pLen, /* Total length of mgmt data */
+SK_U32 Instance, /* Instance (1..n) that is to be set or -1 */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiPreSetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",
+ Id, *pLen, Instance, NetIndex));
+
+
+ return (PnmiVar(pAC, IoC, SK_PNMI_PRESET, Id, (char *)pBuf, pLen,
+ Instance, NetIndex));
+}
+
+/*****************************************************************************
+ *
+ * SkPnmiSetVar - Sets the value of a single OID
+ *
+ * Description:
+ * Calls a general sub-function for all this stuff. The preset does
+ * the same as a set, but returns just before finally setting the
+ * new value. This is usefull to check if a set might be successfull.
+ * If as instance a -1 is passed, an array of values is supposed and
+ * all instance of the OID will be set.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_OID The requested OID is unknown.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+int SkPnmiSetVar(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+SK_U32 Id, /* Object ID that is to be processed */
+void *pBuf, /* Buffer which stores the mgmt data to be set */
+unsigned int *pLen, /* Total length of mgmt data */
+SK_U32 Instance, /* Instance (1..n) that is to be set or -1 */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiSetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",
+ Id, *pLen, Instance, NetIndex));
+
+ return (PnmiVar(pAC, IoC, SK_PNMI_SET, Id, (char *)pBuf, pLen,
+ Instance, NetIndex));
+}
+
+/*****************************************************************************
+ *
+ * SkPnmiGetStruct - Retrieves the management database in SK_PNMI_STRUCT_DATA
+ *
+ * Description:
+ * Runs through the IdTable, queries the single OIDs and stores the
+ * returned data into the management database structure
+ * SK_PNMI_STRUCT_DATA. The offset of the OID in the structure
+ * is stored in the IdTable. The return value of the function will also
+ * be stored in SK_PNMI_STRUCT_DATA if the passed buffer has the
+ * minimum size of SK_PNMI_MIN_STRUCT_SIZE.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to take
+ * the data.
+ * SK_PNMI_ERR_UNKNOWN_NET The requested NetIndex doesn't exist
+ */
+int SkPnmiGetStruct(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+void *pBuf, /* Buffer which will store the retrieved data */
+unsigned int *pLen, /* Length of buffer */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ int Ret;
+ unsigned int TableIndex;
+ unsigned int DstOffset;
+ unsigned int InstanceNo;
+ unsigned int InstanceCnt;
+ SK_U32 Instance;
+ unsigned int TmpLen;
+ char KeyArr[SK_PNMI_VPD_ENTRIES][SK_PNMI_VPD_KEY_SIZE];
+
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiGetStruct: Called, BufLen=%d, NetIndex=%d\n",
+ *pLen, NetIndex));
+
+ if (*pLen < SK_PNMI_STRUCT_SIZE) {
+
+ if (*pLen >= SK_PNMI_MIN_STRUCT_SIZE) {
+
+ SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_TOO_SHORT,
+ (SK_U32)(-1));
+ }
+
+ *pLen = SK_PNMI_STRUCT_SIZE;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * Check NetIndex
+ */
+ if (NetIndex >= pAC->Rlmt.NumNets) {
+ return (SK_PNMI_ERR_UNKNOWN_NET);
+ }
+
+ /* Update statistic */
+ SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On call");
+
+ if ((Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1)) !=
+ SK_PNMI_ERR_OK) {
+
+ SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (Ret);
+ }
+
+ if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
+
+ SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (Ret);
+ }
+
+ if ((Ret = SirqUpdate(pAC, IoC)) != SK_PNMI_ERR_OK) {
+
+ SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (Ret);
+ }
+
+ /*
+ * Increment semaphores to indicate that an update was
+ * already done
+ */
+ pAC->Pnmi.MacUpdatedFlag ++;
+ pAC->Pnmi.RlmtUpdatedFlag ++;
+ pAC->Pnmi.SirqUpdatedFlag ++;
+
+ /* Get vpd keys for instance calculation */
+ Ret = GetVpdKeyArr(pAC, IoC, &KeyArr[0][0], sizeof(KeyArr), &TmpLen);
+ if (Ret != SK_PNMI_ERR_OK) {
+
+ pAC->Pnmi.MacUpdatedFlag --;
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ pAC->Pnmi.SirqUpdatedFlag --;
+
+ SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");
+ SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /* Retrieve values */
+ SK_MEMSET((char *)pBuf, 0, SK_PNMI_STRUCT_SIZE);
+ for (TableIndex = 0; TableIndex < ID_TABLE_SIZE; TableIndex ++) {
+
+ InstanceNo = IdTable[TableIndex].InstanceNo;
+ for (InstanceCnt = 1; InstanceCnt <= InstanceNo;
+ InstanceCnt ++) {
+
+ DstOffset = IdTable[TableIndex].Offset +
+ (InstanceCnt - 1) *
+ IdTable[TableIndex].StructSize;
+
+ /*
+ * For the VPD the instance is not an index number
+ * but the key itself. Determin with the instance
+ * counter the VPD key to be used.
+ */
+ if (IdTable[TableIndex].Id == OID_SKGE_VPD_KEY ||
+ IdTable[TableIndex].Id == OID_SKGE_VPD_VALUE ||
+ IdTable[TableIndex].Id == OID_SKGE_VPD_ACCESS ||
+ IdTable[TableIndex].Id == OID_SKGE_VPD_ACTION) {
+
+ SK_STRNCPY((char *)&Instance, KeyArr[InstanceCnt - 1], 4);
+ }
+ else {
+ Instance = (SK_U32)InstanceCnt;
+ }
+
+ TmpLen = *pLen - DstOffset;
+ Ret = IdTable[TableIndex].Func(pAC, IoC, SK_PNMI_GET,
+ IdTable[TableIndex].Id, (char *)pBuf +
+ DstOffset, &TmpLen, Instance, TableIndex, NetIndex);
+
+ /*
+ * An unknown instance error means that we reached
+ * the last instance of that variable. Proceed with
+ * the next OID in the table and ignore the return
+ * code.
+ */
+ if (Ret == SK_PNMI_ERR_UNKNOWN_INST) {
+
+ break;
+ }
+
+ if (Ret != SK_PNMI_ERR_OK) {
+
+ pAC->Pnmi.MacUpdatedFlag --;
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ pAC->Pnmi.SirqUpdatedFlag --;
+
+ SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");
+ SK_PNMI_SET_STAT(pBuf, Ret, DstOffset);
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (Ret);
+ }
+ }
+ }
+
+ pAC->Pnmi.MacUpdatedFlag --;
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ pAC->Pnmi.SirqUpdatedFlag --;
+
+ *pLen = SK_PNMI_STRUCT_SIZE;
+ SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");
+ SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_OK, (SK_U32)(-1));
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * SkPnmiPreSetStruct - Presets the management database in SK_PNMI_STRUCT_DATA
+ *
+ * Description:
+ * Calls a general sub-function for all this set stuff. The preset does
+ * the same as a set, but returns just before finally setting the
+ * new value. This is usefull to check if a set might be successfull.
+ * The sub-function runs through the IdTable, checks which OIDs are able
+ * to set, and calls the handler function of the OID to perform the
+ * preset. The return value of the function will also be stored in
+ * SK_PNMI_STRUCT_DATA if the passed buffer has the minimum size of
+ * SK_PNMI_MIN_STRUCT_SIZE.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ */
+int SkPnmiPreSetStruct(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+void *pBuf, /* Buffer which contains the data to be set */
+unsigned int *pLen, /* Length of buffer */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiPreSetStruct: Called, BufLen=%d, NetIndex=%d\n",
+ *pLen, NetIndex));
+
+ return (PnmiStruct(pAC, IoC, SK_PNMI_PRESET, (char *)pBuf,
+ pLen, NetIndex));
+}
+
+/*****************************************************************************
+ *
+ * SkPnmiSetStruct - Sets the management database in SK_PNMI_STRUCT_DATA
+ *
+ * Description:
+ * Calls a general sub-function for all this set stuff. The return value
+ * of the function will also be stored in SK_PNMI_STRUCT_DATA if the
+ * passed buffer has the minimum size of SK_PNMI_MIN_STRUCT_SIZE.
+ * The sub-function runs through the IdTable, checks which OIDs are able
+ * to set, and calls the handler function of the OID to perform the
+ * set. The return value of the function will also be stored in
+ * SK_PNMI_STRUCT_DATA if the passed buffer has the minimum size of
+ * SK_PNMI_MIN_STRUCT_SIZE.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ */
+int SkPnmiSetStruct(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+void *pBuf, /* Buffer which contains the data to be set */
+unsigned int *pLen, /* Length of buffer */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiSetStruct: Called, BufLen=%d, NetIndex=%d\n",
+ *pLen, NetIndex));
+
+ return (PnmiStruct(pAC, IoC, SK_PNMI_SET, (char *)pBuf,
+ pLen, NetIndex));
+}
+
+/*****************************************************************************
+ *
+ * SkPnmiEvent - Event handler
+ *
+ * Description:
+ * Handles the following events:
+ * SK_PNMI_EVT_SIRQ_OVERFLOW When a hardware counter overflows an
+ * interrupt will be generated which is
+ * first handled by SIRQ which generates a
+ * this event. The event increments the
+ * upper 32 bit of the 64 bit counter.
+ * SK_PNMI_EVT_SEN_XXX The event is generated by the I2C module
+ * when a sensor reports a warning or
+ * error. The event will store a trap
+ * message in the trap buffer.
+ * SK_PNMI_EVT_CHG_EST_TIMER The timer event was initiated by this
+ * module and is used to calculate the
+ * port switches per hour.
+ * SK_PNMI_EVT_CLEAR_COUNTER The event clears all counters and
+ * timestamps.
+ * SK_PNMI_EVT_XMAC_RESET The event is generated by the driver
+ * before a hard reset of the XMAC is
+ * performed. All counters will be saved
+ * and added to the hardware counter
+ * values after reset to grant continuous
+ * counter values.
+ * SK_PNMI_EVT_RLMT_PORT_UP Generated by RLMT to notify that a port
+ * went logically up. A trap message will
+ * be stored to the trap buffer.
+ * SK_PNMI_EVT_RLMT_PORT_DOWN Generated by RLMT to notify that a port
+ * went logically down. A trap message will
+ * be stored to the trap buffer.
+ * SK_PNMI_EVT_RLMT_SEGMENTATION Generated by RLMT to notify that two
+ * spanning tree root bridges were
+ * detected. A trap message will be stored
+ * to the trap buffer.
+ * SK_PNMI_EVT_RLMT_ACTIVE_DOWN Notifies PNMI that an active port went
+ * down. PNMI will not further add the
+ * statistic values to the virtual port.
+ * SK_PNMI_EVT_RLMT_ACTIVE_UP Notifies PNMI that a port went up and
+ * is now an active port. PNMI will now
+ * add the statistic data of this port to
+ * the virtual port.
+ * SK_PNMI_EVT_RLMT_SET_NETS Notifies PNMI about the net mode. The first Parameter
+ * contains the number of nets. 1 means single net, 2 means
+ * dual net. The second Parameter is -1
+ *
+ * Returns:
+ * Always 0
+ */
+int SkPnmiEvent(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+SK_U32 Event, /* Event-Id */
+SK_EVPARA Param) /* Event dependent parameter */
+{
+ unsigned int PhysPortIndex;
+ unsigned int MaxNetNumber;
+ int CounterIndex;
+ int Ret;
+ SK_U16 MacStatus;
+ SK_U64 OverflowStatus;
+ SK_U64 Mask;
+ int MacType;
+ SK_U64 Value;
+ SK_U32 Val32;
+ SK_U16 Register;
+ SK_EVPARA EventParam;
+ SK_U64 NewestValue;
+ SK_U64 OldestValue;
+ SK_U64 Delta;
+ SK_PNMI_ESTIMATE *pEst;
+ SK_U32 NetIndex;
+ SK_GEPORT *pPrt;
+ SK_PNMI_VCT *pVctBackupData;
+ SK_U32 RetCode;
+ int i;
+ SK_U32 CableLength;
+
+
+#ifdef DEBUG
+ if (Event != SK_PNMI_EVT_XMAC_RESET) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: SkPnmiEvent: Called, Event=0x%x, Param=0x%x\n",
+ (unsigned int)Event, (unsigned int)Param.Para64));
+ }
+#endif
+ SK_PNMI_CHECKFLAGS("SkPnmiEvent: On call");
+
+ MacType = pAC->GIni.GIMacType;
+
+ switch (Event) {
+
+ case SK_PNMI_EVT_SIRQ_OVERFLOW:
+ PhysPortIndex = (int)Param.Para32[0];
+ MacStatus = (SK_U16)Param.Para32[1];
+#ifdef DEBUG
+ if (PhysPortIndex >= SK_MAX_MACS) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SIRQ_OVERFLOW parameter"
+ " wrong, PhysPortIndex=0x%x\n",
+ PhysPortIndex));
+ return (0);
+ }
+#endif
+ OverflowStatus = 0;
+
+ /*
+ * Check which source caused an overflow interrupt.
+ */
+ if ((pAC->GIni.GIFunc.pFnMacOverflow(
+ pAC, IoC, PhysPortIndex, MacStatus, &OverflowStatus) != 0) ||
+ (OverflowStatus == 0)) {
+
+ SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
+ return (0);
+ }
+
+ /*
+ * Check the overflow status register and increment
+ * the upper dword of corresponding counter.
+ */
+ for (CounterIndex = 0; CounterIndex < sizeof(Mask) * 8;
+ CounterIndex ++) {
+
+ Mask = (SK_U64)1 << CounterIndex;
+ if ((OverflowStatus & Mask) == 0) {
+
+ continue;
+ }
+
+ switch (StatOvrflwBit[CounterIndex][MacType]) {
+
+ case SK_PNMI_HTX_UTILUNDER:
+ case SK_PNMI_HTX_UTILOVER:
+ XM_IN16(IoC, PhysPortIndex, XM_TX_CMD,
+ &Register);
+ Register |= XM_TX_SAM_LINE;
+ XM_OUT16(IoC, PhysPortIndex, XM_TX_CMD,
+ Register);
+ break;
+
+ case SK_PNMI_HRX_UTILUNDER:
+ case SK_PNMI_HRX_UTILOVER:
+ XM_IN16(IoC, PhysPortIndex, XM_RX_CMD,
+ &Register);
+ Register |= XM_RX_SAM_LINE;
+ XM_OUT16(IoC, PhysPortIndex, XM_RX_CMD,
+ Register);
+ break;
+
+ case SK_PNMI_HTX_OCTETHIGH:
+ case SK_PNMI_HTX_OCTETLOW:
+ case SK_PNMI_HTX_RESERVED:
+ case SK_PNMI_HRX_OCTETHIGH:
+ case SK_PNMI_HRX_OCTETLOW:
+ case SK_PNMI_HRX_IRLENGTH:
+ case SK_PNMI_HRX_RESERVED:
+
+ /*
+ * the following counters aren't be handled (id > 63)
+ */
+ case SK_PNMI_HTX_SYNC:
+ case SK_PNMI_HTX_SYNC_OCTET:
+ break;
+
+ case SK_PNMI_HRX_LONGFRAMES:
+ if (MacType == SK_MAC_GMAC) {
+ pAC->Pnmi.Port[PhysPortIndex].
+ CounterHigh[CounterIndex] ++;
+ }
+ break;
+
+ default:
+ pAC->Pnmi.Port[PhysPortIndex].
+ CounterHigh[CounterIndex] ++;
+ }
+ }
+ break;
+
+ case SK_PNMI_EVT_SEN_WAR_LOW:
+#ifdef DEBUG
+ if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SEN_WAR_LOW parameter wrong, SensorIndex=%d\n",
+ (unsigned int)Param.Para64));
+ return (0);
+ }
+#endif
+ /*
+ * Store a trap message in the trap buffer and generate
+ * an event for user space applications with the
+ * SK_DRIVER_SENDEVENT macro.
+ */
+ QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_WAR_LOW,
+ (unsigned int)Param.Para64);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+ break;
+
+ case SK_PNMI_EVT_SEN_WAR_UPP:
+#ifdef DEBUG
+ if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR:SkPnmiEvent: SK_PNMI_EVT_SEN_WAR_UPP parameter wrong, SensorIndex=%d\n",
+ (unsigned int)Param.Para64));
+ return (0);
+ }
+#endif
+ /*
+ * Store a trap message in the trap buffer and generate
+ * an event for user space applications with the
+ * SK_DRIVER_SENDEVENT macro.
+ */
+ QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_WAR_UPP,
+ (unsigned int)Param.Para64);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+ break;
+
+ case SK_PNMI_EVT_SEN_ERR_LOW:
+#ifdef DEBUG
+ if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SEN_ERR_LOW parameter wrong, SensorIndex=%d\n",
+ (unsigned int)Param.Para64));
+ return (0);
+ }
+#endif
+ /*
+ * Store a trap message in the trap buffer and generate
+ * an event for user space applications with the
+ * SK_DRIVER_SENDEVENT macro.
+ */
+ QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_ERR_LOW,
+ (unsigned int)Param.Para64);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+ break;
+
+ case SK_PNMI_EVT_SEN_ERR_UPP:
+#ifdef DEBUG
+ if ((unsigned int)Param.Para64 >= (unsigned int)pAC->I2c.MaxSens) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_SEN_ERR_UPP parameter wrong, SensorIndex=%d\n",
+ (unsigned int)Param.Para64));
+ return (0);
+ }
+#endif
+ /*
+ * Store a trap message in the trap buffer and generate
+ * an event for user space applications with the
+ * SK_DRIVER_SENDEVENT macro.
+ */
+ QueueSensorTrap(pAC, OID_SKGE_TRAP_SEN_ERR_UPP,
+ (unsigned int)Param.Para64);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+ break;
+
+ case SK_PNMI_EVT_CHG_EST_TIMER:
+ /*
+ * Calculate port switch average on a per hour basis
+ * Time interval for check : 28125 ms
+ * Number of values for average : 8
+ *
+ * Be careful in changing these values, on change check
+ * - typedef of SK_PNMI_ESTIMATE (Size of EstValue
+ * array one less than value number)
+ * - Timer initilization SkTimerStart() in SkPnmiInit
+ * - Delta value below must be multiplicated with
+ * power of 2
+ *
+ */
+ pEst = &pAC->Pnmi.RlmtChangeEstimate;
+ CounterIndex = pEst->EstValueIndex + 1;
+ if (CounterIndex == 7) {
+
+ CounterIndex = 0;
+ }
+ pEst->EstValueIndex = CounterIndex;
+
+ NewestValue = pAC->Pnmi.RlmtChangeCts;
+ OldestValue = pEst->EstValue[CounterIndex];
+ pEst->EstValue[CounterIndex] = NewestValue;
+
+ /*
+ * Calculate average. Delta stores the number of
+ * port switches per 28125 * 8 = 225000 ms
+ */
+ if (NewestValue >= OldestValue) {
+
+ Delta = NewestValue - OldestValue;
+ }
+ else {
+ /* Overflow situation */
+ Delta = (SK_U64)(0 - OldestValue) + NewestValue;
+ }
+
+ /*
+ * Extrapolate delta to port switches per hour.
+ * Estimate = Delta * (3600000 / 225000)
+ * = Delta * 16
+ * = Delta << 4
+ */
+ pAC->Pnmi.RlmtChangeEstimate.Estimate = Delta << 4;
+
+ /*
+ * Check if threshold is exceeded. If the threshold is
+ * permanently exceeded every 28125 ms an event will be
+ * generated to remind the user of this condition.
+ */
+ if ((pAC->Pnmi.RlmtChangeThreshold != 0) &&
+ (pAC->Pnmi.RlmtChangeEstimate.Estimate >=
+ pAC->Pnmi.RlmtChangeThreshold)) {
+
+ QueueSimpleTrap(pAC, OID_SKGE_TRAP_RLMT_CHANGE_THRES);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+ }
+
+ SK_MEMSET((char *) &EventParam, 0, sizeof(EventParam));
+ SkTimerStart(pAC, IoC, &pAC->Pnmi.RlmtChangeEstimate.EstTimer,
+ 28125000, SKGE_PNMI, SK_PNMI_EVT_CHG_EST_TIMER,
+ EventParam);
+ break;
+
+ case SK_PNMI_EVT_CLEAR_COUNTER:
+ /*
+ * Param.Para32[0] contains the NetIndex (0 ..1).
+ * Param.Para32[1] is reserved, contains -1.
+ */
+ NetIndex = (SK_U32)Param.Para32[0];
+
+#ifdef DEBUG
+ if (NetIndex >= pAC->Rlmt.NumNets) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_CLEAR_COUNTER parameter wrong, NetIndex=%d\n",
+ NetIndex));
+
+ return (0);
+ }
+#endif
+
+ /*
+ * Set all counters and timestamps to zero
+ */
+ ResetCounter(pAC, IoC, NetIndex); /* the according NetIndex is required
+ as a Parameter of the Event */
+ break;
+
+ case SK_PNMI_EVT_XMAC_RESET:
+ /*
+ * To grant continuous counter values store the current
+ * XMAC statistic values to the entries 1..n of the
+ * CounterOffset array. XMAC Errata #2
+ */
+#ifdef DEBUG
+ if ((unsigned int)Param.Para64 >= SK_MAX_MACS) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_XMAC_RESET parameter wrong, PhysPortIndex=%d\n",
+ (unsigned int)Param.Para64));
+ return (0);
+ }
+#endif
+ PhysPortIndex = (unsigned int)Param.Para64;
+
+ /*
+ * Update XMAC statistic to get fresh values
+ */
+ Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
+ if (Ret != SK_PNMI_ERR_OK) {
+
+ SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
+ return (0);
+ }
+ /*
+ * Increment semaphore to indicate that an update was
+ * already done
+ */
+ pAC->Pnmi.MacUpdatedFlag ++;
+
+ for (CounterIndex = 0; CounterIndex < SK_PNMI_MAX_IDX;
+ CounterIndex ++) {
+
+ if (!StatAddr[CounterIndex][MacType].GetOffset) {
+
+ continue;
+ }
+
+ pAC->Pnmi.Port[PhysPortIndex].
+ CounterOffset[CounterIndex] = GetPhysStatVal(
+ pAC, IoC, PhysPortIndex, CounterIndex);
+ pAC->Pnmi.Port[PhysPortIndex].
+ CounterHigh[CounterIndex] = 0;
+ }
+
+ pAC->Pnmi.MacUpdatedFlag --;
+ break;
+
+ case SK_PNMI_EVT_RLMT_PORT_UP:
+ PhysPortIndex = (unsigned int)Param.Para32[0];
+#ifdef DEBUG
+ if (PhysPortIndex >= SK_MAX_MACS) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_PORT_UP parameter"
+ " wrong, PhysPortIndex=%d\n", PhysPortIndex));
+
+ return (0);
+ }
+#endif
+ /*
+ * Store a trap message in the trap buffer and generate an event for
+ * user space applications with the SK_DRIVER_SENDEVENT macro.
+ */
+ QueueRlmtPortTrap(pAC, OID_SKGE_TRAP_RLMT_PORT_UP, PhysPortIndex);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+
+ /* Bugfix for XMAC errata (#10620)*/
+ if (pAC->GIni.GIMacType == SK_MAC_XMAC){
+
+ /* Add incremental difference to offset (#10620)*/
+ (void)pAC->GIni.GIFunc.pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ XM_RXE_SHT_ERR, &Val32);
+
+ Value = (((SK_U64)pAC->Pnmi.Port[PhysPortIndex].
+ CounterHigh[SK_PNMI_HRX_SHORTS] << 32) | (SK_U64)Val32);
+ pAC->Pnmi.Port[PhysPortIndex].CounterOffset[SK_PNMI_HRX_SHORTS] +=
+ Value - pAC->Pnmi.Port[PhysPortIndex].RxShortZeroMark;
+ }
+
+ /* Tell VctStatus() that a link was up meanwhile. */
+ pAC->Pnmi.VctStatus[PhysPortIndex] |= SK_PNMI_VCT_LINK;
+ break;
+
+ case SK_PNMI_EVT_RLMT_PORT_DOWN:
+ PhysPortIndex = (unsigned int)Param.Para32[0];
+
+#ifdef DEBUG
+ if (PhysPortIndex >= SK_MAX_MACS) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_PORT_DOWN parameter"
+ " wrong, PhysPortIndex=%d\n", PhysPortIndex));
+
+ return (0);
+ }
+#endif
+ /*
+ * Store a trap message in the trap buffer and generate an event for
+ * user space applications with the SK_DRIVER_SENDEVENT macro.
+ */
+ QueueRlmtPortTrap(pAC, OID_SKGE_TRAP_RLMT_PORT_DOWN, PhysPortIndex);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+
+ /* Bugfix #10620 - get zero level for incremental difference */
+ if ((pAC->GIni.GIMacType == SK_MAC_XMAC)) {
+
+ (void)pAC->GIni.GIFunc.pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ XM_RXE_SHT_ERR, &Val32);
+ pAC->Pnmi.Port[PhysPortIndex].RxShortZeroMark =
+ (((SK_U64)pAC->Pnmi.Port[PhysPortIndex].
+ CounterHigh[SK_PNMI_HRX_SHORTS] << 32) | (SK_U64)Val32);
+ }
+ break;
+
+ case SK_PNMI_EVT_RLMT_ACTIVE_DOWN:
+ PhysPortIndex = (unsigned int)Param.Para32[0];
+ NetIndex = (SK_U32)Param.Para32[1];
+
+#ifdef DEBUG
+ if (PhysPortIndex >= SK_MAX_MACS) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_DOWN parameter too high, PhysPort=%d\n",
+ PhysPortIndex));
+ }
+
+ if (NetIndex >= pAC->Rlmt.NumNets) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_DOWN parameter too high, NetIndex=%d\n",
+ NetIndex));
+ }
+#endif
+ /*
+ * For now, ignore event if NetIndex != 0.
+ */
+ if (Param.Para32[1] != 0) {
+
+ return (0);
+ }
+
+ /*
+ * Nothing to do if port is already inactive
+ */
+ if (!pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
+
+ return (0);
+ }
+
+ /*
+ * Update statistic counters to calculate new offset for the virtual
+ * port and increment semaphore to indicate that an update was already
+ * done.
+ */
+ if (MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1) !=
+ SK_PNMI_ERR_OK) {
+
+ SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
+ return (0);
+ }
+ pAC->Pnmi.MacUpdatedFlag ++;
+
+ /*
+ * Calculate new counter offset for virtual port to grant continous
+ * counting on port switches. The virtual port consists of all currently
+ * active ports. The port down event indicates that a port is removed
+ * from the virtual port. Therefore add the counter value of the removed
+ * port to the CounterOffset for the virtual port to grant the same
+ * counter value.
+ */
+ for (CounterIndex = 0; CounterIndex < SK_PNMI_MAX_IDX;
+ CounterIndex ++) {
+
+ if (!StatAddr[CounterIndex][MacType].GetOffset) {
+
+ continue;
+ }
+
+ Value = GetPhysStatVal(pAC, IoC, PhysPortIndex, CounterIndex);
+
+ pAC->Pnmi.VirtualCounterOffset[CounterIndex] += Value;
+ }
+
+ /*
+ * Set port to inactive
+ */
+ pAC->Pnmi.Port[PhysPortIndex].ActiveFlag = SK_FALSE;
+
+ pAC->Pnmi.MacUpdatedFlag --;
+ break;
+
+ case SK_PNMI_EVT_RLMT_ACTIVE_UP:
+ PhysPortIndex = (unsigned int)Param.Para32[0];
+ NetIndex = (SK_U32)Param.Para32[1];
+
+#ifdef DEBUG
+ if (PhysPortIndex >= SK_MAX_MACS) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_UP parameter too high, PhysPort=%d\n",
+ PhysPortIndex));
+ }
+
+ if (NetIndex >= pAC->Rlmt.NumNets) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,
+ ("PNMI: ERR: SkPnmiEvent: SK_PNMI_EVT_RLMT_ACTIVE_UP parameter too high, NetIndex=%d\n",
+ NetIndex));
+ }
+#endif
+ /*
+ * For now, ignore event if NetIndex != 0.
+ */
+ if (Param.Para32[1] != 0) {
+
+ return (0);
+ }
+
+ /*
+ * Nothing to do if port is already active
+ */
+ if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
+
+ return (0);
+ }
+
+ /*
+ * Statistic maintenance
+ */
+ pAC->Pnmi.RlmtChangeCts ++;
+ pAC->Pnmi.RlmtChangeTime = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
+
+ /*
+ * Store a trap message in the trap buffer and generate an event for
+ * user space applications with the SK_DRIVER_SENDEVENT macro.
+ */
+ QueueRlmtNewMacTrap(pAC, PhysPortIndex);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+
+ /*
+ * Update statistic counters to calculate new offset for the virtual
+ * port and increment semaphore to indicate that an update was
+ * already done.
+ */
+ if (MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1) !=
+ SK_PNMI_ERR_OK) {
+
+ SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
+ return (0);
+ }
+ pAC->Pnmi.MacUpdatedFlag ++;
+
+ /*
+ * Calculate new counter offset for virtual port to grant continous
+ * counting on port switches. A new port is added to the virtual port.
+ * Therefore substract the counter value of the new port from the
+ * CounterOffset for the virtual port to grant the same value.
+ */
+ for (CounterIndex = 0; CounterIndex < SK_PNMI_MAX_IDX;
+ CounterIndex ++) {
+
+ if (!StatAddr[CounterIndex][MacType].GetOffset) {
+
+ continue;
+ }
+
+ Value = GetPhysStatVal(pAC, IoC, PhysPortIndex, CounterIndex);
+
+ pAC->Pnmi.VirtualCounterOffset[CounterIndex] -= Value;
+ }
+
+ /*
+ * Set port to active
+ */
+ pAC->Pnmi.Port[PhysPortIndex].ActiveFlag = SK_TRUE;
+
+ pAC->Pnmi.MacUpdatedFlag --;
+ break;
+
+ case SK_PNMI_EVT_RLMT_SEGMENTATION:
+ /*
+ * Para.Para32[0] contains the NetIndex.
+ */
+
+ /*
+ * Store a trap message in the trap buffer and generate an event for
+ * user space applications with the SK_DRIVER_SENDEVENT macro.
+ */
+ QueueSimpleTrap(pAC, OID_SKGE_TRAP_RLMT_SEGMENTATION);
+ (void)SK_DRIVER_SENDEVENT(pAC, IoC);
+ break;
+
+ case SK_PNMI_EVT_RLMT_SET_NETS:
+ /*
+ * Param.Para32[0] contains the number of Nets.
+ * Param.Para32[1] is reserved, contains -1.
+ */
+ /*
+ * Check number of nets
+ */
+ MaxNetNumber = pAC->GIni.GIMacsFound;
+ if (((unsigned int)Param.Para32[0] < 1)
+ || ((unsigned int)Param.Para32[0] > MaxNetNumber)) {
+ return (SK_PNMI_ERR_UNKNOWN_NET);
+ }
+
+ if ((unsigned int)Param.Para32[0] == 1) { /* single net mode */
+ pAC->Pnmi.DualNetActiveFlag = SK_FALSE;
+ }
+ else { /* dual net mode */
+ pAC->Pnmi.DualNetActiveFlag = SK_TRUE;
+ }
+ break;
+
+ case SK_PNMI_EVT_VCT_RESET:
+ PhysPortIndex = Param.Para32[0];
+ pPrt = &pAC->GIni.GP[PhysPortIndex];
+ pVctBackupData = &pAC->Pnmi.VctBackup[PhysPortIndex];
+
+ if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_PENDING) {
+ RetCode = SkGmCableDiagStatus(pAC, IoC, PhysPortIndex, SK_FALSE);
+ if (RetCode == 2) {
+ /*
+ * VCT test is still running.
+ * Start VCT timer counter again.
+ */
+ SK_MEMSET((char *) &Param, 0, sizeof(Param));
+ Param.Para32[0] = PhysPortIndex;
+ Param.Para32[1] = -1;
+ SkTimerStart(pAC, IoC, &pAC->Pnmi.VctTimeout[PhysPortIndex].VctTimer,
+ 4000000, SKGE_PNMI, SK_PNMI_EVT_VCT_RESET, Param);
+ break;
+ }
+ pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_PENDING;
+ pAC->Pnmi.VctStatus[PhysPortIndex] |=
+ (SK_PNMI_VCT_NEW_VCT_DATA | SK_PNMI_VCT_TEST_DONE);
+
+ /* Copy results for later use to PNMI struct. */
+ for (i = 0; i < 4; i++) {
+ if (pPrt->PMdiPairLen[i] > 35) {
+ CableLength = 1000 * (((175 * pPrt->PMdiPairLen[i]) / 210) - 28);
+ }
+ else {
+ CableLength = 0;
+ }
+ pVctBackupData->PMdiPairLen[i] = CableLength;
+ pVctBackupData->PMdiPairSts[i] = pPrt->PMdiPairSts[i];
+ }
+
+ Param.Para32[0] = PhysPortIndex;
+ Param.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Param);
+ SkEventDispatcher(pAC, IoC);
+ }
+
+ break;
+
+ default:
+ break;
+ }
+
+ SK_PNMI_CHECKFLAGS("SkPnmiEvent: On return");
+ return (0);
+}
+
+
+/******************************************************************************
+ *
+ * Private functions
+ *
+ */
+
+/*****************************************************************************
+ *
+ * PnmiVar - Gets, presets, and sets single OIDs
+ *
+ * Description:
+ * Looks up the requested OID, calls the corresponding handler
+ * function, and passes the parameters with the get, preset, or
+ * set command. The function is called by SkGePnmiGetVar,
+ * SkGePnmiPreSetVar, or SkGePnmiSetVar.
+ *
+ * Returns:
+ * SK_PNMI_ERR_XXX. For details have a look to the description of the
+ * calling functions.
+ * SK_PNMI_ERR_UNKNOWN_NET The requested NetIndex doesn't exist
+ */
+PNMI_STATIC int PnmiVar(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer which stores the mgmt data to be set */
+unsigned int *pLen, /* Total length of mgmt data */
+SK_U32 Instance, /* Instance (1..n) that is to be set or -1 */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int TableIndex;
+ int Ret;
+
+
+ if ((TableIndex = LookupId(Id)) == (unsigned int)(-1)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_OID);
+ }
+
+ /*
+ * Check NetIndex
+ */
+ if (NetIndex >= pAC->Rlmt.NumNets) {
+ return (SK_PNMI_ERR_UNKNOWN_NET);
+ }
+
+ SK_PNMI_CHECKFLAGS("PnmiVar: On call");
+
+ Ret = IdTable[TableIndex].Func(pAC, IoC, Action, Id, pBuf, pLen,
+ Instance, TableIndex, NetIndex);
+
+ SK_PNMI_CHECKFLAGS("PnmiVar: On return");
+
+ return (Ret);
+}
+
+/*****************************************************************************
+ *
+ * PnmiStruct - Presets and Sets data in structure SK_PNMI_STRUCT_DATA
+ *
+ * Description:
+ * The return value of the function will also be stored in
+ * SK_PNMI_STRUCT_DATA if the passed buffer has the minimum size of
+ * SK_PNMI_MIN_STRUCT_SIZE. The sub-function runs through the IdTable,
+ * checks which OIDs are able to set, and calls the handler function of
+ * the OID to perform the set. The return value of the function will
+ * also be stored in SK_PNMI_STRUCT_DATA if the passed buffer has the
+ * minimum size of SK_PNMI_MIN_STRUCT_SIZE. The function is called
+ * by SkGePnmiPreSetStruct and SkGePnmiSetStruct.
+ *
+ * Returns:
+ * SK_PNMI_ERR_XXX. The codes are described in the calling functions.
+ * SK_PNMI_ERR_UNKNOWN_NET The requested NetIndex doesn't exist
+ */
+PNMI_STATIC int PnmiStruct(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Set action to be performed */
+char *pBuf, /* Buffer which contains the data to be set */
+unsigned int *pLen, /* Length of buffer */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ int Ret;
+ unsigned int TableIndex;
+ unsigned int DstOffset;
+ unsigned int Len;
+ unsigned int InstanceNo;
+ unsigned int InstanceCnt;
+ SK_U32 Instance;
+ SK_U32 Id;
+
+
+ /* Check if the passed buffer has the right size */
+ if (*pLen < SK_PNMI_STRUCT_SIZE) {
+
+ /* Check if we can return the error within the buffer */
+ if (*pLen >= SK_PNMI_MIN_STRUCT_SIZE) {
+
+ SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_TOO_SHORT,
+ (SK_U32)(-1));
+ }
+
+ *pLen = SK_PNMI_STRUCT_SIZE;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * Check NetIndex
+ */
+ if (NetIndex >= pAC->Rlmt.NumNets) {
+ return (SK_PNMI_ERR_UNKNOWN_NET);
+ }
+
+ SK_PNMI_CHECKFLAGS("PnmiStruct: On call");
+
+ /*
+ * Update the values of RLMT and SIRQ and increment semaphores to
+ * indicate that an update was already done.
+ */
+ if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
+
+ SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (Ret);
+ }
+
+ if ((Ret = SirqUpdate(pAC, IoC)) != SK_PNMI_ERR_OK) {
+
+ SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (Ret);
+ }
+
+ pAC->Pnmi.RlmtUpdatedFlag ++;
+ pAC->Pnmi.SirqUpdatedFlag ++;
+
+ /* Preset/Set values */
+ for (TableIndex = 0; TableIndex < ID_TABLE_SIZE; TableIndex ++) {
+
+ if ((IdTable[TableIndex].Access != SK_PNMI_RW) &&
+ (IdTable[TableIndex].Access != SK_PNMI_WO)) {
+
+ continue;
+ }
+
+ InstanceNo = IdTable[TableIndex].InstanceNo;
+ Id = IdTable[TableIndex].Id;
+
+ for (InstanceCnt = 1; InstanceCnt <= InstanceNo;
+ InstanceCnt ++) {
+
+ DstOffset = IdTable[TableIndex].Offset +
+ (InstanceCnt - 1) *
+ IdTable[TableIndex].StructSize;
+
+ /*
+ * Because VPD multiple instance variables are
+ * not setable we do not need to evaluate VPD
+ * instances. Have a look to VPD instance
+ * calculation in SkPnmiGetStruct().
+ */
+ Instance = (SK_U32)InstanceCnt;
+
+ /*
+ * Evaluate needed buffer length
+ */
+ Len = 0;
+ Ret = IdTable[TableIndex].Func(pAC, IoC,
+ SK_PNMI_GET, IdTable[TableIndex].Id,
+ NULL, &Len, Instance, TableIndex, NetIndex);
+
+ if (Ret == SK_PNMI_ERR_UNKNOWN_INST) {
+
+ break;
+ }
+ if (Ret != SK_PNMI_ERR_TOO_SHORT) {
+
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ pAC->Pnmi.SirqUpdatedFlag --;
+
+ SK_PNMI_CHECKFLAGS("PnmiStruct: On return");
+ SK_PNMI_SET_STAT(pBuf,
+ SK_PNMI_ERR_GENERAL, DstOffset);
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ if (Id == OID_SKGE_VPD_ACTION) {
+
+ switch (*(pBuf + DstOffset)) {
+
+ case SK_PNMI_VPD_CREATE:
+ Len = 3 + *(pBuf + DstOffset + 3);
+ break;
+
+ case SK_PNMI_VPD_DELETE:
+ Len = 3;
+ break;
+
+ default:
+ Len = 1;
+ break;
+ }
+ }
+
+ /* Call the OID handler function */
+ Ret = IdTable[TableIndex].Func(pAC, IoC, Action,
+ IdTable[TableIndex].Id, pBuf + DstOffset,
+ &Len, Instance, TableIndex, NetIndex);
+
+ if (Ret != SK_PNMI_ERR_OK) {
+
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ pAC->Pnmi.SirqUpdatedFlag --;
+
+ SK_PNMI_CHECKFLAGS("PnmiStruct: On return");
+ SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_BAD_VALUE,
+ DstOffset);
+ *pLen = SK_PNMI_MIN_STRUCT_SIZE;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ }
+ }
+
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ pAC->Pnmi.SirqUpdatedFlag --;
+
+ SK_PNMI_CHECKFLAGS("PnmiStruct: On return");
+ SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_OK, (SK_U32)(-1));
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * LookupId - Lookup an OID in the IdTable
+ *
+ * Description:
+ * Scans the IdTable to find the table entry of an OID.
+ *
+ * Returns:
+ * The table index or -1 if not found.
+ */
+PNMI_STATIC int LookupId(
+SK_U32 Id) /* Object identifier to be searched */
+{
+ int i;
+
+ for (i = 0; i < ID_TABLE_SIZE; i++) {
+
+ if (IdTable[i].Id == Id) {
+
+ return i;
+ }
+ }
+
+ return (-1);
+}
+
+/*****************************************************************************
+ *
+ * OidStruct - Handler of OID_SKGE_ALL_DATA
+ *
+ * Description:
+ * This OID performs a Get/Preset/SetStruct call and returns all data
+ * in a SK_PNMI_STRUCT_DATA structure.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int OidStruct(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ if (Id != OID_SKGE_ALL_DATA) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR003,
+ SK_PNMI_ERR003MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Check instance. We only handle single instance variables
+ */
+ if (Instance != (SK_U32)(-1) && Instance != 1) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ switch (Action) {
+
+ case SK_PNMI_GET:
+ return (SkPnmiGetStruct(pAC, IoC, pBuf, pLen, NetIndex));
+
+ case SK_PNMI_PRESET:
+ return (SkPnmiPreSetStruct(pAC, IoC, pBuf, pLen, NetIndex));
+
+ case SK_PNMI_SET:
+ return (SkPnmiSetStruct(pAC, IoC, pBuf, pLen, NetIndex));
+ }
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR004, SK_PNMI_ERR004MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+}
+
+/*****************************************************************************
+ *
+ * Perform - OID handler of OID_SKGE_ACTION
+ *
+ * Description:
+ * None.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int Perform(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ int Ret;
+ SK_U32 ActionOp;
+
+
+ /*
+ * Check instance. We only handle single instance variables
+ */
+ if (Instance != (SK_U32)(-1) && Instance != 1) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /* Check if a get should be performed */
+ if (Action == SK_PNMI_GET) {
+
+ /* A get is easy. We always return the same value */
+ ActionOp = (SK_U32)SK_PNMI_ACT_IDLE;
+ SK_PNMI_STORE_U32(pBuf, ActionOp);
+ *pLen = sizeof(SK_U32);
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /* Continue with PRESET/SET action */
+ if (*pLen > sizeof(SK_U32)) {
+
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /* Check if the command is a known one */
+ SK_PNMI_READ_U32(pBuf, ActionOp);
+ if (*pLen > sizeof(SK_U32) ||
+ (ActionOp != SK_PNMI_ACT_IDLE &&
+ ActionOp != SK_PNMI_ACT_RESET &&
+ ActionOp != SK_PNMI_ACT_SELFTEST &&
+ ActionOp != SK_PNMI_ACT_RESETCNT)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /* A preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ switch (ActionOp) {
+
+ case SK_PNMI_ACT_IDLE:
+ /* Nothing to do */
+ break;
+
+ case SK_PNMI_ACT_RESET:
+ /*
+ * Perform a driver reset or something that comes near
+ * to this.
+ */
+ Ret = SK_DRIVER_RESET(pAC, IoC);
+ if (Ret != 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR005,
+ SK_PNMI_ERR005MSG);
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ break;
+
+ case SK_PNMI_ACT_SELFTEST:
+ /*
+ * Perform a driver selftest or something similar to this.
+ * Currently this feature is not used and will probably
+ * implemented in another way.
+ */
+ Ret = SK_DRIVER_SELFTEST(pAC, IoC);
+ pAC->Pnmi.TestResult = Ret;
+ break;
+
+ case SK_PNMI_ACT_RESETCNT:
+ /* Set all counters and timestamps to zero */
+ ResetCounter(pAC, IoC, NetIndex);
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR006,
+ SK_PNMI_ERR006MSG);
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * Mac8023Stat - OID handler of OID_GEN_XXX and OID_802_3_XXX
+ *
+ * Description:
+ * Retrieves the statistic values of the virtual port (logical
+ * index 0). Only special OIDs of NDIS are handled which consist
+ * of a 32 bit instead of a 64 bit value. The OIDs are public
+ * because perhaps some other platform can use them too.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int Mac8023Stat(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ int Ret;
+ SK_U64 StatVal;
+ SK_U32 StatVal32;
+ SK_BOOL Is64BitReq = SK_FALSE;
+
+ /*
+ * Only the active Mac is returned
+ */
+ if (Instance != (SK_U32)(-1) && Instance != 1) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ /*
+ * Check action type
+ */
+ if (Action != SK_PNMI_GET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Check length
+ */
+ switch (Id) {
+
+ case OID_802_3_PERMANENT_ADDRESS:
+ case OID_802_3_CURRENT_ADDRESS:
+ if (*pLen < sizeof(SK_MAC_ADDR)) {
+
+ *pLen = sizeof(SK_MAC_ADDR);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+#ifndef SK_NDIS_64BIT_CTR
+ if (*pLen < sizeof(SK_U32)) {
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+#else /* SK_NDIS_64BIT_CTR */
+
+ /*
+ * for compatibility, at least 32bit are required for oid
+ */
+ if (*pLen < sizeof(SK_U32)) {
+ /*
+ * but indicate handling for 64bit values,
+ * if insufficient space is provided
+ */
+ *pLen = sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ Is64BitReq = (*pLen < sizeof(SK_U64)) ? SK_FALSE : SK_TRUE;
+#endif /* SK_NDIS_64BIT_CTR */
+ break;
+ }
+
+ /*
+ * Update all statistics, because we retrieve virtual MAC, which
+ * consists of multiple physical statistics and increment semaphore
+ * to indicate that an update was already done.
+ */
+ Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
+ if ( Ret != SK_PNMI_ERR_OK) {
+
+ *pLen = 0;
+ return (Ret);
+ }
+ pAC->Pnmi.MacUpdatedFlag ++;
+
+ /*
+ * Get value (MAC Index 0 identifies the virtual MAC)
+ */
+ switch (Id) {
+
+ case OID_802_3_PERMANENT_ADDRESS:
+ CopyMac(pBuf, &pAC->Addr.Net[NetIndex].PermanentMacAddress);
+ *pLen = sizeof(SK_MAC_ADDR);
+ break;
+
+ case OID_802_3_CURRENT_ADDRESS:
+ CopyMac(pBuf, &pAC->Addr.Net[NetIndex].CurrentMacAddress);
+ *pLen = sizeof(SK_MAC_ADDR);
+ break;
+
+ default:
+ StatVal = GetStatVal(pAC, IoC, 0, IdTable[TableIndex].Param, NetIndex);
+
+ /*
+ * by default 32bit values are evaluated
+ */
+ if (!Is64BitReq) {
+ StatVal32 = (SK_U32)StatVal;
+ SK_PNMI_STORE_U32(pBuf, StatVal32);
+ *pLen = sizeof(SK_U32);
+ }
+ else {
+ SK_PNMI_STORE_U64(pBuf, StatVal);
+ *pLen = sizeof(SK_U64);
+ }
+ break;
+ }
+
+ pAC->Pnmi.MacUpdatedFlag --;
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * MacPrivateStat - OID handler function of OID_SKGE_STAT_XXX
+ *
+ * Description:
+ * Retrieves the XMAC statistic data.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int MacPrivateStat(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int LogPortMax;
+ unsigned int LogPortIndex;
+ unsigned int PhysPortMax;
+ unsigned int Limit;
+ unsigned int Offset;
+ int Ret;
+ SK_U64 StatVal;
+
+
+ /*
+ * Calculate instance if wished. MAC index 0 is the virtual
+ * MAC.
+ */
+ PhysPortMax = pAC->GIni.GIMacsFound;
+ LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
+
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
+ LogPortMax--;
+ }
+
+ if ((Instance != (SK_U32)(-1))) { /* Only one specific instance is queried */
+ /* Check instance range */
+ if ((Instance < 1) || (Instance > LogPortMax)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+ LogPortIndex = SK_PNMI_PORT_INST2LOG(Instance);
+ Limit = LogPortIndex + 1;
+ }
+
+ else { /* Instance == (SK_U32)(-1), get all Instances of that OID */
+
+ LogPortIndex = 0;
+ Limit = LogPortMax;
+ }
+
+
+ /*
+ * Check action
+ */
+ if (Action != SK_PNMI_GET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Check length
+ */
+ if (*pLen < (Limit - LogPortIndex) * sizeof(SK_U64)) {
+
+ *pLen = (Limit - LogPortIndex) * sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * Update XMAC statistic and increment semaphore to indicate that
+ * an update was already done.
+ */
+ Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
+ if (Ret != SK_PNMI_ERR_OK) {
+
+ *pLen = 0;
+ return (Ret);
+ }
+ pAC->Pnmi.MacUpdatedFlag ++;
+
+ /*
+ * Get value
+ */
+ Offset = 0;
+ for (; LogPortIndex < Limit; LogPortIndex ++) {
+
+ switch (Id) {
+
+/* XXX not yet implemented due to XMAC problems
+ case OID_SKGE_STAT_TX_UTIL:
+ return (SK_PNMI_ERR_GENERAL);
+*/
+/* XXX not yet implemented due to XMAC problems
+ case OID_SKGE_STAT_RX_UTIL:
+ return (SK_PNMI_ERR_GENERAL);
+*/
+ case OID_SKGE_STAT_RX:
+ case OID_SKGE_STAT_TX:
+ switch (pAC->GIni.GIMacType) {
+ case SK_MAC_XMAC:
+ StatVal = GetStatVal(pAC, IoC, LogPortIndex,
+ IdTable[TableIndex].Param, NetIndex);
+ break;
+
+ case SK_MAC_GMAC:
+ if (Id == OID_SKGE_STAT_TX) {
+
+ StatVal =
+ GetStatVal(pAC, IoC, LogPortIndex,
+ SK_PNMI_HTX_BROADCAST, NetIndex) +
+ GetStatVal(pAC, IoC, LogPortIndex,
+ SK_PNMI_HTX_MULTICAST, NetIndex) +
+ GetStatVal(pAC, IoC, LogPortIndex,
+ SK_PNMI_HTX_UNICAST, NetIndex);
+ }
+ else {
+ StatVal =
+ GetStatVal(pAC, IoC, LogPortIndex,
+ SK_PNMI_HRX_BROADCAST, NetIndex) +
+ GetStatVal(pAC, IoC, LogPortIndex,
+ SK_PNMI_HRX_MULTICAST, NetIndex) +
+ GetStatVal(pAC, IoC, LogPortIndex,
+ SK_PNMI_HRX_UNICAST, NetIndex) +
+ GetStatVal(pAC, IoC, LogPortIndex,
+ SK_PNMI_HRX_UNDERSIZE, NetIndex);
+ }
+ break;
+
+ default:
+ StatVal = 0;
+ break;
+ }
+
+ SK_PNMI_STORE_U64(pBuf + Offset, StatVal);
+ break;
+
+ default:
+ StatVal = GetStatVal(pAC, IoC, LogPortIndex,
+ IdTable[TableIndex].Param, NetIndex);
+ SK_PNMI_STORE_U64(pBuf + Offset, StatVal);
+ break;
+ }
+
+ Offset += sizeof(SK_U64);
+ }
+ *pLen = Offset;
+
+ pAC->Pnmi.MacUpdatedFlag --;
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * Addr - OID handler function of OID_SKGE_PHYS_CUR_ADDR and _FAC_ADDR
+ *
+ * Description:
+ * Get/Presets/Sets the current and factory MAC address. The MAC
+ * address of the virtual port, which is reported to the OS, may
+ * not be changed, but the physical ones. A set to the virtual port
+ * will be ignored. No error should be reported because otherwise
+ * a multiple instance set (-1) would always fail.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int Addr(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ int Ret;
+ unsigned int LogPortMax;
+ unsigned int PhysPortMax;
+ unsigned int LogPortIndex;
+ unsigned int PhysPortIndex;
+ unsigned int Limit;
+ unsigned int Offset = 0;
+
+ /*
+ * Calculate instance if wished. MAC index 0 is the virtual
+ * MAC.
+ */
+ PhysPortMax = pAC->GIni.GIMacsFound;
+ LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
+
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
+ LogPortMax--;
+ }
+
+ if ((Instance != (SK_U32)(-1))) { /* Only one specific instance is queried */
+ /* Check instance range */
+ if ((Instance < 1) || (Instance > LogPortMax)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+ LogPortIndex = SK_PNMI_PORT_INST2LOG(Instance);
+ Limit = LogPortIndex + 1;
+ }
+
+ else { /* Instance == (SK_U32)(-1), get all Instances of that OID */
+
+ LogPortIndex = 0;
+ Limit = LogPortMax;
+ }
+
+ /*
+ * Perform Action
+ */
+ if (Action == SK_PNMI_GET) {
+
+ /*
+ * Check length
+ */
+ if (*pLen < (Limit - LogPortIndex) * 6) {
+
+ *pLen = (Limit - LogPortIndex) * 6;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * Get value
+ */
+ for (; LogPortIndex < Limit; LogPortIndex ++) {
+
+ switch (Id) {
+
+ case OID_SKGE_PHYS_CUR_ADDR:
+ if (LogPortIndex == 0) {
+ CopyMac(pBuf + Offset, &pAC->Addr.Net[NetIndex].CurrentMacAddress);
+ }
+ else {
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(pAC, LogPortIndex);
+
+ CopyMac(pBuf + Offset,
+ &pAC->Addr.Port[PhysPortIndex].CurrentMacAddress);
+ }
+ Offset += 6;
+ break;
+
+ case OID_SKGE_PHYS_FAC_ADDR:
+ if (LogPortIndex == 0) {
+ CopyMac(pBuf + Offset,
+ &pAC->Addr.Net[NetIndex].PermanentMacAddress);
+ }
+ else {
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ CopyMac(pBuf + Offset,
+ &pAC->Addr.Port[PhysPortIndex].PermanentMacAddress);
+ }
+ Offset += 6;
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR008,
+ SK_PNMI_ERR008MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+
+ *pLen = Offset;
+ }
+ else {
+ /*
+ * The logical MAC address may not be changed only
+ * the physical ones
+ */
+ if (Id == OID_SKGE_PHYS_FAC_ADDR) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Only the current address may be changed
+ */
+ if (Id != OID_SKGE_PHYS_CUR_ADDR) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR009,
+ SK_PNMI_ERR009MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Check length
+ */
+ if (*pLen < (Limit - LogPortIndex) * 6) {
+
+ *pLen = (Limit - LogPortIndex) * 6;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ if (*pLen > (Limit - LogPortIndex) * 6) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /*
+ * Check Action
+ */
+ if (Action == SK_PNMI_PRESET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /*
+ * Set OID_SKGE_MAC_CUR_ADDR
+ */
+ for (; LogPortIndex < Limit; LogPortIndex ++, Offset += 6) {
+
+ /*
+ * A set to virtual port and set of broadcast
+ * address will be ignored
+ */
+ if (LogPortIndex == 0 || SK_MEMCMP(pBuf + Offset,
+ "\xff\xff\xff\xff\xff\xff", 6) == 0) {
+
+ continue;
+ }
+
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(pAC,
+ LogPortIndex);
+
+ Ret = SkAddrOverride(pAC, IoC, PhysPortIndex,
+ (SK_MAC_ADDR *)(pBuf + Offset),
+ (LogPortIndex == 0 ? SK_ADDR_VIRTUAL_ADDRESS :
+ SK_ADDR_PHYSICAL_ADDRESS));
+ if (Ret != SK_ADDR_OVERRIDE_SUCCESS) {
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ *pLen = Offset;
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * CsumStat - OID handler function of OID_SKGE_CHKSM_XXX
+ *
+ * Description:
+ * Retrieves the statistic values of the CSUM module. The CSUM data
+ * structure must be available in the SK_AC even if the CSUM module
+ * is not included, because PNMI reads the statistic data from the
+ * CSUM part of SK_AC directly.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int CsumStat(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int Index;
+ unsigned int Limit;
+ unsigned int Offset = 0;
+ SK_U64 StatVal;
+
+
+ /*
+ * Calculate instance if wished
+ */
+ if (Instance != (SK_U32)(-1)) {
+
+ if ((Instance < 1) || (Instance > SKCS_NUM_PROTOCOLS)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+ Index = (unsigned int)Instance - 1;
+ Limit = Index + 1;
+ }
+ else {
+ Index = 0;
+ Limit = SKCS_NUM_PROTOCOLS;
+ }
+
+ /*
+ * Check action
+ */
+ if (Action != SK_PNMI_GET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Check length
+ */
+ if (*pLen < (Limit - Index) * sizeof(SK_U64)) {
+
+ *pLen = (Limit - Index) * sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * Get value
+ */
+ for (; Index < Limit; Index ++) {
+
+ switch (Id) {
+
+ case OID_SKGE_CHKSM_RX_OK_CTS:
+ StatVal = pAC->Csum.ProtoStats[NetIndex][Index].RxOkCts;
+ break;
+
+ case OID_SKGE_CHKSM_RX_UNABLE_CTS:
+ StatVal = pAC->Csum.ProtoStats[NetIndex][Index].RxUnableCts;
+ break;
+
+ case OID_SKGE_CHKSM_RX_ERR_CTS:
+ StatVal = pAC->Csum.ProtoStats[NetIndex][Index].RxErrCts;
+ break;
+
+ case OID_SKGE_CHKSM_TX_OK_CTS:
+ StatVal = pAC->Csum.ProtoStats[NetIndex][Index].TxOkCts;
+ break;
+
+ case OID_SKGE_CHKSM_TX_UNABLE_CTS:
+ StatVal = pAC->Csum.ProtoStats[NetIndex][Index].TxUnableCts;
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR010,
+ SK_PNMI_ERR010MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ SK_PNMI_STORE_U64(pBuf + Offset, StatVal);
+ Offset += sizeof(SK_U64);
+ }
+
+ /*
+ * Store used buffer space
+ */
+ *pLen = Offset;
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * SensorStat - OID handler function of OID_SKGE_SENSOR_XXX
+ *
+ * Description:
+ * Retrieves the statistic values of the I2C module, which handles
+ * the temperature and voltage sensors.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int SensorStat(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int i;
+ unsigned int Index;
+ unsigned int Limit;
+ unsigned int Offset;
+ unsigned int Len;
+ SK_U32 Val32;
+ SK_U64 Val64;
+
+
+ /*
+ * Calculate instance if wished
+ */
+ if ((Instance != (SK_U32)(-1))) {
+
+ if ((Instance < 1) || (Instance > (SK_U32)pAC->I2c.MaxSens)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ Index = (unsigned int)Instance -1;
+ Limit = (unsigned int)Instance;
+ }
+ else {
+ Index = 0;
+ Limit = (unsigned int) pAC->I2c.MaxSens;
+ }
+
+ /*
+ * Check action
+ */
+ if (Action != SK_PNMI_GET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Check length
+ */
+ switch (Id) {
+
+ case OID_SKGE_SENSOR_VALUE:
+ case OID_SKGE_SENSOR_WAR_THRES_LOW:
+ case OID_SKGE_SENSOR_WAR_THRES_UPP:
+ case OID_SKGE_SENSOR_ERR_THRES_LOW:
+ case OID_SKGE_SENSOR_ERR_THRES_UPP:
+ if (*pLen < (Limit - Index) * sizeof(SK_U32)) {
+
+ *pLen = (Limit - Index) * sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_SENSOR_DESCR:
+ for (Offset = 0, i = Index; i < Limit; i ++) {
+
+ Len = (unsigned int)
+ SK_STRLEN(pAC->I2c.SenTable[i].SenDesc) + 1;
+ if (Len >= SK_PNMI_STRINGLEN2) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR011,
+ SK_PNMI_ERR011MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ Offset += Len;
+ }
+ if (*pLen < Offset) {
+
+ *pLen = Offset;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_SENSOR_INDEX:
+ case OID_SKGE_SENSOR_TYPE:
+ case OID_SKGE_SENSOR_STATUS:
+ if (*pLen < Limit - Index) {
+
+ *pLen = Limit - Index;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_SENSOR_WAR_CTS:
+ case OID_SKGE_SENSOR_WAR_TIME:
+ case OID_SKGE_SENSOR_ERR_CTS:
+ case OID_SKGE_SENSOR_ERR_TIME:
+ if (*pLen < (Limit - Index) * sizeof(SK_U64)) {
+
+ *pLen = (Limit - Index) * sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR012,
+ SK_PNMI_ERR012MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+
+ }
+
+ /*
+ * Get value
+ */
+ for (Offset = 0; Index < Limit; Index ++) {
+
+ switch (Id) {
+
+ case OID_SKGE_SENSOR_INDEX:
+ *(pBuf + Offset) = (char)Index;
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_SENSOR_DESCR:
+ Len = SK_STRLEN(pAC->I2c.SenTable[Index].SenDesc);
+ SK_MEMCPY(pBuf + Offset + 1,
+ pAC->I2c.SenTable[Index].SenDesc, Len);
+ *(pBuf + Offset) = (char)Len;
+ Offset += Len + 1;
+ break;
+
+ case OID_SKGE_SENSOR_TYPE:
+ *(pBuf + Offset) =
+ (char)pAC->I2c.SenTable[Index].SenType;
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_SENSOR_VALUE:
+ Val32 = (SK_U32)pAC->I2c.SenTable[Index].SenValue;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_SENSOR_WAR_THRES_LOW:
+ Val32 = (SK_U32)pAC->I2c.SenTable[Index].
+ SenThreWarnLow;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_SENSOR_WAR_THRES_UPP:
+ Val32 = (SK_U32)pAC->I2c.SenTable[Index].
+ SenThreWarnHigh;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_SENSOR_ERR_THRES_LOW:
+ Val32 = (SK_U32)pAC->I2c.SenTable[Index].
+ SenThreErrLow;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_SENSOR_ERR_THRES_UPP:
+ Val32 = pAC->I2c.SenTable[Index].SenThreErrHigh;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_SENSOR_STATUS:
+ *(pBuf + Offset) =
+ (char)pAC->I2c.SenTable[Index].SenErrFlag;
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_SENSOR_WAR_CTS:
+ Val64 = pAC->I2c.SenTable[Index].SenWarnCts;
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_SENSOR_ERR_CTS:
+ Val64 = pAC->I2c.SenTable[Index].SenErrCts;
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_SENSOR_WAR_TIME:
+ Val64 = SK_PNMI_HUNDREDS_SEC(pAC->I2c.SenTable[Index].
+ SenBegWarnTS);
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_SENSOR_ERR_TIME:
+ Val64 = SK_PNMI_HUNDREDS_SEC(pAC->I2c.SenTable[Index].
+ SenBegErrTS);
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ default:
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
+ ("SensorStat: Unknown OID should be handled before"));
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+
+ /*
+ * Store used buffer space
+ */
+ *pLen = Offset;
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * Vpd - OID handler function of OID_SKGE_VPD_XXX
+ *
+ * Description:
+ * Get/preset/set of VPD data. As instance the name of a VPD key
+ * can be passed. The Instance parameter is a SK_U32 and can be
+ * used as a string buffer for the VPD key, because their maximum
+ * length is 4 byte.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int Vpd(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ SK_VPD_STATUS *pVpdStatus;
+ unsigned int BufLen;
+ char Buf[256];
+ char KeyArr[SK_PNMI_VPD_ENTRIES][SK_PNMI_VPD_KEY_SIZE];
+ char KeyStr[SK_PNMI_VPD_KEY_SIZE];
+ unsigned int KeyNo;
+ unsigned int Offset;
+ unsigned int Index;
+ unsigned int FirstIndex;
+ unsigned int LastIndex;
+ unsigned int Len;
+ int Ret;
+ SK_U32 Val32;
+
+ /*
+ * Get array of all currently stored VPD keys
+ */
+ Ret = GetVpdKeyArr(pAC, IoC, &KeyArr[0][0], sizeof(KeyArr),
+ &KeyNo);
+ if (Ret != SK_PNMI_ERR_OK) {
+ *pLen = 0;
+ return (Ret);
+ }
+
+ /*
+ * If instance is not -1, try to find the requested VPD key for
+ * the multiple instance variables. The other OIDs as for example
+ * OID VPD_ACTION are single instance variables and must be
+ * handled separatly.
+ */
+ FirstIndex = 0;
+ LastIndex = KeyNo;
+
+ if ((Instance != (SK_U32)(-1))) {
+
+ if (Id == OID_SKGE_VPD_KEY || Id == OID_SKGE_VPD_VALUE ||
+ Id == OID_SKGE_VPD_ACCESS) {
+
+ SK_STRNCPY(KeyStr, (char *)&Instance, 4);
+ KeyStr[4] = 0;
+
+ for (Index = 0; Index < KeyNo; Index ++) {
+
+ if (SK_STRCMP(KeyStr, KeyArr[Index]) == 0) {
+ FirstIndex = Index;
+ LastIndex = Index+1;
+ break;
+ }
+ }
+ if (Index == KeyNo) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+ }
+ else if (Instance != 1) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+ }
+
+ /*
+ * Get value, if a query should be performed
+ */
+ if (Action == SK_PNMI_GET) {
+
+ switch (Id) {
+
+ case OID_SKGE_VPD_FREE_BYTES:
+ /* Check length of buffer */
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ /* Get number of free bytes */
+ pVpdStatus = VpdStat(pAC, IoC);
+ if (pVpdStatus == NULL) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR017,
+ SK_PNMI_ERR017MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ if ((pVpdStatus->vpd_status & VPD_VALID) == 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR018,
+ SK_PNMI_ERR018MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ Val32 = (SK_U32)pVpdStatus->vpd_free_rw;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_VPD_ENTRIES_LIST:
+ /* Check length */
+ for (Len = 0, Index = 0; Index < KeyNo; Index ++) {
+
+ Len += SK_STRLEN(KeyArr[Index]) + 1;
+ }
+ if (*pLen < Len) {
+
+ *pLen = Len;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /* Get value */
+ *(pBuf) = (char)Len - 1;
+ for (Offset = 1, Index = 0; Index < KeyNo; Index ++) {
+
+ Len = SK_STRLEN(KeyArr[Index]);
+ SK_MEMCPY(pBuf + Offset, KeyArr[Index], Len);
+
+ Offset += Len;
+
+ if (Index < KeyNo - 1) {
+
+ *(pBuf + Offset) = ' ';
+ Offset ++;
+ }
+ }
+ *pLen = Offset;
+ break;
+
+ case OID_SKGE_VPD_ENTRIES_NUMBER:
+ /* Check length */
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ Val32 = (SK_U32)KeyNo;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_VPD_KEY:
+ /* Check buffer length, if it is large enough */
+ for (Len = 0, Index = FirstIndex;
+ Index < LastIndex; Index ++) {
+
+ Len += SK_STRLEN(KeyArr[Index]) + 1;
+ }
+ if (*pLen < Len) {
+
+ *pLen = Len;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * Get the key to an intermediate buffer, because
+ * we have to prepend a length byte.
+ */
+ for (Offset = 0, Index = FirstIndex;
+ Index < LastIndex; Index ++) {
+
+ Len = SK_STRLEN(KeyArr[Index]);
+
+ *(pBuf + Offset) = (char)Len;
+ SK_MEMCPY(pBuf + Offset + 1, KeyArr[Index],
+ Len);
+ Offset += Len + 1;
+ }
+ *pLen = Offset;
+ break;
+
+ case OID_SKGE_VPD_VALUE:
+ /* Check the buffer length if it is large enough */
+ for (Offset = 0, Index = FirstIndex;
+ Index < LastIndex; Index ++) {
+
+ BufLen = 256;
+ if (VpdRead(pAC, IoC, KeyArr[Index], Buf,
+ (int *)&BufLen) > 0 ||
+ BufLen >= SK_PNMI_VPD_DATALEN) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR021,
+ SK_PNMI_ERR021MSG);
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ Offset += BufLen + 1;
+ }
+ if (*pLen < Offset) {
+
+ *pLen = Offset;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * Get the value to an intermediate buffer, because
+ * we have to prepend a length byte.
+ */
+ for (Offset = 0, Index = FirstIndex;
+ Index < LastIndex; Index ++) {
+
+ BufLen = 256;
+ if (VpdRead(pAC, IoC, KeyArr[Index], Buf,
+ (int *)&BufLen) > 0 ||
+ BufLen >= SK_PNMI_VPD_DATALEN) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR022,
+ SK_PNMI_ERR022MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ *(pBuf + Offset) = (char)BufLen;
+ SK_MEMCPY(pBuf + Offset + 1, Buf, BufLen);
+ Offset += BufLen + 1;
+ }
+ *pLen = Offset;
+ break;
+
+ case OID_SKGE_VPD_ACCESS:
+ if (*pLen < LastIndex - FirstIndex) {
+
+ *pLen = LastIndex - FirstIndex;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ for (Offset = 0, Index = FirstIndex;
+ Index < LastIndex; Index ++) {
+
+ if (VpdMayWrite(KeyArr[Index])) {
+
+ *(pBuf + Offset) = SK_PNMI_VPD_RW;
+ }
+ else {
+ *(pBuf + Offset) = SK_PNMI_VPD_RO;
+ }
+ Offset ++;
+ }
+ *pLen = Offset;
+ break;
+
+ case OID_SKGE_VPD_ACTION:
+ Offset = LastIndex - FirstIndex;
+ if (*pLen < Offset) {
+
+ *pLen = Offset;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ SK_MEMSET(pBuf, 0, Offset);
+ *pLen = Offset;
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR023,
+ SK_PNMI_ERR023MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ else {
+ /* The only OID which can be set is VPD_ACTION */
+ if (Id != OID_SKGE_VPD_ACTION) {
+
+ if (Id == OID_SKGE_VPD_FREE_BYTES ||
+ Id == OID_SKGE_VPD_ENTRIES_LIST ||
+ Id == OID_SKGE_VPD_ENTRIES_NUMBER ||
+ Id == OID_SKGE_VPD_KEY ||
+ Id == OID_SKGE_VPD_VALUE ||
+ Id == OID_SKGE_VPD_ACCESS) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR024,
+ SK_PNMI_ERR024MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * From this point we handle VPD_ACTION. Check the buffer
+ * length. It should at least have the size of one byte.
+ */
+ if (*pLen < 1) {
+
+ *pLen = 1;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ /*
+ * The first byte contains the VPD action type we should
+ * perform.
+ */
+ switch (*pBuf) {
+
+ case SK_PNMI_VPD_IGNORE:
+ /* Nothing to do */
+ break;
+
+ case SK_PNMI_VPD_CREATE:
+ /*
+ * We have to create a new VPD entry or we modify
+ * an existing one. Check first the buffer length.
+ */
+ if (*pLen < 4) {
+
+ *pLen = 4;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ KeyStr[0] = pBuf[1];
+ KeyStr[1] = pBuf[2];
+ KeyStr[2] = 0;
+
+ /*
+ * Is the entry writable or does it belong to the
+ * read-only area?
+ */
+ if (!VpdMayWrite(KeyStr)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ Offset = (int)pBuf[3] & 0xFF;
+
+ SK_MEMCPY(Buf, pBuf + 4, Offset);
+ Buf[Offset] = 0;
+
+ /* A preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /* Write the new entry or modify an existing one */
+ Ret = VpdWrite(pAC, IoC, KeyStr, Buf);
+ if (Ret == SK_PNMI_VPD_NOWRITE ) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ else if (Ret != SK_PNMI_VPD_OK) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR025,
+ SK_PNMI_ERR025MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Perform an update of the VPD data. This is
+ * not mandantory, but just to be sure.
+ */
+ Ret = VpdUpdate(pAC, IoC);
+ if (Ret != SK_PNMI_VPD_OK) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR026,
+ SK_PNMI_ERR026MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ break;
+
+ case SK_PNMI_VPD_DELETE:
+ /* Check if the buffer size is plausible */
+ if (*pLen < 3) {
+
+ *pLen = 3;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ if (*pLen > 3) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ KeyStr[0] = pBuf[1];
+ KeyStr[1] = pBuf[2];
+ KeyStr[2] = 0;
+
+ /* Find the passed key in the array */
+ for (Index = 0; Index < KeyNo; Index ++) {
+
+ if (SK_STRCMP(KeyStr, KeyArr[Index]) == 0) {
+
+ break;
+ }
+ }
+ /*
+ * If we cannot find the key it is wrong, so we
+ * return an appropriate error value.
+ */
+ if (Index == KeyNo) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ if (Action == SK_PNMI_PRESET) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /* Ok, you wanted it and you will get it */
+ Ret = VpdDelete(pAC, IoC, KeyStr);
+ if (Ret != SK_PNMI_VPD_OK) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR027,
+ SK_PNMI_ERR027MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Perform an update of the VPD data. This is
+ * not mandantory, but just to be sure.
+ */
+ Ret = VpdUpdate(pAC, IoC);
+ if (Ret != SK_PNMI_VPD_OK) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR028,
+ SK_PNMI_ERR028MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ break;
+
+ default:
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * General - OID handler function of various single instance OIDs
+ *
+ * Description:
+ * The code is simple. No description necessary.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int General(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ int Ret;
+ unsigned int Index;
+ unsigned int Len;
+ unsigned int Offset;
+ unsigned int Val;
+ SK_U8 Val8;
+ SK_U16 Val16;
+ SK_U32 Val32;
+ SK_U64 Val64;
+ SK_U64 Val64RxHwErrs = 0;
+ SK_U64 Val64TxHwErrs = 0;
+ SK_BOOL Is64BitReq = SK_FALSE;
+ char Buf[256];
+ int MacType;
+
+ /*
+ * Check instance. We only handle single instance variables
+ */
+ if (Instance != (SK_U32)(-1) && Instance != 1) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ /*
+ * Check action. We only allow get requests.
+ */
+ if (Action != SK_PNMI_GET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ MacType = pAC->GIni.GIMacType;
+
+ /*
+ * Check length for the various supported OIDs
+ */
+ switch (Id) {
+
+ case OID_GEN_XMIT_ERROR:
+ case OID_GEN_RCV_ERROR:
+ case OID_GEN_RCV_NO_BUFFER:
+#ifndef SK_NDIS_64BIT_CTR
+ if (*pLen < sizeof(SK_U32)) {
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+#else /* SK_NDIS_64BIT_CTR */
+
+ /*
+ * for compatibility, at least 32bit are required for oid
+ */
+ if (*pLen < sizeof(SK_U32)) {
+ /*
+ * but indicate handling for 64bit values,
+ * if insufficient space is provided
+ */
+ *pLen = sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+
+ Is64BitReq = (*pLen < sizeof(SK_U64)) ? SK_FALSE : SK_TRUE;
+#endif /* SK_NDIS_64BIT_CTR */
+ break;
+
+ case OID_SKGE_PORT_NUMBER:
+ case OID_SKGE_DEVICE_TYPE:
+ case OID_SKGE_RESULT:
+ case OID_SKGE_RLMT_MONITOR_NUMBER:
+ case OID_GEN_TRANSMIT_QUEUE_LENGTH:
+ case OID_SKGE_TRAP_NUMBER:
+ case OID_SKGE_MDB_VERSION:
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_CHIPSET:
+ if (*pLen < sizeof(SK_U16)) {
+
+ *pLen = sizeof(SK_U16);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_BUS_TYPE:
+ case OID_SKGE_BUS_SPEED:
+ case OID_SKGE_BUS_WIDTH:
+ case OID_SKGE_SENSOR_NUMBER:
+ case OID_SKGE_CHKSM_NUMBER:
+ if (*pLen < sizeof(SK_U8)) {
+
+ *pLen = sizeof(SK_U8);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_TX_SW_QUEUE_LEN:
+ case OID_SKGE_TX_SW_QUEUE_MAX:
+ case OID_SKGE_TX_RETRY:
+ case OID_SKGE_RX_INTR_CTS:
+ case OID_SKGE_TX_INTR_CTS:
+ case OID_SKGE_RX_NO_BUF_CTS:
+ case OID_SKGE_TX_NO_BUF_CTS:
+ case OID_SKGE_TX_USED_DESCR_NO:
+ case OID_SKGE_RX_DELIVERED_CTS:
+ case OID_SKGE_RX_OCTETS_DELIV_CTS:
+ case OID_SKGE_RX_HW_ERROR_CTS:
+ case OID_SKGE_TX_HW_ERROR_CTS:
+ case OID_SKGE_IN_ERRORS_CTS:
+ case OID_SKGE_OUT_ERROR_CTS:
+ case OID_SKGE_ERR_RECOVERY_CTS:
+ case OID_SKGE_SYSUPTIME:
+ if (*pLen < sizeof(SK_U64)) {
+
+ *pLen = sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+ /* Checked later */
+ break;
+ }
+
+ /* Update statistic */
+ if (Id == OID_SKGE_RX_HW_ERROR_CTS ||
+ Id == OID_SKGE_TX_HW_ERROR_CTS ||
+ Id == OID_SKGE_IN_ERRORS_CTS ||
+ Id == OID_SKGE_OUT_ERROR_CTS ||
+ Id == OID_GEN_XMIT_ERROR ||
+ Id == OID_GEN_RCV_ERROR) {
+
+ /* Force the XMAC to update its statistic counters and
+ * Increment semaphore to indicate that an update was
+ * already done.
+ */
+ Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1);
+ if (Ret != SK_PNMI_ERR_OK) {
+
+ *pLen = 0;
+ return (Ret);
+ }
+ pAC->Pnmi.MacUpdatedFlag ++;
+
+ /*
+ * Some OIDs consist of multiple hardware counters. Those
+ * values which are contained in all of them will be added
+ * now.
+ */
+ switch (Id) {
+
+ case OID_SKGE_RX_HW_ERROR_CTS:
+ case OID_SKGE_IN_ERRORS_CTS:
+ case OID_GEN_RCV_ERROR:
+ Val64RxHwErrs =
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_MISSED, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_FRAMING, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_OVERFLOW, NetIndex)+
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_JABBER, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_CARRIER, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_IRLENGTH, NetIndex)+
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_SYMBOL, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_SHORTS, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_RUNT, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_TOO_LONG, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_FCS, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HRX_CEXT, NetIndex);
+ break;
+
+ case OID_SKGE_TX_HW_ERROR_CTS:
+ case OID_SKGE_OUT_ERROR_CTS:
+ case OID_GEN_XMIT_ERROR:
+ Val64TxHwErrs =
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_EXCESS_COL, NetIndex) +
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_LATE_COL, NetIndex)+
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_UNDERRUN, NetIndex)+
+ GetStatVal(pAC, IoC, 0, SK_PNMI_HTX_CARRIER, NetIndex);
+ break;
+ }
+ }
+
+ /*
+ * Retrieve value
+ */
+ switch (Id) {
+
+ case OID_SKGE_SUPPORTED_LIST:
+ Len = ID_TABLE_SIZE * sizeof(SK_U32);
+ if (*pLen < Len) {
+
+ *pLen = Len;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ for (Offset = 0, Index = 0; Offset < Len;
+ Offset += sizeof(SK_U32), Index ++) {
+
+ Val32 = (SK_U32)IdTable[Index].Id;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ }
+ *pLen = Len;
+ break;
+
+ case OID_SKGE_PORT_NUMBER:
+ Val32 = (SK_U32)pAC->GIni.GIMacsFound;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_DEVICE_TYPE:
+ Val32 = (SK_U32)pAC->Pnmi.DeviceType;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_DRIVER_DESCR:
+ if (pAC->Pnmi.pDriverDescription == NULL) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR007,
+ SK_PNMI_ERR007MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ Len = SK_STRLEN(pAC->Pnmi.pDriverDescription) + 1;
+ if (Len > SK_PNMI_STRINGLEN1) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR029,
+ SK_PNMI_ERR029MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ if (*pLen < Len) {
+
+ *pLen = Len;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ *pBuf = (char)(Len - 1);
+ SK_MEMCPY(pBuf + 1, pAC->Pnmi.pDriverDescription, Len - 1);
+ *pLen = Len;
+ break;
+
+ case OID_SKGE_DRIVER_VERSION:
+ if (pAC->Pnmi.pDriverVersion == NULL) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR030,
+ SK_PNMI_ERR030MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ Len = SK_STRLEN(pAC->Pnmi.pDriverVersion) + 1;
+ if (Len > SK_PNMI_STRINGLEN1) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR031,
+ SK_PNMI_ERR031MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ if (*pLen < Len) {
+
+ *pLen = Len;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ *pBuf = (char)(Len - 1);
+ SK_MEMCPY(pBuf + 1, pAC->Pnmi.pDriverVersion, Len - 1);
+ *pLen = Len;
+ break;
+
+ case OID_SKGE_HW_DESCR:
+ /*
+ * The hardware description is located in the VPD. This
+ * query may move to the initialisation routine. But
+ * the VPD data is cached and therefore a call here
+ * will not make much difference.
+ */
+ Len = 256;
+ if (VpdRead(pAC, IoC, VPD_NAME, Buf, (int *)&Len) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR032,
+ SK_PNMI_ERR032MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ Len ++;
+ if (Len > SK_PNMI_STRINGLEN1) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR033,
+ SK_PNMI_ERR033MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ if (*pLen < Len) {
+
+ *pLen = Len;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ *pBuf = (char)(Len - 1);
+ SK_MEMCPY(pBuf + 1, Buf, Len - 1);
+ *pLen = Len;
+ break;
+
+ case OID_SKGE_HW_VERSION:
+ /* Oh, I love to do some string manipulation */
+ if (*pLen < 5) {
+
+ *pLen = 5;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ Val8 = (SK_U8)pAC->GIni.GIPciHwRev;
+ pBuf[0] = 4;
+ pBuf[1] = 'v';
+ pBuf[2] = (char)(0x30 | ((Val8 >> 4) & 0x0F));
+ pBuf[3] = '.';
+ pBuf[4] = (char)(0x30 | (Val8 & 0x0F));
+ *pLen = 5;
+ break;
+
+ case OID_SKGE_CHIPSET:
+ Val16 = pAC->Pnmi.Chipset;
+ SK_PNMI_STORE_U16(pBuf, Val16);
+ *pLen = sizeof(SK_U16);
+ break;
+
+ case OID_SKGE_BUS_TYPE:
+ *pBuf = (char)SK_PNMI_BUS_PCI;
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_BUS_SPEED:
+ *pBuf = pAC->Pnmi.PciBusSpeed;
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_BUS_WIDTH:
+ *pBuf = pAC->Pnmi.PciBusWidth;
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_RESULT:
+ Val32 = pAC->Pnmi.TestResult;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_SENSOR_NUMBER:
+ *pBuf = (char)pAC->I2c.MaxSens;
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_CHKSM_NUMBER:
+ *pBuf = SKCS_NUM_PROTOCOLS;
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_TRAP_NUMBER:
+ GetTrapQueueLen(pAC, &Len, &Val);
+ Val32 = (SK_U32)Val;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_TRAP:
+ GetTrapQueueLen(pAC, &Len, &Val);
+ if (*pLen < Len) {
+
+ *pLen = Len;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ CopyTrapQueue(pAC, pBuf);
+ *pLen = Len;
+ break;
+
+ case OID_SKGE_RLMT_MONITOR_NUMBER:
+/* XXX Not yet implemented by RLMT therefore we return zero elements */
+ Val32 = 0;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_TX_SW_QUEUE_LEN:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].TxSwQueueLen;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].TxSwQueueLen +
+ pAC->Pnmi.BufPort[1].TxSwQueueLen;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].TxSwQueueLen;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].TxSwQueueLen +
+ pAC->Pnmi.Port[1].TxSwQueueLen;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+
+ case OID_SKGE_TX_SW_QUEUE_MAX:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].TxSwQueueMax;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].TxSwQueueMax +
+ pAC->Pnmi.BufPort[1].TxSwQueueMax;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].TxSwQueueMax;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].TxSwQueueMax +
+ pAC->Pnmi.Port[1].TxSwQueueMax;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_TX_RETRY:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].TxRetryCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].TxRetryCts +
+ pAC->Pnmi.BufPort[1].TxRetryCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].TxRetryCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].TxRetryCts +
+ pAC->Pnmi.Port[1].TxRetryCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RX_INTR_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].RxIntrCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].RxIntrCts +
+ pAC->Pnmi.BufPort[1].RxIntrCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].RxIntrCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].RxIntrCts +
+ pAC->Pnmi.Port[1].RxIntrCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_TX_INTR_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].TxIntrCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].TxIntrCts +
+ pAC->Pnmi.BufPort[1].TxIntrCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].TxIntrCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].TxIntrCts +
+ pAC->Pnmi.Port[1].TxIntrCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RX_NO_BUF_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].RxNoBufCts +
+ pAC->Pnmi.BufPort[1].RxNoBufCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].RxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].RxNoBufCts +
+ pAC->Pnmi.Port[1].RxNoBufCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_TX_NO_BUF_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].TxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].TxNoBufCts +
+ pAC->Pnmi.BufPort[1].TxNoBufCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].TxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].TxNoBufCts +
+ pAC->Pnmi.Port[1].TxNoBufCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_TX_USED_DESCR_NO:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].TxUsedDescrNo;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].TxUsedDescrNo +
+ pAC->Pnmi.BufPort[1].TxUsedDescrNo;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].TxUsedDescrNo;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].TxUsedDescrNo +
+ pAC->Pnmi.Port[1].TxUsedDescrNo;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RX_DELIVERED_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].RxDeliveredCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].RxDeliveredCts +
+ pAC->Pnmi.BufPort[1].RxDeliveredCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].RxDeliveredCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].RxDeliveredCts +
+ pAC->Pnmi.Port[1].RxDeliveredCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RX_OCTETS_DELIV_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].RxOctetsDeliveredCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].RxOctetsDeliveredCts +
+ pAC->Pnmi.BufPort[1].RxOctetsDeliveredCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].RxOctetsDeliveredCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].RxOctetsDeliveredCts +
+ pAC->Pnmi.Port[1].RxOctetsDeliveredCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RX_HW_ERROR_CTS:
+ SK_PNMI_STORE_U64(pBuf, Val64RxHwErrs);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_TX_HW_ERROR_CTS:
+ SK_PNMI_STORE_U64(pBuf, Val64TxHwErrs);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_IN_ERRORS_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = Val64RxHwErrs + pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = Val64RxHwErrs +
+ pAC->Pnmi.BufPort[0].RxNoBufCts +
+ pAC->Pnmi.BufPort[1].RxNoBufCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = Val64RxHwErrs + pAC->Pnmi.Port[NetIndex].RxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = Val64RxHwErrs +
+ pAC->Pnmi.Port[0].RxNoBufCts +
+ pAC->Pnmi.Port[1].RxNoBufCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_OUT_ERROR_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = Val64TxHwErrs + pAC->Pnmi.BufPort[NetIndex].TxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = Val64TxHwErrs +
+ pAC->Pnmi.BufPort[0].TxNoBufCts +
+ pAC->Pnmi.BufPort[1].TxNoBufCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = Val64TxHwErrs + pAC->Pnmi.Port[NetIndex].TxNoBufCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = Val64TxHwErrs +
+ pAC->Pnmi.Port[0].TxNoBufCts +
+ pAC->Pnmi.Port[1].TxNoBufCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_ERR_RECOVERY_CTS:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].ErrRecoveryCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.BufPort[0].ErrRecoveryCts +
+ pAC->Pnmi.BufPort[1].ErrRecoveryCts;
+ }
+ }
+ else {
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ Val64 = pAC->Pnmi.Port[NetIndex].ErrRecoveryCts;
+ }
+ /* Single net mode */
+ else {
+ Val64 = pAC->Pnmi.Port[0].ErrRecoveryCts +
+ pAC->Pnmi.Port[1].ErrRecoveryCts;
+ }
+ }
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_SYSUPTIME:
+ Val64 = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
+ Val64 -= pAC->Pnmi.StartUpTime;
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_MDB_VERSION:
+ Val32 = SK_PNMI_MDB_VERSION;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_GEN_RCV_ERROR:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ Val64 = Val64RxHwErrs + pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
+ }
+ else {
+ Val64 = Val64RxHwErrs + pAC->Pnmi.Port[NetIndex].RxNoBufCts;
+ }
+
+ /*
+ * by default 32bit values are evaluated
+ */
+ if (!Is64BitReq) {
+ Val32 = (SK_U32)Val64;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ }
+ else {
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ }
+ break;
+
+ case OID_GEN_XMIT_ERROR:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ Val64 = Val64TxHwErrs + pAC->Pnmi.BufPort[NetIndex].TxNoBufCts;
+ }
+ else {
+ Val64 = Val64TxHwErrs + pAC->Pnmi.Port[NetIndex].TxNoBufCts;
+ }
+
+ /*
+ * by default 32bit values are evaluated
+ */
+ if (!Is64BitReq) {
+ Val32 = (SK_U32)Val64;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ }
+ else {
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ }
+ break;
+
+ case OID_GEN_RCV_NO_BUFFER:
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (MacType == SK_MAC_XMAC) {
+ Val64 = pAC->Pnmi.BufPort[NetIndex].RxNoBufCts;
+ }
+ else {
+ Val64 = pAC->Pnmi.Port[NetIndex].RxNoBufCts;
+ }
+
+ /*
+ * by default 32bit values are evaluated
+ */
+ if (!Is64BitReq) {
+ Val32 = (SK_U32)Val64;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ }
+ else {
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ }
+ break;
+
+ case OID_GEN_TRANSMIT_QUEUE_LENGTH:
+ Val32 = (SK_U32)pAC->Pnmi.Port[NetIndex].TxSwQueueLen;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR034,
+ SK_PNMI_ERR034MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ if (Id == OID_SKGE_RX_HW_ERROR_CTS ||
+ Id == OID_SKGE_TX_HW_ERROR_CTS ||
+ Id == OID_SKGE_IN_ERRORS_CTS ||
+ Id == OID_SKGE_OUT_ERROR_CTS ||
+ Id == OID_GEN_XMIT_ERROR ||
+ Id == OID_GEN_RCV_ERROR) {
+
+ pAC->Pnmi.MacUpdatedFlag --;
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * Rlmt - OID handler function of OID_SKGE_RLMT_XXX single instance.
+ *
+ * Description:
+ * Get/Presets/Sets the RLMT OIDs.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int Rlmt(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ int Ret;
+ unsigned int PhysPortIndex;
+ unsigned int PhysPortMax;
+ SK_EVPARA EventParam;
+ SK_U32 Val32;
+ SK_U64 Val64;
+
+
+ /*
+ * Check instance. Only single instance OIDs are allowed here.
+ */
+ if (Instance != (SK_U32)(-1) && Instance != 1) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ /*
+ * Perform the requested action
+ */
+ if (Action == SK_PNMI_GET) {
+
+ /*
+ * Check if the buffer length is large enough.
+ */
+
+ switch (Id) {
+
+ case OID_SKGE_RLMT_MODE:
+ case OID_SKGE_RLMT_PORT_ACTIVE:
+ case OID_SKGE_RLMT_PORT_PREFERRED:
+ if (*pLen < sizeof(SK_U8)) {
+
+ *pLen = sizeof(SK_U8);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_RLMT_PORT_NUMBER:
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_RLMT_CHANGE_CTS:
+ case OID_SKGE_RLMT_CHANGE_TIME:
+ case OID_SKGE_RLMT_CHANGE_ESTIM:
+ case OID_SKGE_RLMT_CHANGE_THRES:
+ if (*pLen < sizeof(SK_U64)) {
+
+ *pLen = sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR035,
+ SK_PNMI_ERR035MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Update RLMT statistic and increment semaphores to indicate
+ * that an update was already done. Maybe RLMT will hold its
+ * statistic always up to date some time. Then we can
+ * remove this type of call.
+ */
+ if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
+
+ *pLen = 0;
+ return (Ret);
+ }
+ pAC->Pnmi.RlmtUpdatedFlag ++;
+
+ /*
+ * Retrieve Value
+ */
+ switch (Id) {
+
+ case OID_SKGE_RLMT_MODE:
+ *pBuf = (char)pAC->Rlmt.Net[0].RlmtMode;
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_RLMT_PORT_NUMBER:
+ Val32 = (SK_U32)pAC->GIni.GIMacsFound;
+ SK_PNMI_STORE_U32(pBuf, Val32);
+ *pLen = sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_RLMT_PORT_ACTIVE:
+ *pBuf = 0;
+ /*
+ * If multiple ports may become active this OID
+ * doesn't make sense any more. A new variable in
+ * the port structure should be created. However,
+ * for this variable the first active port is
+ * returned.
+ */
+ PhysPortMax = pAC->GIni.GIMacsFound;
+
+ for (PhysPortIndex = 0; PhysPortIndex < PhysPortMax;
+ PhysPortIndex ++) {
+
+ if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
+
+ *pBuf = (char)SK_PNMI_PORT_PHYS2LOG(PhysPortIndex);
+ break;
+ }
+ }
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_RLMT_PORT_PREFERRED:
+ *pBuf = (char)SK_PNMI_PORT_PHYS2LOG(pAC->Rlmt.Net[NetIndex].Preference);
+ *pLen = sizeof(char);
+ break;
+
+ case OID_SKGE_RLMT_CHANGE_CTS:
+ Val64 = pAC->Pnmi.RlmtChangeCts;
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RLMT_CHANGE_TIME:
+ Val64 = pAC->Pnmi.RlmtChangeTime;
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RLMT_CHANGE_ESTIM:
+ Val64 = pAC->Pnmi.RlmtChangeEstimate.Estimate;
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RLMT_CHANGE_THRES:
+ Val64 = pAC->Pnmi.RlmtChangeThreshold;
+ SK_PNMI_STORE_U64(pBuf, Val64);
+ *pLen = sizeof(SK_U64);
+ break;
+
+ default:
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
+ ("Rlmt: Unknown OID should be handled before"));
+
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ }
+ else {
+ /* Perform a preset or set */
+ switch (Id) {
+
+ case OID_SKGE_RLMT_MODE:
+ /* Check if the buffer length is plausible */
+ if (*pLen < sizeof(char)) {
+
+ *pLen = sizeof(char);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ /* Check if the value range is correct */
+ if (*pLen != sizeof(char) ||
+ (*pBuf & SK_PNMI_RLMT_MODE_CHK_LINK) == 0 ||
+ *(SK_U8 *)pBuf > 15) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ /* The preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_OK);
+ }
+ /* Send an event to RLMT to change the mode */
+ SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
+ EventParam.Para32[0] |= (SK_U32)(*pBuf);
+ EventParam.Para32[1] = 0;
+ if (SkRlmtEvent(pAC, IoC, SK_RLMT_MODE_CHANGE,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR037,
+ SK_PNMI_ERR037MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ break;
+
+ case OID_SKGE_RLMT_PORT_PREFERRED:
+ /* Check if the buffer length is plausible */
+ if (*pLen < sizeof(char)) {
+
+ *pLen = sizeof(char);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ /* Check if the value range is correct */
+ if (*pLen != sizeof(char) || *(SK_U8 *)pBuf >
+ (SK_U8)pAC->GIni.GIMacsFound) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ /* The preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /*
+ * Send an event to RLMT change the preferred port.
+ * A param of -1 means automatic mode. RLMT will
+ * make the decision which is the preferred port.
+ */
+ SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
+ EventParam.Para32[0] = (SK_U32)(*pBuf) - 1;
+ EventParam.Para32[1] = NetIndex;
+ if (SkRlmtEvent(pAC, IoC, SK_RLMT_PREFPORT_CHANGE,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR038,
+ SK_PNMI_ERR038MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ break;
+
+ case OID_SKGE_RLMT_CHANGE_THRES:
+ /* Check if the buffer length is plausible */
+ if (*pLen < sizeof(SK_U64)) {
+
+ *pLen = sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ /*
+ * There are not many restrictions to the
+ * value range.
+ */
+ if (*pLen != sizeof(SK_U64)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ /* A preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_OK);
+ }
+ /*
+ * Store the new threshold, which will be taken
+ * on the next timer event.
+ */
+ SK_PNMI_READ_U64(pBuf, Val64);
+ pAC->Pnmi.RlmtChangeThreshold = Val64;
+ break;
+
+ default:
+ /* The other OIDs are not be able for set */
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * RlmtStat - OID handler function of OID_SKGE_RLMT_XXX multiple instance.
+ *
+ * Description:
+ * Performs get requests on multiple instance variables.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int RlmtStat(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int PhysPortMax;
+ unsigned int PhysPortIndex;
+ unsigned int Limit;
+ unsigned int Offset;
+ int Ret;
+ SK_U32 Val32;
+ SK_U64 Val64;
+
+ /*
+ * Calculate the port indexes from the instance
+ */
+ PhysPortMax = pAC->GIni.GIMacsFound;
+
+ if ((Instance != (SK_U32)(-1))) {
+ /* Check instance range */
+ if ((Instance < 1) || (Instance > PhysPortMax)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ /* Single net mode */
+ PhysPortIndex = Instance - 1;
+
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ PhysPortIndex = NetIndex;
+ }
+
+ /* Both net modes */
+ Limit = PhysPortIndex + 1;
+ }
+ else {
+ /* Single net mode */
+ PhysPortIndex = 0;
+ Limit = PhysPortMax;
+
+ /* Dual net mode */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ PhysPortIndex = NetIndex;
+ Limit = PhysPortIndex + 1;
+ }
+ }
+
+ /*
+ * Currently only get requests are allowed.
+ */
+ if (Action != SK_PNMI_GET) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Check if the buffer length is large enough.
+ */
+ switch (Id) {
+
+ case OID_SKGE_RLMT_PORT_INDEX:
+ case OID_SKGE_RLMT_STATUS:
+ if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U32)) {
+
+ *pLen = (Limit - PhysPortIndex) * sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_RLMT_TX_HELLO_CTS:
+ case OID_SKGE_RLMT_RX_HELLO_CTS:
+ case OID_SKGE_RLMT_TX_SP_REQ_CTS:
+ case OID_SKGE_RLMT_RX_SP_CTS:
+ if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U64)) {
+
+ *pLen = (Limit - PhysPortIndex) * sizeof(SK_U64);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR039,
+ SK_PNMI_ERR039MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+
+ }
+
+ /*
+ * Update statistic and increment semaphores to indicate that
+ * an update was already done.
+ */
+ if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {
+
+ *pLen = 0;
+ return (Ret);
+ }
+ pAC->Pnmi.RlmtUpdatedFlag ++;
+
+ /*
+ * Get value
+ */
+ Offset = 0;
+ for (; PhysPortIndex < Limit; PhysPortIndex ++) {
+
+ switch (Id) {
+
+ case OID_SKGE_RLMT_PORT_INDEX:
+ Val32 = PhysPortIndex;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_RLMT_STATUS:
+ if (pAC->Rlmt.Port[PhysPortIndex].PortState ==
+ SK_RLMT_PS_INIT ||
+ pAC->Rlmt.Port[PhysPortIndex].PortState ==
+ SK_RLMT_PS_DOWN) {
+
+ Val32 = SK_PNMI_RLMT_STATUS_ERROR;
+ }
+ else if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
+
+ Val32 = SK_PNMI_RLMT_STATUS_ACTIVE;
+ }
+ else {
+ Val32 = SK_PNMI_RLMT_STATUS_STANDBY;
+ }
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ case OID_SKGE_RLMT_TX_HELLO_CTS:
+ Val64 = pAC->Rlmt.Port[PhysPortIndex].TxHelloCts;
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RLMT_RX_HELLO_CTS:
+ Val64 = pAC->Rlmt.Port[PhysPortIndex].RxHelloCts;
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RLMT_TX_SP_REQ_CTS:
+ Val64 = pAC->Rlmt.Port[PhysPortIndex].TxSpHelloReqCts;
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ case OID_SKGE_RLMT_RX_SP_CTS:
+ Val64 = pAC->Rlmt.Port[PhysPortIndex].RxSpHelloCts;
+ SK_PNMI_STORE_U64(pBuf + Offset, Val64);
+ Offset += sizeof(SK_U64);
+ break;
+
+ default:
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
+ ("RlmtStat: Unknown OID should be errored before"));
+
+ pAC->Pnmi.RlmtUpdatedFlag --;
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ *pLen = Offset;
+
+ pAC->Pnmi.RlmtUpdatedFlag --;
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * MacPrivateConf - OID handler function of OIDs concerning the configuration
+ *
+ * Description:
+ * Get/Presets/Sets the OIDs concerning the configuration.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int MacPrivateConf(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int PhysPortMax;
+ unsigned int PhysPortIndex;
+ unsigned int LogPortMax;
+ unsigned int LogPortIndex;
+ unsigned int Limit;
+ unsigned int Offset;
+ char Val8;
+ int Ret;
+ SK_EVPARA EventParam;
+ SK_U32 Val32;
+
+
+ /*
+ * Calculate instance if wished. MAC index 0 is the virtual
+ * MAC.
+ */
+ PhysPortMax = pAC->GIni.GIMacsFound;
+ LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
+
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
+ LogPortMax--;
+ }
+
+ if ((Instance != (SK_U32)(-1))) { /* Only one specific instance is queried */
+ /* Check instance range */
+ if ((Instance < 1) || (Instance > LogPortMax)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+ LogPortIndex = SK_PNMI_PORT_INST2LOG(Instance);
+ Limit = LogPortIndex + 1;
+ }
+
+ else { /* Instance == (SK_U32)(-1), get all Instances of that OID */
+
+ LogPortIndex = 0;
+ Limit = LogPortMax;
+ }
+
+ /*
+ * Perform action
+ */
+ if (Action == SK_PNMI_GET) {
+
+ /*
+ * Check length
+ */
+ switch (Id) {
+
+ case OID_SKGE_PMD:
+ case OID_SKGE_CONNECTOR:
+ case OID_SKGE_LINK_CAP:
+ case OID_SKGE_LINK_MODE:
+ case OID_SKGE_LINK_MODE_STATUS:
+ case OID_SKGE_LINK_STATUS:
+ case OID_SKGE_FLOWCTRL_CAP:
+ case OID_SKGE_FLOWCTRL_MODE:
+ case OID_SKGE_FLOWCTRL_STATUS:
+ case OID_SKGE_PHY_OPERATION_CAP:
+ case OID_SKGE_PHY_OPERATION_MODE:
+ case OID_SKGE_PHY_OPERATION_STATUS:
+ case OID_SKGE_SPEED_CAP:
+ case OID_SKGE_SPEED_MODE:
+ case OID_SKGE_SPEED_STATUS:
+ if (*pLen < (Limit - LogPortIndex) * sizeof(SK_U8)) {
+
+ *pLen = (Limit - LogPortIndex) *
+ sizeof(SK_U8);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_MTU:
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR041,
+ SK_PNMI_ERR041MSG);
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Update statistic and increment semaphore to indicate
+ * that an update was already done.
+ */
+ if ((Ret = SirqUpdate(pAC, IoC)) != SK_PNMI_ERR_OK) {
+
+ *pLen = 0;
+ return (Ret);
+ }
+ pAC->Pnmi.SirqUpdatedFlag ++;
+
+ /*
+ * Get value
+ */
+ Offset = 0;
+ for (; LogPortIndex < Limit; LogPortIndex ++) {
+
+ switch (Id) {
+
+ case OID_SKGE_PMD:
+ *(pBuf + Offset) = pAC->Pnmi.PMD;
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_CONNECTOR:
+ *(pBuf + Offset) = pAC->Pnmi.Connector;
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_LINK_CAP:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical ports */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PLinkCap;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkCap;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_LINK_MODE:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical ports */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PLinkModeConf;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkModeConf;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_LINK_MODE_STATUS:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) =
+ CalculateLinkModeStatus(pAC,
+ IoC, PhysPortIndex);
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+ *(pBuf + Offset) = CalculateLinkModeStatus(pAC, IoC, NetIndex);
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_LINK_STATUS:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical ports */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) =
+ CalculateLinkStatus(pAC,
+ IoC, PhysPortIndex);
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = CalculateLinkStatus(pAC, IoC, NetIndex);
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_FLOWCTRL_CAP:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical ports */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PFlowCtrlCap;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PFlowCtrlCap;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_FLOWCTRL_MODE:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PFlowCtrlMode;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PFlowCtrlMode;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_FLOWCTRL_STATUS:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PFlowCtrlStatus;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PFlowCtrlStatus;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_PHY_OPERATION_CAP:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical ports */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PMSCap;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PMSCap;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_PHY_OPERATION_MODE:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf + Offset);
+ }
+ else {
+ /* Get value for physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PMSMode;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PMSMode;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_PHY_OPERATION_STATUS:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf + Offset);
+ }
+ else {
+ /* Get value for physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PMSStatus;
+ }
+ Offset += sizeof(char);
+ }
+ else {
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PMSStatus;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_SPEED_CAP:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf +
+ Offset);
+ }
+ else {
+ /* Get value for physical ports */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PLinkSpeedCap;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkSpeedCap;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_SPEED_MODE:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf + Offset);
+ }
+ else {
+ /* Get value for physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PLinkSpeed;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkSpeed;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_SPEED_STATUS:
+ if (!pAC->Pnmi.DualNetActiveFlag) { /* SingleNetMode */
+ if (LogPortIndex == 0) {
+
+ /* Get value for virtual port */
+ VirtualConf(pAC, IoC, Id, pBuf + Offset);
+ }
+ else {
+ /* Get value for physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+
+ *(pBuf + Offset) = pAC->GIni.GP[
+ PhysPortIndex].PLinkSpeedUsed;
+ }
+ Offset += sizeof(char);
+ }
+ else { /* DualNetMode */
+
+ *(pBuf + Offset) = pAC->GIni.GP[NetIndex].PLinkSpeedUsed;
+ Offset += sizeof(char);
+ }
+ break;
+
+ case OID_SKGE_MTU:
+ Val32 = SK_DRIVER_GET_MTU(pAC, IoC, NetIndex);
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ Offset += sizeof(SK_U32);
+ break;
+
+ default:
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
+ ("MacPrivateConf: Unknown OID should be handled before"));
+
+ pAC->Pnmi.SirqUpdatedFlag --;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ *pLen = Offset;
+ pAC->Pnmi.SirqUpdatedFlag --;
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /*
+ * From here SET or PRESET action. Check if the passed
+ * buffer length is plausible.
+ */
+ switch (Id) {
+
+ case OID_SKGE_LINK_MODE:
+ case OID_SKGE_FLOWCTRL_MODE:
+ case OID_SKGE_PHY_OPERATION_MODE:
+ case OID_SKGE_SPEED_MODE:
+ if (*pLen < Limit - LogPortIndex) {
+
+ *pLen = Limit - LogPortIndex;
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ if (*pLen != Limit - LogPortIndex) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ break;
+
+ case OID_SKGE_MTU:
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ if (*pLen != sizeof(SK_U32)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ break;
+
+ default:
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Perform preset or set
+ */
+ Offset = 0;
+ for (; LogPortIndex < Limit; LogPortIndex ++) {
+
+ switch (Id) {
+
+ case OID_SKGE_LINK_MODE:
+ /* Check the value range */
+ Val8 = *(pBuf + Offset);
+ if (Val8 == 0) {
+
+ Offset += sizeof(char);
+ break;
+ }
+ if (Val8 < SK_LMODE_HALF ||
+ (LogPortIndex != 0 && Val8 > SK_LMODE_AUTOSENSE) ||
+ (LogPortIndex == 0 && Val8 > SK_LMODE_INDETERMINATED)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /* The preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ if (LogPortIndex == 0) {
+
+ /*
+ * The virtual port consists of all currently
+ * active ports. Find them and send an event
+ * with the new link mode to SIRQ.
+ */
+ for (PhysPortIndex = 0;
+ PhysPortIndex < PhysPortMax;
+ PhysPortIndex ++) {
+
+ if (!pAC->Pnmi.Port[PhysPortIndex].
+ ActiveFlag) {
+
+ continue;
+ }
+
+ EventParam.Para32[0] = PhysPortIndex;
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC,
+ SK_HWEV_SET_LMODE,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR043,
+ SK_PNMI_ERR043MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ }
+ else {
+ /*
+ * Send an event with the new link mode to
+ * the SIRQ module.
+ */
+ EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC, SK_HWEV_SET_LMODE,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR043,
+ SK_PNMI_ERR043MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_FLOWCTRL_MODE:
+ /* Check the value range */
+ Val8 = *(pBuf + Offset);
+ if (Val8 == 0) {
+
+ Offset += sizeof(char);
+ break;
+ }
+ if (Val8 < SK_FLOW_MODE_NONE ||
+ (LogPortIndex != 0 && Val8 > SK_FLOW_MODE_SYM_OR_REM) ||
+ (LogPortIndex == 0 && Val8 > SK_FLOW_MODE_INDETERMINATED)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /* The preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ if (LogPortIndex == 0) {
+
+ /*
+ * The virtual port consists of all currently
+ * active ports. Find them and send an event
+ * with the new flow control mode to SIRQ.
+ */
+ for (PhysPortIndex = 0;
+ PhysPortIndex < PhysPortMax;
+ PhysPortIndex ++) {
+
+ if (!pAC->Pnmi.Port[PhysPortIndex].
+ ActiveFlag) {
+
+ continue;
+ }
+
+ EventParam.Para32[0] = PhysPortIndex;
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC,
+ SK_HWEV_SET_FLOWMODE,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR044,
+ SK_PNMI_ERR044MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ }
+ else {
+ /*
+ * Send an event with the new flow control
+ * mode to the SIRQ module.
+ */
+ EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC,
+ SK_HWEV_SET_FLOWMODE, EventParam)
+ > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR044,
+ SK_PNMI_ERR044MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_PHY_OPERATION_MODE :
+ /* Check the value range */
+ Val8 = *(pBuf + Offset);
+ if (Val8 == 0) {
+ /* mode of this port remains unchanged */
+ Offset += sizeof(char);
+ break;
+ }
+ if (Val8 < SK_MS_MODE_AUTO ||
+ (LogPortIndex != 0 && Val8 > SK_MS_MODE_SLAVE) ||
+ (LogPortIndex == 0 && Val8 > SK_MS_MODE_INDETERMINATED)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /* The preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ if (LogPortIndex == 0) {
+
+ /*
+ * The virtual port consists of all currently
+ * active ports. Find them and send an event
+ * with new master/slave (role) mode to SIRQ.
+ */
+ for (PhysPortIndex = 0;
+ PhysPortIndex < PhysPortMax;
+ PhysPortIndex ++) {
+
+ if (!pAC->Pnmi.Port[PhysPortIndex].
+ ActiveFlag) {
+
+ continue;
+ }
+
+ EventParam.Para32[0] = PhysPortIndex;
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC,
+ SK_HWEV_SET_ROLE,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR042,
+ SK_PNMI_ERR042MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ }
+ else {
+ /*
+ * Send an event with the new master/slave
+ * (role) mode to the SIRQ module.
+ */
+ EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC,
+ SK_HWEV_SET_ROLE, EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR042,
+ SK_PNMI_ERR042MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_SPEED_MODE:
+ /* Check the value range */
+ Val8 = *(pBuf + Offset);
+ if (Val8 == 0) {
+
+ Offset += sizeof(char);
+ break;
+ }
+ if (Val8 < (SK_LSPEED_AUTO) ||
+ (LogPortIndex != 0 && Val8 > (SK_LSPEED_1000MBPS)) ||
+ (LogPortIndex == 0 && Val8 > (SK_LSPEED_INDETERMINATED))) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /* The preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ if (LogPortIndex == 0) {
+
+ /*
+ * The virtual port consists of all currently
+ * active ports. Find them and send an event
+ * with the new flow control mode to SIRQ.
+ */
+ for (PhysPortIndex = 0;
+ PhysPortIndex < PhysPortMax;
+ PhysPortIndex ++) {
+
+ if (!pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
+
+ continue;
+ }
+
+ EventParam.Para32[0] = PhysPortIndex;
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC,
+ SK_HWEV_SET_SPEED,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR045,
+ SK_PNMI_ERR045MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ }
+ else {
+ /*
+ * Send an event with the new flow control
+ * mode to the SIRQ module.
+ */
+ EventParam.Para32[0] = SK_PNMI_PORT_LOG2PHYS(
+ pAC, LogPortIndex);
+ EventParam.Para32[1] = (SK_U32)Val8;
+ if (SkGeSirqEvent(pAC, IoC,
+ SK_HWEV_SET_SPEED,
+ EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW,
+ SK_PNMI_ERR045,
+ SK_PNMI_ERR045MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ Offset += sizeof(char);
+ break;
+
+ case OID_SKGE_MTU :
+ /* Check the value range */
+ Val32 = *(SK_U32*)(pBuf + Offset);
+ if (Val32 == 0) {
+ /* mtu of this port remains unchanged */
+ Offset += sizeof(SK_U32);
+ break;
+ }
+ if (SK_DRIVER_PRESET_MTU(pAC, IoC, NetIndex, Val32) != 0) {
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ /* The preset ends here */
+ if (Action == SK_PNMI_PRESET) {
+ return (SK_PNMI_ERR_OK);
+ }
+
+ if (SK_DRIVER_SET_MTU(pAC, IoC, NetIndex, Val32) != 0) {
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ Offset += sizeof(SK_U32);
+ break;
+
+ default:
+ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_ERR,
+ ("MacPrivateConf: Unknown OID should be handled before set"));
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * Monitor - OID handler function for RLMT_MONITOR_XXX
+ *
+ * Description:
+ * Because RLMT currently does not support the monitoring of
+ * remote adapter cards, we return always an empty table.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_BAD_VALUE The passed value is not in the valid
+ * value range.
+ * SK_PNMI_ERR_READ_ONLY The OID is read-only and cannot be set.
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+PNMI_STATIC int Monitor(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int Index;
+ unsigned int Limit;
+ unsigned int Offset;
+ unsigned int Entries;
+
+
+ /*
+ * Calculate instance if wished.
+ */
+/* XXX Not yet implemented. Return always an empty table. */
+ Entries = 0;
+
+ if ((Instance != (SK_U32)(-1))) {
+
+ if ((Instance < 1) || (Instance > Entries)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ Index = (unsigned int)Instance - 1;
+ Limit = (unsigned int)Instance;
+ }
+ else {
+ Index = 0;
+ Limit = Entries;
+ }
+
+ /*
+ * Get/Set value
+ */
+ if (Action == SK_PNMI_GET) {
+
+ for (Offset=0; Index < Limit; Index ++) {
+
+ switch (Id) {
+
+ case OID_SKGE_RLMT_MONITOR_INDEX:
+ case OID_SKGE_RLMT_MONITOR_ADDR:
+ case OID_SKGE_RLMT_MONITOR_ERRS:
+ case OID_SKGE_RLMT_MONITOR_TIMESTAMP:
+ case OID_SKGE_RLMT_MONITOR_ADMIN:
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR046,
+ SK_PNMI_ERR046MSG);
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+ *pLen = Offset;
+ }
+ else {
+ /* Only MONITOR_ADMIN can be set */
+ if (Id != OID_SKGE_RLMT_MONITOR_ADMIN) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /* Check if the length is plausible */
+ if (*pLen < (Limit - Index)) {
+
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ /* Okay, we have a wide value range */
+ if (*pLen != (Limit - Index)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+/*
+ for (Offset=0; Index < Limit; Index ++) {
+ }
+*/
+/*
+ * XXX Not yet implemented. Return always BAD_VALUE, because the table
+ * is empty.
+ */
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * VirtualConf - Calculates the values of configuration OIDs for virtual port
+ *
+ * Description:
+ * We handle here the get of the configuration group OIDs, which are
+ * a little bit complicated. The virtual port consists of all currently
+ * active physical ports. If multiple ports are active and configured
+ * differently we get in some trouble to return a single value. So we
+ * get the value of the first active port and compare it with that of
+ * the other active ports. If they are not the same, we return a value
+ * that indicates that the state is indeterminated.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void VirtualConf(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf) /* Buffer to which to mgmt data will be retrieved */
+{
+ unsigned int PhysPortMax;
+ unsigned int PhysPortIndex;
+ SK_U8 Val8;
+ SK_BOOL PortActiveFlag;
+
+
+ *pBuf = 0;
+ PortActiveFlag = SK_FALSE;
+ PhysPortMax = pAC->GIni.GIMacsFound;
+
+ for (PhysPortIndex = 0; PhysPortIndex < PhysPortMax;
+ PhysPortIndex ++) {
+
+ /* Check if the physical port is active */
+ if (!pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
+
+ continue;
+ }
+
+ PortActiveFlag = SK_TRUE;
+
+ switch (Id) {
+
+ case OID_SKGE_LINK_CAP:
+
+ /*
+ * Different capabilities should not happen, but
+ * in the case of the cases OR them all together.
+ * From a curious point of view the virtual port
+ * is capable of all found capabilities.
+ */
+ *pBuf |= pAC->GIni.GP[PhysPortIndex].PLinkCap;
+ break;
+
+ case OID_SKGE_LINK_MODE:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PLinkModeConf;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different link
+ * mode than the first one we return a value that
+ * indicates that the link mode is indeterminated.
+ */
+ if (*pBuf != pAC->GIni.GP[PhysPortIndex].PLinkModeConf
+ ) {
+
+ *pBuf = SK_LMODE_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_LINK_MODE_STATUS:
+ /* Get the link mode of the physical port */
+ Val8 = CalculateLinkModeStatus(pAC, IoC, PhysPortIndex);
+
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = Val8;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different link
+ * mode status than the first one we return a value
+ * that indicates that the link mode status is
+ * indeterminated.
+ */
+ if (*pBuf != Val8) {
+
+ *pBuf = SK_LMODE_STAT_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_LINK_STATUS:
+ /* Get the link status of the physical port */
+ Val8 = CalculateLinkStatus(pAC, IoC, PhysPortIndex);
+
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = Val8;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different link
+ * status than the first one, we return a value
+ * that indicates that the link status is
+ * indeterminated.
+ */
+ if (*pBuf != Val8) {
+
+ *pBuf = SK_PNMI_RLMT_LSTAT_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_FLOWCTRL_CAP:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PFlowCtrlCap;
+ continue;
+ }
+
+ /*
+ * From a curious point of view the virtual port
+ * is capable of all found capabilities.
+ */
+ *pBuf |= pAC->GIni.GP[PhysPortIndex].PFlowCtrlCap;
+ break;
+
+ case OID_SKGE_FLOWCTRL_MODE:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PFlowCtrlMode;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different flow
+ * control mode than the first one, we return a value
+ * that indicates that the mode is indeterminated.
+ */
+ if (*pBuf != pAC->GIni.GP[PhysPortIndex].PFlowCtrlMode) {
+
+ *pBuf = SK_FLOW_MODE_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_FLOWCTRL_STATUS:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PFlowCtrlStatus;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different flow
+ * control status than the first one, we return a
+ * value that indicates that the status is
+ * indeterminated.
+ */
+ if (*pBuf != pAC->GIni.GP[PhysPortIndex].PFlowCtrlStatus) {
+
+ *pBuf = SK_FLOW_STAT_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_PHY_OPERATION_CAP:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PMSCap;
+ continue;
+ }
+
+ /*
+ * From a curious point of view the virtual port
+ * is capable of all found capabilities.
+ */
+ *pBuf |= pAC->GIni.GP[PhysPortIndex].PMSCap;
+ break;
+
+ case OID_SKGE_PHY_OPERATION_MODE:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PMSMode;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different master/
+ * slave mode than the first one, we return a value
+ * that indicates that the mode is indeterminated.
+ */
+ if (*pBuf != pAC->GIni.GP[PhysPortIndex].PMSMode) {
+
+ *pBuf = SK_MS_MODE_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_PHY_OPERATION_STATUS:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PMSStatus;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different master/
+ * slave status than the first one, we return a
+ * value that indicates that the status is
+ * indeterminated.
+ */
+ if (*pBuf != pAC->GIni.GP[PhysPortIndex].PMSStatus) {
+
+ *pBuf = SK_MS_STAT_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_SPEED_MODE:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PLinkSpeed;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different flow
+ * control mode than the first one, we return a value
+ * that indicates that the mode is indeterminated.
+ */
+ if (*pBuf != pAC->GIni.GP[PhysPortIndex].PLinkSpeed) {
+
+ *pBuf = SK_LSPEED_INDETERMINATED;
+ }
+ break;
+
+ case OID_SKGE_SPEED_STATUS:
+ /* Check if it is the first active port */
+ if (*pBuf == 0) {
+
+ *pBuf = pAC->GIni.GP[PhysPortIndex].PLinkSpeedUsed;
+ continue;
+ }
+
+ /*
+ * If we find an active port with a different flow
+ * control status than the first one, we return a
+ * value that indicates that the status is
+ * indeterminated.
+ */
+ if (*pBuf != pAC->GIni.GP[PhysPortIndex].PLinkSpeedUsed) {
+
+ *pBuf = SK_LSPEED_STAT_INDETERMINATED;
+ }
+ break;
+ }
+ }
+
+ /*
+ * If no port is active return an indeterminated answer
+ */
+ if (!PortActiveFlag) {
+
+ switch (Id) {
+
+ case OID_SKGE_LINK_CAP:
+ *pBuf = SK_LMODE_CAP_INDETERMINATED;
+ break;
+
+ case OID_SKGE_LINK_MODE:
+ *pBuf = SK_LMODE_INDETERMINATED;
+ break;
+
+ case OID_SKGE_LINK_MODE_STATUS:
+ *pBuf = SK_LMODE_STAT_INDETERMINATED;
+ break;
+
+ case OID_SKGE_LINK_STATUS:
+ *pBuf = SK_PNMI_RLMT_LSTAT_INDETERMINATED;
+ break;
+
+ case OID_SKGE_FLOWCTRL_CAP:
+ case OID_SKGE_FLOWCTRL_MODE:
+ *pBuf = SK_FLOW_MODE_INDETERMINATED;
+ break;
+
+ case OID_SKGE_FLOWCTRL_STATUS:
+ *pBuf = SK_FLOW_STAT_INDETERMINATED;
+ break;
+
+ case OID_SKGE_PHY_OPERATION_CAP:
+ *pBuf = SK_MS_CAP_INDETERMINATED;
+ break;
+
+ case OID_SKGE_PHY_OPERATION_MODE:
+ *pBuf = SK_MS_MODE_INDETERMINATED;
+ break;
+
+ case OID_SKGE_PHY_OPERATION_STATUS:
+ *pBuf = SK_MS_STAT_INDETERMINATED;
+ break;
+ case OID_SKGE_SPEED_CAP:
+ *pBuf = SK_LSPEED_CAP_INDETERMINATED;
+ break;
+
+ case OID_SKGE_SPEED_MODE:
+ *pBuf = SK_LSPEED_INDETERMINATED;
+ break;
+
+ case OID_SKGE_SPEED_STATUS:
+ *pBuf = SK_LSPEED_STAT_INDETERMINATED;
+ break;
+ }
+ }
+}
+
+/*****************************************************************************
+ *
+ * CalculateLinkStatus - Determins the link status of a physical port
+ *
+ * Description:
+ * Determins the link status the following way:
+ * LSTAT_PHY_DOWN: Link is down
+ * LSTAT_AUTONEG: Auto-negotiation failed
+ * LSTAT_LOG_DOWN: Link is up but RLMT did not yet put the port
+ * logically up.
+ * LSTAT_LOG_UP: RLMT marked the port as up
+ *
+ * Returns:
+ * Link status of physical port
+ */
+PNMI_STATIC SK_U8 CalculateLinkStatus(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+unsigned int PhysPortIndex) /* Physical port index */
+{
+ SK_U8 Result;
+
+
+ if (!pAC->GIni.GP[PhysPortIndex].PHWLinkUp) {
+
+ Result = SK_PNMI_RLMT_LSTAT_PHY_DOWN;
+ }
+ else if (pAC->GIni.GP[PhysPortIndex].PAutoNegFail > 0) {
+
+ Result = SK_PNMI_RLMT_LSTAT_AUTONEG;
+ }
+ else if (!pAC->Rlmt.Port[PhysPortIndex].PortDown) {
+
+ Result = SK_PNMI_RLMT_LSTAT_LOG_UP;
+ }
+ else {
+ Result = SK_PNMI_RLMT_LSTAT_LOG_DOWN;
+ }
+
+ return (Result);
+}
+
+/*****************************************************************************
+ *
+ * CalculateLinkModeStatus - Determins the link mode status of a phys. port
+ *
+ * Description:
+ * The COMMON module only tells us if the mode is half or full duplex.
+ * But in the decade of auto sensing it is usefull for the user to
+ * know if the mode was negotiated or forced. Therefore we have a
+ * look to the mode, which was last used by the negotiation process.
+ *
+ * Returns:
+ * The link mode status
+ */
+PNMI_STATIC SK_U8 CalculateLinkModeStatus(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+unsigned int PhysPortIndex) /* Physical port index */
+{
+ SK_U8 Result;
+
+
+ /* Get the current mode, which can be full or half duplex */
+ Result = pAC->GIni.GP[PhysPortIndex].PLinkModeStatus;
+
+ /* Check if no valid mode could be found (link is down) */
+ if (Result < SK_LMODE_STAT_HALF) {
+
+ Result = SK_LMODE_STAT_UNKNOWN;
+ }
+ else if (pAC->GIni.GP[PhysPortIndex].PLinkMode >= SK_LMODE_AUTOHALF) {
+
+ /*
+ * Auto-negotiation was used to bring up the link. Change
+ * the already found duplex status that it indicates
+ * auto-negotiation was involved.
+ */
+ if (Result == SK_LMODE_STAT_HALF) {
+
+ Result = SK_LMODE_STAT_AUTOHALF;
+ }
+ else if (Result == SK_LMODE_STAT_FULL) {
+
+ Result = SK_LMODE_STAT_AUTOFULL;
+ }
+ }
+
+ return (Result);
+}
+
+/*****************************************************************************
+ *
+ * GetVpdKeyArr - Obtain an array of VPD keys
+ *
+ * Description:
+ * Read the VPD keys and build an array of VPD keys, which are
+ * easy to access.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK Task successfully performed.
+ * SK_PNMI_ERR_GENERAL Something went wrong.
+ */
+PNMI_STATIC int GetVpdKeyArr(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+char *pKeyArr, /* Ptr KeyArray */
+unsigned int KeyArrLen, /* Length of array in bytes */
+unsigned int *pKeyNo) /* Number of keys */
+{
+ unsigned int BufKeysLen = SK_PNMI_VPD_BUFSIZE;
+ char BufKeys[SK_PNMI_VPD_BUFSIZE];
+ unsigned int StartOffset;
+ unsigned int Offset;
+ int Index;
+ int Ret;
+
+
+ SK_MEMSET(pKeyArr, 0, KeyArrLen);
+
+ /*
+ * Get VPD key list
+ */
+ Ret = VpdKeys(pAC, IoC, (char *)&BufKeys, (int *)&BufKeysLen,
+ (int *)pKeyNo);
+ if (Ret > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR014,
+ SK_PNMI_ERR014MSG);
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ /* If no keys are available return now */
+ if (*pKeyNo == 0 || BufKeysLen == 0) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+ /*
+ * If the key list is too long for us trunc it and give a
+ * errorlog notification. This case should not happen because
+ * the maximum number of keys is limited due to RAM limitations
+ */
+ if (*pKeyNo > SK_PNMI_VPD_ENTRIES) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR015,
+ SK_PNMI_ERR015MSG);
+
+ *pKeyNo = SK_PNMI_VPD_ENTRIES;
+ }
+
+ /*
+ * Now build an array of fixed string length size and copy
+ * the keys together.
+ */
+ for (Index = 0, StartOffset = 0, Offset = 0; Offset < BufKeysLen;
+ Offset ++) {
+
+ if (BufKeys[Offset] != 0) {
+
+ continue;
+ }
+
+ if (Offset - StartOffset > SK_PNMI_VPD_KEY_SIZE) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR016,
+ SK_PNMI_ERR016MSG);
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ SK_STRNCPY(pKeyArr + Index * SK_PNMI_VPD_KEY_SIZE,
+ &BufKeys[StartOffset], SK_PNMI_VPD_KEY_SIZE);
+
+ Index ++;
+ StartOffset = Offset + 1;
+ }
+
+ /* Last key not zero terminated? Get it anyway */
+ if (StartOffset < Offset) {
+
+ SK_STRNCPY(pKeyArr + Index * SK_PNMI_VPD_KEY_SIZE,
+ &BufKeys[StartOffset], SK_PNMI_VPD_KEY_SIZE);
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * SirqUpdate - Let the SIRQ update its internal values
+ *
+ * Description:
+ * Just to be sure that the SIRQ module holds its internal data
+ * structures up to date, we send an update event before we make
+ * any access.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK Task successfully performed.
+ * SK_PNMI_ERR_GENERAL Something went wrong.
+ */
+PNMI_STATIC int SirqUpdate(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC) /* IO context handle */
+{
+ SK_EVPARA EventParam;
+
+
+ /* Was the module already updated during the current PNMI call? */
+ if (pAC->Pnmi.SirqUpdatedFlag > 0) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /* Send an synchronuous update event to the module */
+ SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
+ if (SkGeSirqEvent(pAC, IoC, SK_HWEV_UPDATE_STAT, EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR047,
+ SK_PNMI_ERR047MSG);
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * RlmtUpdate - Let the RLMT update its internal values
+ *
+ * Description:
+ * Just to be sure that the RLMT module holds its internal data
+ * structures up to date, we send an update event before we make
+ * any access.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK Task successfully performed.
+ * SK_PNMI_ERR_GENERAL Something went wrong.
+ */
+PNMI_STATIC int RlmtUpdate(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ SK_EVPARA EventParam;
+
+
+ /* Was the module already updated during the current PNMI call? */
+ if (pAC->Pnmi.RlmtUpdatedFlag > 0) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /* Send an synchronuous update event to the module */
+ SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
+ EventParam.Para32[0] = NetIndex;
+ EventParam.Para32[1] = (SK_U32)-1;
+ if (SkRlmtEvent(pAC, IoC, SK_RLMT_STATS_UPDATE, EventParam) > 0) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR048,
+ SK_PNMI_ERR048MSG);
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * MacUpdate - Force the XMAC to output the current statistic
+ *
+ * Description:
+ * The XMAC holds its statistic internally. To obtain the current
+ * values we send a command so that the statistic data will
+ * be written to apredefined memory area on the adapter.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK Task successfully performed.
+ * SK_PNMI_ERR_GENERAL Something went wrong.
+ */
+PNMI_STATIC int MacUpdate(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+unsigned int FirstMac, /* Index of the first Mac to be updated */
+unsigned int LastMac) /* Index of the last Mac to be updated */
+{
+ unsigned int MacIndex;
+
+ /*
+ * Were the statistics already updated during the
+ * current PNMI call?
+ */
+ if (pAC->Pnmi.MacUpdatedFlag > 0) {
+
+ return (SK_PNMI_ERR_OK);
+ }
+
+ /* Send an update command to all MACs specified */
+ for (MacIndex = FirstMac; MacIndex <= LastMac; MacIndex ++) {
+
+ /*
+ * 2002-09-13 pweber: Freeze the current sw counters.
+ * (That should be done as close as
+ * possible to the update of the
+ * hw counters)
+ */
+ if (pAC->GIni.GIMacType == SK_MAC_XMAC) {
+ pAC->Pnmi.BufPort[MacIndex] = pAC->Pnmi.Port[MacIndex];
+ }
+
+ /* 2002-09-13 pweber: Update the hw counter */
+ if (pAC->GIni.GIFunc.pFnMacUpdateStats(pAC, IoC, MacIndex) != 0) {
+
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ }
+
+ return (SK_PNMI_ERR_OK);
+}
+
+/*****************************************************************************
+ *
+ * GetStatVal - Retrieve an XMAC statistic counter
+ *
+ * Description:
+ * Retrieves the statistic counter of a virtual or physical port. The
+ * virtual port is identified by the index 0. It consists of all
+ * currently active ports. To obtain the counter value for this port
+ * we must add the statistic counter of all active ports. To grant
+ * continuous counter values for the virtual port even when port
+ * switches occur we must additionally add a delta value, which was
+ * calculated during a SK_PNMI_EVT_RLMT_ACTIVE_UP event.
+ *
+ * Returns:
+ * Requested statistic value
+ */
+PNMI_STATIC SK_U64 GetStatVal(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+unsigned int LogPortIndex, /* Index of the logical Port to be processed */
+unsigned int StatIndex, /* Index to statistic value */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+ unsigned int PhysPortIndex;
+ unsigned int PhysPortMax;
+ SK_U64 Val = 0;
+
+
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) { /* Dual net mode */
+
+ PhysPortIndex = NetIndex;
+ Val = GetPhysStatVal(pAC, IoC, PhysPortIndex, StatIndex);
+ }
+ else { /* Single Net mode */
+
+ if (LogPortIndex == 0) {
+
+ PhysPortMax = pAC->GIni.GIMacsFound;
+
+ /* Add counter of all active ports */
+ for (PhysPortIndex = 0; PhysPortIndex < PhysPortMax;
+ PhysPortIndex ++) {
+
+ if (pAC->Pnmi.Port[PhysPortIndex].ActiveFlag) {
+
+ Val += GetPhysStatVal(pAC, IoC, PhysPortIndex,
+ StatIndex);
+ }
+ }
+
+ /* Correct value because of port switches */
+ Val += pAC->Pnmi.VirtualCounterOffset[StatIndex];
+ }
+ else {
+ /* Get counter value of physical port */
+ PhysPortIndex = SK_PNMI_PORT_LOG2PHYS(pAC, LogPortIndex);
+ Val = GetPhysStatVal(pAC, IoC, PhysPortIndex, StatIndex);
+ }
+ }
+ return (Val);
+}
+
+/*****************************************************************************
+ *
+ * GetPhysStatVal - Get counter value for physical port
+ *
+ * Description:
+ * Builds a 64bit counter value. Except for the octet counters
+ * the lower 32bit are counted in hardware and the upper 32bit
+ * in software by monitoring counter overflow interrupts in the
+ * event handler. To grant continous counter values during XMAC
+ * resets (caused by a workaround) we must add a delta value.
+ * The delta was calculated in the event handler when a
+ * SK_PNMI_EVT_XMAC_RESET was received.
+ *
+ * Returns:
+ * Counter value
+ */
+PNMI_STATIC SK_U64 GetPhysStatVal(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+unsigned int PhysPortIndex, /* Index of the logical Port to be processed */
+unsigned int StatIndex) /* Index to statistic value */
+{
+ SK_U64 Val = 0;
+ SK_U32 LowVal = 0;
+ SK_U32 HighVal = 0;
+ SK_U16 Word;
+ int MacType;
+
+ SK_PNMI_PORT *pPnmiPrt;
+ SK_GEMACFUNC *pFnMac;
+
+ MacType = pAC->GIni.GIMacType;
+
+ /* 2002-09-17 pweber: For XMAC, use the frozen sw counters (BufPort) */
+ if (pAC->GIni.GIMacType == SK_MAC_XMAC) {
+ pPnmiPrt = &pAC->Pnmi.BufPort[PhysPortIndex];
+ }
+ else {
+ pPnmiPrt = &pAC->Pnmi.Port[PhysPortIndex];
+ }
+
+ pFnMac = &pAC->GIni.GIFunc;
+
+ switch (StatIndex) {
+ case SK_PNMI_HTX:
+ case SK_PNMI_HRX:
+ /* Not supported by GMAC */
+ if (MacType == SK_MAC_GMAC) {
+ return (Val);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+
+ case SK_PNMI_HTX_OCTET:
+ case SK_PNMI_HRX_OCTET:
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &HighVal);
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex + 1][MacType].Reg,
+ &LowVal);
+ break;
+
+ case SK_PNMI_HTX_BURST:
+ case SK_PNMI_HTX_EXCESS_DEF:
+ case SK_PNMI_HTX_CARRIER:
+ /* Not supported by GMAC */
+ if (MacType == SK_MAC_GMAC) {
+ return (Val);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+
+ case SK_PNMI_HTX_MACC:
+ /* GMAC only supports PAUSE MAC control frames */
+ if (MacType == SK_MAC_GMAC) {
+ Val = GetPhysStatVal(pAC, IoC, PhysPortIndex, SK_PNMI_HTX_PMACC);
+
+ return (Val);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+
+ case SK_PNMI_HTX_COL:
+ case SK_PNMI_HRX_UNDERSIZE:
+ /* Not supported by XMAC */
+ if (MacType == SK_MAC_XMAC) {
+ return (Val);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+
+
+ case SK_PNMI_HTX_DEFFERAL:
+ /* Not supported by GMAC */
+ if (MacType == SK_MAC_GMAC) {
+ return (Val);
+ }
+
+ /*
+ * XMAC counts frames with deferred transmission
+ * even in full-duplex mode.
+ *
+ * In full-duplex mode the counter remains constant!
+ */
+ if ((pAC->GIni.GP[PhysPortIndex].PLinkModeStatus == SK_LMODE_STAT_AUTOFULL) ||
+ (pAC->GIni.GP[PhysPortIndex].PLinkModeStatus == SK_LMODE_STAT_FULL)) {
+
+ LowVal = 0;
+ HighVal = 0;
+ }
+ else {
+ /* Otherwise get contents of hardware register. */
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[SK_PNMI_HTX_DEFFERAL][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ }
+ break;
+
+ case SK_PNMI_HRX_BADOCTET:
+ /* Not supported by XMAC */
+ if (MacType == SK_MAC_XMAC) {
+ return (Val);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &HighVal);
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex + 1][MacType].Reg,
+ &LowVal);
+ break;
+
+ case SK_PNMI_HTX_OCTETLOW:
+ case SK_PNMI_HRX_OCTETLOW:
+ case SK_PNMI_HRX_BADOCTETLOW:
+ return (Val);
+
+ case SK_PNMI_HRX_LONGFRAMES:
+ /* For XMAC the SW counter is managed by PNMI */
+ if (MacType == SK_MAC_XMAC) {
+ return (pPnmiPrt->StatRxLongFrameCts);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+
+ case SK_PNMI_HRX_TOO_LONG:
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+
+ Val = (((SK_U64)HighVal << 32) | (SK_U64)LowVal);
+
+ switch (MacType) {
+ case SK_MAC_GMAC:
+ /* For GMAC the SW counter is additionally managed by PNMI */
+ Val += pPnmiPrt->StatRxFrameTooLongCts;
+ break;
+
+ case SK_MAC_XMAC:
+ /*
+ * Frames longer than IEEE 802.3 frame max size are counted
+ * by XMAC in frame_too_long counter even reception of long
+ * frames was enabled and the frame was correct.
+ * So correct the value by subtracting RxLongFrame counter.
+ */
+ Val -= pPnmiPrt->StatRxLongFrameCts;
+ break;
+
+ default:
+ break;
+ }
+
+ LowVal = (SK_U32)Val;
+ HighVal = (SK_U32)(Val >> 32);
+ break;
+
+ case SK_PNMI_HRX_SHORTS:
+ /* Not supported by GMAC */
+ if (MacType == SK_MAC_GMAC) {
+ /* GM_RXE_FRAG?? */
+ return (Val);
+ }
+
+ /*
+ * XMAC counts short frame errors even if link down (#10620)
+ *
+ * If link-down the counter remains constant
+ */
+ if (pAC->GIni.GP[PhysPortIndex].PLinkModeStatus != SK_LMODE_STAT_UNKNOWN) {
+
+ /* Otherwise get incremental difference */
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+
+ Val = (((SK_U64)HighVal << 32) | (SK_U64)LowVal);
+ Val -= pPnmiPrt->RxShortZeroMark;
+
+ LowVal = (SK_U32)Val;
+ HighVal = (SK_U32)(Val >> 32);
+ }
+ break;
+
+ case SK_PNMI_HRX_MACC:
+ case SK_PNMI_HRX_MACC_UNKWN:
+ case SK_PNMI_HRX_BURST:
+ case SK_PNMI_HRX_MISSED:
+ case SK_PNMI_HRX_FRAMING:
+ case SK_PNMI_HRX_CARRIER:
+ case SK_PNMI_HRX_IRLENGTH:
+ case SK_PNMI_HRX_SYMBOL:
+ case SK_PNMI_HRX_CEXT:
+ /* Not supported by GMAC */
+ if (MacType == SK_MAC_GMAC) {
+ /* GM_RXE_FRAG?? */
+ return (Val);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+
+ case SK_PNMI_HRX_PMACC_ERR:
+ /* For GMAC the SW counter is managed by PNMI */
+ if (MacType == SK_MAC_GMAC) {
+ return (pPnmiPrt->StatRxPMaccErr);
+ }
+
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+
+ /* SW counter managed by PNMI */
+ case SK_PNMI_HTX_SYNC:
+ LowVal = (SK_U32)pPnmiPrt->StatSyncCts;
+ HighVal = (SK_U32)(pPnmiPrt->StatSyncCts >> 32);
+ break;
+
+ /* SW counter managed by PNMI */
+ case SK_PNMI_HTX_SYNC_OCTET:
+ LowVal = (SK_U32)pPnmiPrt->StatSyncOctetsCts;
+ HighVal = (SK_U32)(pPnmiPrt->StatSyncOctetsCts >> 32);
+ break;
+
+ case SK_PNMI_HRX_FCS:
+ /*
+ * Broadcom filters fcs errors and counts it in
+ * Receive Error Counter register
+ */
+ if (pAC->GIni.GP[PhysPortIndex].PhyType == SK_PHY_BCOM) {
+ /* do not read while not initialized (PHY_READ hangs!)*/
+ if (pAC->GIni.GP[PhysPortIndex].PState) {
+ PHY_READ(IoC, &pAC->GIni.GP[PhysPortIndex],
+ PhysPortIndex, PHY_BCOM_RE_CTR,
+ &Word);
+
+ LowVal = Word;
+ }
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ }
+ else {
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ }
+ break;
+
+ default:
+ (void)pFnMac->pFnMacStatistic(pAC, IoC, PhysPortIndex,
+ StatAddr[StatIndex][MacType].Reg,
+ &LowVal);
+ HighVal = pPnmiPrt->CounterHigh[StatIndex];
+ break;
+ }
+
+ Val = (((SK_U64)HighVal << 32) | (SK_U64)LowVal);
+
+ /* Correct value because of possible XMAC reset. XMAC Errata #2 */
+ Val += pPnmiPrt->CounterOffset[StatIndex];
+
+ return (Val);
+}
+
+/*****************************************************************************
+ *
+ * ResetCounter - Set all counters and timestamps to zero
+ *
+ * Description:
+ * Notifies other common modules which store statistic data to
+ * reset their counters and finally reset our own counters.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void ResetCounter(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+SK_U32 NetIndex)
+{
+ unsigned int PhysPortIndex;
+ SK_EVPARA EventParam;
+
+
+ SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));
+
+ /* Notify sensor module */
+ SkEventQueue(pAC, SKGE_I2C, SK_I2CEV_CLEAR, EventParam);
+
+ /* Notify RLMT module */
+ EventParam.Para32[0] = NetIndex;
+ EventParam.Para32[1] = (SK_U32)-1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STATS_CLEAR, EventParam);
+ EventParam.Para32[1] = 0;
+
+ /* Notify SIRQ module */
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_CLEAR_STAT, EventParam);
+
+ /* Notify CSUM module */
+#ifdef SK_USE_CSUM
+ EventParam.Para32[0] = NetIndex;
+ EventParam.Para32[1] = (SK_U32)-1;
+ SkEventQueue(pAC, SKGE_CSUM, SK_CSUM_EVENT_CLEAR_PROTO_STATS,
+ EventParam);
+#endif
+
+ /* Clear XMAC statistic */
+ for (PhysPortIndex = 0; PhysPortIndex <
+ (unsigned int)pAC->GIni.GIMacsFound; PhysPortIndex ++) {
+
+ (void)pAC->GIni.GIFunc.pFnMacResetCounter(pAC, IoC, PhysPortIndex);
+
+ SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].CounterHigh,
+ 0, sizeof(pAC->Pnmi.Port[PhysPortIndex].CounterHigh));
+ SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
+ CounterOffset, 0, sizeof(pAC->Pnmi.Port[
+ PhysPortIndex].CounterOffset));
+ SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].StatSyncCts,
+ 0, sizeof(pAC->Pnmi.Port[PhysPortIndex].StatSyncCts));
+ SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
+ StatSyncOctetsCts, 0, sizeof(pAC->Pnmi.Port[
+ PhysPortIndex].StatSyncOctetsCts));
+ SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
+ StatRxLongFrameCts, 0, sizeof(pAC->Pnmi.Port[
+ PhysPortIndex].StatRxLongFrameCts));
+ SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
+ StatRxFrameTooLongCts, 0, sizeof(pAC->Pnmi.Port[
+ PhysPortIndex].StatRxFrameTooLongCts));
+ SK_MEMSET((char *)&pAC->Pnmi.Port[PhysPortIndex].
+ StatRxPMaccErr, 0, sizeof(pAC->Pnmi.Port[
+ PhysPortIndex].StatRxPMaccErr));
+ }
+
+ /*
+ * Clear local statistics
+ */
+ SK_MEMSET((char *)&pAC->Pnmi.VirtualCounterOffset, 0,
+ sizeof(pAC->Pnmi.VirtualCounterOffset));
+ pAC->Pnmi.RlmtChangeCts = 0;
+ pAC->Pnmi.RlmtChangeTime = 0;
+ SK_MEMSET((char *)&pAC->Pnmi.RlmtChangeEstimate.EstValue[0], 0,
+ sizeof(pAC->Pnmi.RlmtChangeEstimate.EstValue));
+ pAC->Pnmi.RlmtChangeEstimate.EstValueIndex = 0;
+ pAC->Pnmi.RlmtChangeEstimate.Estimate = 0;
+ pAC->Pnmi.Port[NetIndex].TxSwQueueMax = 0;
+ pAC->Pnmi.Port[NetIndex].TxRetryCts = 0;
+ pAC->Pnmi.Port[NetIndex].RxIntrCts = 0;
+ pAC->Pnmi.Port[NetIndex].TxIntrCts = 0;
+ pAC->Pnmi.Port[NetIndex].RxNoBufCts = 0;
+ pAC->Pnmi.Port[NetIndex].TxNoBufCts = 0;
+ pAC->Pnmi.Port[NetIndex].TxUsedDescrNo = 0;
+ pAC->Pnmi.Port[NetIndex].RxDeliveredCts = 0;
+ pAC->Pnmi.Port[NetIndex].RxOctetsDeliveredCts = 0;
+ pAC->Pnmi.Port[NetIndex].ErrRecoveryCts = 0;
+}
+
+/*****************************************************************************
+ *
+ * GetTrapEntry - Get an entry in the trap buffer
+ *
+ * Description:
+ * The trap buffer stores various events. A user application somehow
+ * gets notified that an event occured and retrieves the trap buffer
+ * contens (or simply polls the buffer). The buffer is organized as
+ * a ring which stores the newest traps at the beginning. The oldest
+ * traps are overwritten by the newest ones. Each trap entry has a
+ * unique number, so that applications may detect new trap entries.
+ *
+ * Returns:
+ * A pointer to the trap entry
+ */
+PNMI_STATIC char* GetTrapEntry(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_U32 TrapId, /* SNMP ID of the trap */
+unsigned int Size) /* Space needed for trap entry */
+{
+ unsigned int BufPad = pAC->Pnmi.TrapBufPad;
+ unsigned int BufFree = pAC->Pnmi.TrapBufFree;
+ unsigned int Beg = pAC->Pnmi.TrapQueueBeg;
+ unsigned int End = pAC->Pnmi.TrapQueueEnd;
+ char *pBuf = &pAC->Pnmi.TrapBuf[0];
+ int Wrap;
+ unsigned int NeededSpace;
+ unsigned int EntrySize;
+ SK_U32 Val32;
+ SK_U64 Val64;
+
+
+ /* Last byte of entry will get a copy of the entry length */
+ Size ++;
+
+ /*
+ * Calculate needed buffer space */
+ if (Beg >= Size) {
+
+ NeededSpace = Size;
+ Wrap = SK_FALSE;
+ }
+ else {
+ NeededSpace = Beg + Size;
+ Wrap = SK_TRUE;
+ }
+
+ /*
+ * Check if enough buffer space is provided. Otherwise
+ * free some entries. Leave one byte space between begin
+ * and end of buffer to make it possible to detect whether
+ * the buffer is full or empty
+ */
+ while (BufFree < NeededSpace + 1) {
+
+ if (End == 0) {
+
+ End = SK_PNMI_TRAP_QUEUE_LEN;
+ }
+
+ EntrySize = (unsigned int)*((unsigned char *)pBuf + End - 1);
+ BufFree += EntrySize;
+ End -= EntrySize;
+#ifdef DEBUG
+ SK_MEMSET(pBuf + End, (char)(-1), EntrySize);
+#endif
+ if (End == BufPad) {
+#ifdef DEBUG
+ SK_MEMSET(pBuf, (char)(-1), End);
+#endif
+ BufFree += End;
+ End = 0;
+ BufPad = 0;
+ }
+ }
+
+ /*
+ * Insert new entry as first entry. Newest entries are
+ * stored at the beginning of the queue.
+ */
+ if (Wrap) {
+
+ BufPad = Beg;
+ Beg = SK_PNMI_TRAP_QUEUE_LEN - Size;
+ }
+ else {
+ Beg = Beg - Size;
+ }
+ BufFree -= NeededSpace;
+
+ /* Save the current offsets */
+ pAC->Pnmi.TrapQueueBeg = Beg;
+ pAC->Pnmi.TrapQueueEnd = End;
+ pAC->Pnmi.TrapBufPad = BufPad;
+ pAC->Pnmi.TrapBufFree = BufFree;
+
+ /* Initialize the trap entry */
+ *(pBuf + Beg + Size - 1) = (char)Size;
+ *(pBuf + Beg) = (char)Size;
+ Val32 = (pAC->Pnmi.TrapUnique) ++;
+ SK_PNMI_STORE_U32(pBuf + Beg + 1, Val32);
+ SK_PNMI_STORE_U32(pBuf + Beg + 1 + sizeof(SK_U32), TrapId);
+ Val64 = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC));
+ SK_PNMI_STORE_U64(pBuf + Beg + 1 + 2 * sizeof(SK_U32), Val64);
+
+ return (pBuf + Beg);
+}
+
+/*****************************************************************************
+ *
+ * CopyTrapQueue - Copies the trap buffer for the TRAP OID
+ *
+ * Description:
+ * On a query of the TRAP OID the trap buffer contents will be
+ * copied continuously to the request buffer, which must be large
+ * enough. No length check is performed.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void CopyTrapQueue(
+SK_AC *pAC, /* Pointer to adapter context */
+char *pDstBuf) /* Buffer to which the queued traps will be copied */
+{
+ unsigned int BufPad = pAC->Pnmi.TrapBufPad;
+ unsigned int Trap = pAC->Pnmi.TrapQueueBeg;
+ unsigned int End = pAC->Pnmi.TrapQueueEnd;
+ char *pBuf = &pAC->Pnmi.TrapBuf[0];
+ unsigned int Len;
+ unsigned int DstOff = 0;
+
+
+ while (Trap != End) {
+
+ Len = (unsigned int)*(pBuf + Trap);
+
+ /*
+ * Last byte containing a copy of the length will
+ * not be copied.
+ */
+ *(pDstBuf + DstOff) = (char)(Len - 1);
+ SK_MEMCPY(pDstBuf + DstOff + 1, pBuf + Trap + 1, Len - 2);
+ DstOff += Len - 1;
+
+ Trap += Len;
+ if (Trap == SK_PNMI_TRAP_QUEUE_LEN) {
+
+ Trap = BufPad;
+ }
+ }
+}
+
+/*****************************************************************************
+ *
+ * GetTrapQueueLen - Get the length of the trap buffer
+ *
+ * Description:
+ * Evaluates the number of currently stored traps and the needed
+ * buffer size to retrieve them.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void GetTrapQueueLen(
+SK_AC *pAC, /* Pointer to adapter context */
+unsigned int *pLen, /* Length in Bytes of all queued traps */
+unsigned int *pEntries) /* Returns number of trapes stored in queue */
+{
+ unsigned int BufPad = pAC->Pnmi.TrapBufPad;
+ unsigned int Trap = pAC->Pnmi.TrapQueueBeg;
+ unsigned int End = pAC->Pnmi.TrapQueueEnd;
+ char *pBuf = &pAC->Pnmi.TrapBuf[0];
+ unsigned int Len;
+ unsigned int Entries = 0;
+ unsigned int TotalLen = 0;
+
+
+ while (Trap != End) {
+
+ Len = (unsigned int)*(pBuf + Trap);
+ TotalLen += Len - 1;
+ Entries ++;
+
+ Trap += Len;
+ if (Trap == SK_PNMI_TRAP_QUEUE_LEN) {
+
+ Trap = BufPad;
+ }
+ }
+
+ *pEntries = Entries;
+ *pLen = TotalLen;
+}
+
+/*****************************************************************************
+ *
+ * QueueSimpleTrap - Store a simple trap to the trap buffer
+ *
+ * Description:
+ * A simple trap is a trap with now additional data. It consists
+ * simply of a trap code.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void QueueSimpleTrap(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_U32 TrapId) /* Type of sensor trap */
+{
+ GetTrapEntry(pAC, TrapId, SK_PNMI_TRAP_SIMPLE_LEN);
+}
+
+/*****************************************************************************
+ *
+ * QueueSensorTrap - Stores a sensor trap in the trap buffer
+ *
+ * Description:
+ * Gets an entry in the trap buffer and fills it with sensor related
+ * data.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void QueueSensorTrap(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_U32 TrapId, /* Type of sensor trap */
+unsigned int SensorIndex) /* Index of sensor which caused the trap */
+{
+ char *pBuf;
+ unsigned int Offset;
+ unsigned int DescrLen;
+ SK_U32 Val32;
+
+
+ /* Get trap buffer entry */
+ DescrLen = SK_STRLEN(pAC->I2c.SenTable[SensorIndex].SenDesc);
+ pBuf = GetTrapEntry(pAC, TrapId,
+ SK_PNMI_TRAP_SENSOR_LEN_BASE + DescrLen);
+ Offset = SK_PNMI_TRAP_SIMPLE_LEN;
+
+ /* Store additionally sensor trap related data */
+ Val32 = OID_SKGE_SENSOR_INDEX;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ *(pBuf + Offset + 4) = 4;
+ Val32 = (SK_U32)SensorIndex;
+ SK_PNMI_STORE_U32(pBuf + Offset + 5, Val32);
+ Offset += 9;
+
+ Val32 = (SK_U32)OID_SKGE_SENSOR_DESCR;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ *(pBuf + Offset + 4) = (char)DescrLen;
+ SK_MEMCPY(pBuf + Offset + 5, pAC->I2c.SenTable[SensorIndex].SenDesc,
+ DescrLen);
+ Offset += DescrLen + 5;
+
+ Val32 = OID_SKGE_SENSOR_TYPE;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ *(pBuf + Offset + 4) = 1;
+ *(pBuf + Offset + 5) = (char)pAC->I2c.SenTable[SensorIndex].SenType;
+ Offset += 6;
+
+ Val32 = OID_SKGE_SENSOR_VALUE;
+ SK_PNMI_STORE_U32(pBuf + Offset, Val32);
+ *(pBuf + Offset + 4) = 4;
+ Val32 = (SK_U32)pAC->I2c.SenTable[SensorIndex].SenValue;
+ SK_PNMI_STORE_U32(pBuf + Offset + 5, Val32);
+}
+
+/*****************************************************************************
+ *
+ * QueueRlmtNewMacTrap - Store a port switch trap in the trap buffer
+ *
+ * Description:
+ * Nothing further to explain.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void QueueRlmtNewMacTrap(
+SK_AC *pAC, /* Pointer to adapter context */
+unsigned int ActiveMac) /* Index (0..n) of the currently active port */
+{
+ char *pBuf;
+ SK_U32 Val32;
+
+
+ pBuf = GetTrapEntry(pAC, OID_SKGE_TRAP_RLMT_CHANGE_PORT,
+ SK_PNMI_TRAP_RLMT_CHANGE_LEN);
+
+ Val32 = OID_SKGE_RLMT_PORT_ACTIVE;
+ SK_PNMI_STORE_U32(pBuf + SK_PNMI_TRAP_SIMPLE_LEN, Val32);
+ *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 4) = 1;
+ *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 5) = (char)ActiveMac;
+}
+
+/*****************************************************************************
+ *
+ * QueueRlmtPortTrap - Store port related RLMT trap to trap buffer
+ *
+ * Description:
+ * Nothing further to explain.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void QueueRlmtPortTrap(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_U32 TrapId, /* Type of RLMT port trap */
+unsigned int PortIndex) /* Index of the port, which changed its state */
+{
+ char *pBuf;
+ SK_U32 Val32;
+
+
+ pBuf = GetTrapEntry(pAC, TrapId, SK_PNMI_TRAP_RLMT_PORT_LEN);
+
+ Val32 = OID_SKGE_RLMT_PORT_INDEX;
+ SK_PNMI_STORE_U32(pBuf + SK_PNMI_TRAP_SIMPLE_LEN, Val32);
+ *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 4) = 1;
+ *(pBuf + SK_PNMI_TRAP_SIMPLE_LEN + 5) = (char)PortIndex;
+}
+
+/*****************************************************************************
+ *
+ * CopyMac - Copies a MAC address
+ *
+ * Description:
+ * Nothing further to explain.
+ *
+ * Returns:
+ * Nothing
+ */
+PNMI_STATIC void CopyMac(
+char *pDst, /* Pointer to destination buffer */
+SK_MAC_ADDR *pMac) /* Pointer of Source */
+{
+ int i;
+
+
+ for (i = 0; i < sizeof(SK_MAC_ADDR); i ++) {
+
+ *(pDst + i) = pMac->a[i];
+ }
+}
+
+
+#ifdef SK_POWER_MGMT
+/*****************************************************************************
+ *
+ * PowerManagement - OID handler function of PowerManagement OIDs
+ *
+ * Description:
+ * The code is simple. No description necessary.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was successfully performed.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter.
+ */
+
+PNMI_STATIC int PowerManagement(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which to mgmt data will be retrieved */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (1..n) that is to be queried or -1 */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode allways zero */
+{
+
+ SK_U32 RetCode = SK_PNMI_ERR_GENERAL;
+
+ /*
+ * Check instance. We only handle single instance variables
+ */
+ if (Instance != (SK_U32)(-1) && Instance != 1) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ /*
+ * Perform action
+ */
+ if (Action == SK_PNMI_GET) {
+
+ /*
+ * Check length
+ */
+ switch (Id) {
+
+ case OID_PNP_CAPABILITIES:
+ if (*pLen < sizeof(SK_PNP_CAPABILITIES)) {
+
+ *pLen = sizeof(SK_PNP_CAPABILITIES);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_PNP_QUERY_POWER:
+ case OID_PNP_ENABLE_WAKE_UP:
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_PNP_SET_POWER:
+ case OID_PNP_ADD_WAKE_UP_PATTERN:
+ case OID_PNP_REMOVE_WAKE_UP_PATTERN:
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SK_PNMI_ERR040,
+ SK_PNMI_ERR040MSG);
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Get value
+ */
+ switch (Id) {
+
+ case OID_PNP_CAPABILITIES:
+ RetCode = SkPowerQueryPnPCapabilities(pAC, IoC, pBuf, pLen);
+ break;
+
+ case OID_PNP_QUERY_POWER:
+ /* The Windows DDK describes: An OID_PNP_QUERY_POWER requests
+ the miniport to indicate whether it can transition its NIC
+ to the low-power state.
+ A miniport driver must always return NDIS_STATUS_SUCCESS
+ to a query of OID_PNP_QUERY_POWER. */
+ RetCode = SK_PNMI_ERR_OK;
+ break;
+
+ /* NDIS handles these OIDs as write-only.
+ * So in case of get action the buffer with written length = 0
+ * is returned
+ */
+ case OID_PNP_SET_POWER:
+ case OID_PNP_ADD_WAKE_UP_PATTERN:
+ case OID_PNP_REMOVE_WAKE_UP_PATTERN:
+ *pLen = 0;
+ RetCode = SK_PNMI_ERR_OK;
+ break;
+
+ case OID_PNP_ENABLE_WAKE_UP:
+ RetCode = SkPowerGetEnableWakeUp(pAC, IoC, pBuf, pLen);
+ break;
+
+ default:
+ RetCode = SK_PNMI_ERR_GENERAL;
+ break;
+ }
+
+ return (RetCode);
+ }
+
+ /*
+ * From here SET or PRESET action. Check if the passed
+ * buffer length is plausible.
+ */
+ switch (Id) {
+ case OID_PNP_SET_POWER:
+ case OID_PNP_ENABLE_WAKE_UP:
+ if (*pLen < sizeof(SK_U32)) {
+
+ *pLen = sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ if (*pLen != sizeof(SK_U32)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ break;
+
+ case OID_PNP_ADD_WAKE_UP_PATTERN:
+ case OID_PNP_REMOVE_WAKE_UP_PATTERN:
+ if (*pLen < sizeof(SK_PM_PACKET_PATTERN)) {
+
+ *pLen = 0;
+ return (SK_PNMI_ERR_BAD_VALUE);
+ }
+ break;
+
+ default:
+ *pLen = 0;
+ return (SK_PNMI_ERR_READ_ONLY);
+ }
+
+ /*
+ * Perform preset or set
+ */
+
+ /* POWER module does not support PRESET action */
+ if (Action == SK_PNMI_PRESET) {
+ return (SK_PNMI_ERR_OK);
+ }
+
+ switch (Id) {
+ case OID_PNP_SET_POWER:
+ RetCode = SkPowerSetPower(pAC, IoC, pBuf, pLen);
+ break;
+
+ case OID_PNP_ADD_WAKE_UP_PATTERN:
+ RetCode = SkPowerAddWakeUpPattern(pAC, IoC, pBuf, pLen);
+ break;
+
+ case OID_PNP_REMOVE_WAKE_UP_PATTERN:
+ RetCode = SkPowerRemoveWakeUpPattern(pAC, IoC, pBuf, pLen);
+ break;
+
+ case OID_PNP_ENABLE_WAKE_UP:
+ RetCode = SkPowerSetEnableWakeUp(pAC, IoC, pBuf, pLen);
+ break;
+
+ default:
+ RetCode = SK_PNMI_ERR_GENERAL;
+ }
+
+ return (RetCode);
+}
+#endif /* SK_POWER_MGMT */
+
+
+/*****************************************************************************
+ *
+ * Vct - OID handler function of OIDs
+ *
+ * Description:
+ * The code is simple. No description necessary.
+ *
+ * Returns:
+ * SK_PNMI_ERR_OK The request was performed successfully.
+ * SK_PNMI_ERR_GENERAL A general severe internal error occured.
+ * SK_PNMI_ERR_TOO_SHORT The passed buffer is too short to contain
+ * the correct data (e.g. a 32bit value is
+ * needed, but a 16 bit value was passed).
+ * SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't
+ * exist (e.g. port instance 3 on a two port
+ * adapter).
+ * SK_PNMI_ERR_READ_ONLY Only the Get action is allowed.
+ *
+ */
+
+PNMI_STATIC int Vct(
+SK_AC *pAC, /* Pointer to adapter context */
+SK_IOC IoC, /* IO context handle */
+int Action, /* Get/PreSet/Set action */
+SK_U32 Id, /* Object ID that is to be processed */
+char *pBuf, /* Buffer to which the mgmt data will be copied */
+unsigned int *pLen, /* On call: buffer length. On return: used buffer */
+SK_U32 Instance, /* Instance (-1,2..n) that is to be queried */
+unsigned int TableIndex, /* Index to the Id table */
+SK_U32 NetIndex) /* NetIndex (0..n), in single net mode always zero */
+{
+ SK_GEPORT *pPrt;
+ SK_PNMI_VCT *pVctBackupData;
+ SK_U32 LogPortMax;
+ SK_U32 PhysPortMax;
+ SK_U32 PhysPortIndex;
+ SK_U32 Limit;
+ SK_U32 Offset;
+ SK_BOOL Link;
+ SK_U32 RetCode = SK_PNMI_ERR_GENERAL;
+ int i;
+ SK_EVPARA Para;
+ SK_U32 CableLength;
+
+ /*
+ * Calculate the port indexes from the instance.
+ */
+ PhysPortMax = pAC->GIni.GIMacsFound;
+ LogPortMax = SK_PNMI_PORT_PHYS2LOG(PhysPortMax);
+
+ /* Dual net mode? */
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ LogPortMax--;
+ }
+
+ if ((Instance != (SK_U32) (-1))) {
+ /* Check instance range. */
+ if ((Instance < 2) || (Instance > LogPortMax)) {
+ *pLen = 0;
+ return (SK_PNMI_ERR_UNKNOWN_INST);
+ }
+
+ if (pAC->Pnmi.DualNetActiveFlag == SK_TRUE) {
+ PhysPortIndex = NetIndex;
+ }
+ else {
+ PhysPortIndex = Instance - 2;
+ }
+ Limit = PhysPortIndex + 1;
+ }
+ else { /*
+ * Instance == (SK_U32) (-1), get all Instances of that OID.
+ *
+ * Not implemented yet. May be used in future releases.
+ */
+ PhysPortIndex = 0;
+ Limit = PhysPortMax;
+ }
+
+ pPrt = &pAC->GIni.GP[PhysPortIndex];
+ if (pPrt->PHWLinkUp) {
+ Link = SK_TRUE;
+ }
+ else {
+ Link = SK_FALSE;
+ }
+
+ /*
+ * Check MAC type.
+ */
+ if (pPrt->PhyType != SK_PHY_MARV_COPPER) {
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /* Initialize backup data pointer. */
+ pVctBackupData = &pAC->Pnmi.VctBackup[PhysPortIndex];
+
+ /*
+ * Check action type.
+ */
+ if (Action == SK_PNMI_GET) {
+ /*
+ * Check length.
+ */
+ switch (Id) {
+
+ case OID_SKGE_VCT_GET:
+ if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_PNMI_VCT)) {
+ *pLen = (Limit - PhysPortIndex) * sizeof(SK_PNMI_VCT);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ case OID_SKGE_VCT_STATUS:
+ if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U8)) {
+ *pLen = (Limit - PhysPortIndex) * sizeof(SK_U8);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Get value.
+ */
+ Offset = 0;
+ for (; PhysPortIndex < Limit; PhysPortIndex++) {
+ switch (Id) {
+
+ case OID_SKGE_VCT_GET:
+ if ((Link == SK_FALSE) &&
+ (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_PENDING)) {
+ RetCode = SkGmCableDiagStatus(pAC, IoC, PhysPortIndex, SK_FALSE);
+ if (RetCode == 0) {
+ pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_PENDING;
+ pAC->Pnmi.VctStatus[PhysPortIndex] |=
+ (SK_PNMI_VCT_NEW_VCT_DATA | SK_PNMI_VCT_TEST_DONE);
+
+ /* Copy results for later use to PNMI struct. */
+ for (i = 0; i < 4; i++) {
+ if (pPrt->PMdiPairSts[i] == SK_PNMI_VCT_NORMAL_CABLE) {
+ if ((pPrt->PMdiPairLen[i] > 35) && (pPrt->PMdiPairLen[i] < 0xff)) {
+ pPrt->PMdiPairSts[i] = SK_PNMI_VCT_IMPEDANCE_MISMATCH;
+ }
+ }
+ if ((pPrt->PMdiPairLen[i] > 35) && (pPrt->PMdiPairLen[i] != 0xff)) {
+ CableLength = 1000 * (((175 * pPrt->PMdiPairLen[i]) / 210) - 28);
+ }
+ else {
+ CableLength = 0;
+ }
+ pVctBackupData->PMdiPairLen[i] = CableLength;
+ pVctBackupData->PMdiPairSts[i] = pPrt->PMdiPairSts[i];
+ }
+
+ Para.Para32[0] = PhysPortIndex;
+ Para.Para32[1] = -1;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Para);
+ SkEventDispatcher(pAC, IoC);
+ }
+ else {
+ ; /* VCT test is running. */
+ }
+ }
+
+ /* Get all results. */
+ CheckVctStatus(pAC, IoC, pBuf, Offset, PhysPortIndex);
+ Offset += sizeof(SK_U8);
+ *(pBuf + Offset) = pPrt->PCableLen;
+ Offset += sizeof(SK_U8);
+ for (i = 0; i < 4; i++) {
+ SK_PNMI_STORE_U32((pBuf + Offset), pVctBackupData->PMdiPairLen[i]);
+ Offset += sizeof(SK_U32);
+ }
+ for (i = 0; i < 4; i++) {
+ *(pBuf + Offset) = pVctBackupData->PMdiPairSts[i];
+ Offset += sizeof(SK_U8);
+ }
+
+ RetCode = SK_PNMI_ERR_OK;
+ break;
+
+ case OID_SKGE_VCT_STATUS:
+ CheckVctStatus(pAC, IoC, pBuf, Offset, PhysPortIndex);
+ Offset += sizeof(SK_U8);
+ RetCode = SK_PNMI_ERR_OK;
+ break;
+
+ default:
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ } /* for */
+ *pLen = Offset;
+ return (RetCode);
+
+ } /* if SK_PNMI_GET */
+
+ /*
+ * From here SET or PRESET action. Check if the passed
+ * buffer length is plausible.
+ */
+
+ /*
+ * Check length.
+ */
+ switch (Id) {
+ case OID_SKGE_VCT_SET:
+ if (*pLen < (Limit - PhysPortIndex) * sizeof(SK_U32)) {
+ *pLen = (Limit - PhysPortIndex) * sizeof(SK_U32);
+ return (SK_PNMI_ERR_TOO_SHORT);
+ }
+ break;
+
+ default:
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+
+ /*
+ * Perform preset or set.
+ */
+
+ /* VCT does not support PRESET action. */
+ if (Action == SK_PNMI_PRESET) {
+ return (SK_PNMI_ERR_OK);
+ }
+
+ Offset = 0;
+ for (; PhysPortIndex < Limit; PhysPortIndex++) {
+ switch (Id) {
+ case OID_SKGE_VCT_SET: /* Start VCT test. */
+ if (Link == SK_FALSE) {
+ SkGeStopPort(pAC, IoC, PhysPortIndex, SK_STOP_ALL, SK_SOFT_RST);
+
+ RetCode = SkGmCableDiagStatus(pAC, IoC, PhysPortIndex, SK_TRUE);
+ if (RetCode == 0) { /* RetCode: 0 => Start! */
+ pAC->Pnmi.VctStatus[PhysPortIndex] |= SK_PNMI_VCT_PENDING;
+ pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_NEW_VCT_DATA;
+ pAC->Pnmi.VctStatus[PhysPortIndex] &= ~SK_PNMI_VCT_LINK;
+
+ /*
+ * Start VCT timer counter.
+ */
+ SK_MEMSET((char *) &Para, 0, sizeof(Para));
+ Para.Para32[0] = PhysPortIndex;
+ Para.Para32[1] = -1;
+ SkTimerStart(pAC, IoC, &pAC->Pnmi.VctTimeout[PhysPortIndex].VctTimer,
+ 4000000, SKGE_PNMI, SK_PNMI_EVT_VCT_RESET, Para);
+ SK_PNMI_STORE_U32((pBuf + Offset), RetCode);
+ RetCode = SK_PNMI_ERR_OK;
+ }
+ else { /* RetCode: 2 => Running! */
+ SK_PNMI_STORE_U32((pBuf + Offset), RetCode);
+ RetCode = SK_PNMI_ERR_OK;
+ }
+ }
+ else { /* RetCode: 4 => Link! */
+ RetCode = 4;
+ SK_PNMI_STORE_U32((pBuf + Offset), RetCode);
+ RetCode = SK_PNMI_ERR_OK;
+ }
+ Offset += sizeof(SK_U32);
+ break;
+
+ default:
+ *pLen = 0;
+ return (SK_PNMI_ERR_GENERAL);
+ }
+ } /* for */
+ *pLen = Offset;
+ return (RetCode);
+
+} /* Vct */
+
+
+PNMI_STATIC void CheckVctStatus(
+SK_AC *pAC,
+SK_IOC IoC,
+char *pBuf,
+SK_U32 Offset,
+SK_U32 PhysPortIndex)
+{
+ SK_GEPORT *pPrt;
+ SK_PNMI_VCT *pVctData;
+ SK_U32 RetCode;
+ SK_U8 LinkSpeedUsed;
+
+ pPrt = &pAC->GIni.GP[PhysPortIndex];
+
+ pVctData = (SK_PNMI_VCT *) (pBuf + Offset);
+ pVctData->VctStatus = SK_PNMI_VCT_NONE;
+
+ if (!pPrt->PHWLinkUp) {
+
+ /* Was a VCT test ever made before? */
+ if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_TEST_DONE) {
+ if ((pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_LINK)) {
+ pVctData->VctStatus |= SK_PNMI_VCT_OLD_VCT_DATA;
+ }
+ else {
+ pVctData->VctStatus |= SK_PNMI_VCT_NEW_VCT_DATA;
+ }
+ }
+
+ /* Check VCT test status. */
+ RetCode = SkGmCableDiagStatus(pAC,IoC, PhysPortIndex, SK_FALSE);
+ if (RetCode == 2) { /* VCT test is running. */
+ pVctData->VctStatus |= SK_PNMI_VCT_RUNNING;
+ }
+ else { /* VCT data was copied to pAC here. Check PENDING state. */
+ if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_PENDING) {
+ pVctData->VctStatus |= SK_PNMI_VCT_NEW_VCT_DATA;
+ }
+ }
+
+ if (pPrt->PCableLen != 0xff) { /* Old DSP value. */
+ pVctData->VctStatus |= SK_PNMI_VCT_OLD_DSP_DATA;
+ }
+ }
+ else {
+
+ /* Was a VCT test ever made before? */
+ if (pAC->Pnmi.VctStatus[PhysPortIndex] & SK_PNMI_VCT_TEST_DONE) {
+ pVctData->VctStatus &= ~SK_PNMI_VCT_NEW_VCT_DATA;
+ pVctData->VctStatus |= SK_PNMI_VCT_OLD_VCT_DATA;
+ }
+
+ /* DSP only valid in 100/1000 modes. */
+ LinkSpeedUsed = pAC->GIni.GP[PhysPortIndex].PLinkSpeedUsed;
+ if (LinkSpeedUsed != SK_LSPEED_STAT_10MBPS) {
+ pVctData->VctStatus |= SK_PNMI_VCT_NEW_DSP_DATA;
+ }
+ }
+
+} /* CheckVctStatus */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skgesirq.c u-boot-2009.03/drivers/net/sk98lin/skgesirq.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skgesirq.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skgesirq.c 2009-03-31 14:54:29.565628800 -0700
@@ -1,2413 +1,2416 @@
-/******************************************************************************
- *
- * Name: skgesirq.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.83 $
- * Date: $Date: 2003/02/05 15:10:59 $
- * Purpose: Special IRQ module
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skgesirq.c,v $
- * Revision 1.83 2003/02/05 15:10:59 rschmidt
- * Fixed setting of PLinkSpeedUsed in SkHWLinkUp() when
- * auto-negotiation is disabled.
- * Editorial changes.
- *
- * Revision 1.82 2003/01/29 13:34:33 rschmidt
- * Added some typecasts to avoid compiler warnings.
- *
- * Revision 1.81 2002/12/05 10:49:51 rschmidt
- * Fixed missing Link Down Event for fiber (Bug Id #10768)
- * Added reading of cable length when link is up
- * Removed testing of unused error bits in PHY ISR
- * Editorial changes.
- *
- * Revision 1.80 2002/11/12 17:15:21 rschmidt
- * Replaced SkPnmiGetVar() by ...MacStatistic() in SkMacParity().
- * Editorial changes.
- *
- * Revision 1.79 2002/10/14 15:14:51 rschmidt
- * Changed clearing of IS_M1_PAR_ERR (MAC 1 Parity Error) in
- * SkMacParity() depending on GIChipRev (HW-Bug #8).
- * Added error messages for GPHY Auto-Negotiation Error and
- * FIFO Overflow/Underrun in SkPhyIsrGmac().
- * Editorial changes.
- *
- * Revision 1.78 2002/10/10 15:54:29 mkarl
- * changes for PLinkSpeedUsed
- *
- * Revision 1.77 2002/09/12 08:58:51 rwahl
- * Retrieve counters needed for XMAC errata workarounds directly because
- * PNMI returns corrected counter values (e.g. #10620).
- *
- * Revision 1.76 2002/08/16 15:21:54 rschmidt
- * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis.
- * Replaced wrong 1st para pAC with IoC in SK_IN/OUT macros.
- * Editorial changes.
- *
- * Revision 1.75 2002/08/12 13:50:47 rschmidt
- * Changed clearing of IS_M1_PAR_ERR (MAC 1 Parity Error) in
- * SkMacParity() by GMF_CLI_TX_FC instead of GMF_CLI_TX_PE (HW-Bug #8).
- * Added clearing of IS_IRQ_TIST_OV and IS_IRQ_SENSOR in SkGeHwErr().
- * Corrected handling of Link Up and Auto-Negotiation Over for GPHY.
- * in SkGePortCheckUpGmac().
- * Editorial changes.
- *
- * Revision 1.74 2002/08/08 16:17:04 rschmidt
- * Added PhyType check for SK_HWEV_SET_ROLE event (copper only)
- * Changed Link Up check reading PHY Specific Status (YUKON)
- * Editorial changes
- *
- * Revision 1.73 2002/07/15 18:36:53 rwahl
- * Editorial changes.
- *
- * Revision 1.72 2002/07/15 15:46:26 rschmidt
- * Added new event: SK_HWEV_SET_SPEED
- * Editorial changes
- *
- * Revision 1.71 2002/06/10 09:34:19 rschmidt
- * Editorial changes
- *
- * Revision 1.70 2002/06/05 08:29:18 rschmidt
- * SkXmRxTxEnable() replaced by SkMacRxTxEnable().
- * Editorial changes.
- *
- * Revision 1.69 2002/04/25 13:03:49 rschmidt
- * Changes for handling YUKON.
- * Use of #ifdef OTHER_PHY to eliminate code for unused Phy types.
- * Replaced all XMAC-access macros by functions: SkMacRxTxDisable(),
- * SkMacIrqDisable().
- * Added handling for GMAC FIFO in SkMacParity().
- * Replaced all SkXm...() functions with SkMac...() to handle also
- * YUKON's GMAC.
- * Macros for XMAC PHY access PHY_READ(), PHY_WRITE() replaced
- * by functions SkXmPhyRead(), SkXmPhyWrite().
- * Disabling all PHY interrupts moved to SkMacIrqDisable().
- * Added handling for GPHY IRQ in SkGeSirqIsr().
- * Removed status parameter from MAC IRQ handler SkMacIrq().
- * Added SkGePortCheckUpGmac(), SkPhyIsrGmac() for GMAC.
- * Editorial changes
- *
- * Revision 1.68 2002/02/26 15:24:53 rwahl
- * Fix: no link with manual configuration (#10673). The previous fix for
- * #10639 was removed. So for RLMT mode = CLS the RLMT may switch to
- * misconfigured port. It should not occur for the other RLMT modes.
- *
- * Revision 1.67 2001/11/20 09:19:58 rwahl
- * Reworked bugfix #10639 (no dependency to RLMT mode).
- *
- * Revision 1.66 2001/10/26 07:52:53 afischer
- * Port switching bug in `check local link` mode
- *
- * Revision 1.65 2001/02/23 13:41:51 gklug
- * fix: PHYS2INST should be used correctly for Dual Net operation
- * chg: do no longer work with older PNMI
- *
- * Revision 1.64 2001/02/15 11:27:04 rassmann
- * Working with RLMT v1 if SK_MAX_NETS undefined.
- *
- * Revision 1.63 2001/02/06 10:44:23 mkunz
- * - NetIndex added to interface functions of pnmi V4 with dual net support
- *
- * Revision 1.62 2001/01/31 15:31:41 gklug
- * fix: problem with autosensing an SR8800 switch
- *
- * Revision 1.61 2000/11/09 11:30:09 rassmann
- * WA: Waiting after releasing reset until BCom chip is accessible.
- *
- * Revision 1.60 2000/10/18 12:37:48 cgoos
- * Reinserted the comment for version 1.56.
- *
- * Revision 1.59 2000/10/18 12:22:20 cgoos
- * Added workaround for half duplex hangup.
- *
- * Revision 1.58 2000/09/28 13:06:04 gklug
- * fix: BCom may NOT be touched if XMAC is in RESET state
- *
- * Revision 1.57 2000/09/08 12:38:39 cgoos
- * Added forgotten variable declaration.
- *
- * Revision 1.56 2000/09/08 08:12:13 cgoos
- * Changed handling of parity errors in SkGeHwErr (correct reset of error).
- *
- * Revision 1.55 2000/06/19 08:36:25 cgoos
- * Changed comment.
- *
- * Revision 1.54 2000/05/22 08:45:57 malthoff
- * Fix: #10523 is valid for all BCom PHYs.
- *
- * Revision 1.53 2000/05/19 10:20:30 cgoos
- * Removed Solaris debug output code.
- *
- * Revision 1.52 2000/05/19 10:19:37 cgoos
- * Added PHY state check in HWLinkDown.
- * Move PHY interrupt code to IS_EXT_REG case in SkGeSirqIsr.
- *
- * Revision 1.51 2000/05/18 05:56:20 cgoos
- * Fixed typo.
- *
- * Revision 1.50 2000/05/17 12:49:49 malthoff
- * Fixes BCom link bugs (#10523).
- *
- * Revision 1.49 1999/12/17 11:02:50 gklug
- * fix: read PHY_STAT of Broadcom chip more often to assure good status
- *
- * Revision 1.48 1999/12/06 10:01:17 cgoos
- * Added SET function for Role.
- *
- * Revision 1.47 1999/11/22 13:34:24 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.46 1999/09/16 10:30:07 cgoos
- * Removed debugging output statement from Linux.
- *
- * Revision 1.45 1999/09/16 07:32:55 cgoos
- * Fixed dual-port copperfield bug (PHY_READ from resetted port).
- * Removed some unused variables.
- *
- * Revision 1.44 1999/08/03 15:25:04 cgoos
- * Removed workaround for disabled interrupts in half duplex mode.
- *
- * Revision 1.43 1999/08/03 14:27:58 cgoos
- * Removed SENSE mode code from SkGePortCheckUpBcom.
- *
- * Revision 1.42 1999/07/26 09:16:54 cgoos
- * Added some typecasts to avoid compiler warnings.
- *
- * Revision 1.41 1999/05/19 07:28:59 cgoos
- * Changes for 1000Base-T.
- *
- * Revision 1.40 1999/04/08 13:59:39 gklug
- * fix: problem with 3Com switches endless RESTARTs
- *
- * Revision 1.39 1999/03/08 10:10:52 gklug
- * fix: AutoSensing did switch to next mode even if LiPa indicated offline
- *
- * Revision 1.38 1999/03/08 09:49:03 gklug
- * fix: Bug using pAC instead of IoC, causing AIX problems
- * fix: change compare for Linux compiler bug workaround
- *
- * Revision 1.37 1999/01/28 14:51:33 gklug
- * fix: monitor for autosensing and extra RESETS the RX on wire counters
- *
- * Revision 1.36 1999/01/22 09:19:55 gklug
- * fix: Init DupMode and InitPauseMd are now called in RxTxEnable
- *
- * Revision 1.35 1998/12/11 15:22:59 gklug
- * chg: autosensing: check for receive if manual mode was guessed
- * chg: simplified workaround for XMAC errata
- * chg: wait additional 100 ms before link goes up.
- * chg: autoneg timeout to 600 ms
- * chg: restart autoneg even if configured to autonegotiation
- *
- * Revision 1.34 1998/12/10 10:33:14 gklug
- * add: more debug messages
- * fix: do a new InitPhy if link went down (AutoSensing problem)
- * chg: Check for zero shorts if link is NOT up
- * chg: reset Port if link goes down
- * chg: wait additional 100 ms when link comes up to check shorts
- * fix: dummy read extended autoneg status to prevent link going down immediately
- *
- * Revision 1.33 1998/12/07 12:18:29 gklug
- * add: refinement of autosense mode: take into account the autoneg cap of LiPa
- *
- * Revision 1.32 1998/12/07 07:11:21 gklug
- * fix: compiler warning
- *
- * Revision 1.31 1998/12/02 09:29:05 gklug
- * fix: WA XMAC Errata: FCSCt check was not correct.
- * fix: WA XMAC Errata: Prec Counter were NOT updated in case of short checks.
- * fix: Clear Stat : now clears the Prev counters of all known Ports
- *
- * Revision 1.30 1998/12/01 10:54:15 gklug
- * dd: workaround for XMAC errata changed. Check RX count and CRC err Count, too.
- *
- * Revision 1.29 1998/12/01 10:01:53 gklug
- * fix: if MAC IRQ occurs during port down, this will be handled correctly
- *
- * Revision 1.28 1998/11/26 16:22:11 gklug
- * fix: bug in autosense if manual modes are used
- *
- * Revision 1.27 1998/11/26 15:50:06 gklug
- * fix: PNMI needs to set PLinkModeConf
- *
- * Revision 1.26 1998/11/26 14:51:58 gklug
- * add: AutoSensing functionalty
- *
- * Revision 1.25 1998/11/26 07:34:37 gklug
- * fix: Init PrevShorts when restarting port due to Link connection
- *
- * Revision 1.24 1998/11/25 10:57:32 gklug
- * fix: remove unreferenced local vars
- *
- * Revision 1.23 1998/11/25 08:26:40 gklug
- * fix: don't do a RESET on a starting or stopping port
- *
- * Revision 1.22 1998/11/24 13:29:44 gklug
- * add: Workaround for MAC parity errata
- *
- * Revision 1.21 1998/11/18 15:31:06 gklug
- * fix: lint bugs
- *
- * Revision 1.20 1998/11/18 12:58:54 gklug
- * fix: use PNMI query instead of hardware access
- *
- * Revision 1.19 1998/11/18 12:54:55 gklug
- * chg: add new workaround for XMAC Errata
- * add: short event counter monitoring on active link too
- *
- * Revision 1.18 1998/11/13 14:27:41 malthoff
- * Bug Fix: Packet Arbiter Timeout was not cleared correctly
- * for timeout on TX1 and TX2.
- *
- * Revision 1.17 1998/11/04 07:01:59 cgoos
- * Moved HW link poll sequence.
- * Added call to SkXmRxTxEnable.
- *
- * Revision 1.16 1998/11/03 13:46:03 gklug
- * add: functionality of SET_LMODE and SET_FLOW_MODE
- * fix: send RLMT LinkDown event when Port stop is given with LinkUp
- *
- * Revision 1.15 1998/11/03 12:56:47 gklug
- * fix: Needs more events
- *
- * Revision 1.14 1998/10/30 07:36:35 gklug
- * rmv: unnecessary code
- *
- * Revision 1.13 1998/10/29 15:21:57 gklug
- * add: Poll link feature for activating HW link
- * fix: Deactivate HWLink when Port STOP is given
- *
- * Revision 1.12 1998/10/28 07:38:57 cgoos
- * Checking link status at begin of SkHWLinkUp.
- *
- * Revision 1.11 1998/10/22 09:46:50 gklug
- * fix SysKonnectFileId typo
- *
- * Revision 1.10 1998/10/14 13:57:47 gklug
- * add: Port start/stop event
- *
- * Revision 1.9 1998/10/14 05:48:29 cgoos
- * Added definition for Para.
- *
- * Revision 1.8 1998/10/14 05:40:09 gklug
- * add: Hardware Linkup signal used
- *
- * Revision 1.7 1998/10/09 06:50:20 malthoff
- * Remove ID_sccs by SysKonnectFileId.
- *
- * Revision 1.6 1998/10/08 09:11:49 gklug
- * add: clear IRQ commands
- *
- * Revision 1.5 1998/10/02 14:27:35 cgoos
- * Fixed some typos and wrong event names.
- *
- * Revision 1.4 1998/10/02 06:24:17 gklug
- * add: HW error function
- * fix: OUT macros
- *
- * Revision 1.3 1998/10/01 07:03:00 gklug
- * add: ISR for the usual interrupt source register
- *
- * Revision 1.2 1998/09/03 13:50:33 gklug
- * add: function prototypes
- *
- * Revision 1.1 1998/08/27 11:50:21 gklug
- * initial revision
- *
- *
- *
- ******************************************************************************/
-
-#include <config.h>
-
-/*
- * Special Interrupt handler
- *
- * The following abstract should show how this module is included
- * in the driver path:
- *
- * In the ISR of the driver the bits for frame transmission complete and
- * for receive complete are checked and handled by the driver itself.
- * The bits of the slow path mask are checked after that and then the
- * entry into the so-called "slow path" is prepared. It is an implementors
- * decision whether this is executed directly or just scheduled by
- * disabling the mask. In the interrupt service routine some events may be
- * generated, so it would be a good idea to call the EventDispatcher
- * right after this ISR.
- *
- * The Interrupt source register of the adapter is NOT read by this module.
- * SO if the drivers implementor needs a while loop around the
- * slow data paths interrupt bits, he needs to call the SkGeSirqIsr() for
- * each loop entered.
- *
- * However, the MAC Interrupt status registers are read in a while loop.
- *
- */
-
-static const char SysKonnectFileId[] =
- "$Id: skgesirq.c,v 1.83 2003/02/05 15:10:59 rschmidt Exp $" ;
-
-#include "h/skdrv1st.h" /* Driver Specific Definitions */
-#include "h/skgepnmi.h" /* PNMI Definitions */
-#include "h/skrlmt.h" /* RLMT Definitions */
-#include "h/skdrv2nd.h" /* Adapter Control and Driver specific Def. */
-
-/* local function prototypes */
-static int SkGePortCheckUpXmac(SK_AC*, SK_IOC, int);
-static int SkGePortCheckUpBcom(SK_AC*, SK_IOC, int);
-static int SkGePortCheckUpGmac(SK_AC*, SK_IOC, int);
-static void SkPhyIsrBcom(SK_AC*, SK_IOC, int, SK_U16);
-static void SkPhyIsrGmac(SK_AC*, SK_IOC, int, SK_U16);
-#ifdef OTHER_PHY
-static int SkGePortCheckUpLone(SK_AC*, SK_IOC, int);
-static int SkGePortCheckUpNat(SK_AC*, SK_IOC, int);
-static void SkPhyIsrLone(SK_AC*, SK_IOC, int, SK_U16);
-#endif /* OTHER_PHY */
-
-/*
- * array of Rx counter from XMAC which are checked
- * in AutoSense mode to check whether a link is not able to auto-negotiate.
- */
-static const SK_U16 SkGeRxRegs[]= {
- XM_RXF_64B,
- XM_RXF_127B,
- XM_RXF_255B,
- XM_RXF_511B,
- XM_RXF_1023B,
- XM_RXF_MAX_SZ
-} ;
-
-#ifdef __C2MAN__
-/*
- * Special IRQ function
- *
- * General Description:
- *
- */
-intro()
-{}
-#endif
-
-/* Define return codes of SkGePortCheckUp and CheckShort */
-#define SK_HW_PS_NONE 0 /* No action needed */
-#define SK_HW_PS_RESTART 1 /* Restart needed */
-#define SK_HW_PS_LINK 2 /* Link Up actions needed */
-
-/******************************************************************************
- *
- * SkHWInitDefSense() - Default Autosensing mode initialization
- *
- * Description: sets the PLinkMode for HWInit
- *
- * Returns: N/A
- */
-static void SkHWInitDefSense(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
-
- pPrt = &pAC->GIni.GP[Port];
-
- pPrt->PAutoNegTimeOut = 0;
-
- if (pPrt->PLinkModeConf != SK_LMODE_AUTOSENSE) {
- pPrt->PLinkMode = pPrt->PLinkModeConf;
- return;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("AutoSensing: First mode %d on Port %d\n",
- (int)SK_LMODE_AUTOFULL, Port));
-
- pPrt->PLinkMode = SK_LMODE_AUTOFULL;
-
- return;
-} /* SkHWInitDefSense */
-
-
-/******************************************************************************
- *
- * SkHWSenseGetNext() - Get Next Autosensing Mode
- *
- * Description: gets the appropriate next mode
- *
- * Note:
- *
- */
-SK_U8 SkHWSenseGetNext(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
-
- pPrt = &pAC->GIni.GP[Port];
-
- pPrt->PAutoNegTimeOut = 0;
-
- if (pPrt->PLinkModeConf != SK_LMODE_AUTOSENSE) {
- /* Leave all as configured */
- return(pPrt->PLinkModeConf);
- }
-
- if (pPrt->PLinkMode == SK_LMODE_AUTOFULL) {
- /* Return next mode AUTOBOTH */
- return(SK_LMODE_AUTOBOTH);
- }
-
- /* Return default autofull */
- return(SK_LMODE_AUTOFULL);
-} /* SkHWSenseGetNext */
-
-
-/******************************************************************************
- *
- * SkHWSenseSetNext() - Autosensing Set next mode
- *
- * Description: sets the appropriate next mode
- *
- * Returns: N/A
- */
-void SkHWSenseSetNext(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_U8 NewMode) /* New Mode to be written in sense mode */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
-
- pPrt = &pAC->GIni.GP[Port];
-
- pPrt->PAutoNegTimeOut = 0;
-
- if (pPrt->PLinkModeConf != SK_LMODE_AUTOSENSE) {
- return;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("AutoSensing: next mode %d on Port %d\n",
- (int)NewMode, Port));
-
- pPrt->PLinkMode = NewMode;
-
- return;
-} /* SkHWSenseSetNext */
-
-
-/******************************************************************************
- *
- * SkHWLinkDown() - Link Down handling
- *
- * Description: handles the hardware link down signal
- *
- * Returns: N/A
- */
-void SkHWLinkDown(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* Disable all MAC interrupts */
- SkMacIrqDisable(pAC, IoC, Port);
-
- /* Disable Receiver and Transmitter */
- SkMacRxTxDisable(pAC, IoC, Port);
-
- /* Init default sense mode */
- SkHWInitDefSense(pAC, IoC, Port);
-
- if (!pPrt->PHWLinkUp) {
- return;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Link down Port %d\n", Port));
-
- /* Set Link to DOWN */
- pPrt->PHWLinkUp = SK_FALSE;
-
- /* Reset Port stati */
- pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_INDETERMINATED;
-
- /* Re-init Phy especially when the AutoSense default is set now */
- SkMacInitPhy(pAC, IoC, Port, SK_FALSE);
-
- /* GP0: used for workaround of Rev. C Errata 2 */
-
- /* Do NOT signal to RLMT */
-
- /* Do NOT start the timer here */
-} /* SkHWLinkDown */
-
-
-/******************************************************************************
- *
- * SkHWLinkUp() - Link Up handling
- *
- * Description: handles the hardware link up signal
- *
- * Returns: N/A
- */
-void SkHWLinkUp(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PHWLinkUp) {
- /* We do NOT need to proceed on active link */
- return;
- }
-
- pPrt->PHWLinkUp = SK_TRUE;
- pPrt->PAutoNegFail = SK_FALSE;
- pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
-
- if (pPrt->PLinkMode != SK_LMODE_AUTOHALF &&
- pPrt->PLinkMode != SK_LMODE_AUTOFULL &&
- pPrt->PLinkMode != SK_LMODE_AUTOBOTH) {
- /* Link is up and no Auto-negotiation should be done */
-
- /* Link speed should be the configured one */
- switch (pPrt->PLinkSpeed) {
- case SK_LSPEED_AUTO:
- /* default is 1000 Mbps */
- case SK_LSPEED_1000MBPS:
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
- break;
- case SK_LSPEED_100MBPS:
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_100MBPS;
- break;
- case SK_LSPEED_10MBPS:
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_10MBPS;
- break;
- }
-
- /* Set Link Mode Status */
- if (pPrt->PLinkMode == SK_LMODE_FULL) {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_FULL;
- }
- else {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_HALF;
- }
-
- /* No flow control without auto-negotiation */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
-
- /* enable Rx/Tx */
- SkMacRxTxEnable(pAC, IoC, Port);
- }
-} /* SkHWLinkUp */
-
-
-/******************************************************************************
- *
- * SkMacParity() - MAC parity workaround
- *
- * Description: handles MAC parity errors correctly
- *
- * Returns: N/A
- */
-static void SkMacParity(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index of the port failed */
-{
- SK_EVPARA Para;
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- SK_U32 TxMax; /* TxMax Counter */
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* Clear IRQ Tx Parity Error */
- if (pAC->GIni.GIGenesis) {
- SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_CLR_PERR);
- }
- else {
- /* HW-Bug #8: cleared by GMF_CLI_TX_FC instead of GMF_CLI_TX_PE */
- SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T),
- (SK_U8)((pAC->GIni.GIChipRev == 0) ? GMF_CLI_TX_FC : GMF_CLI_TX_PE));
- }
-
- if (pPrt->PCheckPar) {
- if (Port == MAC_1) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E016, SKERR_SIRQ_E016MSG);
- }
- else {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E017, SKERR_SIRQ_E017MSG);
- }
- Para.Para64 = Port;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = Port;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
-
- return;
- }
-
- /* Check whether frames with a size of 1k were sent */
- if (pAC->GIni.GIGenesis) {
- /* Snap statistic counters */
- (void)SkXmUpdateStats(pAC, IoC, Port);
-
- (void)SkXmMacStatistic(pAC, IoC, Port, XM_TXF_MAX_SZ, &TxMax);
- }
- else {
- (void)SkGmMacStatistic(pAC, IoC, Port, GM_TXF_1518B, &TxMax);
- }
-
- if (TxMax > 0) {
- /* From now on check the parity */
- pPrt->PCheckPar = SK_TRUE;
- }
-} /* SkMacParity */
-
-
-/******************************************************************************
- *
- * SkGeHwErr() - Hardware Error service routine
- *
- * Description: handles all HW Error interrupts
- *
- * Returns: N/A
- */
-static void SkGeHwErr(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-SK_U32 HwStatus) /* Interrupt status word */
-{
- SK_EVPARA Para;
- SK_U16 Word;
-
- if ((HwStatus & (IS_IRQ_MST_ERR | IS_IRQ_STAT)) != 0) {
- /* PCI Errors occured */
- if ((HwStatus & IS_IRQ_STAT) != 0) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E013, SKERR_SIRQ_E013MSG);
- }
- else {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E012, SKERR_SIRQ_E012MSG);
- }
-
- /* Reset all bits in the PCI STATUS register */
- SK_IN16(IoC, PCI_C(PCI_STATUS), &Word);
-
- SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);
- SK_OUT16(IoC, PCI_C(PCI_STATUS), Word | PCI_ERRBITS);
- SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
-
- Para.Para64 = 0;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_ADAP_FAIL, Para);
- }
-
- if (pAC->GIni.GIGenesis) {
- if ((HwStatus & IS_NO_STAT_M1) != 0) {
- /* Ignore it */
- /* This situation is also indicated in the descriptor */
- SK_OUT16(IoC, MR_ADDR(MAC_1, RX_MFF_CTRL1), MFF_CLR_INSTAT);
- }
-
- if ((HwStatus & IS_NO_STAT_M2) != 0) {
- /* Ignore it */
- /* This situation is also indicated in the descriptor */
- SK_OUT16(IoC, MR_ADDR(MAC_2, RX_MFF_CTRL1), MFF_CLR_INSTAT);
- }
-
- if ((HwStatus & IS_NO_TIST_M1) != 0) {
- /* Ignore it */
- /* This situation is also indicated in the descriptor */
- SK_OUT16(IoC, MR_ADDR(MAC_1, RX_MFF_CTRL1), MFF_CLR_INTIST);
- }
-
- if ((HwStatus & IS_NO_TIST_M2) != 0) {
- /* Ignore it */
- /* This situation is also indicated in the descriptor */
- SK_OUT16(IoC, MR_ADDR(MAC_2, RX_MFF_CTRL1), MFF_CLR_INTIST);
- }
- }
- else { /* YUKON */
- /* This is necessary only for Rx timing measurements */
- if ((HwStatus & IS_IRQ_TIST_OV) != 0) {
- /* Clear Time Stamp Timer IRQ */
- SK_OUT8(IoC, GMAC_TI_ST_CTRL, (SK_U8)GMT_ST_CLR_IRQ);
- }
-
- if ((HwStatus & IS_IRQ_SENSOR) != 0) {
- /* Clear I2C IRQ */
- SK_OUT32(IoC, B2_I2C_IRQ, I2C_CLR_IRQ);
- }
- }
-
- if ((HwStatus & IS_RAM_RD_PAR) != 0) {
- SK_OUT16(IoC, B3_RI_CTRL, RI_CLR_RD_PERR);
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E014, SKERR_SIRQ_E014MSG);
- Para.Para64 = 0;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_ADAP_FAIL, Para);
- }
-
- if ((HwStatus & IS_RAM_WR_PAR) != 0) {
- SK_OUT16(IoC, B3_RI_CTRL, RI_CLR_WR_PERR);
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E015, SKERR_SIRQ_E015MSG);
- Para.Para64 = 0;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_ADAP_FAIL, Para);
- }
-
- if ((HwStatus & IS_M1_PAR_ERR) != 0) {
- SkMacParity(pAC, IoC, MAC_1);
- }
-
- if ((HwStatus & IS_M2_PAR_ERR) != 0) {
- SkMacParity(pAC, IoC, MAC_2);
- }
-
- if ((HwStatus & IS_R1_PAR_ERR) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_R1_CSR, CSR_IRQ_CL_P);
-
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E018, SKERR_SIRQ_E018MSG);
- Para.Para64 = MAC_1;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- if ((HwStatus & IS_R2_PAR_ERR) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_R2_CSR, CSR_IRQ_CL_P);
-
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E019, SKERR_SIRQ_E019MSG);
- Para.Para64 = MAC_2;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_2;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-} /* SkGeHwErr */
-
-
-/******************************************************************************
- *
- * SkGeSirqIsr() - Special Interrupt Service Routine
- *
- * Description: handles all non data transfer specific interrupts (slow path)
- *
- * Returns: N/A
- */
-void SkGeSirqIsr(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-SK_U32 Istatus) /* Interrupt status word */
-{
- SK_EVPARA Para;
- SK_U32 RegVal32; /* Read register value */
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- unsigned Len;
- SK_U64 Octets;
- SK_U16 PhyInt;
- SK_U16 PhyIMsk;
- int i;
-
- if ((Istatus & IS_HW_ERR) != 0) {
- /* read the HW Error Interrupt source */
- SK_IN32(IoC, B0_HWE_ISRC, &RegVal32);
-
- SkGeHwErr(pAC, IoC, RegVal32);
- }
-
- /*
- * Packet Timeout interrupts
- */
- /* Check whether MACs are correctly initialized */
- if (((Istatus & (IS_PA_TO_RX1 | IS_PA_TO_TX1)) != 0) &&
- pAC->GIni.GP[MAC_1].PState == SK_PRT_RESET) {
- /* MAC 1 was not initialized but Packet timeout occured */
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E004,
- SKERR_SIRQ_E004MSG);
- }
-
- if (((Istatus & (IS_PA_TO_RX2 | IS_PA_TO_TX2)) != 0) &&
- pAC->GIni.GP[MAC_2].PState == SK_PRT_RESET) {
- /* MAC 2 was not initialized but Packet timeout occured */
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E005,
- SKERR_SIRQ_E005MSG);
- }
-
- if ((Istatus & IS_PA_TO_RX1) != 0) {
- /* Means network is filling us up */
- SK_ERR_LOG(pAC, SK_ERRCL_HW | SK_ERRCL_INIT, SKERR_SIRQ_E002,
- SKERR_SIRQ_E002MSG);
- SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_RX1);
- }
-
- if ((Istatus & IS_PA_TO_RX2) != 0) {
- /* Means network is filling us up */
- SK_ERR_LOG(pAC, SK_ERRCL_HW | SK_ERRCL_INIT, SKERR_SIRQ_E003,
- SKERR_SIRQ_E003MSG);
- SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_RX2);
- }
-
- if ((Istatus & IS_PA_TO_TX1) != 0) {
-
- pPrt = &pAC->GIni.GP[0];
-
- /* May be a normal situation in a server with a slow network */
- SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_TX1);
-
- /*
- * workaround: if in half duplex mode, check for Tx hangup.
- * Read number of TX'ed bytes, wait for 10 ms, then compare
- * the number with current value. If nothing changed, we assume
- * that Tx is hanging and do a FIFO flush (see event routine).
- */
- if ((pPrt->PLinkModeStatus == SK_LMODE_STAT_HALF ||
- pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOHALF) &&
- !pPrt->HalfDupTimerActive) {
- /*
- * many more pack. arb. timeouts may come in between,
- * we ignore those
- */
- pPrt->HalfDupTimerActive = SK_TRUE;
-
- Len = sizeof(SK_U64);
- SkPnmiGetVar(pAC, IoC, OID_SKGE_STAT_TX_OCTETS, (char *)&Octets,
- &Len, (SK_U32) SK_PNMI_PORT_PHYS2INST(pAC, 0),
- pAC->Rlmt.Port[0].Net->NetNumber);
-
- pPrt->LastOctets = Octets;
-
- Para.Para32[0] = 0;
- SkTimerStart(pAC, IoC, &pPrt->HalfDupChkTimer, SK_HALFDUP_CHK_TIME,
- SKGE_HWAC, SK_HWEV_HALFDUP_CHK, Para);
- }
- }
-
- if ((Istatus & IS_PA_TO_TX2) != 0) {
-
- pPrt = &pAC->GIni.GP[1];
-
- /* May be a normal situation in a server with a slow network */
- SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_TX2);
-
- /* workaround: see above */
- if ((pPrt->PLinkModeStatus == SK_LMODE_STAT_HALF ||
- pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOHALF) &&
- !pPrt->HalfDupTimerActive) {
- pPrt->HalfDupTimerActive = SK_TRUE;
-
- Len = sizeof(SK_U64);
- SkPnmiGetVar(pAC, IoC, OID_SKGE_STAT_TX_OCTETS, (char *)&Octets,
- &Len, (SK_U32) SK_PNMI_PORT_PHYS2INST(pAC, 1),
- pAC->Rlmt.Port[1].Net->NetNumber);
-
- pPrt->LastOctets = Octets;
-
- Para.Para32[0] = 1;
- SkTimerStart(pAC, IoC, &pPrt->HalfDupChkTimer, SK_HALFDUP_CHK_TIME,
- SKGE_HWAC, SK_HWEV_HALFDUP_CHK, Para);
- }
- }
-
- /* Check interrupts of the particular queues */
- if ((Istatus & IS_R1_C) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_R1_CSR, CSR_IRQ_CL_C);
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E006,
- SKERR_SIRQ_E006MSG);
- Para.Para64 = MAC_1;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- if ((Istatus & IS_R2_C) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_R2_CSR, CSR_IRQ_CL_C);
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E007,
- SKERR_SIRQ_E007MSG);
- Para.Para64 = MAC_2;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_2;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- if ((Istatus & IS_XS1_C) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_XS1_CSR, CSR_IRQ_CL_C);
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E008,
- SKERR_SIRQ_E008MSG);
- Para.Para64 = MAC_1;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- if ((Istatus & IS_XA1_C) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_XA1_CSR, CSR_IRQ_CL_C);
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E009,
- SKERR_SIRQ_E009MSG);
- Para.Para64 = MAC_1;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_1;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- if ((Istatus & IS_XS2_C) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_XS2_CSR, CSR_IRQ_CL_C);
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E010,
- SKERR_SIRQ_E010MSG);
- Para.Para64 = MAC_2;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_2;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- if ((Istatus & IS_XA2_C) != 0) {
- /* Clear IRQ */
- SK_OUT32(IoC, B0_XA2_CSR, CSR_IRQ_CL_C);
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E011,
- SKERR_SIRQ_E011MSG);
- Para.Para64 = MAC_2;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
- Para.Para32[0] = MAC_2;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- /* External reg interrupt */
- if ((Istatus & IS_EXT_REG) != 0) {
- /* Test IRQs from PHY */
- for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
-
- pPrt = &pAC->GIni.GP[i];
-
- if (pPrt->PState == SK_PRT_RESET) {
- continue;
- }
-
- switch (pPrt->PhyType) {
-
- case SK_PHY_XMAC:
- break;
-
- case SK_PHY_BCOM:
- SkXmPhyRead(pAC, IoC, i, PHY_BCOM_INT_STAT, &PhyInt);
- SkXmPhyRead(pAC, IoC, i, PHY_BCOM_INT_MASK, &PhyIMsk);
-
- if ((PhyInt & ~PhyIMsk) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Port %d Bcom Int: 0x%04X Mask: 0x%04X\n",
- i, PhyInt, PhyIMsk));
- SkPhyIsrBcom(pAC, IoC, i, PhyInt);
- }
- break;
-
- case SK_PHY_MARV_COPPER:
- case SK_PHY_MARV_FIBER:
- SkGmPhyRead(pAC, IoC, i, PHY_MARV_INT_STAT, &PhyInt);
- SkGmPhyRead(pAC, IoC, i, PHY_MARV_INT_MASK, &PhyIMsk);
-
- if ((PhyInt & PhyIMsk) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Port %d Marv Int: 0x%04X Mask: 0x%04X\n",
- i, PhyInt, PhyIMsk));
- SkPhyIsrGmac(pAC, IoC, i, PhyInt);
- }
- break;
-
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- SkXmPhyRead(pAC, IoC, i, PHY_LONE_INT_STAT, &PhyInt);
- SkXmPhyRead(pAC, IoC, i, PHY_LONE_INT_ENAB, &PhyIMsk);
-
- if ((PhyInt & PhyIMsk) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Port %d Lone Int: %x Mask: %x\n",
- i, PhyInt, PhyIMsk));
- SkPhyIsrLone(pAC, IoC, i, PhyInt);
- }
- break;
- case SK_PHY_NAT:
- /* todo: National */
- break;
-#endif /* OTHER_PHY */
- }
- }
- }
-
- /* I2C Ready interrupt */
- if ((Istatus & IS_I2C_READY) != 0) {
- SkI2cIsr(pAC, IoC);
- }
-
- if ((Istatus & IS_LNK_SYNC_M1) != 0) {
- /*
- * We do NOT need the Link Sync interrupt, because it shows
- * us only a link going down.
- */
- /* clear interrupt */
- SK_OUT8(IoC, MR_ADDR(MAC_1, LNK_SYNC_CTRL), LED_CLR_IRQ);
- }
-
- /* Check MAC after link sync counter */
- if ((Istatus & IS_MAC1) != 0) {
- /* IRQ from MAC 1 */
- SkMacIrq(pAC, IoC, MAC_1);
- }
-
- if ((Istatus & IS_LNK_SYNC_M2) != 0) {
- /*
- * We do NOT need the Link Sync interrupt, because it shows
- * us only a link going down.
- */
- /* clear interrupt */
- SK_OUT8(IoC, MR_ADDR(MAC_2, LNK_SYNC_CTRL), LED_CLR_IRQ);
- }
-
- /* Check MAC after link sync counter */
- if ((Istatus & IS_MAC2) != 0) {
- /* IRQ from MAC 2 */
- SkMacIrq(pAC, IoC, MAC_2);
- }
-
- /* Timer interrupt (served last) */
- if ((Istatus & IS_TIMINT) != 0) {
- SkHwtIsr(pAC, IoC);
- }
-} /* SkGeSirqIsr */
-
-
-/******************************************************************************
- *
- * SkGePortCheckShorts() - Implementing XMAC Workaround Errata # 2
- *
- * return:
- * 0 o.k. nothing needed
- * 1 Restart needed on this port
- */
-static int SkGePortCheckShorts(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int Port) /* Which port should be checked */
-{
- SK_U32 Shorts; /* Short Event Counter */
- SK_U32 CheckShorts; /* Check value for Short Event Counter */
- SK_U64 RxCts; /* Rx Counter (packets on network) */
- SK_U32 RxTmp; /* Rx temp. Counter */
- SK_U32 FcsErrCts; /* FCS Error Counter */
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- int Rtv; /* Return value */
- int i;
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* Default: no action */
- Rtv = SK_HW_PS_NONE;
-
- (void)SkXmUpdateStats(pAC, IoC, Port);
-
- /* Extra precaution: check for short Event counter */
- (void)SkXmMacStatistic(pAC, IoC, Port, XM_RXE_SHT_ERR, &Shorts);
-
- /*
- * Read Rx counter (packets seen on the network and not necessarily
- * really received.
- */
- RxCts = 0;
-
- for (i = 0; i < sizeof(SkGeRxRegs)/sizeof(SkGeRxRegs[0]); i++) {
- (void)SkXmMacStatistic(pAC, IoC, Port, SkGeRxRegs[i], &RxTmp);
- RxCts += (SK_U64)RxTmp;
- }
-
- /* On default: check shorts against zero */
- CheckShorts = 0;
-
- /* Extra precaution on active links */
- if (pPrt->PHWLinkUp) {
- /* Reset Link Restart counter */
- pPrt->PLinkResCt = 0;
- pPrt->PAutoNegTOCt = 0;
-
- /* If link is up check for 2 */
- CheckShorts = 2;
-
- (void)SkXmMacStatistic(pAC, IoC, Port, XM_RXF_FCS_ERR, &FcsErrCts);
-
- if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
- pPrt->PLipaAutoNeg == SK_LIPA_UNKNOWN &&
- (pPrt->PLinkMode == SK_LMODE_HALF ||
- pPrt->PLinkMode == SK_LMODE_FULL)) {
- /*
- * This is autosensing and we are in the fallback
- * manual full/half duplex mode.
- */
- if (RxCts == pPrt->PPrevRx) {
- /* Nothing received, restart link */
- pPrt->PPrevFcs = FcsErrCts;
- pPrt->PPrevShorts = Shorts;
-
- return(SK_HW_PS_RESTART);
- }
- else {
- pPrt->PLipaAutoNeg = SK_LIPA_MANUAL;
- }
- }
-
- if (((RxCts - pPrt->PPrevRx) > pPrt->PRxLim) ||
- (!(FcsErrCts - pPrt->PPrevFcs))) {
- /*
- * Note: The compare with zero above has to be done the way shown,
- * otherwise the Linux driver will have a problem.
- */
- /*
- * We received a bunch of frames or no CRC error occured on the
- * network -> ok.
- */
- pPrt->PPrevRx = RxCts;
- pPrt->PPrevFcs = FcsErrCts;
- pPrt->PPrevShorts = Shorts;
-
- return(SK_HW_PS_NONE);
- }
-
- pPrt->PPrevFcs = FcsErrCts;
- }
-
-
- if ((Shorts - pPrt->PPrevShorts) > CheckShorts) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Short Event Count Restart Port %d \n", Port));
- Rtv = SK_HW_PS_RESTART;
- }
-
- pPrt->PPrevShorts = Shorts;
- pPrt->PPrevRx = RxCts;
-
- return(Rtv);
-} /* SkGePortCheckShorts */
-
-
-/******************************************************************************
- *
- * SkGePortCheckUp() - Check if the link is up
- *
- * return:
- * 0 o.k. nothing needed
- * 1 Restart needed on this port
- * 2 Link came up
- */
-static int SkGePortCheckUp(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int Port) /* Which port should be checked */
-{
- switch (pAC->GIni.GP[Port].PhyType) {
- case SK_PHY_XMAC:
- return(SkGePortCheckUpXmac(pAC, IoC, Port));
- case SK_PHY_BCOM:
- return(SkGePortCheckUpBcom(pAC, IoC, Port));
- case SK_PHY_MARV_COPPER:
- case SK_PHY_MARV_FIBER:
- return(SkGePortCheckUpGmac(pAC, IoC, Port));
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- return(SkGePortCheckUpLone(pAC, IoC, Port));
- case SK_PHY_NAT:
- return(SkGePortCheckUpNat(pAC, IoC, Port));
-#endif /* OTHER_PHY */
- }
- return(SK_HW_PS_NONE);
-} /* SkGePortCheckUp */
-
-
-/******************************************************************************
- *
- * SkGePortCheckUpXmac() - Implementing of the Workaround Errata # 2
- *
- * return:
- * 0 o.k. nothing needed
- * 1 Restart needed on this port
- * 2 Link came up
- */
-static int SkGePortCheckUpXmac(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int Port) /* Which port should be checked */
-{
- SK_U32 Shorts; /* Short Event Counter */
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- int Done;
- SK_U32 GpReg; /* General Purpose register value */
- SK_U16 Isrc; /* Interrupt source register */
- SK_U16 IsrcSum; /* Interrupt source register sum */
- SK_U16 LpAb; /* Link Partner Ability */
- SK_U16 ResAb; /* Resolved Ability */
- SK_U16 ExtStat; /* Extended Status Register */
- SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
- SK_U8 NextMode; /* Next AutoSensing Mode */
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PHWLinkUp) {
- if (pPrt->PhyType != SK_PHY_XMAC) {
- return(SK_HW_PS_NONE);
- }
- else {
- return(SkGePortCheckShorts(pAC, IoC, Port));
- }
- }
-
- IsrcSum = pPrt->PIsave;
- pPrt->PIsave = 0;
-
- /* Now wait for each port's link */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- AutoNeg = SK_FALSE;
- }
- else {
- AutoNeg = SK_TRUE;
- }
-
- if (pPrt->PLinkBroken) {
- /* Link was broken */
- XM_IN32(IoC, Port, XM_GP_PORT, &GpReg);
-
- if ((GpReg & XM_GP_INP_ASS) == 0) {
- /* The Link is in sync */
- XM_IN16(IoC, Port, XM_ISRC, &Isrc);
- IsrcSum |= Isrc;
- SkXmAutoNegLipaXmac(pAC, IoC, Port, IsrcSum);
-
- if ((Isrc & XM_IS_INP_ASS) == 0) {
- /* It has been in sync since last time */
- /* Restart the PORT */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Link in sync Restart Port %d\n", Port));
-
- (void)SkXmUpdateStats(pAC, IoC, Port);
-
- /* We now need to reinitialize the PrevShorts counter */
- (void)SkXmMacStatistic(pAC, IoC, Port, XM_RXE_SHT_ERR, &Shorts);
- pPrt->PPrevShorts = Shorts;
-
- pPrt->PLinkBroken = SK_FALSE;
-
- /*
- * Link Restart Workaround:
- * it may be possible that the other Link side
- * restarts its link as well an we detect
- * another LinkBroken. To prevent this
- * happening we check for a maximum number
- * of consecutive restart. If those happens,
- * we do NOT restart the active link and
- * check whether the link is now o.k.
- */
- pPrt->PLinkResCt++;
-
- pPrt->PAutoNegTimeOut = 0;
-
- if (pPrt->PLinkResCt < SK_MAX_LRESTART) {
- return(SK_HW_PS_RESTART);
- }
-
- pPrt->PLinkResCt = 0;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Do NOT restart on Port %d %x %x\n", Port, Isrc, IsrcSum));
- }
- else {
- pPrt->PIsave = (SK_U16)(IsrcSum & XM_IS_AND);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Save Sync/nosync Port %d %x %x\n", Port, Isrc, IsrcSum));
-
- /* Do nothing more if link is broken */
- return(SK_HW_PS_NONE);
- }
- }
- else {
- /* Do nothing more if link is broken */
- return(SK_HW_PS_NONE);
- }
-
- }
- else {
- /* Link was not broken, check if it is */
- XM_IN16(IoC, Port, XM_ISRC, &Isrc);
- IsrcSum |= Isrc;
- if ((Isrc & XM_IS_INP_ASS) != 0) {
- XM_IN16(IoC, Port, XM_ISRC, &Isrc);
- IsrcSum |= Isrc;
- if ((Isrc & XM_IS_INP_ASS) != 0) {
- XM_IN16(IoC, Port, XM_ISRC, &Isrc);
- IsrcSum |= Isrc;
- if ((Isrc & XM_IS_INP_ASS) != 0) {
- pPrt->PLinkBroken = SK_TRUE;
- /* Re-Init Link partner Autoneg flag */
- pPrt->PLipaAutoNeg = SK_LIPA_UNKNOWN;
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Link broken Port %d\n", Port));
-
- /* Cable removed-> reinit sense mode */
- SkHWInitDefSense(pAC, IoC, Port);
-
- return(SK_HW_PS_RESTART);
- }
- }
- }
- else {
- SkXmAutoNegLipaXmac(pAC, IoC, Port, Isrc);
- if (SkGePortCheckShorts(pAC, IoC, Port) == SK_HW_PS_RESTART) {
- return(SK_HW_PS_RESTART);
- }
- }
- }
-
- /*
- * here we usually can check whether the link is in sync and
- * auto-negotiation is done.
- */
- XM_IN32(IoC, Port, XM_GP_PORT, &GpReg);
- XM_IN16(IoC, Port, XM_ISRC, &Isrc);
- IsrcSum |= Isrc;
-
- SkXmAutoNegLipaXmac(pAC, IoC, Port, IsrcSum);
-
- if ((GpReg & XM_GP_INP_ASS) != 0 || (IsrcSum & XM_IS_INP_ASS) != 0) {
- if ((GpReg & XM_GP_INP_ASS) == 0) {
- /* Save Auto-negotiation Done interrupt only if link is in sync */
- pPrt->PIsave = (SK_U16)(IsrcSum & XM_IS_AND);
- }
-#ifdef DEBUG
- if ((pPrt->PIsave & XM_IS_AND) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg done rescheduled Port %d\n", Port));
- }
-#endif /* DEBUG */
- return(SK_HW_PS_NONE);
- }
-
- if (AutoNeg) {
- if ((IsrcSum & XM_IS_AND) != 0) {
- SkHWLinkUp(pAC, IoC, Port);
- Done = SkMacAutoNegDone(pAC, IoC, Port);
- if (Done != SK_AND_OK) {
- /* Get PHY parameters, for debugging only */
- SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_AUNE_LP, &LpAb);
- SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_RES_ABI, &ResAb);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg FAIL Port %d (LpAb %x, ResAb %x)\n",
- Port, LpAb, ResAb));
-
- /* Try next possible mode */
- NextMode = SkHWSenseGetNext(pAC, IoC, Port);
- SkHWLinkDown(pAC, IoC, Port);
- if (Done == SK_AND_DUP_CAP) {
- /* GoTo next mode */
- SkHWSenseSetNext(pAC, IoC, Port, NextMode);
- }
-
- return(SK_HW_PS_RESTART);
- }
- /*
- * Dummy Read extended status to prevent extra link down/ups
- * (clear Page Received bit if set)
- */
- SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_AUNE_EXP, &ExtStat);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg done Port %d\n", Port));
- return(SK_HW_PS_LINK);
- }
-
- /* AutoNeg not done, but HW link is up. Check for timeouts */
- pPrt->PAutoNegTimeOut++;
- if (pPrt->PAutoNegTimeOut >= SK_AND_MAX_TO) {
- /* Increase the Timeout counter */
- pPrt->PAutoNegTOCt++;
-
- /* Timeout occured */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("AutoNeg timeout Port %d\n", Port));
- if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
- pPrt->PLipaAutoNeg != SK_LIPA_AUTO) {
- /* Set Link manually up */
- SkHWSenseSetNext(pAC, IoC, Port, SK_LMODE_FULL);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Set manual full duplex Port %d\n", Port));
- }
-
- if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
- pPrt->PLipaAutoNeg == SK_LIPA_AUTO &&
- pPrt->PAutoNegTOCt >= SK_MAX_ANEG_TO) {
- /*
- * This is rather complicated.
- * we need to check here whether the LIPA_AUTO
- * we saw before is false alert. We saw at one
- * switch ( SR8800) that on boot time it sends
- * just one auto-neg packet and does no further
- * auto-negotiation.
- * Solution: we restart the autosensing after
- * a few timeouts.
- */
- pPrt->PAutoNegTOCt = 0;
- pPrt->PLipaAutoNeg = SK_LIPA_UNKNOWN;
- SkHWInitDefSense(pAC, IoC, Port);
- }
-
- /* Do the restart */
- return(SK_HW_PS_RESTART);
- }
- }
- else {
- /* Link is up and we don't need more */
-#ifdef DEBUG
- if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("ERROR: Lipa auto detected on port %d\n", Port));
- }
-#endif /* DEBUG */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Link sync(GP), Port %d\n", Port));
- SkHWLinkUp(pAC, IoC, Port);
-
- /*
- * Link sync (GP) and so assume a good connection. But if not received
- * a bunch of frames received in a time slot (maybe broken tx cable)
- * the port is restart.
- */
- return(SK_HW_PS_LINK);
- }
-
- return(SK_HW_PS_NONE);
-} /* SkGePortCheckUpXmac */
-
-
-/******************************************************************************
- *
- * SkGePortCheckUpBcom() - Check if the link is up on Bcom PHY
- *
- * return:
- * 0 o.k. nothing needed
- * 1 Restart needed on this port
- * 2 Link came up
- */
-static int SkGePortCheckUpBcom(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int Port) /* Which port should be checked */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- int Done;
- SK_U16 Isrc; /* Interrupt source register */
- SK_U16 PhyStat; /* Phy Status Register */
- SK_U16 ResAb; /* Master/Slave resolution */
- SK_U16 Ctrl; /* Broadcom control flags */
-#ifdef DEBUG
- SK_U16 LpAb;
- SK_U16 ExtStat;
-#endif /* DEBUG */
- SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* Check for No HCD Link events (#10523) */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &Isrc);
-
-#ifdef xDEBUG
- if ((Isrc & ~(PHY_B_IS_HCT | PHY_B_IS_LCT) ==
- (PHY_B_IS_SCR_S_ER | PHY_B_IS_RRS_CHANGE | PHY_B_IS_LRS_CHANGE)) {
-
- SK_U32 Stat1, Stat2, Stat3;
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_MASK, &Stat1);
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "CheckUp1 - Stat: %x, Mask: %x",
- (void *)Isrc,
- (void *)Stat1);
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_CTRL, &Stat1);
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &Stat2);
- Stat1 = Stat1 << 16 | Stat2;
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_ADV, &Stat2);
- Stat3 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &Stat3);
- Stat2 = Stat2 << 16 | Stat3;
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "Ctrl/Stat: %x, AN Adv/LP: %x",
- (void *)Stat1,
- (void *)Stat2);
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_EXP, &Stat1);
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_EXT_STAT, &Stat2);
- Stat1 = Stat1 << 16 | Stat2;
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_CTRL, &Stat2);
- Stat3 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &Stat3);
- Stat2 = Stat2 << 16 | Stat3;
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "AN Exp/IEEE Ext: %x, 1000T Ctrl/Stat: %x",
- (void *)Stat1,
- (void *)Stat2);
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_CTRL, &Stat1);
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_STAT, &Stat2);
- Stat1 = Stat1 << 16 | Stat2;
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &Stat2);
- Stat3 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_STAT, &Stat3);
- Stat2 = Stat2 << 16 | Stat3;
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "PHY Ext Ctrl/Stat: %x, Aux Ctrl/Stat: %x",
- (void *)Stat1,
- (void *)Stat2);
- }
-#endif /* DEBUG */
-
- if ((Isrc & (PHY_B_IS_NO_HDCL /* | PHY_B_IS_NO_HDC */)) != 0) {
- /*
- * Workaround BCom Errata:
- * enable and disable loopback mode if "NO HCD" occurs.
- */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_CTRL, &Ctrl);
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_CTRL,
- (SK_U16)(Ctrl | PHY_CT_LOOP));
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_CTRL,
- (SK_U16)(Ctrl & ~PHY_CT_LOOP));
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("No HCD Link event, Port %d\n", Port));
-#ifdef xDEBUG
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "No HCD link event, port %d.",
- (void *)Port,
- (void *)NULL);
-#endif /* DEBUG */
- }
-
- /* Not obsolete: link status bit is latched to 0 and autoclearing! */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);
-
- if (pPrt->PHWLinkUp) {
- return(SK_HW_PS_NONE);
- }
-
-#ifdef xDEBUG
- {
- SK_U32 Stat1, Stat2, Stat3;
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_MASK, &Stat1);
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "CheckUp1a - Stat: %x, Mask: %x",
- (void *)Isrc,
- (void *)Stat1);
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_CTRL, &Stat1);
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);
- Stat1 = Stat1 << 16 | PhyStat;
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_ADV, &Stat2);
- Stat3 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &Stat3);
- Stat2 = Stat2 << 16 | Stat3;
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "Ctrl/Stat: %x, AN Adv/LP: %x",
- (void *)Stat1,
- (void *)Stat2);
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_EXP, &Stat1);
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_EXT_STAT, &Stat2);
- Stat1 = Stat1 << 16 | Stat2;
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_CTRL, &Stat2);
- Stat3 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);
- Stat2 = Stat2 << 16 | ResAb;
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "AN Exp/IEEE Ext: %x, 1000T Ctrl/Stat: %x",
- (void *)Stat1,
- (void *)Stat2);
-
- Stat1 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_CTRL, &Stat1);
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_STAT, &Stat2);
- Stat1 = Stat1 << 16 | Stat2;
- Stat2 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &Stat2);
- Stat3 = 0;
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_STAT, &Stat3);
- Stat2 = Stat2 << 16 | Stat3;
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "PHY Ext Ctrl/Stat: %x, Aux Ctrl/Stat: %x",
- (void *)Stat1,
- (void *)Stat2);
- }
-#endif /* DEBUG */
-
- /* Now wait for each port's link */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- AutoNeg = SK_FALSE;
- }
- else {
- AutoNeg = SK_TRUE;
- }
-
- /*
- * Here we usually can check whether the link is in sync and
- * auto-negotiation is done.
- */
-
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);
-
- SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg: %d, PhyStat: 0x%04x\n", AutoNeg, PhyStat));
-
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);
-
- if ((ResAb & PHY_B_1000S_MSF) != 0) {
- /* Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Master/Slave Fault port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- pPrt->PMSStatus = SK_MS_STAT_FAULT;
-
- return(SK_HW_PS_RESTART);
- }
-
- if ((PhyStat & PHY_ST_LSYNC) == 0) {
- return(SK_HW_PS_NONE);
- }
-
- pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
- SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg: %d, PhyStat: 0x%04x\n", AutoNeg, PhyStat));
-
- if (AutoNeg) {
- if ((PhyStat & PHY_ST_AN_OVER) != 0) {
- SkHWLinkUp(pAC, IoC, Port);
- Done = SkMacAutoNegDone(pAC, IoC, Port);
- if (Done != SK_AND_OK) {
-#ifdef DEBUG
- /* Get PHY parameters, for debugging only */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &LpAb);
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ExtStat);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg FAIL Port %d (LpAb %x, 1000TStat %x)\n",
- Port, LpAb, ExtStat));
-#endif /* DEBUG */
- return(SK_HW_PS_RESTART);
- }
- else {
-#ifdef xDEBUG
- /* Dummy read ISR to prevent extra link downs/ups */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &ExtStat);
-
- if ((ExtStat & ~(PHY_B_IS_HCT | PHY_B_IS_LCT)) != 0) {
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "CheckUp2 - Stat: %x",
- (void *)ExtStat,
- (void *)NULL);
- }
-#endif /* DEBUG */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg done Port %d\n", Port));
- return(SK_HW_PS_LINK);
- }
- }
- }
- else { /* !AutoNeg */
- /* Link is up and we don't need more. */
-#ifdef DEBUG
- if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("ERROR: Lipa auto detected on port %d\n", Port));
- }
-#endif /* DEBUG */
-
-#ifdef xDEBUG
- /* Dummy read ISR to prevent extra link downs/ups */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &ExtStat);
-
- if ((ExtStat & ~(PHY_B_IS_HCT | PHY_B_IS_LCT)) != 0) {
- CMSMPrintString(
- pAC->pConfigTable,
- MSG_TYPE_RUNTIME_INFO,
- "CheckUp3 - Stat: %x",
- (void *)ExtStat,
- (void *)NULL);
- }
-#endif /* DEBUG */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Link sync(GP), Port %d\n", Port));
- SkHWLinkUp(pAC, IoC, Port);
- return(SK_HW_PS_LINK);
- }
-
- return(SK_HW_PS_NONE);
-} /* SkGePortCheckUpBcom */
-
-
-/******************************************************************************
- *
- * SkGePortCheckUpGmac() - Check if the link is up on Marvell PHY
- *
- * return:
- * 0 o.k. nothing needed
- * 1 Restart needed on this port
- * 2 Link came up
- */
-static int SkGePortCheckUpGmac(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int Port) /* Which port should be checked */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- int Done;
- SK_U16 Isrc; /* Interrupt source */
- SK_U16 PhyStat; /* Phy Status */
- SK_U16 PhySpecStat;/* Phy Specific Status */
- SK_U16 ResAb; /* Master/Slave resolution */
- SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* Read PHY Interrupt Status */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_INT_STAT, &Isrc);
-
- if ((Isrc & PHY_M_IS_AN_COMPL) != 0) {
- /* TBD */
- }
-
- if ((Isrc & PHY_M_IS_DOWNSH_DET) != 0) {
- /* TBD */
- }
-
- if (pPrt->PHWLinkUp) {
- return(SK_HW_PS_NONE);
- }
-
- /* Now wait for each port's link */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- AutoNeg = SK_FALSE;
- }
- else {
- AutoNeg = SK_TRUE;
- }
-
- /* Read PHY Status */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_STAT, &PhyStat);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg: %d, PhyStat: 0x%04x\n", AutoNeg, PhyStat));
-
- SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);
-
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_1000T_STAT, &ResAb);
-
- if ((ResAb & PHY_B_1000S_MSF) != 0) {
- /* Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Master/Slave Fault port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- pPrt->PMSStatus = SK_MS_STAT_FAULT;
-
- return(SK_HW_PS_RESTART);
- }
-
- /* Read PHY Specific Status */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_PHY_STAT, &PhySpecStat);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg: %d, PhySpecStat: 0x%04x\n", AutoNeg, PhySpecStat));
-
- if ((PhySpecStat & PHY_M_PS_LINK_UP) == 0) {
- return(SK_HW_PS_NONE);
- }
-
- pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
- SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;
-
- pPrt->PCableLen = (SK_U8)((PhySpecStat & PHY_M_PS_CABLE_MSK) >> 7);
-
- if (AutoNeg) {
- /* Auto-Negotiation Over ? */
- if ((PhyStat & PHY_ST_AN_OVER) != 0) {
-
- SkHWLinkUp(pAC, IoC, Port);
-
- Done = SkMacAutoNegDone(pAC, IoC, Port);
-
- if (Done != SK_AND_OK) {
- return(SK_HW_PS_RESTART);
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg done Port %d\n", Port));
- return(SK_HW_PS_LINK);
- }
- }
- else { /* !AutoNeg */
- /* Link is up and we don't need more */
-#ifdef DEBUG
- if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("ERROR: Lipa auto detected on port %d\n", Port));
- }
-#endif /* DEBUG */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Link sync, Port %d\n", Port));
- SkHWLinkUp(pAC, IoC, Port);
-
- return(SK_HW_PS_LINK);
- }
-
- return(SK_HW_PS_NONE);
-} /* SkGePortCheckUpGmac */
-
-
-#ifdef OTHER_PHY
-/******************************************************************************
- *
- * SkGePortCheckUpLone() - Check if the link is up on Level One PHY
- *
- * return:
- * 0 o.k. nothing needed
- * 1 Restart needed on this port
- * 2 Link came up
- */
-static int SkGePortCheckUpLone(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int Port) /* Which port should be checked */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- int Done;
- SK_U16 Isrc; /* Interrupt source register */
- SK_U16 LpAb; /* Link Partner Ability */
- SK_U16 ExtStat; /* Extended Status Register */
- SK_U16 PhyStat; /* Phy Status Register */
- SK_U16 StatSum;
- SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
- SK_U8 NextMode; /* Next AutoSensing Mode */
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PHWLinkUp) {
- return(SK_HW_PS_NONE);
- }
-
- StatSum = pPrt->PIsave;
- pPrt->PIsave = 0;
-
- /* Now wait for each ports link */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- AutoNeg = SK_FALSE;
- }
- else {
- AutoNeg = SK_TRUE;
- }
-
- /*
- * here we usually can check whether the link is in sync and
- * auto-negotiation is done.
- */
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_STAT, &PhyStat);
- StatSum |= PhyStat;
-
- SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);
-
- if ((PhyStat & PHY_ST_LSYNC) == 0) {
- /* Save Auto-negotiation Done bit */
- pPrt->PIsave = (SK_U16)(StatSum & PHY_ST_AN_OVER);
-#ifdef DEBUG
- if ((pPrt->PIsave & PHY_ST_AN_OVER) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg done rescheduled Port %d\n", Port));
- }
-#endif /* DEBUG */
- return(SK_HW_PS_NONE);
- }
-
- if (AutoNeg) {
- if ((StatSum & PHY_ST_AN_OVER) != 0) {
- SkHWLinkUp(pAC, IoC, Port);
- Done = SkMacAutoNegDone(pAC, IoC, Port);
- if (Done != SK_AND_OK) {
- /* Get PHY parameters, for debugging only */
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_AUNE_LP, &LpAb);
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_1000T_STAT, &ExtStat);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg FAIL Port %d (LpAb %x, 1000TStat %x)\n",
- Port, LpAb, ExtStat));
-
- /* Try next possible mode */
- NextMode = SkHWSenseGetNext(pAC, IoC, Port);
- SkHWLinkDown(pAC, IoC, Port);
- if (Done == SK_AND_DUP_CAP) {
- /* GoTo next mode */
- SkHWSenseSetNext(pAC, IoC, Port, NextMode);
- }
-
- return(SK_HW_PS_RESTART);
-
- }
- else {
- /*
- * Dummy Read interrupt status to prevent
- * extra link down/ups
- */
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_INT_STAT, &ExtStat);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNeg done Port %d\n", Port));
- return(SK_HW_PS_LINK);
- }
- }
-
- /* AutoNeg not done, but HW link is up. Check for timeouts */
- pPrt->PAutoNegTimeOut++;
- if (pPrt->PAutoNegTimeOut >= SK_AND_MAX_TO) {
- /* Timeout occured */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("AutoNeg timeout Port %d\n", Port));
- if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
- pPrt->PLipaAutoNeg != SK_LIPA_AUTO) {
- /* Set Link manually up */
- SkHWSenseSetNext(pAC, IoC, Port, SK_LMODE_FULL);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Set manual full duplex Port %d\n", Port));
- }
-
- /* Do the restart */
- return(SK_HW_PS_RESTART);
- }
- }
- else {
- /* Link is up and we don't need more */
-#ifdef DEBUG
- if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("ERROR: Lipa auto detected on port %d\n", Port));
- }
-#endif /* DEBUG */
-
- /*
- * Dummy Read interrupt status to prevent
- * extra link down/ups
- */
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_INT_STAT, &ExtStat);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("Link sync(GP), Port %d\n", Port));
- SkHWLinkUp(pAC, IoC, Port);
- return(SK_HW_PS_LINK);
- }
-
- return(SK_HW_PS_NONE);
-} /* SkGePortCheckUpLone */
-
-
-/******************************************************************************
- *
- * SkGePortCheckUpNat() - Check if the link is up on National PHY
- *
- * return:
- * 0 o.k. nothing needed
- * 1 Restart needed on this port
- * 2 Link came up
- */
-static int SkGePortCheckUpNat(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO Context */
-int Port) /* Which port should be checked */
-{
- /* todo: National */
- return(SK_HW_PS_NONE);
-} /* SkGePortCheckUpNat */
-#endif /* OTHER_PHY */
-
-
-/******************************************************************************
- *
- * SkGeSirqEvent() - Event Service Routine
- *
- * Description:
- *
- * Notes:
- */
-int SkGeSirqEvent(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* Io Context */
-SK_U32 Event, /* Module specific Event */
-SK_EVPARA Para) /* Event specific Parameter */
-{
- SK_U64 Octets;
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- SK_U32 Port;
- SK_U32 Time;
- unsigned Len;
- int PortStat;
- SK_U8 Val8;
-
- Port = Para.Para32[0];
- pPrt = &pAC->GIni.GP[Port];
-
- switch (Event) {
- case SK_HWEV_WATIM:
- /* Check whether port came up */
- PortStat = SkGePortCheckUp(pAC, IoC, Port);
-
- switch (PortStat) {
- case SK_HW_PS_RESTART:
- if (pPrt->PHWLinkUp) {
- /*
- * Set Link to down.
- */
- SkHWLinkDown(pAC, IoC, Port);
-
- /*
- * Signal directly to RLMT to ensure correct
- * sequence of SWITCH and RESET event.
- */
- SkRlmtEvent(pAC, IoC, SK_RLMT_LINK_DOWN, Para);
- }
-
- /* Restart needed */
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Para);
- break;
-
- case SK_HW_PS_LINK:
- /* Signal to RLMT */
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_UP, Para);
- break;
-
- }
-
- /* Start again the check Timer */
- if (pPrt->PHWLinkUp) {
- Time = SK_WA_ACT_TIME;
- }
- else {
- Time = SK_WA_INA_TIME;
- }
-
- /* Todo: still needed for non-XMAC PHYs??? */
- /* Start workaround Errata #2 timer */
- SkTimerStart(pAC, IoC, &pPrt->PWaTimer, Time,
- SKGE_HWAC, SK_HWEV_WATIM, Para);
- break;
-
- case SK_HWEV_PORT_START:
- if (pPrt->PHWLinkUp) {
- /*
- * Signal directly to RLMT to ensure correct
- * sequence of SWITCH and RESET event.
- */
- SkRlmtEvent(pAC, IoC, SK_RLMT_LINK_DOWN, Para);
- }
-
- SkHWLinkDown(pAC, IoC, Port);
-
- /* Schedule Port RESET */
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Para);
-
- /* Start workaround Errata #2 timer */
- SkTimerStart(pAC, IoC, &pPrt->PWaTimer, SK_WA_INA_TIME,
- SKGE_HWAC, SK_HWEV_WATIM, Para);
- break;
-
- case SK_HWEV_PORT_STOP:
- if (pPrt->PHWLinkUp) {
- /*
- * Signal directly to RLMT to ensure correct
- * sequence of SWITCH and RESET event.
- */
- SkRlmtEvent(pAC, IoC, SK_RLMT_LINK_DOWN, Para);
- }
-
- /* Stop Workaround Timer */
- SkTimerStop(pAC, IoC, &pPrt->PWaTimer);
-
- SkHWLinkDown(pAC, IoC, Port);
- break;
-
- case SK_HWEV_UPDATE_STAT:
- /* We do NOT need to update any statistics */
- break;
-
- case SK_HWEV_CLEAR_STAT:
- /* We do NOT need to clear any statistics */
- for (Port = 0; Port < (SK_U32)pAC->GIni.GIMacsFound; Port++) {
- pPrt->PPrevRx = 0;
- pPrt->PPrevFcs = 0;
- pPrt->PPrevShorts = 0;
- }
- break;
-
- case SK_HWEV_SET_LMODE:
- Val8 = (SK_U8)Para.Para32[1];
- if (pPrt->PLinkModeConf != Val8) {
- /* Set New link mode */
- pPrt->PLinkModeConf = Val8;
-
- /* Restart Port */
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
- }
- break;
-
- case SK_HWEV_SET_FLOWMODE:
- Val8 = (SK_U8)Para.Para32[1];
- if (pPrt->PFlowCtrlMode != Val8) {
- /* Set New Flow Control mode */
- pPrt->PFlowCtrlMode = Val8;
-
- /* Restart Port */
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
- }
- break;
-
- case SK_HWEV_SET_ROLE:
- /* not possible for fiber */
- if (!pAC->GIni.GICopperType) {
- break;
- }
- Val8 = (SK_U8)Para.Para32[1];
- if (pPrt->PMSMode != Val8) {
- /* Set New link mode */
- pPrt->PMSMode = Val8;
-
- /* Restart Port */
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
- }
- break;
-
- case SK_HWEV_SET_SPEED:
- if (pPrt->PhyType != SK_PHY_MARV_COPPER) {
- break;
- }
- Val8 = (SK_U8)Para.Para32[1];
- if (pPrt->PLinkSpeed != Val8) {
- /* Set New Speed parameter */
- pPrt->PLinkSpeed = Val8;
-
- /* Restart Port */
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
- }
- break;
-
- case SK_HWEV_HALFDUP_CHK:
- /*
- * half duplex hangup workaround.
- * See packet arbiter timeout interrupt for description
- */
- pPrt->HalfDupTimerActive = SK_FALSE;
- if (pPrt->PLinkModeStatus == SK_LMODE_STAT_HALF ||
- pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOHALF) {
-
- Len = sizeof(SK_U64);
- SkPnmiGetVar(pAC, IoC, OID_SKGE_STAT_TX_OCTETS, (char *)&Octets,
- &Len, (SK_U32)SK_PNMI_PORT_PHYS2INST(pAC, Port),
- pAC->Rlmt.Port[Port].Net->NetNumber);
-
- if (pPrt->LastOctets == Octets) {
- /* Tx hanging, a FIFO flush restarts it */
- SkMacFlushTxFifo(pAC, IoC, Port);
- }
- }
- break;
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_SIRQ_E001, SKERR_SIRQ_E001MSG);
- break;
- }
-
- return(0);
-} /* SkGeSirqEvent */
-
-
-/******************************************************************************
- *
- * SkPhyIsrBcom() - PHY interrupt service routine
- *
- * Description: handles all interrupts from BCom PHY
- *
- * Returns: N/A
- */
-static void SkPhyIsrBcom(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* Io Context */
-int Port, /* Port Num = PHY Num */
-SK_U16 IStatus) /* Interrupt Status */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- SK_EVPARA Para;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if ((IStatus & PHY_B_IS_PSE) != 0) {
- /* Incorrectable pair swap error */
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E022,
- SKERR_SIRQ_E022MSG);
- }
-
- if ((IStatus & (PHY_B_IS_AN_PR | PHY_B_IS_LST_CHANGE)) != 0) {
- Para.Para32[0] = (SK_U32)Port;
-
- SkHWLinkDown(pAC, IoC, Port);
-
- /* Signal to RLMT */
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
-
- /* Start workaround Errata #2 timer */
- SkTimerStart(pAC, IoC, &pPrt->PWaTimer, SK_WA_INA_TIME,
- SKGE_HWAC, SK_HWEV_WATIM, Para);
- }
-
-} /* SkPhyIsrBcom */
-
-
-/******************************************************************************
- *
- * SkPhyIsrGmac() - PHY interrupt service routine
- *
- * Description: handles all interrupts from Marvell PHY
- *
- * Returns: N/A
- */
-static void SkPhyIsrGmac(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* Io Context */
-int Port, /* Port Num = PHY Num */
-SK_U16 IStatus) /* Interrupt Status */
-{
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
- SK_EVPARA Para;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if ((IStatus & (PHY_M_IS_AN_PR | PHY_M_IS_LST_CHANGE)) != 0) {
- Para.Para32[0] = (SK_U32)Port;
-
- SkHWLinkDown(pAC, IoC, Port);
-
- /* Signal to RLMT */
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
- if ((IStatus & PHY_M_IS_AN_ERROR) != 0) {
- /* Auto-Negotiation Error */
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E023, SKERR_SIRQ_E023MSG);
- }
-
- if ((IStatus & PHY_M_IS_LSP_CHANGE) != 0) {
- /* TBD */
- }
-
- if ((IStatus & PHY_M_IS_FIFO_ERROR) != 0) {
- /* FIFO Overflow/Underrun Error */
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E024, SKERR_SIRQ_E024MSG);
- }
-} /* SkPhyIsrGmac */
-
-
-#ifdef OTHER_PHY
-/******************************************************************************
- *
- * SkPhyIsrLone() - PHY interrupt service routine
- *
- * Description: handles all interrupts from LONE PHY
- *
- * Returns: N/A
- */
-static void SkPhyIsrLone(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* Io Context */
-int Port, /* Port Num = PHY Num */
-SK_U16 IStatus) /* Interrupt Status */
-{
- SK_EVPARA Para;
-
- if (IStatus & (PHY_L_IS_DUP | PHY_L_IS_ISOL)) {
- SkHWLinkDown(pAC, IoC, Port);
-
- /* Signal to RLMT */
- Para.Para32[0] = (SK_U32)Port;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
- }
-
-} /* SkPhyIsrLone */
-#endif /* OTHER_PHY */
-
-/* End of File */
+/******************************************************************************
+ *
+ * Name: skgesirq.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Special IRQ module
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skgesirq.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.83 2003/02/05 15:10:59 rschmidt
+ * Fixed setting of PLinkSpeedUsed in SkHWLinkUp() when
+ * auto-negotiation is disabled.
+ * Editorial changes.
+ *
+ * Revision 1.82 2003/01/29 13:34:33 rschmidt
+ * Added some typecasts to avoid compiler warnings.
+ *
+ * Revision 1.81 2002/12/05 10:49:51 rschmidt
+ * Fixed missing Link Down Event for fiber (Bug Id #10768)
+ * Added reading of cable length when link is up
+ * Removed testing of unused error bits in PHY ISR
+ * Editorial changes.
+ *
+ * Revision 1.80 2002/11/12 17:15:21 rschmidt
+ * Replaced SkPnmiGetVar() by ...MacStatistic() in SkMacParity().
+ * Editorial changes.
+ *
+ * Revision 1.79 2002/10/14 15:14:51 rschmidt
+ * Changed clearing of IS_M1_PAR_ERR (MAC 1 Parity Error) in
+ * SkMacParity() depending on GIChipRev (HW-Bug #8).
+ * Added error messages for GPHY Auto-Negotiation Error and
+ * FIFO Overflow/Underrun in SkPhyIsrGmac().
+ * Editorial changes.
+ *
+ * Revision 1.78 2002/10/10 15:54:29 mkarl
+ * changes for PLinkSpeedUsed
+ *
+ * Revision 1.77 2002/09/12 08:58:51 rwahl
+ * Retrieve counters needed for XMAC errata workarounds directly because
+ * PNMI returns corrected counter values (e.g. #10620).
+ *
+ * Revision 1.76 2002/08/16 15:21:54 rschmidt
+ * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis.
+ * Replaced wrong 1st para pAC with IoC in SK_IN/OUT macros.
+ * Editorial changes.
+ *
+ * Revision 1.75 2002/08/12 13:50:47 rschmidt
+ * Changed clearing of IS_M1_PAR_ERR (MAC 1 Parity Error) in
+ * SkMacParity() by GMF_CLI_TX_FC instead of GMF_CLI_TX_PE (HW-Bug #8).
+ * Added clearing of IS_IRQ_TIST_OV and IS_IRQ_SENSOR in SkGeHwErr().
+ * Corrected handling of Link Up and Auto-Negotiation Over for GPHY.
+ * in SkGePortCheckUpGmac().
+ * Editorial changes.
+ *
+ * Revision 1.74 2002/08/08 16:17:04 rschmidt
+ * Added PhyType check for SK_HWEV_SET_ROLE event (copper only)
+ * Changed Link Up check reading PHY Specific Status (YUKON)
+ * Editorial changes
+ *
+ * Revision 1.73 2002/07/15 18:36:53 rwahl
+ * Editorial changes.
+ *
+ * Revision 1.72 2002/07/15 15:46:26 rschmidt
+ * Added new event: SK_HWEV_SET_SPEED
+ * Editorial changes
+ *
+ * Revision 1.71 2002/06/10 09:34:19 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.70 2002/06/05 08:29:18 rschmidt
+ * SkXmRxTxEnable() replaced by SkMacRxTxEnable().
+ * Editorial changes.
+ *
+ * Revision 1.69 2002/04/25 13:03:49 rschmidt
+ * Changes for handling YUKON.
+ * Use of #ifdef OTHER_PHY to eliminate code for unused Phy types.
+ * Replaced all XMAC-access macros by functions: SkMacRxTxDisable(),
+ * SkMacIrqDisable().
+ * Added handling for GMAC FIFO in SkMacParity().
+ * Replaced all SkXm...() functions with SkMac...() to handle also
+ * YUKON's GMAC.
+ * Macros for XMAC PHY access PHY_READ(), PHY_WRITE() replaced
+ * by functions SkXmPhyRead(), SkXmPhyWrite().
+ * Disabling all PHY interrupts moved to SkMacIrqDisable().
+ * Added handling for GPHY IRQ in SkGeSirqIsr().
+ * Removed status parameter from MAC IRQ handler SkMacIrq().
+ * Added SkGePortCheckUpGmac(), SkPhyIsrGmac() for GMAC.
+ * Editorial changes
+ *
+ * Revision 1.68 2002/02/26 15:24:53 rwahl
+ * Fix: no link with manual configuration (#10673). The previous fix for
+ * #10639 was removed. So for RLMT mode = CLS the RLMT may switch to
+ * misconfigured port. It should not occur for the other RLMT modes.
+ *
+ * Revision 1.67 2001/11/20 09:19:58 rwahl
+ * Reworked bugfix #10639 (no dependency to RLMT mode).
+ *
+ * Revision 1.66 2001/10/26 07:52:53 afischer
+ * Port switching bug in `check local link` mode
+ *
+ * Revision 1.65 2001/02/23 13:41:51 gklug
+ * fix: PHYS2INST should be used correctly for Dual Net operation
+ * chg: do no longer work with older PNMI
+ *
+ * Revision 1.64 2001/02/15 11:27:04 rassmann
+ * Working with RLMT v1 if SK_MAX_NETS undefined.
+ *
+ * Revision 1.63 2001/02/06 10:44:23 mkunz
+ * - NetIndex added to interface functions of pnmi V4 with dual net support
+ *
+ * Revision 1.62 2001/01/31 15:31:41 gklug
+ * fix: problem with autosensing an SR8800 switch
+ *
+ * Revision 1.61 2000/11/09 11:30:09 rassmann
+ * WA: Waiting after releasing reset until BCom chip is accessible.
+ *
+ * Revision 1.60 2000/10/18 12:37:48 cgoos
+ * Reinserted the comment for version 1.56.
+ *
+ * Revision 1.59 2000/10/18 12:22:20 cgoos
+ * Added workaround for half duplex hangup.
+ *
+ * Revision 1.58 2000/09/28 13:06:04 gklug
+ * fix: BCom may NOT be touched if XMAC is in RESET state
+ *
+ * Revision 1.57 2000/09/08 12:38:39 cgoos
+ * Added forgotten variable declaration.
+ *
+ * Revision 1.56 2000/09/08 08:12:13 cgoos
+ * Changed handling of parity errors in SkGeHwErr (correct reset of error).
+ *
+ * Revision 1.55 2000/06/19 08:36:25 cgoos
+ * Changed comment.
+ *
+ * Revision 1.54 2000/05/22 08:45:57 malthoff
+ * Fix: #10523 is valid for all BCom PHYs.
+ *
+ * Revision 1.53 2000/05/19 10:20:30 cgoos
+ * Removed Solaris debug output code.
+ *
+ * Revision 1.52 2000/05/19 10:19:37 cgoos
+ * Added PHY state check in HWLinkDown.
+ * Move PHY interrupt code to IS_EXT_REG case in SkGeSirqIsr.
+ *
+ * Revision 1.51 2000/05/18 05:56:20 cgoos
+ * Fixed typo.
+ *
+ * Revision 1.50 2000/05/17 12:49:49 malthoff
+ * Fixes BCom link bugs (#10523).
+ *
+ * Revision 1.49 1999/12/17 11:02:50 gklug
+ * fix: read PHY_STAT of Broadcom chip more often to assure good status
+ *
+ * Revision 1.48 1999/12/06 10:01:17 cgoos
+ * Added SET function for Role.
+ *
+ * Revision 1.47 1999/11/22 13:34:24 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.46 1999/09/16 10:30:07 cgoos
+ * Removed debugging output statement from Linux.
+ *
+ * Revision 1.45 1999/09/16 07:32:55 cgoos
+ * Fixed dual-port copperfield bug (PHY_READ from resetted port).
+ * Removed some unused variables.
+ *
+ * Revision 1.44 1999/08/03 15:25:04 cgoos
+ * Removed workaround for disabled interrupts in half duplex mode.
+ *
+ * Revision 1.43 1999/08/03 14:27:58 cgoos
+ * Removed SENSE mode code from SkGePortCheckUpBcom.
+ *
+ * Revision 1.42 1999/07/26 09:16:54 cgoos
+ * Added some typecasts to avoid compiler warnings.
+ *
+ * Revision 1.41 1999/05/19 07:28:59 cgoos
+ * Changes for 1000Base-T.
+ *
+ * Revision 1.40 1999/04/08 13:59:39 gklug
+ * fix: problem with 3Com switches endless RESTARTs
+ *
+ * Revision 1.39 1999/03/08 10:10:52 gklug
+ * fix: AutoSensing did switch to next mode even if LiPa indicated offline
+ *
+ * Revision 1.38 1999/03/08 09:49:03 gklug
+ * fix: Bug using pAC instead of IoC, causing AIX problems
+ * fix: change compare for Linux compiler bug workaround
+ *
+ * Revision 1.37 1999/01/28 14:51:33 gklug
+ * fix: monitor for autosensing and extra RESETS the RX on wire counters
+ *
+ * Revision 1.36 1999/01/22 09:19:55 gklug
+ * fix: Init DupMode and InitPauseMd are now called in RxTxEnable
+ *
+ * Revision 1.35 1998/12/11 15:22:59 gklug
+ * chg: autosensing: check for receive if manual mode was guessed
+ * chg: simplified workaround for XMAC errata
+ * chg: wait additional 100 ms before link goes up.
+ * chg: autoneg timeout to 600 ms
+ * chg: restart autoneg even if configured to autonegotiation
+ *
+ * Revision 1.34 1998/12/10 10:33:14 gklug
+ * add: more debug messages
+ * fix: do a new InitPhy if link went down (AutoSensing problem)
+ * chg: Check for zero shorts if link is NOT up
+ * chg: reset Port if link goes down
+ * chg: wait additional 100 ms when link comes up to check shorts
+ * fix: dummy read extended autoneg status to prevent link going down immediately
+ *
+ * Revision 1.33 1998/12/07 12:18:29 gklug
+ * add: refinement of autosense mode: take into account the autoneg cap of LiPa
+ *
+ * Revision 1.32 1998/12/07 07:11:21 gklug
+ * fix: compiler warning
+ *
+ * Revision 1.31 1998/12/02 09:29:05 gklug
+ * fix: WA XMAC Errata: FCSCt check was not correct.
+ * fix: WA XMAC Errata: Prec Counter were NOT updated in case of short checks.
+ * fix: Clear Stat : now clears the Prev counters of all known Ports
+ *
+ * Revision 1.30 1998/12/01 10:54:15 gklug
+ * dd: workaround for XMAC errata changed. Check RX count and CRC err Count, too.
+ *
+ * Revision 1.29 1998/12/01 10:01:53 gklug
+ * fix: if MAC IRQ occurs during port down, this will be handled correctly
+ *
+ * Revision 1.28 1998/11/26 16:22:11 gklug
+ * fix: bug in autosense if manual modes are used
+ *
+ * Revision 1.27 1998/11/26 15:50:06 gklug
+ * fix: PNMI needs to set PLinkModeConf
+ *
+ * Revision 1.26 1998/11/26 14:51:58 gklug
+ * add: AutoSensing functionalty
+ *
+ * Revision 1.25 1998/11/26 07:34:37 gklug
+ * fix: Init PrevShorts when restarting port due to Link connection
+ *
+ * Revision 1.24 1998/11/25 10:57:32 gklug
+ * fix: remove unreferenced local vars
+ *
+ * Revision 1.23 1998/11/25 08:26:40 gklug
+ * fix: don't do a RESET on a starting or stopping port
+ *
+ * Revision 1.22 1998/11/24 13:29:44 gklug
+ * add: Workaround for MAC parity errata
+ *
+ * Revision 1.21 1998/11/18 15:31:06 gklug
+ * fix: lint bugs
+ *
+ * Revision 1.20 1998/11/18 12:58:54 gklug
+ * fix: use PNMI query instead of hardware access
+ *
+ * Revision 1.19 1998/11/18 12:54:55 gklug
+ * chg: add new workaround for XMAC Errata
+ * add: short event counter monitoring on active link too
+ *
+ * Revision 1.18 1998/11/13 14:27:41 malthoff
+ * Bug Fix: Packet Arbiter Timeout was not cleared correctly
+ * for timeout on TX1 and TX2.
+ *
+ * Revision 1.17 1998/11/04 07:01:59 cgoos
+ * Moved HW link poll sequence.
+ * Added call to SkXmRxTxEnable.
+ *
+ * Revision 1.16 1998/11/03 13:46:03 gklug
+ * add: functionality of SET_LMODE and SET_FLOW_MODE
+ * fix: send RLMT LinkDown event when Port stop is given with LinkUp
+ *
+ * Revision 1.15 1998/11/03 12:56:47 gklug
+ * fix: Needs more events
+ *
+ * Revision 1.14 1998/10/30 07:36:35 gklug
+ * rmv: unnecessary code
+ *
+ * Revision 1.13 1998/10/29 15:21:57 gklug
+ * add: Poll link feature for activating HW link
+ * fix: Deactivate HWLink when Port STOP is given
+ *
+ * Revision 1.12 1998/10/28 07:38:57 cgoos
+ * Checking link status at begin of SkHWLinkUp.
+ *
+ * Revision 1.11 1998/10/22 09:46:50 gklug
+ * fix SysKonnectFileId typo
+ *
+ * Revision 1.10 1998/10/14 13:57:47 gklug
+ * add: Port start/stop event
+ *
+ * Revision 1.9 1998/10/14 05:48:29 cgoos
+ * Added definition for Para.
+ *
+ * Revision 1.8 1998/10/14 05:40:09 gklug
+ * add: Hardware Linkup signal used
+ *
+ * Revision 1.7 1998/10/09 06:50:20 malthoff
+ * Remove ID_sccs by SysKonnectFileId.
+ *
+ * Revision 1.6 1998/10/08 09:11:49 gklug
+ * add: clear IRQ commands
+ *
+ * Revision 1.5 1998/10/02 14:27:35 cgoos
+ * Fixed some typos and wrong event names.
+ *
+ * Revision 1.4 1998/10/02 06:24:17 gklug
+ * add: HW error function
+ * fix: OUT macros
+ *
+ * Revision 1.3 1998/10/01 07:03:00 gklug
+ * add: ISR for the usual interrupt source register
+ *
+ * Revision 1.2 1998/09/03 13:50:33 gklug
+ * add: function prototypes
+ *
+ * Revision 1.1 1998/08/27 11:50:21 gklug
+ * initial revision
+ *
+ *
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+/*
+ * Special Interrupt handler
+ *
+ * The following abstract should show how this module is included
+ * in the driver path:
+ *
+ * In the ISR of the driver the bits for frame transmission complete and
+ * for receive complete are checked and handled by the driver itself.
+ * The bits of the slow path mask are checked after that and then the
+ * entry into the so-called "slow path" is prepared. It is an implementors
+ * decision whether this is executed directly or just scheduled by
+ * disabling the mask. In the interrupt service routine some events may be
+ * generated, so it would be a good idea to call the EventDispatcher
+ * right after this ISR.
+ *
+ * The Interrupt source register of the adapter is NOT read by this module.
+ * SO if the drivers implementor needs a while loop around the
+ * slow data paths interrupt bits, he needs to call the SkGeSirqIsr() for
+ * each loop entered.
+ *
+ * However, the MAC Interrupt status registers are read in a while loop.
+ *
+ */
+
+static const char SysKonnectFileId[] =
+ "$Id: skgesirq.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $" ;
+
+#include "h/skdrv1st.h" /* Driver Specific Definitions */
+#include "h/skgepnmi.h" /* PNMI Definitions */
+#include "h/skrlmt.h" /* RLMT Definitions */
+#include "h/skdrv2nd.h" /* Adapter Control and Driver specific Def. */
+
+/* local function prototypes */
+static int SkGePortCheckUpXmac(SK_AC*, SK_IOC, int);
+static int SkGePortCheckUpBcom(SK_AC*, SK_IOC, int);
+static int SkGePortCheckUpGmac(SK_AC*, SK_IOC, int);
+static void SkPhyIsrBcom(SK_AC*, SK_IOC, int, SK_U16);
+static void SkPhyIsrGmac(SK_AC*, SK_IOC, int, SK_U16);
+#ifdef OTHER_PHY
+static int SkGePortCheckUpLone(SK_AC*, SK_IOC, int);
+static int SkGePortCheckUpNat(SK_AC*, SK_IOC, int);
+static void SkPhyIsrLone(SK_AC*, SK_IOC, int, SK_U16);
+#endif /* OTHER_PHY */
+
+/*
+ * array of Rx counter from XMAC which are checked
+ * in AutoSense mode to check whether a link is not able to auto-negotiate.
+ */
+static const SK_U16 SkGeRxRegs[]= {
+ XM_RXF_64B,
+ XM_RXF_127B,
+ XM_RXF_255B,
+ XM_RXF_511B,
+ XM_RXF_1023B,
+ XM_RXF_MAX_SZ
+} ;
+
+#ifdef __C2MAN__
+/*
+ * Special IRQ function
+ *
+ * General Description:
+ *
+ */
+intro()
+{}
+#endif
+
+/* Define return codes of SkGePortCheckUp and CheckShort */
+#define SK_HW_PS_NONE 0 /* No action needed */
+#define SK_HW_PS_RESTART 1 /* Restart needed */
+#define SK_HW_PS_LINK 2 /* Link Up actions needed */
+
+/******************************************************************************
+ *
+ * SkHWInitDefSense() - Default Autosensing mode initialization
+ *
+ * Description: sets the PLinkMode for HWInit
+ *
+ * Returns: N/A
+ */
+static void SkHWInitDefSense(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ pPrt->PAutoNegTimeOut = 0;
+
+ if (pPrt->PLinkModeConf != SK_LMODE_AUTOSENSE) {
+ pPrt->PLinkMode = pPrt->PLinkModeConf;
+ return;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("AutoSensing: First mode %d on Port %d\n",
+ (int)SK_LMODE_AUTOFULL, Port));
+
+ pPrt->PLinkMode = SK_LMODE_AUTOFULL;
+
+ return;
+} /* SkHWInitDefSense */
+
+
+/******************************************************************************
+ *
+ * SkHWSenseGetNext() - Get Next Autosensing Mode
+ *
+ * Description: gets the appropriate next mode
+ *
+ * Note:
+ *
+ */
+SK_U8 SkHWSenseGetNext(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ pPrt->PAutoNegTimeOut = 0;
+
+ if (pPrt->PLinkModeConf != SK_LMODE_AUTOSENSE) {
+ /* Leave all as configured */
+ return(pPrt->PLinkModeConf);
+ }
+
+ if (pPrt->PLinkMode == SK_LMODE_AUTOFULL) {
+ /* Return next mode AUTOBOTH */
+ return(SK_LMODE_AUTOBOTH);
+ }
+
+ /* Return default autofull */
+ return(SK_LMODE_AUTOFULL);
+} /* SkHWSenseGetNext */
+
+
+/******************************************************************************
+ *
+ * SkHWSenseSetNext() - Autosensing Set next mode
+ *
+ * Description: sets the appropriate next mode
+ *
+ * Returns: N/A
+ */
+void SkHWSenseSetNext(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_U8 NewMode) /* New Mode to be written in sense mode */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ pPrt->PAutoNegTimeOut = 0;
+
+ if (pPrt->PLinkModeConf != SK_LMODE_AUTOSENSE) {
+ return;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("AutoSensing: next mode %d on Port %d\n",
+ (int)NewMode, Port));
+
+ pPrt->PLinkMode = NewMode;
+
+ return;
+} /* SkHWSenseSetNext */
+
+
+/******************************************************************************
+ *
+ * SkHWLinkDown() - Link Down handling
+ *
+ * Description: handles the hardware link down signal
+ *
+ * Returns: N/A
+ */
+void SkHWLinkDown(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Disable all MAC interrupts */
+ SkMacIrqDisable(pAC, IoC, Port);
+
+ /* Disable Receiver and Transmitter */
+ SkMacRxTxDisable(pAC, IoC, Port);
+
+ /* Init default sense mode */
+ SkHWInitDefSense(pAC, IoC, Port);
+
+ if (!pPrt->PHWLinkUp) {
+ return;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Link down Port %d\n", Port));
+
+ /* Set Link to DOWN */
+ pPrt->PHWLinkUp = SK_FALSE;
+
+ /* Reset Port stati */
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_INDETERMINATED;
+
+ /* Re-init Phy especially when the AutoSense default is set now */
+ SkMacInitPhy(pAC, IoC, Port, SK_FALSE);
+
+ /* GP0: used for workaround of Rev. C Errata 2 */
+
+ /* Do NOT signal to RLMT */
+
+ /* Do NOT start the timer here */
+} /* SkHWLinkDown */
+
+
+/******************************************************************************
+ *
+ * SkHWLinkUp() - Link Up handling
+ *
+ * Description: handles the hardware link up signal
+ *
+ * Returns: N/A
+ */
+void SkHWLinkUp(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PHWLinkUp) {
+ /* We do NOT need to proceed on active link */
+ return;
+ }
+
+ pPrt->PHWLinkUp = SK_TRUE;
+ pPrt->PAutoNegFail = SK_FALSE;
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
+
+ if (pPrt->PLinkMode != SK_LMODE_AUTOHALF &&
+ pPrt->PLinkMode != SK_LMODE_AUTOFULL &&
+ pPrt->PLinkMode != SK_LMODE_AUTOBOTH) {
+ /* Link is up and no Auto-negotiation should be done */
+
+ /* Link speed should be the configured one */
+ switch (pPrt->PLinkSpeed) {
+ case SK_LSPEED_AUTO:
+ /* default is 1000 Mbps */
+ case SK_LSPEED_1000MBPS:
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
+ break;
+ case SK_LSPEED_100MBPS:
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_100MBPS;
+ break;
+ case SK_LSPEED_10MBPS:
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_10MBPS;
+ break;
+ }
+
+ /* Set Link Mode Status */
+ if (pPrt->PLinkMode == SK_LMODE_FULL) {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_FULL;
+ }
+ else {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_HALF;
+ }
+
+ /* No flow control without auto-negotiation */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
+
+ /* enable Rx/Tx */
+ SkMacRxTxEnable(pAC, IoC, Port);
+ }
+} /* SkHWLinkUp */
+
+
+/******************************************************************************
+ *
+ * SkMacParity() - MAC parity workaround
+ *
+ * Description: handles MAC parity errors correctly
+ *
+ * Returns: N/A
+ */
+static void SkMacParity(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index of the port failed */
+{
+ SK_EVPARA Para;
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ SK_U32 TxMax; /* TxMax Counter */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Clear IRQ Tx Parity Error */
+ if (pAC->GIni.GIGenesis) {
+ SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_CLR_PERR);
+ }
+ else {
+ /* HW-Bug #8: cleared by GMF_CLI_TX_FC instead of GMF_CLI_TX_PE */
+ SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T),
+ (SK_U8)((pAC->GIni.GIChipRev == 0) ? GMF_CLI_TX_FC : GMF_CLI_TX_PE));
+ }
+
+ if (pPrt->PCheckPar) {
+ if (Port == MAC_1) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E016, SKERR_SIRQ_E016MSG);
+ }
+ else {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E017, SKERR_SIRQ_E017MSG);
+ }
+ Para.Para64 = Port;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = Port;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+
+ return;
+ }
+
+ /* Check whether frames with a size of 1k were sent */
+ if (pAC->GIni.GIGenesis) {
+ /* Snap statistic counters */
+ (void)SkXmUpdateStats(pAC, IoC, Port);
+
+ (void)SkXmMacStatistic(pAC, IoC, Port, XM_TXF_MAX_SZ, &TxMax);
+ }
+ else {
+ (void)SkGmMacStatistic(pAC, IoC, Port, GM_TXF_1518B, &TxMax);
+ }
+
+ if (TxMax > 0) {
+ /* From now on check the parity */
+ pPrt->PCheckPar = SK_TRUE;
+ }
+} /* SkMacParity */
+
+
+/******************************************************************************
+ *
+ * SkGeHwErr() - Hardware Error service routine
+ *
+ * Description: handles all HW Error interrupts
+ *
+ * Returns: N/A
+ */
+static void SkGeHwErr(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+SK_U32 HwStatus) /* Interrupt status word */
+{
+ SK_EVPARA Para;
+ SK_U16 Word;
+
+ if ((HwStatus & (IS_IRQ_MST_ERR | IS_IRQ_STAT)) != 0) {
+ /* PCI Errors occured */
+ if ((HwStatus & IS_IRQ_STAT) != 0) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E013, SKERR_SIRQ_E013MSG);
+ }
+ else {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E012, SKERR_SIRQ_E012MSG);
+ }
+
+ /* Reset all bits in the PCI STATUS register */
+ SK_IN16(IoC, PCI_C(PCI_STATUS), &Word);
+
+ SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+ SK_OUT16(IoC, PCI_C(PCI_STATUS), Word | PCI_ERRBITS);
+ SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
+
+ Para.Para64 = 0;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_ADAP_FAIL, Para);
+ }
+
+ if (pAC->GIni.GIGenesis) {
+ if ((HwStatus & IS_NO_STAT_M1) != 0) {
+ /* Ignore it */
+ /* This situation is also indicated in the descriptor */
+ SK_OUT16(IoC, MR_ADDR(MAC_1, RX_MFF_CTRL1), MFF_CLR_INSTAT);
+ }
+
+ if ((HwStatus & IS_NO_STAT_M2) != 0) {
+ /* Ignore it */
+ /* This situation is also indicated in the descriptor */
+ SK_OUT16(IoC, MR_ADDR(MAC_2, RX_MFF_CTRL1), MFF_CLR_INSTAT);
+ }
+
+ if ((HwStatus & IS_NO_TIST_M1) != 0) {
+ /* Ignore it */
+ /* This situation is also indicated in the descriptor */
+ SK_OUT16(IoC, MR_ADDR(MAC_1, RX_MFF_CTRL1), MFF_CLR_INTIST);
+ }
+
+ if ((HwStatus & IS_NO_TIST_M2) != 0) {
+ /* Ignore it */
+ /* This situation is also indicated in the descriptor */
+ SK_OUT16(IoC, MR_ADDR(MAC_2, RX_MFF_CTRL1), MFF_CLR_INTIST);
+ }
+ }
+ else { /* YUKON */
+ /* This is necessary only for Rx timing measurements */
+ if ((HwStatus & IS_IRQ_TIST_OV) != 0) {
+ /* Clear Time Stamp Timer IRQ */
+ SK_OUT8(IoC, GMAC_TI_ST_CTRL, (SK_U8)GMT_ST_CLR_IRQ);
+ }
+
+ if ((HwStatus & IS_IRQ_SENSOR) != 0) {
+ /* Clear I2C IRQ */
+ SK_OUT32(IoC, B2_I2C_IRQ, I2C_CLR_IRQ);
+ }
+ }
+
+ if ((HwStatus & IS_RAM_RD_PAR) != 0) {
+ SK_OUT16(IoC, B3_RI_CTRL, RI_CLR_RD_PERR);
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E014, SKERR_SIRQ_E014MSG);
+ Para.Para64 = 0;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_ADAP_FAIL, Para);
+ }
+
+ if ((HwStatus & IS_RAM_WR_PAR) != 0) {
+ SK_OUT16(IoC, B3_RI_CTRL, RI_CLR_WR_PERR);
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E015, SKERR_SIRQ_E015MSG);
+ Para.Para64 = 0;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_ADAP_FAIL, Para);
+ }
+
+ if ((HwStatus & IS_M1_PAR_ERR) != 0) {
+ SkMacParity(pAC, IoC, MAC_1);
+ }
+
+ if ((HwStatus & IS_M2_PAR_ERR) != 0) {
+ SkMacParity(pAC, IoC, MAC_2);
+ }
+
+ if ((HwStatus & IS_R1_PAR_ERR) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_R1_CSR, CSR_IRQ_CL_P);
+
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E018, SKERR_SIRQ_E018MSG);
+ Para.Para64 = MAC_1;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ if ((HwStatus & IS_R2_PAR_ERR) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_R2_CSR, CSR_IRQ_CL_P);
+
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E019, SKERR_SIRQ_E019MSG);
+ Para.Para64 = MAC_2;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_2;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+} /* SkGeHwErr */
+
+
+/******************************************************************************
+ *
+ * SkGeSirqIsr() - Special Interrupt Service Routine
+ *
+ * Description: handles all non data transfer specific interrupts (slow path)
+ *
+ * Returns: N/A
+ */
+void SkGeSirqIsr(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+SK_U32 Istatus) /* Interrupt status word */
+{
+ SK_EVPARA Para;
+ SK_U32 RegVal32; /* Read register value */
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ unsigned Len;
+ SK_U64 Octets;
+ SK_U16 PhyInt;
+ SK_U16 PhyIMsk;
+ int i;
+
+ if ((Istatus & IS_HW_ERR) != 0) {
+ /* read the HW Error Interrupt source */
+ SK_IN32(IoC, B0_HWE_ISRC, &RegVal32);
+
+ SkGeHwErr(pAC, IoC, RegVal32);
+ }
+
+ /*
+ * Packet Timeout interrupts
+ */
+ /* Check whether MACs are correctly initialized */
+ if (((Istatus & (IS_PA_TO_RX1 | IS_PA_TO_TX1)) != 0) &&
+ pAC->GIni.GP[MAC_1].PState == SK_PRT_RESET) {
+ /* MAC 1 was not initialized but Packet timeout occured */
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E004,
+ SKERR_SIRQ_E004MSG);
+ }
+
+ if (((Istatus & (IS_PA_TO_RX2 | IS_PA_TO_TX2)) != 0) &&
+ pAC->GIni.GP[MAC_2].PState == SK_PRT_RESET) {
+ /* MAC 2 was not initialized but Packet timeout occured */
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E005,
+ SKERR_SIRQ_E005MSG);
+ }
+
+ if ((Istatus & IS_PA_TO_RX1) != 0) {
+ /* Means network is filling us up */
+ SK_ERR_LOG(pAC, SK_ERRCL_HW | SK_ERRCL_INIT, SKERR_SIRQ_E002,
+ SKERR_SIRQ_E002MSG);
+ SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_RX1);
+ }
+
+ if ((Istatus & IS_PA_TO_RX2) != 0) {
+ /* Means network is filling us up */
+ SK_ERR_LOG(pAC, SK_ERRCL_HW | SK_ERRCL_INIT, SKERR_SIRQ_E003,
+ SKERR_SIRQ_E003MSG);
+ SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_RX2);
+ }
+
+ if ((Istatus & IS_PA_TO_TX1) != 0) {
+
+ pPrt = &pAC->GIni.GP[0];
+
+ /* May be a normal situation in a server with a slow network */
+ SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_TX1);
+
+ /*
+ * workaround: if in half duplex mode, check for Tx hangup.
+ * Read number of TX'ed bytes, wait for 10 ms, then compare
+ * the number with current value. If nothing changed, we assume
+ * that Tx is hanging and do a FIFO flush (see event routine).
+ */
+ if ((pPrt->PLinkModeStatus == SK_LMODE_STAT_HALF ||
+ pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOHALF) &&
+ !pPrt->HalfDupTimerActive) {
+ /*
+ * many more pack. arb. timeouts may come in between,
+ * we ignore those
+ */
+ pPrt->HalfDupTimerActive = SK_TRUE;
+
+ Len = sizeof(SK_U64);
+ SkPnmiGetVar(pAC, IoC, OID_SKGE_STAT_TX_OCTETS, (char *)&Octets,
+ &Len, (SK_U32) SK_PNMI_PORT_PHYS2INST(pAC, 0),
+ pAC->Rlmt.Port[0].Net->NetNumber);
+
+ pPrt->LastOctets = Octets;
+
+ Para.Para32[0] = 0;
+ SkTimerStart(pAC, IoC, &pPrt->HalfDupChkTimer, SK_HALFDUP_CHK_TIME,
+ SKGE_HWAC, SK_HWEV_HALFDUP_CHK, Para);
+ }
+ }
+
+ if ((Istatus & IS_PA_TO_TX2) != 0) {
+
+ pPrt = &pAC->GIni.GP[1];
+
+ /* May be a normal situation in a server with a slow network */
+ SK_OUT16(IoC, B3_PA_CTRL, PA_CLR_TO_TX2);
+
+ /* workaround: see above */
+ if ((pPrt->PLinkModeStatus == SK_LMODE_STAT_HALF ||
+ pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOHALF) &&
+ !pPrt->HalfDupTimerActive) {
+ pPrt->HalfDupTimerActive = SK_TRUE;
+
+ Len = sizeof(SK_U64);
+ SkPnmiGetVar(pAC, IoC, OID_SKGE_STAT_TX_OCTETS, (char *)&Octets,
+ &Len, (SK_U32) SK_PNMI_PORT_PHYS2INST(pAC, 1),
+ pAC->Rlmt.Port[1].Net->NetNumber);
+
+ pPrt->LastOctets = Octets;
+
+ Para.Para32[0] = 1;
+ SkTimerStart(pAC, IoC, &pPrt->HalfDupChkTimer, SK_HALFDUP_CHK_TIME,
+ SKGE_HWAC, SK_HWEV_HALFDUP_CHK, Para);
+ }
+ }
+
+ /* Check interrupts of the particular queues */
+ if ((Istatus & IS_R1_C) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_R1_CSR, CSR_IRQ_CL_C);
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E006,
+ SKERR_SIRQ_E006MSG);
+ Para.Para64 = MAC_1;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ if ((Istatus & IS_R2_C) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_R2_CSR, CSR_IRQ_CL_C);
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E007,
+ SKERR_SIRQ_E007MSG);
+ Para.Para64 = MAC_2;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_2;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ if ((Istatus & IS_XS1_C) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_XS1_CSR, CSR_IRQ_CL_C);
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E008,
+ SKERR_SIRQ_E008MSG);
+ Para.Para64 = MAC_1;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ if ((Istatus & IS_XA1_C) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_XA1_CSR, CSR_IRQ_CL_C);
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E009,
+ SKERR_SIRQ_E009MSG);
+ Para.Para64 = MAC_1;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_1;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ if ((Istatus & IS_XS2_C) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_XS2_CSR, CSR_IRQ_CL_C);
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E010,
+ SKERR_SIRQ_E010MSG);
+ Para.Para64 = MAC_2;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_2;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ if ((Istatus & IS_XA2_C) != 0) {
+ /* Clear IRQ */
+ SK_OUT32(IoC, B0_XA2_CSR, CSR_IRQ_CL_C);
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E011,
+ SKERR_SIRQ_E011MSG);
+ Para.Para64 = MAC_2;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_FAIL, Para);
+ Para.Para32[0] = MAC_2;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ /* External reg interrupt */
+ if ((Istatus & IS_EXT_REG) != 0) {
+ /* Test IRQs from PHY */
+ for (i = 0; i < pAC->GIni.GIMacsFound; i++) {
+
+ pPrt = &pAC->GIni.GP[i];
+
+ if (pPrt->PState == SK_PRT_RESET) {
+ continue;
+ }
+
+ switch (pPrt->PhyType) {
+
+ case SK_PHY_XMAC:
+ break;
+
+ case SK_PHY_BCOM:
+ SkXmPhyRead(pAC, IoC, i, PHY_BCOM_INT_STAT, &PhyInt);
+ SkXmPhyRead(pAC, IoC, i, PHY_BCOM_INT_MASK, &PhyIMsk);
+
+ if ((PhyInt & ~PhyIMsk) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Port %d Bcom Int: 0x%04X Mask: 0x%04X\n",
+ i, PhyInt, PhyIMsk));
+ SkPhyIsrBcom(pAC, IoC, i, PhyInt);
+ }
+ break;
+
+ case SK_PHY_MARV_COPPER:
+ case SK_PHY_MARV_FIBER:
+ SkGmPhyRead(pAC, IoC, i, PHY_MARV_INT_STAT, &PhyInt);
+ SkGmPhyRead(pAC, IoC, i, PHY_MARV_INT_MASK, &PhyIMsk);
+
+ if ((PhyInt & PhyIMsk) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Port %d Marv Int: 0x%04X Mask: 0x%04X\n",
+ i, PhyInt, PhyIMsk));
+ SkPhyIsrGmac(pAC, IoC, i, PhyInt);
+ }
+ break;
+
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ SkXmPhyRead(pAC, IoC, i, PHY_LONE_INT_STAT, &PhyInt);
+ SkXmPhyRead(pAC, IoC, i, PHY_LONE_INT_ENAB, &PhyIMsk);
+
+ if ((PhyInt & PhyIMsk) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Port %d Lone Int: %x Mask: %x\n",
+ i, PhyInt, PhyIMsk));
+ SkPhyIsrLone(pAC, IoC, i, PhyInt);
+ }
+ break;
+ case SK_PHY_NAT:
+ /* todo: National */
+ break;
+#endif /* OTHER_PHY */
+ }
+ }
+ }
+
+ /* I2C Ready interrupt */
+ if ((Istatus & IS_I2C_READY) != 0) {
+ SkI2cIsr(pAC, IoC);
+ }
+
+ if ((Istatus & IS_LNK_SYNC_M1) != 0) {
+ /*
+ * We do NOT need the Link Sync interrupt, because it shows
+ * us only a link going down.
+ */
+ /* clear interrupt */
+ SK_OUT8(IoC, MR_ADDR(MAC_1, LNK_SYNC_CTRL), LED_CLR_IRQ);
+ }
+
+ /* Check MAC after link sync counter */
+ if ((Istatus & IS_MAC1) != 0) {
+ /* IRQ from MAC 1 */
+ SkMacIrq(pAC, IoC, MAC_1);
+ }
+
+ if ((Istatus & IS_LNK_SYNC_M2) != 0) {
+ /*
+ * We do NOT need the Link Sync interrupt, because it shows
+ * us only a link going down.
+ */
+ /* clear interrupt */
+ SK_OUT8(IoC, MR_ADDR(MAC_2, LNK_SYNC_CTRL), LED_CLR_IRQ);
+ }
+
+ /* Check MAC after link sync counter */
+ if ((Istatus & IS_MAC2) != 0) {
+ /* IRQ from MAC 2 */
+ SkMacIrq(pAC, IoC, MAC_2);
+ }
+
+ /* Timer interrupt (served last) */
+ if ((Istatus & IS_TIMINT) != 0) {
+ SkHwtIsr(pAC, IoC);
+ }
+} /* SkGeSirqIsr */
+
+
+/******************************************************************************
+ *
+ * SkGePortCheckShorts() - Implementing XMAC Workaround Errata # 2
+ *
+ * return:
+ * 0 o.k. nothing needed
+ * 1 Restart needed on this port
+ */
+static int SkGePortCheckShorts(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int Port) /* Which port should be checked */
+{
+ SK_U32 Shorts; /* Short Event Counter */
+ SK_U32 CheckShorts; /* Check value for Short Event Counter */
+ SK_U64 RxCts; /* Rx Counter (packets on network) */
+ SK_U32 RxTmp; /* Rx temp. Counter */
+ SK_U32 FcsErrCts; /* FCS Error Counter */
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ int Rtv; /* Return value */
+ int i;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Default: no action */
+ Rtv = SK_HW_PS_NONE;
+
+ (void)SkXmUpdateStats(pAC, IoC, Port);
+
+ /* Extra precaution: check for short Event counter */
+ (void)SkXmMacStatistic(pAC, IoC, Port, XM_RXE_SHT_ERR, &Shorts);
+
+ /*
+ * Read Rx counter (packets seen on the network and not necessarily
+ * really received.
+ */
+ RxCts = 0;
+
+ for (i = 0; i < sizeof(SkGeRxRegs)/sizeof(SkGeRxRegs[0]); i++) {
+ (void)SkXmMacStatistic(pAC, IoC, Port, SkGeRxRegs[i], &RxTmp);
+ RxCts += (SK_U64)RxTmp;
+ }
+
+ /* On default: check shorts against zero */
+ CheckShorts = 0;
+
+ /* Extra precaution on active links */
+ if (pPrt->PHWLinkUp) {
+ /* Reset Link Restart counter */
+ pPrt->PLinkResCt = 0;
+ pPrt->PAutoNegTOCt = 0;
+
+ /* If link is up check for 2 */
+ CheckShorts = 2;
+
+ (void)SkXmMacStatistic(pAC, IoC, Port, XM_RXF_FCS_ERR, &FcsErrCts);
+
+ if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
+ pPrt->PLipaAutoNeg == SK_LIPA_UNKNOWN &&
+ (pPrt->PLinkMode == SK_LMODE_HALF ||
+ pPrt->PLinkMode == SK_LMODE_FULL)) {
+ /*
+ * This is autosensing and we are in the fallback
+ * manual full/half duplex mode.
+ */
+ if (RxCts == pPrt->PPrevRx) {
+ /* Nothing received, restart link */
+ pPrt->PPrevFcs = FcsErrCts;
+ pPrt->PPrevShorts = Shorts;
+
+ return(SK_HW_PS_RESTART);
+ }
+ else {
+ pPrt->PLipaAutoNeg = SK_LIPA_MANUAL;
+ }
+ }
+
+ if (((RxCts - pPrt->PPrevRx) > pPrt->PRxLim) ||
+ (!(FcsErrCts - pPrt->PPrevFcs))) {
+ /*
+ * Note: The compare with zero above has to be done the way shown,
+ * otherwise the Linux driver will have a problem.
+ */
+ /*
+ * We received a bunch of frames or no CRC error occured on the
+ * network -> ok.
+ */
+ pPrt->PPrevRx = RxCts;
+ pPrt->PPrevFcs = FcsErrCts;
+ pPrt->PPrevShorts = Shorts;
+
+ return(SK_HW_PS_NONE);
+ }
+
+ pPrt->PPrevFcs = FcsErrCts;
+ }
+
+
+ if ((Shorts - pPrt->PPrevShorts) > CheckShorts) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Short Event Count Restart Port %d \n", Port));
+ Rtv = SK_HW_PS_RESTART;
+ }
+
+ pPrt->PPrevShorts = Shorts;
+ pPrt->PPrevRx = RxCts;
+
+ return(Rtv);
+} /* SkGePortCheckShorts */
+
+
+/******************************************************************************
+ *
+ * SkGePortCheckUp() - Check if the link is up
+ *
+ * return:
+ * 0 o.k. nothing needed
+ * 1 Restart needed on this port
+ * 2 Link came up
+ */
+static int SkGePortCheckUp(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int Port) /* Which port should be checked */
+{
+ switch (pAC->GIni.GP[Port].PhyType) {
+ case SK_PHY_XMAC:
+ return(SkGePortCheckUpXmac(pAC, IoC, Port));
+ case SK_PHY_BCOM:
+ return(SkGePortCheckUpBcom(pAC, IoC, Port));
+ case SK_PHY_MARV_COPPER:
+ case SK_PHY_MARV_FIBER:
+ return(SkGePortCheckUpGmac(pAC, IoC, Port));
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ return(SkGePortCheckUpLone(pAC, IoC, Port));
+ case SK_PHY_NAT:
+ return(SkGePortCheckUpNat(pAC, IoC, Port));
+#endif /* OTHER_PHY */
+ }
+ return(SK_HW_PS_NONE);
+} /* SkGePortCheckUp */
+
+
+/******************************************************************************
+ *
+ * SkGePortCheckUpXmac() - Implementing of the Workaround Errata # 2
+ *
+ * return:
+ * 0 o.k. nothing needed
+ * 1 Restart needed on this port
+ * 2 Link came up
+ */
+static int SkGePortCheckUpXmac(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int Port) /* Which port should be checked */
+{
+ SK_U32 Shorts; /* Short Event Counter */
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ int Done;
+ SK_U32 GpReg; /* General Purpose register value */
+ SK_U16 Isrc; /* Interrupt source register */
+ SK_U16 IsrcSum; /* Interrupt source register sum */
+ SK_U16 LpAb; /* Link Partner Ability */
+ SK_U16 ResAb; /* Resolved Ability */
+ SK_U16 ExtStat; /* Extended Status Register */
+ SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
+ SK_U8 NextMode; /* Next AutoSensing Mode */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PHWLinkUp) {
+ if (pPrt->PhyType != SK_PHY_XMAC) {
+ return(SK_HW_PS_NONE);
+ }
+ else {
+ return(SkGePortCheckShorts(pAC, IoC, Port));
+ }
+ }
+
+ IsrcSum = pPrt->PIsave;
+ pPrt->PIsave = 0;
+
+ /* Now wait for each port's link */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ AutoNeg = SK_FALSE;
+ }
+ else {
+ AutoNeg = SK_TRUE;
+ }
+
+ if (pPrt->PLinkBroken) {
+ /* Link was broken */
+ XM_IN32(IoC, Port, XM_GP_PORT, &GpReg);
+
+ if ((GpReg & XM_GP_INP_ASS) == 0) {
+ /* The Link is in sync */
+ XM_IN16(IoC, Port, XM_ISRC, &Isrc);
+ IsrcSum |= Isrc;
+ SkXmAutoNegLipaXmac(pAC, IoC, Port, IsrcSum);
+
+ if ((Isrc & XM_IS_INP_ASS) == 0) {
+ /* It has been in sync since last time */
+ /* Restart the PORT */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Link in sync Restart Port %d\n", Port));
+
+ (void)SkXmUpdateStats(pAC, IoC, Port);
+
+ /* We now need to reinitialize the PrevShorts counter */
+ (void)SkXmMacStatistic(pAC, IoC, Port, XM_RXE_SHT_ERR, &Shorts);
+ pPrt->PPrevShorts = Shorts;
+
+ pPrt->PLinkBroken = SK_FALSE;
+
+ /*
+ * Link Restart Workaround:
+ * it may be possible that the other Link side
+ * restarts its link as well an we detect
+ * another LinkBroken. To prevent this
+ * happening we check for a maximum number
+ * of consecutive restart. If those happens,
+ * we do NOT restart the active link and
+ * check whether the link is now o.k.
+ */
+ pPrt->PLinkResCt++;
+
+ pPrt->PAutoNegTimeOut = 0;
+
+ if (pPrt->PLinkResCt < SK_MAX_LRESTART) {
+ return(SK_HW_PS_RESTART);
+ }
+
+ pPrt->PLinkResCt = 0;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Do NOT restart on Port %d %x %x\n", Port, Isrc, IsrcSum));
+ }
+ else {
+ pPrt->PIsave = (SK_U16)(IsrcSum & XM_IS_AND);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Save Sync/nosync Port %d %x %x\n", Port, Isrc, IsrcSum));
+
+ /* Do nothing more if link is broken */
+ return(SK_HW_PS_NONE);
+ }
+ }
+ else {
+ /* Do nothing more if link is broken */
+ return(SK_HW_PS_NONE);
+ }
+
+ }
+ else {
+ /* Link was not broken, check if it is */
+ XM_IN16(IoC, Port, XM_ISRC, &Isrc);
+ IsrcSum |= Isrc;
+ if ((Isrc & XM_IS_INP_ASS) != 0) {
+ XM_IN16(IoC, Port, XM_ISRC, &Isrc);
+ IsrcSum |= Isrc;
+ if ((Isrc & XM_IS_INP_ASS) != 0) {
+ XM_IN16(IoC, Port, XM_ISRC, &Isrc);
+ IsrcSum |= Isrc;
+ if ((Isrc & XM_IS_INP_ASS) != 0) {
+ pPrt->PLinkBroken = SK_TRUE;
+ /* Re-Init Link partner Autoneg flag */
+ pPrt->PLipaAutoNeg = SK_LIPA_UNKNOWN;
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Link broken Port %d\n", Port));
+
+ /* Cable removed-> reinit sense mode */
+ SkHWInitDefSense(pAC, IoC, Port);
+
+ return(SK_HW_PS_RESTART);
+ }
+ }
+ }
+ else {
+ SkXmAutoNegLipaXmac(pAC, IoC, Port, Isrc);
+ if (SkGePortCheckShorts(pAC, IoC, Port) == SK_HW_PS_RESTART) {
+ return(SK_HW_PS_RESTART);
+ }
+ }
+ }
+
+ /*
+ * here we usually can check whether the link is in sync and
+ * auto-negotiation is done.
+ */
+ XM_IN32(IoC, Port, XM_GP_PORT, &GpReg);
+ XM_IN16(IoC, Port, XM_ISRC, &Isrc);
+ IsrcSum |= Isrc;
+
+ SkXmAutoNegLipaXmac(pAC, IoC, Port, IsrcSum);
+
+ if ((GpReg & XM_GP_INP_ASS) != 0 || (IsrcSum & XM_IS_INP_ASS) != 0) {
+ if ((GpReg & XM_GP_INP_ASS) == 0) {
+ /* Save Auto-negotiation Done interrupt only if link is in sync */
+ pPrt->PIsave = (SK_U16)(IsrcSum & XM_IS_AND);
+ }
+#ifdef DEBUG
+ if ((pPrt->PIsave & XM_IS_AND) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg done rescheduled Port %d\n", Port));
+ }
+#endif /* DEBUG */
+ return(SK_HW_PS_NONE);
+ }
+
+ if (AutoNeg) {
+ if ((IsrcSum & XM_IS_AND) != 0) {
+ SkHWLinkUp(pAC, IoC, Port);
+ Done = SkMacAutoNegDone(pAC, IoC, Port);
+ if (Done != SK_AND_OK) {
+ /* Get PHY parameters, for debugging only */
+ SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_AUNE_LP, &LpAb);
+ SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_RES_ABI, &ResAb);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg FAIL Port %d (LpAb %x, ResAb %x)\n",
+ Port, LpAb, ResAb));
+
+ /* Try next possible mode */
+ NextMode = SkHWSenseGetNext(pAC, IoC, Port);
+ SkHWLinkDown(pAC, IoC, Port);
+ if (Done == SK_AND_DUP_CAP) {
+ /* GoTo next mode */
+ SkHWSenseSetNext(pAC, IoC, Port, NextMode);
+ }
+
+ return(SK_HW_PS_RESTART);
+ }
+ /*
+ * Dummy Read extended status to prevent extra link down/ups
+ * (clear Page Received bit if set)
+ */
+ SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_AUNE_EXP, &ExtStat);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg done Port %d\n", Port));
+ return(SK_HW_PS_LINK);
+ }
+
+ /* AutoNeg not done, but HW link is up. Check for timeouts */
+ pPrt->PAutoNegTimeOut++;
+ if (pPrt->PAutoNegTimeOut >= SK_AND_MAX_TO) {
+ /* Increase the Timeout counter */
+ pPrt->PAutoNegTOCt++;
+
+ /* Timeout occured */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("AutoNeg timeout Port %d\n", Port));
+ if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
+ pPrt->PLipaAutoNeg != SK_LIPA_AUTO) {
+ /* Set Link manually up */
+ SkHWSenseSetNext(pAC, IoC, Port, SK_LMODE_FULL);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Set manual full duplex Port %d\n", Port));
+ }
+
+ if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
+ pPrt->PLipaAutoNeg == SK_LIPA_AUTO &&
+ pPrt->PAutoNegTOCt >= SK_MAX_ANEG_TO) {
+ /*
+ * This is rather complicated.
+ * we need to check here whether the LIPA_AUTO
+ * we saw before is false alert. We saw at one
+ * switch ( SR8800) that on boot time it sends
+ * just one auto-neg packet and does no further
+ * auto-negotiation.
+ * Solution: we restart the autosensing after
+ * a few timeouts.
+ */
+ pPrt->PAutoNegTOCt = 0;
+ pPrt->PLipaAutoNeg = SK_LIPA_UNKNOWN;
+ SkHWInitDefSense(pAC, IoC, Port);
+ }
+
+ /* Do the restart */
+ return(SK_HW_PS_RESTART);
+ }
+ }
+ else {
+ /* Link is up and we don't need more */
+#ifdef DEBUG
+ if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("ERROR: Lipa auto detected on port %d\n", Port));
+ }
+#endif /* DEBUG */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Link sync(GP), Port %d\n", Port));
+ SkHWLinkUp(pAC, IoC, Port);
+
+ /*
+ * Link sync (GP) and so assume a good connection. But if not received
+ * a bunch of frames received in a time slot (maybe broken tx cable)
+ * the port is restart.
+ */
+ return(SK_HW_PS_LINK);
+ }
+
+ return(SK_HW_PS_NONE);
+} /* SkGePortCheckUpXmac */
+
+
+/******************************************************************************
+ *
+ * SkGePortCheckUpBcom() - Check if the link is up on Bcom PHY
+ *
+ * return:
+ * 0 o.k. nothing needed
+ * 1 Restart needed on this port
+ * 2 Link came up
+ */
+static int SkGePortCheckUpBcom(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int Port) /* Which port should be checked */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ int Done;
+ SK_U16 Isrc; /* Interrupt source register */
+ SK_U16 PhyStat; /* Phy Status Register */
+ SK_U16 ResAb; /* Master/Slave resolution */
+ SK_U16 Ctrl; /* Broadcom control flags */
+#ifdef DEBUG
+ SK_U16 LpAb;
+ SK_U16 ExtStat;
+#endif /* DEBUG */
+ SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Check for No HCD Link events (#10523) */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &Isrc);
+
+#ifdef xDEBUG
+ if ((Isrc & ~(PHY_B_IS_HCT | PHY_B_IS_LCT) ==
+ (PHY_B_IS_SCR_S_ER | PHY_B_IS_RRS_CHANGE | PHY_B_IS_LRS_CHANGE)) {
+
+ SK_U32 Stat1, Stat2, Stat3;
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_MASK, &Stat1);
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "CheckUp1 - Stat: %x, Mask: %x",
+ (void *)Isrc,
+ (void *)Stat1);
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_CTRL, &Stat1);
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &Stat2);
+ Stat1 = Stat1 << 16 | Stat2;
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_ADV, &Stat2);
+ Stat3 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &Stat3);
+ Stat2 = Stat2 << 16 | Stat3;
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "Ctrl/Stat: %x, AN Adv/LP: %x",
+ (void *)Stat1,
+ (void *)Stat2);
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_EXP, &Stat1);
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_EXT_STAT, &Stat2);
+ Stat1 = Stat1 << 16 | Stat2;
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_CTRL, &Stat2);
+ Stat3 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &Stat3);
+ Stat2 = Stat2 << 16 | Stat3;
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "AN Exp/IEEE Ext: %x, 1000T Ctrl/Stat: %x",
+ (void *)Stat1,
+ (void *)Stat2);
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_CTRL, &Stat1);
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_STAT, &Stat2);
+ Stat1 = Stat1 << 16 | Stat2;
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &Stat2);
+ Stat3 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_STAT, &Stat3);
+ Stat2 = Stat2 << 16 | Stat3;
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "PHY Ext Ctrl/Stat: %x, Aux Ctrl/Stat: %x",
+ (void *)Stat1,
+ (void *)Stat2);
+ }
+#endif /* DEBUG */
+
+ if ((Isrc & (PHY_B_IS_NO_HDCL /* | PHY_B_IS_NO_HDC */)) != 0) {
+ /*
+ * Workaround BCom Errata:
+ * enable and disable loopback mode if "NO HCD" occurs.
+ */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_CTRL, &Ctrl);
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_CTRL,
+ (SK_U16)(Ctrl | PHY_CT_LOOP));
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_CTRL,
+ (SK_U16)(Ctrl & ~PHY_CT_LOOP));
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("No HCD Link event, Port %d\n", Port));
+#ifdef xDEBUG
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "No HCD link event, port %d.",
+ (void *)Port,
+ (void *)NULL);
+#endif /* DEBUG */
+ }
+
+ /* Not obsolete: link status bit is latched to 0 and autoclearing! */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);
+
+ if (pPrt->PHWLinkUp) {
+ return(SK_HW_PS_NONE);
+ }
+
+#ifdef xDEBUG
+ {
+ SK_U32 Stat1, Stat2, Stat3;
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_MASK, &Stat1);
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "CheckUp1a - Stat: %x, Mask: %x",
+ (void *)Isrc,
+ (void *)Stat1);
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_CTRL, &Stat1);
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);
+ Stat1 = Stat1 << 16 | PhyStat;
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_ADV, &Stat2);
+ Stat3 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &Stat3);
+ Stat2 = Stat2 << 16 | Stat3;
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "Ctrl/Stat: %x, AN Adv/LP: %x",
+ (void *)Stat1,
+ (void *)Stat2);
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_EXP, &Stat1);
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_EXT_STAT, &Stat2);
+ Stat1 = Stat1 << 16 | Stat2;
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_CTRL, &Stat2);
+ Stat3 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);
+ Stat2 = Stat2 << 16 | ResAb;
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "AN Exp/IEEE Ext: %x, 1000T Ctrl/Stat: %x",
+ (void *)Stat1,
+ (void *)Stat2);
+
+ Stat1 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_CTRL, &Stat1);
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_STAT, &Stat2);
+ Stat1 = Stat1 << 16 | Stat2;
+ Stat2 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &Stat2);
+ Stat3 = 0;
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_STAT, &Stat3);
+ Stat2 = Stat2 << 16 | Stat3;
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "PHY Ext Ctrl/Stat: %x, Aux Ctrl/Stat: %x",
+ (void *)Stat1,
+ (void *)Stat2);
+ }
+#endif /* DEBUG */
+
+ /* Now wait for each port's link */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ AutoNeg = SK_FALSE;
+ }
+ else {
+ AutoNeg = SK_TRUE;
+ }
+
+ /*
+ * Here we usually can check whether the link is in sync and
+ * auto-negotiation is done.
+ */
+
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);
+
+ SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg: %d, PhyStat: 0x%04x\n", AutoNeg, PhyStat));
+
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);
+
+ if ((ResAb & PHY_B_1000S_MSF) != 0) {
+ /* Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Master/Slave Fault port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ pPrt->PMSStatus = SK_MS_STAT_FAULT;
+
+ return(SK_HW_PS_RESTART);
+ }
+
+ if ((PhyStat & PHY_ST_LSYNC) == 0) {
+ return(SK_HW_PS_NONE);
+ }
+
+ pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
+ SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg: %d, PhyStat: 0x%04x\n", AutoNeg, PhyStat));
+
+ if (AutoNeg) {
+ if ((PhyStat & PHY_ST_AN_OVER) != 0) {
+ SkHWLinkUp(pAC, IoC, Port);
+ Done = SkMacAutoNegDone(pAC, IoC, Port);
+ if (Done != SK_AND_OK) {
+#ifdef DEBUG
+ /* Get PHY parameters, for debugging only */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &LpAb);
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ExtStat);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg FAIL Port %d (LpAb %x, 1000TStat %x)\n",
+ Port, LpAb, ExtStat));
+#endif /* DEBUG */
+ return(SK_HW_PS_RESTART);
+ }
+ else {
+#ifdef xDEBUG
+ /* Dummy read ISR to prevent extra link downs/ups */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &ExtStat);
+
+ if ((ExtStat & ~(PHY_B_IS_HCT | PHY_B_IS_LCT)) != 0) {
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "CheckUp2 - Stat: %x",
+ (void *)ExtStat,
+ (void *)NULL);
+ }
+#endif /* DEBUG */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg done Port %d\n", Port));
+ return(SK_HW_PS_LINK);
+ }
+ }
+ }
+ else { /* !AutoNeg */
+ /* Link is up and we don't need more. */
+#ifdef DEBUG
+ if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("ERROR: Lipa auto detected on port %d\n", Port));
+ }
+#endif /* DEBUG */
+
+#ifdef xDEBUG
+ /* Dummy read ISR to prevent extra link downs/ups */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &ExtStat);
+
+ if ((ExtStat & ~(PHY_B_IS_HCT | PHY_B_IS_LCT)) != 0) {
+ CMSMPrintString(
+ pAC->pConfigTable,
+ MSG_TYPE_RUNTIME_INFO,
+ "CheckUp3 - Stat: %x",
+ (void *)ExtStat,
+ (void *)NULL);
+ }
+#endif /* DEBUG */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Link sync(GP), Port %d\n", Port));
+ SkHWLinkUp(pAC, IoC, Port);
+ return(SK_HW_PS_LINK);
+ }
+
+ return(SK_HW_PS_NONE);
+} /* SkGePortCheckUpBcom */
+
+
+/******************************************************************************
+ *
+ * SkGePortCheckUpGmac() - Check if the link is up on Marvell PHY
+ *
+ * return:
+ * 0 o.k. nothing needed
+ * 1 Restart needed on this port
+ * 2 Link came up
+ */
+static int SkGePortCheckUpGmac(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int Port) /* Which port should be checked */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ int Done;
+ SK_U16 Isrc; /* Interrupt source */
+ SK_U16 PhyStat; /* Phy Status */
+ SK_U16 PhySpecStat;/* Phy Specific Status */
+ SK_U16 ResAb; /* Master/Slave resolution */
+ SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Read PHY Interrupt Status */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_INT_STAT, &Isrc);
+
+ if ((Isrc & PHY_M_IS_AN_COMPL) != 0) {
+ /* TBD */
+ }
+
+ if ((Isrc & PHY_M_IS_DOWNSH_DET) != 0) {
+ /* TBD */
+ }
+
+ if (pPrt->PHWLinkUp) {
+ return(SK_HW_PS_NONE);
+ }
+
+ /* Now wait for each port's link */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ AutoNeg = SK_FALSE;
+ }
+ else {
+ AutoNeg = SK_TRUE;
+ }
+
+ /* Read PHY Status */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_STAT, &PhyStat);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg: %d, PhyStat: 0x%04x\n", AutoNeg, PhyStat));
+
+ SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);
+
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_1000T_STAT, &ResAb);
+
+ if ((ResAb & PHY_B_1000S_MSF) != 0) {
+ /* Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Master/Slave Fault port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ pPrt->PMSStatus = SK_MS_STAT_FAULT;
+
+ return(SK_HW_PS_RESTART);
+ }
+
+ /* Read PHY Specific Status */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_PHY_STAT, &PhySpecStat);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg: %d, PhySpecStat: 0x%04x\n", AutoNeg, PhySpecStat));
+
+ if ((PhySpecStat & PHY_M_PS_LINK_UP) == 0) {
+ return(SK_HW_PS_NONE);
+ }
+
+ pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
+ SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;
+
+ pPrt->PCableLen = (SK_U8)((PhySpecStat & PHY_M_PS_CABLE_MSK) >> 7);
+
+ if (AutoNeg) {
+ /* Auto-Negotiation Over ? */
+ if ((PhyStat & PHY_ST_AN_OVER) != 0) {
+
+ SkHWLinkUp(pAC, IoC, Port);
+
+ Done = SkMacAutoNegDone(pAC, IoC, Port);
+
+ if (Done != SK_AND_OK) {
+ return(SK_HW_PS_RESTART);
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg done Port %d\n", Port));
+ return(SK_HW_PS_LINK);
+ }
+ }
+ else { /* !AutoNeg */
+ /* Link is up and we don't need more */
+#ifdef DEBUG
+ if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("ERROR: Lipa auto detected on port %d\n", Port));
+ }
+#endif /* DEBUG */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Link sync, Port %d\n", Port));
+ SkHWLinkUp(pAC, IoC, Port);
+
+ return(SK_HW_PS_LINK);
+ }
+
+ return(SK_HW_PS_NONE);
+} /* SkGePortCheckUpGmac */
+
+
+#ifdef OTHER_PHY
+/******************************************************************************
+ *
+ * SkGePortCheckUpLone() - Check if the link is up on Level One PHY
+ *
+ * return:
+ * 0 o.k. nothing needed
+ * 1 Restart needed on this port
+ * 2 Link came up
+ */
+static int SkGePortCheckUpLone(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int Port) /* Which port should be checked */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ int Done;
+ SK_U16 Isrc; /* Interrupt source register */
+ SK_U16 LpAb; /* Link Partner Ability */
+ SK_U16 ExtStat; /* Extended Status Register */
+ SK_U16 PhyStat; /* Phy Status Register */
+ SK_U16 StatSum;
+ SK_BOOL AutoNeg; /* Is Auto-negotiation used ? */
+ SK_U8 NextMode; /* Next AutoSensing Mode */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PHWLinkUp) {
+ return(SK_HW_PS_NONE);
+ }
+
+ StatSum = pPrt->PIsave;
+ pPrt->PIsave = 0;
+
+ /* Now wait for each ports link */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ AutoNeg = SK_FALSE;
+ }
+ else {
+ AutoNeg = SK_TRUE;
+ }
+
+ /*
+ * here we usually can check whether the link is in sync and
+ * auto-negotiation is done.
+ */
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_STAT, &PhyStat);
+ StatSum |= PhyStat;
+
+ SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);
+
+ if ((PhyStat & PHY_ST_LSYNC) == 0) {
+ /* Save Auto-negotiation Done bit */
+ pPrt->PIsave = (SK_U16)(StatSum & PHY_ST_AN_OVER);
+#ifdef DEBUG
+ if ((pPrt->PIsave & PHY_ST_AN_OVER) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg done rescheduled Port %d\n", Port));
+ }
+#endif /* DEBUG */
+ return(SK_HW_PS_NONE);
+ }
+
+ if (AutoNeg) {
+ if ((StatSum & PHY_ST_AN_OVER) != 0) {
+ SkHWLinkUp(pAC, IoC, Port);
+ Done = SkMacAutoNegDone(pAC, IoC, Port);
+ if (Done != SK_AND_OK) {
+ /* Get PHY parameters, for debugging only */
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_AUNE_LP, &LpAb);
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_1000T_STAT, &ExtStat);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg FAIL Port %d (LpAb %x, 1000TStat %x)\n",
+ Port, LpAb, ExtStat));
+
+ /* Try next possible mode */
+ NextMode = SkHWSenseGetNext(pAC, IoC, Port);
+ SkHWLinkDown(pAC, IoC, Port);
+ if (Done == SK_AND_DUP_CAP) {
+ /* GoTo next mode */
+ SkHWSenseSetNext(pAC, IoC, Port, NextMode);
+ }
+
+ return(SK_HW_PS_RESTART);
+
+ }
+ else {
+ /*
+ * Dummy Read interrupt status to prevent
+ * extra link down/ups
+ */
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_INT_STAT, &ExtStat);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNeg done Port %d\n", Port));
+ return(SK_HW_PS_LINK);
+ }
+ }
+
+ /* AutoNeg not done, but HW link is up. Check for timeouts */
+ pPrt->PAutoNegTimeOut++;
+ if (pPrt->PAutoNegTimeOut >= SK_AND_MAX_TO) {
+ /* Timeout occured */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("AutoNeg timeout Port %d\n", Port));
+ if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&
+ pPrt->PLipaAutoNeg != SK_LIPA_AUTO) {
+ /* Set Link manually up */
+ SkHWSenseSetNext(pAC, IoC, Port, SK_LMODE_FULL);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Set manual full duplex Port %d\n", Port));
+ }
+
+ /* Do the restart */
+ return(SK_HW_PS_RESTART);
+ }
+ }
+ else {
+ /* Link is up and we don't need more */
+#ifdef DEBUG
+ if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("ERROR: Lipa auto detected on port %d\n", Port));
+ }
+#endif /* DEBUG */
+
+ /*
+ * Dummy Read interrupt status to prevent
+ * extra link down/ups
+ */
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_INT_STAT, &ExtStat);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("Link sync(GP), Port %d\n", Port));
+ SkHWLinkUp(pAC, IoC, Port);
+ return(SK_HW_PS_LINK);
+ }
+
+ return(SK_HW_PS_NONE);
+} /* SkGePortCheckUpLone */
+
+
+/******************************************************************************
+ *
+ * SkGePortCheckUpNat() - Check if the link is up on National PHY
+ *
+ * return:
+ * 0 o.k. nothing needed
+ * 1 Restart needed on this port
+ * 2 Link came up
+ */
+static int SkGePortCheckUpNat(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO Context */
+int Port) /* Which port should be checked */
+{
+ /* todo: National */
+ return(SK_HW_PS_NONE);
+} /* SkGePortCheckUpNat */
+#endif /* OTHER_PHY */
+
+
+/******************************************************************************
+ *
+ * SkGeSirqEvent() - Event Service Routine
+ *
+ * Description:
+ *
+ * Notes:
+ */
+int SkGeSirqEvent(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* Io Context */
+SK_U32 Event, /* Module specific Event */
+SK_EVPARA Para) /* Event specific Parameter */
+{
+ SK_U64 Octets;
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ SK_U32 Port;
+ SK_U32 Time;
+ unsigned Len;
+ int PortStat;
+ SK_U8 Val8;
+
+ Port = Para.Para32[0];
+ pPrt = &pAC->GIni.GP[Port];
+
+ switch (Event) {
+ case SK_HWEV_WATIM:
+ /* Check whether port came up */
+ PortStat = SkGePortCheckUp(pAC, IoC, Port);
+
+ switch (PortStat) {
+ case SK_HW_PS_RESTART:
+ if (pPrt->PHWLinkUp) {
+ /*
+ * Set Link to down.
+ */
+ SkHWLinkDown(pAC, IoC, Port);
+
+ /*
+ * Signal directly to RLMT to ensure correct
+ * sequence of SWITCH and RESET event.
+ */
+ SkRlmtEvent(pAC, IoC, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ /* Restart needed */
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Para);
+ break;
+
+ case SK_HW_PS_LINK:
+ /* Signal to RLMT */
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_UP, Para);
+ break;
+
+ }
+
+ /* Start again the check Timer */
+ if (pPrt->PHWLinkUp) {
+ Time = SK_WA_ACT_TIME;
+ }
+ else {
+ Time = SK_WA_INA_TIME;
+ }
+
+ /* Todo: still needed for non-XMAC PHYs??? */
+ /* Start workaround Errata #2 timer */
+ SkTimerStart(pAC, IoC, &pPrt->PWaTimer, Time,
+ SKGE_HWAC, SK_HWEV_WATIM, Para);
+ break;
+
+ case SK_HWEV_PORT_START:
+ if (pPrt->PHWLinkUp) {
+ /*
+ * Signal directly to RLMT to ensure correct
+ * sequence of SWITCH and RESET event.
+ */
+ SkRlmtEvent(pAC, IoC, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ SkHWLinkDown(pAC, IoC, Port);
+
+ /* Schedule Port RESET */
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_PORT_RESET, Para);
+
+ /* Start workaround Errata #2 timer */
+ SkTimerStart(pAC, IoC, &pPrt->PWaTimer, SK_WA_INA_TIME,
+ SKGE_HWAC, SK_HWEV_WATIM, Para);
+ break;
+
+ case SK_HWEV_PORT_STOP:
+ if (pPrt->PHWLinkUp) {
+ /*
+ * Signal directly to RLMT to ensure correct
+ * sequence of SWITCH and RESET event.
+ */
+ SkRlmtEvent(pAC, IoC, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ /* Stop Workaround Timer */
+ SkTimerStop(pAC, IoC, &pPrt->PWaTimer);
+
+ SkHWLinkDown(pAC, IoC, Port);
+ break;
+
+ case SK_HWEV_UPDATE_STAT:
+ /* We do NOT need to update any statistics */
+ break;
+
+ case SK_HWEV_CLEAR_STAT:
+ /* We do NOT need to clear any statistics */
+ for (Port = 0; Port < (SK_U32)pAC->GIni.GIMacsFound; Port++) {
+ pPrt->PPrevRx = 0;
+ pPrt->PPrevFcs = 0;
+ pPrt->PPrevShorts = 0;
+ }
+ break;
+
+ case SK_HWEV_SET_LMODE:
+ Val8 = (SK_U8)Para.Para32[1];
+ if (pPrt->PLinkModeConf != Val8) {
+ /* Set New link mode */
+ pPrt->PLinkModeConf = Val8;
+
+ /* Restart Port */
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
+ }
+ break;
+
+ case SK_HWEV_SET_FLOWMODE:
+ Val8 = (SK_U8)Para.Para32[1];
+ if (pPrt->PFlowCtrlMode != Val8) {
+ /* Set New Flow Control mode */
+ pPrt->PFlowCtrlMode = Val8;
+
+ /* Restart Port */
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
+ }
+ break;
+
+ case SK_HWEV_SET_ROLE:
+ /* not possible for fiber */
+ if (!pAC->GIni.GICopperType) {
+ break;
+ }
+ Val8 = (SK_U8)Para.Para32[1];
+ if (pPrt->PMSMode != Val8) {
+ /* Set New link mode */
+ pPrt->PMSMode = Val8;
+
+ /* Restart Port */
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
+ }
+ break;
+
+ case SK_HWEV_SET_SPEED:
+ if (pPrt->PhyType != SK_PHY_MARV_COPPER) {
+ break;
+ }
+ Val8 = (SK_U8)Para.Para32[1];
+ if (pPrt->PLinkSpeed != Val8) {
+ /* Set New Speed parameter */
+ pPrt->PLinkSpeed = Val8;
+
+ /* Restart Port */
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para);
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
+ }
+ break;
+
+ case SK_HWEV_HALFDUP_CHK:
+ /*
+ * half duplex hangup workaround.
+ * See packet arbiter timeout interrupt for description
+ */
+ pPrt->HalfDupTimerActive = SK_FALSE;
+ if (pPrt->PLinkModeStatus == SK_LMODE_STAT_HALF ||
+ pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOHALF) {
+
+ Len = sizeof(SK_U64);
+ SkPnmiGetVar(pAC, IoC, OID_SKGE_STAT_TX_OCTETS, (char *)&Octets,
+ &Len, (SK_U32)SK_PNMI_PORT_PHYS2INST(pAC, Port),
+ pAC->Rlmt.Port[Port].Net->NetNumber);
+
+ if (pPrt->LastOctets == Octets) {
+ /* Tx hanging, a FIFO flush restarts it */
+ SkMacFlushTxFifo(pAC, IoC, Port);
+ }
+ }
+ break;
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_SIRQ_E001, SKERR_SIRQ_E001MSG);
+ break;
+ }
+
+ return(0);
+} /* SkGeSirqEvent */
+
+
+/******************************************************************************
+ *
+ * SkPhyIsrBcom() - PHY interrupt service routine
+ *
+ * Description: handles all interrupts from BCom PHY
+ *
+ * Returns: N/A
+ */
+static void SkPhyIsrBcom(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* Io Context */
+int Port, /* Port Num = PHY Num */
+SK_U16 IStatus) /* Interrupt Status */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ SK_EVPARA Para;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if ((IStatus & PHY_B_IS_PSE) != 0) {
+ /* Incorrectable pair swap error */
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_SIRQ_E022,
+ SKERR_SIRQ_E022MSG);
+ }
+
+ if ((IStatus & (PHY_B_IS_AN_PR | PHY_B_IS_LST_CHANGE)) != 0) {
+ Para.Para32[0] = (SK_U32)Port;
+
+ SkHWLinkDown(pAC, IoC, Port);
+
+ /* Signal to RLMT */
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+
+ /* Start workaround Errata #2 timer */
+ SkTimerStart(pAC, IoC, &pPrt->PWaTimer, SK_WA_INA_TIME,
+ SKGE_HWAC, SK_HWEV_WATIM, Para);
+ }
+
+} /* SkPhyIsrBcom */
+
+
+/******************************************************************************
+ *
+ * SkPhyIsrGmac() - PHY interrupt service routine
+ *
+ * Description: handles all interrupts from Marvell PHY
+ *
+ * Returns: N/A
+ */
+static void SkPhyIsrGmac(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* Io Context */
+int Port, /* Port Num = PHY Num */
+SK_U16 IStatus) /* Interrupt Status */
+{
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+ SK_EVPARA Para;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if ((IStatus & (PHY_M_IS_AN_PR | PHY_M_IS_LST_CHANGE)) != 0) {
+ Para.Para32[0] = (SK_U32)Port;
+
+ SkHWLinkDown(pAC, IoC, Port);
+
+ /* Signal to RLMT */
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+ if ((IStatus & PHY_M_IS_AN_ERROR) != 0) {
+ /* Auto-Negotiation Error */
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E023, SKERR_SIRQ_E023MSG);
+ }
+
+ if ((IStatus & PHY_M_IS_LSP_CHANGE) != 0) {
+ /* TBD */
+ }
+
+ if ((IStatus & PHY_M_IS_FIFO_ERROR) != 0) {
+ /* FIFO Overflow/Underrun Error */
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E024, SKERR_SIRQ_E024MSG);
+ }
+} /* SkPhyIsrGmac */
+
+
+#ifdef OTHER_PHY
+/******************************************************************************
+ *
+ * SkPhyIsrLone() - PHY interrupt service routine
+ *
+ * Description: handles all interrupts from LONE PHY
+ *
+ * Returns: N/A
+ */
+static void SkPhyIsrLone(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* Io Context */
+int Port, /* Port Num = PHY Num */
+SK_U16 IStatus) /* Interrupt Status */
+{
+ SK_EVPARA Para;
+
+ if (IStatus & (PHY_L_IS_DUP | PHY_L_IS_ISOL)) {
+ SkHWLinkDown(pAC, IoC, Port);
+
+ /* Signal to RLMT */
+ Para.Para32[0] = (SK_U32)Port;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+ }
+
+} /* SkPhyIsrLone */
+#endif /* OTHER_PHY */
+
+/* End of File */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/ski2c.c u-boot-2009.03/drivers/net/sk98lin/ski2c.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/ski2c.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/ski2c.c 2009-03-31 14:54:29.612503200 -0700
@@ -1,1501 +1,1504 @@
-/******************************************************************************
- *
- * Name: ski2c.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.57 $
- * Date: $Date: 2003/01/28 09:17:38 $
- * Purpose: Functions to access Voltage and Temperature Sensor
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: ski2c.c,v $
- * Revision 1.57 2003/01/28 09:17:38 rschmidt
- * Fixed handling for sensors on YUKON Fiber.
- * Editorial changes.
- *
- * Revision 1.56 2002/12/19 14:20:41 rschmidt
- * Added debugging code in SkI2cWait().
- * Replaced all I2C-write operations with function SkI2cWrite().
- * Fixed compiler warning because of uninitialized 'Time' in SkI2cEvent().
- * Editorial changes.
- *
- * Revision 1.55 2002/10/15 07:23:55 rschmidt
- * Added setting of the GIYukon32Bit bool variable to distinguish
- * 32-bit adapters.
- * Editorial changes (TWSI).
- *
- * Revision 1.54 2002/08/13 09:05:06 rschmidt
- * Added new thresholds if VAUX is not available (GIVauxAvail).
- * Merged defines for PHY PLL 3V3 voltage (A and B).
- * Editorial changes.
- *
- * Revision 1.53 2002/08/08 11:04:53 rwahl
- * Added missing comment for revision 1.51
- *
- * Revision 1.52 2002/08/08 10:09:02 jschmalz
- * Sensor init state caused wrong error log entry
- *
- * Revision 1.51 2002/08/06 09:43:03 jschmalz
- * Extensions and changes for Yukon
- *
- * Revision 1.50 2002/08/02 12:09:22 rschmidt
- * Added support for YUKON sensors.
- * Editorial changes.
- *
- * Revision 1.49 2002/07/30 11:07:52 rschmidt
- * Replaced MaxSens init by update for Copper in SkI2cInit1(),
- * because it was already initialized in SkI2cInit0().
- * Editorial changes.
- *
- * Revision 1.48 2001/08/16 12:44:33 afischer
- * LM80 sensor init values corrected
- *
- * Revision 1.47 2001/04/05 11:38:09 rassmann
- * Set SenState to idle in SkI2cWaitIrq().
- * Changed error message in SkI2cWaitIrq().
- *
- * Revision 1.46 2001/04/02 14:03:35 rassmann
- * Changed pAC to IoC in SK_IN32().
- *
- * Revision 1.45 2001/03/21 12:12:49 rassmann
- * Resetting I2C_READY interrupt in SkI2cInit1().
- *
- * Revision 1.44 2000/08/07 15:49:03 gklug
- * Fix: SK_INFAST only in NetWare driver.
- *
- * Revision 1.43 2000/08/03 14:28:17 rassmann
- * Added function to wait for I2C being ready before resetting the board.
- * Replaced one duplicate "out of range" message with correct one.
- *
- * Revision 1.42 1999/11/22 13:35:12 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.41 1999/09/14 14:11:30 malthoff
- * The 1000BT Dual Link adapter has got only one Fan.
- * The second Fan has been removed.
- *
- * Revision 1.40 1999/05/27 13:37:27 malthoff
- * Set divisor of 1 for fan count calculation.
- *
- * Revision 1.39 1999/05/20 14:54:43 malthoff
- * I2c.DummyReads is not used in Diagnostics.
- *
- * Revision 1.38 1999/05/20 09:20:56 cgoos
- * Changes for 1000Base-T (up to 9 sensors and fans).
- *
- * Revision 1.37 1999/03/25 15:11:36 gklug
- * fix: reset error flag if sensor reads correct value
- *
- * Revision 1.36 1999/01/07 14:11:16 gklug
- * fix: break added
- *
- * Revision 1.35 1999/01/05 15:31:49 gklug
- * fix: CLEAR STAT command is now added correctly
- *
- * Revision 1.34 1998/12/01 13:45:16 gklug
- * fix: introduced Init level, because we don't need reinits
- *
- * Revision 1.33 1998/11/09 14:54:25 malthoff
- * Modify I2C Transfer Timeout handling for Diagnostics.
- *
- * Revision 1.32 1998/11/03 06:54:35 gklug
- * fix: Need dummy reads at the beginning to init sensors
- *
- * Revision 1.31 1998/11/03 06:42:42 gklug
- * fix: select correctVIO range only if between warning levels
- *
- * Revision 1.30 1998/11/02 07:36:53 gklug
- * fix: Error should not include WARNING message
- *
- * Revision 1.29 1998/10/30 15:07:43 malthoff
- * Disable 'I2C does not compelete' error log for diagnostics.
- *
- * Revision 1.28 1998/10/22 09:48:11 gklug
- * fix: SysKonnectFileId typo
- *
- * Revision 1.27 1998/10/20 09:59:46 gklug
- * add: parameter to SkOsGetTime
- *
- * Revision 1.26 1998/10/09 06:10:59 malthoff
- * Remove ID_sccs by SysKonnectFileId.
- *
- * Revision 1.25 1998/09/08 12:40:26 gklug
- * fix: syntax error in if clause
- *
- * Revision 1.24 1998/09/08 12:19:42 gklug
- * chg: INIT Level checking
- *
- * Revision 1.23 1998/09/08 07:37:20 gklug
- * fix: log error if PCI_IO voltage sensor could not be initialized
- *
- * Revision 1.22 1998/09/04 08:30:03 malthoff
- * Bugfixes during SK_DIAG testing:
- * - correct NS2BCLK() macro
- * - correct SkI2cSndDev()
- * - correct SkI2cWait() loop waiting for an event
- *
- * Revision 1.21 1998/08/27 14:46:01 gklug
- * chg: if-then-else replaced by switch
- *
- * Revision 1.20 1998/08/27 14:40:07 gklug
- * test: integral types
- *
- * Revision 1.19 1998/08/25 07:51:54 gklug
- * fix: typos for compiling
- *
- * Revision 1.18 1998/08/25 06:12:24 gklug
- * add: count errors and warnings
- * fix: check not the sensor state but the ErrFlag!
- *
- * Revision 1.17 1998/08/25 05:56:48 gklug
- * add: CheckSensor function
- *
- * Revision 1.16 1998/08/20 11:41:10 gklug
- * chg: omit STRCPY macro by using char * as Sensor Description
- *
- * Revision 1.15 1998/08/20 11:37:35 gklug
- * chg: change Ioc to IoC
- *
- * Revision 1.14 1998/08/20 11:32:52 gklug
- * fix: Para compile error
- *
- * Revision 1.13 1998/08/20 11:27:41 gklug
- * fix: Compile bugs with new awrning constants
- *
- * Revision 1.12 1998/08/20 08:53:05 gklug
- * fix: compiler errors
- * add: Threshold values
- *
- * Revision 1.11 1998/08/19 12:39:22 malthoff
- * Compiler Fix: Some names have changed.
- *
- * Revision 1.10 1998/08/19 12:20:56 gklug
- * fix: remove struct from C files (see CCC)
- *
- * Revision 1.9 1998/08/19 06:28:46 malthoff
- * SkOsGetTime returns SK_U64 now.
- *
- * Revision 1.8 1998/08/17 13:53:33 gklug
- * fix: Parameter of event function and its result
- *
- * Revision 1.7 1998/08/17 07:02:15 malthoff
- * Modify the functions for accessing the I2C SW Registers.
- * Modify SkI2cWait().
- * Put Lm80RcvReg into sklm80.c
- * Remove Compiler Errors.
- *
- * Revision 1.6 1998/08/14 07:13:20 malthoff
- * remove pAc with pAC
- * remove smc with pAC
- * change names to new convention
- *
- * Revision 1.5 1998/08/14 06:24:49 gklug
- * add: init level 1 and 2
- *
- * Revision 1.4 1998/08/12 14:31:12 gklug
- * add: error log for unknown event
- *
- * Revision 1.3 1998/08/12 13:37:04 gklug
- * add: Init 0 function
- *
- * Revision 1.2 1998/08/11 07:27:15 gklug
- * add: functions of the interface
- * adapt rest of source to C coding Conventions
- * rmv: unnecessary code taken from Mona Lisa
- *
- * Revision 1.1 1998/06/19 14:28:43 malthoff
- * Created. Sources taken from ML Projekt.
- * Sources have to be reworked for GE.
- *
- *
- ******************************************************************************/
-
-
-#include <config.h>
-
-/*
- * I2C Protocol
- */
-static const char SysKonnectFileId[] =
- "$Id: ski2c.c,v 1.57 2003/01/28 09:17:38 rschmidt Exp $";
-
-#include "h/skdrv1st.h" /* Driver Specific Definitions */
-#include "h/lm80.h"
-#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
-
-#ifdef __C2MAN__
-/*
- I2C protocol implementation.
-
- General Description:
-
- The I2C protocol is used for the temperature sensors and for
- the serial EEPROM which hold the configuration.
-
- This file covers functions that allow to read write and do
- some bulk requests a specified I2C address.
-
- The Genesis has 2 I2C buses. One for the EEPROM which holds
- the VPD Data and one for temperature and voltage sensor.
- The following picture shows the I2C buses, I2C devices and
- their control registers.
-
- Note: The VPD functions are in skvpd.c
-.
-. PCI Config I2C Bus for VPD Data:
-.
-. +------------+
-. | VPD EEPROM |
-. +------------+
-. |
-. | <-- I2C
-. |
-. +-----------+-----------+
-. | |
-. +-----------------+ +-----------------+
-. | PCI_VPD_ADR_REG | | PCI_VPD_DAT_REG |
-. +-----------------+ +-----------------+
-.
-.
-. I2C Bus for LM80 sensor:
-.
-. +-----------------+
-. | Temperature and |
-. | Voltage Sensor |
-. | LM80 |
-. +-----------------+
-. |
-. |
-. I2C --> |
-. |
-. +----+
-. +-------------->| OR |<--+
-. | +----+ |
-. +------+------+ |
-. | | |
-. +--------+ +--------+ +----------+
-. | B2_I2C | | B2_I2C | | B2_I2C |
-. | _CTRL | | _DATA | | _SW |
-. +--------+ +--------+ +----------+
-.
- The I2C bus may be driven by the B2_I2C_SW or by the B2_I2C_CTRL
- and B2_I2C_DATA registers.
- For driver software it is recommended to use the I2C control and
- data register, because I2C bus timing is done by the ASIC and
- an interrupt may be received when the I2C request is completed.
-
- Clock Rate Timing: MIN MAX generated by
- VPD EEPROM: 50 kHz 100 kHz HW
- LM80 over I2C Ctrl/Data reg. 50 kHz 100 kHz HW
- LM80 over B2_I2C_SW register 0 400 kHz SW
-
- Note: The clock generated by the hardware is dependend on the
- PCI clock. If the PCI bus clock is 33 MHz, the I2C/VPD
- clock is 50 kHz.
- */
-intro()
-{}
-#endif
-
-#ifdef SK_DIAG
-/*
- * I2C Fast Mode timing values used by the LM80.
- * If new devices are added to the I2C bus the timing values have to be checked.
- */
-#ifndef I2C_SLOW_TIMING
-#define T_CLK_LOW 1300L /* clock low time in ns */
-#define T_CLK_HIGH 600L /* clock high time in ns */
-#define T_DATA_IN_SETUP 100L /* data in Set-up Time */
-#define T_START_HOLD 600L /* start condition hold time */
-#define T_START_SETUP 600L /* start condition Set-up time */
-#define T_STOP_SETUP 600L /* stop condition Set-up time */
-#define T_BUS_IDLE 1300L /* time the bus must free after Tx */
-#define T_CLK_2_DATA_OUT 900L /* max. clock low to data output valid */
-#else /* I2C_SLOW_TIMING */
-/* I2C Standard Mode Timing */
-#define T_CLK_LOW 4700L /* clock low time in ns */
-#define T_CLK_HIGH 4000L /* clock high time in ns */
-#define T_DATA_IN_SETUP 250L /* data in Set-up Time */
-#define T_START_HOLD 4000L /* start condition hold time */
-#define T_START_SETUP 4700L /* start condition Set-up time */
-#define T_STOP_SETUP 4000L /* stop condition Set-up time */
-#define T_BUS_IDLE 4700L /* time the bus must free after Tx */
-#endif /* !I2C_SLOW_TIMING */
-
-#define NS2BCLK(x) (((x)*125)/10000)
-
-/*
- * I2C Wire Operations
- *
- * About I2C_CLK_LOW():
- *
- * The Data Direction bit (I2C_DATA_DIR) has to be set to input when setting
- * clock to low, to prevent the ASIC and the I2C data client from driving the
- * serial data line simultaneously (ASIC: last bit of a byte = '1', I2C client
- * send an 'ACK'). See also Concentrator Bugreport No. 10192.
- */
-#define I2C_DATA_HIGH(IoC) SK_I2C_SET_BIT(IoC, I2C_DATA)
-#define I2C_DATA_LOW(IoC) SK_I2C_CLR_BIT(IoC, I2C_DATA)
-#define I2C_DATA_OUT(IoC) SK_I2C_SET_BIT(IoC, I2C_DATA_DIR)
-#define I2C_DATA_IN(IoC) SK_I2C_CLR_BIT(IoC, I2C_DATA_DIR | I2C_DATA)
-#define I2C_CLK_HIGH(IoC) SK_I2C_SET_BIT(IoC, I2C_CLK)
-#define I2C_CLK_LOW(IoC) SK_I2C_CLR_BIT(IoC, I2C_CLK | I2C_DATA_DIR)
-#define I2C_START_COND(IoC) SK_I2C_CLR_BIT(IoC, I2C_CLK)
-
-#define NS2CLKT(x) ((x*125L)/10000)
-
-/*--------------- I2C Interface Register Functions --------------- */
-
-/*
- * sending one bit
- */
-void SkI2cSndBit(
-SK_IOC IoC, /* I/O Context */
-SK_U8 Bit) /* Bit to send */
-{
- I2C_DATA_OUT(IoC);
- if (Bit) {
- I2C_DATA_HIGH(IoC);
- }
- else {
- I2C_DATA_LOW(IoC);
- }
- SkDgWaitTime(IoC, NS2BCLK(T_DATA_IN_SETUP));
- I2C_CLK_HIGH(IoC);
- SkDgWaitTime(IoC, NS2BCLK(T_CLK_HIGH));
- I2C_CLK_LOW(IoC);
-} /* SkI2cSndBit*/
-
-
-/*
- * Signal a start to the I2C Bus.
- *
- * A start is signaled when data goes to low in a high clock cycle.
- *
- * Ends with Clock Low.
- *
- * Status: not tested
- */
-void SkI2cStart(
-SK_IOC IoC) /* I/O Context */
-{
- /* Init data and Clock to output lines */
- /* Set Data high */
- I2C_DATA_OUT(IoC);
- I2C_DATA_HIGH(IoC);
- /* Set Clock high */
- I2C_CLK_HIGH(IoC);
-
- SkDgWaitTime(IoC, NS2BCLK(T_START_SETUP));
-
- /* Set Data Low */
- I2C_DATA_LOW(IoC);
-
- SkDgWaitTime(IoC, NS2BCLK(T_START_HOLD));
-
- /* Clock low without Data to Input */
- I2C_START_COND(IoC);
-
- SkDgWaitTime(IoC, NS2BCLK(T_CLK_LOW));
-} /* SkI2cStart */
-
-
-void SkI2cStop(
-SK_IOC IoC) /* I/O Context */
-{
- /* Init data and Clock to output lines */
- /* Set Data low */
- I2C_DATA_OUT(IoC);
- I2C_DATA_LOW(IoC);
-
- SkDgWaitTime(IoC, NS2BCLK(T_CLK_2_DATA_OUT));
-
- /* Set Clock high */
- I2C_CLK_HIGH(IoC);
-
- SkDgWaitTime(IoC, NS2BCLK(T_STOP_SETUP));
-
- /*
- * Set Data High: Do it by setting the Data Line to Input.
- * Because of a pull up resistor the Data Line
- * floods to high.
- */
- I2C_DATA_IN(IoC);
-
- /*
- * When I2C activity is stopped
- * o DATA should be set to input and
- * o CLOCK should be set to high!
- */
- SkDgWaitTime(IoC, NS2BCLK(T_BUS_IDLE));
-} /* SkI2cStop */
-
-
-/*
- * Receive just one bit via the I2C bus.
- *
- * Note: Clock must be set to LOW before calling this function.
- *
- * Returns The received bit.
- */
-int SkI2cRcvBit(
-SK_IOC IoC) /* I/O Context */
-{
- int Bit;
- SK_U8 I2cSwCtrl;
-
- /* Init data as input line */
- I2C_DATA_IN(IoC);
-
- SkDgWaitTime(IoC, NS2BCLK(T_CLK_2_DATA_OUT));
-
- I2C_CLK_HIGH(IoC);
-
- SkDgWaitTime(IoC, NS2BCLK(T_CLK_HIGH));
-
- SK_I2C_GET_SW(IoC, &I2cSwCtrl);
-
- Bit = (I2cSwCtrl & I2C_DATA) ? 1 : 0;
-
- I2C_CLK_LOW(IoC);
- SkDgWaitTime(IoC, NS2BCLK(T_CLK_LOW-T_CLK_2_DATA_OUT));
-
- return(Bit);
-} /* SkI2cRcvBit */
-
-
-/*
- * Receive an ACK.
- *
- * returns 0 If acknowledged
- * 1 in case of an error
- */
-int SkI2cRcvAck(
-SK_IOC IoC) /* I/O Context */
-{
- /*
- * Received bit must be zero.
- */
- return(SkI2cRcvBit(IoC) != 0);
-} /* SkI2cRcvAck */
-
-
-/*
- * Send an NACK.
- */
-void SkI2cSndNAck(
-SK_IOC IoC) /* I/O Context */
-{
- /*
- * Received bit must be zero.
- */
- SkI2cSndBit(IoC, 1);
-} /* SkI2cSndNAck */
-
-
-/*
- * Send an ACK.
- */
-void SkI2cSndAck(
-SK_IOC IoC) /* I/O Context */
-{
- /*
- * Received bit must be zero.
- *
- */
- SkI2cSndBit(IoC, 0);
-} /* SkI2cSndAck */
-
-
-/*
- * Send one byte to the I2C device and wait for ACK.
- *
- * Return acknowleged status.
- */
-int SkI2cSndByte(
-SK_IOC IoC, /* I/O Context */
-int Byte) /* byte to send */
-{
- int i;
-
- for (i = 0; i < 8; i++) {
- if (Byte & (1<<(7-i))) {
- SkI2cSndBit(IoC, 1);
- }
- else {
- SkI2cSndBit(IoC, 0);
- }
- }
-
- return(SkI2cRcvAck(IoC));
-} /* SkI2cSndByte */
-
-
-/*
- * Receive one byte and ack it.
- *
- * Return byte.
- */
-int SkI2cRcvByte(
-SK_IOC IoC, /* I/O Context */
-int Last) /* Last Byte Flag */
-{
- int i;
- int Byte = 0;
-
- for (i = 0; i < 8; i++) {
- Byte <<= 1;
- Byte |= SkI2cRcvBit(IoC);
- }
-
- if (Last) {
- SkI2cSndNAck(IoC);
- }
- else {
- SkI2cSndAck(IoC);
- }
-
- return(Byte);
-} /* SkI2cRcvByte */
-
-
-/*
- * Start dialog and send device address
- *
- * Return 0 if acknowleged, 1 in case of an error
- */
-int SkI2cSndDev(
-SK_IOC IoC, /* I/O Context */
-int Addr, /* Device Address */
-int Rw) /* Read / Write Flag */
-{
- SkI2cStart(IoC);
- Rw = ~Rw;
- Rw &= I2C_WRITE;
- return(SkI2cSndByte(IoC, (Addr<<1) | Rw));
-} /* SkI2cSndDev */
-
-#endif /* SK_DIAG */
-
-/*----------------- I2C CTRL Register Functions ----------*/
-
-/*
- * waits for a completion of an I2C transfer
- *
- * returns 0: success, transfer completes
- * 1: error, transfer does not complete, I2C transfer
- * killed, wait loop terminated.
- */
-int SkI2cWait(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Event) /* complete event to wait for (I2C_READ or I2C_WRITE) */
-{
- SK_U64 StartTime;
- SK_U64 CurrentTime;
- SK_U32 I2cCtrl;
-
- StartTime = SkOsGetTime(pAC);
-
- do {
- CurrentTime = SkOsGetTime(pAC);
-
- if (CurrentTime - StartTime > SK_TICKS_PER_SEC / 8) {
-
- SK_I2C_STOP(IoC);
-#ifndef SK_DIAG
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E002, SKERR_I2C_E002MSG);
-#endif /* !SK_DIAG */
- return(1);
- }
-
- SK_I2C_GET_CTL(IoC, &I2cCtrl);
-
-#ifdef xYUKON_DBG
- printf("StartTime=%lu, CurrentTime=%lu\n",
- StartTime, CurrentTime);
- if (kbhit()) {
- return(1);
- }
-#endif /* YUKON_DBG */
-
- } while ((I2cCtrl & I2C_FLAG) == (SK_U32)Event << 31);
-
- return(0);
-} /* SkI2cWait */
-
-
-/*
- * waits for a completion of an I2C transfer
- *
- * Returns
- * Nothing
- */
-void SkI2cWaitIrq(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC) /* I/O Context */
-{
- SK_SENSOR *pSen;
- SK_U64 StartTime;
- SK_U32 IrqSrc;
-
- pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
-
- if (pSen->SenState == SK_SEN_IDLE) {
- return;
- }
-
- StartTime = SkOsGetTime(pAC);
- do {
- if (SkOsGetTime(pAC) - StartTime > SK_TICKS_PER_SEC / 8) {
- SK_I2C_STOP(IoC);
-#ifndef SK_DIAG
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E016, SKERR_I2C_E016MSG);
-#endif /* !SK_DIAG */
- return;
- }
- SK_IN32(IoC, B0_ISRC, &IrqSrc);
- } while ((IrqSrc & IS_I2C_READY) == 0);
-
- pSen->SenState = SK_SEN_IDLE;
- return;
-} /* SkI2cWaitIrq */
-
-/*
- * writes a single byte or 4 bytes into the I2C device
- *
- * returns 0: success
- * 1: error
- */
-int SkI2cWrite(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 I2cData, /* I2C Data to write */
-int I2cDev, /* I2C Device Address */
-int I2cReg, /* I2C Device Register Address */
-int I2cBurst) /* I2C Burst Flag */
-{
- SK_OUT32(IoC, B2_I2C_DATA, I2cData);
- SK_I2C_CTL(IoC, I2C_WRITE, I2cDev, I2cReg, I2cBurst);
-
- return(SkI2cWait(pAC, IoC, I2C_WRITE));
-} /* SkI2cWrite*/
-
-
-#ifdef SK_DIAG
-
-/*
- * reads a single byte or 4 bytes from the I2C device
- *
- * returns the word read
- */
-SK_U32 SkI2cRead(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int I2cDev, /* I2C Device Address */
-int I2cReg, /* I2C Device Register Address */
-int I2cBurst) /* I2C Burst Flag */
-{
- SK_U32 Data;
-
- SK_OUT32(IoC, B2_I2C_DATA, 0);
- SK_I2C_CTL(IoC, I2C_READ, I2cDev, I2cReg, I2cBurst);
-
- if (SkI2cWait(pAC, IoC, I2C_READ) != 0) {
- w_print("%s\n", SKERR_I2C_E002MSG);
- }
-
- SK_IN32(IoC, B2_I2C_DATA, &Data);
- return(Data);
-} /* SkI2cRead */
-
-#endif /* SK_DIAG */
-
-
-/*
- * read a sensor's value
- *
- * This function reads a sensor's value from the I2C sensor chip. The sensor
- * is defined by its index into the sensors database in the struct pAC points
- * to.
- * Returns
- * 1 if the read is completed
- * 0 if the read must be continued (I2C Bus still allocated)
- */
-int SkI2cReadSensor(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_SENSOR *pSen) /* Sensor to be read */
-{
- if (pSen->SenRead != NULL) {
- return((*pSen->SenRead)(pAC, IoC, pSen));
- }
- else
- return(0); /* no success */
-} /* SkI2cReadSensor*/
-
-/*
- * Do the Init state 0 initialization
- */
-static int SkI2cInit0(
-SK_AC *pAC) /* Adapter Context */
-{
- int i;
-
- /* Begin with first sensor */
- pAC->I2c.CurrSens = 0;
-
- /* Begin with timeout control for state machine */
- pAC->I2c.TimerMode = SK_TIMER_WATCH_STATEMACHINE;
-
- /* Set sensor number to zero */
- pAC->I2c.MaxSens = 0;
-
-#ifndef SK_DIAG
- /* Initialize Number of Dummy Reads */
- pAC->I2c.DummyReads = SK_MAX_SENSORS;
-#endif
-
- for (i = 0; i < SK_MAX_SENSORS; i++) {
- pAC->I2c.SenTable[i].SenDesc = "unknown";
- pAC->I2c.SenTable[i].SenType = SK_SEN_UNKNOWN;
- pAC->I2c.SenTable[i].SenThreErrHigh = 0;
- pAC->I2c.SenTable[i].SenThreErrLow = 0;
- pAC->I2c.SenTable[i].SenThreWarnHigh = 0;
- pAC->I2c.SenTable[i].SenThreWarnLow = 0;
- pAC->I2c.SenTable[i].SenReg = LM80_FAN2_IN;
- pAC->I2c.SenTable[i].SenInit = SK_SEN_DYN_INIT_NONE;
- pAC->I2c.SenTable[i].SenValue = 0;
- pAC->I2c.SenTable[i].SenErrFlag = SK_SEN_ERR_NOT_PRESENT;
- pAC->I2c.SenTable[i].SenErrCts = 0;
- pAC->I2c.SenTable[i].SenBegErrTS = 0;
- pAC->I2c.SenTable[i].SenState = SK_SEN_IDLE;
- pAC->I2c.SenTable[i].SenRead = NULL;
- pAC->I2c.SenTable[i].SenDev = 0;
- }
-
- /* Now we are "INIT data"ed */
- pAC->I2c.InitLevel = SK_INIT_DATA;
- return(0);
-} /* SkI2cInit0*/
-
-
-/*
- * Do the init state 1 initialization
- *
- * initialize the following register of the LM80:
- * Configuration register:
- * - START, noINT, activeLOW, noINT#Clear, noRESET, noCI, noGPO#, noINIT
- *
- * Interrupt Mask Register 1:
- * - all interrupts are Disabled (0xff)
- *
- * Interrupt Mask Register 2:
- * - all interrupts are Disabled (0xff) Interrupt modi doesn't matter.
- *
- * Fan Divisor/RST_OUT register:
- * - Divisors set to 1 (bits 00), all others 0s.
- *
- * OS# Configuration/Temperature resolution Register:
- * - all 0s
- *
- */
-static int SkI2cInit1(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC) /* I/O Context */
-{
- int i;
- SK_U8 I2cSwCtrl;
- SK_GEPORT *pPrt; /* GIni Port struct pointer */
-
- if (pAC->I2c.InitLevel != SK_INIT_DATA) {
- /* ReInit not needed in I2C module */
- return(0);
- }
-
- /* Set the Direction of I2C-Data Pin to IN */
- SK_I2C_CLR_BIT(IoC, I2C_DATA_DIR | I2C_DATA);
- /* Check for 32-Bit Yukon with Low at I2C-Data Pin */
- SK_I2C_GET_SW(IoC, &I2cSwCtrl);
-
- if ((I2cSwCtrl & I2C_DATA) == 0) {
- /* this is a 32-Bit board */
- pAC->GIni.GIYukon32Bit = SK_TRUE;
- return(0);
- }
-
- /* Check for 64 Bit Yukon without sensors */
- if (SkI2cWrite(pAC, IoC, 0, LM80_ADDR, LM80_CFG, 0) != 0) {
- return(0);
- }
-
- (void)SkI2cWrite(pAC, IoC, 0xff, LM80_ADDR, LM80_IMSK_1, 0);
-
- (void)SkI2cWrite(pAC, IoC, 0xff, LM80_ADDR, LM80_IMSK_2, 0);
-
- (void)SkI2cWrite(pAC, IoC, 0, LM80_ADDR, LM80_FAN_CTRL, 0);
-
- (void)SkI2cWrite(pAC, IoC, 0, LM80_ADDR, LM80_TEMP_CTRL, 0);
-
- (void)SkI2cWrite(pAC, IoC, LM80_CFG_START, LM80_ADDR, LM80_CFG, 0);
-
- /*
- * MaxSens has to be updated here, because PhyType is not
- * set when performing Init Level 0
- */
- pAC->I2c.MaxSens = 5;
-
- pPrt = &pAC->GIni.GP[0];
-
- if (pAC->GIni.GIGenesis) {
- if (pPrt->PhyType == SK_PHY_BCOM) {
- if (pAC->GIni.GIMacsFound == 1) {
- pAC->I2c.MaxSens += 1;
- }
- else {
- pAC->I2c.MaxSens += 3;
- }
- }
- }
- else {
- pAC->I2c.MaxSens += 3;
- }
-
- for (i = 0; i < pAC->I2c.MaxSens; i++) {
- switch (i) {
- case 0:
- pAC->I2c.SenTable[i].SenDesc = "Temperature";
- pAC->I2c.SenTable[i].SenType = SK_SEN_TEMP;
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_TEMP_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_TEMP_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_TEMP_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_TEMP_LOW_ERR;
- pAC->I2c.SenTable[i].SenReg = LM80_TEMP_IN;
- break;
- case 1:
- pAC->I2c.SenTable[i].SenDesc = "Voltage PCI";
- pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PCI_5V_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PCI_5V_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PCI_5V_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PCI_5V_LOW_ERR;
- pAC->I2c.SenTable[i].SenReg = LM80_VT0_IN;
- break;
- case 2:
- pAC->I2c.SenTable[i].SenDesc = "Voltage PCI-IO";
- pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PCI_IO_5V_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PCI_IO_5V_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PCI_IO_3V3_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PCI_IO_3V3_LOW_ERR;
- pAC->I2c.SenTable[i].SenReg = LM80_VT1_IN;
- pAC->I2c.SenTable[i].SenInit = SK_SEN_DYN_INIT_PCI_IO;
- break;
- case 3:
- pAC->I2c.SenTable[i].SenDesc = "Voltage ASIC";
- pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_VDD_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_VDD_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_VDD_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_VDD_LOW_ERR;
- pAC->I2c.SenTable[i].SenReg = LM80_VT2_IN;
- break;
- case 4:
- if (pAC->GIni.GIGenesis) {
- if (pPrt->PhyType == SK_PHY_BCOM) {
- pAC->I2c.SenTable[i].SenDesc = "Voltage PHY A PLL";
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PLL_3V3_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PLL_3V3_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PLL_3V3_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PLL_3V3_LOW_ERR;
- }
- else {
- pAC->I2c.SenTable[i].SenDesc = "Voltage PMA";
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PLL_3V3_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PLL_3V3_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PLL_3V3_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PLL_3V3_LOW_ERR;
- }
- }
- else {
- pAC->I2c.SenTable[i].SenDesc = "Voltage VAUX";
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_VAUX_3V3_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_VAUX_3V3_HIGH_WARN;
- if (pAC->GIni.GIVauxAvail) {
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_VAUX_3V3_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_VAUX_3V3_LOW_ERR;
- }
- else {
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_VAUX_0V_WARN_ERR;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_VAUX_0V_WARN_ERR;
- }
- }
- pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
- pAC->I2c.SenTable[i].SenReg = LM80_VT3_IN;
- break;
- case 5:
- if (pAC->GIni.GIGenesis) {
- pAC->I2c.SenTable[i].SenDesc = "Voltage PHY 2V5";
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PHY_2V5_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PHY_2V5_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PHY_2V5_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PHY_2V5_LOW_ERR;
- }
- else {
- pAC->I2c.SenTable[i].SenDesc = "Voltage ASIC-Co 1V5";
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_CORE_1V5_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_CORE_1V5_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_CORE_1V5_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_CORE_1V5_LOW_ERR;
- }
- pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
- pAC->I2c.SenTable[i].SenReg = LM80_VT4_IN;
- break;
- case 6:
- if (pAC->GIni.GIGenesis) {
- pAC->I2c.SenTable[i].SenDesc = "Voltage PHY B PLL";
- }
- else {
- pAC->I2c.SenTable[i].SenDesc = "Voltage PHY 3V3";
- }
- pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PLL_3V3_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PLL_3V3_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PLL_3V3_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PLL_3V3_LOW_ERR;
- pAC->I2c.SenTable[i].SenReg = LM80_VT5_IN;
- break;
- case 7:
- if (pAC->GIni.GIGenesis) {
- pAC->I2c.SenTable[i].SenDesc = "Speed Fan";
- pAC->I2c.SenTable[i].SenType = SK_SEN_FAN;
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_FAN_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_FAN_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_FAN_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_FAN_LOW_ERR;
- pAC->I2c.SenTable[i].SenReg = LM80_FAN2_IN;
- }
- else {
- pAC->I2c.SenTable[i].SenDesc = "Voltage PHY 2V5";
- pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
- pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PHY_2V5_HIGH_ERR;
- pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PHY_2V5_HIGH_WARN;
- pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PHY_2V5_LOW_WARN;
- pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PHY_2V5_LOW_ERR;
- pAC->I2c.SenTable[i].SenReg = LM80_VT6_IN;
- }
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_INIT | SK_ERRCL_SW,
- SKERR_I2C_E001, SKERR_I2C_E001MSG);
- break;
- }
-
- pAC->I2c.SenTable[i].SenValue = 0;
- pAC->I2c.SenTable[i].SenErrFlag = SK_SEN_ERR_OK;
- pAC->I2c.SenTable[i].SenErrCts = 0;
- pAC->I2c.SenTable[i].SenBegErrTS = 0;
- pAC->I2c.SenTable[i].SenState = SK_SEN_IDLE;
- pAC->I2c.SenTable[i].SenRead = SkLm80ReadSensor;
- pAC->I2c.SenTable[i].SenDev = LM80_ADDR;
- }
-
-#ifndef SK_DIAG
- pAC->I2c.DummyReads = pAC->I2c.MaxSens;
-#endif /* !SK_DIAG */
-
- /* Clear I2C IRQ */
- SK_OUT32(IoC, B2_I2C_IRQ, I2C_CLR_IRQ);
-
- /* Now we are I/O initialized */
- pAC->I2c.InitLevel = SK_INIT_IO;
- return(0);
-} /* SkI2cInit1 */
-
-
-/*
- * Init level 2: Start first sensor read.
- */
-static int SkI2cInit2(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC) /* I/O Context */
-{
- int ReadComplete;
- SK_SENSOR *pSen;
-
- if (pAC->I2c.InitLevel != SK_INIT_IO) {
- /* ReInit not needed in I2C module */
- /* Init0 and Init2 not permitted */
- return(0);
- }
-
- pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
- ReadComplete = SkI2cReadSensor(pAC, IoC, pSen);
-
- if (ReadComplete) {
- SK_ERR_LOG(pAC, SK_ERRCL_INIT, SKERR_I2C_E008, SKERR_I2C_E008MSG);
- }
-
- /* Now we are correctly initialized */
- pAC->I2c.InitLevel = SK_INIT_RUN;
-
- return(0);
-} /* SkI2cInit2*/
-
-
-/*
- * Initialize I2C devices
- *
- * Get the first voltage value and discard it.
- * Go into temperature read mode. A default pointer is not set.
- *
- * The things to be done depend on the init level in the parameter list:
- * Level 0:
- * Initialize only the data structures. Do NOT access hardware.
- * Level 1:
- * Initialize hardware through SK_IN / SK_OUT commands. Do NOT use interrupts.
- * Level 2:
- * Everything is possible. Interrupts may be used from now on.
- *
- * return:
- * 0 = success
- * other = error.
- */
-int SkI2cInit(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context needed in levels 1 and 2 */
-int Level) /* Init Level */
-{
-
- switch (Level) {
- case SK_INIT_DATA:
- return(SkI2cInit0(pAC));
- case SK_INIT_IO:
- return(SkI2cInit1(pAC, IoC));
- case SK_INIT_RUN:
- return(SkI2cInit2(pAC, IoC));
- default:
- break;
- }
-
- return(0);
-} /* SkI2cInit */
-
-
-#ifndef SK_DIAG
-
-/*
- * Interrupt service function for the I2C Interface
- *
- * Clears the Interrupt source
- *
- * Reads the register and check it for sending a trap.
- *
- * Starts the timer if necessary.
- */
-void SkI2cIsr(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC) /* I/O Context */
-{
- SK_EVPARA Para;
-
- /* Clear I2C IRQ */
- SK_OUT32(IoC, B2_I2C_IRQ, I2C_CLR_IRQ);
-
- Para.Para64 = 0;
- SkEventQueue(pAC, SKGE_I2C, SK_I2CEV_IRQ, Para);
-} /* SkI2cIsr */
-
-
-/*
- * Check this sensors Value against the threshold and send events.
- */
-static void SkI2cCheckSensor(
-SK_AC *pAC, /* Adapter Context */
-SK_SENSOR *pSen)
-{
- SK_EVPARA ParaLocal;
- SK_BOOL TooHigh; /* Is sensor too high? */
- SK_BOOL TooLow; /* Is sensor too low? */
- SK_U64 CurrTime; /* Current Time */
- SK_BOOL DoTrapSend; /* We need to send a trap */
- SK_BOOL DoErrLog; /* We need to log the error */
- SK_BOOL IsError; /* We need to log the error */
-
- /* Check Dummy Reads first */
- if (pAC->I2c.DummyReads > 0) {
- pAC->I2c.DummyReads--;
- return;
- }
-
- /* Get the current time */
- CurrTime = SkOsGetTime(pAC);
-
- /* Set para to the most useful setting: The current sensor. */
- ParaLocal.Para64 = (SK_U64)pAC->I2c.CurrSens;
-
- /* Check the Value against the thresholds. First: Error Thresholds */
- TooHigh = (pSen->SenValue > pSen->SenThreErrHigh);
- TooLow = (pSen->SenValue < pSen->SenThreErrLow);
-
- IsError = SK_FALSE;
- if (TooHigh || TooLow) {
- /* Error condition is satisfied */
- DoTrapSend = SK_TRUE;
- DoErrLog = SK_TRUE;
-
- /* Now error condition is satisfied */
- IsError = SK_TRUE;
-
- if (pSen->SenErrFlag == SK_SEN_ERR_ERR) {
- /* This state is the former one */
-
- /* So check first whether we have to send a trap */
- if (pSen->SenLastErrTrapTS + SK_SEN_ERR_TR_HOLD >
- CurrTime) {
- /*
- * Do NOT send the Trap. The hold back time
- * has to run out first.
- */
- DoTrapSend = SK_FALSE;
- }
-
- /* Check now whether we have to log an Error */
- if (pSen->SenLastErrLogTS + SK_SEN_ERR_LOG_HOLD >
- CurrTime) {
- /*
- * Do NOT log the error. The hold back time
- * has to run out first.
- */
- DoErrLog = SK_FALSE;
- }
- }
- else {
- /* We came from a different state -> Set Begin Time Stamp */
- pSen->SenBegErrTS = CurrTime;
- pSen->SenErrFlag = SK_SEN_ERR_ERR;
- }
-
- if (DoTrapSend) {
- /* Set current Time */
- pSen->SenLastErrTrapTS = CurrTime;
- pSen->SenErrCts++;
-
- /* Queue PNMI Event */
- SkEventQueue(pAC, SKGE_PNMI, (TooHigh ?
- SK_PNMI_EVT_SEN_ERR_UPP :
- SK_PNMI_EVT_SEN_ERR_LOW),
- ParaLocal);
- }
-
- if (DoErrLog) {
- /* Set current Time */
- pSen->SenLastErrLogTS = CurrTime;
-
- if (pSen->SenType == SK_SEN_TEMP) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E011,
- SKERR_I2C_E011MSG);
- } else if (pSen->SenType == SK_SEN_VOLT) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E012,
- SKERR_I2C_E012MSG);
- } else
- {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E015,
- SKERR_I2C_E015MSG);
- }
- }
- }
-
- /* Check the Value against the thresholds */
- /* 2nd: Warning thresholds */
- TooHigh = (pSen->SenValue > pSen->SenThreWarnHigh);
- TooLow = (pSen->SenValue < pSen->SenThreWarnLow);
-
- if (!IsError && (TooHigh || TooLow)) {
- /* Error condition is satisfied */
- DoTrapSend = SK_TRUE;
- DoErrLog = SK_TRUE;
-
- if (pSen->SenErrFlag == SK_SEN_ERR_WARN) {
- /* This state is the former one */
-
- /* So check first whether we have to send a trap */
- if (pSen->SenLastWarnTrapTS + SK_SEN_WARN_TR_HOLD >
- CurrTime) {
- /*
- * Do NOT send the Trap. The hold back time
- * has to run out first.
- */
- DoTrapSend = SK_FALSE;
- }
-
- /* Check now whether we have to log an Error */
- if (pSen->SenLastWarnLogTS + SK_SEN_WARN_LOG_HOLD >
- CurrTime) {
- /*
- * Do NOT log the error. The hold back time
- * has to run out first.
- */
- DoErrLog = SK_FALSE;
- }
- }
- else {
- /* We came from a different state -> Set Begin Time Stamp */
- pSen->SenBegWarnTS = CurrTime;
- pSen->SenErrFlag = SK_SEN_ERR_WARN;
- }
-
- if (DoTrapSend) {
- /* Set current Time */
- pSen->SenLastWarnTrapTS = CurrTime;
- pSen->SenWarnCts++;
-
- /* Queue PNMI Event */
- SkEventQueue(pAC, SKGE_PNMI, (TooHigh ?
- SK_PNMI_EVT_SEN_WAR_UPP :
- SK_PNMI_EVT_SEN_WAR_LOW),
- ParaLocal);
- }
-
- if (DoErrLog) {
- /* Set current Time */
- pSen->SenLastWarnLogTS = CurrTime;
-
- if (pSen->SenType == SK_SEN_TEMP) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E009,
- SKERR_I2C_E009MSG);
- } else if (pSen->SenType == SK_SEN_VOLT) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E010,
- SKERR_I2C_E010MSG);
- } else
- {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E014,
- SKERR_I2C_E014MSG);
- }
- }
- }
-
- /* Check for NO error at all */
- if (!IsError && !TooHigh && !TooLow) {
- /* Set o.k. Status if no error and no warning condition */
- pSen->SenErrFlag = SK_SEN_ERR_OK;
- }
-
- /* End of check against the thresholds */
-
- /* Bug fix AF: 16.Aug.2001: Correct the init base
- * of LM80 sensor.
- */
- if (pSen->SenInit == SK_SEN_DYN_INIT_PCI_IO) {
-
- pSen->SenInit = SK_SEN_DYN_INIT_NONE;
-
- if (pSen->SenValue > SK_SEN_PCI_IO_RANGE_LIMITER) {
- /* 5V PCI-IO Voltage */
- pSen->SenThreWarnLow = SK_SEN_PCI_IO_5V_LOW_WARN;
- pSen->SenThreErrLow = SK_SEN_PCI_IO_5V_LOW_ERR;
- }
- else {
- /* 3.3V PCI-IO Voltage */
- pSen->SenThreWarnHigh = SK_SEN_PCI_IO_3V3_HIGH_WARN;
- pSen->SenThreErrHigh = SK_SEN_PCI_IO_3V3_HIGH_ERR;
- }
- }
-
-#if 0
- /* Dynamic thresholds also for VAUX of LM80 sensor */
- if (pSen->SenInit == SK_SEN_DYN_INIT_VAUX) {
-
- pSen->SenInit = SK_SEN_DYN_INIT_NONE;
-
- /* 3.3V VAUX Voltage */
- if (pSen->SenValue > SK_SEN_VAUX_RANGE_LIMITER) {
- pSen->SenThreWarnLow = SK_SEN_VAUX_3V3_LOW_WARN;
- pSen->SenThreErrLow = SK_SEN_VAUX_3V3_LOW_ERR;
- }
- /* 0V VAUX Voltage */
- else {
- pSen->SenThreWarnHigh = SK_SEN_VAUX_0V_WARN_ERR;
- pSen->SenThreErrHigh = SK_SEN_VAUX_0V_WARN_ERR;
- }
- }
-
- /*
- * Check initialization state:
- * The VIO Thresholds need adaption
- */
- if (!pSen->SenInit && pSen->SenReg == LM80_VT1_IN &&
- pSen->SenValue > SK_SEN_WARNLOW2C &&
- pSen->SenValue < SK_SEN_WARNHIGH2) {
- pSen->SenThreErrLow = SK_SEN_ERRLOW2C;
- pSen->SenThreWarnLow = SK_SEN_WARNLOW2C;
- pSen->SenInit = SK_TRUE;
- }
-
- if (!pSen->SenInit && pSen->SenReg == LM80_VT1_IN &&
- pSen->SenValue > SK_SEN_WARNLOW2 &&
- pSen->SenValue < SK_SEN_WARNHIGH2C) {
- pSen->SenThreErrHigh = SK_SEN_ERRHIGH2C;
- pSen->SenThreWarnHigh = SK_SEN_WARNHIGH2C;
- pSen->SenInit = SK_TRUE;
- }
-#endif
-
- if (pSen->SenInit != SK_SEN_DYN_INIT_NONE) {
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E013, SKERR_I2C_E013MSG);
- }
-} /* SkI2cCheckSensor*/
-
-
-/*
- * The only Event to be served is the timeout event
- *
- */
-int SkI2cEvent(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Event, /* Module specific Event */
-SK_EVPARA Para) /* Event specific Parameter */
-{
- int ReadComplete;
- SK_SENSOR *pSen;
- SK_U32 Time;
- SK_EVPARA ParaLocal;
- int i;
-
- /* New case: no sensors */
- if (pAC->I2c.MaxSens == 0) {
- return(0);
- }
-
- switch (Event) {
- case SK_I2CEV_IRQ:
- pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
- ReadComplete = SkI2cReadSensor(pAC, IoC, pSen);
-
- if (ReadComplete) {
- /* Check sensor against defined thresholds */
- SkI2cCheckSensor (pAC, pSen);
-
- /* Increment Current sensor and set appropriate Timeout */
- pAC->I2c.CurrSens++;
- if (pAC->I2c.CurrSens >= pAC->I2c.MaxSens) {
- pAC->I2c.CurrSens = 0;
- Time = SK_I2C_TIM_LONG;
- }
- else {
- Time = SK_I2C_TIM_SHORT;
- }
-
- /* Start Timer */
- ParaLocal.Para64 = (SK_U64)0;
-
- pAC->I2c.TimerMode = SK_TIMER_NEW_GAUGING;
-
- SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, Time,
- SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
- }
- else {
- /* Start Timer */
- ParaLocal.Para64 = (SK_U64)0;
-
- pAC->I2c.TimerMode = SK_TIMER_WATCH_STATEMACHINE;
-
- SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, SK_I2C_TIM_WATCH,
- SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
- }
- break;
- case SK_I2CEV_TIM:
- if (pAC->I2c.TimerMode == SK_TIMER_NEW_GAUGING) {
-
- ParaLocal.Para64 = (SK_U64)0;
- SkTimerStop(pAC, IoC, &pAC->I2c.SenTimer);
-
- pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
- ReadComplete = SkI2cReadSensor(pAC, IoC, pSen);
-
- if (ReadComplete) {
- /* Check sensor against defined thresholds */
- SkI2cCheckSensor (pAC, pSen);
-
- /* Increment Current sensor and set appropriate Timeout */
- pAC->I2c.CurrSens++;
- if (pAC->I2c.CurrSens == pAC->I2c.MaxSens) {
- pAC->I2c.CurrSens = 0;
- Time = SK_I2C_TIM_LONG;
- }
- else {
- Time = SK_I2C_TIM_SHORT;
- }
-
- /* Start Timer */
- ParaLocal.Para64 = (SK_U64)0;
-
- pAC->I2c.TimerMode = SK_TIMER_NEW_GAUGING;
-
- SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, Time,
- SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
- }
- }
- else {
- pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
- pSen->SenErrFlag = SK_SEN_ERR_FAULTY;
- SK_I2C_STOP(IoC);
-
- /* Increment Current sensor and set appropriate Timeout */
- pAC->I2c.CurrSens++;
- if (pAC->I2c.CurrSens == pAC->I2c.MaxSens) {
- pAC->I2c.CurrSens = 0;
- Time = SK_I2C_TIM_LONG;
- }
- else {
- Time = SK_I2C_TIM_SHORT;
- }
-
- /* Start Timer */
- ParaLocal.Para64 = (SK_U64)0;
-
- pAC->I2c.TimerMode = SK_TIMER_NEW_GAUGING;
-
- SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, Time,
- SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
- }
- break;
- case SK_I2CEV_CLEAR:
- for (i = 0; i < SK_MAX_SENSORS; i++) {
- pAC->I2c.SenTable[i].SenErrFlag = SK_SEN_ERR_OK;
- pAC->I2c.SenTable[i].SenErrCts = 0;
- pAC->I2c.SenTable[i].SenWarnCts = 0;
- pAC->I2c.SenTable[i].SenBegErrTS = 0;
- pAC->I2c.SenTable[i].SenBegWarnTS = 0;
- pAC->I2c.SenTable[i].SenLastErrTrapTS = (SK_U64)0;
- pAC->I2c.SenTable[i].SenLastErrLogTS = (SK_U64)0;
- pAC->I2c.SenTable[i].SenLastWarnTrapTS = (SK_U64)0;
- pAC->I2c.SenTable[i].SenLastWarnLogTS = (SK_U64)0;
- }
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E006, SKERR_I2C_E006MSG);
- }
-
- return(0);
-} /* SkI2cEvent*/
-
-#endif /* !SK_DIAG */
+/******************************************************************************
+ *
+ * Name: ski2c.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Functions to access Voltage and Temperature Sensor
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: ski2c.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.57 2003/01/28 09:17:38 rschmidt
+ * Fixed handling for sensors on YUKON Fiber.
+ * Editorial changes.
+ *
+ * Revision 1.56 2002/12/19 14:20:41 rschmidt
+ * Added debugging code in SkI2cWait().
+ * Replaced all I2C-write operations with function SkI2cWrite().
+ * Fixed compiler warning because of uninitialized 'Time' in SkI2cEvent().
+ * Editorial changes.
+ *
+ * Revision 1.55 2002/10/15 07:23:55 rschmidt
+ * Added setting of the GIYukon32Bit bool variable to distinguish
+ * 32-bit adapters.
+ * Editorial changes (TWSI).
+ *
+ * Revision 1.54 2002/08/13 09:05:06 rschmidt
+ * Added new thresholds if VAUX is not available (GIVauxAvail).
+ * Merged defines for PHY PLL 3V3 voltage (A and B).
+ * Editorial changes.
+ *
+ * Revision 1.53 2002/08/08 11:04:53 rwahl
+ * Added missing comment for revision 1.51
+ *
+ * Revision 1.52 2002/08/08 10:09:02 jschmalz
+ * Sensor init state caused wrong error log entry
+ *
+ * Revision 1.51 2002/08/06 09:43:03 jschmalz
+ * Extensions and changes for Yukon
+ *
+ * Revision 1.50 2002/08/02 12:09:22 rschmidt
+ * Added support for YUKON sensors.
+ * Editorial changes.
+ *
+ * Revision 1.49 2002/07/30 11:07:52 rschmidt
+ * Replaced MaxSens init by update for Copper in SkI2cInit1(),
+ * because it was already initialized in SkI2cInit0().
+ * Editorial changes.
+ *
+ * Revision 1.48 2001/08/16 12:44:33 afischer
+ * LM80 sensor init values corrected
+ *
+ * Revision 1.47 2001/04/05 11:38:09 rassmann
+ * Set SenState to idle in SkI2cWaitIrq().
+ * Changed error message in SkI2cWaitIrq().
+ *
+ * Revision 1.46 2001/04/02 14:03:35 rassmann
+ * Changed pAC to IoC in SK_IN32().
+ *
+ * Revision 1.45 2001/03/21 12:12:49 rassmann
+ * Resetting I2C_READY interrupt in SkI2cInit1().
+ *
+ * Revision 1.44 2000/08/07 15:49:03 gklug
+ * Fix: SK_INFAST only in NetWare driver.
+ *
+ * Revision 1.43 2000/08/03 14:28:17 rassmann
+ * Added function to wait for I2C being ready before resetting the board.
+ * Replaced one duplicate "out of range" message with correct one.
+ *
+ * Revision 1.42 1999/11/22 13:35:12 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.41 1999/09/14 14:11:30 malthoff
+ * The 1000BT Dual Link adapter has got only one Fan.
+ * The second Fan has been removed.
+ *
+ * Revision 1.40 1999/05/27 13:37:27 malthoff
+ * Set divisor of 1 for fan count calculation.
+ *
+ * Revision 1.39 1999/05/20 14:54:43 malthoff
+ * I2c.DummyReads is not used in Diagnostics.
+ *
+ * Revision 1.38 1999/05/20 09:20:56 cgoos
+ * Changes for 1000Base-T (up to 9 sensors and fans).
+ *
+ * Revision 1.37 1999/03/25 15:11:36 gklug
+ * fix: reset error flag if sensor reads correct value
+ *
+ * Revision 1.36 1999/01/07 14:11:16 gklug
+ * fix: break added
+ *
+ * Revision 1.35 1999/01/05 15:31:49 gklug
+ * fix: CLEAR STAT command is now added correctly
+ *
+ * Revision 1.34 1998/12/01 13:45:16 gklug
+ * fix: introduced Init level, because we don't need reinits
+ *
+ * Revision 1.33 1998/11/09 14:54:25 malthoff
+ * Modify I2C Transfer Timeout handling for Diagnostics.
+ *
+ * Revision 1.32 1998/11/03 06:54:35 gklug
+ * fix: Need dummy reads at the beginning to init sensors
+ *
+ * Revision 1.31 1998/11/03 06:42:42 gklug
+ * fix: select correctVIO range only if between warning levels
+ *
+ * Revision 1.30 1998/11/02 07:36:53 gklug
+ * fix: Error should not include WARNING message
+ *
+ * Revision 1.29 1998/10/30 15:07:43 malthoff
+ * Disable 'I2C does not compelete' error log for diagnostics.
+ *
+ * Revision 1.28 1998/10/22 09:48:11 gklug
+ * fix: SysKonnectFileId typo
+ *
+ * Revision 1.27 1998/10/20 09:59:46 gklug
+ * add: parameter to SkOsGetTime
+ *
+ * Revision 1.26 1998/10/09 06:10:59 malthoff
+ * Remove ID_sccs by SysKonnectFileId.
+ *
+ * Revision 1.25 1998/09/08 12:40:26 gklug
+ * fix: syntax error in if clause
+ *
+ * Revision 1.24 1998/09/08 12:19:42 gklug
+ * chg: INIT Level checking
+ *
+ * Revision 1.23 1998/09/08 07:37:20 gklug
+ * fix: log error if PCI_IO voltage sensor could not be initialized
+ *
+ * Revision 1.22 1998/09/04 08:30:03 malthoff
+ * Bugfixes during SK_DIAG testing:
+ * - correct NS2BCLK() macro
+ * - correct SkI2cSndDev()
+ * - correct SkI2cWait() loop waiting for an event
+ *
+ * Revision 1.21 1998/08/27 14:46:01 gklug
+ * chg: if-then-else replaced by switch
+ *
+ * Revision 1.20 1998/08/27 14:40:07 gklug
+ * test: integral types
+ *
+ * Revision 1.19 1998/08/25 07:51:54 gklug
+ * fix: typos for compiling
+ *
+ * Revision 1.18 1998/08/25 06:12:24 gklug
+ * add: count errors and warnings
+ * fix: check not the sensor state but the ErrFlag!
+ *
+ * Revision 1.17 1998/08/25 05:56:48 gklug
+ * add: CheckSensor function
+ *
+ * Revision 1.16 1998/08/20 11:41:10 gklug
+ * chg: omit STRCPY macro by using char * as Sensor Description
+ *
+ * Revision 1.15 1998/08/20 11:37:35 gklug
+ * chg: change Ioc to IoC
+ *
+ * Revision 1.14 1998/08/20 11:32:52 gklug
+ * fix: Para compile error
+ *
+ * Revision 1.13 1998/08/20 11:27:41 gklug
+ * fix: Compile bugs with new awrning constants
+ *
+ * Revision 1.12 1998/08/20 08:53:05 gklug
+ * fix: compiler errors
+ * add: Threshold values
+ *
+ * Revision 1.11 1998/08/19 12:39:22 malthoff
+ * Compiler Fix: Some names have changed.
+ *
+ * Revision 1.10 1998/08/19 12:20:56 gklug
+ * fix: remove struct from C files (see CCC)
+ *
+ * Revision 1.9 1998/08/19 06:28:46 malthoff
+ * SkOsGetTime returns SK_U64 now.
+ *
+ * Revision 1.8 1998/08/17 13:53:33 gklug
+ * fix: Parameter of event function and its result
+ *
+ * Revision 1.7 1998/08/17 07:02:15 malthoff
+ * Modify the functions for accessing the I2C SW Registers.
+ * Modify SkI2cWait().
+ * Put Lm80RcvReg into sklm80.c
+ * Remove Compiler Errors.
+ *
+ * Revision 1.6 1998/08/14 07:13:20 malthoff
+ * remove pAc with pAC
+ * remove smc with pAC
+ * change names to new convention
+ *
+ * Revision 1.5 1998/08/14 06:24:49 gklug
+ * add: init level 1 and 2
+ *
+ * Revision 1.4 1998/08/12 14:31:12 gklug
+ * add: error log for unknown event
+ *
+ * Revision 1.3 1998/08/12 13:37:04 gklug
+ * add: Init 0 function
+ *
+ * Revision 1.2 1998/08/11 07:27:15 gklug
+ * add: functions of the interface
+ * adapt rest of source to C coding Conventions
+ * rmv: unnecessary code taken from Mona Lisa
+ *
+ * Revision 1.1 1998/06/19 14:28:43 malthoff
+ * Created. Sources taken from ML Projekt.
+ * Sources have to be reworked for GE.
+ *
+ *
+ ******************************************************************************/
+
+
+#include <config.h>
+
+/*
+ * I2C Protocol
+ */
+static const char SysKonnectFileId[] =
+ "$Id: ski2c.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $";
+
+#include "h/skdrv1st.h" /* Driver Specific Definitions */
+#include "h/lm80.h"
+#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
+
+#ifdef __C2MAN__
+/*
+ I2C protocol implementation.
+
+ General Description:
+
+ The I2C protocol is used for the temperature sensors and for
+ the serial EEPROM which hold the configuration.
+
+ This file covers functions that allow to read write and do
+ some bulk requests a specified I2C address.
+
+ The Genesis has 2 I2C buses. One for the EEPROM which holds
+ the VPD Data and one for temperature and voltage sensor.
+ The following picture shows the I2C buses, I2C devices and
+ their control registers.
+
+ Note: The VPD functions are in skvpd.c
+.
+. PCI Config I2C Bus for VPD Data:
+.
+. +------------+
+. | VPD EEPROM |
+. +------------+
+. |
+. | <-- I2C
+. |
+. +-----------+-----------+
+. | |
+. +-----------------+ +-----------------+
+. | PCI_VPD_ADR_REG | | PCI_VPD_DAT_REG |
+. +-----------------+ +-----------------+
+.
+.
+. I2C Bus for LM80 sensor:
+.
+. +-----------------+
+. | Temperature and |
+. | Voltage Sensor |
+. | LM80 |
+. +-----------------+
+. |
+. |
+. I2C --> |
+. |
+. +----+
+. +-------------->| OR |<--+
+. | +----+ |
+. +------+------+ |
+. | | |
+. +--------+ +--------+ +----------+
+. | B2_I2C | | B2_I2C | | B2_I2C |
+. | _CTRL | | _DATA | | _SW |
+. +--------+ +--------+ +----------+
+.
+ The I2C bus may be driven by the B2_I2C_SW or by the B2_I2C_CTRL
+ and B2_I2C_DATA registers.
+ For driver software it is recommended to use the I2C control and
+ data register, because I2C bus timing is done by the ASIC and
+ an interrupt may be received when the I2C request is completed.
+
+ Clock Rate Timing: MIN MAX generated by
+ VPD EEPROM: 50 kHz 100 kHz HW
+ LM80 over I2C Ctrl/Data reg. 50 kHz 100 kHz HW
+ LM80 over B2_I2C_SW register 0 400 kHz SW
+
+ Note: The clock generated by the hardware is dependend on the
+ PCI clock. If the PCI bus clock is 33 MHz, the I2C/VPD
+ clock is 50 kHz.
+ */
+intro()
+{}
+#endif
+
+#ifdef SK_DIAG
+/*
+ * I2C Fast Mode timing values used by the LM80.
+ * If new devices are added to the I2C bus the timing values have to be checked.
+ */
+#ifndef I2C_SLOW_TIMING
+#define T_CLK_LOW 1300L /* clock low time in ns */
+#define T_CLK_HIGH 600L /* clock high time in ns */
+#define T_DATA_IN_SETUP 100L /* data in Set-up Time */
+#define T_START_HOLD 600L /* start condition hold time */
+#define T_START_SETUP 600L /* start condition Set-up time */
+#define T_STOP_SETUP 600L /* stop condition Set-up time */
+#define T_BUS_IDLE 1300L /* time the bus must free after Tx */
+#define T_CLK_2_DATA_OUT 900L /* max. clock low to data output valid */
+#else /* I2C_SLOW_TIMING */
+/* I2C Standard Mode Timing */
+#define T_CLK_LOW 4700L /* clock low time in ns */
+#define T_CLK_HIGH 4000L /* clock high time in ns */
+#define T_DATA_IN_SETUP 250L /* data in Set-up Time */
+#define T_START_HOLD 4000L /* start condition hold time */
+#define T_START_SETUP 4700L /* start condition Set-up time */
+#define T_STOP_SETUP 4000L /* stop condition Set-up time */
+#define T_BUS_IDLE 4700L /* time the bus must free after Tx */
+#endif /* !I2C_SLOW_TIMING */
+
+#define NS2BCLK(x) (((x)*125)/10000)
+
+/*
+ * I2C Wire Operations
+ *
+ * About I2C_CLK_LOW():
+ *
+ * The Data Direction bit (I2C_DATA_DIR) has to be set to input when setting
+ * clock to low, to prevent the ASIC and the I2C data client from driving the
+ * serial data line simultaneously (ASIC: last bit of a byte = '1', I2C client
+ * send an 'ACK'). See also Concentrator Bugreport No. 10192.
+ */
+#define I2C_DATA_HIGH(IoC) SK_I2C_SET_BIT(IoC, I2C_DATA)
+#define I2C_DATA_LOW(IoC) SK_I2C_CLR_BIT(IoC, I2C_DATA)
+#define I2C_DATA_OUT(IoC) SK_I2C_SET_BIT(IoC, I2C_DATA_DIR)
+#define I2C_DATA_IN(IoC) SK_I2C_CLR_BIT(IoC, I2C_DATA_DIR | I2C_DATA)
+#define I2C_CLK_HIGH(IoC) SK_I2C_SET_BIT(IoC, I2C_CLK)
+#define I2C_CLK_LOW(IoC) SK_I2C_CLR_BIT(IoC, I2C_CLK | I2C_DATA_DIR)
+#define I2C_START_COND(IoC) SK_I2C_CLR_BIT(IoC, I2C_CLK)
+
+#define NS2CLKT(x) ((x*125L)/10000)
+
+/*--------------- I2C Interface Register Functions --------------- */
+
+/*
+ * sending one bit
+ */
+void SkI2cSndBit(
+SK_IOC IoC, /* I/O Context */
+SK_U8 Bit) /* Bit to send */
+{
+ I2C_DATA_OUT(IoC);
+ if (Bit) {
+ I2C_DATA_HIGH(IoC);
+ }
+ else {
+ I2C_DATA_LOW(IoC);
+ }
+ SkDgWaitTime(IoC, NS2BCLK(T_DATA_IN_SETUP));
+ I2C_CLK_HIGH(IoC);
+ SkDgWaitTime(IoC, NS2BCLK(T_CLK_HIGH));
+ I2C_CLK_LOW(IoC);
+} /* SkI2cSndBit*/
+
+
+/*
+ * Signal a start to the I2C Bus.
+ *
+ * A start is signaled when data goes to low in a high clock cycle.
+ *
+ * Ends with Clock Low.
+ *
+ * Status: not tested
+ */
+void SkI2cStart(
+SK_IOC IoC) /* I/O Context */
+{
+ /* Init data and Clock to output lines */
+ /* Set Data high */
+ I2C_DATA_OUT(IoC);
+ I2C_DATA_HIGH(IoC);
+ /* Set Clock high */
+ I2C_CLK_HIGH(IoC);
+
+ SkDgWaitTime(IoC, NS2BCLK(T_START_SETUP));
+
+ /* Set Data Low */
+ I2C_DATA_LOW(IoC);
+
+ SkDgWaitTime(IoC, NS2BCLK(T_START_HOLD));
+
+ /* Clock low without Data to Input */
+ I2C_START_COND(IoC);
+
+ SkDgWaitTime(IoC, NS2BCLK(T_CLK_LOW));
+} /* SkI2cStart */
+
+
+void SkI2cStop(
+SK_IOC IoC) /* I/O Context */
+{
+ /* Init data and Clock to output lines */
+ /* Set Data low */
+ I2C_DATA_OUT(IoC);
+ I2C_DATA_LOW(IoC);
+
+ SkDgWaitTime(IoC, NS2BCLK(T_CLK_2_DATA_OUT));
+
+ /* Set Clock high */
+ I2C_CLK_HIGH(IoC);
+
+ SkDgWaitTime(IoC, NS2BCLK(T_STOP_SETUP));
+
+ /*
+ * Set Data High: Do it by setting the Data Line to Input.
+ * Because of a pull up resistor the Data Line
+ * floods to high.
+ */
+ I2C_DATA_IN(IoC);
+
+ /*
+ * When I2C activity is stopped
+ * o DATA should be set to input and
+ * o CLOCK should be set to high!
+ */
+ SkDgWaitTime(IoC, NS2BCLK(T_BUS_IDLE));
+} /* SkI2cStop */
+
+
+/*
+ * Receive just one bit via the I2C bus.
+ *
+ * Note: Clock must be set to LOW before calling this function.
+ *
+ * Returns The received bit.
+ */
+int SkI2cRcvBit(
+SK_IOC IoC) /* I/O Context */
+{
+ int Bit;
+ SK_U8 I2cSwCtrl;
+
+ /* Init data as input line */
+ I2C_DATA_IN(IoC);
+
+ SkDgWaitTime(IoC, NS2BCLK(T_CLK_2_DATA_OUT));
+
+ I2C_CLK_HIGH(IoC);
+
+ SkDgWaitTime(IoC, NS2BCLK(T_CLK_HIGH));
+
+ SK_I2C_GET_SW(IoC, &I2cSwCtrl);
+
+ Bit = (I2cSwCtrl & I2C_DATA) ? 1 : 0;
+
+ I2C_CLK_LOW(IoC);
+ SkDgWaitTime(IoC, NS2BCLK(T_CLK_LOW-T_CLK_2_DATA_OUT));
+
+ return(Bit);
+} /* SkI2cRcvBit */
+
+
+/*
+ * Receive an ACK.
+ *
+ * returns 0 If acknowledged
+ * 1 in case of an error
+ */
+int SkI2cRcvAck(
+SK_IOC IoC) /* I/O Context */
+{
+ /*
+ * Received bit must be zero.
+ */
+ return(SkI2cRcvBit(IoC) != 0);
+} /* SkI2cRcvAck */
+
+
+/*
+ * Send an NACK.
+ */
+void SkI2cSndNAck(
+SK_IOC IoC) /* I/O Context */
+{
+ /*
+ * Received bit must be zero.
+ */
+ SkI2cSndBit(IoC, 1);
+} /* SkI2cSndNAck */
+
+
+/*
+ * Send an ACK.
+ */
+void SkI2cSndAck(
+SK_IOC IoC) /* I/O Context */
+{
+ /*
+ * Received bit must be zero.
+ *
+ */
+ SkI2cSndBit(IoC, 0);
+} /* SkI2cSndAck */
+
+
+/*
+ * Send one byte to the I2C device and wait for ACK.
+ *
+ * Return acknowleged status.
+ */
+int SkI2cSndByte(
+SK_IOC IoC, /* I/O Context */
+int Byte) /* byte to send */
+{
+ int i;
+
+ for (i = 0; i < 8; i++) {
+ if (Byte & (1<<(7-i))) {
+ SkI2cSndBit(IoC, 1);
+ }
+ else {
+ SkI2cSndBit(IoC, 0);
+ }
+ }
+
+ return(SkI2cRcvAck(IoC));
+} /* SkI2cSndByte */
+
+
+/*
+ * Receive one byte and ack it.
+ *
+ * Return byte.
+ */
+int SkI2cRcvByte(
+SK_IOC IoC, /* I/O Context */
+int Last) /* Last Byte Flag */
+{
+ int i;
+ int Byte = 0;
+
+ for (i = 0; i < 8; i++) {
+ Byte <<= 1;
+ Byte |= SkI2cRcvBit(IoC);
+ }
+
+ if (Last) {
+ SkI2cSndNAck(IoC);
+ }
+ else {
+ SkI2cSndAck(IoC);
+ }
+
+ return(Byte);
+} /* SkI2cRcvByte */
+
+
+/*
+ * Start dialog and send device address
+ *
+ * Return 0 if acknowleged, 1 in case of an error
+ */
+int SkI2cSndDev(
+SK_IOC IoC, /* I/O Context */
+int Addr, /* Device Address */
+int Rw) /* Read / Write Flag */
+{
+ SkI2cStart(IoC);
+ Rw = ~Rw;
+ Rw &= I2C_WRITE;
+ return(SkI2cSndByte(IoC, (Addr<<1) | Rw));
+} /* SkI2cSndDev */
+
+#endif /* SK_DIAG */
+
+/*----------------- I2C CTRL Register Functions ----------*/
+
+/*
+ * waits for a completion of an I2C transfer
+ *
+ * returns 0: success, transfer completes
+ * 1: error, transfer does not complete, I2C transfer
+ * killed, wait loop terminated.
+ */
+int SkI2cWait(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Event) /* complete event to wait for (I2C_READ or I2C_WRITE) */
+{
+ SK_U64 StartTime;
+ SK_U64 CurrentTime;
+ SK_U32 I2cCtrl;
+
+ StartTime = SkOsGetTime(pAC);
+
+ do {
+ CurrentTime = SkOsGetTime(pAC);
+
+ if (CurrentTime - StartTime > SK_TICKS_PER_SEC / 8) {
+
+ SK_I2C_STOP(IoC);
+#ifndef SK_DIAG
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E002, SKERR_I2C_E002MSG);
+#endif /* !SK_DIAG */
+ return(1);
+ }
+
+ SK_I2C_GET_CTL(IoC, &I2cCtrl);
+
+#ifdef xYUKON_DBG
+ printf("StartTime=%lu, CurrentTime=%lu\n",
+ StartTime, CurrentTime);
+ if (kbhit()) {
+ return(1);
+ }
+#endif /* YUKON_DBG */
+
+ } while ((I2cCtrl & I2C_FLAG) == (SK_U32)Event << 31);
+
+ return(0);
+} /* SkI2cWait */
+
+
+/*
+ * waits for a completion of an I2C transfer
+ *
+ * Returns
+ * Nothing
+ */
+void SkI2cWaitIrq(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC) /* I/O Context */
+{
+ SK_SENSOR *pSen;
+ SK_U64 StartTime;
+ SK_U32 IrqSrc;
+
+ pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
+
+ if (pSen->SenState == SK_SEN_IDLE) {
+ return;
+ }
+
+ StartTime = SkOsGetTime(pAC);
+ do {
+ if (SkOsGetTime(pAC) - StartTime > SK_TICKS_PER_SEC / 8) {
+ SK_I2C_STOP(IoC);
+#ifndef SK_DIAG
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E016, SKERR_I2C_E016MSG);
+#endif /* !SK_DIAG */
+ return;
+ }
+ SK_IN32(IoC, B0_ISRC, &IrqSrc);
+ } while ((IrqSrc & IS_I2C_READY) == 0);
+
+ pSen->SenState = SK_SEN_IDLE;
+ return;
+} /* SkI2cWaitIrq */
+
+/*
+ * writes a single byte or 4 bytes into the I2C device
+ *
+ * returns 0: success
+ * 1: error
+ */
+int SkI2cWrite(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 I2cData, /* I2C Data to write */
+int I2cDev, /* I2C Device Address */
+int I2cReg, /* I2C Device Register Address */
+int I2cBurst) /* I2C Burst Flag */
+{
+ SK_OUT32(IoC, B2_I2C_DATA, I2cData);
+ SK_I2C_CTL(IoC, I2C_WRITE, I2cDev, I2cReg, I2cBurst);
+
+ return(SkI2cWait(pAC, IoC, I2C_WRITE));
+} /* SkI2cWrite*/
+
+
+#ifdef SK_DIAG
+
+/*
+ * reads a single byte or 4 bytes from the I2C device
+ *
+ * returns the word read
+ */
+SK_U32 SkI2cRead(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int I2cDev, /* I2C Device Address */
+int I2cReg, /* I2C Device Register Address */
+int I2cBurst) /* I2C Burst Flag */
+{
+ SK_U32 Data;
+
+ SK_OUT32(IoC, B2_I2C_DATA, 0);
+ SK_I2C_CTL(IoC, I2C_READ, I2cDev, I2cReg, I2cBurst);
+
+ if (SkI2cWait(pAC, IoC, I2C_READ) != 0) {
+ w_print("%s\n", SKERR_I2C_E002MSG);
+ }
+
+ SK_IN32(IoC, B2_I2C_DATA, &Data);
+ return(Data);
+} /* SkI2cRead */
+
+#endif /* SK_DIAG */
+
+
+/*
+ * read a sensor's value
+ *
+ * This function reads a sensor's value from the I2C sensor chip. The sensor
+ * is defined by its index into the sensors database in the struct pAC points
+ * to.
+ * Returns
+ * 1 if the read is completed
+ * 0 if the read must be continued (I2C Bus still allocated)
+ */
+int SkI2cReadSensor(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_SENSOR *pSen) /* Sensor to be read */
+{
+ if (pSen->SenRead != NULL) {
+ return((*pSen->SenRead)(pAC, IoC, pSen));
+ }
+ else
+ return(0); /* no success */
+} /* SkI2cReadSensor*/
+
+/*
+ * Do the Init state 0 initialization
+ */
+static int SkI2cInit0(
+SK_AC *pAC) /* Adapter Context */
+{
+ int i;
+
+ /* Begin with first sensor */
+ pAC->I2c.CurrSens = 0;
+
+ /* Begin with timeout control for state machine */
+ pAC->I2c.TimerMode = SK_TIMER_WATCH_STATEMACHINE;
+
+ /* Set sensor number to zero */
+ pAC->I2c.MaxSens = 0;
+
+#ifndef SK_DIAG
+ /* Initialize Number of Dummy Reads */
+ pAC->I2c.DummyReads = SK_MAX_SENSORS;
+#endif
+
+ for (i = 0; i < SK_MAX_SENSORS; i++) {
+ pAC->I2c.SenTable[i].SenDesc = "unknown";
+ pAC->I2c.SenTable[i].SenType = SK_SEN_UNKNOWN;
+ pAC->I2c.SenTable[i].SenThreErrHigh = 0;
+ pAC->I2c.SenTable[i].SenThreErrLow = 0;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = 0;
+ pAC->I2c.SenTable[i].SenThreWarnLow = 0;
+ pAC->I2c.SenTable[i].SenReg = LM80_FAN2_IN;
+ pAC->I2c.SenTable[i].SenInit = SK_SEN_DYN_INIT_NONE;
+ pAC->I2c.SenTable[i].SenValue = 0;
+ pAC->I2c.SenTable[i].SenErrFlag = SK_SEN_ERR_NOT_PRESENT;
+ pAC->I2c.SenTable[i].SenErrCts = 0;
+ pAC->I2c.SenTable[i].SenBegErrTS = 0;
+ pAC->I2c.SenTable[i].SenState = SK_SEN_IDLE;
+ pAC->I2c.SenTable[i].SenRead = NULL;
+ pAC->I2c.SenTable[i].SenDev = 0;
+ }
+
+ /* Now we are "INIT data"ed */
+ pAC->I2c.InitLevel = SK_INIT_DATA;
+ return(0);
+} /* SkI2cInit0*/
+
+
+/*
+ * Do the init state 1 initialization
+ *
+ * initialize the following register of the LM80:
+ * Configuration register:
+ * - START, noINT, activeLOW, noINT#Clear, noRESET, noCI, noGPO#, noINIT
+ *
+ * Interrupt Mask Register 1:
+ * - all interrupts are Disabled (0xff)
+ *
+ * Interrupt Mask Register 2:
+ * - all interrupts are Disabled (0xff) Interrupt modi doesn't matter.
+ *
+ * Fan Divisor/RST_OUT register:
+ * - Divisors set to 1 (bits 00), all others 0s.
+ *
+ * OS# Configuration/Temperature resolution Register:
+ * - all 0s
+ *
+ */
+static int SkI2cInit1(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC) /* I/O Context */
+{
+ int i;
+ SK_U8 I2cSwCtrl;
+ SK_GEPORT *pPrt; /* GIni Port struct pointer */
+
+ if (pAC->I2c.InitLevel != SK_INIT_DATA) {
+ /* ReInit not needed in I2C module */
+ return(0);
+ }
+
+ /* Set the Direction of I2C-Data Pin to IN */
+ SK_I2C_CLR_BIT(IoC, I2C_DATA_DIR | I2C_DATA);
+ /* Check for 32-Bit Yukon with Low at I2C-Data Pin */
+ SK_I2C_GET_SW(IoC, &I2cSwCtrl);
+
+ if ((I2cSwCtrl & I2C_DATA) == 0) {
+ /* this is a 32-Bit board */
+ pAC->GIni.GIYukon32Bit = SK_TRUE;
+ return(0);
+ }
+
+ /* Check for 64 Bit Yukon without sensors */
+ if (SkI2cWrite(pAC, IoC, 0, LM80_ADDR, LM80_CFG, 0) != 0) {
+ return(0);
+ }
+
+ (void)SkI2cWrite(pAC, IoC, 0xff, LM80_ADDR, LM80_IMSK_1, 0);
+
+ (void)SkI2cWrite(pAC, IoC, 0xff, LM80_ADDR, LM80_IMSK_2, 0);
+
+ (void)SkI2cWrite(pAC, IoC, 0, LM80_ADDR, LM80_FAN_CTRL, 0);
+
+ (void)SkI2cWrite(pAC, IoC, 0, LM80_ADDR, LM80_TEMP_CTRL, 0);
+
+ (void)SkI2cWrite(pAC, IoC, LM80_CFG_START, LM80_ADDR, LM80_CFG, 0);
+
+ /*
+ * MaxSens has to be updated here, because PhyType is not
+ * set when performing Init Level 0
+ */
+ pAC->I2c.MaxSens = 5;
+
+ pPrt = &pAC->GIni.GP[0];
+
+ if (pAC->GIni.GIGenesis) {
+ if (pPrt->PhyType == SK_PHY_BCOM) {
+ if (pAC->GIni.GIMacsFound == 1) {
+ pAC->I2c.MaxSens += 1;
+ }
+ else {
+ pAC->I2c.MaxSens += 3;
+ }
+ }
+ }
+ else {
+ pAC->I2c.MaxSens += 3;
+ }
+
+ for (i = 0; i < pAC->I2c.MaxSens; i++) {
+ switch (i) {
+ case 0:
+ pAC->I2c.SenTable[i].SenDesc = "Temperature";
+ pAC->I2c.SenTable[i].SenType = SK_SEN_TEMP;
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_TEMP_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_TEMP_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_TEMP_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_TEMP_LOW_ERR;
+ pAC->I2c.SenTable[i].SenReg = LM80_TEMP_IN;
+ break;
+ case 1:
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PCI";
+ pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PCI_5V_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PCI_5V_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PCI_5V_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PCI_5V_LOW_ERR;
+ pAC->I2c.SenTable[i].SenReg = LM80_VT0_IN;
+ break;
+ case 2:
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PCI-IO";
+ pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PCI_IO_5V_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PCI_IO_5V_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PCI_IO_3V3_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PCI_IO_3V3_LOW_ERR;
+ pAC->I2c.SenTable[i].SenReg = LM80_VT1_IN;
+ pAC->I2c.SenTable[i].SenInit = SK_SEN_DYN_INIT_PCI_IO;
+ break;
+ case 3:
+ pAC->I2c.SenTable[i].SenDesc = "Voltage ASIC";
+ pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_VDD_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_VDD_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_VDD_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_VDD_LOW_ERR;
+ pAC->I2c.SenTable[i].SenReg = LM80_VT2_IN;
+ break;
+ case 4:
+ if (pAC->GIni.GIGenesis) {
+ if (pPrt->PhyType == SK_PHY_BCOM) {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PHY A PLL";
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PLL_3V3_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PLL_3V3_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PLL_3V3_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PLL_3V3_LOW_ERR;
+ }
+ else {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PMA";
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PLL_3V3_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PLL_3V3_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PLL_3V3_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PLL_3V3_LOW_ERR;
+ }
+ }
+ else {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage VAUX";
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_VAUX_3V3_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_VAUX_3V3_HIGH_WARN;
+ if (pAC->GIni.GIVauxAvail) {
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_VAUX_3V3_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_VAUX_3V3_LOW_ERR;
+ }
+ else {
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_VAUX_0V_WARN_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_VAUX_0V_WARN_ERR;
+ }
+ }
+ pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
+ pAC->I2c.SenTable[i].SenReg = LM80_VT3_IN;
+ break;
+ case 5:
+ if (pAC->GIni.GIGenesis) {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PHY 2V5";
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PHY_2V5_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PHY_2V5_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PHY_2V5_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PHY_2V5_LOW_ERR;
+ }
+ else {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage ASIC-Co 1V5";
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_CORE_1V5_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_CORE_1V5_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_CORE_1V5_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_CORE_1V5_LOW_ERR;
+ }
+ pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
+ pAC->I2c.SenTable[i].SenReg = LM80_VT4_IN;
+ break;
+ case 6:
+ if (pAC->GIni.GIGenesis) {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PHY B PLL";
+ }
+ else {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PHY 3V3";
+ }
+ pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PLL_3V3_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PLL_3V3_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PLL_3V3_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PLL_3V3_LOW_ERR;
+ pAC->I2c.SenTable[i].SenReg = LM80_VT5_IN;
+ break;
+ case 7:
+ if (pAC->GIni.GIGenesis) {
+ pAC->I2c.SenTable[i].SenDesc = "Speed Fan";
+ pAC->I2c.SenTable[i].SenType = SK_SEN_FAN;
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_FAN_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_FAN_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_FAN_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_FAN_LOW_ERR;
+ pAC->I2c.SenTable[i].SenReg = LM80_FAN2_IN;
+ }
+ else {
+ pAC->I2c.SenTable[i].SenDesc = "Voltage PHY 2V5";
+ pAC->I2c.SenTable[i].SenType = SK_SEN_VOLT;
+ pAC->I2c.SenTable[i].SenThreErrHigh = SK_SEN_PHY_2V5_HIGH_ERR;
+ pAC->I2c.SenTable[i].SenThreWarnHigh = SK_SEN_PHY_2V5_HIGH_WARN;
+ pAC->I2c.SenTable[i].SenThreWarnLow = SK_SEN_PHY_2V5_LOW_WARN;
+ pAC->I2c.SenTable[i].SenThreErrLow = SK_SEN_PHY_2V5_LOW_ERR;
+ pAC->I2c.SenTable[i].SenReg = LM80_VT6_IN;
+ }
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_INIT | SK_ERRCL_SW,
+ SKERR_I2C_E001, SKERR_I2C_E001MSG);
+ break;
+ }
+
+ pAC->I2c.SenTable[i].SenValue = 0;
+ pAC->I2c.SenTable[i].SenErrFlag = SK_SEN_ERR_OK;
+ pAC->I2c.SenTable[i].SenErrCts = 0;
+ pAC->I2c.SenTable[i].SenBegErrTS = 0;
+ pAC->I2c.SenTable[i].SenState = SK_SEN_IDLE;
+ pAC->I2c.SenTable[i].SenRead = SkLm80ReadSensor;
+ pAC->I2c.SenTable[i].SenDev = LM80_ADDR;
+ }
+
+#ifndef SK_DIAG
+ pAC->I2c.DummyReads = pAC->I2c.MaxSens;
+#endif /* !SK_DIAG */
+
+ /* Clear I2C IRQ */
+ SK_OUT32(IoC, B2_I2C_IRQ, I2C_CLR_IRQ);
+
+ /* Now we are I/O initialized */
+ pAC->I2c.InitLevel = SK_INIT_IO;
+ return(0);
+} /* SkI2cInit1 */
+
+
+/*
+ * Init level 2: Start first sensor read.
+ */
+static int SkI2cInit2(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC) /* I/O Context */
+{
+ int ReadComplete;
+ SK_SENSOR *pSen;
+
+ if (pAC->I2c.InitLevel != SK_INIT_IO) {
+ /* ReInit not needed in I2C module */
+ /* Init0 and Init2 not permitted */
+ return(0);
+ }
+
+ pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
+ ReadComplete = SkI2cReadSensor(pAC, IoC, pSen);
+
+ if (ReadComplete) {
+ SK_ERR_LOG(pAC, SK_ERRCL_INIT, SKERR_I2C_E008, SKERR_I2C_E008MSG);
+ }
+
+ /* Now we are correctly initialized */
+ pAC->I2c.InitLevel = SK_INIT_RUN;
+
+ return(0);
+} /* SkI2cInit2*/
+
+
+/*
+ * Initialize I2C devices
+ *
+ * Get the first voltage value and discard it.
+ * Go into temperature read mode. A default pointer is not set.
+ *
+ * The things to be done depend on the init level in the parameter list:
+ * Level 0:
+ * Initialize only the data structures. Do NOT access hardware.
+ * Level 1:
+ * Initialize hardware through SK_IN / SK_OUT commands. Do NOT use interrupts.
+ * Level 2:
+ * Everything is possible. Interrupts may be used from now on.
+ *
+ * return:
+ * 0 = success
+ * other = error.
+ */
+int SkI2cInit(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context needed in levels 1 and 2 */
+int Level) /* Init Level */
+{
+
+ switch (Level) {
+ case SK_INIT_DATA:
+ return(SkI2cInit0(pAC));
+ case SK_INIT_IO:
+ return(SkI2cInit1(pAC, IoC));
+ case SK_INIT_RUN:
+ return(SkI2cInit2(pAC, IoC));
+ default:
+ break;
+ }
+
+ return(0);
+} /* SkI2cInit */
+
+
+#ifndef SK_DIAG
+
+/*
+ * Interrupt service function for the I2C Interface
+ *
+ * Clears the Interrupt source
+ *
+ * Reads the register and check it for sending a trap.
+ *
+ * Starts the timer if necessary.
+ */
+void SkI2cIsr(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC) /* I/O Context */
+{
+ SK_EVPARA Para;
+
+ /* Clear I2C IRQ */
+ SK_OUT32(IoC, B2_I2C_IRQ, I2C_CLR_IRQ);
+
+ Para.Para64 = 0;
+ SkEventQueue(pAC, SKGE_I2C, SK_I2CEV_IRQ, Para);
+} /* SkI2cIsr */
+
+
+/*
+ * Check this sensors Value against the threshold and send events.
+ */
+static void SkI2cCheckSensor(
+SK_AC *pAC, /* Adapter Context */
+SK_SENSOR *pSen)
+{
+ SK_EVPARA ParaLocal;
+ SK_BOOL TooHigh; /* Is sensor too high? */
+ SK_BOOL TooLow; /* Is sensor too low? */
+ SK_U64 CurrTime; /* Current Time */
+ SK_BOOL DoTrapSend; /* We need to send a trap */
+ SK_BOOL DoErrLog; /* We need to log the error */
+ SK_BOOL IsError; /* We need to log the error */
+
+ /* Check Dummy Reads first */
+ if (pAC->I2c.DummyReads > 0) {
+ pAC->I2c.DummyReads--;
+ return;
+ }
+
+ /* Get the current time */
+ CurrTime = SkOsGetTime(pAC);
+
+ /* Set para to the most useful setting: The current sensor. */
+ ParaLocal.Para64 = (SK_U64)pAC->I2c.CurrSens;
+
+ /* Check the Value against the thresholds. First: Error Thresholds */
+ TooHigh = (pSen->SenValue > pSen->SenThreErrHigh);
+ TooLow = (pSen->SenValue < pSen->SenThreErrLow);
+
+ IsError = SK_FALSE;
+ if (TooHigh || TooLow) {
+ /* Error condition is satisfied */
+ DoTrapSend = SK_TRUE;
+ DoErrLog = SK_TRUE;
+
+ /* Now error condition is satisfied */
+ IsError = SK_TRUE;
+
+ if (pSen->SenErrFlag == SK_SEN_ERR_ERR) {
+ /* This state is the former one */
+
+ /* So check first whether we have to send a trap */
+ if (pSen->SenLastErrTrapTS + SK_SEN_ERR_TR_HOLD >
+ CurrTime) {
+ /*
+ * Do NOT send the Trap. The hold back time
+ * has to run out first.
+ */
+ DoTrapSend = SK_FALSE;
+ }
+
+ /* Check now whether we have to log an Error */
+ if (pSen->SenLastErrLogTS + SK_SEN_ERR_LOG_HOLD >
+ CurrTime) {
+ /*
+ * Do NOT log the error. The hold back time
+ * has to run out first.
+ */
+ DoErrLog = SK_FALSE;
+ }
+ }
+ else {
+ /* We came from a different state -> Set Begin Time Stamp */
+ pSen->SenBegErrTS = CurrTime;
+ pSen->SenErrFlag = SK_SEN_ERR_ERR;
+ }
+
+ if (DoTrapSend) {
+ /* Set current Time */
+ pSen->SenLastErrTrapTS = CurrTime;
+ pSen->SenErrCts++;
+
+ /* Queue PNMI Event */
+ SkEventQueue(pAC, SKGE_PNMI, (TooHigh ?
+ SK_PNMI_EVT_SEN_ERR_UPP :
+ SK_PNMI_EVT_SEN_ERR_LOW),
+ ParaLocal);
+ }
+
+ if (DoErrLog) {
+ /* Set current Time */
+ pSen->SenLastErrLogTS = CurrTime;
+
+ if (pSen->SenType == SK_SEN_TEMP) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E011,
+ SKERR_I2C_E011MSG);
+ } else if (pSen->SenType == SK_SEN_VOLT) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E012,
+ SKERR_I2C_E012MSG);
+ } else
+ {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E015,
+ SKERR_I2C_E015MSG);
+ }
+ }
+ }
+
+ /* Check the Value against the thresholds */
+ /* 2nd: Warning thresholds */
+ TooHigh = (pSen->SenValue > pSen->SenThreWarnHigh);
+ TooLow = (pSen->SenValue < pSen->SenThreWarnLow);
+
+ if (!IsError && (TooHigh || TooLow)) {
+ /* Error condition is satisfied */
+ DoTrapSend = SK_TRUE;
+ DoErrLog = SK_TRUE;
+
+ if (pSen->SenErrFlag == SK_SEN_ERR_WARN) {
+ /* This state is the former one */
+
+ /* So check first whether we have to send a trap */
+ if (pSen->SenLastWarnTrapTS + SK_SEN_WARN_TR_HOLD >
+ CurrTime) {
+ /*
+ * Do NOT send the Trap. The hold back time
+ * has to run out first.
+ */
+ DoTrapSend = SK_FALSE;
+ }
+
+ /* Check now whether we have to log an Error */
+ if (pSen->SenLastWarnLogTS + SK_SEN_WARN_LOG_HOLD >
+ CurrTime) {
+ /*
+ * Do NOT log the error. The hold back time
+ * has to run out first.
+ */
+ DoErrLog = SK_FALSE;
+ }
+ }
+ else {
+ /* We came from a different state -> Set Begin Time Stamp */
+ pSen->SenBegWarnTS = CurrTime;
+ pSen->SenErrFlag = SK_SEN_ERR_WARN;
+ }
+
+ if (DoTrapSend) {
+ /* Set current Time */
+ pSen->SenLastWarnTrapTS = CurrTime;
+ pSen->SenWarnCts++;
+
+ /* Queue PNMI Event */
+ SkEventQueue(pAC, SKGE_PNMI, (TooHigh ?
+ SK_PNMI_EVT_SEN_WAR_UPP :
+ SK_PNMI_EVT_SEN_WAR_LOW),
+ ParaLocal);
+ }
+
+ if (DoErrLog) {
+ /* Set current Time */
+ pSen->SenLastWarnLogTS = CurrTime;
+
+ if (pSen->SenType == SK_SEN_TEMP) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E009,
+ SKERR_I2C_E009MSG);
+ } else if (pSen->SenType == SK_SEN_VOLT) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E010,
+ SKERR_I2C_E010MSG);
+ } else
+ {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E014,
+ SKERR_I2C_E014MSG);
+ }
+ }
+ }
+
+ /* Check for NO error at all */
+ if (!IsError && !TooHigh && !TooLow) {
+ /* Set o.k. Status if no error and no warning condition */
+ pSen->SenErrFlag = SK_SEN_ERR_OK;
+ }
+
+ /* End of check against the thresholds */
+
+ /* Bug fix AF: 16.Aug.2001: Correct the init base
+ * of LM80 sensor.
+ */
+ if (pSen->SenInit == SK_SEN_DYN_INIT_PCI_IO) {
+
+ pSen->SenInit = SK_SEN_DYN_INIT_NONE;
+
+ if (pSen->SenValue > SK_SEN_PCI_IO_RANGE_LIMITER) {
+ /* 5V PCI-IO Voltage */
+ pSen->SenThreWarnLow = SK_SEN_PCI_IO_5V_LOW_WARN;
+ pSen->SenThreErrLow = SK_SEN_PCI_IO_5V_LOW_ERR;
+ }
+ else {
+ /* 3.3V PCI-IO Voltage */
+ pSen->SenThreWarnHigh = SK_SEN_PCI_IO_3V3_HIGH_WARN;
+ pSen->SenThreErrHigh = SK_SEN_PCI_IO_3V3_HIGH_ERR;
+ }
+ }
+
+#if 0
+ /* Dynamic thresholds also for VAUX of LM80 sensor */
+ if (pSen->SenInit == SK_SEN_DYN_INIT_VAUX) {
+
+ pSen->SenInit = SK_SEN_DYN_INIT_NONE;
+
+ /* 3.3V VAUX Voltage */
+ if (pSen->SenValue > SK_SEN_VAUX_RANGE_LIMITER) {
+ pSen->SenThreWarnLow = SK_SEN_VAUX_3V3_LOW_WARN;
+ pSen->SenThreErrLow = SK_SEN_VAUX_3V3_LOW_ERR;
+ }
+ /* 0V VAUX Voltage */
+ else {
+ pSen->SenThreWarnHigh = SK_SEN_VAUX_0V_WARN_ERR;
+ pSen->SenThreErrHigh = SK_SEN_VAUX_0V_WARN_ERR;
+ }
+ }
+
+ /*
+ * Check initialization state:
+ * The VIO Thresholds need adaption
+ */
+ if (!pSen->SenInit && pSen->SenReg == LM80_VT1_IN &&
+ pSen->SenValue > SK_SEN_WARNLOW2C &&
+ pSen->SenValue < SK_SEN_WARNHIGH2) {
+ pSen->SenThreErrLow = SK_SEN_ERRLOW2C;
+ pSen->SenThreWarnLow = SK_SEN_WARNLOW2C;
+ pSen->SenInit = SK_TRUE;
+ }
+
+ if (!pSen->SenInit && pSen->SenReg == LM80_VT1_IN &&
+ pSen->SenValue > SK_SEN_WARNLOW2 &&
+ pSen->SenValue < SK_SEN_WARNHIGH2C) {
+ pSen->SenThreErrHigh = SK_SEN_ERRHIGH2C;
+ pSen->SenThreWarnHigh = SK_SEN_WARNHIGH2C;
+ pSen->SenInit = SK_TRUE;
+ }
+#endif
+
+ if (pSen->SenInit != SK_SEN_DYN_INIT_NONE) {
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_I2C_E013, SKERR_I2C_E013MSG);
+ }
+} /* SkI2cCheckSensor*/
+
+
+/*
+ * The only Event to be served is the timeout event
+ *
+ */
+int SkI2cEvent(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Event, /* Module specific Event */
+SK_EVPARA Para) /* Event specific Parameter */
+{
+ int ReadComplete;
+ SK_SENSOR *pSen;
+ SK_U32 Time;
+ SK_EVPARA ParaLocal;
+ int i;
+
+ /* New case: no sensors */
+ if (pAC->I2c.MaxSens == 0) {
+ return(0);
+ }
+
+ switch (Event) {
+ case SK_I2CEV_IRQ:
+ pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
+ ReadComplete = SkI2cReadSensor(pAC, IoC, pSen);
+
+ if (ReadComplete) {
+ /* Check sensor against defined thresholds */
+ SkI2cCheckSensor (pAC, pSen);
+
+ /* Increment Current sensor and set appropriate Timeout */
+ pAC->I2c.CurrSens++;
+ if (pAC->I2c.CurrSens >= pAC->I2c.MaxSens) {
+ pAC->I2c.CurrSens = 0;
+ Time = SK_I2C_TIM_LONG;
+ }
+ else {
+ Time = SK_I2C_TIM_SHORT;
+ }
+
+ /* Start Timer */
+ ParaLocal.Para64 = (SK_U64)0;
+
+ pAC->I2c.TimerMode = SK_TIMER_NEW_GAUGING;
+
+ SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, Time,
+ SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
+ }
+ else {
+ /* Start Timer */
+ ParaLocal.Para64 = (SK_U64)0;
+
+ pAC->I2c.TimerMode = SK_TIMER_WATCH_STATEMACHINE;
+
+ SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, SK_I2C_TIM_WATCH,
+ SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
+ }
+ break;
+ case SK_I2CEV_TIM:
+ if (pAC->I2c.TimerMode == SK_TIMER_NEW_GAUGING) {
+
+ ParaLocal.Para64 = (SK_U64)0;
+ SkTimerStop(pAC, IoC, &pAC->I2c.SenTimer);
+
+ pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
+ ReadComplete = SkI2cReadSensor(pAC, IoC, pSen);
+
+ if (ReadComplete) {
+ /* Check sensor against defined thresholds */
+ SkI2cCheckSensor (pAC, pSen);
+
+ /* Increment Current sensor and set appropriate Timeout */
+ pAC->I2c.CurrSens++;
+ if (pAC->I2c.CurrSens == pAC->I2c.MaxSens) {
+ pAC->I2c.CurrSens = 0;
+ Time = SK_I2C_TIM_LONG;
+ }
+ else {
+ Time = SK_I2C_TIM_SHORT;
+ }
+
+ /* Start Timer */
+ ParaLocal.Para64 = (SK_U64)0;
+
+ pAC->I2c.TimerMode = SK_TIMER_NEW_GAUGING;
+
+ SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, Time,
+ SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
+ }
+ }
+ else {
+ pSen = &pAC->I2c.SenTable[pAC->I2c.CurrSens];
+ pSen->SenErrFlag = SK_SEN_ERR_FAULTY;
+ SK_I2C_STOP(IoC);
+
+ /* Increment Current sensor and set appropriate Timeout */
+ pAC->I2c.CurrSens++;
+ if (pAC->I2c.CurrSens == pAC->I2c.MaxSens) {
+ pAC->I2c.CurrSens = 0;
+ Time = SK_I2C_TIM_LONG;
+ }
+ else {
+ Time = SK_I2C_TIM_SHORT;
+ }
+
+ /* Start Timer */
+ ParaLocal.Para64 = (SK_U64)0;
+
+ pAC->I2c.TimerMode = SK_TIMER_NEW_GAUGING;
+
+ SkTimerStart(pAC, IoC, &pAC->I2c.SenTimer, Time,
+ SKGE_I2C, SK_I2CEV_TIM, ParaLocal);
+ }
+ break;
+ case SK_I2CEV_CLEAR:
+ for (i = 0; i < SK_MAX_SENSORS; i++) {
+ pAC->I2c.SenTable[i].SenErrFlag = SK_SEN_ERR_OK;
+ pAC->I2c.SenTable[i].SenErrCts = 0;
+ pAC->I2c.SenTable[i].SenWarnCts = 0;
+ pAC->I2c.SenTable[i].SenBegErrTS = 0;
+ pAC->I2c.SenTable[i].SenBegWarnTS = 0;
+ pAC->I2c.SenTable[i].SenLastErrTrapTS = (SK_U64)0;
+ pAC->I2c.SenTable[i].SenLastErrLogTS = (SK_U64)0;
+ pAC->I2c.SenTable[i].SenLastWarnTrapTS = (SK_U64)0;
+ pAC->I2c.SenTable[i].SenLastWarnLogTS = (SK_U64)0;
+ }
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E006, SKERR_I2C_E006MSG);
+ }
+
+ return(0);
+} /* SkI2cEvent*/
+
+#endif /* !SK_DIAG */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/sklm80.c u-boot-2009.03/drivers/net/sk98lin/sklm80.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/sklm80.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/sklm80.c 2009-03-31 14:54:29.643752800 -0700
@@ -1,288 +1,291 @@
-/******************************************************************************
- *
- * Name: sklm80.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.20 $
- * Date: $Date: 2002/08/13 09:16:27 $
- * Purpose: Funktions to access Voltage and Temperature Sensor (LM80)
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2002 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: sklm80.c,v $
- * Revision 1.20 2002/08/13 09:16:27 rschmidt
- * Changed return value for SkLm80ReadSensor() back to 'int'
- * Editorial changes
- *
- * Revision 1.19 2002/08/06 09:43:31 jschmalz
- * Extensions and changes for Yukon
- *
- * Revision 1.18 2002/08/02 12:26:57 rschmidt
- * Editorial changes
- *
- * Revision 1.17 1999/11/22 13:35:51 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.16 1999/05/27 14:05:47 malthoff
- * Fans: Set SenVal to 0 if the fan value is 0 or 0xff. Both values
- * are outside the limits (0: div zero error, 0xff: value not in
- * range, assume 0).
- *
- * Revision 1.15 1999/05/27 13:38:51 malthoff
- * Pervent from Division by zero errors.
- *
- * Revision 1.14 1999/05/20 09:20:01 cgoos
- * Changes for 1000Base-T (Fan sensors).
- *
- * Revision 1.13 1998/10/22 09:48:14 gklug
- * fix: SysKonnectFileId typo
- *
- * Revision 1.12 1998/10/09 06:12:06 malthoff
- * Remove ID_sccs by SysKonnectFileId.
- *
- * Revision 1.11 1998/09/04 08:33:48 malthoff
- * bug fix: SenState = SK_SEN_IDLE when
- * leaving SK_SEN_VALEXT state
- *
- * Revision 1.10 1998/08/20 12:02:10 gklug
- * fix: compiler warnings type mismatch
- *
- * Revision 1.9 1998/08/20 11:37:38 gklug
- * chg: change Ioc to IoC
- *
- * Revision 1.8 1998/08/19 12:20:58 gklug
- * fix: remove struct from C files (see CCC)
- *
- * Revision 1.7 1998/08/17 07:04:57 malthoff
- * Take SkLm80RcvReg() function from ski2c.c.
- * Add IoC parameter to BREAK_OR_WAIT() macro.
- *
- * Revision 1.6 1998/08/14 07:11:28 malthoff
- * remove pAc with pAC.
- *
- * Revision 1.5 1998/08/14 06:46:55 gklug
- * fix: temperature can get negative
- *
- * Revision 1.4 1998/08/13 08:27:04 gklug
- * add: temperature reading now o.k.
- * fix: pSen declaration, SK_ERR_LOG call, ADDR macro
- *
- * Revision 1.3 1998/08/13 07:28:21 gklug
- * fix: pSen was wrong initialized
- * add: correct conversion for voltage readings
- *
- * Revision 1.2 1998/08/11 07:52:14 gklug
- * add: Lm80 read sensor function
- *
- * Revision 1.1 1998/07/17 09:57:12 gklug
- * initial version
- *
- *
- *
- ******************************************************************************/
-
-
-#include <config.h>
-
-/*
- LM80 functions
-*/
-static const char SysKonnectFileId[] =
- "$Id: sklm80.c,v 1.20 2002/08/13 09:16:27 rschmidt Exp $" ;
-
-#include "h/skdrv1st.h" /* Driver Specific Definitions */
-#include "h/lm80.h"
-#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
-
-#ifdef SK_DIAG
-#define BREAK_OR_WAIT(pAC,IoC,Event) SkI2cWait(pAC,IoC,Event)
-#else /* nSK_DIAG */
-#define BREAK_OR_WAIT(pAC,IoC,Event) break
-#endif /* nSK_DIAG */
-
-#ifdef SK_DIAG
-/*
- * read the register 'Reg' from the device 'Dev'
- *
- * return read error -1
- * success the read value
- */
-int SkLm80RcvReg(
-SK_IOC IoC, /* Adapter Context */
-int Dev, /* I2C device address */
-int Reg) /* register to read */
-{
- int Val = 0;
- int TempExt;
-
- /* Signal device number */
- if (SkI2cSndDev(IoC, Dev, I2C_WRITE)) {
- return(-1);
- }
-
- if (SkI2cSndByte(IoC, Reg)) {
- return(-1);
- }
-
- /* repeat start */
- if (SkI2cSndDev(IoC, Dev, I2C_READ)) {
- return(-1);
- }
-
- switch (Reg) {
- case LM80_TEMP_IN:
- Val = (int)SkI2cRcvByte(IoC, 1);
-
- /* First: correct the value: it might be negative */
- if ((Val & 0x80) != 0) {
- /* Value is negative */
- Val = Val - 256;
- }
- Val = Val * SK_LM80_TEMP_LSB;
- SkI2cStop(IoC);
-
- TempExt = (int)SkLm80RcvReg(IoC, LM80_ADDR, LM80_TEMP_CTRL);
-
- if (Val > 0) {
- Val += ((TempExt >> 7) * SK_LM80_TEMPEXT_LSB);
- }
- else {
- Val -= ((TempExt >> 7) * SK_LM80_TEMPEXT_LSB);
- }
- return(Val);
- break;
- case LM80_VT0_IN:
- case LM80_VT1_IN:
- case LM80_VT2_IN:
- case LM80_VT3_IN:
- Val = (int)SkI2cRcvByte(IoC, 1) * SK_LM80_VT_LSB;
- break;
-
- default:
- Val = (int)SkI2cRcvByte(IoC, 1);
- break;
- }
-
- SkI2cStop(IoC);
- return(Val);
-}
-#endif /* SK_DIAG */
-
-/*
- * read a sensors value (LM80 specific)
- *
- * This function reads a sensors value from the I2C sensor chip LM80.
- * The sensor is defined by its index into the sensors database in the struct
- * pAC points to.
- *
- * Returns 1 if the read is completed
- * 0 if the read must be continued (I2C Bus still allocated)
- */
-int SkLm80ReadSensor(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context needed in level 1 and 2 */
-SK_SENSOR *pSen) /* Sensor to be read */
-{
- SK_I32 Value;
-
- switch (pSen->SenState) {
- case SK_SEN_IDLE:
- /* Send address to ADDR register */
- SK_I2C_CTL(IoC, I2C_READ, pSen->SenDev, pSen->SenReg, 0);
-
- pSen->SenState = SK_SEN_VALUE ;
- BREAK_OR_WAIT(pAC, IoC, I2C_READ);
-
- case SK_SEN_VALUE:
- /* Read value from data register */
- SK_IN32(IoC, B2_I2C_DATA, ((SK_U32 *)&Value));
-
- Value &= 0xff; /* only least significant byte is valid */
-
- /* Do NOT check the Value against the thresholds */
- /* Checking is done in the calling instance */
-
- if (pSen->SenType == SK_SEN_VOLT) {
- /* Voltage sensor */
- pSen->SenValue = Value * SK_LM80_VT_LSB;
- pSen->SenState = SK_SEN_IDLE ;
- return(1);
- }
-
- if (pSen->SenType == SK_SEN_FAN) {
- if (Value != 0 && Value != 0xff) {
- /* Fan speed counter */
- pSen->SenValue = SK_LM80_FAN_FAKTOR/Value;
- }
- else {
- /* Indicate Fan error */
- pSen->SenValue = 0;
- }
- pSen->SenState = SK_SEN_IDLE ;
- return(1);
- }
-
- /* First: correct the value: it might be negative */
- if ((Value & 0x80) != 0) {
- /* Value is negative */
- Value = Value - 256;
- }
-
- /* We have a temperature sensor and need to get the signed extension.
- * For now we get the extension from the last reading, so in the normal
- * case we won't see flickering temperatures.
- */
- pSen->SenValue = (Value * SK_LM80_TEMP_LSB) +
- (pSen->SenValue % SK_LM80_TEMP_LSB);
-
- /* Send address to ADDR register */
- SK_I2C_CTL(IoC, I2C_READ, pSen->SenDev, LM80_TEMP_CTRL, 0);
-
- pSen->SenState = SK_SEN_VALEXT ;
- BREAK_OR_WAIT(pAC, IoC, I2C_READ);
-
- case SK_SEN_VALEXT:
- /* Read value from data register */
- SK_IN32(IoC, B2_I2C_DATA, ((SK_U32 *)&Value));
- Value &= LM80_TEMP_LSB_9; /* only bit 7 is valid */
-
- /* cut the LSB bit */
- pSen->SenValue = ((pSen->SenValue / SK_LM80_TEMP_LSB) *
- SK_LM80_TEMP_LSB);
-
- if (pSen->SenValue < 0) {
- /* Value negative: The bit value must be subtracted */
- pSen->SenValue -= ((Value >> 7) * SK_LM80_TEMPEXT_LSB);
- }
- else {
- /* Value positive: The bit value must be added */
- pSen->SenValue += ((Value >> 7) * SK_LM80_TEMPEXT_LSB);
- }
-
- pSen->SenState = SK_SEN_IDLE ;
- return(1);
-
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E007, SKERR_I2C_E007MSG);
- return(1);
- }
-
- /* Not completed */
- return(0);
-}
+/******************************************************************************
+ *
+ * Name: sklm80.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Funktions to access Voltage and Temperature Sensor (LM80)
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2002 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: sklm80.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.20 2002/08/13 09:16:27 rschmidt
+ * Changed return value for SkLm80ReadSensor() back to 'int'
+ * Editorial changes
+ *
+ * Revision 1.19 2002/08/06 09:43:31 jschmalz
+ * Extensions and changes for Yukon
+ *
+ * Revision 1.18 2002/08/02 12:26:57 rschmidt
+ * Editorial changes
+ *
+ * Revision 1.17 1999/11/22 13:35:51 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.16 1999/05/27 14:05:47 malthoff
+ * Fans: Set SenVal to 0 if the fan value is 0 or 0xff. Both values
+ * are outside the limits (0: div zero error, 0xff: value not in
+ * range, assume 0).
+ *
+ * Revision 1.15 1999/05/27 13:38:51 malthoff
+ * Pervent from Division by zero errors.
+ *
+ * Revision 1.14 1999/05/20 09:20:01 cgoos
+ * Changes for 1000Base-T (Fan sensors).
+ *
+ * Revision 1.13 1998/10/22 09:48:14 gklug
+ * fix: SysKonnectFileId typo
+ *
+ * Revision 1.12 1998/10/09 06:12:06 malthoff
+ * Remove ID_sccs by SysKonnectFileId.
+ *
+ * Revision 1.11 1998/09/04 08:33:48 malthoff
+ * bug fix: SenState = SK_SEN_IDLE when
+ * leaving SK_SEN_VALEXT state
+ *
+ * Revision 1.10 1998/08/20 12:02:10 gklug
+ * fix: compiler warnings type mismatch
+ *
+ * Revision 1.9 1998/08/20 11:37:38 gklug
+ * chg: change Ioc to IoC
+ *
+ * Revision 1.8 1998/08/19 12:20:58 gklug
+ * fix: remove struct from C files (see CCC)
+ *
+ * Revision 1.7 1998/08/17 07:04:57 malthoff
+ * Take SkLm80RcvReg() function from ski2c.c.
+ * Add IoC parameter to BREAK_OR_WAIT() macro.
+ *
+ * Revision 1.6 1998/08/14 07:11:28 malthoff
+ * remove pAc with pAC.
+ *
+ * Revision 1.5 1998/08/14 06:46:55 gklug
+ * fix: temperature can get negative
+ *
+ * Revision 1.4 1998/08/13 08:27:04 gklug
+ * add: temperature reading now o.k.
+ * fix: pSen declaration, SK_ERR_LOG call, ADDR macro
+ *
+ * Revision 1.3 1998/08/13 07:28:21 gklug
+ * fix: pSen was wrong initialized
+ * add: correct conversion for voltage readings
+ *
+ * Revision 1.2 1998/08/11 07:52:14 gklug
+ * add: Lm80 read sensor function
+ *
+ * Revision 1.1 1998/07/17 09:57:12 gklug
+ * initial version
+ *
+ *
+ *
+ ******************************************************************************/
+
+
+#include <config.h>
+
+/*
+ LM80 functions
+*/
+static const char SysKonnectFileId[] =
+ "$Id: sklm80.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $" ;
+
+#include "h/skdrv1st.h" /* Driver Specific Definitions */
+#include "h/lm80.h"
+#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
+
+#ifdef SK_DIAG
+#define BREAK_OR_WAIT(pAC,IoC,Event) SkI2cWait(pAC,IoC,Event)
+#else /* nSK_DIAG */
+#define BREAK_OR_WAIT(pAC,IoC,Event) break
+#endif /* nSK_DIAG */
+
+#ifdef SK_DIAG
+/*
+ * read the register 'Reg' from the device 'Dev'
+ *
+ * return read error -1
+ * success the read value
+ */
+int SkLm80RcvReg(
+SK_IOC IoC, /* Adapter Context */
+int Dev, /* I2C device address */
+int Reg) /* register to read */
+{
+ int Val = 0;
+ int TempExt;
+
+ /* Signal device number */
+ if (SkI2cSndDev(IoC, Dev, I2C_WRITE)) {
+ return(-1);
+ }
+
+ if (SkI2cSndByte(IoC, Reg)) {
+ return(-1);
+ }
+
+ /* repeat start */
+ if (SkI2cSndDev(IoC, Dev, I2C_READ)) {
+ return(-1);
+ }
+
+ switch (Reg) {
+ case LM80_TEMP_IN:
+ Val = (int)SkI2cRcvByte(IoC, 1);
+
+ /* First: correct the value: it might be negative */
+ if ((Val & 0x80) != 0) {
+ /* Value is negative */
+ Val = Val - 256;
+ }
+ Val = Val * SK_LM80_TEMP_LSB;
+ SkI2cStop(IoC);
+
+ TempExt = (int)SkLm80RcvReg(IoC, LM80_ADDR, LM80_TEMP_CTRL);
+
+ if (Val > 0) {
+ Val += ((TempExt >> 7) * SK_LM80_TEMPEXT_LSB);
+ }
+ else {
+ Val -= ((TempExt >> 7) * SK_LM80_TEMPEXT_LSB);
+ }
+ return(Val);
+ break;
+ case LM80_VT0_IN:
+ case LM80_VT1_IN:
+ case LM80_VT2_IN:
+ case LM80_VT3_IN:
+ Val = (int)SkI2cRcvByte(IoC, 1) * SK_LM80_VT_LSB;
+ break;
+
+ default:
+ Val = (int)SkI2cRcvByte(IoC, 1);
+ break;
+ }
+
+ SkI2cStop(IoC);
+ return(Val);
+}
+#endif /* SK_DIAG */
+
+/*
+ * read a sensors value (LM80 specific)
+ *
+ * This function reads a sensors value from the I2C sensor chip LM80.
+ * The sensor is defined by its index into the sensors database in the struct
+ * pAC points to.
+ *
+ * Returns 1 if the read is completed
+ * 0 if the read must be continued (I2C Bus still allocated)
+ */
+int SkLm80ReadSensor(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context needed in level 1 and 2 */
+SK_SENSOR *pSen) /* Sensor to be read */
+{
+ SK_I32 Value;
+
+ switch (pSen->SenState) {
+ case SK_SEN_IDLE:
+ /* Send address to ADDR register */
+ SK_I2C_CTL(IoC, I2C_READ, pSen->SenDev, pSen->SenReg, 0);
+
+ pSen->SenState = SK_SEN_VALUE ;
+ BREAK_OR_WAIT(pAC, IoC, I2C_READ);
+
+ case SK_SEN_VALUE:
+ /* Read value from data register */
+ SK_IN32(IoC, B2_I2C_DATA, ((SK_U32 *)&Value));
+
+ Value &= 0xff; /* only least significant byte is valid */
+
+ /* Do NOT check the Value against the thresholds */
+ /* Checking is done in the calling instance */
+
+ if (pSen->SenType == SK_SEN_VOLT) {
+ /* Voltage sensor */
+ pSen->SenValue = Value * SK_LM80_VT_LSB;
+ pSen->SenState = SK_SEN_IDLE ;
+ return(1);
+ }
+
+ if (pSen->SenType == SK_SEN_FAN) {
+ if (Value != 0 && Value != 0xff) {
+ /* Fan speed counter */
+ pSen->SenValue = SK_LM80_FAN_FAKTOR/Value;
+ }
+ else {
+ /* Indicate Fan error */
+ pSen->SenValue = 0;
+ }
+ pSen->SenState = SK_SEN_IDLE ;
+ return(1);
+ }
+
+ /* First: correct the value: it might be negative */
+ if ((Value & 0x80) != 0) {
+ /* Value is negative */
+ Value = Value - 256;
+ }
+
+ /* We have a temperature sensor and need to get the signed extension.
+ * For now we get the extension from the last reading, so in the normal
+ * case we won't see flickering temperatures.
+ */
+ pSen->SenValue = (Value * SK_LM80_TEMP_LSB) +
+ (pSen->SenValue % SK_LM80_TEMP_LSB);
+
+ /* Send address to ADDR register */
+ SK_I2C_CTL(IoC, I2C_READ, pSen->SenDev, LM80_TEMP_CTRL, 0);
+
+ pSen->SenState = SK_SEN_VALEXT ;
+ BREAK_OR_WAIT(pAC, IoC, I2C_READ);
+
+ case SK_SEN_VALEXT:
+ /* Read value from data register */
+ SK_IN32(IoC, B2_I2C_DATA, ((SK_U32 *)&Value));
+ Value &= LM80_TEMP_LSB_9; /* only bit 7 is valid */
+
+ /* cut the LSB bit */
+ pSen->SenValue = ((pSen->SenValue / SK_LM80_TEMP_LSB) *
+ SK_LM80_TEMP_LSB);
+
+ if (pSen->SenValue < 0) {
+ /* Value negative: The bit value must be subtracted */
+ pSen->SenValue -= ((Value >> 7) * SK_LM80_TEMPEXT_LSB);
+ }
+ else {
+ /* Value positive: The bit value must be added */
+ pSen->SenValue += ((Value >> 7) * SK_LM80_TEMPEXT_LSB);
+ }
+
+ pSen->SenState = SK_SEN_IDLE ;
+ return(1);
+
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E007, SKERR_I2C_E007MSG);
+ return(1);
+ }
+
+ /* Not completed */
+ return(0);
+}
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skproc.c u-boot-2009.03/drivers/net/sk98lin/skproc.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skproc.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skproc.c 2009-03-31 14:54:29.690627200 -0700
@@ -1,510 +1,513 @@
-/******************************************************************************
- *
- * Name: skproc.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.4 $
- * Date: $Date: 2003/02/25 14:16:37 $
- * Purpose: Funktions to display statictic data
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * Created 22-Nov-2000
- * Author: Mirko Lindner (mlindner@syskonnect.de)
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-/******************************************************************************
- *
- * History:
- *
- * $Log: skproc.c,v $
- * Revision 1.4 2003/02/25 14:16:37 mlindner
- * Fix: Copyright statement
- *
- * Revision 1.3 2002/10/02 12:59:51 mlindner
- * Add: Support for Yukon
- * Add: Speed check and setup
- * Add: Merge source for kernel 2.2.x and 2.4.x
- * Add: Read sensor names directly from VPD
- * Fix: Volt values
- *
- * Revision 1.2.2.7 2002/01/14 12:45:15 mlindner
- * Fix: Editorial changes
- *
- * Revision 1.2.2.6 2001/12/06 15:26:07 mlindner
- * Fix: Return value of proc_read
- *
- * Revision 1.2.2.5 2001/12/06 09:57:39 mlindner
- * New ProcFs entries
- *
- * Revision 1.2.2.4 2001/09/05 12:16:02 mlindner
- * Add: New ProcFs entries
- * Fix: Counter Errors (Jumbo == to long errors)
- * Fix: Kernel error compilation
- * Fix: too short counters
- *
- * Revision 1.2.2.3 2001/06/25 07:26:26 mlindner
- * Add: More error messages
- *
- * Revision 1.2.2.2 2001/03/15 12:50:13 mlindner
- * fix: ProcFS owner protection
- *
- * Revision 1.2.2.1 2001/03/12 16:43:48 mlindner
- * chg: 2.4 requirements for procfs
- *
- * Revision 1.1 2001/01/22 14:15:31 mlindner
- * added ProcFs functionality
- * Dual Net functionality integrated
- * Rlmt networks added
- *
- *
- ******************************************************************************/
-
-#include <config.h>
-
-#include <linux/proc_fs.h>
-
-#include "h/skdrv1st.h"
-#include "h/skdrv2nd.h"
-#define ZEROPAD 1 /* pad with zero */
-#define SIGN 2 /* unsigned/signed long */
-#define PLUS 4 /* show plus */
-#define SPACE 8 /* space if plus */
-#define LEFT 16 /* left justified */
-#define SPECIALX 32 /* 0x */
-#define LARGE 64
-
-extern SK_AC *pACList;
-extern struct net_device *SkGeRootDev;
-
-extern char *SkNumber (char *str,
- long long num,
- int base,
- int size,
- int precision,
- int type);
-
-
-/*****************************************************************************
- *
- * proc_read - print "summaries" entry
- *
- * Description:
- * This function fills the proc entry with statistic data about
- * the ethernet device.
- *
- *
- * Returns: buffer with statistic data
- *
- */
-int proc_read(char *buffer,
-char **buffer_location,
-off_t offset,
-int buffer_length,
-int *eof,
-void *data)
-{
- int len = 0;
- int t;
- int i;
- DEV_NET *pNet;
- SK_AC *pAC;
- char test_buf[100];
- char sens_msg[50];
- unsigned long Flags;
- unsigned int Size;
- struct SK_NET_DEVICE *next;
- struct SK_NET_DEVICE *SkgeProcDev = SkGeRootDev;
-
- SK_PNMI_STRUCT_DATA *pPnmiStruct;
- SK_PNMI_STAT *pPnmiStat;
- struct proc_dir_entry *file = (struct proc_dir_entry*) data;
-
- while (SkgeProcDev) {
- pNet = (DEV_NET*) SkgeProcDev->priv;
- pAC = pNet->pAC;
- next = pAC->Next;
- pPnmiStruct = &pAC->PnmiStruct;
- /* NetIndex in GetStruct is now required, zero is only dummy */
-
- for (t=pAC->GIni.GIMacsFound; t > 0; t--) {
- if ((pAC->GIni.GIMacsFound == 2) && pAC->RlmtNets == 1)
- t--;
-
- spin_lock_irqsave(&pAC->SlowPathLock, Flags);
- Size = SK_PNMI_STRUCT_SIZE;
- SkPnmiGetStruct(pAC, pAC->IoBase,
- pPnmiStruct, &Size, t-1);
- spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
-
- if (strcmp(pAC->dev[t-1]->name, file->name) == 0) {
- pPnmiStat = &pPnmiStruct->Stat[0];
- len = sprintf(buffer,
- "\nDetailed statistic for device %s\n",
- pAC->dev[t-1]->name);
- len += sprintf(buffer + len,
- "=======================================\n");
-
- /* Board statistics */
- len += sprintf(buffer + len,
- "\nBoard statistics\n\n");
- len += sprintf(buffer + len,
- "Active Port %c\n",
- 'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
- Net[t-1].PrefPort]->PortNumber);
- len += sprintf(buffer + len,
- "Preferred Port %c\n",
- 'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
- Net[t-1].PrefPort]->PortNumber);
-
- len += sprintf(buffer + len,
- "Bus speed (MHz) %d\n",
- pPnmiStruct->BusSpeed);
-
- len += sprintf(buffer + len,
- "Bus width (Bit) %d\n",
- pPnmiStruct->BusWidth);
- len += sprintf(buffer + len,
- "Hardware revision v%d.%d\n",
- (pAC->GIni.GIPciHwRev >> 4) & 0x0F,
- pAC->GIni.GIPciHwRev & 0x0F);
-
- /* Print sensor informations */
- for (i=0; i < pAC->I2c.MaxSens; i ++) {
- /* Check type */
- switch (pAC->I2c.SenTable[i].SenType) {
- case 1:
- strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
- strcat(sens_msg, " (C)");
- len += sprintf(buffer + len,
- "%-25s %d.%02d\n",
- sens_msg,
- pAC->I2c.SenTable[i].SenValue / 10,
- pAC->I2c.SenTable[i].SenValue % 10);
-
- strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
- strcat(sens_msg, " (F)");
- len += sprintf(buffer + len,
- "%-25s %d.%02d\n",
- sens_msg,
- ((((pAC->I2c.SenTable[i].SenValue)
- *10)*9)/5 + 3200)/100,
- ((((pAC->I2c.SenTable[i].SenValue)
- *10)*9)/5 + 3200) % 10);
- break;
- case 2:
- strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
- strcat(sens_msg, " (V)");
- len += sprintf(buffer + len,
- "%-25s %d.%03d\n",
- sens_msg,
- pAC->I2c.SenTable[i].SenValue / 1000,
- pAC->I2c.SenTable[i].SenValue % 1000);
- break;
- case 3:
- strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
- strcat(sens_msg, " (rpm)");
- len += sprintf(buffer + len,
- "%-25s %d\n",
- sens_msg,
- pAC->I2c.SenTable[i].SenValue);
- break;
- default:
- break;
- }
- }
-
- /*Receive statistics */
- len += sprintf(buffer + len,
- "\nReceive statistics\n\n");
-
- len += sprintf(buffer + len,
- "Received bytes %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxOctetsOkCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Received packets %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxOkCts,
- 10,0,-1,0));
-#if 0
- if (pAC->GIni.GP[0].PhyType == SK_PHY_XMAC &&
- pAC->HWRevision < 12) {
- pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -
- pPnmiStat->StatRxShortsCts;
- pPnmiStat->StatRxShortsCts = 0;
- }
-#endif
- if (pNet->Mtu > 1500)
- pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -
- pPnmiStat->StatRxTooLongCts;
-
- len += sprintf(buffer + len,
- "Receive errors %s\n",
- SkNumber(test_buf, pPnmiStruct->InErrorsCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Receive drops %s\n",
- SkNumber(test_buf, pPnmiStruct->RxNoBufCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Received multicast %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxMulticastOkCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Receive error types\n");
- len += sprintf(buffer + len,
- " length %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxRuntCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " buffer overflow %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxFifoOverflowCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " bad crc %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxFcsCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " framing %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxFramingCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " missed frames %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxMissedCts,
- 10, 0, -1, 0));
-
- if (pNet->Mtu > 1500)
- pPnmiStat->StatRxTooLongCts = 0;
-
- len += sprintf(buffer + len,
- " too long %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxTooLongCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " carrier extension %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxCextCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " too short %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxShortsCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " symbol %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxSymbolCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " LLC MAC size %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxIRLengthCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " carrier event %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxCarrierCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " jabber %s\n",
- SkNumber(test_buf, pPnmiStat->StatRxJabberCts,
- 10, 0, -1, 0));
-
-
- /*Transmit statistics */
- len += sprintf(buffer + len,
- "\nTransmit statistics\n\n");
-
- len += sprintf(buffer + len,
- "Transmited bytes %s\n",
- SkNumber(test_buf, pPnmiStat->StatTxOctetsOkCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Transmited packets %s\n",
- SkNumber(test_buf, pPnmiStat->StatTxOkCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Transmit errors %s\n",
- SkNumber(test_buf, pPnmiStat->StatTxSingleCollisionCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Transmit dropped %s\n",
- SkNumber(test_buf, pPnmiStruct->TxNoBufCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Transmit collisions %s\n",
- SkNumber(test_buf, pPnmiStat->StatTxSingleCollisionCts,
- 10,0,-1,0));
- len += sprintf(buffer + len,
- "Transmit errors types\n");
- len += sprintf(buffer + len,
- " excessive collision %ld\n",
- pAC->stats.tx_aborted_errors);
- len += sprintf(buffer + len,
- " carrier %s\n",
- SkNumber(test_buf, pPnmiStat->StatTxCarrierCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " fifo underrun %s\n",
- SkNumber(test_buf, pPnmiStat->StatTxFifoUnderrunCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " heartbeat %s\n",
- SkNumber(test_buf, pPnmiStat->StatTxCarrierCts,
- 10, 0, -1, 0));
- len += sprintf(buffer + len,
- " window %ld\n",
- pAC->stats.tx_window_errors);
-
- }
- }
- SkgeProcDev = next;
- }
- if (offset >= len) {
- *eof = 1;
- return 0;
- }
-
- *buffer_location = buffer + offset;
- if (buffer_length >= len - offset) {
- *eof = 1;
- }
- return (min_t(int, buffer_length, len - offset));
-}
-
-
-/*****************************************************************************
- *
- * SkDoDiv - convert 64bit number
- *
- * Description:
- * This function "converts" a long long number.
- *
- * Returns:
- * remainder of division
- */
-static long SkDoDiv (long long Dividend, int Divisor, long long *pErg)
-{
- long Rest;
- long long Ergebnis;
- long Akku;
-
-
- Akku = Dividend >> 32;
-
- Ergebnis = ((long long) (Akku / Divisor)) << 32;
- Rest = Akku % Divisor;
-
- Akku = Rest << 16;
- Akku |= ((Dividend & 0xFFFF0000) >> 16);
-
-
- Ergebnis += ((long long) (Akku / Divisor)) << 16;
- Rest = Akku % Divisor;
-
- Akku = Rest << 16;
- Akku |= (Dividend & 0xFFFF);
-
- Ergebnis += (Akku / Divisor);
- Rest = Akku % Divisor;
-
- *pErg = Ergebnis;
- return (Rest);
-}
-
-
-#if 0
-#define do_div(n,base) ({ \
-long long __res; \
-__res = ((unsigned long long) n) % (unsigned) base; \
-n = ((unsigned long long) n) / (unsigned) base; \
-__res; })
-
-#endif
-
-
-/*****************************************************************************
- *
- * SkNumber - Print results
- *
- * Description:
- * This function converts a long long number into a string.
- *
- * Returns:
- * number as string
- */
-char * SkNumber(char * str, long long num, int base, int size, int precision
- ,int type)
-{
- char c,sign,tmp[66], *strorg = str;
- const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
- int i;
-
- if (type & LARGE)
- digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- if (type & LEFT)
- type &= ~ZEROPAD;
- if (base < 2 || base > 36)
- return 0;
- c = (type & ZEROPAD) ? '0' : ' ';
- sign = 0;
- if (type & SIGN) {
- if (num < 0) {
- sign = '-';
- num = -num;
- size--;
- } else if (type & PLUS) {
- sign = '+';
- size--;
- } else if (type & SPACE) {
- sign = ' ';
- size--;
- }
- }
- if (type & SPECIALX) {
- if (base == 16)
- size -= 2;
- else if (base == 8)
- size--;
- }
- i = 0;
- if (num == 0)
- tmp[i++]='0';
- else while (num != 0)
- tmp[i++] = digits[SkDoDiv(num,base, &num)];
-
- if (i > precision)
- precision = i;
- size -= precision;
- if (!(type&(ZEROPAD+LEFT)))
- while(size-->0)
- *str++ = ' ';
- if (sign)
- *str++ = sign;
- if (type & SPECIALX) {
- if (base==8)
- *str++ = '0';
- else if (base==16) {
- *str++ = '0';
- *str++ = digits[33];
- }
- }
- if (!(type & LEFT))
- while (size-- > 0)
- *str++ = c;
- while (i < precision--)
- *str++ = '0';
- while (i-- > 0)
- *str++ = tmp[i];
- while (size-- > 0)
- *str++ = ' ';
-
- str[0] = '\0';
-
- return strorg;
-}
+/******************************************************************************
+ *
+ * Name: skproc.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Funktions to display statictic data
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * Created 22-Nov-2000
+ * Author: Mirko Lindner (mlindner@syskonnect.de)
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skproc.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.4 2003/02/25 14:16:37 mlindner
+ * Fix: Copyright statement
+ *
+ * Revision 1.3 2002/10/02 12:59:51 mlindner
+ * Add: Support for Yukon
+ * Add: Speed check and setup
+ * Add: Merge source for kernel 2.2.x and 2.4.x
+ * Add: Read sensor names directly from VPD
+ * Fix: Volt values
+ *
+ * Revision 1.2.2.7 2002/01/14 12:45:15 mlindner
+ * Fix: Editorial changes
+ *
+ * Revision 1.2.2.6 2001/12/06 15:26:07 mlindner
+ * Fix: Return value of proc_read
+ *
+ * Revision 1.2.2.5 2001/12/06 09:57:39 mlindner
+ * New ProcFs entries
+ *
+ * Revision 1.2.2.4 2001/09/05 12:16:02 mlindner
+ * Add: New ProcFs entries
+ * Fix: Counter Errors (Jumbo == to long errors)
+ * Fix: Kernel error compilation
+ * Fix: too short counters
+ *
+ * Revision 1.2.2.3 2001/06/25 07:26:26 mlindner
+ * Add: More error messages
+ *
+ * Revision 1.2.2.2 2001/03/15 12:50:13 mlindner
+ * fix: ProcFS owner protection
+ *
+ * Revision 1.2.2.1 2001/03/12 16:43:48 mlindner
+ * chg: 2.4 requirements for procfs
+ *
+ * Revision 1.1 2001/01/22 14:15:31 mlindner
+ * added ProcFs functionality
+ * Dual Net functionality integrated
+ * Rlmt networks added
+ *
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+#include <linux/proc_fs.h>
+
+#include "h/skdrv1st.h"
+#include "h/skdrv2nd.h"
+#define ZEROPAD 1 /* pad with zero */
+#define SIGN 2 /* unsigned/signed long */
+#define PLUS 4 /* show plus */
+#define SPACE 8 /* space if plus */
+#define LEFT 16 /* left justified */
+#define SPECIALX 32 /* 0x */
+#define LARGE 64
+
+extern SK_AC *pACList;
+extern struct net_device *SkGeRootDev;
+
+extern char *SkNumber (char *str,
+ long long num,
+ int base,
+ int size,
+ int precision,
+ int type);
+
+
+/*****************************************************************************
+ *
+ * proc_read - print "summaries" entry
+ *
+ * Description:
+ * This function fills the proc entry with statistic data about
+ * the ethernet device.
+ *
+ *
+ * Returns: buffer with statistic data
+ *
+ */
+int proc_read(char *buffer,
+char **buffer_location,
+off_t offset,
+int buffer_length,
+int *eof,
+void *data)
+{
+ int len = 0;
+ int t;
+ int i;
+ DEV_NET *pNet;
+ SK_AC *pAC;
+ char test_buf[100];
+ char sens_msg[50];
+ unsigned long Flags;
+ unsigned int Size;
+ struct SK_NET_DEVICE *next;
+ struct SK_NET_DEVICE *SkgeProcDev = SkGeRootDev;
+
+ SK_PNMI_STRUCT_DATA *pPnmiStruct;
+ SK_PNMI_STAT *pPnmiStat;
+ struct proc_dir_entry *file = (struct proc_dir_entry*) data;
+
+ while (SkgeProcDev) {
+ pNet = (DEV_NET*) SkgeProcDev->priv;
+ pAC = pNet->pAC;
+ next = pAC->Next;
+ pPnmiStruct = &pAC->PnmiStruct;
+ /* NetIndex in GetStruct is now required, zero is only dummy */
+
+ for (t=pAC->GIni.GIMacsFound; t > 0; t--) {
+ if ((pAC->GIni.GIMacsFound == 2) && pAC->RlmtNets == 1)
+ t--;
+
+ spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+ Size = SK_PNMI_STRUCT_SIZE;
+ SkPnmiGetStruct(pAC, pAC->IoBase,
+ pPnmiStruct, &Size, t-1);
+ spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+
+ if (strcmp(pAC->dev[t-1]->name, file->name) == 0) {
+ pPnmiStat = &pPnmiStruct->Stat[0];
+ len = sprintf(buffer,
+ "\nDetailed statistic for device %s\n",
+ pAC->dev[t-1]->name);
+ len += sprintf(buffer + len,
+ "=======================================\n");
+
+ /* Board statistics */
+ len += sprintf(buffer + len,
+ "\nBoard statistics\n\n");
+ len += sprintf(buffer + len,
+ "Active Port %c\n",
+ 'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
+ Net[t-1].PrefPort]->PortNumber);
+ len += sprintf(buffer + len,
+ "Preferred Port %c\n",
+ 'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
+ Net[t-1].PrefPort]->PortNumber);
+
+ len += sprintf(buffer + len,
+ "Bus speed (MHz) %d\n",
+ pPnmiStruct->BusSpeed);
+
+ len += sprintf(buffer + len,
+ "Bus width (Bit) %d\n",
+ pPnmiStruct->BusWidth);
+ len += sprintf(buffer + len,
+ "Hardware revision v%d.%d\n",
+ (pAC->GIni.GIPciHwRev >> 4) & 0x0F,
+ pAC->GIni.GIPciHwRev & 0x0F);
+
+ /* Print sensor informations */
+ for (i=0; i < pAC->I2c.MaxSens; i ++) {
+ /* Check type */
+ switch (pAC->I2c.SenTable[i].SenType) {
+ case 1:
+ strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+ strcat(sens_msg, " (C)");
+ len += sprintf(buffer + len,
+ "%-25s %d.%02d\n",
+ sens_msg,
+ pAC->I2c.SenTable[i].SenValue / 10,
+ pAC->I2c.SenTable[i].SenValue % 10);
+
+ strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+ strcat(sens_msg, " (F)");
+ len += sprintf(buffer + len,
+ "%-25s %d.%02d\n",
+ sens_msg,
+ ((((pAC->I2c.SenTable[i].SenValue)
+ *10)*9)/5 + 3200)/100,
+ ((((pAC->I2c.SenTable[i].SenValue)
+ *10)*9)/5 + 3200) % 10);
+ break;
+ case 2:
+ strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+ strcat(sens_msg, " (V)");
+ len += sprintf(buffer + len,
+ "%-25s %d.%03d\n",
+ sens_msg,
+ pAC->I2c.SenTable[i].SenValue / 1000,
+ pAC->I2c.SenTable[i].SenValue % 1000);
+ break;
+ case 3:
+ strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+ strcat(sens_msg, " (rpm)");
+ len += sprintf(buffer + len,
+ "%-25s %d\n",
+ sens_msg,
+ pAC->I2c.SenTable[i].SenValue);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /*Receive statistics */
+ len += sprintf(buffer + len,
+ "\nReceive statistics\n\n");
+
+ len += sprintf(buffer + len,
+ "Received bytes %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxOctetsOkCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Received packets %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxOkCts,
+ 10,0,-1,0));
+#if 0
+ if (pAC->GIni.GP[0].PhyType == SK_PHY_XMAC &&
+ pAC->HWRevision < 12) {
+ pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -
+ pPnmiStat->StatRxShortsCts;
+ pPnmiStat->StatRxShortsCts = 0;
+ }
+#endif
+ if (pNet->Mtu > 1500)
+ pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -
+ pPnmiStat->StatRxTooLongCts;
+
+ len += sprintf(buffer + len,
+ "Receive errors %s\n",
+ SkNumber(test_buf, pPnmiStruct->InErrorsCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Receive drops %s\n",
+ SkNumber(test_buf, pPnmiStruct->RxNoBufCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Received multicast %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxMulticastOkCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Receive error types\n");
+ len += sprintf(buffer + len,
+ " length %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxRuntCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " buffer overflow %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxFifoOverflowCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " bad crc %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxFcsCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " framing %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxFramingCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " missed frames %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxMissedCts,
+ 10, 0, -1, 0));
+
+ if (pNet->Mtu > 1500)
+ pPnmiStat->StatRxTooLongCts = 0;
+
+ len += sprintf(buffer + len,
+ " too long %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxTooLongCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " carrier extension %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxCextCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " too short %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxShortsCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " symbol %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxSymbolCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " LLC MAC size %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxIRLengthCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " carrier event %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxCarrierCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " jabber %s\n",
+ SkNumber(test_buf, pPnmiStat->StatRxJabberCts,
+ 10, 0, -1, 0));
+
+
+ /*Transmit statistics */
+ len += sprintf(buffer + len,
+ "\nTransmit statistics\n\n");
+
+ len += sprintf(buffer + len,
+ "Transmited bytes %s\n",
+ SkNumber(test_buf, pPnmiStat->StatTxOctetsOkCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Transmited packets %s\n",
+ SkNumber(test_buf, pPnmiStat->StatTxOkCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Transmit errors %s\n",
+ SkNumber(test_buf, pPnmiStat->StatTxSingleCollisionCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Transmit dropped %s\n",
+ SkNumber(test_buf, pPnmiStruct->TxNoBufCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Transmit collisions %s\n",
+ SkNumber(test_buf, pPnmiStat->StatTxSingleCollisionCts,
+ 10,0,-1,0));
+ len += sprintf(buffer + len,
+ "Transmit errors types\n");
+ len += sprintf(buffer + len,
+ " excessive collision %ld\n",
+ pAC->stats.tx_aborted_errors);
+ len += sprintf(buffer + len,
+ " carrier %s\n",
+ SkNumber(test_buf, pPnmiStat->StatTxCarrierCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " fifo underrun %s\n",
+ SkNumber(test_buf, pPnmiStat->StatTxFifoUnderrunCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " heartbeat %s\n",
+ SkNumber(test_buf, pPnmiStat->StatTxCarrierCts,
+ 10, 0, -1, 0));
+ len += sprintf(buffer + len,
+ " window %ld\n",
+ pAC->stats.tx_window_errors);
+
+ }
+ }
+ SkgeProcDev = next;
+ }
+ if (offset >= len) {
+ *eof = 1;
+ return 0;
+ }
+
+ *buffer_location = buffer + offset;
+ if (buffer_length >= len - offset) {
+ *eof = 1;
+ }
+ return (min_t(int, buffer_length, len - offset));
+}
+
+
+/*****************************************************************************
+ *
+ * SkDoDiv - convert 64bit number
+ *
+ * Description:
+ * This function "converts" a long long number.
+ *
+ * Returns:
+ * remainder of division
+ */
+static long SkDoDiv (long long Dividend, int Divisor, long long *pErg)
+{
+ long Rest;
+ long long Ergebnis;
+ long Akku;
+
+
+ Akku = Dividend >> 32;
+
+ Ergebnis = ((long long) (Akku / Divisor)) << 32;
+ Rest = Akku % Divisor;
+
+ Akku = Rest << 16;
+ Akku |= ((Dividend & 0xFFFF0000) >> 16);
+
+
+ Ergebnis += ((long long) (Akku / Divisor)) << 16;
+ Rest = Akku % Divisor;
+
+ Akku = Rest << 16;
+ Akku |= (Dividend & 0xFFFF);
+
+ Ergebnis += (Akku / Divisor);
+ Rest = Akku % Divisor;
+
+ *pErg = Ergebnis;
+ return (Rest);
+}
+
+
+#if 0
+#define do_div(n,base) ({ \
+long long __res; \
+__res = ((unsigned long long) n) % (unsigned) base; \
+n = ((unsigned long long) n) / (unsigned) base; \
+__res; })
+
+#endif
+
+
+/*****************************************************************************
+ *
+ * SkNumber - Print results
+ *
+ * Description:
+ * This function converts a long long number into a string.
+ *
+ * Returns:
+ * number as string
+ */
+char * SkNumber(char * str, long long num, int base, int size, int precision
+ ,int type)
+{
+ char c,sign,tmp[66], *strorg = str;
+ const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
+ int i;
+
+ if (type & LARGE)
+ digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ if (type & LEFT)
+ type &= ~ZEROPAD;
+ if (base < 2 || base > 36)
+ return 0;
+ c = (type & ZEROPAD) ? '0' : ' ';
+ sign = 0;
+ if (type & SIGN) {
+ if (num < 0) {
+ sign = '-';
+ num = -num;
+ size--;
+ } else if (type & PLUS) {
+ sign = '+';
+ size--;
+ } else if (type & SPACE) {
+ sign = ' ';
+ size--;
+ }
+ }
+ if (type & SPECIALX) {
+ if (base == 16)
+ size -= 2;
+ else if (base == 8)
+ size--;
+ }
+ i = 0;
+ if (num == 0)
+ tmp[i++]='0';
+ else while (num != 0)
+ tmp[i++] = digits[SkDoDiv(num,base, &num)];
+
+ if (i > precision)
+ precision = i;
+ size -= precision;
+ if (!(type&(ZEROPAD+LEFT)))
+ while(size-->0)
+ *str++ = ' ';
+ if (sign)
+ *str++ = sign;
+ if (type & SPECIALX) {
+ if (base==8)
+ *str++ = '0';
+ else if (base==16) {
+ *str++ = '0';
+ *str++ = digits[33];
+ }
+ }
+ if (!(type & LEFT))
+ while (size-- > 0)
+ *str++ = c;
+ while (i < precision--)
+ *str++ = '0';
+ while (i-- > 0)
+ *str++ = tmp[i];
+ while (size-- > 0)
+ *str++ = ' ';
+
+ str[0] = '\0';
+
+ return strorg;
+}
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skqueue.c u-boot-2009.03/drivers/net/sk98lin/skqueue.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skqueue.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skqueue.c 2009-03-31 14:54:29.721876800 -0700
@@ -1,238 +1,241 @@
-/******************************************************************************
- *
- * Name: skqueue.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.18 $
- * Date: $Date: 2002/05/07 14:11:11 $
- * Purpose: Management of an event queue.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998,1999 SysKonnect,
- * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skqueue.c,v $
- * Revision 1.18 2002/05/07 14:11:11 rwahl
- * Fixed Watcom Precompiler error.
- *
- * Revision 1.17 2002/03/25 10:06:41 mkunz
- * SkIgnoreEvent deleted
- *
- * Revision 1.16 2002/03/15 10:51:59 mkunz
- * Added event classes for link aggregation
- *
- * Revision 1.15 1999/11/22 13:36:29 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.14 1998/10/15 15:11:35 gklug
- * fix: ID_sccs to SysKonnectFileId
- *
- * Revision 1.13 1998/09/08 08:47:52 gklug
- * add: init level handling
- *
- * Revision 1.12 1998/09/08 07:43:20 gklug
- * fix: Sirq Event function name
- *
- * Revision 1.11 1998/09/08 05:54:34 gklug
- * chg: define SK_CSUM is replaced by SK_USE_CSUM
- *
- * Revision 1.10 1998/09/03 14:14:49 gklug
- * add: CSUM and HWAC Eventclass and function.
- *
- * Revision 1.9 1998/08/19 09:50:50 gklug
- * fix: remove struct keyword from c-code (see CCC) add typedefs
- *
- * Revision 1.8 1998/08/17 13:43:11 gklug
- * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
- *
- * Revision 1.7 1998/08/14 07:09:11 gklug
- * fix: chg pAc -> pAC
- *
- * Revision 1.6 1998/08/11 12:13:14 gklug
- * add: return code feature of Event service routines
- * add: correct Error log calls
- *
- * Revision 1.5 1998/08/07 12:53:45 gklug
- * fix: first compiled version
- *
- * Revision 1.4 1998/08/07 09:20:48 gklug
- * adapt functions to C coding conventions.
- *
- * Revision 1.3 1998/08/05 11:29:32 gklug
- * rmv: Timer event entry. Timer will queue event directly
- *
- * Revision 1.2 1998/07/31 11:22:40 gklug
- * Initial version
- *
- * Revision 1.1 1998/07/30 15:14:01 gklug
- * Initial version. Adapted from SMT
- *
- *
- *
- ******************************************************************************/
-
-
-#include <config.h>
-
-/*
- Event queue and dispatcher
-*/
-static const char SysKonnectFileId[] =
- "$Header: /usr56/projects/ge/schedule/skqueue.c,v 1.18 2002/05/07 14:11:11 rwahl Exp $" ;
-
-#include "h/skdrv1st.h" /* Driver Specific Definitions */
-#include "h/skqueue.h" /* Queue Definitions */
-#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
-
-#ifdef __C2MAN__
-/*
- Event queue management.
-
- General Description:
-
- */
-intro()
-{}
-#endif
-
-#define PRINTF(a,b,c)
-
-/*
- * init event queue management
- *
- * Must be called during init level 0.
- */
-void SkEventInit(
-SK_AC *pAC, /* Adapter context */
-SK_IOC Ioc, /* IO context */
-int Level) /* Init level */
-{
- switch (Level) {
- case SK_INIT_DATA:
- pAC->Event.EvPut = pAC->Event.EvGet = pAC->Event.EvQueue ;
- break;
- default:
- break;
- }
-}
-
-/*
- * add event to queue
- */
-void SkEventQueue(
-SK_AC *pAC, /* Adapters context */
-SK_U32 Class, /* Event Class */
-SK_U32 Event, /* Event to be queued */
-SK_EVPARA Para) /* Event parameter */
-{
- pAC->Event.EvPut->Class = Class ;
- pAC->Event.EvPut->Event = Event ;
- pAC->Event.EvPut->Para = Para ;
- if (++pAC->Event.EvPut == &pAC->Event.EvQueue[SK_MAX_EVENT])
- pAC->Event.EvPut = pAC->Event.EvQueue ;
-
- if (pAC->Event.EvPut == pAC->Event.EvGet) {
- SK_ERR_LOG(pAC, SK_ERRCL_NORES, SKERR_Q_E001, SKERR_Q_E001MSG) ;
- }
-}
-
-/*
- * event dispatcher
- * while event queue is not empty
- * get event from queue
- * send command to state machine
- * end
- * return error reported by individual Event function
- * 0 if no error occured.
- */
-int SkEventDispatcher(
-SK_AC *pAC, /* Adapters Context */
-SK_IOC Ioc) /* Io context */
-{
- SK_EVENTELEM *pEv ; /* pointer into queue */
- SK_U32 Class ;
- int Rtv ;
-
- pEv = pAC->Event.EvGet ;
- PRINTF("dispatch get %x put %x\n",pEv,pAC->Event.ev_put) ;
- while (pEv != pAC->Event.EvPut) {
- PRINTF("dispatch Class %d Event %d\n",pEv->Class,pEv->Event) ;
- switch(Class = pEv->Class) {
-#ifndef SK_USE_LAC_EV
- case SKGE_RLMT : /* RLMT Event */
- Rtv = SkRlmtEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
- case SKGE_I2C : /* I2C Event */
- Rtv = SkI2cEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
- case SKGE_PNMI :
- Rtv = SkPnmiEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
-#endif /* SK_USE_LAC_EV */
- case SKGE_DRV : /* Driver Event */
- Rtv = SkDrvEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
-#ifndef SK_USE_SW_TIMER
- case SKGE_HWAC :
- Rtv = SkGeSirqEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
-#else /* !SK_USE_SW_TIMER */
- case SKGE_SWT :
- Rtv = SkSwtEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
-#endif /* !SK_USE_SW_TIMER */
-#ifdef SK_USE_LAC_EV
- case SKGE_LACP :
- Rtv = SkLacpEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
- case SKGE_RSF :
- Rtv = SkRsfEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
- case SKGE_MARKER :
- Rtv = SkMarkerEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
- case SKGE_FD :
- Rtv = SkFdEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
-#endif /* SK_USE_LAC_EV */
-#ifdef SK_USE_CSUM
- case SKGE_CSUM :
- Rtv = SkCsEvent(pAC,Ioc,pEv->Event,pEv->Para);
- break ;
-#endif /* SK_USE_CSUM */
- default :
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_Q_E002,
- SKERR_Q_E002MSG) ;
- Rtv = 0;
- }
-
- if (Rtv != 0) {
- return(Rtv) ;
- }
-
- if (++pEv == &pAC->Event.EvQueue[SK_MAX_EVENT])
- pEv = pAC->Event.EvQueue ;
-
- /* Renew get: it is used in queue_events to detect overruns */
- pAC->Event.EvGet = pEv;
- }
-
- return(0) ;
-}
-
-/* End of file */
+/******************************************************************************
+ *
+ * Name: skqueue.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Management of an event queue.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998,1999 SysKonnect,
+ * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skqueue.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.18 2002/05/07 14:11:11 rwahl
+ * Fixed Watcom Precompiler error.
+ *
+ * Revision 1.17 2002/03/25 10:06:41 mkunz
+ * SkIgnoreEvent deleted
+ *
+ * Revision 1.16 2002/03/15 10:51:59 mkunz
+ * Added event classes for link aggregation
+ *
+ * Revision 1.15 1999/11/22 13:36:29 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.14 1998/10/15 15:11:35 gklug
+ * fix: ID_sccs to SysKonnectFileId
+ *
+ * Revision 1.13 1998/09/08 08:47:52 gklug
+ * add: init level handling
+ *
+ * Revision 1.12 1998/09/08 07:43:20 gklug
+ * fix: Sirq Event function name
+ *
+ * Revision 1.11 1998/09/08 05:54:34 gklug
+ * chg: define SK_CSUM is replaced by SK_USE_CSUM
+ *
+ * Revision 1.10 1998/09/03 14:14:49 gklug
+ * add: CSUM and HWAC Eventclass and function.
+ *
+ * Revision 1.9 1998/08/19 09:50:50 gklug
+ * fix: remove struct keyword from c-code (see CCC) add typedefs
+ *
+ * Revision 1.8 1998/08/17 13:43:11 gklug
+ * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
+ *
+ * Revision 1.7 1998/08/14 07:09:11 gklug
+ * fix: chg pAc -> pAC
+ *
+ * Revision 1.6 1998/08/11 12:13:14 gklug
+ * add: return code feature of Event service routines
+ * add: correct Error log calls
+ *
+ * Revision 1.5 1998/08/07 12:53:45 gklug
+ * fix: first compiled version
+ *
+ * Revision 1.4 1998/08/07 09:20:48 gklug
+ * adapt functions to C coding conventions.
+ *
+ * Revision 1.3 1998/08/05 11:29:32 gklug
+ * rmv: Timer event entry. Timer will queue event directly
+ *
+ * Revision 1.2 1998/07/31 11:22:40 gklug
+ * Initial version
+ *
+ * Revision 1.1 1998/07/30 15:14:01 gklug
+ * Initial version. Adapted from SMT
+ *
+ *
+ *
+ ******************************************************************************/
+
+
+#include <config.h>
+
+/*
+ Event queue and dispatcher
+*/
+static const char SysKonnectFileId[] =
+ "$Header: C:\qaz\__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/drivers/net/sk98lin/skqueue.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $" ;
+
+#include "h/skdrv1st.h" /* Driver Specific Definitions */
+#include "h/skqueue.h" /* Queue Definitions */
+#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
+
+#ifdef __C2MAN__
+/*
+ Event queue management.
+
+ General Description:
+
+ */
+intro()
+{}
+#endif
+
+#define PRINTF(a,b,c)
+
+/*
+ * init event queue management
+ *
+ * Must be called during init level 0.
+ */
+void SkEventInit(
+SK_AC *pAC, /* Adapter context */
+SK_IOC Ioc, /* IO context */
+int Level) /* Init level */
+{
+ switch (Level) {
+ case SK_INIT_DATA:
+ pAC->Event.EvPut = pAC->Event.EvGet = pAC->Event.EvQueue ;
+ break;
+ default:
+ break;
+ }
+}
+
+/*
+ * add event to queue
+ */
+void SkEventQueue(
+SK_AC *pAC, /* Adapters context */
+SK_U32 Class, /* Event Class */
+SK_U32 Event, /* Event to be queued */
+SK_EVPARA Para) /* Event parameter */
+{
+ pAC->Event.EvPut->Class = Class ;
+ pAC->Event.EvPut->Event = Event ;
+ pAC->Event.EvPut->Para = Para ;
+ if (++pAC->Event.EvPut == &pAC->Event.EvQueue[SK_MAX_EVENT])
+ pAC->Event.EvPut = pAC->Event.EvQueue ;
+
+ if (pAC->Event.EvPut == pAC->Event.EvGet) {
+ SK_ERR_LOG(pAC, SK_ERRCL_NORES, SKERR_Q_E001, SKERR_Q_E001MSG) ;
+ }
+}
+
+/*
+ * event dispatcher
+ * while event queue is not empty
+ * get event from queue
+ * send command to state machine
+ * end
+ * return error reported by individual Event function
+ * 0 if no error occured.
+ */
+int SkEventDispatcher(
+SK_AC *pAC, /* Adapters Context */
+SK_IOC Ioc) /* Io context */
+{
+ SK_EVENTELEM *pEv ; /* pointer into queue */
+ SK_U32 Class ;
+ int Rtv ;
+
+ pEv = pAC->Event.EvGet ;
+ PRINTF("dispatch get %x put %x\n",pEv,pAC->Event.ev_put) ;
+ while (pEv != pAC->Event.EvPut) {
+ PRINTF("dispatch Class %d Event %d\n",pEv->Class,pEv->Event) ;
+ switch(Class = pEv->Class) {
+#ifndef SK_USE_LAC_EV
+ case SKGE_RLMT : /* RLMT Event */
+ Rtv = SkRlmtEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+ case SKGE_I2C : /* I2C Event */
+ Rtv = SkI2cEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+ case SKGE_PNMI :
+ Rtv = SkPnmiEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+#endif /* SK_USE_LAC_EV */
+ case SKGE_DRV : /* Driver Event */
+ Rtv = SkDrvEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+#ifndef SK_USE_SW_TIMER
+ case SKGE_HWAC :
+ Rtv = SkGeSirqEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+#else /* !SK_USE_SW_TIMER */
+ case SKGE_SWT :
+ Rtv = SkSwtEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+#endif /* !SK_USE_SW_TIMER */
+#ifdef SK_USE_LAC_EV
+ case SKGE_LACP :
+ Rtv = SkLacpEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+ case SKGE_RSF :
+ Rtv = SkRsfEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+ case SKGE_MARKER :
+ Rtv = SkMarkerEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+ case SKGE_FD :
+ Rtv = SkFdEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+#endif /* SK_USE_LAC_EV */
+#ifdef SK_USE_CSUM
+ case SKGE_CSUM :
+ Rtv = SkCsEvent(pAC,Ioc,pEv->Event,pEv->Para);
+ break ;
+#endif /* SK_USE_CSUM */
+ default :
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_Q_E002,
+ SKERR_Q_E002MSG) ;
+ Rtv = 0;
+ }
+
+ if (Rtv != 0) {
+ return(Rtv) ;
+ }
+
+ if (++pEv == &pAC->Event.EvQueue[SK_MAX_EVENT])
+ pEv = pAC->Event.EvQueue ;
+
+ /* Renew get: it is used in queue_events to detect overruns */
+ pAC->Event.EvGet = pEv;
+ }
+
+ return(0) ;
+}
+
+/* End of file */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skrlmt.c u-boot-2009.03/drivers/net/sk98lin/skrlmt.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skrlmt.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skrlmt.c 2009-03-31 14:54:29.768751200 -0700
@@ -1,3504 +1,3507 @@
-/******************************************************************************
- *
- * Name: skrlmt.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.68 $
- * Date: $Date: 2003/01/31 15:26:56 $
- * Purpose: Manage links on SK-NET Adapters, esp. redundant ones.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2001 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skrlmt.c,v $
- * Revision 1.68 2003/01/31 15:26:56 rschmidt
- * Added init for local variables in RlmtInit().
- *
- * Revision 1.67 2003/01/31 14:12:41 mkunz
- * single port adapter runs now with two identical MAC addresses
- *
- * Revision 1.66 2002/09/23 15:14:19 rwahl
- * - Reset broadcast timestamp on link down.
- * - Editorial corrections.
- *
- * Revision 1.65 2002/07/22 14:29:48 rwahl
- * - Removed BRK statement from debug check.
- *
- * Revision 1.64 2001/11/28 19:36:14 rwahl
- * - RLMT Packets sent to an invalid MAC address in CLP/CLPSS mode
- * (#10650).
- * - Reworked fix for port switching in CLS mode (#10639)
- * (no dependency to RLMT module).
- * - Enabled dbg output for entry/exit of event functions.
- * - Editorial changes.
- *
- * Revision 1.63 2001/10/26 07:53:18 afischer
- * Port switching bug in `check local link` mode
- *
- * Revision 1.62 2001/07/03 12:16:30 mkunz
- * New Flag ChgBcPrio (Change priority of last broadcast received)
- *
- * Revision 1.61 2001/03/14 12:52:08 rassmann
- * Fixed reporting of active port up/down to PNMI.
- *
- * Revision 1.60 2001/02/21 16:02:25 gklug
- * fix: when RLMT starts set Active Port for PNMI
- *
- * Revision 1.59 2001/02/16 14:38:19 rassmann
- * Initializing some pointers earlier in the init phase.
- * Rx Mbufs are freed if the net which they belong to is stopped.
- *
- * Revision 1.58 2001/02/14 14:06:31 rassmann
- * Editorial changes.
- *
- * Revision 1.57 2001/02/05 14:25:26 rassmann
- * Prepared RLMT for transparent operation.
- *
- * Revision 1.56 2001/01/30 10:29:09 rassmann
- * Not checking switching befor RlmtStart.
- * Editorial changes.
- *
- * Revision 1.55 2001/01/22 13:41:38 rassmann
- * Supporting two nets on dual-port adapters.
- *
- * Revision 1.54 2000/11/30 13:25:07 rassmann
- * Setting SK_TICK_INCR to 1 by default.
- *
- * Revision 1.53 2000/11/30 10:48:07 cgoos
- * Changed definition of SK_RLMT_BC_DELTA.
- *
- * Revision 1.52 2000/11/27 12:50:03 rassmann
- * Checking ports after receiving broadcasts.
- *
- * Revision 1.51 2000/11/17 08:58:00 rassmann
- * Moved CheckSwitch from SK_RLMT_PACKET_RECEIVED to SK_RLMT_TIM event.
- *
- * Revision 1.50 2000/11/09 12:24:34 rassmann
- * Indicating that segmentation check is not running anymore after
- * SkRlmtCheckSeg().
- * Restarting segmentation timer after segmentation log.
- * Editorial changes.
- *
- * Revision 1.49 1999/11/22 13:38:02 cgoos
- * Changed license header to GPL.
- * Added initialization to some variables to avoid compiler warnings.
- *
- * Revision 1.48 1999/10/04 14:01:17 rassmann
- * Corrected reaction to reception of BPDU frames (#10441).
- *
- * Revision 1.47 1999/07/20 12:53:36 rassmann
- * Fixed documentation errors for lookahead macros.
- *
- * Revision 1.46 1999/05/28 13:29:16 rassmann
- * Replaced C++-style comment.
- *
- * Revision 1.45 1999/05/28 13:28:08 rassmann
- * Corrected syntax error (xxx).
- *
- * Revision 1.44 1999/05/28 11:15:54 rassmann
- * Changed behaviour to reflect Design Spec v1.2.
- * Controlling Link LED(s).
- * Introduced RLMT Packet Version field in RLMT Packet.
- * Newstyle lookahead macros (checking meta-information before looking at
- * the packet).
- *
- * Revision 1.43 1999/01/28 13:12:43 rassmann
- * Corrected Lookahead (bug introduced in previous Rev.).
- *
- * Revision 1.42 1999/01/28 12:50:41 rassmann
- * Not using broadcast time stamps in CheckLinkState mode.
- *
- * Revision 1.41 1999/01/27 14:13:02 rassmann
- * Monitoring broadcast traffic.
- * Switching more reliably and not too early if switch is
- * configured for spanning tree.
- *
- * Revision 1.40 1999/01/22 13:17:30 rassmann
- * Informing PNMI of NET_UP.
- * Clearing RLMT multicast addresses before setting them for the first time.
- * Reporting segmentation earlier, setting a "quiet time"
- * after a report.
- *
- * Revision 1.39 1998/12/10 15:29:53 rassmann
- * Corrected SuspectStatus in SkRlmtBuildCheckChain().
- * Corrected CHECK_SEG mode.
- *
- * Revision 1.38 1998/12/08 13:11:23 rassmann
- * Stopping SegTimer at RlmtStop.
- *
- * Revision 1.37 1998/12/07 16:51:42 rassmann
- * Corrected comments.
- *
- * Revision 1.36 1998/12/04 10:58:56 rassmann
- * Setting next pointer to NULL when receiving.
- *
- * Revision 1.35 1998/12/03 16:12:42 rassmann
- * Ignoring/correcting illegal PrefPort values.
- *
- * Revision 1.34 1998/12/01 11:45:35 rassmann
- * Code cleanup.
- *
- * Revision 1.33 1998/12/01 10:29:32 rassmann
- * Starting standby ports before getting the net up.
- * Checking if a port is started when the link comes up.
- *
- * Revision 1.32 1998/11/30 16:19:50 rassmann
- * New default for PortNoRx.
- *
- * Revision 1.31 1998/11/27 19:17:13 rassmann
- * Corrected handling of LINK_DOWN coming shortly after LINK_UP.
- *
- * Revision 1.30 1998/11/24 12:37:31 rassmann
- * Implemented segmentation check.
- *
- * Revision 1.29 1998/11/18 13:04:32 rassmann
- * Secured PortUpTimer event.
- * Waiting longer before starting standby port(s).
- *
- * Revision 1.28 1998/11/17 13:43:04 rassmann
- * Handling (logical) tx failure.
- * Sending packet on logical address after PORT_SWITCH.
- *
- * Revision 1.27 1998/11/13 17:09:50 rassmann
- * Secured some events against being called in wrong state.
- *
- * Revision 1.26 1998/11/13 16:56:54 rassmann
- * Added macro version of SkRlmtLookaheadPacket.
- *
- * Revision 1.25 1998/11/06 18:06:04 rassmann
- * Corrected timing when RLMT checks fail.
- * Clearing tx counter earlier in periodical checks.
- *
- * Revision 1.24 1998/11/05 10:37:27 rassmann
- * Checking destination address in Lookahead.
- *
- * Revision 1.23 1998/11/03 13:53:49 rassmann
- * RLMT should switch now (at least in mode 3).
- *
- * Revision 1.22 1998/10/29 14:34:49 rassmann
- * Clearing SK_RLMT struct at startup.
- * Initializing PortsUp during SK_RLMT_START.
- *
- * Revision 1.21 1998/10/28 11:30:17 rassmann
- * Default mode is now SK_RLMT_CHECK_LOC_LINK.
- *
- * Revision 1.20 1998/10/26 16:02:03 rassmann
- * Ignoring LINK_DOWN for links that are down.
- *
- * Revision 1.19 1998/10/22 15:54:01 rassmann
- * Corrected EtherLen.
- * Starting Link Check when second port comes up.
- *
- * Revision 1.18 1998/10/22 11:39:50 rassmann
- * Corrected signed/unsigned mismatches.
- * Corrected receive list handling and address recognition.
- *
- * Revision 1.17 1998/10/19 17:01:20 rassmann
- * More detailed checking of received packets.
- *
- * Revision 1.16 1998/10/15 15:16:34 rassmann
- * Finished Spanning Tree checking.
- * Checked with lint.
- *
- * Revision 1.15 1998/09/24 19:16:07 rassmann
- * Code cleanup.
- * Introduced Timer for PORT_DOWN due to no RX.
- *
- * Revision 1.14 1998/09/18 20:27:14 rassmann
- * Added address override.
- *
- * Revision 1.13 1998/09/16 11:31:48 rassmann
- * Including skdrv1st.h again. :(
- *
- * Revision 1.12 1998/09/16 11:09:50 rassmann
- * Syntax corrections.
- *
- * Revision 1.11 1998/09/15 12:32:03 rassmann
- * Syntax correction.
- *
- * Revision 1.10 1998/09/15 11:28:49 rassmann
- * Syntax corrections.
- *
- * Revision 1.9 1998/09/14 17:07:37 rassmann
- * Added code for port checking via LAN.
- * Changed Mbuf definition.
- *
- * Revision 1.8 1998/09/07 11:14:14 rassmann
- * Syntax corrections.
- *
- * Revision 1.7 1998/09/07 09:06:07 rassmann
- * Syntax corrections.
- *
- * Revision 1.6 1998/09/04 19:41:33 rassmann
- * Syntax corrections.
- * Started entering code for checking local links.
- *
- * Revision 1.5 1998/09/04 12:14:27 rassmann
- * Interface cleanup.
- *
- * Revision 1.4 1998/09/02 16:55:28 rassmann
- * Updated to reflect new DRV/HWAC/RLMT interface.
- *
- * Revision 1.3 1998/08/27 14:29:03 rassmann
- * Code cleanup.
- *
- * Revision 1.2 1998/08/27 14:26:24 rassmann
- * Updated interface.
- *
- * Revision 1.1 1998/08/21 08:26:49 rassmann
- * First public version.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- *
- * This module contains code for Link ManagemenT (LMT) of SK-NET Adapters.
- * It is mainly intended for adapters with more than one link.
- * For such adapters, this module realizes Redundant Link ManagemenT (RLMT).
- *
- * Include File Hierarchy:
- *
- * "skdrv1st.h"
- * "skdrv2nd.h"
- *
- ******************************************************************************/
-
-#include <config.h>
-
-#ifndef lint
-static const char SysKonnectFileId[] =
- "@(#) $Id: skrlmt.c,v 1.68 2003/01/31 15:26:56 rschmidt Exp $ (C) SysKonnect.";
-#endif /* !defined(lint) */
-
-#define __SKRLMT_C
-
-#ifdef __cplusplus
-#error C++ is not yet supported.
-extern "C" {
-#endif /* cplusplus */
-
-#include "h/skdrv1st.h"
-#include "h/skdrv2nd.h"
-
-/* defines ********************************************************************/
-
-#ifndef SK_HWAC_LINK_LED
-#define SK_HWAC_LINK_LED(a,b,c,d)
-#endif /* !defined(SK_HWAC_LINK_LED) */
-
-#ifndef DEBUG
-#define RLMT_STATIC static
-#else /* DEBUG */
-#define RLMT_STATIC
-
-#ifndef SK_LITTLE_ENDIAN
-/* First 32 bits */
-#define OFFS_LO32 1
-
-/* Second 32 bits */
-#define OFFS_HI32 0
-#else /* SK_LITTLE_ENDIAN */
-/* First 32 bits */
-#define OFFS_LO32 0
-
-/* Second 32 bits */
-#define OFFS_HI32 1
-#endif /* SK_LITTLE_ENDIAN */
-
-#endif /* DEBUG */
-
-/* ----- Private timeout values ----- */
-
-#define SK_RLMT_MIN_TO_VAL 125000 /* 1/8 sec. */
-#define SK_RLMT_DEF_TO_VAL 1000000 /* 1 sec. */
-#define SK_RLMT_PORTDOWN_TIM_VAL 900000 /* another 0.9 sec. */
-#define SK_RLMT_PORTSTART_TIM_VAL 100000 /* 0.1 sec. */
-#define SK_RLMT_PORTUP_TIM_VAL 2500000 /* 2.5 sec. */
-#define SK_RLMT_SEG_TO_VAL 900000000 /* 15 min. */
-
-/* Assume tick counter increment is 1 - may be set OS-dependent. */
-#ifndef SK_TICK_INCR
-#define SK_TICK_INCR SK_CONSTU64(1)
-#endif /* !defined(SK_TICK_INCR) */
-
-/*
- * Amount that a time stamp must be later to be recognized as "substantially
- * later". This is about 1/128 sec, but above 1 tick counter increment.
- */
-#define SK_RLMT_BC_DELTA (1 + ((SK_TICKS_PER_SEC >> 7) > SK_TICK_INCR ? \
- (SK_TICKS_PER_SEC >> 7) : SK_TICK_INCR))
-
-/* ----- Private RLMT defaults ----- */
-
-#define SK_RLMT_DEF_PREF_PORT 0 /* "Lower" port. */
-#define SK_RLMT_DEF_MODE SK_RLMT_CHECK_LINK /* Default RLMT Mode. */
-
-/* ----- Private RLMT checking states ----- */
-
-#define SK_RLMT_RCS_SEG 1 /* RLMT Check State: check seg. */
-#define SK_RLMT_RCS_START_SEG 2 /* RLMT Check State: start check seg. */
-#define SK_RLMT_RCS_SEND_SEG 4 /* RLMT Check State: send BPDU packet */
-#define SK_RLMT_RCS_REPORT_SEG 8 /* RLMT Check State: report seg. */
-
-/* ----- Private PORT checking states ----- */
-
-#define SK_RLMT_PCS_TX 1 /* Port Check State: check tx. */
-#define SK_RLMT_PCS_RX 2 /* Port Check State: check rx. */
-
-/* ----- Private PORT events ----- */
-
-/* Note: Update simulation when changing these. */
-#define SK_RLMT_PORTSTART_TIM 1100 /* Port start timeout. */
-#define SK_RLMT_PORTUP_TIM 1101 /* Port can now go up. */
-#define SK_RLMT_PORTDOWN_RX_TIM 1102 /* Port did not receive once ... */
-#define SK_RLMT_PORTDOWN 1103 /* Port went down. */
-#define SK_RLMT_PORTDOWN_TX_TIM 1104 /* Partner did not receive ... */
-
-/* ----- Private RLMT events ----- */
-
-/* Note: Update simulation when changing these. */
-#define SK_RLMT_TIM 2100 /* RLMT timeout. */
-#define SK_RLMT_SEG_TIM 2101 /* RLMT segmentation check timeout. */
-
-#define TO_SHORTEN(tim) ((tim) / 2)
-
-/* Error numbers and messages. */
-#define SKERR_RLMT_E001 (SK_ERRBASE_RLMT + 0)
-#define SKERR_RLMT_E001_MSG "No Packet."
-#define SKERR_RLMT_E002 (SKERR_RLMT_E001 + 1)
-#define SKERR_RLMT_E002_MSG "Short Packet."
-#define SKERR_RLMT_E003 (SKERR_RLMT_E002 + 1)
-#define SKERR_RLMT_E003_MSG "Unknown RLMT event."
-#define SKERR_RLMT_E004 (SKERR_RLMT_E003 + 1)
-#define SKERR_RLMT_E004_MSG "PortsUp incorrect."
-#define SKERR_RLMT_E005 (SKERR_RLMT_E004 + 1)
-#define SKERR_RLMT_E005_MSG \
- "Net seems to be segmented (different root bridges are reported on the ports)."
-#define SKERR_RLMT_E006 (SKERR_RLMT_E005 + 1)
-#define SKERR_RLMT_E006_MSG "Duplicate MAC Address detected."
-#define SKERR_RLMT_E007 (SKERR_RLMT_E006 + 1)
-#define SKERR_RLMT_E007_MSG "LinksUp incorrect."
-#define SKERR_RLMT_E008 (SKERR_RLMT_E007 + 1)
-#define SKERR_RLMT_E008_MSG "Port not started but link came up."
-#define SKERR_RLMT_E009 (SKERR_RLMT_E008 + 1)
-#define SKERR_RLMT_E009_MSG "Corrected illegal setting of Preferred Port."
-#define SKERR_RLMT_E010 (SKERR_RLMT_E009 + 1)
-#define SKERR_RLMT_E010_MSG "Ignored illegal Preferred Port."
-
-/* LLC field values. */
-#define LLC_COMMAND_RESPONSE_BIT 1
-#define LLC_TEST_COMMAND 0xE3
-#define LLC_UI 0x03
-
-/* RLMT Packet fields. */
-#define SK_RLMT_DSAP 0
-#define SK_RLMT_SSAP 0
-#define SK_RLMT_CTRL (LLC_TEST_COMMAND)
-#define SK_RLMT_INDICATOR0 0x53 /* S */
-#define SK_RLMT_INDICATOR1 0x4B /* K */
-#define SK_RLMT_INDICATOR2 0x2D /* - */
-#define SK_RLMT_INDICATOR3 0x52 /* R */
-#define SK_RLMT_INDICATOR4 0x4C /* L */
-#define SK_RLMT_INDICATOR5 0x4D /* M */
-#define SK_RLMT_INDICATOR6 0x54 /* T */
-#define SK_RLMT_PACKET_VERSION 0
-
-/* RLMT SPT Flag values. */
-#define SK_RLMT_SPT_FLAG_CHANGE 0x01
-#define SK_RLMT_SPT_FLAG_CHANGE_ACK 0x80
-
-/* RLMT SPT Packet fields. */
-#define SK_RLMT_SPT_DSAP 0x42
-#define SK_RLMT_SPT_SSAP 0x42
-#define SK_RLMT_SPT_CTRL (LLC_UI)
-#define SK_RLMT_SPT_PROTOCOL_ID0 0x00
-#define SK_RLMT_SPT_PROTOCOL_ID1 0x00
-#define SK_RLMT_SPT_PROTOCOL_VERSION_ID 0x00
-#define SK_RLMT_SPT_BPDU_TYPE 0x00
-#define SK_RLMT_SPT_FLAGS 0x00 /* ?? */
-#define SK_RLMT_SPT_ROOT_ID0 0xFF /* Lowest possible priority. */
-#define SK_RLMT_SPT_ROOT_ID1 0xFF /* Lowest possible priority. */
-
-/* Remaining 6 bytes will be the current port address. */
-#define SK_RLMT_SPT_ROOT_PATH_COST0 0x00
-#define SK_RLMT_SPT_ROOT_PATH_COST1 0x00
-#define SK_RLMT_SPT_ROOT_PATH_COST2 0x00
-#define SK_RLMT_SPT_ROOT_PATH_COST3 0x00
-#define SK_RLMT_SPT_BRIDGE_ID0 0xFF /* Lowest possible priority. */
-#define SK_RLMT_SPT_BRIDGE_ID1 0xFF /* Lowest possible priority. */
-
-/* Remaining 6 bytes will be the current port address. */
-#define SK_RLMT_SPT_PORT_ID0 0xFF /* Lowest possible priority. */
-#define SK_RLMT_SPT_PORT_ID1 0xFF /* Lowest possible priority. */
-#define SK_RLMT_SPT_MSG_AGE0 0x00
-#define SK_RLMT_SPT_MSG_AGE1 0x00
-#define SK_RLMT_SPT_MAX_AGE0 0x00
-#define SK_RLMT_SPT_MAX_AGE1 0xFF
-#define SK_RLMT_SPT_HELLO_TIME0 0x00
-#define SK_RLMT_SPT_HELLO_TIME1 0xFF
-#define SK_RLMT_SPT_FWD_DELAY0 0x00
-#define SK_RLMT_SPT_FWD_DELAY1 0x40
-
-/* Size defines. */
-#define SK_RLMT_MIN_PACKET_SIZE 34
-#define SK_RLMT_MAX_PACKET_SIZE (SK_RLMT_MAX_TX_BUF_SIZE)
-#define SK_PACKET_DATA_LEN (SK_RLMT_MAX_PACKET_SIZE - \
- SK_RLMT_MIN_PACKET_SIZE)
-
-/* ----- RLMT packet types ----- */
-#define SK_PACKET_ANNOUNCE 1 /* Port announcement. */
-#define SK_PACKET_ALIVE 2 /* Alive packet to port. */
-#define SK_PACKET_ADDR_CHANGED 3 /* Port address changed. */
-#define SK_PACKET_CHECK_TX 4 /* Check your tx line. */
-
-#ifdef SK_LITTLE_ENDIAN
-#define SK_U16_TO_NETWORK_ORDER(Val,Addr) { \
- SK_U8 *_Addr = (SK_U8*)(Addr); \
- SK_U16 _Val = (SK_U16)(Val); \
- *_Addr++ = (SK_U8)(_Val >> 8); \
- *_Addr = (SK_U8)(_Val & 0xFF); \
-}
-#endif /* SK_LITTLE_ENDIAN */
-
-#ifdef SK_BIG_ENDIAN
-#define SK_U16_TO_NETWORK_ORDER(Val,Addr) (*(SK_U16*)(Addr) = (SK_U16)(Val))
-#endif /* SK_BIG_ENDIAN */
-
-#define AUTONEG_FAILED SK_FALSE
-#define AUTONEG_SUCCESS SK_TRUE
-
-
-/* typedefs *******************************************************************/
-
-/* RLMT packet. Length: SK_RLMT_MAX_PACKET_SIZE (60) bytes. */
-typedef struct s_RlmtPacket {
- SK_U8 DstAddr[SK_MAC_ADDR_LEN];
- SK_U8 SrcAddr[SK_MAC_ADDR_LEN];
- SK_U8 TypeLen[2];
- SK_U8 DSap;
- SK_U8 SSap;
- SK_U8 Ctrl;
- SK_U8 Indicator[7];
- SK_U8 RlmtPacketType[2];
- SK_U8 Align1[2];
- SK_U8 Random[4]; /* Random value of requesting(!) station. */
- SK_U8 RlmtPacketVersion[2]; /* RLMT Packet version. */
- SK_U8 Data[SK_PACKET_DATA_LEN];
-} SK_RLMT_PACKET;
-
-typedef struct s_SpTreeRlmtPacket {
- SK_U8 DstAddr[SK_MAC_ADDR_LEN];
- SK_U8 SrcAddr[SK_MAC_ADDR_LEN];
- SK_U8 TypeLen[2];
- SK_U8 DSap;
- SK_U8 SSap;
- SK_U8 Ctrl;
- SK_U8 ProtocolId[2];
- SK_U8 ProtocolVersionId;
- SK_U8 BpduType;
- SK_U8 Flags;
- SK_U8 RootId[8];
- SK_U8 RootPathCost[4];
- SK_U8 BridgeId[8];
- SK_U8 PortId[2];
- SK_U8 MessageAge[2];
- SK_U8 MaxAge[2];
- SK_U8 HelloTime[2];
- SK_U8 ForwardDelay[2];
-} SK_SPTREE_PACKET;
-
-/* global variables ***********************************************************/
-
-SK_MAC_ADDR SkRlmtMcAddr = {{0x01, 0x00, 0x5A, 0x52, 0x4C, 0x4D}};
-SK_MAC_ADDR BridgeMcAddr = {{0x01, 0x80, 0xC2, 0x00, 0x00, 0x00}};
-SK_MAC_ADDR BcAddr = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
-
-/* local variables ************************************************************/
-
-/* None. */
-
-/* functions ******************************************************************/
-
-RLMT_STATIC void SkRlmtCheckSwitch(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 NetIdx);
-RLMT_STATIC void SkRlmtCheckSeg(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_U32 NetIdx);
-RLMT_STATIC void SkRlmtEvtSetNets(
- SK_AC *pAC,
- SK_IOC IoC,
- SK_EVPARA Para);
-
-/******************************************************************************
- *
- * SkRlmtInit - initialize data, set state to init
- *
- * Description:
- *
- * SK_INIT_DATA
- * ============
- *
- * This routine initializes all RLMT-related variables to a known state.
- * The initial state is SK_RLMT_RS_INIT.
- * All ports are initialized to SK_RLMT_PS_INIT.
- *
- *
- * SK_INIT_IO
- * ==========
- *
- * Nothing.
- *
- *
- * SK_INIT_RUN
- * ===========
- *
- * Determine the adapter's random value.
- * Set the hw registers, the "logical MAC address", the
- * RLMT multicast address, and eventually the BPDU multicast address.
- *
- * Context:
- * init, pageable
- *
- * Returns:
- * Nothing.
- */
-void SkRlmtInit(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Level) /* Initialization Level */
-{
- SK_U32 i, j;
- SK_U64 Random;
- SK_EVPARA Para;
- SK_MAC_ADDR VirtualMacAddress;
- SK_MAC_ADDR PhysicalAMacAddress;
- SK_BOOL VirtualMacAddressSet;
- SK_BOOL PhysicalAMacAddressSet;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_INIT,
- ("RLMT Init level %d.\n", Level))
-
- switch (Level) {
- case SK_INIT_DATA: /* Initialize data structures. */
- SK_MEMSET((char *)&pAC->Rlmt, 0, sizeof(SK_RLMT));
-
- for (i = 0; i < SK_MAX_MACS; i++) {
- pAC->Rlmt.Port[i].PortState = SK_RLMT_PS_INIT;
- pAC->Rlmt.Port[i].LinkDown = SK_TRUE;
- pAC->Rlmt.Port[i].PortDown = SK_TRUE;
- pAC->Rlmt.Port[i].PortStarted = SK_FALSE;
- pAC->Rlmt.Port[i].PortNoRx = SK_FALSE;
- pAC->Rlmt.Port[i].RootIdSet = SK_FALSE;
- pAC->Rlmt.Port[i].PortNumber = i;
- pAC->Rlmt.Port[i].Net = &pAC->Rlmt.Net[0];
- pAC->Rlmt.Port[i].AddrPort = &pAC->Addr.Port[i];
- }
-
- pAC->Rlmt.NumNets = 1;
- for (i = 0; i < SK_MAX_NETS; i++) {
- pAC->Rlmt.Net[i].RlmtState = SK_RLMT_RS_INIT;
- pAC->Rlmt.Net[i].RootIdSet = SK_FALSE;
- pAC->Rlmt.Net[i].PrefPort = SK_RLMT_DEF_PREF_PORT;
- pAC->Rlmt.Net[i].Preference = 0xFFFFFFFF; /* Automatic. */
- /* Just assuming. */
- pAC->Rlmt.Net[i].ActivePort = pAC->Rlmt.Net[i].PrefPort;
- pAC->Rlmt.Net[i].RlmtMode = SK_RLMT_DEF_MODE;
- pAC->Rlmt.Net[i].TimeoutValue = SK_RLMT_DEF_TO_VAL;
- pAC->Rlmt.Net[i].NetNumber = i;
- }
-
- pAC->Rlmt.Net[0].Port[0] = &pAC->Rlmt.Port[0];
- pAC->Rlmt.Net[0].Port[1] = &pAC->Rlmt.Port[1];
-#if SK_MAX_NETS > 1
- pAC->Rlmt.Net[1].Port[0] = &pAC->Rlmt.Port[1];
-#endif /* SK_MAX_NETS > 1 */
- break;
-
- case SK_INIT_IO: /* GIMacsFound first available here. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_INIT,
- ("RLMT: %d MACs were detected.\n", pAC->GIni.GIMacsFound))
-
- pAC->Rlmt.Net[0].NumPorts = pAC->GIni.GIMacsFound;
-
- /* Initialize HW registers? */
- if (pAC->GIni.GIMacsFound == 1) {
- Para.Para32[0] = SK_RLMT_MODE_CLS;
- Para.Para32[1] = 0;
- (void)SkRlmtEvent(pAC, IoC, SK_RLMT_MODE_CHANGE, Para);
- }
- break;
-
- case SK_INIT_RUN:
- /* Ensure RLMT is set to one net. */
- if (pAC->Rlmt.NumNets > 1) {
- Para.Para32[0] = 1;
- Para.Para32[1] = -1;
- SkRlmtEvtSetNets(pAC, IoC, Para);
- }
-
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- Random = SkOsGetTime(pAC);
- *(SK_U32*)&pAC->Rlmt.Port[i].Random = *(SK_U32*)&Random;
-
- for (j = 0; j < 4; j++) {
- pAC->Rlmt.Port[i].Random[j] ^= pAC->Rlmt.Port[i].AddrPort->
- CurrentMacAddress.a[SK_MAC_ADDR_LEN - 1 - j];
- }
-
- (void)SkAddrMcClear(pAC, IoC, i, SK_ADDR_PERMANENT | SK_MC_SW_ONLY);
-
- /* Add RLMT MC address. */
- (void)SkAddrMcAdd(pAC, IoC, i, &SkRlmtMcAddr, SK_ADDR_PERMANENT);
-
- if (pAC->Rlmt.Net[0].RlmtMode & SK_RLMT_CHECK_SEG) {
- /* Add BPDU MC address. */
- (void)SkAddrMcAdd(pAC, IoC, i, &BridgeMcAddr, SK_ADDR_PERMANENT);
- }
-
- (void)SkAddrMcUpdate(pAC, IoC, i);
- }
-
- VirtualMacAddressSet = SK_FALSE;
- /* Read virtual MAC address from Control Register File. */
- for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
-
- SK_IN8(IoC, B2_MAC_1 + j, &VirtualMacAddress.a[j]);
- VirtualMacAddressSet |= VirtualMacAddress.a[j];
- }
-
- PhysicalAMacAddressSet = SK_FALSE;
- /* Read physical MAC address for MAC A from Control Register File. */
- for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
-
- SK_IN8(IoC, B2_MAC_2 + j, &PhysicalAMacAddress.a[j]);
- PhysicalAMacAddressSet |= PhysicalAMacAddress.a[j];
- }
-
- /* check if the two mac addresses contain reasonable values */
- if (!VirtualMacAddressSet || !PhysicalAMacAddressSet) {
-
- pAC->Rlmt.RlmtOff = SK_TRUE;
- }
-
- /* if the two mac addresses are equal switch off the RLMT_PRE_LOOKAHEAD
- and the RLMT_LOOKAHEAD macros */
- else if (SK_ADDR_EQUAL(PhysicalAMacAddress.a, VirtualMacAddress.a)) {
-
- pAC->Rlmt.RlmtOff = SK_TRUE;
- }
- else {
- pAC->Rlmt.RlmtOff = SK_FALSE;
- }
- break;
-
- default: /* error */
- break;
- }
- return;
-} /* SkRlmtInit */
-
-
-/******************************************************************************
- *
- * SkRlmtBuildCheckChain - build the check chain
- *
- * Description:
- * This routine builds the local check chain:
- * - Each port that is up checks the next port.
- * - The last port that is up checks the first port that is up.
- *
- * Notes:
- * - Currently only local ports are considered when building the chain.
- * - Currently the SuspectState is just reset;
- * it would be better to save it ...
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtBuildCheckChain(
-SK_AC *pAC, /* Adapter Context */
-SK_U32 NetIdx) /* Net Number */
-{
- SK_U32 i;
- SK_U32 NumMacsUp;
- SK_RLMT_PORT * FirstMacUp;
- SK_RLMT_PORT * PrevMacUp;
-
- FirstMacUp = NULL;
- PrevMacUp = NULL;
-
- if (!(pAC->Rlmt.Net[NetIdx].RlmtMode & SK_RLMT_CHECK_LOC_LINK)) {
- for (i = 0; i < pAC->Rlmt.Net[i].NumPorts; i++) {
- pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked = 0;
- }
- return; /* Done. */
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SkRlmtBuildCheckChain.\n"))
-
- NumMacsUp = 0;
-
- for (i = 0; i < pAC->Rlmt.Net[NetIdx].NumPorts; i++) {
- pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked = 0;
- pAC->Rlmt.Net[NetIdx].Port[i]->PortsSuspect = 0;
- pAC->Rlmt.Net[NetIdx].Port[i]->CheckingState &=
- ~(SK_RLMT_PCS_RX | SK_RLMT_PCS_TX);
-
- /*
- * If more than two links are detected we should consider
- * checking at least two other ports:
- * 1. the next port that is not LinkDown and
- * 2. the next port that is not PortDown.
- */
- if (!pAC->Rlmt.Net[NetIdx].Port[i]->LinkDown) {
- if (NumMacsUp == 0) {
- FirstMacUp = pAC->Rlmt.Net[NetIdx].Port[i];
- }
- else {
- PrevMacUp->PortCheck[
- pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked].CheckAddr =
- pAC->Rlmt.Net[NetIdx].Port[i]->AddrPort->CurrentMacAddress;
- PrevMacUp->PortCheck[
- PrevMacUp->PortsChecked].SuspectTx = SK_FALSE;
- PrevMacUp->PortsChecked++;
- }
- PrevMacUp = pAC->Rlmt.Net[NetIdx].Port[i];
- NumMacsUp++;
- }
- }
-
- if (NumMacsUp > 1) {
- PrevMacUp->PortCheck[PrevMacUp->PortsChecked].CheckAddr =
- FirstMacUp->AddrPort->CurrentMacAddress;
- PrevMacUp->PortCheck[PrevMacUp->PortsChecked].SuspectTx =
- SK_FALSE;
- PrevMacUp->PortsChecked++;
- }
-
-#ifdef DEBUG
- for (i = 0; i < pAC->Rlmt.Net[NetIdx].NumPorts; i++) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Port %d checks %d other ports: %2X.\n", i,
- pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked,
- pAC->Rlmt.Net[NetIdx].Port[i]->PortCheck[0].CheckAddr.a[5]))
- }
-#endif /* DEBUG */
-
- return;
-} /* SkRlmtBuildCheckChain */
-
-
-/******************************************************************************
- *
- * SkRlmtBuildPacket - build an RLMT packet
- *
- * Description:
- * This routine sets up an RLMT packet.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * NULL or pointer to RLMT mbuf
- */
-RLMT_STATIC SK_MBUF *SkRlmtBuildPacket(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 PortNumber, /* Sending port */
-SK_U16 PacketType, /* RLMT packet type */
-SK_MAC_ADDR *SrcAddr, /* Source address */
-SK_MAC_ADDR *DestAddr) /* Destination address */
-{
- int i;
- SK_U16 Length;
- SK_MBUF *pMb;
- SK_RLMT_PACKET *pPacket;
-
-#ifdef DEBUG
- SK_U8 CheckSrc = 0;
- SK_U8 CheckDest = 0;
-
- for (i = 0; i < SK_MAC_ADDR_LEN; ++i) {
- CheckSrc |= SrcAddr->a[i];
- CheckDest |= DestAddr->a[i];
- }
-
- if ((CheckSrc == 0) || (CheckDest == 0)) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_ERR,
- ("SkRlmtBuildPacket: Invalid %s%saddr.\n",
- (CheckSrc == 0 ? "Src" : ""), (CheckDest == 0 ? "Dest" : "")))
- }
-#endif
-
- if ((pMb = SkDrvAllocRlmtMbuf(pAC, IoC, SK_RLMT_MAX_PACKET_SIZE)) != NULL) {
- pPacket = (SK_RLMT_PACKET*)pMb->pData;
- for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
- pPacket->DstAddr[i] = DestAddr->a[i];
- pPacket->SrcAddr[i] = SrcAddr->a[i];
- }
- pPacket->DSap = SK_RLMT_DSAP;
- pPacket->SSap = SK_RLMT_SSAP;
- pPacket->Ctrl = SK_RLMT_CTRL;
- pPacket->Indicator[0] = SK_RLMT_INDICATOR0;
- pPacket->Indicator[1] = SK_RLMT_INDICATOR1;
- pPacket->Indicator[2] = SK_RLMT_INDICATOR2;
- pPacket->Indicator[3] = SK_RLMT_INDICATOR3;
- pPacket->Indicator[4] = SK_RLMT_INDICATOR4;
- pPacket->Indicator[5] = SK_RLMT_INDICATOR5;
- pPacket->Indicator[6] = SK_RLMT_INDICATOR6;
-
- SK_U16_TO_NETWORK_ORDER(PacketType, &pPacket->RlmtPacketType[0]);
-
- for (i = 0; i < 4; i++) {
- pPacket->Random[i] = pAC->Rlmt.Port[PortNumber].Random[i];
- }
-
- SK_U16_TO_NETWORK_ORDER(
- SK_RLMT_PACKET_VERSION, &pPacket->RlmtPacketVersion[0]);
-
- for (i = 0; i < SK_PACKET_DATA_LEN; i++) {
- pPacket->Data[i] = 0x00;
- }
-
- Length = SK_RLMT_MAX_PACKET_SIZE; /* Or smaller. */
- pMb->Length = Length;
- pMb->PortIdx = PortNumber;
- Length -= 14;
- SK_U16_TO_NETWORK_ORDER(Length, &pPacket->TypeLen[0]);
-
- if (PacketType == SK_PACKET_ALIVE) {
- pAC->Rlmt.Port[PortNumber].TxHelloCts++;
- }
- }
-
- return (pMb);
-} /* SkRlmtBuildPacket */
-
-
-/******************************************************************************
- *
- * SkRlmtBuildSpanningTreePacket - build spanning tree check packet
- *
- * Description:
- * This routine sets up a BPDU packet for spanning tree check.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * NULL or pointer to RLMT mbuf
- */
-RLMT_STATIC SK_MBUF *SkRlmtBuildSpanningTreePacket(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 PortNumber) /* Sending port */
-{
- unsigned i;
- SK_U16 Length;
- SK_MBUF *pMb;
- SK_SPTREE_PACKET *pSPacket;
-
- if ((pMb = SkDrvAllocRlmtMbuf(pAC, IoC, SK_RLMT_MAX_PACKET_SIZE)) !=
- NULL) {
- pSPacket = (SK_SPTREE_PACKET*)pMb->pData;
- for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
- pSPacket->DstAddr[i] = BridgeMcAddr.a[i];
- pSPacket->SrcAddr[i] =
- pAC->Addr.Port[PortNumber].CurrentMacAddress.a[i];
- }
- pSPacket->DSap = SK_RLMT_SPT_DSAP;
- pSPacket->SSap = SK_RLMT_SPT_SSAP;
- pSPacket->Ctrl = SK_RLMT_SPT_CTRL;
-
- pSPacket->ProtocolId[0] = SK_RLMT_SPT_PROTOCOL_ID0;
- pSPacket->ProtocolId[1] = SK_RLMT_SPT_PROTOCOL_ID1;
- pSPacket->ProtocolVersionId = SK_RLMT_SPT_PROTOCOL_VERSION_ID;
- pSPacket->BpduType = SK_RLMT_SPT_BPDU_TYPE;
- pSPacket->Flags = SK_RLMT_SPT_FLAGS;
- pSPacket->RootId[0] = SK_RLMT_SPT_ROOT_ID0;
- pSPacket->RootId[1] = SK_RLMT_SPT_ROOT_ID1;
- pSPacket->RootPathCost[0] = SK_RLMT_SPT_ROOT_PATH_COST0;
- pSPacket->RootPathCost[1] = SK_RLMT_SPT_ROOT_PATH_COST1;
- pSPacket->RootPathCost[2] = SK_RLMT_SPT_ROOT_PATH_COST2;
- pSPacket->RootPathCost[3] = SK_RLMT_SPT_ROOT_PATH_COST3;
- pSPacket->BridgeId[0] = SK_RLMT_SPT_BRIDGE_ID0;
- pSPacket->BridgeId[1] = SK_RLMT_SPT_BRIDGE_ID1;
-
- /*
- * Use logical MAC address as bridge ID and filter these packets
- * on receive.
- */
- for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
- pSPacket->BridgeId[i + 2] = pSPacket->RootId[i + 2] =
- pAC->Addr.Net[pAC->Rlmt.Port[PortNumber].Net->NetNumber].
- CurrentMacAddress.a[i];
- }
- pSPacket->PortId[0] = SK_RLMT_SPT_PORT_ID0;
- pSPacket->PortId[1] = SK_RLMT_SPT_PORT_ID1;
- pSPacket->MessageAge[0] = SK_RLMT_SPT_MSG_AGE0;
- pSPacket->MessageAge[1] = SK_RLMT_SPT_MSG_AGE1;
- pSPacket->MaxAge[0] = SK_RLMT_SPT_MAX_AGE0;
- pSPacket->MaxAge[1] = SK_RLMT_SPT_MAX_AGE1;
- pSPacket->HelloTime[0] = SK_RLMT_SPT_HELLO_TIME0;
- pSPacket->HelloTime[1] = SK_RLMT_SPT_HELLO_TIME1;
- pSPacket->ForwardDelay[0] = SK_RLMT_SPT_FWD_DELAY0;
- pSPacket->ForwardDelay[1] = SK_RLMT_SPT_FWD_DELAY1;
-
- Length = SK_RLMT_MAX_PACKET_SIZE; /* Or smaller. */
- pMb->Length = Length;
- pMb->PortIdx = PortNumber;
- Length -= 14;
- SK_U16_TO_NETWORK_ORDER(Length, &pSPacket->TypeLen[0]);
-
- pAC->Rlmt.Port[PortNumber].TxSpHelloReqCts++;
- }
-
- return (pMb);
-} /* SkRlmtBuildSpanningTreePacket */
-
-
-/******************************************************************************
- *
- * SkRlmtSend - build and send check packets
- *
- * Description:
- * Depending on the RLMT state and the checking state, several packets
- * are sent through the indicated port.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * Nothing.
- */
-RLMT_STATIC void SkRlmtSend(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 PortNumber) /* Sending port */
-{
- unsigned j;
- SK_EVPARA Para;
- SK_RLMT_PORT *pRPort;
-
- pRPort = &pAC->Rlmt.Port[PortNumber];
- if (pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_LOC_LINK) {
- if (pRPort->CheckingState & (SK_RLMT_PCS_TX | SK_RLMT_PCS_RX)) {
- /* Port is suspicious. Send the RLMT packet to the RLMT mc addr. */
- if ((Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, PortNumber,
- SK_PACKET_ALIVE, &pAC->Addr.Port[PortNumber].CurrentMacAddress,
- &SkRlmtMcAddr)) != NULL) {
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- }
- }
- else {
- /*
- * Send a directed RLMT packet to all ports that are
- * checked by the indicated port.
- */
- for (j = 0; j < pRPort->PortsChecked; j++) {
- if ((Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, PortNumber,
- SK_PACKET_ALIVE, &pAC->Addr.Port[PortNumber].CurrentMacAddress,
- &pRPort->PortCheck[j].CheckAddr)) != NULL) {
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- }
- }
- }
- }
-
- if ((pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_SEG) &&
- (pAC->Rlmt.Port[PortNumber].Net->CheckingState & SK_RLMT_RCS_SEND_SEG)) {
- /*
- * Send a BPDU packet to make a connected switch tell us
- * the correct root bridge.
- */
- if ((Para.pParaPtr =
- SkRlmtBuildSpanningTreePacket(pAC, IoC, PortNumber)) != NULL) {
- pAC->Rlmt.Port[PortNumber].Net->CheckingState &= ~SK_RLMT_RCS_SEND_SEG;
- pRPort->RootIdSet = SK_FALSE;
-
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_TX,
- ("SkRlmtSend: BPDU Packet on Port %u.\n", PortNumber))
- }
- }
- return;
-} /* SkRlmtSend */
-
-
-/******************************************************************************
- *
- * SkRlmtPortReceives - check if port is (going) down and bring it up
- *
- * Description:
- * This routine checks if a port who received a non-BPDU packet
- * needs to go up or needs to be stopped going down.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * Nothing.
- */
-RLMT_STATIC void SkRlmtPortReceives(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 PortNumber) /* Port to check */
-{
- SK_RLMT_PORT *pRPort;
- SK_EVPARA Para;
-
- pRPort = &pAC->Rlmt.Port[PortNumber];
- pRPort->PortNoRx = SK_FALSE;
-
- if ((pRPort->PortState == SK_RLMT_PS_DOWN) &&
- !(pRPort->CheckingState & SK_RLMT_PCS_TX)) {
- /*
- * Port is marked down (rx), but received a non-BPDU packet.
- * Bring it up.
- */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Received on PortDown.\n"))
-
- pRPort->PortState = SK_RLMT_PS_GOING_UP;
- pRPort->GuTimeStamp = SkOsGetTime(pAC);
- Para.Para32[0] = PortNumber;
- Para.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pRPort->UpTimer, SK_RLMT_PORTUP_TIM_VAL,
- SKGE_RLMT, SK_RLMT_PORTUP_TIM, Para);
- pRPort->CheckingState &= ~SK_RLMT_PCS_RX;
- /* pAC->Rlmt.CheckSwitch = SK_TRUE; */
- SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
- } /* PortDown && !SuspectTx */
- else if (pRPort->CheckingState & SK_RLMT_PCS_RX) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Stop bringing port down.\n"))
- SkTimerStop(pAC, IoC, &pRPort->DownRxTimer);
- pRPort->CheckingState &= ~SK_RLMT_PCS_RX;
- /* pAC->Rlmt.CheckSwitch = SK_TRUE; */
- SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
- } /* PortGoingDown */
-
- return;
-} /* SkRlmtPortReceives */
-
-
-/******************************************************************************
- *
- * SkRlmtPacketReceive - receive a packet for closer examination
- *
- * Description:
- * This routine examines a packet more closely than SK_RLMT_LOOKAHEAD.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * Nothing.
- */
-RLMT_STATIC void SkRlmtPacketReceive(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_MBUF *pMb) /* Received packet */
-{
-#ifdef xDEBUG
- extern void DumpData(char *p, int size);
-#endif /* DEBUG */
- int i;
- unsigned j;
- SK_U16 PacketType;
- SK_U32 PortNumber;
- SK_ADDR_PORT *pAPort;
- SK_RLMT_PORT *pRPort;
- SK_RLMT_PACKET *pRPacket;
- SK_SPTREE_PACKET *pSPacket;
- SK_EVPARA Para;
-
- PortNumber = pMb->PortIdx;
- pAPort = &pAC->Addr.Port[PortNumber];
- pRPort = &pAC->Rlmt.Port[PortNumber];
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: PortNumber == %d.\n", PortNumber))
-
- pRPacket = (SK_RLMT_PACKET*)pMb->pData;
- pSPacket = (SK_SPTREE_PACKET*)pRPacket;
-
-#ifdef xDEBUG
- DumpData((char *)pRPacket, 32);
-#endif /* DEBUG */
-
- if ((pRPort->PacketsPerTimeSlot - pRPort->BpduPacketsPerTimeSlot) != 0) {
- SkRlmtPortReceives(pAC, IoC, PortNumber);
- }
-
- /* Check destination address. */
-
- if (!SK_ADDR_EQUAL(pAPort->CurrentMacAddress.a, pRPacket->DstAddr) &&
- !SK_ADDR_EQUAL(SkRlmtMcAddr.a, pRPacket->DstAddr) &&
- !SK_ADDR_EQUAL(BridgeMcAddr.a, pRPacket->DstAddr)) {
-
- /* Not sent to current MAC or registered MC address => Trash it. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Not for me.\n"))
-
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- return;
- }
- else if (SK_ADDR_EQUAL(pAPort->CurrentMacAddress.a, pRPacket->SrcAddr)) {
-
- /*
- * Was sent by same port (may happen during port switching
- * or in case of duplicate MAC addresses).
- */
-
- /*
- * Check for duplicate address here:
- * If Packet.Random != My.Random => DupAddr.
- */
- for (i = 3; i >= 0; i--) {
- if (pRPort->Random[i] != pRPacket->Random[i]) {
- break;
- }
- }
-
- /*
- * CAUTION: Do not check for duplicate MAC address in RLMT Alive Reply
- * packets (they have the LLC_COMMAND_RESPONSE_BIT set in
- * pRPacket->SSap).
- */
- if (i >= 0 && pRPacket->DSap == SK_RLMT_DSAP &&
- pRPacket->Ctrl == SK_RLMT_CTRL &&
- pRPacket->SSap == SK_RLMT_SSAP &&
- pRPacket->Indicator[0] == SK_RLMT_INDICATOR0 &&
- pRPacket->Indicator[1] == SK_RLMT_INDICATOR1 &&
- pRPacket->Indicator[2] == SK_RLMT_INDICATOR2 &&
- pRPacket->Indicator[3] == SK_RLMT_INDICATOR3 &&
- pRPacket->Indicator[4] == SK_RLMT_INDICATOR4 &&
- pRPacket->Indicator[5] == SK_RLMT_INDICATOR5 &&
- pRPacket->Indicator[6] == SK_RLMT_INDICATOR6) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Duplicate MAC Address.\n"))
-
- /* Error Log entry. */
- SK_ERR_LOG(pAC, SK_ERRCL_COMM, SKERR_RLMT_E006, SKERR_RLMT_E006_MSG);
- }
- else {
- /* Simply trash it. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Sent by me.\n"))
- }
-
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- return;
- }
-
- /* Check SuspectTx entries. */
- if (pRPort->PortsSuspect > 0) {
- for (j = 0; j < pRPort->PortsChecked; j++) {
- if (pRPort->PortCheck[j].SuspectTx &&
- SK_ADDR_EQUAL(
- pRPacket->SrcAddr, pRPort->PortCheck[j].CheckAddr.a)) {
- pRPort->PortCheck[j].SuspectTx = SK_FALSE;
- pRPort->PortsSuspect--;
- break;
- }
- }
- }
-
- /* Determine type of packet. */
- if (pRPacket->DSap == SK_RLMT_DSAP &&
- pRPacket->Ctrl == SK_RLMT_CTRL &&
- (pRPacket->SSap & ~LLC_COMMAND_RESPONSE_BIT) == SK_RLMT_SSAP &&
- pRPacket->Indicator[0] == SK_RLMT_INDICATOR0 &&
- pRPacket->Indicator[1] == SK_RLMT_INDICATOR1 &&
- pRPacket->Indicator[2] == SK_RLMT_INDICATOR2 &&
- pRPacket->Indicator[3] == SK_RLMT_INDICATOR3 &&
- pRPacket->Indicator[4] == SK_RLMT_INDICATOR4 &&
- pRPacket->Indicator[5] == SK_RLMT_INDICATOR5 &&
- pRPacket->Indicator[6] == SK_RLMT_INDICATOR6) {
-
- /* It's an RLMT packet. */
- PacketType = (SK_U16)((pRPacket->RlmtPacketType[0] << 8) |
- pRPacket->RlmtPacketType[1]);
-
- switch (PacketType) {
- case SK_PACKET_ANNOUNCE: /* Not yet used. */
-#if 0
- /* Build the check chain. */
- SkRlmtBuildCheckChain(pAC);
-#endif /* 0 */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Announce.\n"))
-
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- break;
-
- case SK_PACKET_ALIVE:
- if (pRPacket->SSap & LLC_COMMAND_RESPONSE_BIT) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Alive Reply.\n"))
-
- if (!(pAC->Addr.Port[PortNumber].PromMode & SK_PROM_MODE_LLC) ||
- SK_ADDR_EQUAL(
- pRPacket->DstAddr, pAPort->CurrentMacAddress.a)) {
- /* Obviously we could send something. */
- if (pRPort->CheckingState & SK_RLMT_PCS_TX) {
- pRPort->CheckingState &= ~SK_RLMT_PCS_TX;
- SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
- }
-
- if ((pRPort->PortState == SK_RLMT_PS_DOWN) &&
- !(pRPort->CheckingState & SK_RLMT_PCS_RX)) {
- pRPort->PortState = SK_RLMT_PS_GOING_UP;
- pRPort->GuTimeStamp = SkOsGetTime(pAC);
-
- SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
-
- Para.Para32[0] = PortNumber;
- Para.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pRPort->UpTimer,
- SK_RLMT_PORTUP_TIM_VAL, SKGE_RLMT,
- SK_RLMT_PORTUP_TIM, Para);
- }
- }
-
- /* Mark sending port as alive? */
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- }
- else { /* Alive Request Packet. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Alive Request.\n"))
-
- pRPort->RxHelloCts++;
-
- /* Answer. */
- for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
- pRPacket->DstAddr[i] = pRPacket->SrcAddr[i];
- pRPacket->SrcAddr[i] =
- pAC->Addr.Port[PortNumber].CurrentMacAddress.a[i];
- }
- pRPacket->SSap |= LLC_COMMAND_RESPONSE_BIT;
-
- Para.pParaPtr = pMb;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- }
- break;
-
- case SK_PACKET_CHECK_TX:
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Check your tx line.\n"))
-
- /* A port checking us requests us to check our tx line. */
- pRPort->CheckingState |= SK_RLMT_PCS_TX;
-
- /* Start PortDownTx timer. */
- Para.Para32[0] = PortNumber;
- Para.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pRPort->DownTxTimer,
- SK_RLMT_PORTDOWN_TIM_VAL, SKGE_RLMT,
- SK_RLMT_PORTDOWN_TX_TIM, Para);
-
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
-
- if ((Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, PortNumber,
- SK_PACKET_ALIVE, &pAC->Addr.Port[PortNumber].CurrentMacAddress,
- &SkRlmtMcAddr)) != NULL) {
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- }
- break;
-
- case SK_PACKET_ADDR_CHANGED:
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Address Change.\n"))
-
- /* Build the check chain. */
- SkRlmtBuildCheckChain(pAC, pRPort->Net->NetNumber);
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- break;
-
- default:
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Unknown RLMT packet.\n"))
-
- /* RA;:;: ??? */
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- }
- }
- else if (pSPacket->DSap == SK_RLMT_SPT_DSAP &&
- pSPacket->Ctrl == SK_RLMT_SPT_CTRL &&
- (pSPacket->SSap & ~LLC_COMMAND_RESPONSE_BIT) == SK_RLMT_SPT_SSAP) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: BPDU Packet.\n"))
-
- /* Spanning Tree packet. */
- pRPort->RxSpHelloCts++;
-
- if (!SK_ADDR_EQUAL(&pSPacket->RootId[2], &pAC->Addr.Net[pAC->Rlmt.
- Port[PortNumber].Net->NetNumber].CurrentMacAddress.a[0])) {
- /*
- * Check segmentation if a new root bridge is set and
- * the segmentation check is not currently running.
- */
- if (!SK_ADDR_EQUAL(&pSPacket->RootId[2], &pRPort->Root.Id[2]) &&
- (pAC->Rlmt.Port[PortNumber].Net->LinksUp > 1) &&
- (pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_SEG)
- != 0 && (pAC->Rlmt.Port[PortNumber].Net->CheckingState &
- SK_RLMT_RCS_SEG) == 0) {
- pAC->Rlmt.Port[PortNumber].Net->CheckingState |=
- SK_RLMT_RCS_START_SEG | SK_RLMT_RCS_SEND_SEG;
- }
-
- /* Store tree view of this port. */
- for (i = 0; i < 8; i++) {
- pRPort->Root.Id[i] = pSPacket->RootId[i];
- }
- pRPort->RootIdSet = SK_TRUE;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_DUMP,
- ("Root ID %d: %02x %02x %02x %02x %02x %02x %02x %02x.\n",
- PortNumber,
- pRPort->Root.Id[0], pRPort->Root.Id[1],
- pRPort->Root.Id[2], pRPort->Root.Id[3],
- pRPort->Root.Id[4], pRPort->Root.Id[5],
- pRPort->Root.Id[6], pRPort->Root.Id[7]))
- }
-
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- if ((pAC->Rlmt.Port[PortNumber].Net->CheckingState &
- SK_RLMT_RCS_REPORT_SEG) != 0) {
- SkRlmtCheckSeg(pAC, IoC, pAC->Rlmt.Port[PortNumber].Net->NetNumber);
- }
- }
- else {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
- ("SkRlmtPacketReceive: Unknown Packet Type.\n"))
-
- /* Unknown packet. */
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- }
- return;
-} /* SkRlmtPacketReceive */
-
-
-/******************************************************************************
- *
- * SkRlmtCheckPort - check if a port works
- *
- * Description:
- * This routine checks if a port whose link is up received something
- * and if it seems to transmit successfully.
- *
- * # PortState: PsInit, PsLinkDown, PsDown, PsGoingUp, PsUp
- * # PortCheckingState (Bitfield): ChkTx, ChkRx, ChkSeg
- * # RlmtCheckingState (Bitfield): ChkSeg, StartChkSeg, ReportSeg
- *
- * if (Rx - RxBpdu == 0) { # No rx.
- * if (state == PsUp) {
- * PortCheckingState |= ChkRx
- * }
- * if (ModeCheckSeg && (Timeout ==
- * TO_SHORTEN(RLMT_DEFAULT_TIMEOUT))) {
- * RlmtCheckingState |= ChkSeg)
- * PortCheckingState |= ChkSeg
- * }
- * NewTimeout = TO_SHORTEN(Timeout)
- * if (NewTimeout < RLMT_MIN_TIMEOUT) {
- * NewTimeout = RLMT_MIN_TIMEOUT
- * PortState = PsDown
- * ...
- * }
- * }
- * else { # something was received
- * # Set counter to 0 at LinkDown?
- * # No - rx may be reported after LinkDown ???
- * PortCheckingState &= ~ChkRx
- * NewTimeout = RLMT_DEFAULT_TIMEOUT
- * if (RxAck == 0) {
- * possible reasons:
- * is my tx line bad? --
- * send RLMT multicast and report
- * back internally? (only possible
- * between ports on same adapter)
- * }
- * if (RxChk == 0) {
- * possible reasons:
- * - tx line of port set to check me
- * maybe bad
- * - no other port/adapter available or set
- * to check me
- * - adapter checking me has a longer
- * timeout
- * ??? anything that can be done here?
- * }
- * }
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * New timeout value.
- */
-RLMT_STATIC SK_U32 SkRlmtCheckPort(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 PortNumber) /* Port to check */
-{
- unsigned i;
- SK_U32 NewTimeout;
- SK_RLMT_PORT *pRPort;
- SK_EVPARA Para;
-
- pRPort = &pAC->Rlmt.Port[PortNumber];
-
- if ((pRPort->PacketsPerTimeSlot - pRPort->BpduPacketsPerTimeSlot) == 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SkRlmtCheckPort %d: No (%d) receives in last time slot.\n",
- PortNumber, pRPort->PacketsPerTimeSlot))
-
- /*
- * Check segmentation if there was no receive at least twice
- * in a row (PortNoRx is already set) and the segmentation
- * check is not currently running.
- */
-
- if (pRPort->PortNoRx && (pAC->Rlmt.Port[PortNumber].Net->LinksUp > 1) &&
- (pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_SEG) &&
- !(pAC->Rlmt.Port[PortNumber].Net->CheckingState & SK_RLMT_RCS_SEG)) {
- pAC->Rlmt.Port[PortNumber].Net->CheckingState |=
- SK_RLMT_RCS_START_SEG | SK_RLMT_RCS_SEND_SEG;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SkRlmtCheckPort: PortsSuspect %d, PcsRx %d.\n",
- pRPort->PortsSuspect, pRPort->CheckingState & SK_RLMT_PCS_RX))
-
- if (pRPort->PortState != SK_RLMT_PS_DOWN) {
- NewTimeout = TO_SHORTEN(pAC->Rlmt.Port[PortNumber].Net->TimeoutValue);
- if (NewTimeout < SK_RLMT_MIN_TO_VAL) {
- NewTimeout = SK_RLMT_MIN_TO_VAL;
- }
-
- if (!(pRPort->CheckingState & SK_RLMT_PCS_RX)) {
- Para.Para32[0] = PortNumber;
- pRPort->CheckingState |= SK_RLMT_PCS_RX;
-
- /*
- * What shall we do if the port checked by this one receives
- * our request frames? What's bad - our rx line or his tx line?
- */
- Para.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pRPort->DownRxTimer,
- SK_RLMT_PORTDOWN_TIM_VAL, SKGE_RLMT,
- SK_RLMT_PORTDOWN_RX_TIM, Para);
-
- for (i = 0; i < pRPort->PortsChecked; i++) {
- if (pRPort->PortCheck[i].SuspectTx) {
- continue;
- }
- pRPort->PortCheck[i].SuspectTx = SK_TRUE;
- pRPort->PortsSuspect++;
- if ((Para.pParaPtr =
- SkRlmtBuildPacket(pAC, IoC, PortNumber, SK_PACKET_CHECK_TX,
- &pAC->Addr.Port[PortNumber].CurrentMacAddress,
- &pRPort->PortCheck[i].CheckAddr)) != NULL) {
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- }
- }
- }
- }
- else { /* PortDown -- or all partners suspect. */
- NewTimeout = SK_RLMT_DEF_TO_VAL;
- }
- pRPort->PortNoRx = SK_TRUE;
- }
- else { /* A non-BPDU packet was received. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SkRlmtCheckPort %d: %d (%d) receives in last time slot.\n",
- PortNumber,
- pRPort->PacketsPerTimeSlot - pRPort->BpduPacketsPerTimeSlot,
- pRPort->PacketsPerTimeSlot))
-
- SkRlmtPortReceives(pAC, IoC, PortNumber);
- if (pAC->Rlmt.CheckSwitch) {
- SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
- }
-
- NewTimeout = SK_RLMT_DEF_TO_VAL;
- }
-
- return (NewTimeout);
-} /* SkRlmtCheckPort */
-
-
-/******************************************************************************
- *
- * SkRlmtSelectBcRx - select new active port, criteria 1 (CLP)
- *
- * Description:
- * This routine selects the port that received a broadcast frame
- * substantially later than all other ports.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * SK_BOOL
- */
-RLMT_STATIC SK_BOOL SkRlmtSelectBcRx(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Active, /* Active port */
-SK_U32 PrefPort, /* Preferred port */
-SK_U32 *pSelect) /* New active port */
-{
- SK_U64 BcTimeStamp;
- SK_U32 i;
- SK_BOOL PortFound;
-
- BcTimeStamp = 0; /* Not totally necessary, but feeling better. */
- PortFound = SK_FALSE;
-
- /* Select port with the latest TimeStamp. */
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("TimeStamp Port %d (Down: %d, NoRx: %d): %08x %08x.\n",
- i,
- pAC->Rlmt.Port[i].PortDown, pAC->Rlmt.Port[i].PortNoRx,
- *((SK_U32*)(&pAC->Rlmt.Port[i].BcTimeStamp) + OFFS_HI32),
- *((SK_U32*)(&pAC->Rlmt.Port[i].BcTimeStamp) + OFFS_LO32)))
-
- if (!pAC->Rlmt.Port[i].PortDown && !pAC->Rlmt.Port[i].PortNoRx) {
- if (!PortFound || pAC->Rlmt.Port[i].BcTimeStamp > BcTimeStamp) {
- BcTimeStamp = pAC->Rlmt.Port[i].BcTimeStamp;
- *pSelect = i;
- PortFound = SK_TRUE;
- }
- }
- }
-
- if (PortFound) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Port %d received the last broadcast.\n", *pSelect))
-
- /* Look if another port's time stamp is similar. */
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- if (i == *pSelect) {
- continue;
- }
- if (!pAC->Rlmt.Port[i].PortDown && !pAC->Rlmt.Port[i].PortNoRx &&
- (pAC->Rlmt.Port[i].BcTimeStamp >
- BcTimeStamp - SK_RLMT_BC_DELTA ||
- pAC->Rlmt.Port[i].BcTimeStamp +
- SK_RLMT_BC_DELTA > BcTimeStamp)) {
- PortFound = SK_FALSE;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Port %d received a broadcast at a similar time.\n", i))
- break;
- }
- }
- }
-
-#ifdef DEBUG
- if (PortFound) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SELECT_BCRX found Port %d receiving the substantially "
- "latest broadcast (%u).\n",
- *pSelect,
- BcTimeStamp - pAC->Rlmt.Port[1 - *pSelect].BcTimeStamp))
- }
-#endif /* DEBUG */
-
- return (PortFound);
-} /* SkRlmtSelectBcRx */
-
-
-/******************************************************************************
- *
- * SkRlmtSelectNotSuspect - select new active port, criteria 2 (CLP)
- *
- * Description:
- * This routine selects a good port (it is PortUp && !SuspectRx).
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * SK_BOOL
- */
-RLMT_STATIC SK_BOOL SkRlmtSelectNotSuspect(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Active, /* Active port */
-SK_U32 PrefPort, /* Preferred port */
-SK_U32 *pSelect) /* New active port */
-{
- SK_U32 i;
- SK_BOOL PortFound;
-
- PortFound = SK_FALSE;
-
- /* Select first port that is PortUp && !SuspectRx. */
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- if (!pAC->Rlmt.Port[i].PortDown &&
- !(pAC->Rlmt.Port[i].CheckingState & SK_RLMT_PCS_RX)) {
- *pSelect = i;
- if (!pAC->Rlmt.Port[Active].PortDown &&
- !(pAC->Rlmt.Port[Active].CheckingState & SK_RLMT_PCS_RX)) {
- *pSelect = Active;
- }
- if (!pAC->Rlmt.Port[PrefPort].PortDown &&
- !(pAC->Rlmt.Port[PrefPort].CheckingState & SK_RLMT_PCS_RX)) {
- *pSelect = PrefPort;
- }
- PortFound = SK_TRUE;
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SELECT_NOTSUSPECT found Port %d up and not check RX.\n",
- *pSelect))
- break;
- }
- }
- return (PortFound);
-} /* SkRlmtSelectNotSuspect */
-
-
-/******************************************************************************
- *
- * SkRlmtSelectUp - select new active port, criteria 3, 4 (CLP)
- *
- * Description:
- * This routine selects a port that is up.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * SK_BOOL
- */
-RLMT_STATIC SK_BOOL SkRlmtSelectUp(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Active, /* Active port */
-SK_U32 PrefPort, /* Preferred port */
-SK_U32 *pSelect, /* New active port */
-SK_BOOL AutoNegDone) /* Successfully auto-negotiated? */
-{
- SK_U32 i;
- SK_BOOL PortFound;
-
- PortFound = SK_FALSE;
-
- /* Select first port that is PortUp. */
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_UP &&
- pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
- *pSelect = i;
- if (pAC->Rlmt.Port[Active].PortState == SK_RLMT_PS_UP &&
- pAC->GIni.GP[Active].PAutoNegFail != AutoNegDone) {
- *pSelect = Active;
- }
- if (pAC->Rlmt.Port[PrefPort].PortState == SK_RLMT_PS_UP &&
- pAC->GIni.GP[PrefPort].PAutoNegFail != AutoNegDone) {
- *pSelect = PrefPort;
- }
- PortFound = SK_TRUE;
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SELECT_UP found Port %d up.\n", *pSelect))
- break;
- }
- }
- return (PortFound);
-} /* SkRlmtSelectUp */
-
-
-/******************************************************************************
- *
- * SkRlmtSelectGoingUp - select new active port, criteria 5, 6 (CLP)
- *
- * Description:
- * This routine selects the port that is going up for the longest time.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * SK_BOOL
- */
-RLMT_STATIC SK_BOOL SkRlmtSelectGoingUp(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Active, /* Active port */
-SK_U32 PrefPort, /* Preferred port */
-SK_U32 *pSelect, /* New active port */
-SK_BOOL AutoNegDone) /* Successfully auto-negotiated? */
-{
- SK_U64 GuTimeStamp;
- SK_U32 i;
- SK_BOOL PortFound;
-
- GuTimeStamp = 0;
- PortFound = SK_FALSE;
-
- /* Select port that is PortGoingUp for the longest time. */
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_GOING_UP &&
- pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
- GuTimeStamp = pAC->Rlmt.Port[i].GuTimeStamp;
- *pSelect = i;
- PortFound = SK_TRUE;
- break;
- }
- }
-
- if (!PortFound) {
- return (SK_FALSE);
- }
-
- for (i = *pSelect + 1; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_GOING_UP &&
- pAC->Rlmt.Port[i].GuTimeStamp < GuTimeStamp &&
- pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
- GuTimeStamp = pAC->Rlmt.Port[i].GuTimeStamp;
- *pSelect = i;
- }
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SELECT_GOINGUP found Port %d going up.\n", *pSelect))
- return (SK_TRUE);
-} /* SkRlmtSelectGoingUp */
-
-
-/******************************************************************************
- *
- * SkRlmtSelectDown - select new active port, criteria 7, 8 (CLP)
- *
- * Description:
- * This routine selects a port that is down.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * SK_BOOL
- */
-RLMT_STATIC SK_BOOL SkRlmtSelectDown(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Active, /* Active port */
-SK_U32 PrefPort, /* Preferred port */
-SK_U32 *pSelect, /* New active port */
-SK_BOOL AutoNegDone) /* Successfully auto-negotiated? */
-{
- SK_U32 i;
- SK_BOOL PortFound;
-
- PortFound = SK_FALSE;
-
- /* Select first port that is PortDown. */
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_DOWN &&
- pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
- *pSelect = i;
- if (pAC->Rlmt.Port[Active].PortState == SK_RLMT_PS_DOWN &&
- pAC->GIni.GP[Active].PAutoNegFail != AutoNegDone) {
- *pSelect = Active;
- }
- if (pAC->Rlmt.Port[PrefPort].PortState == SK_RLMT_PS_DOWN &&
- pAC->GIni.GP[PrefPort].PAutoNegFail != AutoNegDone) {
- *pSelect = PrefPort;
- }
- PortFound = SK_TRUE;
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SELECT_DOWN found Port %d down.\n", *pSelect))
- break;
- }
- }
- return (PortFound);
-} /* SkRlmtSelectDown */
-
-
-/******************************************************************************
- *
- * SkRlmtCheckSwitch - select new active port and switch to it
- *
- * Description:
- * This routine decides which port should be the active one and queues
- * port switching if necessary.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * Nothing.
- */
-RLMT_STATIC void SkRlmtCheckSwitch(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 NetIdx) /* Net index */
-{
- SK_EVPARA Para;
- SK_U32 Active;
- SK_U32 PrefPort;
- SK_U32 i;
- SK_BOOL PortFound;
-
- Active = pAC->Rlmt.Net[NetIdx].ActivePort; /* Index of active port. */
- PrefPort = pAC->Rlmt.Net[NetIdx].PrefPort; /* Index of preferred port. */
- PortFound = SK_FALSE;
- pAC->Rlmt.CheckSwitch = SK_FALSE;
-
-#if 0 /* RW 2001/10/18 - active port becomes always prefered one */
- if (pAC->Rlmt.Net[NetIdx].Preference == 0xFFFFFFFF) { /* Automatic */
- /* disable auto-fail back */
- PrefPort = Active;
- }
-#endif
-
- if (pAC->Rlmt.Net[NetIdx].LinksUp == 0) {
- /* Last link went down - shut down the net. */
- pAC->Rlmt.Net[NetIdx].RlmtState = SK_RLMT_RS_NET_DOWN;
- Para.Para32[0] = SK_RLMT_NET_DOWN_TEMP;
- Para.Para32[1] = NetIdx;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_NET_DOWN, Para);
-
- Para.Para32[0] = pAC->Rlmt.Net[NetIdx].
- Port[pAC->Rlmt.Net[NetIdx].ActivePort]->PortNumber;
- Para.Para32[1] = NetIdx;
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_DOWN, Para);
- return;
- } /* pAC->Rlmt.LinksUp == 0 */
- else if (pAC->Rlmt.Net[NetIdx].LinksUp == 1 &&
- pAC->Rlmt.Net[NetIdx].RlmtState == SK_RLMT_RS_NET_DOWN) {
- /* First link came up - get the net up. */
- pAC->Rlmt.Net[NetIdx].RlmtState = SK_RLMT_RS_NET_UP;
-
- /*
- * If pAC->Rlmt.ActivePort != Para.Para32[0],
- * the DRV switches to the port that came up.
- */
- for (i = 0; i < pAC->Rlmt.Net[NetIdx].NumPorts; i++) {
- if (!pAC->Rlmt.Net[NetIdx].Port[i]->LinkDown) {
- if (!pAC->Rlmt.Net[NetIdx].Port[Active]->LinkDown) {
- i = Active;
- }
- if (!pAC->Rlmt.Net[NetIdx].Port[PrefPort]->LinkDown) {
- i = PrefPort;
- }
- PortFound = SK_TRUE;
- break;
- }
- }
-
- if (PortFound) {
- Para.Para32[0] = pAC->Rlmt.Net[NetIdx].Port[i]->PortNumber;
- Para.Para32[1] = NetIdx;
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_UP, Para);
-
- pAC->Rlmt.Net[NetIdx].ActivePort = i;
- Para.Para32[0] = pAC->Rlmt.Net[NetIdx].Port[i]->PortNumber;
- Para.Para32[1] = NetIdx;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_NET_UP, Para);
-
- if ((pAC->Rlmt.Net[NetIdx].RlmtMode & SK_RLMT_TRANSPARENT) == 0 &&
- (Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC,
- pAC->Rlmt.Net[NetIdx].Port[i]->PortNumber,
- SK_PACKET_ANNOUNCE, &pAC->Addr.Net[NetIdx].
- CurrentMacAddress, &SkRlmtMcAddr)) != NULL) {
- /*
- * Send announce packet to RLMT multicast address to force
- * switches to learn the new location of the logical MAC address.
- */
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- }
- }
- else {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E007, SKERR_RLMT_E007_MSG);
- }
-
- return;
- } /* LinksUp == 1 && RlmtState == SK_RLMT_RS_NET_DOWN */
- else { /* Cannot be reached in dual-net mode. */
- Para.Para32[0] = Active;
-
- /*
- * Preselection:
- * If RLMT Mode != CheckLinkState
- * select port that received a broadcast frame substantially later
- * than all other ports
- * else select first port that is not SuspectRx
- * else select first port that is PortUp
- * else select port that is PortGoingUp for the longest time
- * else select first port that is PortDown
- * else stop.
- *
- * For the preselected port:
- * If ActivePort is equal in quality, select ActivePort.
- *
- * If PrefPort is equal in quality, select PrefPort.
- *
- * If ActivePort != SelectedPort,
- * If old ActivePort is LinkDown,
- * SwitchHard
- * else
- * SwitchSoft
- */
- /* check of ChgBcPrio flag added */
- if ((pAC->Rlmt.Net[0].RlmtMode != SK_RLMT_MODE_CLS) &&
- (!pAC->Rlmt.Net[0].ChgBcPrio)) {
-
- if (!PortFound) {
- PortFound = SkRlmtSelectBcRx(
- pAC, IoC, Active, PrefPort, &Para.Para32[1]);
- }
-
- if (!PortFound) {
- PortFound = SkRlmtSelectNotSuspect(
- pAC, IoC, Active, PrefPort, &Para.Para32[1]);
- }
- } /* pAC->Rlmt.RlmtMode != SK_RLMT_MODE_CLS */
-
- /* with changed priority for last broadcast received */
- if ((pAC->Rlmt.Net[0].RlmtMode != SK_RLMT_MODE_CLS) &&
- (pAC->Rlmt.Net[0].ChgBcPrio)) {
- if (!PortFound) {
- PortFound = SkRlmtSelectNotSuspect(
- pAC, IoC, Active, PrefPort, &Para.Para32[1]);
- }
-
- if (!PortFound) {
- PortFound = SkRlmtSelectBcRx(
- pAC, IoC, Active, PrefPort, &Para.Para32[1]);
- }
- } /* pAC->Rlmt.RlmtMode != SK_RLMT_MODE_CLS */
-
- if (!PortFound) {
- PortFound = SkRlmtSelectUp(
- pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_SUCCESS);
- }
-
- if (!PortFound) {
- PortFound = SkRlmtSelectUp(
- pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_FAILED);
- }
-
- if (!PortFound) {
- PortFound = SkRlmtSelectGoingUp(
- pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_SUCCESS);
- }
-
- if (!PortFound) {
- PortFound = SkRlmtSelectGoingUp(
- pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_FAILED);
- }
-
- if (pAC->Rlmt.Net[0].RlmtMode != SK_RLMT_MODE_CLS) {
- if (!PortFound) {
- PortFound = SkRlmtSelectDown(pAC, IoC,
- Active, PrefPort, &Para.Para32[1], AUTONEG_SUCCESS);
- }
-
- if (!PortFound) {
- PortFound = SkRlmtSelectDown(pAC, IoC,
- Active, PrefPort, &Para.Para32[1], AUTONEG_FAILED);
- }
- } /* pAC->Rlmt.RlmtMode != SK_RLMT_MODE_CLS */
-
- if (PortFound) {
-
- if (Para.Para32[1] != Active) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Active: %d, Para1: %d.\n", Active, Para.Para32[1]))
- pAC->Rlmt.Net[NetIdx].ActivePort = Para.Para32[1];
- Para.Para32[0] = pAC->Rlmt.Net[NetIdx].
- Port[Para.Para32[0]]->PortNumber;
- Para.Para32[1] = pAC->Rlmt.Net[NetIdx].
- Port[Para.Para32[1]]->PortNumber;
- SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[1], SK_LED_ACTIVE);
- if (pAC->Rlmt.Port[Active].LinkDown) {
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_SWITCH_HARD, Para);
- }
- else {
- SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_STANDBY);
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_SWITCH_SOFT, Para);
- }
- Para.Para32[1] = NetIdx;
- Para.Para32[0] =
- pAC->Rlmt.Net[NetIdx].Port[Para.Para32[0]]->PortNumber;
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_DOWN, Para);
- Para.Para32[0] = pAC->Rlmt.Net[NetIdx].
- Port[pAC->Rlmt.Net[NetIdx].ActivePort]->PortNumber;
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_UP, Para);
- if ((pAC->Rlmt.Net[NetIdx].RlmtMode & SK_RLMT_TRANSPARENT) == 0 &&
- (Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, Para.Para32[0],
- SK_PACKET_ANNOUNCE, &pAC->Addr.Net[NetIdx].CurrentMacAddress,
- &SkRlmtMcAddr)) != NULL) {
- /*
- * Send announce packet to RLMT multicast address to force
- * switches to learn the new location of the logical
- * MAC address.
- */
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
- } /* (Para.pParaPtr = SkRlmtBuildPacket(...)) != NULL */
- } /* Para.Para32[1] != Active */
- } /* PortFound */
- else {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E004, SKERR_RLMT_E004_MSG);
- }
- } /* LinksUp > 1 || LinksUp == 1 && RlmtState != SK_RLMT_RS_NET_DOWN */
- return;
-} /* SkRlmtCheckSwitch */
-
-
-/******************************************************************************
- *
- * SkRlmtCheckSeg - Report if segmentation is detected
- *
- * Description:
- * This routine checks if the ports see different root bridges and reports
- * segmentation in such a case.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * Nothing.
- */
-RLMT_STATIC void SkRlmtCheckSeg(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 NetIdx) /* Net number */
-{
- SK_EVPARA Para;
- SK_RLMT_NET *pNet;
- SK_U32 i, j;
- SK_BOOL Equal;
-
- pNet = &pAC->Rlmt.Net[NetIdx];
- pNet->RootIdSet = SK_FALSE;
- Equal = SK_TRUE;
-
- for (i = 0; i < pNet->NumPorts; i++) {
- if (pNet->Port[i]->LinkDown || !pNet->Port[i]->RootIdSet) {
- continue;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_DUMP,
- ("Root ID %d: %02x %02x %02x %02x %02x %02x %02x %02x.\n", i,
- pNet->Port[i]->Root.Id[0], pNet->Port[i]->Root.Id[1],
- pNet->Port[i]->Root.Id[2], pNet->Port[i]->Root.Id[3],
- pNet->Port[i]->Root.Id[4], pNet->Port[i]->Root.Id[5],
- pNet->Port[i]->Root.Id[6], pNet->Port[i]->Root.Id[7]))
-
- if (!pNet->RootIdSet) {
- pNet->Root = pNet->Port[i]->Root;
- pNet->RootIdSet = SK_TRUE;
- continue;
- }
-
- for (j = 0; j < 8; j ++) {
- Equal &= pNet->Port[i]->Root.Id[j] == pNet->Root.Id[j];
- if (!Equal) {
- break;
- }
- }
-
- if (!Equal) {
- SK_ERR_LOG(pAC, SK_ERRCL_COMM, SKERR_RLMT_E005, SKERR_RLMT_E005_MSG);
- Para.Para32[0] = NetIdx;
- Para.Para32[1] = (SK_U32)-1;
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_SEGMENTATION, Para);
-
- pNet->CheckingState &= ~SK_RLMT_RCS_REPORT_SEG;
-
- /* 2000-03-06 RA: New. */
- Para.Para32[0] = NetIdx;
- Para.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pNet->SegTimer, SK_RLMT_SEG_TO_VAL,
- SKGE_RLMT, SK_RLMT_SEG_TIM, Para);
- break;
- }
- } /* for (i = 0; i < pNet->NumPorts; i++) */
-
- /* 2000-03-06 RA: Moved here. */
- /* Segmentation check not running anymore. */
- pNet->CheckingState &= ~SK_RLMT_RCS_SEG;
-
-} /* SkRlmtCheckSeg */
-
-
-/******************************************************************************
- *
- * SkRlmtPortStart - initialize port variables and start port
- *
- * Description:
- * This routine initializes a port's variables and issues a PORT_START
- * to the HWAC module. This handles retries if the start fails or the
- * link eventually goes down.
- *
- * Context:
- * runtime, pageable?
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtPortStart(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 PortNumber) /* Port number */
-{
- SK_EVPARA Para;
-
- pAC->Rlmt.Port[PortNumber].PortState = SK_RLMT_PS_LINK_DOWN;
- pAC->Rlmt.Port[PortNumber].PortStarted = SK_TRUE;
- pAC->Rlmt.Port[PortNumber].LinkDown = SK_TRUE;
- pAC->Rlmt.Port[PortNumber].PortDown = SK_TRUE;
- pAC->Rlmt.Port[PortNumber].CheckingState = 0;
- pAC->Rlmt.Port[PortNumber].RootIdSet = SK_FALSE;
- Para.Para32[0] = PortNumber;
- Para.Para32[1] = (SK_U32)-1;
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
-} /* SkRlmtPortStart */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtPortStartTim - PORT_START_TIM
- *
- * Description:
- * This routine handles PORT_START_TIM events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtPortStartTim(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
-{
- SK_U32 i;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTSTART_TIMEOUT Port %d Event BEGIN.\n", Para.Para32[0]))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTSTART_TIMEOUT Event EMPTY.\n"))
- return;
- }
-
- /*
- * Used to start non-preferred ports if the preferred one
- * does not come up.
- * This timeout needs only be set when starting the first
- * (preferred) port.
- */
- if (pAC->Rlmt.Port[Para.Para32[0]].LinkDown) {
- /* PORT_START failed. */
- for (i = 0; i < pAC->Rlmt.Port[Para.Para32[0]].Net->NumPorts; i++) {
- if (!pAC->Rlmt.Port[Para.Para32[0]].Net->Port[i]->PortStarted) {
- SkRlmtPortStart(pAC, IoC,
- pAC->Rlmt.Port[Para.Para32[0]].Net->Port[i]->PortNumber);
- }
- }
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTSTART_TIMEOUT Event END.\n"))
-} /* SkRlmtEvtPortStartTim */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtLinkUp - LINK_UP
- *
- * Description:
- * This routine handles LLINK_UP events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtLinkUp(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 Undefined */
-{
- SK_U32 i;
- SK_RLMT_PORT *pRPort;
- SK_EVPARA Para2;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_LINK_UP Port %d Event BEGIN.\n", Para.Para32[0]))
-
- pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
- if (!pRPort->PortStarted) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E008, SKERR_RLMT_E008_MSG);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_LINK_UP Event EMPTY.\n"))
- return;
- }
-
- if (!pRPort->LinkDown) {
- /* RA;:;: Any better solution? */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_LINK_UP Event EMPTY.\n"))
- return;
- }
-
- SkTimerStop(pAC, IoC, &pRPort->UpTimer);
- SkTimerStop(pAC, IoC, &pRPort->DownRxTimer);
- SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
-
- /* Do something if timer already fired? */
-
- pRPort->LinkDown = SK_FALSE;
- pRPort->PortState = SK_RLMT_PS_GOING_UP;
- pRPort->GuTimeStamp = SkOsGetTime(pAC);
- pRPort->BcTimeStamp = 0;
- pRPort->Net->LinksUp++;
- if (pRPort->Net->LinksUp == 1) {
- SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_ACTIVE);
- }
- else {
- SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_STANDBY);
- }
-
- for (i = 0; i < pRPort->Net->NumPorts; i++) {
- if (!pRPort->Net->Port[i]->PortStarted) {
- SkRlmtPortStart(pAC, IoC, pRPort->Net->Port[i]->PortNumber);
- }
- }
-
- SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
-
- if (pRPort->Net->LinksUp >= 2) {
- if (pRPort->Net->RlmtMode & SK_RLMT_CHECK_LOC_LINK) {
- /* Build the check chain. */
- SkRlmtBuildCheckChain(pAC, pRPort->Net->NetNumber);
- }
- }
-
- /* If the first link comes up, start the periodical RLMT timeout. */
- if (pRPort->Net->NumPorts > 1 && pRPort->Net->LinksUp == 1 &&
- (pRPort->Net->RlmtMode & SK_RLMT_CHECK_OTHERS) != 0) {
- Para2.Para32[0] = pRPort->Net->NetNumber;
- Para2.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pRPort->Net->LocTimer,
- pRPort->Net->TimeoutValue, SKGE_RLMT, SK_RLMT_TIM, Para2);
- }
-
- Para2 = Para;
- Para2.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pRPort->UpTimer, SK_RLMT_PORTUP_TIM_VAL,
- SKGE_RLMT, SK_RLMT_PORTUP_TIM, Para2);
-
- /* Later: if (pAC->Rlmt.RlmtMode & SK_RLMT_CHECK_LOC_LINK) && */
- if ((pRPort->Net->RlmtMode & SK_RLMT_TRANSPARENT) == 0 &&
- (pRPort->Net->RlmtMode & SK_RLMT_CHECK_LINK) != 0 &&
- (Para2.pParaPtr =
- SkRlmtBuildPacket(pAC, IoC, Para.Para32[0], SK_PACKET_ANNOUNCE,
- &pAC->Addr.Port[Para.Para32[0]].CurrentMacAddress, &SkRlmtMcAddr)
- ) != NULL) {
- /* Send "new" packet to RLMT multicast address. */
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para2);
- }
-
- if (pRPort->Net->RlmtMode & SK_RLMT_CHECK_SEG) {
- if ((Para2.pParaPtr =
- SkRlmtBuildSpanningTreePacket(pAC, IoC, Para.Para32[0])) != NULL) {
- pAC->Rlmt.Port[Para.Para32[0]].RootIdSet = SK_FALSE;
- pRPort->Net->CheckingState |=
- SK_RLMT_RCS_SEG | SK_RLMT_RCS_REPORT_SEG;
-
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para2);
-
- Para.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pRPort->Net->SegTimer,
- SK_RLMT_SEG_TO_VAL, SKGE_RLMT, SK_RLMT_SEG_TIM, Para);
- }
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_LINK_UP Event END.\n"))
-} /* SkRlmtEvtLinkUp */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtPortUpTim - PORT_UP_TIM
- *
- * Description:
- * This routine handles PORT_UP_TIM events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtPortUpTim(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
-{
- SK_RLMT_PORT *pRPort;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTUP_TIM Port %d Event BEGIN.\n", Para.Para32[0]))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTUP_TIM Event EMPTY.\n"))
- return;
- }
-
- pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
- if (pRPort->LinkDown || (pRPort->PortState == SK_RLMT_PS_UP)) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTUP_TIM Port %d Event EMPTY.\n", Para.Para32[0]))
- return;
- }
-
- pRPort->PortDown = SK_FALSE;
- pRPort->PortState = SK_RLMT_PS_UP;
- pRPort->Net->PortsUp++;
- if (pRPort->Net->RlmtState != SK_RLMT_RS_INIT) {
- if (pAC->Rlmt.NumNets <= 1) {
- SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
- }
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_PORT_UP, Para);
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTUP_TIM Event END.\n"))
-} /* SkRlmtEvtPortUpTim */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtPortDownTim - PORT_DOWN_*
- *
- * Description:
- * This routine handles PORT_DOWN_* events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtPortDownX(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Event, /* Event code */
-SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
-{
- SK_RLMT_PORT *pRPort;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTDOWN* Port %d Event (%d) BEGIN.\n",
- Para.Para32[0], Event))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTDOWN* Event EMPTY.\n"))
- return;
- }
-
- pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
- if (!pRPort->PortStarted || (Event == SK_RLMT_PORTDOWN_TX_TIM &&
- !(pRPort->CheckingState & SK_RLMT_PCS_TX))) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTDOWN* Event (%d) EMPTY.\n", Event))
- return;
- }
-
- /* Stop port's timers. */
- SkTimerStop(pAC, IoC, &pRPort->UpTimer);
- SkTimerStop(pAC, IoC, &pRPort->DownRxTimer);
- SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
-
- if (pRPort->PortState != SK_RLMT_PS_LINK_DOWN) {
- pRPort->PortState = SK_RLMT_PS_DOWN;
- }
-
- if (!pRPort->PortDown) {
- pRPort->Net->PortsUp--;
- pRPort->PortDown = SK_TRUE;
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_PORT_DOWN, Para);
- }
-
- pRPort->PacketsPerTimeSlot = 0;
- /* pRPort->DataPacketsPerTimeSlot = 0; */
- pRPort->BpduPacketsPerTimeSlot = 0;
- pRPort->BcTimeStamp = 0;
-
- /*
- * RA;:;: To be checked:
- * - actions at RLMT_STOP: We should not switch anymore.
- */
- if (pRPort->Net->RlmtState != SK_RLMT_RS_INIT) {
- if (Para.Para32[0] ==
- pRPort->Net->Port[pRPort->Net->ActivePort]->PortNumber) {
- /* Active Port went down. */
- SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
- }
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORTDOWN* Event (%d) END.\n", Event))
-} /* SkRlmtEvtPortDownX */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtLinkDown - LINK_DOWN
- *
- * Description:
- * This routine handles LINK_DOWN events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtLinkDown(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 Undefined */
-{
- SK_RLMT_PORT *pRPort;
-
- pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_LINK_DOWN Port %d Event BEGIN.\n", Para.Para32[0]))
-
- if (!pAC->Rlmt.Port[Para.Para32[0]].LinkDown) {
- pRPort->Net->LinksUp--;
- pRPort->LinkDown = SK_TRUE;
- pRPort->PortState = SK_RLMT_PS_LINK_DOWN;
- SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_OFF);
-
- if ((pRPort->Net->RlmtMode & SK_RLMT_CHECK_LOC_LINK) != 0) {
- /* Build the check chain. */
- SkRlmtBuildCheckChain(pAC, pRPort->Net->NetNumber);
- }
-
- /* Ensure that port is marked down. */
- Para.Para32[1] = -1;
- (void)SkRlmtEvent(pAC, IoC, SK_RLMT_PORTDOWN, Para);
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_LINK_DOWN Event END.\n"))
-} /* SkRlmtEvtLinkDown */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtPortAddr - PORT_ADDR
- *
- * Description:
- * This routine handles PORT_ADDR events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtPortAddr(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
-{
- SK_U32 i, j;
- SK_RLMT_PORT *pRPort;
- SK_MAC_ADDR *pOldMacAddr;
- SK_MAC_ADDR *pNewMacAddr;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORT_ADDR Port %d Event BEGIN.\n", Para.Para32[0]))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORT_ADDR Event EMPTY.\n"))
- return;
- }
-
- /* Port's physical MAC address changed. */
- pOldMacAddr = &pAC->Addr.Port[Para.Para32[0]].PreviousMacAddress;
- pNewMacAddr = &pAC->Addr.Port[Para.Para32[0]].CurrentMacAddress;
-
- /*
- * NOTE: This is not scalable for solutions where ports are
- * checked remotely. There, we need to send an RLMT
- * address change packet - and how do we ensure delivery?
- */
- for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
- pRPort = &pAC->Rlmt.Port[i];
- for (j = 0; j < pRPort->PortsChecked; j++) {
- if (SK_ADDR_EQUAL(
- pRPort->PortCheck[j].CheckAddr.a, pOldMacAddr->a)) {
- pRPort->PortCheck[j].CheckAddr = *pNewMacAddr;
- }
- }
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PORT_ADDR Event END.\n"))
-} /* SkRlmtEvtPortAddr */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtStart - START
- *
- * Description:
- * This routine handles START events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtStart(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
-{
- SK_EVPARA Para2;
- SK_U32 PortIdx;
- SK_U32 PortNumber;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_START Net %d Event BEGIN.\n", Para.Para32[0]))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_START Event EMPTY.\n"))
- return;
- }
-
- if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad NetNumber %d.\n", Para.Para32[0]))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_START Event EMPTY.\n"))
- return;
- }
-
- if (pAC->Rlmt.Net[Para.Para32[0]].RlmtState != SK_RLMT_RS_INIT) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_START Event EMPTY.\n"))
- return;
- }
-
- if (pAC->Rlmt.NetsStarted >= pAC->Rlmt.NumNets) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("All nets should have been started.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_START Event EMPTY.\n"))
- return;
- }
-
- if (pAC->Rlmt.Net[Para.Para32[0]].PrefPort >=
- pAC->Rlmt.Net[Para.Para32[0]].NumPorts) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E009, SKERR_RLMT_E009_MSG);
-
- /* Change PrefPort to internal default. */
- Para2.Para32[0] = 0xFFFFFFFF;
- Para2.Para32[1] = Para.Para32[0];
- (void)SkRlmtEvent(pAC, IoC, SK_RLMT_PREFPORT_CHANGE, Para2);
- }
-
- PortIdx = pAC->Rlmt.Net[Para.Para32[0]].PrefPort;
- PortNumber = pAC->Rlmt.Net[Para.Para32[0]].Port[PortIdx]->PortNumber;
-
- pAC->Rlmt.Net[Para.Para32[0]].LinksUp = 0;
- pAC->Rlmt.Net[Para.Para32[0]].PortsUp = 0;
- pAC->Rlmt.Net[Para.Para32[0]].CheckingState = 0;
- pAC->Rlmt.Net[Para.Para32[0]].RlmtState = SK_RLMT_RS_NET_DOWN;
-
- /* Start preferred port. */
- SkRlmtPortStart(pAC, IoC, PortNumber);
-
- /* Start Timer (for first port only). */
- Para2.Para32[0] = PortNumber;
- Para2.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pAC->Rlmt.Port[PortNumber].UpTimer,
- SK_RLMT_PORTSTART_TIM_VAL, SKGE_RLMT, SK_RLMT_PORTSTART_TIM, Para2);
-
- pAC->Rlmt.NetsStarted++;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_START Event END.\n"))
-} /* SkRlmtEvtStart */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtStop - STOP
- *
- * Description:
- * This routine handles STOP events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtStop(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
-{
- SK_EVPARA Para2;
- SK_U32 PortNumber;
- SK_U32 i;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STOP Net %d Event BEGIN.\n", Para.Para32[0]))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STOP Event EMPTY.\n"))
- return;
- }
-
- if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad NetNumber %d.\n", Para.Para32[0]))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STOP Event EMPTY.\n"))
- return;
- }
-
- if (pAC->Rlmt.Net[Para.Para32[0]].RlmtState == SK_RLMT_RS_INIT) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STOP Event EMPTY.\n"))
- return;
- }
-
- if (pAC->Rlmt.NetsStarted == 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("All nets are stopped.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STOP Event EMPTY.\n"))
- return;
- }
-
- /* Stop RLMT timers. */
- SkTimerStop(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].LocTimer);
- SkTimerStop(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].SegTimer);
-
- /* Stop net. */
- pAC->Rlmt.Net[Para.Para32[0]].RlmtState = SK_RLMT_RS_INIT;
- pAC->Rlmt.Net[Para.Para32[0]].RootIdSet = SK_FALSE;
- Para2.Para32[0] = SK_RLMT_NET_DOWN_FINAL;
- Para2.Para32[1] = Para.Para32[0]; /* Net# */
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_NET_DOWN, Para2);
-
- /* Stop ports. */
- for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
- PortNumber = pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber;
- if (pAC->Rlmt.Port[PortNumber].PortState != SK_RLMT_PS_INIT) {
- SkTimerStop(pAC, IoC, &pAC->Rlmt.Port[PortNumber].UpTimer);
- SkTimerStop(pAC, IoC, &pAC->Rlmt.Port[PortNumber].DownRxTimer);
- SkTimerStop(pAC, IoC, &pAC->Rlmt.Port[PortNumber].DownTxTimer);
-
- pAC->Rlmt.Port[PortNumber].PortState = SK_RLMT_PS_INIT;
- pAC->Rlmt.Port[PortNumber].RootIdSet = SK_FALSE;
- pAC->Rlmt.Port[PortNumber].PortStarted = SK_FALSE;
- Para2.Para32[0] = PortNumber;
- Para2.Para32[1] = (SK_U32)-1;
- SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para2);
- }
- }
-
- pAC->Rlmt.NetsStarted--;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STOP Event END.\n"))
-} /* SkRlmtEvtStop */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtTim - TIM
- *
- * Description:
- * This routine handles TIM events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtTim(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
-{
- SK_RLMT_PORT *pRPort;
- SK_U32 Timeout;
- SK_U32 NewTimeout;
- SK_U32 PortNumber;
- SK_U32 i;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_TIM Event BEGIN.\n"))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_TIM Event EMPTY.\n"))
- return;
- }
-
- if ((pAC->Rlmt.Net[Para.Para32[0]].RlmtMode & SK_RLMT_CHECK_OTHERS) == 0 ||
- pAC->Rlmt.Net[Para.Para32[0]].LinksUp == 0) {
- /* Mode changed or all links down: No more link checking. */
- return;
- }
-
-#if 0
- pAC->Rlmt.SwitchCheckCounter--;
- if (pAC->Rlmt.SwitchCheckCounter == 0) {
- pAC->Rlmt.SwitchCheckCounter;
- }
-#endif /* 0 */
-
- NewTimeout = SK_RLMT_DEF_TO_VAL;
- for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
- PortNumber = pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber;
- pRPort = &pAC->Rlmt.Port[PortNumber];
- if (!pRPort->LinkDown) {
- Timeout = SkRlmtCheckPort(pAC, IoC, PortNumber);
- if (Timeout < NewTimeout) {
- NewTimeout = Timeout;
- }
-
- /*
- * These counters should be set to 0 for all ports before the
- * first frame is sent in the next loop.
- */
- pRPort->PacketsPerTimeSlot = 0;
- /* pRPort->DataPacketsPerTimeSlot = 0; */
- pRPort->BpduPacketsPerTimeSlot = 0;
- }
- }
- pAC->Rlmt.Net[Para.Para32[0]].TimeoutValue = NewTimeout;
-
- if (pAC->Rlmt.Net[Para.Para32[0]].LinksUp > 1) {
- /*
- * If checking remote ports, also send packets if
- * (LinksUp == 1) &&
- * this port checks at least one (remote) port.
- */
-
- /*
- * Must be new loop, as SkRlmtCheckPort can request to
- * check segmentation when e.g. checking the last port.
- */
- for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
- if (!pAC->Rlmt.Net[Para.Para32[0]].Port[i]->LinkDown) {
- SkRlmtSend(pAC, IoC,
- pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber);
- }
- }
- }
-
- SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].LocTimer,
- pAC->Rlmt.Net[Para.Para32[0]].TimeoutValue, SKGE_RLMT, SK_RLMT_TIM,
- Para);
-
- if (pAC->Rlmt.Net[Para.Para32[0]].LinksUp > 1 &&
- (pAC->Rlmt.Net[Para.Para32[0]].RlmtMode & SK_RLMT_CHECK_SEG) &&
- (pAC->Rlmt.Net[Para.Para32[0]].CheckingState & SK_RLMT_RCS_START_SEG)) {
- SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].SegTimer,
- SK_RLMT_SEG_TO_VAL, SKGE_RLMT, SK_RLMT_SEG_TIM, Para);
- pAC->Rlmt.Net[Para.Para32[0]].CheckingState &= ~SK_RLMT_RCS_START_SEG;
- pAC->Rlmt.Net[Para.Para32[0]].CheckingState |=
- SK_RLMT_RCS_SEG | SK_RLMT_RCS_REPORT_SEG;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_TIM Event END.\n"))
-} /* SkRlmtEvtTim */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtSegTim - SEG_TIM
- *
- * Description:
- * This routine handles SEG_TIM events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtSegTim(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
-{
-#ifdef xDEBUG
- int j;
-#endif /* DEBUG */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SEG_TIM Event BEGIN.\n"))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SEG_TIM Event EMPTY.\n"))
- return;
- }
-
-#ifdef xDEBUG
- for (j = 0; j < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; j++) {
- SK_ADDR_PORT *pAPort;
- SK_U32 k;
- SK_U16 *InAddr;
- SK_U8 InAddr8[6];
-
- InAddr = (SK_U16 *)&InAddr8[0];
- pAPort = pAC->Rlmt.Net[Para.Para32[0]].Port[j]->AddrPort;
- for (k = 0; k < pAPort->NextExactMatchRlmt; k++) {
- /* Get exact match address k from port j. */
- XM_INADDR(IoC, pAC->Rlmt.Net[Para.Para32[0]].Port[j]->PortNumber,
- XM_EXM(k), InAddr);
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("MC address %d on Port %u: %02x %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x.\n",
- k, pAC->Rlmt.Net[Para.Para32[0]].Port[j]->PortNumber,
- InAddr8[0], InAddr8[1], InAddr8[2],
- InAddr8[3], InAddr8[4], InAddr8[5],
- pAPort->Exact[k].a[0], pAPort->Exact[k].a[1],
- pAPort->Exact[k].a[2], pAPort->Exact[k].a[3],
- pAPort->Exact[k].a[4], pAPort->Exact[k].a[5]))
- }
- }
-#endif /* xDEBUG */
-
- SkRlmtCheckSeg(pAC, IoC, Para.Para32[0]);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SEG_TIM Event END.\n"))
-} /* SkRlmtEvtSegTim */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtPacketRx - PACKET_RECEIVED
- *
- * Description:
- * This routine handles PACKET_RECEIVED events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtPacketRx(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_MBUF *pMb */
-{
- SK_MBUF *pMb;
- SK_MBUF *pNextMb;
- SK_U32 NetNumber;
-
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PACKET_RECEIVED Event BEGIN.\n"))
-
- /* Should we ignore frames during port switching? */
-
-#ifdef DEBUG
- pMb = Para.pParaPtr;
- if (pMb == NULL) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL, ("No mbuf.\n"))
- }
- else if (pMb->pNext != NULL) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("More than one mbuf or pMb->pNext not set.\n"))
- }
-#endif /* DEBUG */
-
- for (pMb = Para.pParaPtr; pMb != NULL; pMb = pNextMb) {
- pNextMb = pMb->pNext;
- pMb->pNext = NULL;
-
- NetNumber = pAC->Rlmt.Port[pMb->PortIdx].Net->NetNumber;
- if (pAC->Rlmt.Net[NetNumber].RlmtState == SK_RLMT_RS_INIT) {
- SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
- }
- else {
- SkRlmtPacketReceive(pAC, IoC, pMb);
- }
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PACKET_RECEIVED Event END.\n"))
-} /* SkRlmtEvtPacketRx */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtStatsClear - STATS_CLEAR
- *
- * Description:
- * This routine handles STATS_CLEAR events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtStatsClear(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
-{
- SK_U32 i;
- SK_RLMT_PORT *pRPort;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_CLEAR Event BEGIN.\n"))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_CLEAR Event EMPTY.\n"))
- return;
- }
-
- if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad NetNumber %d.\n", Para.Para32[0]))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_CLEAR Event EMPTY.\n"))
- return;
- }
-
- /* Clear statistics for logical and physical ports. */
- for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
- pRPort =
- &pAC->Rlmt.Port[pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber];
- pRPort->TxHelloCts = 0;
- pRPort->RxHelloCts = 0;
- pRPort->TxSpHelloReqCts = 0;
- pRPort->RxSpHelloCts = 0;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_CLEAR Event END.\n"))
-} /* SkRlmtEvtStatsClear */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtStatsUpdate - STATS_UPDATE
- *
- * Description:
- * This routine handles STATS_UPDATE events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtStatsUpdate(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
-{
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_UPDATE Event BEGIN.\n"))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_UPDATE Event EMPTY.\n"))
- return;
- }
-
- if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad NetNumber %d.\n", Para.Para32[0]))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_UPDATE Event EMPTY.\n"))
- return;
- }
-
- /* Update statistics - currently always up-to-date. */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_STATS_UPDATE Event END.\n"))
-} /* SkRlmtEvtStatsUpdate */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtPrefportChange - PREFPORT_CHANGE
- *
- * Description:
- * This routine handles PREFPORT_CHANGE events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtPrefportChange(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 PortIndex; SK_U32 NetNumber */
-{
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PREFPORT_CHANGE to Port %d Event BEGIN.\n", Para.Para32[0]))
-
- if (Para.Para32[1] >= pAC->Rlmt.NumNets) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad NetNumber %d.\n", Para.Para32[1]))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PREFPORT_CHANGE Event EMPTY.\n"))
- return;
- }
-
- /* 0xFFFFFFFF == auto-mode. */
- if (Para.Para32[0] == 0xFFFFFFFF) {
- pAC->Rlmt.Net[Para.Para32[1]].PrefPort = SK_RLMT_DEF_PREF_PORT;
- }
- else {
- if (Para.Para32[0] >= pAC->Rlmt.Net[Para.Para32[1]].NumPorts) {
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E010, SKERR_RLMT_E010_MSG);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PREFPORT_CHANGE Event EMPTY.\n"))
- return;
- }
-
- pAC->Rlmt.Net[Para.Para32[1]].PrefPort = Para.Para32[0];
- }
-
- pAC->Rlmt.Net[Para.Para32[1]].Preference = Para.Para32[0];
-
- if (pAC->Rlmt.Net[Para.Para32[1]].RlmtState != SK_RLMT_RS_INIT) {
- SkRlmtCheckSwitch(pAC, IoC, Para.Para32[1]);
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_PREFPORT_CHANGE Event END.\n"))
-} /* SkRlmtEvtPrefportChange */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtSetNets - SET_NETS
- *
- * Description:
- * This routine handles SET_NETS events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtSetNets(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NumNets; SK_U32 -1 */
-{
- int i;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SET_NETS Event BEGIN.\n"))
-
- if (Para.Para32[1] != (SK_U32)-1) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad Parameter.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SET_NETS Event EMPTY.\n"))
- return;
- }
-
- if (Para.Para32[0] == 0 || Para.Para32[0] > SK_MAX_NETS ||
- Para.Para32[0] > (SK_U32)pAC->GIni.GIMacsFound) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad number of nets: %d.\n", Para.Para32[0]))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SET_NETS Event EMPTY.\n"))
- return;
- }
-
- if (Para.Para32[0] == pAC->Rlmt.NumNets) { /* No change. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SET_NETS Event EMPTY.\n"))
- return;
- }
-
- /* Entering and leaving dual mode only allowed while nets are stopped. */
- if (pAC->Rlmt.NetsStarted > 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Changing dual mode only allowed while all nets are stopped.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SET_NETS Event EMPTY.\n"))
- return;
- }
-
- if (Para.Para32[0] == 1) {
- if (pAC->Rlmt.NumNets > 1) {
- /* Clear logical MAC addr from second net's active port. */
- (void)SkAddrOverride(pAC, IoC, pAC->Rlmt.Net[1].Port[pAC->Addr.
- Net[1].ActivePort]->PortNumber, NULL, SK_ADDR_CLEAR_LOGICAL);
- pAC->Rlmt.Net[1].NumPorts = 0;
- }
-
- pAC->Rlmt.NumNets = Para.Para32[0];
- for (i = 0; (SK_U32)i < pAC->Rlmt.NumNets; i++) {
- pAC->Rlmt.Net[i].RlmtState = SK_RLMT_RS_INIT;
- pAC->Rlmt.Net[i].RootIdSet = SK_FALSE;
- pAC->Rlmt.Net[i].Preference = 0xFFFFFFFF; /* "Automatic" */
- pAC->Rlmt.Net[i].PrefPort = SK_RLMT_DEF_PREF_PORT;
- /* Just assuming. */
- pAC->Rlmt.Net[i].ActivePort = pAC->Rlmt.Net[i].PrefPort;
- pAC->Rlmt.Net[i].RlmtMode = SK_RLMT_DEF_MODE;
- pAC->Rlmt.Net[i].TimeoutValue = SK_RLMT_DEF_TO_VAL;
- pAC->Rlmt.Net[i].NetNumber = i;
- }
-
- pAC->Rlmt.Port[1].Net= &pAC->Rlmt.Net[0];
- pAC->Rlmt.Net[0].NumPorts = pAC->GIni.GIMacsFound;
-
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_SET_NETS, Para);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("RLMT: Changed to one net with two ports.\n"))
- }
- else if (Para.Para32[0] == 2) {
- pAC->Rlmt.Port[1].Net= &pAC->Rlmt.Net[1];
- pAC->Rlmt.Net[1].NumPorts = pAC->GIni.GIMacsFound - 1;
- pAC->Rlmt.Net[0].NumPorts =
- pAC->GIni.GIMacsFound - pAC->Rlmt.Net[1].NumPorts;
-
- pAC->Rlmt.NumNets = Para.Para32[0];
- for (i = 0; (SK_U32)i < pAC->Rlmt.NumNets; i++) {
- pAC->Rlmt.Net[i].RlmtState = SK_RLMT_RS_INIT;
- pAC->Rlmt.Net[i].RootIdSet = SK_FALSE;
- pAC->Rlmt.Net[i].Preference = 0xFFFFFFFF; /* "Automatic" */
- pAC->Rlmt.Net[i].PrefPort = SK_RLMT_DEF_PREF_PORT;
- /* Just assuming. */
- pAC->Rlmt.Net[i].ActivePort = pAC->Rlmt.Net[i].PrefPort;
- pAC->Rlmt.Net[i].RlmtMode = SK_RLMT_DEF_MODE;
- pAC->Rlmt.Net[i].TimeoutValue = SK_RLMT_DEF_TO_VAL;
-
- pAC->Rlmt.Net[i].NetNumber = i;
- }
-
- /* Set logical MAC addr on second net's active port. */
- (void)SkAddrOverride(pAC, IoC, pAC->Rlmt.Net[1].Port[pAC->Addr.
- Net[1].ActivePort]->PortNumber, NULL, SK_ADDR_SET_LOGICAL);
-
- SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_SET_NETS, Para);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("RLMT: Changed to two nets with one port each.\n"))
- }
- else {
- /* Not implemented for more than two nets. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SetNets not implemented for more than two nets.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SET_NETS Event EMPTY.\n"))
- return;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_SET_NETS Event END.\n"))
-} /* SkRlmtSetNets */
-
-
-/******************************************************************************
- *
- * SkRlmtEvtModeChange - MODE_CHANGE
- *
- * Description:
- * This routine handles MODE_CHANGE events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * Nothing
- */
-RLMT_STATIC void SkRlmtEvtModeChange(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_EVPARA Para) /* SK_U32 NewMode; SK_U32 NetNumber */
-{
- SK_EVPARA Para2;
- SK_U32 i;
- SK_U32 PrevRlmtMode;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_MODE_CHANGE Event BEGIN.\n"))
-
- if (Para.Para32[1] >= pAC->Rlmt.NumNets) {
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Bad NetNumber %d.\n", Para.Para32[1]))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_MODE_CHANGE Event EMPTY.\n"))
- return;
- }
-
- Para.Para32[0] |= SK_RLMT_CHECK_LINK;
-
- if ((pAC->Rlmt.Net[Para.Para32[1]].NumPorts == 1) &&
- Para.Para32[0] != SK_RLMT_MODE_CLS) {
- pAC->Rlmt.Net[Para.Para32[1]].RlmtMode = SK_RLMT_MODE_CLS;
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Forced RLMT mode to CLS on single port net.\n"))
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_MODE_CHANGE Event EMPTY.\n"))
- return;
- }
-
- /* Update RLMT mode. */
- PrevRlmtMode = pAC->Rlmt.Net[Para.Para32[1]].RlmtMode;
- pAC->Rlmt.Net[Para.Para32[1]].RlmtMode = Para.Para32[0];
-
- if ((PrevRlmtMode & SK_RLMT_CHECK_LOC_LINK) !=
- (pAC->Rlmt.Net[Para.Para32[1]].RlmtMode & SK_RLMT_CHECK_LOC_LINK)) {
- /* SK_RLMT_CHECK_LOC_LINK bit changed. */
- if ((PrevRlmtMode & SK_RLMT_CHECK_OTHERS) == 0 &&
- pAC->Rlmt.Net[Para.Para32[1]].NumPorts > 1 &&
- pAC->Rlmt.Net[Para.Para32[1]].PortsUp >= 1) {
- /* 20001207 RA: Was "PortsUp == 1". */
- Para2.Para32[0] = Para.Para32[1];
- Para2.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[1]].LocTimer,
- pAC->Rlmt.Net[Para.Para32[1]].TimeoutValue,
- SKGE_RLMT, SK_RLMT_TIM, Para2);
- }
- }
-
- if ((PrevRlmtMode & SK_RLMT_CHECK_SEG) !=
- (pAC->Rlmt.Net[Para.Para32[1]].RlmtMode & SK_RLMT_CHECK_SEG)) {
- /* SK_RLMT_CHECK_SEG bit changed. */
- for (i = 0; i < pAC->Rlmt.Net[Para.Para32[1]].NumPorts; i++) {
- (void)SkAddrMcClear(pAC, IoC,
- pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber,
- SK_ADDR_PERMANENT | SK_MC_SW_ONLY);
-
- /* Add RLMT MC address. */
- (void)SkAddrMcAdd(pAC, IoC,
- pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber,
- &SkRlmtMcAddr, SK_ADDR_PERMANENT);
-
- if ((pAC->Rlmt.Net[Para.Para32[1]].RlmtMode &
- SK_RLMT_CHECK_SEG) != 0) {
- /* Add BPDU MC address. */
- (void)SkAddrMcAdd(pAC, IoC,
- pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber,
- &BridgeMcAddr, SK_ADDR_PERMANENT);
-
- if (pAC->Rlmt.Net[Para.Para32[1]].RlmtState != SK_RLMT_RS_INIT) {
- if (!pAC->Rlmt.Net[Para.Para32[1]].Port[i]->LinkDown &&
- (Para2.pParaPtr = SkRlmtBuildSpanningTreePacket(
- pAC, IoC, i)) != NULL) {
- pAC->Rlmt.Net[Para.Para32[1]].Port[i]->RootIdSet =
- SK_FALSE;
- SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para2);
- }
- }
- }
- (void)SkAddrMcUpdate(pAC, IoC,
- pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber);
- } /* for ... */
-
- if ((pAC->Rlmt.Net[Para.Para32[1]].RlmtMode & SK_RLMT_CHECK_SEG) != 0) {
- Para2.Para32[0] = Para.Para32[1];
- Para2.Para32[1] = (SK_U32)-1;
- SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[1]].SegTimer,
- SK_RLMT_SEG_TO_VAL, SKGE_RLMT, SK_RLMT_SEG_TIM, Para2);
- }
- } /* SK_RLMT_CHECK_SEG bit changed. */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("SK_RLMT_MODE_CHANGE Event END.\n"))
-} /* SkRlmtEvtModeChange */
-
-
-/******************************************************************************
- *
- * SkRlmtEvent - a PORT- or an RLMT-specific event happened
- *
- * Description:
- * This routine calls subroutines to handle PORT- and RLMT-specific events.
- *
- * Context:
- * runtime, pageable?
- * may be called after SK_INIT_IO
- *
- * Returns:
- * 0
- */
-int SkRlmtEvent(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-SK_U32 Event, /* Event code */
-SK_EVPARA Para) /* Event-specific parameter */
-{
- switch (Event) {
-
- /* ----- PORT events ----- */
-
- case SK_RLMT_PORTSTART_TIM: /* From RLMT via TIME. */
- SkRlmtEvtPortStartTim(pAC, IoC, Para);
- break;
- case SK_RLMT_LINK_UP: /* From SIRQ. */
- SkRlmtEvtLinkUp(pAC, IoC, Para);
- break;
- case SK_RLMT_PORTUP_TIM: /* From RLMT via TIME. */
- SkRlmtEvtPortUpTim(pAC, IoC, Para);
- break;
- case SK_RLMT_PORTDOWN: /* From RLMT. */
- case SK_RLMT_PORTDOWN_RX_TIM: /* From RLMT via TIME. */
- case SK_RLMT_PORTDOWN_TX_TIM: /* From RLMT via TIME. */
- SkRlmtEvtPortDownX(pAC, IoC, Event, Para);
- break;
- case SK_RLMT_LINK_DOWN: /* From SIRQ. */
- SkRlmtEvtLinkDown(pAC, IoC, Para);
- break;
- case SK_RLMT_PORT_ADDR: /* From ADDR. */
- SkRlmtEvtPortAddr(pAC, IoC, Para);
- break;
-
- /* ----- RLMT events ----- */
-
- case SK_RLMT_START: /* From DRV. */
- SkRlmtEvtStart(pAC, IoC, Para);
- break;
- case SK_RLMT_STOP: /* From DRV. */
- SkRlmtEvtStop(pAC, IoC, Para);
- break;
- case SK_RLMT_TIM: /* From RLMT via TIME. */
- SkRlmtEvtTim(pAC, IoC, Para);
- break;
- case SK_RLMT_SEG_TIM:
- SkRlmtEvtSegTim(pAC, IoC, Para);
- break;
- case SK_RLMT_PACKET_RECEIVED: /* From DRV. */
- SkRlmtEvtPacketRx(pAC, IoC, Para);
- break;
- case SK_RLMT_STATS_CLEAR: /* From PNMI. */
- SkRlmtEvtStatsClear(pAC, IoC, Para);
- break;
- case SK_RLMT_STATS_UPDATE: /* From PNMI. */
- SkRlmtEvtStatsUpdate(pAC, IoC, Para);
- break;
- case SK_RLMT_PREFPORT_CHANGE: /* From PNMI. */
- SkRlmtEvtPrefportChange(pAC, IoC, Para);
- break;
- case SK_RLMT_MODE_CHANGE: /* From PNMI. */
- SkRlmtEvtModeChange(pAC, IoC, Para);
- break;
- case SK_RLMT_SET_NETS: /* From DRV. */
- SkRlmtEvtSetNets(pAC, IoC, Para);
- break;
-
- /* ----- Unknown events ----- */
-
- default: /* Create error log entry. */
- SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
- ("Unknown RLMT Event %d.\n", Event))
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E003, SKERR_RLMT_E003_MSG);
- break;
- } /* switch() */
-
- return (0);
-} /* SkRlmtEvent */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+/******************************************************************************
+ *
+ * Name: skrlmt.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Manage links on SK-NET Adapters, esp. redundant ones.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2001 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skrlmt.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.68 2003/01/31 15:26:56 rschmidt
+ * Added init for local variables in RlmtInit().
+ *
+ * Revision 1.67 2003/01/31 14:12:41 mkunz
+ * single port adapter runs now with two identical MAC addresses
+ *
+ * Revision 1.66 2002/09/23 15:14:19 rwahl
+ * - Reset broadcast timestamp on link down.
+ * - Editorial corrections.
+ *
+ * Revision 1.65 2002/07/22 14:29:48 rwahl
+ * - Removed BRK statement from debug check.
+ *
+ * Revision 1.64 2001/11/28 19:36:14 rwahl
+ * - RLMT Packets sent to an invalid MAC address in CLP/CLPSS mode
+ * (#10650).
+ * - Reworked fix for port switching in CLS mode (#10639)
+ * (no dependency to RLMT module).
+ * - Enabled dbg output for entry/exit of event functions.
+ * - Editorial changes.
+ *
+ * Revision 1.63 2001/10/26 07:53:18 afischer
+ * Port switching bug in `check local link` mode
+ *
+ * Revision 1.62 2001/07/03 12:16:30 mkunz
+ * New Flag ChgBcPrio (Change priority of last broadcast received)
+ *
+ * Revision 1.61 2001/03/14 12:52:08 rassmann
+ * Fixed reporting of active port up/down to PNMI.
+ *
+ * Revision 1.60 2001/02/21 16:02:25 gklug
+ * fix: when RLMT starts set Active Port for PNMI
+ *
+ * Revision 1.59 2001/02/16 14:38:19 rassmann
+ * Initializing some pointers earlier in the init phase.
+ * Rx Mbufs are freed if the net which they belong to is stopped.
+ *
+ * Revision 1.58 2001/02/14 14:06:31 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.57 2001/02/05 14:25:26 rassmann
+ * Prepared RLMT for transparent operation.
+ *
+ * Revision 1.56 2001/01/30 10:29:09 rassmann
+ * Not checking switching befor RlmtStart.
+ * Editorial changes.
+ *
+ * Revision 1.55 2001/01/22 13:41:38 rassmann
+ * Supporting two nets on dual-port adapters.
+ *
+ * Revision 1.54 2000/11/30 13:25:07 rassmann
+ * Setting SK_TICK_INCR to 1 by default.
+ *
+ * Revision 1.53 2000/11/30 10:48:07 cgoos
+ * Changed definition of SK_RLMT_BC_DELTA.
+ *
+ * Revision 1.52 2000/11/27 12:50:03 rassmann
+ * Checking ports after receiving broadcasts.
+ *
+ * Revision 1.51 2000/11/17 08:58:00 rassmann
+ * Moved CheckSwitch from SK_RLMT_PACKET_RECEIVED to SK_RLMT_TIM event.
+ *
+ * Revision 1.50 2000/11/09 12:24:34 rassmann
+ * Indicating that segmentation check is not running anymore after
+ * SkRlmtCheckSeg().
+ * Restarting segmentation timer after segmentation log.
+ * Editorial changes.
+ *
+ * Revision 1.49 1999/11/22 13:38:02 cgoos
+ * Changed license header to GPL.
+ * Added initialization to some variables to avoid compiler warnings.
+ *
+ * Revision 1.48 1999/10/04 14:01:17 rassmann
+ * Corrected reaction to reception of BPDU frames (#10441).
+ *
+ * Revision 1.47 1999/07/20 12:53:36 rassmann
+ * Fixed documentation errors for lookahead macros.
+ *
+ * Revision 1.46 1999/05/28 13:29:16 rassmann
+ * Replaced C++-style comment.
+ *
+ * Revision 1.45 1999/05/28 13:28:08 rassmann
+ * Corrected syntax error (xxx).
+ *
+ * Revision 1.44 1999/05/28 11:15:54 rassmann
+ * Changed behaviour to reflect Design Spec v1.2.
+ * Controlling Link LED(s).
+ * Introduced RLMT Packet Version field in RLMT Packet.
+ * Newstyle lookahead macros (checking meta-information before looking at
+ * the packet).
+ *
+ * Revision 1.43 1999/01/28 13:12:43 rassmann
+ * Corrected Lookahead (bug introduced in previous Rev.).
+ *
+ * Revision 1.42 1999/01/28 12:50:41 rassmann
+ * Not using broadcast time stamps in CheckLinkState mode.
+ *
+ * Revision 1.41 1999/01/27 14:13:02 rassmann
+ * Monitoring broadcast traffic.
+ * Switching more reliably and not too early if switch is
+ * configured for spanning tree.
+ *
+ * Revision 1.40 1999/01/22 13:17:30 rassmann
+ * Informing PNMI of NET_UP.
+ * Clearing RLMT multicast addresses before setting them for the first time.
+ * Reporting segmentation earlier, setting a "quiet time"
+ * after a report.
+ *
+ * Revision 1.39 1998/12/10 15:29:53 rassmann
+ * Corrected SuspectStatus in SkRlmtBuildCheckChain().
+ * Corrected CHECK_SEG mode.
+ *
+ * Revision 1.38 1998/12/08 13:11:23 rassmann
+ * Stopping SegTimer at RlmtStop.
+ *
+ * Revision 1.37 1998/12/07 16:51:42 rassmann
+ * Corrected comments.
+ *
+ * Revision 1.36 1998/12/04 10:58:56 rassmann
+ * Setting next pointer to NULL when receiving.
+ *
+ * Revision 1.35 1998/12/03 16:12:42 rassmann
+ * Ignoring/correcting illegal PrefPort values.
+ *
+ * Revision 1.34 1998/12/01 11:45:35 rassmann
+ * Code cleanup.
+ *
+ * Revision 1.33 1998/12/01 10:29:32 rassmann
+ * Starting standby ports before getting the net up.
+ * Checking if a port is started when the link comes up.
+ *
+ * Revision 1.32 1998/11/30 16:19:50 rassmann
+ * New default for PortNoRx.
+ *
+ * Revision 1.31 1998/11/27 19:17:13 rassmann
+ * Corrected handling of LINK_DOWN coming shortly after LINK_UP.
+ *
+ * Revision 1.30 1998/11/24 12:37:31 rassmann
+ * Implemented segmentation check.
+ *
+ * Revision 1.29 1998/11/18 13:04:32 rassmann
+ * Secured PortUpTimer event.
+ * Waiting longer before starting standby port(s).
+ *
+ * Revision 1.28 1998/11/17 13:43:04 rassmann
+ * Handling (logical) tx failure.
+ * Sending packet on logical address after PORT_SWITCH.
+ *
+ * Revision 1.27 1998/11/13 17:09:50 rassmann
+ * Secured some events against being called in wrong state.
+ *
+ * Revision 1.26 1998/11/13 16:56:54 rassmann
+ * Added macro version of SkRlmtLookaheadPacket.
+ *
+ * Revision 1.25 1998/11/06 18:06:04 rassmann
+ * Corrected timing when RLMT checks fail.
+ * Clearing tx counter earlier in periodical checks.
+ *
+ * Revision 1.24 1998/11/05 10:37:27 rassmann
+ * Checking destination address in Lookahead.
+ *
+ * Revision 1.23 1998/11/03 13:53:49 rassmann
+ * RLMT should switch now (at least in mode 3).
+ *
+ * Revision 1.22 1998/10/29 14:34:49 rassmann
+ * Clearing SK_RLMT struct at startup.
+ * Initializing PortsUp during SK_RLMT_START.
+ *
+ * Revision 1.21 1998/10/28 11:30:17 rassmann
+ * Default mode is now SK_RLMT_CHECK_LOC_LINK.
+ *
+ * Revision 1.20 1998/10/26 16:02:03 rassmann
+ * Ignoring LINK_DOWN for links that are down.
+ *
+ * Revision 1.19 1998/10/22 15:54:01 rassmann
+ * Corrected EtherLen.
+ * Starting Link Check when second port comes up.
+ *
+ * Revision 1.18 1998/10/22 11:39:50 rassmann
+ * Corrected signed/unsigned mismatches.
+ * Corrected receive list handling and address recognition.
+ *
+ * Revision 1.17 1998/10/19 17:01:20 rassmann
+ * More detailed checking of received packets.
+ *
+ * Revision 1.16 1998/10/15 15:16:34 rassmann
+ * Finished Spanning Tree checking.
+ * Checked with lint.
+ *
+ * Revision 1.15 1998/09/24 19:16:07 rassmann
+ * Code cleanup.
+ * Introduced Timer for PORT_DOWN due to no RX.
+ *
+ * Revision 1.14 1998/09/18 20:27:14 rassmann
+ * Added address override.
+ *
+ * Revision 1.13 1998/09/16 11:31:48 rassmann
+ * Including skdrv1st.h again. :(
+ *
+ * Revision 1.12 1998/09/16 11:09:50 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.11 1998/09/15 12:32:03 rassmann
+ * Syntax correction.
+ *
+ * Revision 1.10 1998/09/15 11:28:49 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.9 1998/09/14 17:07:37 rassmann
+ * Added code for port checking via LAN.
+ * Changed Mbuf definition.
+ *
+ * Revision 1.8 1998/09/07 11:14:14 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.7 1998/09/07 09:06:07 rassmann
+ * Syntax corrections.
+ *
+ * Revision 1.6 1998/09/04 19:41:33 rassmann
+ * Syntax corrections.
+ * Started entering code for checking local links.
+ *
+ * Revision 1.5 1998/09/04 12:14:27 rassmann
+ * Interface cleanup.
+ *
+ * Revision 1.4 1998/09/02 16:55:28 rassmann
+ * Updated to reflect new DRV/HWAC/RLMT interface.
+ *
+ * Revision 1.3 1998/08/27 14:29:03 rassmann
+ * Code cleanup.
+ *
+ * Revision 1.2 1998/08/27 14:26:24 rassmann
+ * Updated interface.
+ *
+ * Revision 1.1 1998/08/21 08:26:49 rassmann
+ * First public version.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * Description:
+ *
+ * This module contains code for Link ManagemenT (LMT) of SK-NET Adapters.
+ * It is mainly intended for adapters with more than one link.
+ * For such adapters, this module realizes Redundant Link ManagemenT (RLMT).
+ *
+ * Include File Hierarchy:
+ *
+ * "skdrv1st.h"
+ * "skdrv2nd.h"
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+#ifndef lint
+static const char SysKonnectFileId[] =
+ "@(#) $Id: skrlmt.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $ (C) SysKonnect.";
+#endif /* !defined(lint) */
+
+#define __SKRLMT_C
+
+#ifdef __cplusplus
+#error C++ is not yet supported.
+extern "C" {
+#endif /* cplusplus */
+
+#include "h/skdrv1st.h"
+#include "h/skdrv2nd.h"
+
+/* defines ********************************************************************/
+
+#ifndef SK_HWAC_LINK_LED
+#define SK_HWAC_LINK_LED(a,b,c,d)
+#endif /* !defined(SK_HWAC_LINK_LED) */
+
+#ifndef DEBUG
+#define RLMT_STATIC static
+#else /* DEBUG */
+#define RLMT_STATIC
+
+#ifndef SK_LITTLE_ENDIAN
+/* First 32 bits */
+#define OFFS_LO32 1
+
+/* Second 32 bits */
+#define OFFS_HI32 0
+#else /* SK_LITTLE_ENDIAN */
+/* First 32 bits */
+#define OFFS_LO32 0
+
+/* Second 32 bits */
+#define OFFS_HI32 1
+#endif /* SK_LITTLE_ENDIAN */
+
+#endif /* DEBUG */
+
+/* ----- Private timeout values ----- */
+
+#define SK_RLMT_MIN_TO_VAL 125000 /* 1/8 sec. */
+#define SK_RLMT_DEF_TO_VAL 1000000 /* 1 sec. */
+#define SK_RLMT_PORTDOWN_TIM_VAL 900000 /* another 0.9 sec. */
+#define SK_RLMT_PORTSTART_TIM_VAL 100000 /* 0.1 sec. */
+#define SK_RLMT_PORTUP_TIM_VAL 2500000 /* 2.5 sec. */
+#define SK_RLMT_SEG_TO_VAL 900000000 /* 15 min. */
+
+/* Assume tick counter increment is 1 - may be set OS-dependent. */
+#ifndef SK_TICK_INCR
+#define SK_TICK_INCR SK_CONSTU64(1)
+#endif /* !defined(SK_TICK_INCR) */
+
+/*
+ * Amount that a time stamp must be later to be recognized as "substantially
+ * later". This is about 1/128 sec, but above 1 tick counter increment.
+ */
+#define SK_RLMT_BC_DELTA (1 + ((SK_TICKS_PER_SEC >> 7) > SK_TICK_INCR ? \
+ (SK_TICKS_PER_SEC >> 7) : SK_TICK_INCR))
+
+/* ----- Private RLMT defaults ----- */
+
+#define SK_RLMT_DEF_PREF_PORT 0 /* "Lower" port. */
+#define SK_RLMT_DEF_MODE SK_RLMT_CHECK_LINK /* Default RLMT Mode. */
+
+/* ----- Private RLMT checking states ----- */
+
+#define SK_RLMT_RCS_SEG 1 /* RLMT Check State: check seg. */
+#define SK_RLMT_RCS_START_SEG 2 /* RLMT Check State: start check seg. */
+#define SK_RLMT_RCS_SEND_SEG 4 /* RLMT Check State: send BPDU packet */
+#define SK_RLMT_RCS_REPORT_SEG 8 /* RLMT Check State: report seg. */
+
+/* ----- Private PORT checking states ----- */
+
+#define SK_RLMT_PCS_TX 1 /* Port Check State: check tx. */
+#define SK_RLMT_PCS_RX 2 /* Port Check State: check rx. */
+
+/* ----- Private PORT events ----- */
+
+/* Note: Update simulation when changing these. */
+#define SK_RLMT_PORTSTART_TIM 1100 /* Port start timeout. */
+#define SK_RLMT_PORTUP_TIM 1101 /* Port can now go up. */
+#define SK_RLMT_PORTDOWN_RX_TIM 1102 /* Port did not receive once ... */
+#define SK_RLMT_PORTDOWN 1103 /* Port went down. */
+#define SK_RLMT_PORTDOWN_TX_TIM 1104 /* Partner did not receive ... */
+
+/* ----- Private RLMT events ----- */
+
+/* Note: Update simulation when changing these. */
+#define SK_RLMT_TIM 2100 /* RLMT timeout. */
+#define SK_RLMT_SEG_TIM 2101 /* RLMT segmentation check timeout. */
+
+#define TO_SHORTEN(tim) ((tim) / 2)
+
+/* Error numbers and messages. */
+#define SKERR_RLMT_E001 (SK_ERRBASE_RLMT + 0)
+#define SKERR_RLMT_E001_MSG "No Packet."
+#define SKERR_RLMT_E002 (SKERR_RLMT_E001 + 1)
+#define SKERR_RLMT_E002_MSG "Short Packet."
+#define SKERR_RLMT_E003 (SKERR_RLMT_E002 + 1)
+#define SKERR_RLMT_E003_MSG "Unknown RLMT event."
+#define SKERR_RLMT_E004 (SKERR_RLMT_E003 + 1)
+#define SKERR_RLMT_E004_MSG "PortsUp incorrect."
+#define SKERR_RLMT_E005 (SKERR_RLMT_E004 + 1)
+#define SKERR_RLMT_E005_MSG \
+ "Net seems to be segmented (different root bridges are reported on the ports)."
+#define SKERR_RLMT_E006 (SKERR_RLMT_E005 + 1)
+#define SKERR_RLMT_E006_MSG "Duplicate MAC Address detected."
+#define SKERR_RLMT_E007 (SKERR_RLMT_E006 + 1)
+#define SKERR_RLMT_E007_MSG "LinksUp incorrect."
+#define SKERR_RLMT_E008 (SKERR_RLMT_E007 + 1)
+#define SKERR_RLMT_E008_MSG "Port not started but link came up."
+#define SKERR_RLMT_E009 (SKERR_RLMT_E008 + 1)
+#define SKERR_RLMT_E009_MSG "Corrected illegal setting of Preferred Port."
+#define SKERR_RLMT_E010 (SKERR_RLMT_E009 + 1)
+#define SKERR_RLMT_E010_MSG "Ignored illegal Preferred Port."
+
+/* LLC field values. */
+#define LLC_COMMAND_RESPONSE_BIT 1
+#define LLC_TEST_COMMAND 0xE3
+#define LLC_UI 0x03
+
+/* RLMT Packet fields. */
+#define SK_RLMT_DSAP 0
+#define SK_RLMT_SSAP 0
+#define SK_RLMT_CTRL (LLC_TEST_COMMAND)
+#define SK_RLMT_INDICATOR0 0x53 /* S */
+#define SK_RLMT_INDICATOR1 0x4B /* K */
+#define SK_RLMT_INDICATOR2 0x2D /* - */
+#define SK_RLMT_INDICATOR3 0x52 /* R */
+#define SK_RLMT_INDICATOR4 0x4C /* L */
+#define SK_RLMT_INDICATOR5 0x4D /* M */
+#define SK_RLMT_INDICATOR6 0x54 /* T */
+#define SK_RLMT_PACKET_VERSION 0
+
+/* RLMT SPT Flag values. */
+#define SK_RLMT_SPT_FLAG_CHANGE 0x01
+#define SK_RLMT_SPT_FLAG_CHANGE_ACK 0x80
+
+/* RLMT SPT Packet fields. */
+#define SK_RLMT_SPT_DSAP 0x42
+#define SK_RLMT_SPT_SSAP 0x42
+#define SK_RLMT_SPT_CTRL (LLC_UI)
+#define SK_RLMT_SPT_PROTOCOL_ID0 0x00
+#define SK_RLMT_SPT_PROTOCOL_ID1 0x00
+#define SK_RLMT_SPT_PROTOCOL_VERSION_ID 0x00
+#define SK_RLMT_SPT_BPDU_TYPE 0x00
+#define SK_RLMT_SPT_FLAGS 0x00 /* ?? */
+#define SK_RLMT_SPT_ROOT_ID0 0xFF /* Lowest possible priority. */
+#define SK_RLMT_SPT_ROOT_ID1 0xFF /* Lowest possible priority. */
+
+/* Remaining 6 bytes will be the current port address. */
+#define SK_RLMT_SPT_ROOT_PATH_COST0 0x00
+#define SK_RLMT_SPT_ROOT_PATH_COST1 0x00
+#define SK_RLMT_SPT_ROOT_PATH_COST2 0x00
+#define SK_RLMT_SPT_ROOT_PATH_COST3 0x00
+#define SK_RLMT_SPT_BRIDGE_ID0 0xFF /* Lowest possible priority. */
+#define SK_RLMT_SPT_BRIDGE_ID1 0xFF /* Lowest possible priority. */
+
+/* Remaining 6 bytes will be the current port address. */
+#define SK_RLMT_SPT_PORT_ID0 0xFF /* Lowest possible priority. */
+#define SK_RLMT_SPT_PORT_ID1 0xFF /* Lowest possible priority. */
+#define SK_RLMT_SPT_MSG_AGE0 0x00
+#define SK_RLMT_SPT_MSG_AGE1 0x00
+#define SK_RLMT_SPT_MAX_AGE0 0x00
+#define SK_RLMT_SPT_MAX_AGE1 0xFF
+#define SK_RLMT_SPT_HELLO_TIME0 0x00
+#define SK_RLMT_SPT_HELLO_TIME1 0xFF
+#define SK_RLMT_SPT_FWD_DELAY0 0x00
+#define SK_RLMT_SPT_FWD_DELAY1 0x40
+
+/* Size defines. */
+#define SK_RLMT_MIN_PACKET_SIZE 34
+#define SK_RLMT_MAX_PACKET_SIZE (SK_RLMT_MAX_TX_BUF_SIZE)
+#define SK_PACKET_DATA_LEN (SK_RLMT_MAX_PACKET_SIZE - \
+ SK_RLMT_MIN_PACKET_SIZE)
+
+/* ----- RLMT packet types ----- */
+#define SK_PACKET_ANNOUNCE 1 /* Port announcement. */
+#define SK_PACKET_ALIVE 2 /* Alive packet to port. */
+#define SK_PACKET_ADDR_CHANGED 3 /* Port address changed. */
+#define SK_PACKET_CHECK_TX 4 /* Check your tx line. */
+
+#ifdef SK_LITTLE_ENDIAN
+#define SK_U16_TO_NETWORK_ORDER(Val,Addr) { \
+ SK_U8 *_Addr = (SK_U8*)(Addr); \
+ SK_U16 _Val = (SK_U16)(Val); \
+ *_Addr++ = (SK_U8)(_Val >> 8); \
+ *_Addr = (SK_U8)(_Val & 0xFF); \
+}
+#endif /* SK_LITTLE_ENDIAN */
+
+#ifdef SK_BIG_ENDIAN
+#define SK_U16_TO_NETWORK_ORDER(Val,Addr) (*(SK_U16*)(Addr) = (SK_U16)(Val))
+#endif /* SK_BIG_ENDIAN */
+
+#define AUTONEG_FAILED SK_FALSE
+#define AUTONEG_SUCCESS SK_TRUE
+
+
+/* typedefs *******************************************************************/
+
+/* RLMT packet. Length: SK_RLMT_MAX_PACKET_SIZE (60) bytes. */
+typedef struct s_RlmtPacket {
+ SK_U8 DstAddr[SK_MAC_ADDR_LEN];
+ SK_U8 SrcAddr[SK_MAC_ADDR_LEN];
+ SK_U8 TypeLen[2];
+ SK_U8 DSap;
+ SK_U8 SSap;
+ SK_U8 Ctrl;
+ SK_U8 Indicator[7];
+ SK_U8 RlmtPacketType[2];
+ SK_U8 Align1[2];
+ SK_U8 Random[4]; /* Random value of requesting(!) station. */
+ SK_U8 RlmtPacketVersion[2]; /* RLMT Packet version. */
+ SK_U8 Data[SK_PACKET_DATA_LEN];
+} SK_RLMT_PACKET;
+
+typedef struct s_SpTreeRlmtPacket {
+ SK_U8 DstAddr[SK_MAC_ADDR_LEN];
+ SK_U8 SrcAddr[SK_MAC_ADDR_LEN];
+ SK_U8 TypeLen[2];
+ SK_U8 DSap;
+ SK_U8 SSap;
+ SK_U8 Ctrl;
+ SK_U8 ProtocolId[2];
+ SK_U8 ProtocolVersionId;
+ SK_U8 BpduType;
+ SK_U8 Flags;
+ SK_U8 RootId[8];
+ SK_U8 RootPathCost[4];
+ SK_U8 BridgeId[8];
+ SK_U8 PortId[2];
+ SK_U8 MessageAge[2];
+ SK_U8 MaxAge[2];
+ SK_U8 HelloTime[2];
+ SK_U8 ForwardDelay[2];
+} SK_SPTREE_PACKET;
+
+/* global variables ***********************************************************/
+
+SK_MAC_ADDR SkRlmtMcAddr = {{0x01, 0x00, 0x5A, 0x52, 0x4C, 0x4D}};
+SK_MAC_ADDR BridgeMcAddr = {{0x01, 0x80, 0xC2, 0x00, 0x00, 0x00}};
+SK_MAC_ADDR BcAddr = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
+
+/* local variables ************************************************************/
+
+/* None. */
+
+/* functions ******************************************************************/
+
+RLMT_STATIC void SkRlmtCheckSwitch(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 NetIdx);
+RLMT_STATIC void SkRlmtCheckSeg(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_U32 NetIdx);
+RLMT_STATIC void SkRlmtEvtSetNets(
+ SK_AC *pAC,
+ SK_IOC IoC,
+ SK_EVPARA Para);
+
+/******************************************************************************
+ *
+ * SkRlmtInit - initialize data, set state to init
+ *
+ * Description:
+ *
+ * SK_INIT_DATA
+ * ============
+ *
+ * This routine initializes all RLMT-related variables to a known state.
+ * The initial state is SK_RLMT_RS_INIT.
+ * All ports are initialized to SK_RLMT_PS_INIT.
+ *
+ *
+ * SK_INIT_IO
+ * ==========
+ *
+ * Nothing.
+ *
+ *
+ * SK_INIT_RUN
+ * ===========
+ *
+ * Determine the adapter's random value.
+ * Set the hw registers, the "logical MAC address", the
+ * RLMT multicast address, and eventually the BPDU multicast address.
+ *
+ * Context:
+ * init, pageable
+ *
+ * Returns:
+ * Nothing.
+ */
+void SkRlmtInit(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Level) /* Initialization Level */
+{
+ SK_U32 i, j;
+ SK_U64 Random;
+ SK_EVPARA Para;
+ SK_MAC_ADDR VirtualMacAddress;
+ SK_MAC_ADDR PhysicalAMacAddress;
+ SK_BOOL VirtualMacAddressSet;
+ SK_BOOL PhysicalAMacAddressSet;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_INIT,
+ ("RLMT Init level %d.\n", Level))
+
+ switch (Level) {
+ case SK_INIT_DATA: /* Initialize data structures. */
+ SK_MEMSET((char *)&pAC->Rlmt, 0, sizeof(SK_RLMT));
+
+ for (i = 0; i < SK_MAX_MACS; i++) {
+ pAC->Rlmt.Port[i].PortState = SK_RLMT_PS_INIT;
+ pAC->Rlmt.Port[i].LinkDown = SK_TRUE;
+ pAC->Rlmt.Port[i].PortDown = SK_TRUE;
+ pAC->Rlmt.Port[i].PortStarted = SK_FALSE;
+ pAC->Rlmt.Port[i].PortNoRx = SK_FALSE;
+ pAC->Rlmt.Port[i].RootIdSet = SK_FALSE;
+ pAC->Rlmt.Port[i].PortNumber = i;
+ pAC->Rlmt.Port[i].Net = &pAC->Rlmt.Net[0];
+ pAC->Rlmt.Port[i].AddrPort = &pAC->Addr.Port[i];
+ }
+
+ pAC->Rlmt.NumNets = 1;
+ for (i = 0; i < SK_MAX_NETS; i++) {
+ pAC->Rlmt.Net[i].RlmtState = SK_RLMT_RS_INIT;
+ pAC->Rlmt.Net[i].RootIdSet = SK_FALSE;
+ pAC->Rlmt.Net[i].PrefPort = SK_RLMT_DEF_PREF_PORT;
+ pAC->Rlmt.Net[i].Preference = 0xFFFFFFFF; /* Automatic. */
+ /* Just assuming. */
+ pAC->Rlmt.Net[i].ActivePort = pAC->Rlmt.Net[i].PrefPort;
+ pAC->Rlmt.Net[i].RlmtMode = SK_RLMT_DEF_MODE;
+ pAC->Rlmt.Net[i].TimeoutValue = SK_RLMT_DEF_TO_VAL;
+ pAC->Rlmt.Net[i].NetNumber = i;
+ }
+
+ pAC->Rlmt.Net[0].Port[0] = &pAC->Rlmt.Port[0];
+ pAC->Rlmt.Net[0].Port[1] = &pAC->Rlmt.Port[1];
+#if SK_MAX_NETS > 1
+ pAC->Rlmt.Net[1].Port[0] = &pAC->Rlmt.Port[1];
+#endif /* SK_MAX_NETS > 1 */
+ break;
+
+ case SK_INIT_IO: /* GIMacsFound first available here. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_INIT,
+ ("RLMT: %d MACs were detected.\n", pAC->GIni.GIMacsFound))
+
+ pAC->Rlmt.Net[0].NumPorts = pAC->GIni.GIMacsFound;
+
+ /* Initialize HW registers? */
+ if (pAC->GIni.GIMacsFound == 1) {
+ Para.Para32[0] = SK_RLMT_MODE_CLS;
+ Para.Para32[1] = 0;
+ (void)SkRlmtEvent(pAC, IoC, SK_RLMT_MODE_CHANGE, Para);
+ }
+ break;
+
+ case SK_INIT_RUN:
+ /* Ensure RLMT is set to one net. */
+ if (pAC->Rlmt.NumNets > 1) {
+ Para.Para32[0] = 1;
+ Para.Para32[1] = -1;
+ SkRlmtEvtSetNets(pAC, IoC, Para);
+ }
+
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ Random = SkOsGetTime(pAC);
+ *(SK_U32*)&pAC->Rlmt.Port[i].Random = *(SK_U32*)&Random;
+
+ for (j = 0; j < 4; j++) {
+ pAC->Rlmt.Port[i].Random[j] ^= pAC->Rlmt.Port[i].AddrPort->
+ CurrentMacAddress.a[SK_MAC_ADDR_LEN - 1 - j];
+ }
+
+ (void)SkAddrMcClear(pAC, IoC, i, SK_ADDR_PERMANENT | SK_MC_SW_ONLY);
+
+ /* Add RLMT MC address. */
+ (void)SkAddrMcAdd(pAC, IoC, i, &SkRlmtMcAddr, SK_ADDR_PERMANENT);
+
+ if (pAC->Rlmt.Net[0].RlmtMode & SK_RLMT_CHECK_SEG) {
+ /* Add BPDU MC address. */
+ (void)SkAddrMcAdd(pAC, IoC, i, &BridgeMcAddr, SK_ADDR_PERMANENT);
+ }
+
+ (void)SkAddrMcUpdate(pAC, IoC, i);
+ }
+
+ VirtualMacAddressSet = SK_FALSE;
+ /* Read virtual MAC address from Control Register File. */
+ for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
+
+ SK_IN8(IoC, B2_MAC_1 + j, &VirtualMacAddress.a[j]);
+ VirtualMacAddressSet |= VirtualMacAddress.a[j];
+ }
+
+ PhysicalAMacAddressSet = SK_FALSE;
+ /* Read physical MAC address for MAC A from Control Register File. */
+ for (j = 0; j < SK_MAC_ADDR_LEN; j++) {
+
+ SK_IN8(IoC, B2_MAC_2 + j, &PhysicalAMacAddress.a[j]);
+ PhysicalAMacAddressSet |= PhysicalAMacAddress.a[j];
+ }
+
+ /* check if the two mac addresses contain reasonable values */
+ if (!VirtualMacAddressSet || !PhysicalAMacAddressSet) {
+
+ pAC->Rlmt.RlmtOff = SK_TRUE;
+ }
+
+ /* if the two mac addresses are equal switch off the RLMT_PRE_LOOKAHEAD
+ and the RLMT_LOOKAHEAD macros */
+ else if (SK_ADDR_EQUAL(PhysicalAMacAddress.a, VirtualMacAddress.a)) {
+
+ pAC->Rlmt.RlmtOff = SK_TRUE;
+ }
+ else {
+ pAC->Rlmt.RlmtOff = SK_FALSE;
+ }
+ break;
+
+ default: /* error */
+ break;
+ }
+ return;
+} /* SkRlmtInit */
+
+
+/******************************************************************************
+ *
+ * SkRlmtBuildCheckChain - build the check chain
+ *
+ * Description:
+ * This routine builds the local check chain:
+ * - Each port that is up checks the next port.
+ * - The last port that is up checks the first port that is up.
+ *
+ * Notes:
+ * - Currently only local ports are considered when building the chain.
+ * - Currently the SuspectState is just reset;
+ * it would be better to save it ...
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtBuildCheckChain(
+SK_AC *pAC, /* Adapter Context */
+SK_U32 NetIdx) /* Net Number */
+{
+ SK_U32 i;
+ SK_U32 NumMacsUp;
+ SK_RLMT_PORT * FirstMacUp;
+ SK_RLMT_PORT * PrevMacUp;
+
+ FirstMacUp = NULL;
+ PrevMacUp = NULL;
+
+ if (!(pAC->Rlmt.Net[NetIdx].RlmtMode & SK_RLMT_CHECK_LOC_LINK)) {
+ for (i = 0; i < pAC->Rlmt.Net[i].NumPorts; i++) {
+ pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked = 0;
+ }
+ return; /* Done. */
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SkRlmtBuildCheckChain.\n"))
+
+ NumMacsUp = 0;
+
+ for (i = 0; i < pAC->Rlmt.Net[NetIdx].NumPorts; i++) {
+ pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked = 0;
+ pAC->Rlmt.Net[NetIdx].Port[i]->PortsSuspect = 0;
+ pAC->Rlmt.Net[NetIdx].Port[i]->CheckingState &=
+ ~(SK_RLMT_PCS_RX | SK_RLMT_PCS_TX);
+
+ /*
+ * If more than two links are detected we should consider
+ * checking at least two other ports:
+ * 1. the next port that is not LinkDown and
+ * 2. the next port that is not PortDown.
+ */
+ if (!pAC->Rlmt.Net[NetIdx].Port[i]->LinkDown) {
+ if (NumMacsUp == 0) {
+ FirstMacUp = pAC->Rlmt.Net[NetIdx].Port[i];
+ }
+ else {
+ PrevMacUp->PortCheck[
+ pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked].CheckAddr =
+ pAC->Rlmt.Net[NetIdx].Port[i]->AddrPort->CurrentMacAddress;
+ PrevMacUp->PortCheck[
+ PrevMacUp->PortsChecked].SuspectTx = SK_FALSE;
+ PrevMacUp->PortsChecked++;
+ }
+ PrevMacUp = pAC->Rlmt.Net[NetIdx].Port[i];
+ NumMacsUp++;
+ }
+ }
+
+ if (NumMacsUp > 1) {
+ PrevMacUp->PortCheck[PrevMacUp->PortsChecked].CheckAddr =
+ FirstMacUp->AddrPort->CurrentMacAddress;
+ PrevMacUp->PortCheck[PrevMacUp->PortsChecked].SuspectTx =
+ SK_FALSE;
+ PrevMacUp->PortsChecked++;
+ }
+
+#ifdef DEBUG
+ for (i = 0; i < pAC->Rlmt.Net[NetIdx].NumPorts; i++) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Port %d checks %d other ports: %2X.\n", i,
+ pAC->Rlmt.Net[NetIdx].Port[i]->PortsChecked,
+ pAC->Rlmt.Net[NetIdx].Port[i]->PortCheck[0].CheckAddr.a[5]))
+ }
+#endif /* DEBUG */
+
+ return;
+} /* SkRlmtBuildCheckChain */
+
+
+/******************************************************************************
+ *
+ * SkRlmtBuildPacket - build an RLMT packet
+ *
+ * Description:
+ * This routine sets up an RLMT packet.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * NULL or pointer to RLMT mbuf
+ */
+RLMT_STATIC SK_MBUF *SkRlmtBuildPacket(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 PortNumber, /* Sending port */
+SK_U16 PacketType, /* RLMT packet type */
+SK_MAC_ADDR *SrcAddr, /* Source address */
+SK_MAC_ADDR *DestAddr) /* Destination address */
+{
+ int i;
+ SK_U16 Length;
+ SK_MBUF *pMb;
+ SK_RLMT_PACKET *pPacket;
+
+#ifdef DEBUG
+ SK_U8 CheckSrc = 0;
+ SK_U8 CheckDest = 0;
+
+ for (i = 0; i < SK_MAC_ADDR_LEN; ++i) {
+ CheckSrc |= SrcAddr->a[i];
+ CheckDest |= DestAddr->a[i];
+ }
+
+ if ((CheckSrc == 0) || (CheckDest == 0)) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_ERR,
+ ("SkRlmtBuildPacket: Invalid %s%saddr.\n",
+ (CheckSrc == 0 ? "Src" : ""), (CheckDest == 0 ? "Dest" : "")))
+ }
+#endif
+
+ if ((pMb = SkDrvAllocRlmtMbuf(pAC, IoC, SK_RLMT_MAX_PACKET_SIZE)) != NULL) {
+ pPacket = (SK_RLMT_PACKET*)pMb->pData;
+ for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
+ pPacket->DstAddr[i] = DestAddr->a[i];
+ pPacket->SrcAddr[i] = SrcAddr->a[i];
+ }
+ pPacket->DSap = SK_RLMT_DSAP;
+ pPacket->SSap = SK_RLMT_SSAP;
+ pPacket->Ctrl = SK_RLMT_CTRL;
+ pPacket->Indicator[0] = SK_RLMT_INDICATOR0;
+ pPacket->Indicator[1] = SK_RLMT_INDICATOR1;
+ pPacket->Indicator[2] = SK_RLMT_INDICATOR2;
+ pPacket->Indicator[3] = SK_RLMT_INDICATOR3;
+ pPacket->Indicator[4] = SK_RLMT_INDICATOR4;
+ pPacket->Indicator[5] = SK_RLMT_INDICATOR5;
+ pPacket->Indicator[6] = SK_RLMT_INDICATOR6;
+
+ SK_U16_TO_NETWORK_ORDER(PacketType, &pPacket->RlmtPacketType[0]);
+
+ for (i = 0; i < 4; i++) {
+ pPacket->Random[i] = pAC->Rlmt.Port[PortNumber].Random[i];
+ }
+
+ SK_U16_TO_NETWORK_ORDER(
+ SK_RLMT_PACKET_VERSION, &pPacket->RlmtPacketVersion[0]);
+
+ for (i = 0; i < SK_PACKET_DATA_LEN; i++) {
+ pPacket->Data[i] = 0x00;
+ }
+
+ Length = SK_RLMT_MAX_PACKET_SIZE; /* Or smaller. */
+ pMb->Length = Length;
+ pMb->PortIdx = PortNumber;
+ Length -= 14;
+ SK_U16_TO_NETWORK_ORDER(Length, &pPacket->TypeLen[0]);
+
+ if (PacketType == SK_PACKET_ALIVE) {
+ pAC->Rlmt.Port[PortNumber].TxHelloCts++;
+ }
+ }
+
+ return (pMb);
+} /* SkRlmtBuildPacket */
+
+
+/******************************************************************************
+ *
+ * SkRlmtBuildSpanningTreePacket - build spanning tree check packet
+ *
+ * Description:
+ * This routine sets up a BPDU packet for spanning tree check.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * NULL or pointer to RLMT mbuf
+ */
+RLMT_STATIC SK_MBUF *SkRlmtBuildSpanningTreePacket(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 PortNumber) /* Sending port */
+{
+ unsigned i;
+ SK_U16 Length;
+ SK_MBUF *pMb;
+ SK_SPTREE_PACKET *pSPacket;
+
+ if ((pMb = SkDrvAllocRlmtMbuf(pAC, IoC, SK_RLMT_MAX_PACKET_SIZE)) !=
+ NULL) {
+ pSPacket = (SK_SPTREE_PACKET*)pMb->pData;
+ for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
+ pSPacket->DstAddr[i] = BridgeMcAddr.a[i];
+ pSPacket->SrcAddr[i] =
+ pAC->Addr.Port[PortNumber].CurrentMacAddress.a[i];
+ }
+ pSPacket->DSap = SK_RLMT_SPT_DSAP;
+ pSPacket->SSap = SK_RLMT_SPT_SSAP;
+ pSPacket->Ctrl = SK_RLMT_SPT_CTRL;
+
+ pSPacket->ProtocolId[0] = SK_RLMT_SPT_PROTOCOL_ID0;
+ pSPacket->ProtocolId[1] = SK_RLMT_SPT_PROTOCOL_ID1;
+ pSPacket->ProtocolVersionId = SK_RLMT_SPT_PROTOCOL_VERSION_ID;
+ pSPacket->BpduType = SK_RLMT_SPT_BPDU_TYPE;
+ pSPacket->Flags = SK_RLMT_SPT_FLAGS;
+ pSPacket->RootId[0] = SK_RLMT_SPT_ROOT_ID0;
+ pSPacket->RootId[1] = SK_RLMT_SPT_ROOT_ID1;
+ pSPacket->RootPathCost[0] = SK_RLMT_SPT_ROOT_PATH_COST0;
+ pSPacket->RootPathCost[1] = SK_RLMT_SPT_ROOT_PATH_COST1;
+ pSPacket->RootPathCost[2] = SK_RLMT_SPT_ROOT_PATH_COST2;
+ pSPacket->RootPathCost[3] = SK_RLMT_SPT_ROOT_PATH_COST3;
+ pSPacket->BridgeId[0] = SK_RLMT_SPT_BRIDGE_ID0;
+ pSPacket->BridgeId[1] = SK_RLMT_SPT_BRIDGE_ID1;
+
+ /*
+ * Use logical MAC address as bridge ID and filter these packets
+ * on receive.
+ */
+ for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
+ pSPacket->BridgeId[i + 2] = pSPacket->RootId[i + 2] =
+ pAC->Addr.Net[pAC->Rlmt.Port[PortNumber].Net->NetNumber].
+ CurrentMacAddress.a[i];
+ }
+ pSPacket->PortId[0] = SK_RLMT_SPT_PORT_ID0;
+ pSPacket->PortId[1] = SK_RLMT_SPT_PORT_ID1;
+ pSPacket->MessageAge[0] = SK_RLMT_SPT_MSG_AGE0;
+ pSPacket->MessageAge[1] = SK_RLMT_SPT_MSG_AGE1;
+ pSPacket->MaxAge[0] = SK_RLMT_SPT_MAX_AGE0;
+ pSPacket->MaxAge[1] = SK_RLMT_SPT_MAX_AGE1;
+ pSPacket->HelloTime[0] = SK_RLMT_SPT_HELLO_TIME0;
+ pSPacket->HelloTime[1] = SK_RLMT_SPT_HELLO_TIME1;
+ pSPacket->ForwardDelay[0] = SK_RLMT_SPT_FWD_DELAY0;
+ pSPacket->ForwardDelay[1] = SK_RLMT_SPT_FWD_DELAY1;
+
+ Length = SK_RLMT_MAX_PACKET_SIZE; /* Or smaller. */
+ pMb->Length = Length;
+ pMb->PortIdx = PortNumber;
+ Length -= 14;
+ SK_U16_TO_NETWORK_ORDER(Length, &pSPacket->TypeLen[0]);
+
+ pAC->Rlmt.Port[PortNumber].TxSpHelloReqCts++;
+ }
+
+ return (pMb);
+} /* SkRlmtBuildSpanningTreePacket */
+
+
+/******************************************************************************
+ *
+ * SkRlmtSend - build and send check packets
+ *
+ * Description:
+ * Depending on the RLMT state and the checking state, several packets
+ * are sent through the indicated port.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * Nothing.
+ */
+RLMT_STATIC void SkRlmtSend(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 PortNumber) /* Sending port */
+{
+ unsigned j;
+ SK_EVPARA Para;
+ SK_RLMT_PORT *pRPort;
+
+ pRPort = &pAC->Rlmt.Port[PortNumber];
+ if (pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_LOC_LINK) {
+ if (pRPort->CheckingState & (SK_RLMT_PCS_TX | SK_RLMT_PCS_RX)) {
+ /* Port is suspicious. Send the RLMT packet to the RLMT mc addr. */
+ if ((Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, PortNumber,
+ SK_PACKET_ALIVE, &pAC->Addr.Port[PortNumber].CurrentMacAddress,
+ &SkRlmtMcAddr)) != NULL) {
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ }
+ }
+ else {
+ /*
+ * Send a directed RLMT packet to all ports that are
+ * checked by the indicated port.
+ */
+ for (j = 0; j < pRPort->PortsChecked; j++) {
+ if ((Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, PortNumber,
+ SK_PACKET_ALIVE, &pAC->Addr.Port[PortNumber].CurrentMacAddress,
+ &pRPort->PortCheck[j].CheckAddr)) != NULL) {
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ }
+ }
+ }
+ }
+
+ if ((pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_SEG) &&
+ (pAC->Rlmt.Port[PortNumber].Net->CheckingState & SK_RLMT_RCS_SEND_SEG)) {
+ /*
+ * Send a BPDU packet to make a connected switch tell us
+ * the correct root bridge.
+ */
+ if ((Para.pParaPtr =
+ SkRlmtBuildSpanningTreePacket(pAC, IoC, PortNumber)) != NULL) {
+ pAC->Rlmt.Port[PortNumber].Net->CheckingState &= ~SK_RLMT_RCS_SEND_SEG;
+ pRPort->RootIdSet = SK_FALSE;
+
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_TX,
+ ("SkRlmtSend: BPDU Packet on Port %u.\n", PortNumber))
+ }
+ }
+ return;
+} /* SkRlmtSend */
+
+
+/******************************************************************************
+ *
+ * SkRlmtPortReceives - check if port is (going) down and bring it up
+ *
+ * Description:
+ * This routine checks if a port who received a non-BPDU packet
+ * needs to go up or needs to be stopped going down.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * Nothing.
+ */
+RLMT_STATIC void SkRlmtPortReceives(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 PortNumber) /* Port to check */
+{
+ SK_RLMT_PORT *pRPort;
+ SK_EVPARA Para;
+
+ pRPort = &pAC->Rlmt.Port[PortNumber];
+ pRPort->PortNoRx = SK_FALSE;
+
+ if ((pRPort->PortState == SK_RLMT_PS_DOWN) &&
+ !(pRPort->CheckingState & SK_RLMT_PCS_TX)) {
+ /*
+ * Port is marked down (rx), but received a non-BPDU packet.
+ * Bring it up.
+ */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Received on PortDown.\n"))
+
+ pRPort->PortState = SK_RLMT_PS_GOING_UP;
+ pRPort->GuTimeStamp = SkOsGetTime(pAC);
+ Para.Para32[0] = PortNumber;
+ Para.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pRPort->UpTimer, SK_RLMT_PORTUP_TIM_VAL,
+ SKGE_RLMT, SK_RLMT_PORTUP_TIM, Para);
+ pRPort->CheckingState &= ~SK_RLMT_PCS_RX;
+ /* pAC->Rlmt.CheckSwitch = SK_TRUE; */
+ SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
+ } /* PortDown && !SuspectTx */
+ else if (pRPort->CheckingState & SK_RLMT_PCS_RX) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Stop bringing port down.\n"))
+ SkTimerStop(pAC, IoC, &pRPort->DownRxTimer);
+ pRPort->CheckingState &= ~SK_RLMT_PCS_RX;
+ /* pAC->Rlmt.CheckSwitch = SK_TRUE; */
+ SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
+ } /* PortGoingDown */
+
+ return;
+} /* SkRlmtPortReceives */
+
+
+/******************************************************************************
+ *
+ * SkRlmtPacketReceive - receive a packet for closer examination
+ *
+ * Description:
+ * This routine examines a packet more closely than SK_RLMT_LOOKAHEAD.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * Nothing.
+ */
+RLMT_STATIC void SkRlmtPacketReceive(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_MBUF *pMb) /* Received packet */
+{
+#ifdef xDEBUG
+ extern void DumpData(char *p, int size);
+#endif /* DEBUG */
+ int i;
+ unsigned j;
+ SK_U16 PacketType;
+ SK_U32 PortNumber;
+ SK_ADDR_PORT *pAPort;
+ SK_RLMT_PORT *pRPort;
+ SK_RLMT_PACKET *pRPacket;
+ SK_SPTREE_PACKET *pSPacket;
+ SK_EVPARA Para;
+
+ PortNumber = pMb->PortIdx;
+ pAPort = &pAC->Addr.Port[PortNumber];
+ pRPort = &pAC->Rlmt.Port[PortNumber];
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: PortNumber == %d.\n", PortNumber))
+
+ pRPacket = (SK_RLMT_PACKET*)pMb->pData;
+ pSPacket = (SK_SPTREE_PACKET*)pRPacket;
+
+#ifdef xDEBUG
+ DumpData((char *)pRPacket, 32);
+#endif /* DEBUG */
+
+ if ((pRPort->PacketsPerTimeSlot - pRPort->BpduPacketsPerTimeSlot) != 0) {
+ SkRlmtPortReceives(pAC, IoC, PortNumber);
+ }
+
+ /* Check destination address. */
+
+ if (!SK_ADDR_EQUAL(pAPort->CurrentMacAddress.a, pRPacket->DstAddr) &&
+ !SK_ADDR_EQUAL(SkRlmtMcAddr.a, pRPacket->DstAddr) &&
+ !SK_ADDR_EQUAL(BridgeMcAddr.a, pRPacket->DstAddr)) {
+
+ /* Not sent to current MAC or registered MC address => Trash it. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Not for me.\n"))
+
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ return;
+ }
+ else if (SK_ADDR_EQUAL(pAPort->CurrentMacAddress.a, pRPacket->SrcAddr)) {
+
+ /*
+ * Was sent by same port (may happen during port switching
+ * or in case of duplicate MAC addresses).
+ */
+
+ /*
+ * Check for duplicate address here:
+ * If Packet.Random != My.Random => DupAddr.
+ */
+ for (i = 3; i >= 0; i--) {
+ if (pRPort->Random[i] != pRPacket->Random[i]) {
+ break;
+ }
+ }
+
+ /*
+ * CAUTION: Do not check for duplicate MAC address in RLMT Alive Reply
+ * packets (they have the LLC_COMMAND_RESPONSE_BIT set in
+ * pRPacket->SSap).
+ */
+ if (i >= 0 && pRPacket->DSap == SK_RLMT_DSAP &&
+ pRPacket->Ctrl == SK_RLMT_CTRL &&
+ pRPacket->SSap == SK_RLMT_SSAP &&
+ pRPacket->Indicator[0] == SK_RLMT_INDICATOR0 &&
+ pRPacket->Indicator[1] == SK_RLMT_INDICATOR1 &&
+ pRPacket->Indicator[2] == SK_RLMT_INDICATOR2 &&
+ pRPacket->Indicator[3] == SK_RLMT_INDICATOR3 &&
+ pRPacket->Indicator[4] == SK_RLMT_INDICATOR4 &&
+ pRPacket->Indicator[5] == SK_RLMT_INDICATOR5 &&
+ pRPacket->Indicator[6] == SK_RLMT_INDICATOR6) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Duplicate MAC Address.\n"))
+
+ /* Error Log entry. */
+ SK_ERR_LOG(pAC, SK_ERRCL_COMM, SKERR_RLMT_E006, SKERR_RLMT_E006_MSG);
+ }
+ else {
+ /* Simply trash it. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Sent by me.\n"))
+ }
+
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ return;
+ }
+
+ /* Check SuspectTx entries. */
+ if (pRPort->PortsSuspect > 0) {
+ for (j = 0; j < pRPort->PortsChecked; j++) {
+ if (pRPort->PortCheck[j].SuspectTx &&
+ SK_ADDR_EQUAL(
+ pRPacket->SrcAddr, pRPort->PortCheck[j].CheckAddr.a)) {
+ pRPort->PortCheck[j].SuspectTx = SK_FALSE;
+ pRPort->PortsSuspect--;
+ break;
+ }
+ }
+ }
+
+ /* Determine type of packet. */
+ if (pRPacket->DSap == SK_RLMT_DSAP &&
+ pRPacket->Ctrl == SK_RLMT_CTRL &&
+ (pRPacket->SSap & ~LLC_COMMAND_RESPONSE_BIT) == SK_RLMT_SSAP &&
+ pRPacket->Indicator[0] == SK_RLMT_INDICATOR0 &&
+ pRPacket->Indicator[1] == SK_RLMT_INDICATOR1 &&
+ pRPacket->Indicator[2] == SK_RLMT_INDICATOR2 &&
+ pRPacket->Indicator[3] == SK_RLMT_INDICATOR3 &&
+ pRPacket->Indicator[4] == SK_RLMT_INDICATOR4 &&
+ pRPacket->Indicator[5] == SK_RLMT_INDICATOR5 &&
+ pRPacket->Indicator[6] == SK_RLMT_INDICATOR6) {
+
+ /* It's an RLMT packet. */
+ PacketType = (SK_U16)((pRPacket->RlmtPacketType[0] << 8) |
+ pRPacket->RlmtPacketType[1]);
+
+ switch (PacketType) {
+ case SK_PACKET_ANNOUNCE: /* Not yet used. */
+#if 0
+ /* Build the check chain. */
+ SkRlmtBuildCheckChain(pAC);
+#endif /* 0 */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Announce.\n"))
+
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ break;
+
+ case SK_PACKET_ALIVE:
+ if (pRPacket->SSap & LLC_COMMAND_RESPONSE_BIT) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Alive Reply.\n"))
+
+ if (!(pAC->Addr.Port[PortNumber].PromMode & SK_PROM_MODE_LLC) ||
+ SK_ADDR_EQUAL(
+ pRPacket->DstAddr, pAPort->CurrentMacAddress.a)) {
+ /* Obviously we could send something. */
+ if (pRPort->CheckingState & SK_RLMT_PCS_TX) {
+ pRPort->CheckingState &= ~SK_RLMT_PCS_TX;
+ SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
+ }
+
+ if ((pRPort->PortState == SK_RLMT_PS_DOWN) &&
+ !(pRPort->CheckingState & SK_RLMT_PCS_RX)) {
+ pRPort->PortState = SK_RLMT_PS_GOING_UP;
+ pRPort->GuTimeStamp = SkOsGetTime(pAC);
+
+ SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
+
+ Para.Para32[0] = PortNumber;
+ Para.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pRPort->UpTimer,
+ SK_RLMT_PORTUP_TIM_VAL, SKGE_RLMT,
+ SK_RLMT_PORTUP_TIM, Para);
+ }
+ }
+
+ /* Mark sending port as alive? */
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ }
+ else { /* Alive Request Packet. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Alive Request.\n"))
+
+ pRPort->RxHelloCts++;
+
+ /* Answer. */
+ for (i = 0; i < SK_MAC_ADDR_LEN; i++) {
+ pRPacket->DstAddr[i] = pRPacket->SrcAddr[i];
+ pRPacket->SrcAddr[i] =
+ pAC->Addr.Port[PortNumber].CurrentMacAddress.a[i];
+ }
+ pRPacket->SSap |= LLC_COMMAND_RESPONSE_BIT;
+
+ Para.pParaPtr = pMb;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ }
+ break;
+
+ case SK_PACKET_CHECK_TX:
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Check your tx line.\n"))
+
+ /* A port checking us requests us to check our tx line. */
+ pRPort->CheckingState |= SK_RLMT_PCS_TX;
+
+ /* Start PortDownTx timer. */
+ Para.Para32[0] = PortNumber;
+ Para.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pRPort->DownTxTimer,
+ SK_RLMT_PORTDOWN_TIM_VAL, SKGE_RLMT,
+ SK_RLMT_PORTDOWN_TX_TIM, Para);
+
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+
+ if ((Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, PortNumber,
+ SK_PACKET_ALIVE, &pAC->Addr.Port[PortNumber].CurrentMacAddress,
+ &SkRlmtMcAddr)) != NULL) {
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ }
+ break;
+
+ case SK_PACKET_ADDR_CHANGED:
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Address Change.\n"))
+
+ /* Build the check chain. */
+ SkRlmtBuildCheckChain(pAC, pRPort->Net->NetNumber);
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ break;
+
+ default:
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Unknown RLMT packet.\n"))
+
+ /* RA;:;: ??? */
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ }
+ }
+ else if (pSPacket->DSap == SK_RLMT_SPT_DSAP &&
+ pSPacket->Ctrl == SK_RLMT_SPT_CTRL &&
+ (pSPacket->SSap & ~LLC_COMMAND_RESPONSE_BIT) == SK_RLMT_SPT_SSAP) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: BPDU Packet.\n"))
+
+ /* Spanning Tree packet. */
+ pRPort->RxSpHelloCts++;
+
+ if (!SK_ADDR_EQUAL(&pSPacket->RootId[2], &pAC->Addr.Net[pAC->Rlmt.
+ Port[PortNumber].Net->NetNumber].CurrentMacAddress.a[0])) {
+ /*
+ * Check segmentation if a new root bridge is set and
+ * the segmentation check is not currently running.
+ */
+ if (!SK_ADDR_EQUAL(&pSPacket->RootId[2], &pRPort->Root.Id[2]) &&
+ (pAC->Rlmt.Port[PortNumber].Net->LinksUp > 1) &&
+ (pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_SEG)
+ != 0 && (pAC->Rlmt.Port[PortNumber].Net->CheckingState &
+ SK_RLMT_RCS_SEG) == 0) {
+ pAC->Rlmt.Port[PortNumber].Net->CheckingState |=
+ SK_RLMT_RCS_START_SEG | SK_RLMT_RCS_SEND_SEG;
+ }
+
+ /* Store tree view of this port. */
+ for (i = 0; i < 8; i++) {
+ pRPort->Root.Id[i] = pSPacket->RootId[i];
+ }
+ pRPort->RootIdSet = SK_TRUE;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_DUMP,
+ ("Root ID %d: %02x %02x %02x %02x %02x %02x %02x %02x.\n",
+ PortNumber,
+ pRPort->Root.Id[0], pRPort->Root.Id[1],
+ pRPort->Root.Id[2], pRPort->Root.Id[3],
+ pRPort->Root.Id[4], pRPort->Root.Id[5],
+ pRPort->Root.Id[6], pRPort->Root.Id[7]))
+ }
+
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ if ((pAC->Rlmt.Port[PortNumber].Net->CheckingState &
+ SK_RLMT_RCS_REPORT_SEG) != 0) {
+ SkRlmtCheckSeg(pAC, IoC, pAC->Rlmt.Port[PortNumber].Net->NetNumber);
+ }
+ }
+ else {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_RX,
+ ("SkRlmtPacketReceive: Unknown Packet Type.\n"))
+
+ /* Unknown packet. */
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ }
+ return;
+} /* SkRlmtPacketReceive */
+
+
+/******************************************************************************
+ *
+ * SkRlmtCheckPort - check if a port works
+ *
+ * Description:
+ * This routine checks if a port whose link is up received something
+ * and if it seems to transmit successfully.
+ *
+ * # PortState: PsInit, PsLinkDown, PsDown, PsGoingUp, PsUp
+ * # PortCheckingState (Bitfield): ChkTx, ChkRx, ChkSeg
+ * # RlmtCheckingState (Bitfield): ChkSeg, StartChkSeg, ReportSeg
+ *
+ * if (Rx - RxBpdu == 0) { # No rx.
+ * if (state == PsUp) {
+ * PortCheckingState |= ChkRx
+ * }
+ * if (ModeCheckSeg && (Timeout ==
+ * TO_SHORTEN(RLMT_DEFAULT_TIMEOUT))) {
+ * RlmtCheckingState |= ChkSeg)
+ * PortCheckingState |= ChkSeg
+ * }
+ * NewTimeout = TO_SHORTEN(Timeout)
+ * if (NewTimeout < RLMT_MIN_TIMEOUT) {
+ * NewTimeout = RLMT_MIN_TIMEOUT
+ * PortState = PsDown
+ * ...
+ * }
+ * }
+ * else { # something was received
+ * # Set counter to 0 at LinkDown?
+ * # No - rx may be reported after LinkDown ???
+ * PortCheckingState &= ~ChkRx
+ * NewTimeout = RLMT_DEFAULT_TIMEOUT
+ * if (RxAck == 0) {
+ * possible reasons:
+ * is my tx line bad? --
+ * send RLMT multicast and report
+ * back internally? (only possible
+ * between ports on same adapter)
+ * }
+ * if (RxChk == 0) {
+ * possible reasons:
+ * - tx line of port set to check me
+ * maybe bad
+ * - no other port/adapter available or set
+ * to check me
+ * - adapter checking me has a longer
+ * timeout
+ * ??? anything that can be done here?
+ * }
+ * }
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * New timeout value.
+ */
+RLMT_STATIC SK_U32 SkRlmtCheckPort(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 PortNumber) /* Port to check */
+{
+ unsigned i;
+ SK_U32 NewTimeout;
+ SK_RLMT_PORT *pRPort;
+ SK_EVPARA Para;
+
+ pRPort = &pAC->Rlmt.Port[PortNumber];
+
+ if ((pRPort->PacketsPerTimeSlot - pRPort->BpduPacketsPerTimeSlot) == 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SkRlmtCheckPort %d: No (%d) receives in last time slot.\n",
+ PortNumber, pRPort->PacketsPerTimeSlot))
+
+ /*
+ * Check segmentation if there was no receive at least twice
+ * in a row (PortNoRx is already set) and the segmentation
+ * check is not currently running.
+ */
+
+ if (pRPort->PortNoRx && (pAC->Rlmt.Port[PortNumber].Net->LinksUp > 1) &&
+ (pAC->Rlmt.Port[PortNumber].Net->RlmtMode & SK_RLMT_CHECK_SEG) &&
+ !(pAC->Rlmt.Port[PortNumber].Net->CheckingState & SK_RLMT_RCS_SEG)) {
+ pAC->Rlmt.Port[PortNumber].Net->CheckingState |=
+ SK_RLMT_RCS_START_SEG | SK_RLMT_RCS_SEND_SEG;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SkRlmtCheckPort: PortsSuspect %d, PcsRx %d.\n",
+ pRPort->PortsSuspect, pRPort->CheckingState & SK_RLMT_PCS_RX))
+
+ if (pRPort->PortState != SK_RLMT_PS_DOWN) {
+ NewTimeout = TO_SHORTEN(pAC->Rlmt.Port[PortNumber].Net->TimeoutValue);
+ if (NewTimeout < SK_RLMT_MIN_TO_VAL) {
+ NewTimeout = SK_RLMT_MIN_TO_VAL;
+ }
+
+ if (!(pRPort->CheckingState & SK_RLMT_PCS_RX)) {
+ Para.Para32[0] = PortNumber;
+ pRPort->CheckingState |= SK_RLMT_PCS_RX;
+
+ /*
+ * What shall we do if the port checked by this one receives
+ * our request frames? What's bad - our rx line or his tx line?
+ */
+ Para.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pRPort->DownRxTimer,
+ SK_RLMT_PORTDOWN_TIM_VAL, SKGE_RLMT,
+ SK_RLMT_PORTDOWN_RX_TIM, Para);
+
+ for (i = 0; i < pRPort->PortsChecked; i++) {
+ if (pRPort->PortCheck[i].SuspectTx) {
+ continue;
+ }
+ pRPort->PortCheck[i].SuspectTx = SK_TRUE;
+ pRPort->PortsSuspect++;
+ if ((Para.pParaPtr =
+ SkRlmtBuildPacket(pAC, IoC, PortNumber, SK_PACKET_CHECK_TX,
+ &pAC->Addr.Port[PortNumber].CurrentMacAddress,
+ &pRPort->PortCheck[i].CheckAddr)) != NULL) {
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ }
+ }
+ }
+ }
+ else { /* PortDown -- or all partners suspect. */
+ NewTimeout = SK_RLMT_DEF_TO_VAL;
+ }
+ pRPort->PortNoRx = SK_TRUE;
+ }
+ else { /* A non-BPDU packet was received. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SkRlmtCheckPort %d: %d (%d) receives in last time slot.\n",
+ PortNumber,
+ pRPort->PacketsPerTimeSlot - pRPort->BpduPacketsPerTimeSlot,
+ pRPort->PacketsPerTimeSlot))
+
+ SkRlmtPortReceives(pAC, IoC, PortNumber);
+ if (pAC->Rlmt.CheckSwitch) {
+ SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
+ }
+
+ NewTimeout = SK_RLMT_DEF_TO_VAL;
+ }
+
+ return (NewTimeout);
+} /* SkRlmtCheckPort */
+
+
+/******************************************************************************
+ *
+ * SkRlmtSelectBcRx - select new active port, criteria 1 (CLP)
+ *
+ * Description:
+ * This routine selects the port that received a broadcast frame
+ * substantially later than all other ports.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * SK_BOOL
+ */
+RLMT_STATIC SK_BOOL SkRlmtSelectBcRx(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Active, /* Active port */
+SK_U32 PrefPort, /* Preferred port */
+SK_U32 *pSelect) /* New active port */
+{
+ SK_U64 BcTimeStamp;
+ SK_U32 i;
+ SK_BOOL PortFound;
+
+ BcTimeStamp = 0; /* Not totally necessary, but feeling better. */
+ PortFound = SK_FALSE;
+
+ /* Select port with the latest TimeStamp. */
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("TimeStamp Port %d (Down: %d, NoRx: %d): %08x %08x.\n",
+ i,
+ pAC->Rlmt.Port[i].PortDown, pAC->Rlmt.Port[i].PortNoRx,
+ *((SK_U32*)(&pAC->Rlmt.Port[i].BcTimeStamp) + OFFS_HI32),
+ *((SK_U32*)(&pAC->Rlmt.Port[i].BcTimeStamp) + OFFS_LO32)))
+
+ if (!pAC->Rlmt.Port[i].PortDown && !pAC->Rlmt.Port[i].PortNoRx) {
+ if (!PortFound || pAC->Rlmt.Port[i].BcTimeStamp > BcTimeStamp) {
+ BcTimeStamp = pAC->Rlmt.Port[i].BcTimeStamp;
+ *pSelect = i;
+ PortFound = SK_TRUE;
+ }
+ }
+ }
+
+ if (PortFound) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Port %d received the last broadcast.\n", *pSelect))
+
+ /* Look if another port's time stamp is similar. */
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ if (i == *pSelect) {
+ continue;
+ }
+ if (!pAC->Rlmt.Port[i].PortDown && !pAC->Rlmt.Port[i].PortNoRx &&
+ (pAC->Rlmt.Port[i].BcTimeStamp >
+ BcTimeStamp - SK_RLMT_BC_DELTA ||
+ pAC->Rlmt.Port[i].BcTimeStamp +
+ SK_RLMT_BC_DELTA > BcTimeStamp)) {
+ PortFound = SK_FALSE;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Port %d received a broadcast at a similar time.\n", i))
+ break;
+ }
+ }
+ }
+
+#ifdef DEBUG
+ if (PortFound) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SELECT_BCRX found Port %d receiving the substantially "
+ "latest broadcast (%u).\n",
+ *pSelect,
+ BcTimeStamp - pAC->Rlmt.Port[1 - *pSelect].BcTimeStamp))
+ }
+#endif /* DEBUG */
+
+ return (PortFound);
+} /* SkRlmtSelectBcRx */
+
+
+/******************************************************************************
+ *
+ * SkRlmtSelectNotSuspect - select new active port, criteria 2 (CLP)
+ *
+ * Description:
+ * This routine selects a good port (it is PortUp && !SuspectRx).
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * SK_BOOL
+ */
+RLMT_STATIC SK_BOOL SkRlmtSelectNotSuspect(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Active, /* Active port */
+SK_U32 PrefPort, /* Preferred port */
+SK_U32 *pSelect) /* New active port */
+{
+ SK_U32 i;
+ SK_BOOL PortFound;
+
+ PortFound = SK_FALSE;
+
+ /* Select first port that is PortUp && !SuspectRx. */
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ if (!pAC->Rlmt.Port[i].PortDown &&
+ !(pAC->Rlmt.Port[i].CheckingState & SK_RLMT_PCS_RX)) {
+ *pSelect = i;
+ if (!pAC->Rlmt.Port[Active].PortDown &&
+ !(pAC->Rlmt.Port[Active].CheckingState & SK_RLMT_PCS_RX)) {
+ *pSelect = Active;
+ }
+ if (!pAC->Rlmt.Port[PrefPort].PortDown &&
+ !(pAC->Rlmt.Port[PrefPort].CheckingState & SK_RLMT_PCS_RX)) {
+ *pSelect = PrefPort;
+ }
+ PortFound = SK_TRUE;
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SELECT_NOTSUSPECT found Port %d up and not check RX.\n",
+ *pSelect))
+ break;
+ }
+ }
+ return (PortFound);
+} /* SkRlmtSelectNotSuspect */
+
+
+/******************************************************************************
+ *
+ * SkRlmtSelectUp - select new active port, criteria 3, 4 (CLP)
+ *
+ * Description:
+ * This routine selects a port that is up.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * SK_BOOL
+ */
+RLMT_STATIC SK_BOOL SkRlmtSelectUp(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Active, /* Active port */
+SK_U32 PrefPort, /* Preferred port */
+SK_U32 *pSelect, /* New active port */
+SK_BOOL AutoNegDone) /* Successfully auto-negotiated? */
+{
+ SK_U32 i;
+ SK_BOOL PortFound;
+
+ PortFound = SK_FALSE;
+
+ /* Select first port that is PortUp. */
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_UP &&
+ pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
+ *pSelect = i;
+ if (pAC->Rlmt.Port[Active].PortState == SK_RLMT_PS_UP &&
+ pAC->GIni.GP[Active].PAutoNegFail != AutoNegDone) {
+ *pSelect = Active;
+ }
+ if (pAC->Rlmt.Port[PrefPort].PortState == SK_RLMT_PS_UP &&
+ pAC->GIni.GP[PrefPort].PAutoNegFail != AutoNegDone) {
+ *pSelect = PrefPort;
+ }
+ PortFound = SK_TRUE;
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SELECT_UP found Port %d up.\n", *pSelect))
+ break;
+ }
+ }
+ return (PortFound);
+} /* SkRlmtSelectUp */
+
+
+/******************************************************************************
+ *
+ * SkRlmtSelectGoingUp - select new active port, criteria 5, 6 (CLP)
+ *
+ * Description:
+ * This routine selects the port that is going up for the longest time.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * SK_BOOL
+ */
+RLMT_STATIC SK_BOOL SkRlmtSelectGoingUp(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Active, /* Active port */
+SK_U32 PrefPort, /* Preferred port */
+SK_U32 *pSelect, /* New active port */
+SK_BOOL AutoNegDone) /* Successfully auto-negotiated? */
+{
+ SK_U64 GuTimeStamp;
+ SK_U32 i;
+ SK_BOOL PortFound;
+
+ GuTimeStamp = 0;
+ PortFound = SK_FALSE;
+
+ /* Select port that is PortGoingUp for the longest time. */
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_GOING_UP &&
+ pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
+ GuTimeStamp = pAC->Rlmt.Port[i].GuTimeStamp;
+ *pSelect = i;
+ PortFound = SK_TRUE;
+ break;
+ }
+ }
+
+ if (!PortFound) {
+ return (SK_FALSE);
+ }
+
+ for (i = *pSelect + 1; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_GOING_UP &&
+ pAC->Rlmt.Port[i].GuTimeStamp < GuTimeStamp &&
+ pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
+ GuTimeStamp = pAC->Rlmt.Port[i].GuTimeStamp;
+ *pSelect = i;
+ }
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SELECT_GOINGUP found Port %d going up.\n", *pSelect))
+ return (SK_TRUE);
+} /* SkRlmtSelectGoingUp */
+
+
+/******************************************************************************
+ *
+ * SkRlmtSelectDown - select new active port, criteria 7, 8 (CLP)
+ *
+ * Description:
+ * This routine selects a port that is down.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * SK_BOOL
+ */
+RLMT_STATIC SK_BOOL SkRlmtSelectDown(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Active, /* Active port */
+SK_U32 PrefPort, /* Preferred port */
+SK_U32 *pSelect, /* New active port */
+SK_BOOL AutoNegDone) /* Successfully auto-negotiated? */
+{
+ SK_U32 i;
+ SK_BOOL PortFound;
+
+ PortFound = SK_FALSE;
+
+ /* Select first port that is PortDown. */
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ if (pAC->Rlmt.Port[i].PortState == SK_RLMT_PS_DOWN &&
+ pAC->GIni.GP[i].PAutoNegFail != AutoNegDone) {
+ *pSelect = i;
+ if (pAC->Rlmt.Port[Active].PortState == SK_RLMT_PS_DOWN &&
+ pAC->GIni.GP[Active].PAutoNegFail != AutoNegDone) {
+ *pSelect = Active;
+ }
+ if (pAC->Rlmt.Port[PrefPort].PortState == SK_RLMT_PS_DOWN &&
+ pAC->GIni.GP[PrefPort].PAutoNegFail != AutoNegDone) {
+ *pSelect = PrefPort;
+ }
+ PortFound = SK_TRUE;
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SELECT_DOWN found Port %d down.\n", *pSelect))
+ break;
+ }
+ }
+ return (PortFound);
+} /* SkRlmtSelectDown */
+
+
+/******************************************************************************
+ *
+ * SkRlmtCheckSwitch - select new active port and switch to it
+ *
+ * Description:
+ * This routine decides which port should be the active one and queues
+ * port switching if necessary.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * Nothing.
+ */
+RLMT_STATIC void SkRlmtCheckSwitch(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 NetIdx) /* Net index */
+{
+ SK_EVPARA Para;
+ SK_U32 Active;
+ SK_U32 PrefPort;
+ SK_U32 i;
+ SK_BOOL PortFound;
+
+ Active = pAC->Rlmt.Net[NetIdx].ActivePort; /* Index of active port. */
+ PrefPort = pAC->Rlmt.Net[NetIdx].PrefPort; /* Index of preferred port. */
+ PortFound = SK_FALSE;
+ pAC->Rlmt.CheckSwitch = SK_FALSE;
+
+#if 0 /* RW 2001/10/18 - active port becomes always prefered one */
+ if (pAC->Rlmt.Net[NetIdx].Preference == 0xFFFFFFFF) { /* Automatic */
+ /* disable auto-fail back */
+ PrefPort = Active;
+ }
+#endif
+
+ if (pAC->Rlmt.Net[NetIdx].LinksUp == 0) {
+ /* Last link went down - shut down the net. */
+ pAC->Rlmt.Net[NetIdx].RlmtState = SK_RLMT_RS_NET_DOWN;
+ Para.Para32[0] = SK_RLMT_NET_DOWN_TEMP;
+ Para.Para32[1] = NetIdx;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_NET_DOWN, Para);
+
+ Para.Para32[0] = pAC->Rlmt.Net[NetIdx].
+ Port[pAC->Rlmt.Net[NetIdx].ActivePort]->PortNumber;
+ Para.Para32[1] = NetIdx;
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_DOWN, Para);
+ return;
+ } /* pAC->Rlmt.LinksUp == 0 */
+ else if (pAC->Rlmt.Net[NetIdx].LinksUp == 1 &&
+ pAC->Rlmt.Net[NetIdx].RlmtState == SK_RLMT_RS_NET_DOWN) {
+ /* First link came up - get the net up. */
+ pAC->Rlmt.Net[NetIdx].RlmtState = SK_RLMT_RS_NET_UP;
+
+ /*
+ * If pAC->Rlmt.ActivePort != Para.Para32[0],
+ * the DRV switches to the port that came up.
+ */
+ for (i = 0; i < pAC->Rlmt.Net[NetIdx].NumPorts; i++) {
+ if (!pAC->Rlmt.Net[NetIdx].Port[i]->LinkDown) {
+ if (!pAC->Rlmt.Net[NetIdx].Port[Active]->LinkDown) {
+ i = Active;
+ }
+ if (!pAC->Rlmt.Net[NetIdx].Port[PrefPort]->LinkDown) {
+ i = PrefPort;
+ }
+ PortFound = SK_TRUE;
+ break;
+ }
+ }
+
+ if (PortFound) {
+ Para.Para32[0] = pAC->Rlmt.Net[NetIdx].Port[i]->PortNumber;
+ Para.Para32[1] = NetIdx;
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_UP, Para);
+
+ pAC->Rlmt.Net[NetIdx].ActivePort = i;
+ Para.Para32[0] = pAC->Rlmt.Net[NetIdx].Port[i]->PortNumber;
+ Para.Para32[1] = NetIdx;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_NET_UP, Para);
+
+ if ((pAC->Rlmt.Net[NetIdx].RlmtMode & SK_RLMT_TRANSPARENT) == 0 &&
+ (Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC,
+ pAC->Rlmt.Net[NetIdx].Port[i]->PortNumber,
+ SK_PACKET_ANNOUNCE, &pAC->Addr.Net[NetIdx].
+ CurrentMacAddress, &SkRlmtMcAddr)) != NULL) {
+ /*
+ * Send announce packet to RLMT multicast address to force
+ * switches to learn the new location of the logical MAC address.
+ */
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ }
+ }
+ else {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E007, SKERR_RLMT_E007_MSG);
+ }
+
+ return;
+ } /* LinksUp == 1 && RlmtState == SK_RLMT_RS_NET_DOWN */
+ else { /* Cannot be reached in dual-net mode. */
+ Para.Para32[0] = Active;
+
+ /*
+ * Preselection:
+ * If RLMT Mode != CheckLinkState
+ * select port that received a broadcast frame substantially later
+ * than all other ports
+ * else select first port that is not SuspectRx
+ * else select first port that is PortUp
+ * else select port that is PortGoingUp for the longest time
+ * else select first port that is PortDown
+ * else stop.
+ *
+ * For the preselected port:
+ * If ActivePort is equal in quality, select ActivePort.
+ *
+ * If PrefPort is equal in quality, select PrefPort.
+ *
+ * If ActivePort != SelectedPort,
+ * If old ActivePort is LinkDown,
+ * SwitchHard
+ * else
+ * SwitchSoft
+ */
+ /* check of ChgBcPrio flag added */
+ if ((pAC->Rlmt.Net[0].RlmtMode != SK_RLMT_MODE_CLS) &&
+ (!pAC->Rlmt.Net[0].ChgBcPrio)) {
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectBcRx(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1]);
+ }
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectNotSuspect(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1]);
+ }
+ } /* pAC->Rlmt.RlmtMode != SK_RLMT_MODE_CLS */
+
+ /* with changed priority for last broadcast received */
+ if ((pAC->Rlmt.Net[0].RlmtMode != SK_RLMT_MODE_CLS) &&
+ (pAC->Rlmt.Net[0].ChgBcPrio)) {
+ if (!PortFound) {
+ PortFound = SkRlmtSelectNotSuspect(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1]);
+ }
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectBcRx(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1]);
+ }
+ } /* pAC->Rlmt.RlmtMode != SK_RLMT_MODE_CLS */
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectUp(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_SUCCESS);
+ }
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectUp(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_FAILED);
+ }
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectGoingUp(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_SUCCESS);
+ }
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectGoingUp(
+ pAC, IoC, Active, PrefPort, &Para.Para32[1], AUTONEG_FAILED);
+ }
+
+ if (pAC->Rlmt.Net[0].RlmtMode != SK_RLMT_MODE_CLS) {
+ if (!PortFound) {
+ PortFound = SkRlmtSelectDown(pAC, IoC,
+ Active, PrefPort, &Para.Para32[1], AUTONEG_SUCCESS);
+ }
+
+ if (!PortFound) {
+ PortFound = SkRlmtSelectDown(pAC, IoC,
+ Active, PrefPort, &Para.Para32[1], AUTONEG_FAILED);
+ }
+ } /* pAC->Rlmt.RlmtMode != SK_RLMT_MODE_CLS */
+
+ if (PortFound) {
+
+ if (Para.Para32[1] != Active) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Active: %d, Para1: %d.\n", Active, Para.Para32[1]))
+ pAC->Rlmt.Net[NetIdx].ActivePort = Para.Para32[1];
+ Para.Para32[0] = pAC->Rlmt.Net[NetIdx].
+ Port[Para.Para32[0]]->PortNumber;
+ Para.Para32[1] = pAC->Rlmt.Net[NetIdx].
+ Port[Para.Para32[1]]->PortNumber;
+ SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[1], SK_LED_ACTIVE);
+ if (pAC->Rlmt.Port[Active].LinkDown) {
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_SWITCH_HARD, Para);
+ }
+ else {
+ SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_STANDBY);
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_SWITCH_SOFT, Para);
+ }
+ Para.Para32[1] = NetIdx;
+ Para.Para32[0] =
+ pAC->Rlmt.Net[NetIdx].Port[Para.Para32[0]]->PortNumber;
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_DOWN, Para);
+ Para.Para32[0] = pAC->Rlmt.Net[NetIdx].
+ Port[pAC->Rlmt.Net[NetIdx].ActivePort]->PortNumber;
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_ACTIVE_UP, Para);
+ if ((pAC->Rlmt.Net[NetIdx].RlmtMode & SK_RLMT_TRANSPARENT) == 0 &&
+ (Para.pParaPtr = SkRlmtBuildPacket(pAC, IoC, Para.Para32[0],
+ SK_PACKET_ANNOUNCE, &pAC->Addr.Net[NetIdx].CurrentMacAddress,
+ &SkRlmtMcAddr)) != NULL) {
+ /*
+ * Send announce packet to RLMT multicast address to force
+ * switches to learn the new location of the logical
+ * MAC address.
+ */
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para);
+ } /* (Para.pParaPtr = SkRlmtBuildPacket(...)) != NULL */
+ } /* Para.Para32[1] != Active */
+ } /* PortFound */
+ else {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E004, SKERR_RLMT_E004_MSG);
+ }
+ } /* LinksUp > 1 || LinksUp == 1 && RlmtState != SK_RLMT_RS_NET_DOWN */
+ return;
+} /* SkRlmtCheckSwitch */
+
+
+/******************************************************************************
+ *
+ * SkRlmtCheckSeg - Report if segmentation is detected
+ *
+ * Description:
+ * This routine checks if the ports see different root bridges and reports
+ * segmentation in such a case.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * Nothing.
+ */
+RLMT_STATIC void SkRlmtCheckSeg(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 NetIdx) /* Net number */
+{
+ SK_EVPARA Para;
+ SK_RLMT_NET *pNet;
+ SK_U32 i, j;
+ SK_BOOL Equal;
+
+ pNet = &pAC->Rlmt.Net[NetIdx];
+ pNet->RootIdSet = SK_FALSE;
+ Equal = SK_TRUE;
+
+ for (i = 0; i < pNet->NumPorts; i++) {
+ if (pNet->Port[i]->LinkDown || !pNet->Port[i]->RootIdSet) {
+ continue;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_DUMP,
+ ("Root ID %d: %02x %02x %02x %02x %02x %02x %02x %02x.\n", i,
+ pNet->Port[i]->Root.Id[0], pNet->Port[i]->Root.Id[1],
+ pNet->Port[i]->Root.Id[2], pNet->Port[i]->Root.Id[3],
+ pNet->Port[i]->Root.Id[4], pNet->Port[i]->Root.Id[5],
+ pNet->Port[i]->Root.Id[6], pNet->Port[i]->Root.Id[7]))
+
+ if (!pNet->RootIdSet) {
+ pNet->Root = pNet->Port[i]->Root;
+ pNet->RootIdSet = SK_TRUE;
+ continue;
+ }
+
+ for (j = 0; j < 8; j ++) {
+ Equal &= pNet->Port[i]->Root.Id[j] == pNet->Root.Id[j];
+ if (!Equal) {
+ break;
+ }
+ }
+
+ if (!Equal) {
+ SK_ERR_LOG(pAC, SK_ERRCL_COMM, SKERR_RLMT_E005, SKERR_RLMT_E005_MSG);
+ Para.Para32[0] = NetIdx;
+ Para.Para32[1] = (SK_U32)-1;
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_SEGMENTATION, Para);
+
+ pNet->CheckingState &= ~SK_RLMT_RCS_REPORT_SEG;
+
+ /* 2000-03-06 RA: New. */
+ Para.Para32[0] = NetIdx;
+ Para.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pNet->SegTimer, SK_RLMT_SEG_TO_VAL,
+ SKGE_RLMT, SK_RLMT_SEG_TIM, Para);
+ break;
+ }
+ } /* for (i = 0; i < pNet->NumPorts; i++) */
+
+ /* 2000-03-06 RA: Moved here. */
+ /* Segmentation check not running anymore. */
+ pNet->CheckingState &= ~SK_RLMT_RCS_SEG;
+
+} /* SkRlmtCheckSeg */
+
+
+/******************************************************************************
+ *
+ * SkRlmtPortStart - initialize port variables and start port
+ *
+ * Description:
+ * This routine initializes a port's variables and issues a PORT_START
+ * to the HWAC module. This handles retries if the start fails or the
+ * link eventually goes down.
+ *
+ * Context:
+ * runtime, pageable?
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtPortStart(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 PortNumber) /* Port number */
+{
+ SK_EVPARA Para;
+
+ pAC->Rlmt.Port[PortNumber].PortState = SK_RLMT_PS_LINK_DOWN;
+ pAC->Rlmt.Port[PortNumber].PortStarted = SK_TRUE;
+ pAC->Rlmt.Port[PortNumber].LinkDown = SK_TRUE;
+ pAC->Rlmt.Port[PortNumber].PortDown = SK_TRUE;
+ pAC->Rlmt.Port[PortNumber].CheckingState = 0;
+ pAC->Rlmt.Port[PortNumber].RootIdSet = SK_FALSE;
+ Para.Para32[0] = PortNumber;
+ Para.Para32[1] = (SK_U32)-1;
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_START, Para);
+} /* SkRlmtPortStart */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtPortStartTim - PORT_START_TIM
+ *
+ * Description:
+ * This routine handles PORT_START_TIM events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtPortStartTim(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
+{
+ SK_U32 i;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTSTART_TIMEOUT Port %d Event BEGIN.\n", Para.Para32[0]))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTSTART_TIMEOUT Event EMPTY.\n"))
+ return;
+ }
+
+ /*
+ * Used to start non-preferred ports if the preferred one
+ * does not come up.
+ * This timeout needs only be set when starting the first
+ * (preferred) port.
+ */
+ if (pAC->Rlmt.Port[Para.Para32[0]].LinkDown) {
+ /* PORT_START failed. */
+ for (i = 0; i < pAC->Rlmt.Port[Para.Para32[0]].Net->NumPorts; i++) {
+ if (!pAC->Rlmt.Port[Para.Para32[0]].Net->Port[i]->PortStarted) {
+ SkRlmtPortStart(pAC, IoC,
+ pAC->Rlmt.Port[Para.Para32[0]].Net->Port[i]->PortNumber);
+ }
+ }
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTSTART_TIMEOUT Event END.\n"))
+} /* SkRlmtEvtPortStartTim */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtLinkUp - LINK_UP
+ *
+ * Description:
+ * This routine handles LLINK_UP events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtLinkUp(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 Undefined */
+{
+ SK_U32 i;
+ SK_RLMT_PORT *pRPort;
+ SK_EVPARA Para2;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_LINK_UP Port %d Event BEGIN.\n", Para.Para32[0]))
+
+ pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
+ if (!pRPort->PortStarted) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E008, SKERR_RLMT_E008_MSG);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_LINK_UP Event EMPTY.\n"))
+ return;
+ }
+
+ if (!pRPort->LinkDown) {
+ /* RA;:;: Any better solution? */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_LINK_UP Event EMPTY.\n"))
+ return;
+ }
+
+ SkTimerStop(pAC, IoC, &pRPort->UpTimer);
+ SkTimerStop(pAC, IoC, &pRPort->DownRxTimer);
+ SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
+
+ /* Do something if timer already fired? */
+
+ pRPort->LinkDown = SK_FALSE;
+ pRPort->PortState = SK_RLMT_PS_GOING_UP;
+ pRPort->GuTimeStamp = SkOsGetTime(pAC);
+ pRPort->BcTimeStamp = 0;
+ pRPort->Net->LinksUp++;
+ if (pRPort->Net->LinksUp == 1) {
+ SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_ACTIVE);
+ }
+ else {
+ SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_STANDBY);
+ }
+
+ for (i = 0; i < pRPort->Net->NumPorts; i++) {
+ if (!pRPort->Net->Port[i]->PortStarted) {
+ SkRlmtPortStart(pAC, IoC, pRPort->Net->Port[i]->PortNumber);
+ }
+ }
+
+ SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
+
+ if (pRPort->Net->LinksUp >= 2) {
+ if (pRPort->Net->RlmtMode & SK_RLMT_CHECK_LOC_LINK) {
+ /* Build the check chain. */
+ SkRlmtBuildCheckChain(pAC, pRPort->Net->NetNumber);
+ }
+ }
+
+ /* If the first link comes up, start the periodical RLMT timeout. */
+ if (pRPort->Net->NumPorts > 1 && pRPort->Net->LinksUp == 1 &&
+ (pRPort->Net->RlmtMode & SK_RLMT_CHECK_OTHERS) != 0) {
+ Para2.Para32[0] = pRPort->Net->NetNumber;
+ Para2.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pRPort->Net->LocTimer,
+ pRPort->Net->TimeoutValue, SKGE_RLMT, SK_RLMT_TIM, Para2);
+ }
+
+ Para2 = Para;
+ Para2.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pRPort->UpTimer, SK_RLMT_PORTUP_TIM_VAL,
+ SKGE_RLMT, SK_RLMT_PORTUP_TIM, Para2);
+
+ /* Later: if (pAC->Rlmt.RlmtMode & SK_RLMT_CHECK_LOC_LINK) && */
+ if ((pRPort->Net->RlmtMode & SK_RLMT_TRANSPARENT) == 0 &&
+ (pRPort->Net->RlmtMode & SK_RLMT_CHECK_LINK) != 0 &&
+ (Para2.pParaPtr =
+ SkRlmtBuildPacket(pAC, IoC, Para.Para32[0], SK_PACKET_ANNOUNCE,
+ &pAC->Addr.Port[Para.Para32[0]].CurrentMacAddress, &SkRlmtMcAddr)
+ ) != NULL) {
+ /* Send "new" packet to RLMT multicast address. */
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para2);
+ }
+
+ if (pRPort->Net->RlmtMode & SK_RLMT_CHECK_SEG) {
+ if ((Para2.pParaPtr =
+ SkRlmtBuildSpanningTreePacket(pAC, IoC, Para.Para32[0])) != NULL) {
+ pAC->Rlmt.Port[Para.Para32[0]].RootIdSet = SK_FALSE;
+ pRPort->Net->CheckingState |=
+ SK_RLMT_RCS_SEG | SK_RLMT_RCS_REPORT_SEG;
+
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para2);
+
+ Para.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pRPort->Net->SegTimer,
+ SK_RLMT_SEG_TO_VAL, SKGE_RLMT, SK_RLMT_SEG_TIM, Para);
+ }
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_LINK_UP Event END.\n"))
+} /* SkRlmtEvtLinkUp */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtPortUpTim - PORT_UP_TIM
+ *
+ * Description:
+ * This routine handles PORT_UP_TIM events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtPortUpTim(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
+{
+ SK_RLMT_PORT *pRPort;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTUP_TIM Port %d Event BEGIN.\n", Para.Para32[0]))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTUP_TIM Event EMPTY.\n"))
+ return;
+ }
+
+ pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
+ if (pRPort->LinkDown || (pRPort->PortState == SK_RLMT_PS_UP)) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTUP_TIM Port %d Event EMPTY.\n", Para.Para32[0]))
+ return;
+ }
+
+ pRPort->PortDown = SK_FALSE;
+ pRPort->PortState = SK_RLMT_PS_UP;
+ pRPort->Net->PortsUp++;
+ if (pRPort->Net->RlmtState != SK_RLMT_RS_INIT) {
+ if (pAC->Rlmt.NumNets <= 1) {
+ SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
+ }
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_PORT_UP, Para);
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTUP_TIM Event END.\n"))
+} /* SkRlmtEvtPortUpTim */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtPortDownTim - PORT_DOWN_*
+ *
+ * Description:
+ * This routine handles PORT_DOWN_* events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtPortDownX(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Event, /* Event code */
+SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
+{
+ SK_RLMT_PORT *pRPort;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTDOWN* Port %d Event (%d) BEGIN.\n",
+ Para.Para32[0], Event))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTDOWN* Event EMPTY.\n"))
+ return;
+ }
+
+ pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
+ if (!pRPort->PortStarted || (Event == SK_RLMT_PORTDOWN_TX_TIM &&
+ !(pRPort->CheckingState & SK_RLMT_PCS_TX))) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTDOWN* Event (%d) EMPTY.\n", Event))
+ return;
+ }
+
+ /* Stop port's timers. */
+ SkTimerStop(pAC, IoC, &pRPort->UpTimer);
+ SkTimerStop(pAC, IoC, &pRPort->DownRxTimer);
+ SkTimerStop(pAC, IoC, &pRPort->DownTxTimer);
+
+ if (pRPort->PortState != SK_RLMT_PS_LINK_DOWN) {
+ pRPort->PortState = SK_RLMT_PS_DOWN;
+ }
+
+ if (!pRPort->PortDown) {
+ pRPort->Net->PortsUp--;
+ pRPort->PortDown = SK_TRUE;
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_PORT_DOWN, Para);
+ }
+
+ pRPort->PacketsPerTimeSlot = 0;
+ /* pRPort->DataPacketsPerTimeSlot = 0; */
+ pRPort->BpduPacketsPerTimeSlot = 0;
+ pRPort->BcTimeStamp = 0;
+
+ /*
+ * RA;:;: To be checked:
+ * - actions at RLMT_STOP: We should not switch anymore.
+ */
+ if (pRPort->Net->RlmtState != SK_RLMT_RS_INIT) {
+ if (Para.Para32[0] ==
+ pRPort->Net->Port[pRPort->Net->ActivePort]->PortNumber) {
+ /* Active Port went down. */
+ SkRlmtCheckSwitch(pAC, IoC, pRPort->Net->NetNumber);
+ }
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORTDOWN* Event (%d) END.\n", Event))
+} /* SkRlmtEvtPortDownX */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtLinkDown - LINK_DOWN
+ *
+ * Description:
+ * This routine handles LINK_DOWN events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtLinkDown(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 Undefined */
+{
+ SK_RLMT_PORT *pRPort;
+
+ pRPort = &pAC->Rlmt.Port[Para.Para32[0]];
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_LINK_DOWN Port %d Event BEGIN.\n", Para.Para32[0]))
+
+ if (!pAC->Rlmt.Port[Para.Para32[0]].LinkDown) {
+ pRPort->Net->LinksUp--;
+ pRPort->LinkDown = SK_TRUE;
+ pRPort->PortState = SK_RLMT_PS_LINK_DOWN;
+ SK_HWAC_LINK_LED(pAC, IoC, Para.Para32[0], SK_LED_OFF);
+
+ if ((pRPort->Net->RlmtMode & SK_RLMT_CHECK_LOC_LINK) != 0) {
+ /* Build the check chain. */
+ SkRlmtBuildCheckChain(pAC, pRPort->Net->NetNumber);
+ }
+
+ /* Ensure that port is marked down. */
+ Para.Para32[1] = -1;
+ (void)SkRlmtEvent(pAC, IoC, SK_RLMT_PORTDOWN, Para);
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_LINK_DOWN Event END.\n"))
+} /* SkRlmtEvtLinkDown */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtPortAddr - PORT_ADDR
+ *
+ * Description:
+ * This routine handles PORT_ADDR events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtPortAddr(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 PortNumber; SK_U32 -1 */
+{
+ SK_U32 i, j;
+ SK_RLMT_PORT *pRPort;
+ SK_MAC_ADDR *pOldMacAddr;
+ SK_MAC_ADDR *pNewMacAddr;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORT_ADDR Port %d Event BEGIN.\n", Para.Para32[0]))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORT_ADDR Event EMPTY.\n"))
+ return;
+ }
+
+ /* Port's physical MAC address changed. */
+ pOldMacAddr = &pAC->Addr.Port[Para.Para32[0]].PreviousMacAddress;
+ pNewMacAddr = &pAC->Addr.Port[Para.Para32[0]].CurrentMacAddress;
+
+ /*
+ * NOTE: This is not scalable for solutions where ports are
+ * checked remotely. There, we need to send an RLMT
+ * address change packet - and how do we ensure delivery?
+ */
+ for (i = 0; i < (SK_U32)pAC->GIni.GIMacsFound; i++) {
+ pRPort = &pAC->Rlmt.Port[i];
+ for (j = 0; j < pRPort->PortsChecked; j++) {
+ if (SK_ADDR_EQUAL(
+ pRPort->PortCheck[j].CheckAddr.a, pOldMacAddr->a)) {
+ pRPort->PortCheck[j].CheckAddr = *pNewMacAddr;
+ }
+ }
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PORT_ADDR Event END.\n"))
+} /* SkRlmtEvtPortAddr */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtStart - START
+ *
+ * Description:
+ * This routine handles START events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtStart(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
+{
+ SK_EVPARA Para2;
+ SK_U32 PortIdx;
+ SK_U32 PortNumber;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_START Net %d Event BEGIN.\n", Para.Para32[0]))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_START Event EMPTY.\n"))
+ return;
+ }
+
+ if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad NetNumber %d.\n", Para.Para32[0]))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_START Event EMPTY.\n"))
+ return;
+ }
+
+ if (pAC->Rlmt.Net[Para.Para32[0]].RlmtState != SK_RLMT_RS_INIT) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_START Event EMPTY.\n"))
+ return;
+ }
+
+ if (pAC->Rlmt.NetsStarted >= pAC->Rlmt.NumNets) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("All nets should have been started.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_START Event EMPTY.\n"))
+ return;
+ }
+
+ if (pAC->Rlmt.Net[Para.Para32[0]].PrefPort >=
+ pAC->Rlmt.Net[Para.Para32[0]].NumPorts) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E009, SKERR_RLMT_E009_MSG);
+
+ /* Change PrefPort to internal default. */
+ Para2.Para32[0] = 0xFFFFFFFF;
+ Para2.Para32[1] = Para.Para32[0];
+ (void)SkRlmtEvent(pAC, IoC, SK_RLMT_PREFPORT_CHANGE, Para2);
+ }
+
+ PortIdx = pAC->Rlmt.Net[Para.Para32[0]].PrefPort;
+ PortNumber = pAC->Rlmt.Net[Para.Para32[0]].Port[PortIdx]->PortNumber;
+
+ pAC->Rlmt.Net[Para.Para32[0]].LinksUp = 0;
+ pAC->Rlmt.Net[Para.Para32[0]].PortsUp = 0;
+ pAC->Rlmt.Net[Para.Para32[0]].CheckingState = 0;
+ pAC->Rlmt.Net[Para.Para32[0]].RlmtState = SK_RLMT_RS_NET_DOWN;
+
+ /* Start preferred port. */
+ SkRlmtPortStart(pAC, IoC, PortNumber);
+
+ /* Start Timer (for first port only). */
+ Para2.Para32[0] = PortNumber;
+ Para2.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pAC->Rlmt.Port[PortNumber].UpTimer,
+ SK_RLMT_PORTSTART_TIM_VAL, SKGE_RLMT, SK_RLMT_PORTSTART_TIM, Para2);
+
+ pAC->Rlmt.NetsStarted++;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_START Event END.\n"))
+} /* SkRlmtEvtStart */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtStop - STOP
+ *
+ * Description:
+ * This routine handles STOP events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtStop(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
+{
+ SK_EVPARA Para2;
+ SK_U32 PortNumber;
+ SK_U32 i;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STOP Net %d Event BEGIN.\n", Para.Para32[0]))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STOP Event EMPTY.\n"))
+ return;
+ }
+
+ if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad NetNumber %d.\n", Para.Para32[0]))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STOP Event EMPTY.\n"))
+ return;
+ }
+
+ if (pAC->Rlmt.Net[Para.Para32[0]].RlmtState == SK_RLMT_RS_INIT) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STOP Event EMPTY.\n"))
+ return;
+ }
+
+ if (pAC->Rlmt.NetsStarted == 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("All nets are stopped.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STOP Event EMPTY.\n"))
+ return;
+ }
+
+ /* Stop RLMT timers. */
+ SkTimerStop(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].LocTimer);
+ SkTimerStop(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].SegTimer);
+
+ /* Stop net. */
+ pAC->Rlmt.Net[Para.Para32[0]].RlmtState = SK_RLMT_RS_INIT;
+ pAC->Rlmt.Net[Para.Para32[0]].RootIdSet = SK_FALSE;
+ Para2.Para32[0] = SK_RLMT_NET_DOWN_FINAL;
+ Para2.Para32[1] = Para.Para32[0]; /* Net# */
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_NET_DOWN, Para2);
+
+ /* Stop ports. */
+ for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
+ PortNumber = pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber;
+ if (pAC->Rlmt.Port[PortNumber].PortState != SK_RLMT_PS_INIT) {
+ SkTimerStop(pAC, IoC, &pAC->Rlmt.Port[PortNumber].UpTimer);
+ SkTimerStop(pAC, IoC, &pAC->Rlmt.Port[PortNumber].DownRxTimer);
+ SkTimerStop(pAC, IoC, &pAC->Rlmt.Port[PortNumber].DownTxTimer);
+
+ pAC->Rlmt.Port[PortNumber].PortState = SK_RLMT_PS_INIT;
+ pAC->Rlmt.Port[PortNumber].RootIdSet = SK_FALSE;
+ pAC->Rlmt.Port[PortNumber].PortStarted = SK_FALSE;
+ Para2.Para32[0] = PortNumber;
+ Para2.Para32[1] = (SK_U32)-1;
+ SkEventQueue(pAC, SKGE_HWAC, SK_HWEV_PORT_STOP, Para2);
+ }
+ }
+
+ pAC->Rlmt.NetsStarted--;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STOP Event END.\n"))
+} /* SkRlmtEvtStop */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtTim - TIM
+ *
+ * Description:
+ * This routine handles TIM events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtTim(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
+{
+ SK_RLMT_PORT *pRPort;
+ SK_U32 Timeout;
+ SK_U32 NewTimeout;
+ SK_U32 PortNumber;
+ SK_U32 i;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_TIM Event BEGIN.\n"))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_TIM Event EMPTY.\n"))
+ return;
+ }
+
+ if ((pAC->Rlmt.Net[Para.Para32[0]].RlmtMode & SK_RLMT_CHECK_OTHERS) == 0 ||
+ pAC->Rlmt.Net[Para.Para32[0]].LinksUp == 0) {
+ /* Mode changed or all links down: No more link checking. */
+ return;
+ }
+
+#if 0
+ pAC->Rlmt.SwitchCheckCounter--;
+ if (pAC->Rlmt.SwitchCheckCounter == 0) {
+ pAC->Rlmt.SwitchCheckCounter;
+ }
+#endif /* 0 */
+
+ NewTimeout = SK_RLMT_DEF_TO_VAL;
+ for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
+ PortNumber = pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber;
+ pRPort = &pAC->Rlmt.Port[PortNumber];
+ if (!pRPort->LinkDown) {
+ Timeout = SkRlmtCheckPort(pAC, IoC, PortNumber);
+ if (Timeout < NewTimeout) {
+ NewTimeout = Timeout;
+ }
+
+ /*
+ * These counters should be set to 0 for all ports before the
+ * first frame is sent in the next loop.
+ */
+ pRPort->PacketsPerTimeSlot = 0;
+ /* pRPort->DataPacketsPerTimeSlot = 0; */
+ pRPort->BpduPacketsPerTimeSlot = 0;
+ }
+ }
+ pAC->Rlmt.Net[Para.Para32[0]].TimeoutValue = NewTimeout;
+
+ if (pAC->Rlmt.Net[Para.Para32[0]].LinksUp > 1) {
+ /*
+ * If checking remote ports, also send packets if
+ * (LinksUp == 1) &&
+ * this port checks at least one (remote) port.
+ */
+
+ /*
+ * Must be new loop, as SkRlmtCheckPort can request to
+ * check segmentation when e.g. checking the last port.
+ */
+ for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
+ if (!pAC->Rlmt.Net[Para.Para32[0]].Port[i]->LinkDown) {
+ SkRlmtSend(pAC, IoC,
+ pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber);
+ }
+ }
+ }
+
+ SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].LocTimer,
+ pAC->Rlmt.Net[Para.Para32[0]].TimeoutValue, SKGE_RLMT, SK_RLMT_TIM,
+ Para);
+
+ if (pAC->Rlmt.Net[Para.Para32[0]].LinksUp > 1 &&
+ (pAC->Rlmt.Net[Para.Para32[0]].RlmtMode & SK_RLMT_CHECK_SEG) &&
+ (pAC->Rlmt.Net[Para.Para32[0]].CheckingState & SK_RLMT_RCS_START_SEG)) {
+ SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[0]].SegTimer,
+ SK_RLMT_SEG_TO_VAL, SKGE_RLMT, SK_RLMT_SEG_TIM, Para);
+ pAC->Rlmt.Net[Para.Para32[0]].CheckingState &= ~SK_RLMT_RCS_START_SEG;
+ pAC->Rlmt.Net[Para.Para32[0]].CheckingState |=
+ SK_RLMT_RCS_SEG | SK_RLMT_RCS_REPORT_SEG;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_TIM Event END.\n"))
+} /* SkRlmtEvtTim */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtSegTim - SEG_TIM
+ *
+ * Description:
+ * This routine handles SEG_TIM events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtSegTim(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
+{
+#ifdef xDEBUG
+ int j;
+#endif /* DEBUG */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SEG_TIM Event BEGIN.\n"))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SEG_TIM Event EMPTY.\n"))
+ return;
+ }
+
+#ifdef xDEBUG
+ for (j = 0; j < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; j++) {
+ SK_ADDR_PORT *pAPort;
+ SK_U32 k;
+ SK_U16 *InAddr;
+ SK_U8 InAddr8[6];
+
+ InAddr = (SK_U16 *)&InAddr8[0];
+ pAPort = pAC->Rlmt.Net[Para.Para32[0]].Port[j]->AddrPort;
+ for (k = 0; k < pAPort->NextExactMatchRlmt; k++) {
+ /* Get exact match address k from port j. */
+ XM_INADDR(IoC, pAC->Rlmt.Net[Para.Para32[0]].Port[j]->PortNumber,
+ XM_EXM(k), InAddr);
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("MC address %d on Port %u: %02x %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x.\n",
+ k, pAC->Rlmt.Net[Para.Para32[0]].Port[j]->PortNumber,
+ InAddr8[0], InAddr8[1], InAddr8[2],
+ InAddr8[3], InAddr8[4], InAddr8[5],
+ pAPort->Exact[k].a[0], pAPort->Exact[k].a[1],
+ pAPort->Exact[k].a[2], pAPort->Exact[k].a[3],
+ pAPort->Exact[k].a[4], pAPort->Exact[k].a[5]))
+ }
+ }
+#endif /* xDEBUG */
+
+ SkRlmtCheckSeg(pAC, IoC, Para.Para32[0]);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SEG_TIM Event END.\n"))
+} /* SkRlmtEvtSegTim */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtPacketRx - PACKET_RECEIVED
+ *
+ * Description:
+ * This routine handles PACKET_RECEIVED events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtPacketRx(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_MBUF *pMb */
+{
+ SK_MBUF *pMb;
+ SK_MBUF *pNextMb;
+ SK_U32 NetNumber;
+
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PACKET_RECEIVED Event BEGIN.\n"))
+
+ /* Should we ignore frames during port switching? */
+
+#ifdef DEBUG
+ pMb = Para.pParaPtr;
+ if (pMb == NULL) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL, ("No mbuf.\n"))
+ }
+ else if (pMb->pNext != NULL) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("More than one mbuf or pMb->pNext not set.\n"))
+ }
+#endif /* DEBUG */
+
+ for (pMb = Para.pParaPtr; pMb != NULL; pMb = pNextMb) {
+ pNextMb = pMb->pNext;
+ pMb->pNext = NULL;
+
+ NetNumber = pAC->Rlmt.Port[pMb->PortIdx].Net->NetNumber;
+ if (pAC->Rlmt.Net[NetNumber].RlmtState == SK_RLMT_RS_INIT) {
+ SkDrvFreeRlmtMbuf(pAC, IoC, pMb);
+ }
+ else {
+ SkRlmtPacketReceive(pAC, IoC, pMb);
+ }
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PACKET_RECEIVED Event END.\n"))
+} /* SkRlmtEvtPacketRx */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtStatsClear - STATS_CLEAR
+ *
+ * Description:
+ * This routine handles STATS_CLEAR events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtStatsClear(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
+{
+ SK_U32 i;
+ SK_RLMT_PORT *pRPort;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_CLEAR Event BEGIN.\n"))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_CLEAR Event EMPTY.\n"))
+ return;
+ }
+
+ if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad NetNumber %d.\n", Para.Para32[0]))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_CLEAR Event EMPTY.\n"))
+ return;
+ }
+
+ /* Clear statistics for logical and physical ports. */
+ for (i = 0; i < pAC->Rlmt.Net[Para.Para32[0]].NumPorts; i++) {
+ pRPort =
+ &pAC->Rlmt.Port[pAC->Rlmt.Net[Para.Para32[0]].Port[i]->PortNumber];
+ pRPort->TxHelloCts = 0;
+ pRPort->RxHelloCts = 0;
+ pRPort->TxSpHelloReqCts = 0;
+ pRPort->RxSpHelloCts = 0;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_CLEAR Event END.\n"))
+} /* SkRlmtEvtStatsClear */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtStatsUpdate - STATS_UPDATE
+ *
+ * Description:
+ * This routine handles STATS_UPDATE events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtStatsUpdate(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NetNumber; SK_U32 -1 */
+{
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_UPDATE Event BEGIN.\n"))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_UPDATE Event EMPTY.\n"))
+ return;
+ }
+
+ if (Para.Para32[0] >= pAC->Rlmt.NumNets) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad NetNumber %d.\n", Para.Para32[0]))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_UPDATE Event EMPTY.\n"))
+ return;
+ }
+
+ /* Update statistics - currently always up-to-date. */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_STATS_UPDATE Event END.\n"))
+} /* SkRlmtEvtStatsUpdate */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtPrefportChange - PREFPORT_CHANGE
+ *
+ * Description:
+ * This routine handles PREFPORT_CHANGE events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtPrefportChange(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 PortIndex; SK_U32 NetNumber */
+{
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PREFPORT_CHANGE to Port %d Event BEGIN.\n", Para.Para32[0]))
+
+ if (Para.Para32[1] >= pAC->Rlmt.NumNets) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad NetNumber %d.\n", Para.Para32[1]))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PREFPORT_CHANGE Event EMPTY.\n"))
+ return;
+ }
+
+ /* 0xFFFFFFFF == auto-mode. */
+ if (Para.Para32[0] == 0xFFFFFFFF) {
+ pAC->Rlmt.Net[Para.Para32[1]].PrefPort = SK_RLMT_DEF_PREF_PORT;
+ }
+ else {
+ if (Para.Para32[0] >= pAC->Rlmt.Net[Para.Para32[1]].NumPorts) {
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E010, SKERR_RLMT_E010_MSG);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PREFPORT_CHANGE Event EMPTY.\n"))
+ return;
+ }
+
+ pAC->Rlmt.Net[Para.Para32[1]].PrefPort = Para.Para32[0];
+ }
+
+ pAC->Rlmt.Net[Para.Para32[1]].Preference = Para.Para32[0];
+
+ if (pAC->Rlmt.Net[Para.Para32[1]].RlmtState != SK_RLMT_RS_INIT) {
+ SkRlmtCheckSwitch(pAC, IoC, Para.Para32[1]);
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_PREFPORT_CHANGE Event END.\n"))
+} /* SkRlmtEvtPrefportChange */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtSetNets - SET_NETS
+ *
+ * Description:
+ * This routine handles SET_NETS events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtSetNets(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NumNets; SK_U32 -1 */
+{
+ int i;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SET_NETS Event BEGIN.\n"))
+
+ if (Para.Para32[1] != (SK_U32)-1) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad Parameter.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SET_NETS Event EMPTY.\n"))
+ return;
+ }
+
+ if (Para.Para32[0] == 0 || Para.Para32[0] > SK_MAX_NETS ||
+ Para.Para32[0] > (SK_U32)pAC->GIni.GIMacsFound) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad number of nets: %d.\n", Para.Para32[0]))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SET_NETS Event EMPTY.\n"))
+ return;
+ }
+
+ if (Para.Para32[0] == pAC->Rlmt.NumNets) { /* No change. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SET_NETS Event EMPTY.\n"))
+ return;
+ }
+
+ /* Entering and leaving dual mode only allowed while nets are stopped. */
+ if (pAC->Rlmt.NetsStarted > 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Changing dual mode only allowed while all nets are stopped.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SET_NETS Event EMPTY.\n"))
+ return;
+ }
+
+ if (Para.Para32[0] == 1) {
+ if (pAC->Rlmt.NumNets > 1) {
+ /* Clear logical MAC addr from second net's active port. */
+ (void)SkAddrOverride(pAC, IoC, pAC->Rlmt.Net[1].Port[pAC->Addr.
+ Net[1].ActivePort]->PortNumber, NULL, SK_ADDR_CLEAR_LOGICAL);
+ pAC->Rlmt.Net[1].NumPorts = 0;
+ }
+
+ pAC->Rlmt.NumNets = Para.Para32[0];
+ for (i = 0; (SK_U32)i < pAC->Rlmt.NumNets; i++) {
+ pAC->Rlmt.Net[i].RlmtState = SK_RLMT_RS_INIT;
+ pAC->Rlmt.Net[i].RootIdSet = SK_FALSE;
+ pAC->Rlmt.Net[i].Preference = 0xFFFFFFFF; /* "Automatic" */
+ pAC->Rlmt.Net[i].PrefPort = SK_RLMT_DEF_PREF_PORT;
+ /* Just assuming. */
+ pAC->Rlmt.Net[i].ActivePort = pAC->Rlmt.Net[i].PrefPort;
+ pAC->Rlmt.Net[i].RlmtMode = SK_RLMT_DEF_MODE;
+ pAC->Rlmt.Net[i].TimeoutValue = SK_RLMT_DEF_TO_VAL;
+ pAC->Rlmt.Net[i].NetNumber = i;
+ }
+
+ pAC->Rlmt.Port[1].Net= &pAC->Rlmt.Net[0];
+ pAC->Rlmt.Net[0].NumPorts = pAC->GIni.GIMacsFound;
+
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_SET_NETS, Para);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("RLMT: Changed to one net with two ports.\n"))
+ }
+ else if (Para.Para32[0] == 2) {
+ pAC->Rlmt.Port[1].Net= &pAC->Rlmt.Net[1];
+ pAC->Rlmt.Net[1].NumPorts = pAC->GIni.GIMacsFound - 1;
+ pAC->Rlmt.Net[0].NumPorts =
+ pAC->GIni.GIMacsFound - pAC->Rlmt.Net[1].NumPorts;
+
+ pAC->Rlmt.NumNets = Para.Para32[0];
+ for (i = 0; (SK_U32)i < pAC->Rlmt.NumNets; i++) {
+ pAC->Rlmt.Net[i].RlmtState = SK_RLMT_RS_INIT;
+ pAC->Rlmt.Net[i].RootIdSet = SK_FALSE;
+ pAC->Rlmt.Net[i].Preference = 0xFFFFFFFF; /* "Automatic" */
+ pAC->Rlmt.Net[i].PrefPort = SK_RLMT_DEF_PREF_PORT;
+ /* Just assuming. */
+ pAC->Rlmt.Net[i].ActivePort = pAC->Rlmt.Net[i].PrefPort;
+ pAC->Rlmt.Net[i].RlmtMode = SK_RLMT_DEF_MODE;
+ pAC->Rlmt.Net[i].TimeoutValue = SK_RLMT_DEF_TO_VAL;
+
+ pAC->Rlmt.Net[i].NetNumber = i;
+ }
+
+ /* Set logical MAC addr on second net's active port. */
+ (void)SkAddrOverride(pAC, IoC, pAC->Rlmt.Net[1].Port[pAC->Addr.
+ Net[1].ActivePort]->PortNumber, NULL, SK_ADDR_SET_LOGICAL);
+
+ SkEventQueue(pAC, SKGE_PNMI, SK_PNMI_EVT_RLMT_SET_NETS, Para);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("RLMT: Changed to two nets with one port each.\n"))
+ }
+ else {
+ /* Not implemented for more than two nets. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SetNets not implemented for more than two nets.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SET_NETS Event EMPTY.\n"))
+ return;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_SET_NETS Event END.\n"))
+} /* SkRlmtSetNets */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvtModeChange - MODE_CHANGE
+ *
+ * Description:
+ * This routine handles MODE_CHANGE events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * Nothing
+ */
+RLMT_STATIC void SkRlmtEvtModeChange(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_EVPARA Para) /* SK_U32 NewMode; SK_U32 NetNumber */
+{
+ SK_EVPARA Para2;
+ SK_U32 i;
+ SK_U32 PrevRlmtMode;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_MODE_CHANGE Event BEGIN.\n"))
+
+ if (Para.Para32[1] >= pAC->Rlmt.NumNets) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Bad NetNumber %d.\n", Para.Para32[1]))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_MODE_CHANGE Event EMPTY.\n"))
+ return;
+ }
+
+ Para.Para32[0] |= SK_RLMT_CHECK_LINK;
+
+ if ((pAC->Rlmt.Net[Para.Para32[1]].NumPorts == 1) &&
+ Para.Para32[0] != SK_RLMT_MODE_CLS) {
+ pAC->Rlmt.Net[Para.Para32[1]].RlmtMode = SK_RLMT_MODE_CLS;
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Forced RLMT mode to CLS on single port net.\n"))
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_MODE_CHANGE Event EMPTY.\n"))
+ return;
+ }
+
+ /* Update RLMT mode. */
+ PrevRlmtMode = pAC->Rlmt.Net[Para.Para32[1]].RlmtMode;
+ pAC->Rlmt.Net[Para.Para32[1]].RlmtMode = Para.Para32[0];
+
+ if ((PrevRlmtMode & SK_RLMT_CHECK_LOC_LINK) !=
+ (pAC->Rlmt.Net[Para.Para32[1]].RlmtMode & SK_RLMT_CHECK_LOC_LINK)) {
+ /* SK_RLMT_CHECK_LOC_LINK bit changed. */
+ if ((PrevRlmtMode & SK_RLMT_CHECK_OTHERS) == 0 &&
+ pAC->Rlmt.Net[Para.Para32[1]].NumPorts > 1 &&
+ pAC->Rlmt.Net[Para.Para32[1]].PortsUp >= 1) {
+ /* 20001207 RA: Was "PortsUp == 1". */
+ Para2.Para32[0] = Para.Para32[1];
+ Para2.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[1]].LocTimer,
+ pAC->Rlmt.Net[Para.Para32[1]].TimeoutValue,
+ SKGE_RLMT, SK_RLMT_TIM, Para2);
+ }
+ }
+
+ if ((PrevRlmtMode & SK_RLMT_CHECK_SEG) !=
+ (pAC->Rlmt.Net[Para.Para32[1]].RlmtMode & SK_RLMT_CHECK_SEG)) {
+ /* SK_RLMT_CHECK_SEG bit changed. */
+ for (i = 0; i < pAC->Rlmt.Net[Para.Para32[1]].NumPorts; i++) {
+ (void)SkAddrMcClear(pAC, IoC,
+ pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber,
+ SK_ADDR_PERMANENT | SK_MC_SW_ONLY);
+
+ /* Add RLMT MC address. */
+ (void)SkAddrMcAdd(pAC, IoC,
+ pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber,
+ &SkRlmtMcAddr, SK_ADDR_PERMANENT);
+
+ if ((pAC->Rlmt.Net[Para.Para32[1]].RlmtMode &
+ SK_RLMT_CHECK_SEG) != 0) {
+ /* Add BPDU MC address. */
+ (void)SkAddrMcAdd(pAC, IoC,
+ pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber,
+ &BridgeMcAddr, SK_ADDR_PERMANENT);
+
+ if (pAC->Rlmt.Net[Para.Para32[1]].RlmtState != SK_RLMT_RS_INIT) {
+ if (!pAC->Rlmt.Net[Para.Para32[1]].Port[i]->LinkDown &&
+ (Para2.pParaPtr = SkRlmtBuildSpanningTreePacket(
+ pAC, IoC, i)) != NULL) {
+ pAC->Rlmt.Net[Para.Para32[1]].Port[i]->RootIdSet =
+ SK_FALSE;
+ SkEventQueue(pAC, SKGE_DRV, SK_DRV_RLMT_SEND, Para2);
+ }
+ }
+ }
+ (void)SkAddrMcUpdate(pAC, IoC,
+ pAC->Rlmt.Net[Para.Para32[1]].Port[i]->PortNumber);
+ } /* for ... */
+
+ if ((pAC->Rlmt.Net[Para.Para32[1]].RlmtMode & SK_RLMT_CHECK_SEG) != 0) {
+ Para2.Para32[0] = Para.Para32[1];
+ Para2.Para32[1] = (SK_U32)-1;
+ SkTimerStart(pAC, IoC, &pAC->Rlmt.Net[Para.Para32[1]].SegTimer,
+ SK_RLMT_SEG_TO_VAL, SKGE_RLMT, SK_RLMT_SEG_TIM, Para2);
+ }
+ } /* SK_RLMT_CHECK_SEG bit changed. */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("SK_RLMT_MODE_CHANGE Event END.\n"))
+} /* SkRlmtEvtModeChange */
+
+
+/******************************************************************************
+ *
+ * SkRlmtEvent - a PORT- or an RLMT-specific event happened
+ *
+ * Description:
+ * This routine calls subroutines to handle PORT- and RLMT-specific events.
+ *
+ * Context:
+ * runtime, pageable?
+ * may be called after SK_INIT_IO
+ *
+ * Returns:
+ * 0
+ */
+int SkRlmtEvent(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+SK_U32 Event, /* Event code */
+SK_EVPARA Para) /* Event-specific parameter */
+{
+ switch (Event) {
+
+ /* ----- PORT events ----- */
+
+ case SK_RLMT_PORTSTART_TIM: /* From RLMT via TIME. */
+ SkRlmtEvtPortStartTim(pAC, IoC, Para);
+ break;
+ case SK_RLMT_LINK_UP: /* From SIRQ. */
+ SkRlmtEvtLinkUp(pAC, IoC, Para);
+ break;
+ case SK_RLMT_PORTUP_TIM: /* From RLMT via TIME. */
+ SkRlmtEvtPortUpTim(pAC, IoC, Para);
+ break;
+ case SK_RLMT_PORTDOWN: /* From RLMT. */
+ case SK_RLMT_PORTDOWN_RX_TIM: /* From RLMT via TIME. */
+ case SK_RLMT_PORTDOWN_TX_TIM: /* From RLMT via TIME. */
+ SkRlmtEvtPortDownX(pAC, IoC, Event, Para);
+ break;
+ case SK_RLMT_LINK_DOWN: /* From SIRQ. */
+ SkRlmtEvtLinkDown(pAC, IoC, Para);
+ break;
+ case SK_RLMT_PORT_ADDR: /* From ADDR. */
+ SkRlmtEvtPortAddr(pAC, IoC, Para);
+ break;
+
+ /* ----- RLMT events ----- */
+
+ case SK_RLMT_START: /* From DRV. */
+ SkRlmtEvtStart(pAC, IoC, Para);
+ break;
+ case SK_RLMT_STOP: /* From DRV. */
+ SkRlmtEvtStop(pAC, IoC, Para);
+ break;
+ case SK_RLMT_TIM: /* From RLMT via TIME. */
+ SkRlmtEvtTim(pAC, IoC, Para);
+ break;
+ case SK_RLMT_SEG_TIM:
+ SkRlmtEvtSegTim(pAC, IoC, Para);
+ break;
+ case SK_RLMT_PACKET_RECEIVED: /* From DRV. */
+ SkRlmtEvtPacketRx(pAC, IoC, Para);
+ break;
+ case SK_RLMT_STATS_CLEAR: /* From PNMI. */
+ SkRlmtEvtStatsClear(pAC, IoC, Para);
+ break;
+ case SK_RLMT_STATS_UPDATE: /* From PNMI. */
+ SkRlmtEvtStatsUpdate(pAC, IoC, Para);
+ break;
+ case SK_RLMT_PREFPORT_CHANGE: /* From PNMI. */
+ SkRlmtEvtPrefportChange(pAC, IoC, Para);
+ break;
+ case SK_RLMT_MODE_CHANGE: /* From PNMI. */
+ SkRlmtEvtModeChange(pAC, IoC, Para);
+ break;
+ case SK_RLMT_SET_NETS: /* From DRV. */
+ SkRlmtEvtSetNets(pAC, IoC, Para);
+ break;
+
+ /* ----- Unknown events ----- */
+
+ default: /* Create error log entry. */
+ SK_DBG_MSG(pAC, SK_DBGMOD_RLMT, SK_DBGCAT_CTRL,
+ ("Unknown RLMT Event %d.\n", Event))
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_RLMT_E003, SKERR_RLMT_E003_MSG);
+ break;
+ } /* switch() */
+
+ return (0);
+} /* SkRlmtEvent */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/sktimer.c u-boot-2009.03/drivers/net/sk98lin/sktimer.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/sktimer.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/sktimer.c 2009-03-31 14:54:29.800000800 -0700
@@ -1,293 +1,296 @@
-/******************************************************************************
- *
- * Name: sktimer.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.12 $
- * Date: $Date: 1999/11/22 13:38:51 $
- * Purpose: High level timer functions.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998,1999 SysKonnect,
- * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: sktimer.c,v $
- * Revision 1.12 1999/11/22 13:38:51 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.11 1998/12/17 13:24:13 gklug
- * fix: restart problem: do NOT destroy timer queue if init 1 is done
- *
- * Revision 1.10 1998/10/15 15:11:36 gklug
- * fix: ID_sccs to SysKonnectFileId
- *
- * Revision 1.9 1998/09/15 15:15:04 cgoos
- * Changed TRUE/FALSE to SK_TRUE/SK_FALSE
- *
- * Revision 1.8 1998/09/08 08:47:55 gklug
- * add: init level handling
- *
- * Revision 1.7 1998/08/19 09:50:53 gklug
- * fix: remove struct keyword from c-code (see CCC) add typedefs
- *
- * Revision 1.6 1998/08/17 13:43:13 gklug
- * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
- *
- * Revision 1.5 1998/08/14 07:09:14 gklug
- * fix: chg pAc -> pAC
- *
- * Revision 1.4 1998/08/07 12:53:46 gklug
- * fix: first compiled version
- *
- * Revision 1.3 1998/08/07 09:31:53 gklug
- * fix: delta spelling
- *
- * Revision 1.2 1998/08/07 09:31:02 gklug
- * adapt functions to new c coding conventions
- * rmv: "fast" handling
- * chg: inserting of new timer in queue.
- * chg: event queue generation when timer runs out
- *
- * Revision 1.1 1998/08/05 11:27:55 gklug
- * first version: adapted from SMT
- *
- *
- *
- *
- ******************************************************************************/
-
-
-#include <config.h>
-
-/*
- Event queue and dispatcher
-*/
-static const char SysKonnectFileId[] =
- "$Header: /usr56/projects/ge/schedule/sktimer.c,v 1.12 1999/11/22 13:38:51 cgoos Exp $" ;
-
-#include "h/skdrv1st.h" /* Driver Specific Definitions */
-#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
-
-#ifdef __C2MAN__
-/*
- Event queue management.
-
- General Description:
-
- */
-intro()
-{}
-#endif
-
-
-/* Forward declaration */
-static void timer_done(SK_AC *pAC,SK_IOC Ioc,int Restart);
-
-
-/*
- * Inits the software timer
- *
- * needs to be called during Init level 1.
- */
-void SkTimerInit(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc, /* IoContext */
-int Level) /* Init Level */
-{
- switch (Level) {
- case SK_INIT_DATA:
- pAC->Tim.StQueue = 0 ;
- break;
- case SK_INIT_IO:
- SkHwtInit(pAC,Ioc) ;
- SkTimerDone(pAC, Ioc);
- break;
- default:
- break;
- }
-}
-
-/*
- * Stops a high level timer
- * - If a timer is not in the queue the function returns normally, too.
- */
-void SkTimerStop(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc, /* IoContext */
-SK_TIMER *pTimer) /* Timer Pointer to be started */
-{
- SK_TIMER **ppTimPrev ;
- SK_TIMER *pTm ;
-
- /*
- * remove timer from queue
- */
- pTimer->TmActive = SK_FALSE ;
- if (pAC->Tim.StQueue == pTimer && !pTimer->TmNext) {
- SkHwtStop(pAC,Ioc) ;
- }
- for (ppTimPrev = &pAC->Tim.StQueue ; (pTm = *ppTimPrev) ;
- ppTimPrev = &pTm->TmNext ) {
- if (pTm == pTimer) {
- /*
- * Timer found in queue
- * - dequeue it and
- * - correct delta of the next timer
- */
- *ppTimPrev = pTm->TmNext ;
-
- if (pTm->TmNext) {
- /* correct delta of next timer in queue */
- pTm->TmNext->TmDelta += pTm->TmDelta ;
- }
- return ;
- }
- }
-}
-
-/*
- * Start a high level software timer
- */
-void SkTimerStart(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc, /* IoContext */
-SK_TIMER *pTimer, /* Timer Pointer to be started */
-SK_U32 Time, /* Time value */
-SK_U32 Class, /* Event Class for this timer */
-SK_U32 Event, /* Event Value for this timer */
-SK_EVPARA Para) /* Event Parameter for this timer */
-{
- SK_TIMER **ppTimPrev ;
- SK_TIMER *pTm ;
- SK_U32 Delta ;
-
- Time /= 16 ; /* input is uS, clock ticks are 16uS */
- if (!Time)
- Time = 1 ;
-
- SkTimerStop(pAC,Ioc,pTimer) ;
-
- pTimer->TmClass = Class ;
- pTimer->TmEvent = Event ;
- pTimer->TmPara = Para ;
- pTimer->TmActive = SK_TRUE ;
-
- if (!pAC->Tim.StQueue) {
- /* First Timer to be started */
- pAC->Tim.StQueue = pTimer ;
- pTimer->TmNext = 0 ;
- pTimer->TmDelta = Time ;
- SkHwtStart(pAC,Ioc,Time) ;
- return ;
- }
-
- /*
- * timer correction
- */
- timer_done(pAC,Ioc,0) ;
-
- /*
- * find position in queue
- */
- Delta = 0 ;
- for (ppTimPrev = &pAC->Tim.StQueue ; (pTm = *ppTimPrev) ;
- ppTimPrev = &pTm->TmNext ) {
- if (Delta + pTm->TmDelta > Time) {
- /* Position found */
- /* Here the timer needs to be inserted. */
- break ;
- }
- Delta += pTm->TmDelta ;
- }
-
- /* insert in queue */
- *ppTimPrev = pTimer ;
- pTimer->TmNext = pTm ;
- pTimer->TmDelta = Time - Delta ;
-
- if (pTm) {
- /* There is a next timer
- * -> correct its Delta value.
- */
- pTm->TmDelta -= pTimer->TmDelta ;
- }
-
- /*
- * start new with first
- */
- SkHwtStart(pAC,Ioc,pAC->Tim.StQueue->TmDelta) ;
-}
-
-
-void SkTimerDone(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc) /* IoContext */
-{
- timer_done(pAC,Ioc,1) ;
-}
-
-
-static void timer_done(
-SK_AC *pAC, /* Adapters context */
-SK_IOC Ioc, /* IoContext */
-int Restart) /* Do we need to restart the Hardware timer ? */
-{
- SK_U32 Delta ;
- SK_TIMER *pTm ;
- SK_TIMER *pTComp ; /* Timer completed now now */
- SK_TIMER **ppLast ; /* Next field of Last timer to be deq */
- int Done = 0 ;
-
- Delta = SkHwtRead(pAC,Ioc) ;
- ppLast = &pAC->Tim.StQueue ;
- pTm = pAC->Tim.StQueue ;
- while (pTm && !Done) {
- if (Delta >= pTm->TmDelta) {
- /* Timer ran out */
- pTm->TmActive = SK_FALSE ;
- Delta -= pTm->TmDelta ;
- ppLast = &pTm->TmNext ;
- pTm = pTm->TmNext ;
- } else {
- /* We found the first timer that did not run out */
- pTm->TmDelta -= Delta ;
- Delta = 0 ;
- Done = 1 ;
- }
- }
- *ppLast = 0 ;
- /*
- * pTm points to the first Timer that did not run out.
- * StQueue points to the first Timer that run out.
- */
-
- for ( pTComp = pAC->Tim.StQueue ; pTComp ; pTComp = pTComp->TmNext) {
- SkEventQueue(pAC,pTComp->TmClass, pTComp->TmEvent,
- pTComp->TmPara) ;
- }
-
- /* Set head of timer queue to the first timer that did not run out */
- pAC->Tim.StQueue = pTm ;
-
- if (Restart && pAC->Tim.StQueue) {
- /* Restart HW timer */
- SkHwtStart(pAC,Ioc,pAC->Tim.StQueue->TmDelta) ;
- }
-}
-
-/* End of file */
+/******************************************************************************
+ *
+ * Name: sktimer.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: High level timer functions.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998,1999 SysKonnect,
+ * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: sktimer.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.12 1999/11/22 13:38:51 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.11 1998/12/17 13:24:13 gklug
+ * fix: restart problem: do NOT destroy timer queue if init 1 is done
+ *
+ * Revision 1.10 1998/10/15 15:11:36 gklug
+ * fix: ID_sccs to SysKonnectFileId
+ *
+ * Revision 1.9 1998/09/15 15:15:04 cgoos
+ * Changed TRUE/FALSE to SK_TRUE/SK_FALSE
+ *
+ * Revision 1.8 1998/09/08 08:47:55 gklug
+ * add: init level handling
+ *
+ * Revision 1.7 1998/08/19 09:50:53 gklug
+ * fix: remove struct keyword from c-code (see CCC) add typedefs
+ *
+ * Revision 1.6 1998/08/17 13:43:13 gklug
+ * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR
+ *
+ * Revision 1.5 1998/08/14 07:09:14 gklug
+ * fix: chg pAc -> pAC
+ *
+ * Revision 1.4 1998/08/07 12:53:46 gklug
+ * fix: first compiled version
+ *
+ * Revision 1.3 1998/08/07 09:31:53 gklug
+ * fix: delta spelling
+ *
+ * Revision 1.2 1998/08/07 09:31:02 gklug
+ * adapt functions to new c coding conventions
+ * rmv: "fast" handling
+ * chg: inserting of new timer in queue.
+ * chg: event queue generation when timer runs out
+ *
+ * Revision 1.1 1998/08/05 11:27:55 gklug
+ * first version: adapted from SMT
+ *
+ *
+ *
+ *
+ ******************************************************************************/
+
+
+#include <config.h>
+
+/*
+ Event queue and dispatcher
+*/
+static const char SysKonnectFileId[] =
+ "$Header: C:\qaz\__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/drivers/net/sk98lin/sktimer.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $" ;
+
+#include "h/skdrv1st.h" /* Driver Specific Definitions */
+#include "h/skdrv2nd.h" /* Adapter Control- and Driver specific Def. */
+
+#ifdef __C2MAN__
+/*
+ Event queue management.
+
+ General Description:
+
+ */
+intro()
+{}
+#endif
+
+
+/* Forward declaration */
+static void timer_done(SK_AC *pAC,SK_IOC Ioc,int Restart);
+
+
+/*
+ * Inits the software timer
+ *
+ * needs to be called during Init level 1.
+ */
+void SkTimerInit(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc, /* IoContext */
+int Level) /* Init Level */
+{
+ switch (Level) {
+ case SK_INIT_DATA:
+ pAC->Tim.StQueue = 0 ;
+ break;
+ case SK_INIT_IO:
+ SkHwtInit(pAC,Ioc) ;
+ SkTimerDone(pAC, Ioc);
+ break;
+ default:
+ break;
+ }
+}
+
+/*
+ * Stops a high level timer
+ * - If a timer is not in the queue the function returns normally, too.
+ */
+void SkTimerStop(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc, /* IoContext */
+SK_TIMER *pTimer) /* Timer Pointer to be started */
+{
+ SK_TIMER **ppTimPrev ;
+ SK_TIMER *pTm ;
+
+ /*
+ * remove timer from queue
+ */
+ pTimer->TmActive = SK_FALSE ;
+ if (pAC->Tim.StQueue == pTimer && !pTimer->TmNext) {
+ SkHwtStop(pAC,Ioc) ;
+ }
+ for (ppTimPrev = &pAC->Tim.StQueue ; (pTm = *ppTimPrev) ;
+ ppTimPrev = &pTm->TmNext ) {
+ if (pTm == pTimer) {
+ /*
+ * Timer found in queue
+ * - dequeue it and
+ * - correct delta of the next timer
+ */
+ *ppTimPrev = pTm->TmNext ;
+
+ if (pTm->TmNext) {
+ /* correct delta of next timer in queue */
+ pTm->TmNext->TmDelta += pTm->TmDelta ;
+ }
+ return ;
+ }
+ }
+}
+
+/*
+ * Start a high level software timer
+ */
+void SkTimerStart(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc, /* IoContext */
+SK_TIMER *pTimer, /* Timer Pointer to be started */
+SK_U32 Time, /* Time value */
+SK_U32 Class, /* Event Class for this timer */
+SK_U32 Event, /* Event Value for this timer */
+SK_EVPARA Para) /* Event Parameter for this timer */
+{
+ SK_TIMER **ppTimPrev ;
+ SK_TIMER *pTm ;
+ SK_U32 Delta ;
+
+ Time /= 16 ; /* input is uS, clock ticks are 16uS */
+ if (!Time)
+ Time = 1 ;
+
+ SkTimerStop(pAC,Ioc,pTimer) ;
+
+ pTimer->TmClass = Class ;
+ pTimer->TmEvent = Event ;
+ pTimer->TmPara = Para ;
+ pTimer->TmActive = SK_TRUE ;
+
+ if (!pAC->Tim.StQueue) {
+ /* First Timer to be started */
+ pAC->Tim.StQueue = pTimer ;
+ pTimer->TmNext = 0 ;
+ pTimer->TmDelta = Time ;
+ SkHwtStart(pAC,Ioc,Time) ;
+ return ;
+ }
+
+ /*
+ * timer correction
+ */
+ timer_done(pAC,Ioc,0) ;
+
+ /*
+ * find position in queue
+ */
+ Delta = 0 ;
+ for (ppTimPrev = &pAC->Tim.StQueue ; (pTm = *ppTimPrev) ;
+ ppTimPrev = &pTm->TmNext ) {
+ if (Delta + pTm->TmDelta > Time) {
+ /* Position found */
+ /* Here the timer needs to be inserted. */
+ break ;
+ }
+ Delta += pTm->TmDelta ;
+ }
+
+ /* insert in queue */
+ *ppTimPrev = pTimer ;
+ pTimer->TmNext = pTm ;
+ pTimer->TmDelta = Time - Delta ;
+
+ if (pTm) {
+ /* There is a next timer
+ * -> correct its Delta value.
+ */
+ pTm->TmDelta -= pTimer->TmDelta ;
+ }
+
+ /*
+ * start new with first
+ */
+ SkHwtStart(pAC,Ioc,pAC->Tim.StQueue->TmDelta) ;
+}
+
+
+void SkTimerDone(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc) /* IoContext */
+{
+ timer_done(pAC,Ioc,1) ;
+}
+
+
+static void timer_done(
+SK_AC *pAC, /* Adapters context */
+SK_IOC Ioc, /* IoContext */
+int Restart) /* Do we need to restart the Hardware timer ? */
+{
+ SK_U32 Delta ;
+ SK_TIMER *pTm ;
+ SK_TIMER *pTComp ; /* Timer completed now now */
+ SK_TIMER **ppLast ; /* Next field of Last timer to be deq */
+ int Done = 0 ;
+
+ Delta = SkHwtRead(pAC,Ioc) ;
+ ppLast = &pAC->Tim.StQueue ;
+ pTm = pAC->Tim.StQueue ;
+ while (pTm && !Done) {
+ if (Delta >= pTm->TmDelta) {
+ /* Timer ran out */
+ pTm->TmActive = SK_FALSE ;
+ Delta -= pTm->TmDelta ;
+ ppLast = &pTm->TmNext ;
+ pTm = pTm->TmNext ;
+ } else {
+ /* We found the first timer that did not run out */
+ pTm->TmDelta -= Delta ;
+ Delta = 0 ;
+ Done = 1 ;
+ }
+ }
+ *ppLast = 0 ;
+ /*
+ * pTm points to the first Timer that did not run out.
+ * StQueue points to the first Timer that run out.
+ */
+
+ for ( pTComp = pAC->Tim.StQueue ; pTComp ; pTComp = pTComp->TmNext) {
+ SkEventQueue(pAC,pTComp->TmClass, pTComp->TmEvent,
+ pTComp->TmPara) ;
+ }
+
+ /* Set head of timer queue to the first timer that did not run out */
+ pAC->Tim.StQueue = pTm ;
+
+ if (Restart && pAC->Tim.StQueue) {
+ /* Restart HW timer */
+ SkHwtStart(pAC,Ioc,pAC->Tim.StQueue->TmDelta) ;
+ }
+}
+
+/* End of file */
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skvpd.c u-boot-2009.03/drivers/net/sk98lin/skvpd.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skvpd.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skvpd.c 2009-03-31 14:54:29.831250400 -0700
@@ -1,1325 +1,1328 @@
-/******************************************************************************
- *
- * Name: skvpd.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.37 $
- * Date: $Date: 2003/01/13 10:42:45 $
- * Purpose: Shared software to read and write VPD data
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skvpd.c,v $
- * Revision 1.37 2003/01/13 10:42:45 rschmidt
- * Replaced check for PCI device Id from YUKON with GENESIS
- * to set the VPD size in VpdInit()
- * Editorial changes
- *
- * Revision 1.36 2002/11/14 15:16:56 gheinig
- * Added const specifier to key and buf parameters for VpdPara, VpdRead
- * and VpdWrite for Diag 7 GUI
- *
- * Revision 1.35 2002/10/21 14:31:59 gheinig
- * Took out CVS web garbage at head of file
- *
- * Revision 1.34 2002/10/21 11:47:24 gheinig
- * Reverted to version 1.32 due to unwanted commit
- *
- * Revision 1.32 2002/10/14 16:04:29 rschmidt
- * Added saving of VPD ROM Size from PCI_OUR_REG_2
- * Avoid reading of PCI_OUR_REG_2 in VpdTransferBlock()
- * Editorial changes
- *
- * Revision 1.31 2002/09/10 09:21:32 mkarl
- * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis
- *
- * Revision 1.30 2002/09/09 14:43:03 mkarl
- * changes for diagnostics in order to read VPD data before the adapter
- * has been initialized
- * editorial changes
- *
- * Revision 1.29 2002/07/26 13:20:43 mkarl
- * added Yukon support
- * save size of VPD in pAC->vpd.vpd_size
- *
- * Revision 1.28 2002/04/02 15:31:47 afischer
- * Bug fix in VpdWait()
- *
- * Revision 1.27 2000/08/10 11:29:06 rassmann
- * Editorial changes.
- * Preserving 32-bit alignment in structs for the adapter context.
- * Removed unused function VpdWriteDword() (#if 0).
- * Made VpdReadKeyword() available for SKDIAG only.
- *
- * Revision 1.26 2000/06/13 08:00:01 mkarl
- * additional cast to avoid compile problems in 64 bit environment
- *
- * Revision 1.25 1999/11/22 13:39:32 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.24 1999/03/11 14:25:49 malthoff
- * Replace __STDC__ with SK_KR_PROTO.
- *
- * Revision 1.23 1999/01/11 15:13:11 gklug
- * fix: syntax error
- *
- * Revision 1.22 1998/10/30 06:41:15 gklug
- * rmv: WARNING
- *
- * Revision 1.21 1998/10/29 07:15:14 gklug
- * fix: Write Stream function needs verify.
- *
- * Revision 1.20 1998/10/28 18:05:08 gklug
- * chg: no DEBUG in VpdMayWrite
- *
- * Revision 1.19 1998/10/28 15:56:11 gklug
- * fix: Return len at end of ReadStream
- * fix: Write even less than 4 bytes correctly
- *
- * Revision 1.18 1998/10/28 09:00:47 gklug
- * fix: unreferenced local vars
- *
- * Revision 1.17 1998/10/28 08:25:45 gklug
- * fix: WARNING
- *
- * Revision 1.16 1998/10/28 08:17:30 gklug
- * fix: typo
- *
- * Revision 1.15 1998/10/28 07:50:32 gklug
- * fix: typo
- *
- * Revision 1.14 1998/10/28 07:20:38 gklug
- * chg: Interface functions to use IoC as parameter as well
- * fix: VpdRead/WriteDWord now returns SK_U32
- * chg: VPD_IN/OUT names conform to SK_IN/OUT
- * add: usage of VPD_IN/OUT8 macros
- * add: VpdRead/Write Stream functions to r/w a stream of data
- * fix: VpdTransferBlock swapped illegal
- * add: VpdMayWrite
- *
- * Revision 1.13 1998/10/22 10:02:37 gklug
- * fix: SysKonnectFileId typo
- *
- * Revision 1.12 1998/10/20 10:01:01 gklug
- * fix: parameter to SkOsGetTime
- *
- * Revision 1.11 1998/10/15 12:51:48 malthoff
- * Remove unrequired parameter p in vpd_setup_para().
- *
- * Revision 1.10 1998/10/08 14:52:43 malthoff
- * Remove CvsId by SysKonnectFileId.
- *
- * Revision 1.9 1998/09/16 07:33:52 malthoff
- * replace memcmp() by SK_MEMCMP and
- * memcpy() by SK_MEMCPY() to be
- * independent from the 'C' Standard Library.
- *
- * Revision 1.8 1998/08/19 12:52:35 malthoff
- * compiler fix: use SK_VPD_KEY instead of S_VPD.
- *
- * Revision 1.7 1998/08/19 08:14:01 gklug
- * fix: remove struct keyword as much as possible from the C-code (see CCC)
- *
- * Revision 1.6 1998/08/18 13:03:58 gklug
- * SkOsGetTime now returns SK_U64
- *
- * Revision 1.5 1998/08/18 08:17:29 malthoff
- * Ensure we issue a VPD read in vpd_read_dword().
- * Discard all VPD keywords other than Vx or Yx, where
- * x is '0..9' or 'A..Z'.
- *
- * Revision 1.4 1998/07/03 14:52:19 malthoff
- * Add category SK_DBGCAT_FATAL to some debug macros.
- * bug fix: correct the keyword name check in vpd_write().
- *
- * Revision 1.3 1998/06/26 11:16:53 malthoff
- * Correct the modified File Identifier.
- *
- * Revision 1.2 1998/06/26 11:13:43 malthoff
- * Modify the File Identifier.
- *
- * Revision 1.1 1998/06/19 14:11:08 malthoff
- * Created, Tests with AIX were performed successfully
- *
- *
- ******************************************************************************/
-
-#include <config.h>
-
-/*
- Please refer skvpd.txt for infomation how to include this module
- */
-static const char SysKonnectFileId[] =
- "@(#)$Id: skvpd.c,v 1.37 2003/01/13 10:42:45 rschmidt Exp $ (C) SK";
-
-#include "h/skdrv1st.h"
-#include "h/sktypes.h"
-#include "h/skdebug.h"
-#include "h/skdrv2nd.h"
-
-/*
- * Static functions
- */
-#ifndef SK_KR_PROTO
-static SK_VPD_PARA *vpd_find_para(
- SK_AC *pAC,
- const char *key,
- SK_VPD_PARA *p);
-#else /* SK_KR_PROTO */
-static SK_VPD_PARA *vpd_find_para();
-#endif /* SK_KR_PROTO */
-
-/*
- * waits for a completion of a VPD transfer
- * The VPD transfer must complete within SK_TICKS_PER_SEC/16
- *
- * returns 0: success, transfer completes
- * error exit(9) with a error message
- */
-static int VpdWait(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC, /* IO Context */
-int event) /* event to wait for (VPD_READ / VPD_write) completion*/
-{
- SK_U64 start_time;
- SK_U16 state;
-
- SK_DBG_MSG(pAC,SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD wait for %s\n", event?"Write":"Read"));
- start_time = SkOsGetTime(pAC);
- do {
- if (SkOsGetTime(pAC) - start_time > SK_TICKS_PER_SEC) {
-
- /* Bug fix AF: Thu Mar 28 2002
- * Do not call: VPD_STOP(pAC, IoC);
- * A pending VPD read cycle can not be aborted by writing
- * VPD_WRITE to the PCI_VPD_ADR_REG (VPD address register).
- * Although the write threshold in the OUR-register protects
- * VPD read only space from being overwritten this does not
- * protect a VPD read from being `converted` into a VPD write
- * operation (on the fly). As a consequence the VPD_STOP would
- * delete VPD read only data. In case of any problems with the
- * I2C bus we exit the loop here. The I2C read operation can
- * not be aborted except by a reset (->LR).
- */
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_FATAL | SK_DBGCAT_ERR,
- ("ERROR:VPD wait timeout\n"));
- return(1);
- }
-
- VPD_IN16(pAC, IoC, PCI_VPD_ADR_REG, &state);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("state = %x, event %x\n",state,event));
- } while((int)(state & PCI_VPD_FLAG) == event);
-
- return(0);
-}
-
-#ifdef SKDIAG
-
-/*
- * Read the dword at address 'addr' from the VPD EEPROM.
- *
- * Needed Time: MIN 1,3 ms MAX 2,6 ms
- *
- * Note: The DWord is returned in the endianess of the machine the routine
- * is running on.
- *
- * Returns the data read.
- */
-SK_U32 VpdReadDWord(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC, /* IO Context */
-int addr) /* VPD address */
-{
- SK_U32 Rtv;
-
- /* start VPD read */
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD read dword at 0x%x\n",addr));
- addr &= ~VPD_WRITE; /* ensure the R/W bit is set to read */
-
- VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, (SK_U16)addr);
-
- /* ignore return code here */
- (void)VpdWait(pAC, IoC, VPD_READ);
-
- /* Don't swap here, it's a data stream of bytes */
- Rtv = 0;
-
- VPD_IN32(pAC, IoC, PCI_VPD_DAT_REG, &Rtv);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD read dword data = 0x%x\n",Rtv));
- return(Rtv);
-}
-
-#endif /* SKDIAG */
-
-#if 0
-
-/*
- Write the dword 'data' at address 'addr' into the VPD EEPROM, and
- verify that the data is written.
-
- Needed Time:
-
-. MIN MAX
-. -------------------------------------------------------------------
-. write 1.8 ms 3.6 ms
-. internal write cyles 0.7 ms 7.0 ms
-. -------------------------------------------------------------------
-. over all program time 2.5 ms 10.6 ms
-. read 1.3 ms 2.6 ms
-. -------------------------------------------------------------------
-. over all 3.8 ms 13.2 ms
-.
-
-
- Returns 0: success
- 1: error, I2C transfer does not terminate
- 2: error, data verify error
-
- */
-static int VpdWriteDWord(
-SK_AC *pAC, /* pAC pointer */
-SK_IOC IoC, /* IO Context */
-int addr, /* VPD address */
-SK_U32 data) /* VPD data to write */
-{
- /* start VPD write */
- /* Don't swap here, it's a data stream of bytes */
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD write dword at addr 0x%x, data = 0x%x\n",addr,data));
- VPD_OUT32(pAC, IoC, PCI_VPD_DAT_REG, (SK_U32)data);
- /* But do it here */
- addr |= VPD_WRITE;
-
- VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, (SK_U16)(addr | VPD_WRITE));
-
- /* this may take up to 10,6 ms */
- if (VpdWait(pAC, IoC, VPD_WRITE)) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("Write Timed Out\n"));
- return(1);
- };
-
- /* verify data */
- if (VpdReadDWord(pAC, IoC, addr) != data) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Data Verify Error\n"));
- return(2);
- }
- return(0);
-} /* VpdWriteDWord */
-
-#endif /* 0 */
-
-/*
- * Read one Stream of 'len' bytes of VPD data, starting at 'addr' from
- * or to the I2C EEPROM.
- *
- * Returns number of bytes read / written.
- */
-static int VpdWriteStream(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC, /* IO Context */
-char *buf, /* data buffer */
-int Addr, /* VPD start address */
-int Len) /* number of bytes to read / to write */
-{
- int i;
- int j;
- SK_U16 AdrReg;
- int Rtv;
- SK_U8 * pComp; /* Compare pointer */
- SK_U8 Data; /* Input Data for Compare */
-
- /* Init Compare Pointer */
- pComp = (SK_U8 *) buf;
-
- for (i = 0; i < Len; i++, buf++) {
- if ((i%sizeof(SK_U32)) == 0) {
- /*
- * At the begin of each cycle read the Data Reg
- * So it is initialized even if only a few bytes
- * are written.
- */
- AdrReg = (SK_U16) Addr;
- AdrReg &= ~VPD_WRITE; /* READ operation */
-
- VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
-
- /* Wait for termination */
- Rtv = VpdWait(pAC, IoC, VPD_READ);
- if (Rtv != 0) {
- return(i);
- }
- }
-
- /* Write current Byte */
- VPD_OUT8(pAC, IoC, PCI_VPD_DAT_REG + (i%sizeof(SK_U32)),
- *(SK_U8*)buf);
-
- if (((i%sizeof(SK_U32)) == 3) || (i == (Len - 1))) {
- /* New Address needs to be written to VPD_ADDR reg */
- AdrReg = (SK_U16) Addr;
- Addr += sizeof(SK_U32);
- AdrReg |= VPD_WRITE; /* WRITE operation */
-
- VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
-
- /* Wait for termination */
- Rtv = VpdWait(pAC, IoC, VPD_WRITE);
- if (Rtv != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("Write Timed Out\n"));
- return(i - (i%sizeof(SK_U32)));
- }
-
- /*
- * Now re-read to verify
- */
- AdrReg &= ~VPD_WRITE; /* READ operation */
-
- VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
-
- /* Wait for termination */
- Rtv = VpdWait(pAC, IoC, VPD_READ);
- if (Rtv != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("Verify Timed Out\n"));
- return(i - (i%sizeof(SK_U32)));
- }
-
- for (j = 0; j <= (int)(i%sizeof(SK_U32)); j++, pComp++) {
-
- VPD_IN8(pAC, IoC, PCI_VPD_DAT_REG + j, &Data);
-
- if (Data != *pComp) {
- /* Verify Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("WriteStream Verify Error\n"));
- return(i - (i%sizeof(SK_U32)) + j);
- }
- }
- }
- }
-
- return(Len);
-}
-
-
-/*
- * Read one Stream of 'len' bytes of VPD data, starting at 'addr' from
- * or to the I2C EEPROM.
- *
- * Returns number of bytes read / written.
- */
-static int VpdReadStream(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC, /* IO Context */
-char *buf, /* data buffer */
-int Addr, /* VPD start address */
-int Len) /* number of bytes to read / to write */
-{
- int i;
- SK_U16 AdrReg;
- int Rtv;
-
- for (i = 0; i < Len; i++, buf++) {
- if ((i%sizeof(SK_U32)) == 0) {
- /* New Address needs to be written to VPD_ADDR reg */
- AdrReg = (SK_U16) Addr;
- Addr += sizeof(SK_U32);
- AdrReg &= ~VPD_WRITE; /* READ operation */
-
- VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
-
- /* Wait for termination */
- Rtv = VpdWait(pAC, IoC, VPD_READ);
- if (Rtv != 0) {
- return(i);
- }
- }
- VPD_IN8(pAC, IoC, PCI_VPD_DAT_REG + (i%sizeof(SK_U32)),
- (SK_U8 *)buf);
- }
-
- return(Len);
-}
-
-/*
- * Read ore writes 'len' bytes of VPD data, starting at 'addr' from
- * or to the I2C EEPROM.
- *
- * Returns number of bytes read / written.
- */
-static int VpdTransferBlock(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC, /* IO Context */
-char *buf, /* data buffer */
-int addr, /* VPD start address */
-int len, /* number of bytes to read / to write */
-int dir) /* transfer direction may be VPD_READ or VPD_WRITE */
-{
- int Rtv; /* Return value */
- int vpd_rom_size;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD %s block, addr = 0x%x, len = %d\n",
- dir ? "write" : "read", addr, len));
-
- if (len == 0)
- return(0);
-
- vpd_rom_size = pAC->vpd.rom_size;
-
- if (addr > vpd_rom_size - 4) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Address error: 0x%x, exp. < 0x%x\n",
- addr, vpd_rom_size - 4));
- return(0);
- }
-
- if (addr + len > vpd_rom_size) {
- len = vpd_rom_size - addr;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("Warning: len was cut to %d\n", len));
- }
-
- if (dir == VPD_READ) {
- Rtv = VpdReadStream(pAC, IoC, buf, addr, len);
- }
- else {
- Rtv = VpdWriteStream(pAC, IoC, buf, addr, len);
- }
-
- return(Rtv);
-}
-
-#ifdef SKDIAG
-
-/*
- * Read 'len' bytes of VPD data, starting at 'addr'.
- *
- * Returns number of bytes read.
- */
-int VpdReadBlock(
-SK_AC *pAC, /* pAC pointer */
-SK_IOC IoC, /* IO Context */
-char *buf, /* buffer were the data should be stored */
-int addr, /* start reading at the VPD address */
-int len) /* number of bytes to read */
-{
- return(VpdTransferBlock(pAC, IoC, buf, addr, len, VPD_READ));
-}
-
-/*
- * Write 'len' bytes of *but to the VPD EEPROM, starting at 'addr'.
- *
- * Returns number of bytes writes.
- */
-int VpdWriteBlock(
-SK_AC *pAC, /* pAC pointer */
-SK_IOC IoC, /* IO Context */
-char *buf, /* buffer, holds the data to write */
-int addr, /* start writing at the VPD address */
-int len) /* number of bytes to write */
-{
- return(VpdTransferBlock(pAC, IoC, buf, addr, len, VPD_WRITE));
-}
-#endif /* SKDIAG */
-
-/*
- * (re)initialize the VPD buffer
- *
- * Reads the VPD data from the EEPROM into the VPD buffer.
- * Get the remaining read only and read / write space.
- *
- * return 0: success
- * 1: fatal VPD error
- */
-static int VpdInit(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC) /* IO Context */
-{
- SK_VPD_PARA *r, rp; /* RW or RV */
- int i;
- unsigned char x;
- int vpd_size;
- SK_U16 dev_id;
- SK_U32 our_reg2;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_INIT, ("VpdInit .. "));
-
- VPD_IN16(pAC, IoC, PCI_DEVICE_ID, &dev_id);
-
- VPD_IN32(pAC, IoC, PCI_OUR_REG_2, &our_reg2);
-
- pAC->vpd.rom_size = 256 << ((our_reg2 & PCI_VPD_ROM_SZ) >> 14);
-
- /*
- * this function might get used before the hardware is initialized
- * therefore we cannot always trust in GIChipId
- */
- if (((pAC->vpd.v.vpd_status & VPD_VALID) == 0 &&
- dev_id != VPD_DEV_ID_GENESIS) ||
- ((pAC->vpd.v.vpd_status & VPD_VALID) != 0 &&
- !pAC->GIni.GIGenesis)) {
-
- /* for Yukon the VPD size is always 256 */
- vpd_size = VPD_SIZE_YUKON;
- }
- else {
- /* Genesis uses the maximum ROM size up to 512 for VPD */
- if (pAC->vpd.rom_size > VPD_SIZE_GENESIS) {
- vpd_size = VPD_SIZE_GENESIS;
- }
- else {
- vpd_size = pAC->vpd.rom_size;
- }
- }
-
- /* read the VPD data into the VPD buffer */
- if (VpdTransferBlock(pAC, IoC, pAC->vpd.vpd_buf, 0, vpd_size, VPD_READ)
- != vpd_size) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("Block Read Error\n"));
- return(1);
- }
-
- pAC->vpd.vpd_size = vpd_size;
-
- /* find the end tag of the RO area */
- if (!(r = vpd_find_para(pAC, VPD_RV, &rp))) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Encoding Error: RV Tag not found\n"));
- return(1);
- }
-
- if (r->p_val + r->p_len > pAC->vpd.vpd_buf + vpd_size/2) {
- SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Encoding Error: Invalid VPD struct size\n"));
- return(1);
- }
- pAC->vpd.v.vpd_free_ro = r->p_len - 1;
-
- /* test the checksum */
- for (i = 0, x = 0; (unsigned)i <= (unsigned)vpd_size/2 - r->p_len; i++) {
- x += pAC->vpd.vpd_buf[i];
- }
-
- if (x != 0) {
- /* checksum error */
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("VPD Checksum Error\n"));
- return(1);
- }
-
- /* find and check the end tag of the RW area */
- if (!(r = vpd_find_para(pAC, VPD_RW, &rp))) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Encoding Error: RV Tag not found\n"));
- return(1);
- }
-
- if (r->p_val < pAC->vpd.vpd_buf + vpd_size/2) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Encoding Error: Invalid VPD struct size\n"));
- return(1);
- }
- pAC->vpd.v.vpd_free_rw = r->p_len;
-
- /* everything seems to be ok */
- if (pAC->GIni.GIChipId != 0) {
- pAC->vpd.v.vpd_status |= VPD_VALID;
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_INIT,
- ("done. Free RO = %d, Free RW = %d\n",
- pAC->vpd.v.vpd_free_ro, pAC->vpd.v.vpd_free_rw));
-
- return(0);
-}
-
-/*
- * find the Keyword 'key' in the VPD buffer and fills the
- * parameter struct 'p' with it's values
- *
- * returns *p success
- * 0: parameter was not found or VPD encoding error
- */
-static SK_VPD_PARA *vpd_find_para(
-SK_AC *pAC, /* common data base */
-const char *key, /* keyword to find (e.g. "MN") */
-SK_VPD_PARA *p) /* parameter description struct */
-{
- char *v ; /* points to VPD buffer */
- int max; /* Maximum Number of Iterations */
-
- v = pAC->vpd.vpd_buf;
- max = 128;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD find para %s .. ",key));
-
- /* check mandatory resource type ID string (Product Name) */
- if (*v != (char)RES_ID) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Error: 0x%x missing\n", RES_ID));
- return(0);
- }
-
- if (strcmp(key, VPD_NAME) == 0) {
- p->p_len = VPD_GET_RES_LEN(v);
- p->p_val = VPD_GET_VAL(v);
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("found, len = %d\n", p->p_len));
- return(p);
- }
-
- v += 3 + VPD_GET_RES_LEN(v) + 3;
- for (;; ) {
- if (SK_MEMCMP(key,v,2) == 0) {
- p->p_len = VPD_GET_VPD_LEN(v);
- p->p_val = VPD_GET_VAL(v);
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("found, len = %d\n",p->p_len));
- return(p);
- }
-
- /* exit when reaching the "RW" Tag or the maximum of itera. */
- max--;
- if (SK_MEMCMP(VPD_RW,v,2) == 0 || max == 0) {
- break;
- }
-
- if (SK_MEMCMP(VPD_RV,v,2) == 0) {
- v += 3 + VPD_GET_VPD_LEN(v) + 3; /* skip VPD-W */
- }
- else {
- v += 3 + VPD_GET_VPD_LEN(v);
- }
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("scanning '%c%c' len = %d\n",v[0],v[1],v[2]));
- }
-
-#ifdef DEBUG
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL, ("not found\n"));
- if (max == 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Key/Len Encoding error\n"));
- }
-#endif /* DEBUG */
- return(0);
-}
-
-/*
- * Move 'n' bytes. Begin with the last byte if 'n' is > 0,
- * Start with the last byte if n is < 0.
- *
- * returns nothing
- */
-static void vpd_move_para(
-char *start, /* start of memory block */
-char *end, /* end of memory block to move */
-int n) /* number of bytes the memory block has to be moved */
-{
- char *p;
- int i; /* number of byte copied */
-
- if (n == 0)
- return;
-
- i = (int) (end - start + 1);
- if (n < 0) {
- p = start + n;
- while (i != 0) {
- *p++ = *start++;
- i--;
- }
- }
- else {
- p = end + n;
- while (i != 0) {
- *p-- = *end--;
- i--;
- }
- }
-}
-
-/*
- * setup the VPD keyword 'key' at 'ip'.
- *
- * returns nothing
- */
-static void vpd_insert_key(
-const char *key, /* keyword to insert */
-const char *buf, /* buffer with the keyword value */
-int len, /* length of the value string */
-char *ip) /* inseration point */
-{
- SK_VPD_KEY *p;
-
- p = (SK_VPD_KEY *) ip;
- p->p_key[0] = key[0];
- p->p_key[1] = key[1];
- p->p_len = (unsigned char) len;
- SK_MEMCPY(&p->p_val,buf,len);
-}
-
-/*
- * Setup the VPD end tag "RV" / "RW".
- * Also correct the remaining space variables vpd_free_ro / vpd_free_rw.
- *
- * returns 0: success
- * 1: encoding error
- */
-static int vpd_mod_endtag(
-SK_AC *pAC, /* common data base */
-char *etp) /* end pointer input position */
-{
- SK_VPD_KEY *p;
- unsigned char x;
- int i;
- int vpd_size;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD modify endtag at 0x%x = '%c%c'\n",etp,etp[0],etp[1]));
-
- vpd_size = pAC->vpd.vpd_size;
-
- p = (SK_VPD_KEY *) etp;
-
- if (p->p_key[0] != 'R' || (p->p_key[1] != 'V' && p->p_key[1] != 'W')) {
- /* something wrong here, encoding error */
- SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
- ("Encoding Error: invalid end tag\n"));
- return(1);
- }
- if (etp > pAC->vpd.vpd_buf + vpd_size/2) {
- /* create "RW" tag */
- p->p_len = (unsigned char)(pAC->vpd.vpd_buf+vpd_size-etp-3-1);
- pAC->vpd.v.vpd_free_rw = (int) p->p_len;
- i = pAC->vpd.v.vpd_free_rw;
- etp += 3;
- }
- else {
- /* create "RV" tag */
- p->p_len = (unsigned char)(pAC->vpd.vpd_buf+vpd_size/2-etp-3);
- pAC->vpd.v.vpd_free_ro = (int) p->p_len - 1;
-
- /* setup checksum */
- for (i = 0, x = 0; i < vpd_size/2 - p->p_len; i++) {
- x += pAC->vpd.vpd_buf[i];
- }
- p->p_val = (char) 0 - x;
- i = pAC->vpd.v.vpd_free_ro;
- etp += 4;
- }
- while (i) {
- *etp++ = 0x00;
- i--;
- }
-
- return(0);
-}
-
-/*
- * Insert a VPD keyword into the VPD buffer.
- *
- * The keyword 'key' is inserted at the position 'ip' in the
- * VPD buffer.
- * The keywords behind the input position will
- * be moved. The VPD end tag "RV" or "RW" is generated again.
- *
- * returns 0: success
- * 2: value string was cut
- * 4: VPD full, keyword was not written
- * 6: fatal VPD error
- *
- */
-int VpdSetupPara(
-SK_AC *pAC, /* common data base */
-const char *key, /* keyword to insert */
-const char *buf, /* buffer with the keyword value */
-int len, /* length of the keyword value */
-int type, /* VPD_RO_KEY or VPD_RW_KEY */
-int op) /* operation to do: ADD_KEY or OWR_KEY */
-{
- SK_VPD_PARA vp;
- char *etp; /* end tag position */
- int free; /* remaining space in selected area */
- char *ip; /* input position inside the VPD buffer */
- int rtv; /* return code */
- int head; /* additional haeder bytes to move */
- int found; /* additinoal bytes if the keyword was found */
- int vpd_size;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("VPD setup para key = %s, val = %s\n",key,buf));
-
- vpd_size = pAC->vpd.vpd_size;
-
- rtv = 0;
- ip = 0;
- if (type == VPD_RW_KEY) {
- /* end tag is "RW" */
- free = pAC->vpd.v.vpd_free_rw;
- etp = pAC->vpd.vpd_buf + (vpd_size - free - 1 - 3);
- }
- else {
- /* end tag is "RV" */
- free = pAC->vpd.v.vpd_free_ro;
- etp = pAC->vpd.vpd_buf + (vpd_size/2 - free - 4);
- }
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("Free RO = %d, Free RW = %d\n",
- pAC->vpd.v.vpd_free_ro, pAC->vpd.v.vpd_free_rw));
-
- head = 0;
- found = 0;
- if (op == OWR_KEY) {
- if (vpd_find_para(pAC, key, &vp)) {
- found = 3;
- ip = vp.p_val - 3;
- free += vp.p_len + 3;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("Overwrite Key\n"));
- }
- else {
- op = ADD_KEY;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
- ("Add Key\n"));
- }
- }
- if (op == ADD_KEY) {
- ip = etp;
- vp.p_len = 0;
- head = 3;
- }
-
- if (len + 3 > free) {
- if (free < 7) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD Buffer Overflow, keyword not written\n"));
- return(4);
- }
- /* cut it again */
- len = free - 3;
- rtv = 2;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD Buffer Full, Keyword was cut\n"));
- }
-
- vpd_move_para(ip + vp.p_len + found, etp+2, len-vp.p_len+head);
- vpd_insert_key(key, buf, len, ip);
- if (vpd_mod_endtag(pAC, etp + len - vp.p_len + head)) {
- pAC->vpd.v.vpd_status &= ~VPD_VALID;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD Encoding Error\n"));
- return(6);
- }
-
- return(rtv);
-}
-
-
-/*
- * Read the contents of the VPD EEPROM and copy it to the
- * VPD buffer if not already done.
- *
- * return: A pointer to the vpd_status structure. The structure contains
- * this fields.
- */
-SK_VPD_STATUS *VpdStat(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC) /* IO Context */
-{
- if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
- (void)VpdInit(pAC, IoC);
- }
- return(&pAC->vpd.v);
-}
-
-
-/*
- * Read the contents of the VPD EEPROM and copy it to the VPD
- * buffer if not already done.
- * Scan the VPD buffer for VPD keywords and create the VPD
- * keyword list by copying the keywords to 'buf', all after
- * each other and terminated with a '\0'.
- *
- * Exceptions: o The Resource Type ID String (product name) is called "Name"
- * o The VPD end tags 'RV' and 'RW' are not listed
- *
- * The number of copied keywords is counted in 'elements'.
- *
- * returns 0: success
- * 2: buffer overfull, one or more keywords are missing
- * 6: fatal VPD error
- *
- * example values after returning:
- *
- * buf = "Name\0PN\0EC\0MN\0SN\0CP\0VF\0VL\0YA\0"
- * *len = 30
- * *elements = 9
- */
-int VpdKeys(
-SK_AC *pAC, /* common data base */
-SK_IOC IoC, /* IO Context */
-char *buf, /* buffer where to copy the keywords */
-int *len, /* buffer length */
-int *elements) /* number of keywords returned */
-{
- char *v;
- int n;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX, ("list VPD keys .. "));
- *elements = 0;
- if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
- if (VpdInit(pAC, IoC) != 0) {
- *len = 0;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD Init Error, terminated\n"));
- return(6);
- }
- }
-
- if ((signed)strlen(VPD_NAME) + 1 <= *len) {
- v = pAC->vpd.vpd_buf;
- strcpy(buf,VPD_NAME);
- n = strlen(VPD_NAME) + 1;
- buf += n;
- *elements = 1;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX,
- ("'%c%c' ",v[0],v[1]));
- }
- else {
- *len = 0;
- SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_ERR,
- ("buffer overflow\n"));
- return(2);
- }
-
- v += 3 + VPD_GET_RES_LEN(v) + 3;
- for (;; ) {
- /* exit when reaching the "RW" Tag */
- if (SK_MEMCMP(VPD_RW,v,2) == 0) {
- break;
- }
-
- if (SK_MEMCMP(VPD_RV,v,2) == 0) {
- v += 3 + VPD_GET_VPD_LEN(v) + 3; /* skip VPD-W */
- continue;
- }
-
- if (n+3 <= *len) {
- SK_MEMCPY(buf,v,2);
- buf += 2;
- *buf++ = '\0';
- n += 3;
- v += 3 + VPD_GET_VPD_LEN(v);
- *elements += 1;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX,
- ("'%c%c' ",v[0],v[1]));
- }
- else {
- *len = n;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("buffer overflow\n"));
- return(2);
- }
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX, ("\n"));
- *len = n;
- return(0);
-}
-
-
-/*
- * Read the contents of the VPD EEPROM and copy it to the
- * VPD buffer if not already done. Search for the VPD keyword
- * 'key' and copy its value to 'buf'. Add a terminating '\0'.
- * If the value does not fit into the buffer cut it after
- * 'len' - 1 bytes.
- *
- * returns 0: success
- * 1: keyword not found
- * 2: value string was cut
- * 3: VPD transfer timeout
- * 6: fatal VPD error
- */
-int VpdRead(
-SK_AC *pAC, /* common data base */
-SK_IOC IoC, /* IO Context */
-const char *key, /* keyword to read (e.g. "MN") */
-char *buf, /* buffer where to copy the keyword value */
-int *len) /* buffer length */
-{
- SK_VPD_PARA *p, vp;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX, ("VPD read %s .. ", key));
- if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
- if (VpdInit(pAC, IoC) != 0) {
- *len = 0;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD init error\n"));
- return(6);
- }
- }
-
- if ((p = vpd_find_para(pAC, key, &vp)) != NULL) {
- if (p->p_len > (*(unsigned *)len)-1) {
- p->p_len = *len - 1;
- }
- SK_MEMCPY(buf, p->p_val, p->p_len);
- buf[p->p_len] = '\0';
- *len = p->p_len;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX,
- ("%c%c%c%c.., len = %d\n",
- buf[0],buf[1],buf[2],buf[3],*len));
- }
- else {
- *len = 0;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR, ("not found\n"));
- return(1);
- }
- return(0);
-}
-
-
-/*
- * Check whether a given key may be written
- *
- * returns
- * SK_TRUE Yes it may be written
- * SK_FALSE No it may be written
- */
-SK_BOOL VpdMayWrite(
-char *key) /* keyword to write (allowed values "Yx", "Vx") */
-{
- if ((*key != 'Y' && *key != 'V') ||
- key[1] < '0' || key[1] > 'Z' ||
- (key[1] > '9' && key[1] < 'A') || strlen(key) != 2) {
-
- return(SK_FALSE);
- }
- return(SK_TRUE);
-}
-
-/*
- * Read the contents of the VPD EEPROM and copy it to the VPD
- * buffer if not already done. Insert/overwrite the keyword 'key'
- * in the VPD buffer. Cut the keyword value if it does not fit
- * into the VPD read / write area.
- *
- * returns 0: success
- * 2: value string was cut
- * 3: VPD transfer timeout
- * 4: VPD full, keyword was not written
- * 5: keyword cannot be written
- * 6: fatal VPD error
- */
-int VpdWrite(
-SK_AC *pAC, /* common data base */
-SK_IOC IoC, /* IO Context */
-const char *key, /* keyword to write (allowed values "Yx", "Vx") */
-const char *buf) /* buffer where the keyword value can be read from */
-{
- int len; /* length of the keyword to write */
- int rtv; /* return code */
- int rtv2;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX,
- ("VPD write %s = %s\n",key,buf));
-
- if ((*key != 'Y' && *key != 'V') ||
- key[1] < '0' || key[1] > 'Z' ||
- (key[1] > '9' && key[1] < 'A') || strlen(key) != 2) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("illegal key tag, keyword not written\n"));
- return(5);
- }
-
- if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
- if (VpdInit(pAC, IoC) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD init error\n"));
- return(6);
- }
- }
-
- rtv = 0;
- len = strlen(buf);
- if (len > VPD_MAX_LEN) {
- /* cut it */
- len = VPD_MAX_LEN;
- rtv = 2;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("keyword too long, cut after %d bytes\n",VPD_MAX_LEN));
- }
- if ((rtv2 = VpdSetupPara(pAC, key, buf, len, VPD_RW_KEY, OWR_KEY)) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD write error\n"));
- return(rtv2);
- }
-
- return(rtv);
-}
-
-/*
- * Read the contents of the VPD EEPROM and copy it to the
- * VPD buffer if not already done. Remove the VPD keyword
- * 'key' from the VPD buffer.
- * Only the keywords in the read/write area can be deleted.
- * Keywords in the read only area cannot be deleted.
- *
- * returns 0: success, keyword was removed
- * 1: keyword not found
- * 5: keyword cannot be deleted
- * 6: fatal VPD error
- */
-int VpdDelete(
-SK_AC *pAC, /* common data base */
-SK_IOC IoC, /* IO Context */
-char *key) /* keyword to read (e.g. "MN") */
-{
- SK_VPD_PARA *p, vp;
- char *etp;
- int vpd_size;
-
- vpd_size = pAC->vpd.vpd_size;
-
- SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_TX,("VPD delete key %s\n",key));
- if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
- if (VpdInit(pAC, IoC) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD init error\n"));
- return(6);
- }
- }
-
- if ((p = vpd_find_para(pAC, key, &vp)) != NULL) {
- if (p->p_val < pAC->vpd.vpd_buf + vpd_size/2) {
- /* try to delete read only keyword */
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("cannot delete RO keyword\n"));
- return(5);
- }
-
- etp = pAC->vpd.vpd_buf + (vpd_size-pAC->vpd.v.vpd_free_rw-1-3);
-
- vpd_move_para(vp.p_val+vp.p_len, etp+2,
- - ((int)(vp.p_len + 3)));
- if (vpd_mod_endtag(pAC, etp - vp.p_len - 3)) {
- pAC->vpd.v.vpd_status &= ~VPD_VALID;
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD encoding error\n"));
- return(6);
- }
- }
- else {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("keyword not found\n"));
- return(1);
- }
-
- return(0);
-}
-
-/*
- * If the VPD buffer contains valid data write the VPD
- * read/write area back to the VPD EEPROM.
- *
- * returns 0: success
- * 3: VPD transfer timeout
- */
-int VpdUpdate(
-SK_AC *pAC, /* Adapters context */
-SK_IOC IoC) /* IO Context */
-{
- int vpd_size;
-
- vpd_size = pAC->vpd.vpd_size;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("VPD update .. "));
- if ((pAC->vpd.v.vpd_status & VPD_VALID) != 0) {
- if (VpdTransferBlock(pAC, IoC, pAC->vpd.vpd_buf + vpd_size/2,
- vpd_size/2, vpd_size/2, VPD_WRITE) != vpd_size/2) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("transfer timed out\n"));
- return(3);
- }
- }
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("done\n"));
- return(0);
-}
-
-
-/*
- * Read the contents of the VPD EEPROM and copy it to the VPD buffer
- * if not already done. If the keyword "VF" is not present it will be
- * created and the error log message will be stored to this keyword.
- * If "VF" is not present the error log message will be stored to the
- * keyword "VL". "VL" will created or overwritten if "VF" is present.
- * The VPD read/write area is saved to the VPD EEPROM.
- *
- * returns nothing, errors will be ignored.
- */
-void VpdErrLog(
-SK_AC *pAC, /* common data base */
-SK_IOC IoC, /* IO Context */
-char *msg) /* error log message */
-{
- SK_VPD_PARA *v, vf; /* VF */
- int len;
-
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX,
- ("VPD error log msg %s\n", msg));
- if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
- if (VpdInit(pAC, IoC) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
- ("VPD init error\n"));
- return;
- }
- }
-
- len = strlen(msg);
- if (len > VPD_MAX_LEN) {
- /* cut it */
- len = VPD_MAX_LEN;
- }
- if ((v = vpd_find_para(pAC, VPD_VF, &vf)) != NULL) {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("overwrite VL\n"));
- (void)VpdSetupPara(pAC, VPD_VL, msg, len, VPD_RW_KEY, OWR_KEY);
- }
- else {
- SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("write VF\n"));
- (void)VpdSetupPara(pAC, VPD_VF, msg, len, VPD_RW_KEY, ADD_KEY);
- }
-
- (void)VpdUpdate(pAC, IoC);
-}
+/******************************************************************************
+ *
+ * Name: skvpd.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Shared software to read and write VPD data
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skvpd.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.37 2003/01/13 10:42:45 rschmidt
+ * Replaced check for PCI device Id from YUKON with GENESIS
+ * to set the VPD size in VpdInit()
+ * Editorial changes
+ *
+ * Revision 1.36 2002/11/14 15:16:56 gheinig
+ * Added const specifier to key and buf parameters for VpdPara, VpdRead
+ * and VpdWrite for Diag 7 GUI
+ *
+ * Revision 1.35 2002/10/21 14:31:59 gheinig
+ * Took out CVS web garbage at head of file
+ *
+ * Revision 1.34 2002/10/21 11:47:24 gheinig
+ * Reverted to version 1.32 due to unwanted commit
+ *
+ * Revision 1.32 2002/10/14 16:04:29 rschmidt
+ * Added saving of VPD ROM Size from PCI_OUR_REG_2
+ * Avoid reading of PCI_OUR_REG_2 in VpdTransferBlock()
+ * Editorial changes
+ *
+ * Revision 1.31 2002/09/10 09:21:32 mkarl
+ * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis
+ *
+ * Revision 1.30 2002/09/09 14:43:03 mkarl
+ * changes for diagnostics in order to read VPD data before the adapter
+ * has been initialized
+ * editorial changes
+ *
+ * Revision 1.29 2002/07/26 13:20:43 mkarl
+ * added Yukon support
+ * save size of VPD in pAC->vpd.vpd_size
+ *
+ * Revision 1.28 2002/04/02 15:31:47 afischer
+ * Bug fix in VpdWait()
+ *
+ * Revision 1.27 2000/08/10 11:29:06 rassmann
+ * Editorial changes.
+ * Preserving 32-bit alignment in structs for the adapter context.
+ * Removed unused function VpdWriteDword() (#if 0).
+ * Made VpdReadKeyword() available for SKDIAG only.
+ *
+ * Revision 1.26 2000/06/13 08:00:01 mkarl
+ * additional cast to avoid compile problems in 64 bit environment
+ *
+ * Revision 1.25 1999/11/22 13:39:32 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.24 1999/03/11 14:25:49 malthoff
+ * Replace __STDC__ with SK_KR_PROTO.
+ *
+ * Revision 1.23 1999/01/11 15:13:11 gklug
+ * fix: syntax error
+ *
+ * Revision 1.22 1998/10/30 06:41:15 gklug
+ * rmv: WARNING
+ *
+ * Revision 1.21 1998/10/29 07:15:14 gklug
+ * fix: Write Stream function needs verify.
+ *
+ * Revision 1.20 1998/10/28 18:05:08 gklug
+ * chg: no DEBUG in VpdMayWrite
+ *
+ * Revision 1.19 1998/10/28 15:56:11 gklug
+ * fix: Return len at end of ReadStream
+ * fix: Write even less than 4 bytes correctly
+ *
+ * Revision 1.18 1998/10/28 09:00:47 gklug
+ * fix: unreferenced local vars
+ *
+ * Revision 1.17 1998/10/28 08:25:45 gklug
+ * fix: WARNING
+ *
+ * Revision 1.16 1998/10/28 08:17:30 gklug
+ * fix: typo
+ *
+ * Revision 1.15 1998/10/28 07:50:32 gklug
+ * fix: typo
+ *
+ * Revision 1.14 1998/10/28 07:20:38 gklug
+ * chg: Interface functions to use IoC as parameter as well
+ * fix: VpdRead/WriteDWord now returns SK_U32
+ * chg: VPD_IN/OUT names conform to SK_IN/OUT
+ * add: usage of VPD_IN/OUT8 macros
+ * add: VpdRead/Write Stream functions to r/w a stream of data
+ * fix: VpdTransferBlock swapped illegal
+ * add: VpdMayWrite
+ *
+ * Revision 1.13 1998/10/22 10:02:37 gklug
+ * fix: SysKonnectFileId typo
+ *
+ * Revision 1.12 1998/10/20 10:01:01 gklug
+ * fix: parameter to SkOsGetTime
+ *
+ * Revision 1.11 1998/10/15 12:51:48 malthoff
+ * Remove unrequired parameter p in vpd_setup_para().
+ *
+ * Revision 1.10 1998/10/08 14:52:43 malthoff
+ * Remove CvsId by SysKonnectFileId.
+ *
+ * Revision 1.9 1998/09/16 07:33:52 malthoff
+ * replace memcmp() by SK_MEMCMP and
+ * memcpy() by SK_MEMCPY() to be
+ * independent from the 'C' Standard Library.
+ *
+ * Revision 1.8 1998/08/19 12:52:35 malthoff
+ * compiler fix: use SK_VPD_KEY instead of S_VPD.
+ *
+ * Revision 1.7 1998/08/19 08:14:01 gklug
+ * fix: remove struct keyword as much as possible from the C-code (see CCC)
+ *
+ * Revision 1.6 1998/08/18 13:03:58 gklug
+ * SkOsGetTime now returns SK_U64
+ *
+ * Revision 1.5 1998/08/18 08:17:29 malthoff
+ * Ensure we issue a VPD read in vpd_read_dword().
+ * Discard all VPD keywords other than Vx or Yx, where
+ * x is '0..9' or 'A..Z'.
+ *
+ * Revision 1.4 1998/07/03 14:52:19 malthoff
+ * Add category SK_DBGCAT_FATAL to some debug macros.
+ * bug fix: correct the keyword name check in vpd_write().
+ *
+ * Revision 1.3 1998/06/26 11:16:53 malthoff
+ * Correct the modified File Identifier.
+ *
+ * Revision 1.2 1998/06/26 11:13:43 malthoff
+ * Modify the File Identifier.
+ *
+ * Revision 1.1 1998/06/19 14:11:08 malthoff
+ * Created, Tests with AIX were performed successfully
+ *
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+/*
+ Please refer skvpd.txt for infomation how to include this module
+ */
+static const char SysKonnectFileId[] =
+ "@(#)$Id: skvpd.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $ (C) SK";
+
+#include "h/skdrv1st.h"
+#include "h/sktypes.h"
+#include "h/skdebug.h"
+#include "h/skdrv2nd.h"
+
+/*
+ * Static functions
+ */
+#ifndef SK_KR_PROTO
+static SK_VPD_PARA *vpd_find_para(
+ SK_AC *pAC,
+ const char *key,
+ SK_VPD_PARA *p);
+#else /* SK_KR_PROTO */
+static SK_VPD_PARA *vpd_find_para();
+#endif /* SK_KR_PROTO */
+
+/*
+ * waits for a completion of a VPD transfer
+ * The VPD transfer must complete within SK_TICKS_PER_SEC/16
+ *
+ * returns 0: success, transfer completes
+ * error exit(9) with a error message
+ */
+static int VpdWait(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC, /* IO Context */
+int event) /* event to wait for (VPD_READ / VPD_write) completion*/
+{
+ SK_U64 start_time;
+ SK_U16 state;
+
+ SK_DBG_MSG(pAC,SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD wait for %s\n", event?"Write":"Read"));
+ start_time = SkOsGetTime(pAC);
+ do {
+ if (SkOsGetTime(pAC) - start_time > SK_TICKS_PER_SEC) {
+
+ /* Bug fix AF: Thu Mar 28 2002
+ * Do not call: VPD_STOP(pAC, IoC);
+ * A pending VPD read cycle can not be aborted by writing
+ * VPD_WRITE to the PCI_VPD_ADR_REG (VPD address register).
+ * Although the write threshold in the OUR-register protects
+ * VPD read only space from being overwritten this does not
+ * protect a VPD read from being `converted` into a VPD write
+ * operation (on the fly). As a consequence the VPD_STOP would
+ * delete VPD read only data. In case of any problems with the
+ * I2C bus we exit the loop here. The I2C read operation can
+ * not be aborted except by a reset (->LR).
+ */
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_FATAL | SK_DBGCAT_ERR,
+ ("ERROR:VPD wait timeout\n"));
+ return(1);
+ }
+
+ VPD_IN16(pAC, IoC, PCI_VPD_ADR_REG, &state);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("state = %x, event %x\n",state,event));
+ } while((int)(state & PCI_VPD_FLAG) == event);
+
+ return(0);
+}
+
+#ifdef SKDIAG
+
+/*
+ * Read the dword at address 'addr' from the VPD EEPROM.
+ *
+ * Needed Time: MIN 1,3 ms MAX 2,6 ms
+ *
+ * Note: The DWord is returned in the endianess of the machine the routine
+ * is running on.
+ *
+ * Returns the data read.
+ */
+SK_U32 VpdReadDWord(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC, /* IO Context */
+int addr) /* VPD address */
+{
+ SK_U32 Rtv;
+
+ /* start VPD read */
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD read dword at 0x%x\n",addr));
+ addr &= ~VPD_WRITE; /* ensure the R/W bit is set to read */
+
+ VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, (SK_U16)addr);
+
+ /* ignore return code here */
+ (void)VpdWait(pAC, IoC, VPD_READ);
+
+ /* Don't swap here, it's a data stream of bytes */
+ Rtv = 0;
+
+ VPD_IN32(pAC, IoC, PCI_VPD_DAT_REG, &Rtv);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD read dword data = 0x%x\n",Rtv));
+ return(Rtv);
+}
+
+#endif /* SKDIAG */
+
+#if 0
+
+/*
+ Write the dword 'data' at address 'addr' into the VPD EEPROM, and
+ verify that the data is written.
+
+ Needed Time:
+
+. MIN MAX
+. -------------------------------------------------------------------
+. write 1.8 ms 3.6 ms
+. internal write cyles 0.7 ms 7.0 ms
+. -------------------------------------------------------------------
+. over all program time 2.5 ms 10.6 ms
+. read 1.3 ms 2.6 ms
+. -------------------------------------------------------------------
+. over all 3.8 ms 13.2 ms
+.
+
+
+ Returns 0: success
+ 1: error, I2C transfer does not terminate
+ 2: error, data verify error
+
+ */
+static int VpdWriteDWord(
+SK_AC *pAC, /* pAC pointer */
+SK_IOC IoC, /* IO Context */
+int addr, /* VPD address */
+SK_U32 data) /* VPD data to write */
+{
+ /* start VPD write */
+ /* Don't swap here, it's a data stream of bytes */
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD write dword at addr 0x%x, data = 0x%x\n",addr,data));
+ VPD_OUT32(pAC, IoC, PCI_VPD_DAT_REG, (SK_U32)data);
+ /* But do it here */
+ addr |= VPD_WRITE;
+
+ VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, (SK_U16)(addr | VPD_WRITE));
+
+ /* this may take up to 10,6 ms */
+ if (VpdWait(pAC, IoC, VPD_WRITE)) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("Write Timed Out\n"));
+ return(1);
+ };
+
+ /* verify data */
+ if (VpdReadDWord(pAC, IoC, addr) != data) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Data Verify Error\n"));
+ return(2);
+ }
+ return(0);
+} /* VpdWriteDWord */
+
+#endif /* 0 */
+
+/*
+ * Read one Stream of 'len' bytes of VPD data, starting at 'addr' from
+ * or to the I2C EEPROM.
+ *
+ * Returns number of bytes read / written.
+ */
+static int VpdWriteStream(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC, /* IO Context */
+char *buf, /* data buffer */
+int Addr, /* VPD start address */
+int Len) /* number of bytes to read / to write */
+{
+ int i;
+ int j;
+ SK_U16 AdrReg;
+ int Rtv;
+ SK_U8 * pComp; /* Compare pointer */
+ SK_U8 Data; /* Input Data for Compare */
+
+ /* Init Compare Pointer */
+ pComp = (SK_U8 *) buf;
+
+ for (i = 0; i < Len; i++, buf++) {
+ if ((i%sizeof(SK_U32)) == 0) {
+ /*
+ * At the begin of each cycle read the Data Reg
+ * So it is initialized even if only a few bytes
+ * are written.
+ */
+ AdrReg = (SK_U16) Addr;
+ AdrReg &= ~VPD_WRITE; /* READ operation */
+
+ VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
+
+ /* Wait for termination */
+ Rtv = VpdWait(pAC, IoC, VPD_READ);
+ if (Rtv != 0) {
+ return(i);
+ }
+ }
+
+ /* Write current Byte */
+ VPD_OUT8(pAC, IoC, PCI_VPD_DAT_REG + (i%sizeof(SK_U32)),
+ *(SK_U8*)buf);
+
+ if (((i%sizeof(SK_U32)) == 3) || (i == (Len - 1))) {
+ /* New Address needs to be written to VPD_ADDR reg */
+ AdrReg = (SK_U16) Addr;
+ Addr += sizeof(SK_U32);
+ AdrReg |= VPD_WRITE; /* WRITE operation */
+
+ VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
+
+ /* Wait for termination */
+ Rtv = VpdWait(pAC, IoC, VPD_WRITE);
+ if (Rtv != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("Write Timed Out\n"));
+ return(i - (i%sizeof(SK_U32)));
+ }
+
+ /*
+ * Now re-read to verify
+ */
+ AdrReg &= ~VPD_WRITE; /* READ operation */
+
+ VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
+
+ /* Wait for termination */
+ Rtv = VpdWait(pAC, IoC, VPD_READ);
+ if (Rtv != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("Verify Timed Out\n"));
+ return(i - (i%sizeof(SK_U32)));
+ }
+
+ for (j = 0; j <= (int)(i%sizeof(SK_U32)); j++, pComp++) {
+
+ VPD_IN8(pAC, IoC, PCI_VPD_DAT_REG + j, &Data);
+
+ if (Data != *pComp) {
+ /* Verify Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("WriteStream Verify Error\n"));
+ return(i - (i%sizeof(SK_U32)) + j);
+ }
+ }
+ }
+ }
+
+ return(Len);
+}
+
+
+/*
+ * Read one Stream of 'len' bytes of VPD data, starting at 'addr' from
+ * or to the I2C EEPROM.
+ *
+ * Returns number of bytes read / written.
+ */
+static int VpdReadStream(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC, /* IO Context */
+char *buf, /* data buffer */
+int Addr, /* VPD start address */
+int Len) /* number of bytes to read / to write */
+{
+ int i;
+ SK_U16 AdrReg;
+ int Rtv;
+
+ for (i = 0; i < Len; i++, buf++) {
+ if ((i%sizeof(SK_U32)) == 0) {
+ /* New Address needs to be written to VPD_ADDR reg */
+ AdrReg = (SK_U16) Addr;
+ Addr += sizeof(SK_U32);
+ AdrReg &= ~VPD_WRITE; /* READ operation */
+
+ VPD_OUT16(pAC, IoC, PCI_VPD_ADR_REG, AdrReg);
+
+ /* Wait for termination */
+ Rtv = VpdWait(pAC, IoC, VPD_READ);
+ if (Rtv != 0) {
+ return(i);
+ }
+ }
+ VPD_IN8(pAC, IoC, PCI_VPD_DAT_REG + (i%sizeof(SK_U32)),
+ (SK_U8 *)buf);
+ }
+
+ return(Len);
+}
+
+/*
+ * Read ore writes 'len' bytes of VPD data, starting at 'addr' from
+ * or to the I2C EEPROM.
+ *
+ * Returns number of bytes read / written.
+ */
+static int VpdTransferBlock(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC, /* IO Context */
+char *buf, /* data buffer */
+int addr, /* VPD start address */
+int len, /* number of bytes to read / to write */
+int dir) /* transfer direction may be VPD_READ or VPD_WRITE */
+{
+ int Rtv; /* Return value */
+ int vpd_rom_size;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD %s block, addr = 0x%x, len = %d\n",
+ dir ? "write" : "read", addr, len));
+
+ if (len == 0)
+ return(0);
+
+ vpd_rom_size = pAC->vpd.rom_size;
+
+ if (addr > vpd_rom_size - 4) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Address error: 0x%x, exp. < 0x%x\n",
+ addr, vpd_rom_size - 4));
+ return(0);
+ }
+
+ if (addr + len > vpd_rom_size) {
+ len = vpd_rom_size - addr;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("Warning: len was cut to %d\n", len));
+ }
+
+ if (dir == VPD_READ) {
+ Rtv = VpdReadStream(pAC, IoC, buf, addr, len);
+ }
+ else {
+ Rtv = VpdWriteStream(pAC, IoC, buf, addr, len);
+ }
+
+ return(Rtv);
+}
+
+#ifdef SKDIAG
+
+/*
+ * Read 'len' bytes of VPD data, starting at 'addr'.
+ *
+ * Returns number of bytes read.
+ */
+int VpdReadBlock(
+SK_AC *pAC, /* pAC pointer */
+SK_IOC IoC, /* IO Context */
+char *buf, /* buffer were the data should be stored */
+int addr, /* start reading at the VPD address */
+int len) /* number of bytes to read */
+{
+ return(VpdTransferBlock(pAC, IoC, buf, addr, len, VPD_READ));
+}
+
+/*
+ * Write 'len' bytes of *but to the VPD EEPROM, starting at 'addr'.
+ *
+ * Returns number of bytes writes.
+ */
+int VpdWriteBlock(
+SK_AC *pAC, /* pAC pointer */
+SK_IOC IoC, /* IO Context */
+char *buf, /* buffer, holds the data to write */
+int addr, /* start writing at the VPD address */
+int len) /* number of bytes to write */
+{
+ return(VpdTransferBlock(pAC, IoC, buf, addr, len, VPD_WRITE));
+}
+#endif /* SKDIAG */
+
+/*
+ * (re)initialize the VPD buffer
+ *
+ * Reads the VPD data from the EEPROM into the VPD buffer.
+ * Get the remaining read only and read / write space.
+ *
+ * return 0: success
+ * 1: fatal VPD error
+ */
+static int VpdInit(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC) /* IO Context */
+{
+ SK_VPD_PARA *r, rp; /* RW or RV */
+ int i;
+ unsigned char x;
+ int vpd_size;
+ SK_U16 dev_id;
+ SK_U32 our_reg2;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_INIT, ("VpdInit .. "));
+
+ VPD_IN16(pAC, IoC, PCI_DEVICE_ID, &dev_id);
+
+ VPD_IN32(pAC, IoC, PCI_OUR_REG_2, &our_reg2);
+
+ pAC->vpd.rom_size = 256 << ((our_reg2 & PCI_VPD_ROM_SZ) >> 14);
+
+ /*
+ * this function might get used before the hardware is initialized
+ * therefore we cannot always trust in GIChipId
+ */
+ if (((pAC->vpd.v.vpd_status & VPD_VALID) == 0 &&
+ dev_id != VPD_DEV_ID_GENESIS) ||
+ ((pAC->vpd.v.vpd_status & VPD_VALID) != 0 &&
+ !pAC->GIni.GIGenesis)) {
+
+ /* for Yukon the VPD size is always 256 */
+ vpd_size = VPD_SIZE_YUKON;
+ }
+ else {
+ /* Genesis uses the maximum ROM size up to 512 for VPD */
+ if (pAC->vpd.rom_size > VPD_SIZE_GENESIS) {
+ vpd_size = VPD_SIZE_GENESIS;
+ }
+ else {
+ vpd_size = pAC->vpd.rom_size;
+ }
+ }
+
+ /* read the VPD data into the VPD buffer */
+ if (VpdTransferBlock(pAC, IoC, pAC->vpd.vpd_buf, 0, vpd_size, VPD_READ)
+ != vpd_size) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("Block Read Error\n"));
+ return(1);
+ }
+
+ pAC->vpd.vpd_size = vpd_size;
+
+ /* find the end tag of the RO area */
+ if (!(r = vpd_find_para(pAC, VPD_RV, &rp))) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Encoding Error: RV Tag not found\n"));
+ return(1);
+ }
+
+ if (r->p_val + r->p_len > pAC->vpd.vpd_buf + vpd_size/2) {
+ SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Encoding Error: Invalid VPD struct size\n"));
+ return(1);
+ }
+ pAC->vpd.v.vpd_free_ro = r->p_len - 1;
+
+ /* test the checksum */
+ for (i = 0, x = 0; (unsigned)i <= (unsigned)vpd_size/2 - r->p_len; i++) {
+ x += pAC->vpd.vpd_buf[i];
+ }
+
+ if (x != 0) {
+ /* checksum error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("VPD Checksum Error\n"));
+ return(1);
+ }
+
+ /* find and check the end tag of the RW area */
+ if (!(r = vpd_find_para(pAC, VPD_RW, &rp))) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Encoding Error: RV Tag not found\n"));
+ return(1);
+ }
+
+ if (r->p_val < pAC->vpd.vpd_buf + vpd_size/2) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Encoding Error: Invalid VPD struct size\n"));
+ return(1);
+ }
+ pAC->vpd.v.vpd_free_rw = r->p_len;
+
+ /* everything seems to be ok */
+ if (pAC->GIni.GIChipId != 0) {
+ pAC->vpd.v.vpd_status |= VPD_VALID;
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_INIT,
+ ("done. Free RO = %d, Free RW = %d\n",
+ pAC->vpd.v.vpd_free_ro, pAC->vpd.v.vpd_free_rw));
+
+ return(0);
+}
+
+/*
+ * find the Keyword 'key' in the VPD buffer and fills the
+ * parameter struct 'p' with it's values
+ *
+ * returns *p success
+ * 0: parameter was not found or VPD encoding error
+ */
+static SK_VPD_PARA *vpd_find_para(
+SK_AC *pAC, /* common data base */
+const char *key, /* keyword to find (e.g. "MN") */
+SK_VPD_PARA *p) /* parameter description struct */
+{
+ char *v ; /* points to VPD buffer */
+ int max; /* Maximum Number of Iterations */
+
+ v = pAC->vpd.vpd_buf;
+ max = 128;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD find para %s .. ",key));
+
+ /* check mandatory resource type ID string (Product Name) */
+ if (*v != (char)RES_ID) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Error: 0x%x missing\n", RES_ID));
+ return(0);
+ }
+
+ if (strcmp(key, VPD_NAME) == 0) {
+ p->p_len = VPD_GET_RES_LEN(v);
+ p->p_val = VPD_GET_VAL(v);
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("found, len = %d\n", p->p_len));
+ return(p);
+ }
+
+ v += 3 + VPD_GET_RES_LEN(v) + 3;
+ for (;; ) {
+ if (SK_MEMCMP(key,v,2) == 0) {
+ p->p_len = VPD_GET_VPD_LEN(v);
+ p->p_val = VPD_GET_VAL(v);
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("found, len = %d\n",p->p_len));
+ return(p);
+ }
+
+ /* exit when reaching the "RW" Tag or the maximum of itera. */
+ max--;
+ if (SK_MEMCMP(VPD_RW,v,2) == 0 || max == 0) {
+ break;
+ }
+
+ if (SK_MEMCMP(VPD_RV,v,2) == 0) {
+ v += 3 + VPD_GET_VPD_LEN(v) + 3; /* skip VPD-W */
+ }
+ else {
+ v += 3 + VPD_GET_VPD_LEN(v);
+ }
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("scanning '%c%c' len = %d\n",v[0],v[1],v[2]));
+ }
+
+#ifdef DEBUG
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL, ("not found\n"));
+ if (max == 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Key/Len Encoding error\n"));
+ }
+#endif /* DEBUG */
+ return(0);
+}
+
+/*
+ * Move 'n' bytes. Begin with the last byte if 'n' is > 0,
+ * Start with the last byte if n is < 0.
+ *
+ * returns nothing
+ */
+static void vpd_move_para(
+char *start, /* start of memory block */
+char *end, /* end of memory block to move */
+int n) /* number of bytes the memory block has to be moved */
+{
+ char *p;
+ int i; /* number of byte copied */
+
+ if (n == 0)
+ return;
+
+ i = (int) (end - start + 1);
+ if (n < 0) {
+ p = start + n;
+ while (i != 0) {
+ *p++ = *start++;
+ i--;
+ }
+ }
+ else {
+ p = end + n;
+ while (i != 0) {
+ *p-- = *end--;
+ i--;
+ }
+ }
+}
+
+/*
+ * setup the VPD keyword 'key' at 'ip'.
+ *
+ * returns nothing
+ */
+static void vpd_insert_key(
+const char *key, /* keyword to insert */
+const char *buf, /* buffer with the keyword value */
+int len, /* length of the value string */
+char *ip) /* inseration point */
+{
+ SK_VPD_KEY *p;
+
+ p = (SK_VPD_KEY *) ip;
+ p->p_key[0] = key[0];
+ p->p_key[1] = key[1];
+ p->p_len = (unsigned char) len;
+ SK_MEMCPY(&p->p_val,buf,len);
+}
+
+/*
+ * Setup the VPD end tag "RV" / "RW".
+ * Also correct the remaining space variables vpd_free_ro / vpd_free_rw.
+ *
+ * returns 0: success
+ * 1: encoding error
+ */
+static int vpd_mod_endtag(
+SK_AC *pAC, /* common data base */
+char *etp) /* end pointer input position */
+{
+ SK_VPD_KEY *p;
+ unsigned char x;
+ int i;
+ int vpd_size;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD modify endtag at 0x%x = '%c%c'\n",etp,etp[0],etp[1]));
+
+ vpd_size = pAC->vpd.vpd_size;
+
+ p = (SK_VPD_KEY *) etp;
+
+ if (p->p_key[0] != 'R' || (p->p_key[1] != 'V' && p->p_key[1] != 'W')) {
+ /* something wrong here, encoding error */
+ SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_ERR | SK_DBGCAT_FATAL,
+ ("Encoding Error: invalid end tag\n"));
+ return(1);
+ }
+ if (etp > pAC->vpd.vpd_buf + vpd_size/2) {
+ /* create "RW" tag */
+ p->p_len = (unsigned char)(pAC->vpd.vpd_buf+vpd_size-etp-3-1);
+ pAC->vpd.v.vpd_free_rw = (int) p->p_len;
+ i = pAC->vpd.v.vpd_free_rw;
+ etp += 3;
+ }
+ else {
+ /* create "RV" tag */
+ p->p_len = (unsigned char)(pAC->vpd.vpd_buf+vpd_size/2-etp-3);
+ pAC->vpd.v.vpd_free_ro = (int) p->p_len - 1;
+
+ /* setup checksum */
+ for (i = 0, x = 0; i < vpd_size/2 - p->p_len; i++) {
+ x += pAC->vpd.vpd_buf[i];
+ }
+ p->p_val = (char) 0 - x;
+ i = pAC->vpd.v.vpd_free_ro;
+ etp += 4;
+ }
+ while (i) {
+ *etp++ = 0x00;
+ i--;
+ }
+
+ return(0);
+}
+
+/*
+ * Insert a VPD keyword into the VPD buffer.
+ *
+ * The keyword 'key' is inserted at the position 'ip' in the
+ * VPD buffer.
+ * The keywords behind the input position will
+ * be moved. The VPD end tag "RV" or "RW" is generated again.
+ *
+ * returns 0: success
+ * 2: value string was cut
+ * 4: VPD full, keyword was not written
+ * 6: fatal VPD error
+ *
+ */
+int VpdSetupPara(
+SK_AC *pAC, /* common data base */
+const char *key, /* keyword to insert */
+const char *buf, /* buffer with the keyword value */
+int len, /* length of the keyword value */
+int type, /* VPD_RO_KEY or VPD_RW_KEY */
+int op) /* operation to do: ADD_KEY or OWR_KEY */
+{
+ SK_VPD_PARA vp;
+ char *etp; /* end tag position */
+ int free; /* remaining space in selected area */
+ char *ip; /* input position inside the VPD buffer */
+ int rtv; /* return code */
+ int head; /* additional haeder bytes to move */
+ int found; /* additinoal bytes if the keyword was found */
+ int vpd_size;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("VPD setup para key = %s, val = %s\n",key,buf));
+
+ vpd_size = pAC->vpd.vpd_size;
+
+ rtv = 0;
+ ip = 0;
+ if (type == VPD_RW_KEY) {
+ /* end tag is "RW" */
+ free = pAC->vpd.v.vpd_free_rw;
+ etp = pAC->vpd.vpd_buf + (vpd_size - free - 1 - 3);
+ }
+ else {
+ /* end tag is "RV" */
+ free = pAC->vpd.v.vpd_free_ro;
+ etp = pAC->vpd.vpd_buf + (vpd_size/2 - free - 4);
+ }
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("Free RO = %d, Free RW = %d\n",
+ pAC->vpd.v.vpd_free_ro, pAC->vpd.v.vpd_free_rw));
+
+ head = 0;
+ found = 0;
+ if (op == OWR_KEY) {
+ if (vpd_find_para(pAC, key, &vp)) {
+ found = 3;
+ ip = vp.p_val - 3;
+ free += vp.p_len + 3;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("Overwrite Key\n"));
+ }
+ else {
+ op = ADD_KEY;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_CTRL,
+ ("Add Key\n"));
+ }
+ }
+ if (op == ADD_KEY) {
+ ip = etp;
+ vp.p_len = 0;
+ head = 3;
+ }
+
+ if (len + 3 > free) {
+ if (free < 7) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD Buffer Overflow, keyword not written\n"));
+ return(4);
+ }
+ /* cut it again */
+ len = free - 3;
+ rtv = 2;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD Buffer Full, Keyword was cut\n"));
+ }
+
+ vpd_move_para(ip + vp.p_len + found, etp+2, len-vp.p_len+head);
+ vpd_insert_key(key, buf, len, ip);
+ if (vpd_mod_endtag(pAC, etp + len - vp.p_len + head)) {
+ pAC->vpd.v.vpd_status &= ~VPD_VALID;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD Encoding Error\n"));
+ return(6);
+ }
+
+ return(rtv);
+}
+
+
+/*
+ * Read the contents of the VPD EEPROM and copy it to the
+ * VPD buffer if not already done.
+ *
+ * return: A pointer to the vpd_status structure. The structure contains
+ * this fields.
+ */
+SK_VPD_STATUS *VpdStat(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC) /* IO Context */
+{
+ if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
+ (void)VpdInit(pAC, IoC);
+ }
+ return(&pAC->vpd.v);
+}
+
+
+/*
+ * Read the contents of the VPD EEPROM and copy it to the VPD
+ * buffer if not already done.
+ * Scan the VPD buffer for VPD keywords and create the VPD
+ * keyword list by copying the keywords to 'buf', all after
+ * each other and terminated with a '\0'.
+ *
+ * Exceptions: o The Resource Type ID String (product name) is called "Name"
+ * o The VPD end tags 'RV' and 'RW' are not listed
+ *
+ * The number of copied keywords is counted in 'elements'.
+ *
+ * returns 0: success
+ * 2: buffer overfull, one or more keywords are missing
+ * 6: fatal VPD error
+ *
+ * example values after returning:
+ *
+ * buf = "Name\0PN\0EC\0MN\0SN\0CP\0VF\0VL\0YA\0"
+ * *len = 30
+ * *elements = 9
+ */
+int VpdKeys(
+SK_AC *pAC, /* common data base */
+SK_IOC IoC, /* IO Context */
+char *buf, /* buffer where to copy the keywords */
+int *len, /* buffer length */
+int *elements) /* number of keywords returned */
+{
+ char *v;
+ int n;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX, ("list VPD keys .. "));
+ *elements = 0;
+ if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
+ if (VpdInit(pAC, IoC) != 0) {
+ *len = 0;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD Init Error, terminated\n"));
+ return(6);
+ }
+ }
+
+ if ((signed)strlen(VPD_NAME) + 1 <= *len) {
+ v = pAC->vpd.vpd_buf;
+ strcpy(buf,VPD_NAME);
+ n = strlen(VPD_NAME) + 1;
+ buf += n;
+ *elements = 1;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX,
+ ("'%c%c' ",v[0],v[1]));
+ }
+ else {
+ *len = 0;
+ SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_ERR,
+ ("buffer overflow\n"));
+ return(2);
+ }
+
+ v += 3 + VPD_GET_RES_LEN(v) + 3;
+ for (;; ) {
+ /* exit when reaching the "RW" Tag */
+ if (SK_MEMCMP(VPD_RW,v,2) == 0) {
+ break;
+ }
+
+ if (SK_MEMCMP(VPD_RV,v,2) == 0) {
+ v += 3 + VPD_GET_VPD_LEN(v) + 3; /* skip VPD-W */
+ continue;
+ }
+
+ if (n+3 <= *len) {
+ SK_MEMCPY(buf,v,2);
+ buf += 2;
+ *buf++ = '\0';
+ n += 3;
+ v += 3 + VPD_GET_VPD_LEN(v);
+ *elements += 1;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX,
+ ("'%c%c' ",v[0],v[1]));
+ }
+ else {
+ *len = n;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("buffer overflow\n"));
+ return(2);
+ }
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX, ("\n"));
+ *len = n;
+ return(0);
+}
+
+
+/*
+ * Read the contents of the VPD EEPROM and copy it to the
+ * VPD buffer if not already done. Search for the VPD keyword
+ * 'key' and copy its value to 'buf'. Add a terminating '\0'.
+ * If the value does not fit into the buffer cut it after
+ * 'len' - 1 bytes.
+ *
+ * returns 0: success
+ * 1: keyword not found
+ * 2: value string was cut
+ * 3: VPD transfer timeout
+ * 6: fatal VPD error
+ */
+int VpdRead(
+SK_AC *pAC, /* common data base */
+SK_IOC IoC, /* IO Context */
+const char *key, /* keyword to read (e.g. "MN") */
+char *buf, /* buffer where to copy the keyword value */
+int *len) /* buffer length */
+{
+ SK_VPD_PARA *p, vp;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX, ("VPD read %s .. ", key));
+ if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
+ if (VpdInit(pAC, IoC) != 0) {
+ *len = 0;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD init error\n"));
+ return(6);
+ }
+ }
+
+ if ((p = vpd_find_para(pAC, key, &vp)) != NULL) {
+ if (p->p_len > (*(unsigned *)len)-1) {
+ p->p_len = *len - 1;
+ }
+ SK_MEMCPY(buf, p->p_val, p->p_len);
+ buf[p->p_len] = '\0';
+ *len = p->p_len;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_RX,
+ ("%c%c%c%c.., len = %d\n",
+ buf[0],buf[1],buf[2],buf[3],*len));
+ }
+ else {
+ *len = 0;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR, ("not found\n"));
+ return(1);
+ }
+ return(0);
+}
+
+
+/*
+ * Check whether a given key may be written
+ *
+ * returns
+ * SK_TRUE Yes it may be written
+ * SK_FALSE No it may be written
+ */
+SK_BOOL VpdMayWrite(
+char *key) /* keyword to write (allowed values "Yx", "Vx") */
+{
+ if ((*key != 'Y' && *key != 'V') ||
+ key[1] < '0' || key[1] > 'Z' ||
+ (key[1] > '9' && key[1] < 'A') || strlen(key) != 2) {
+
+ return(SK_FALSE);
+ }
+ return(SK_TRUE);
+}
+
+/*
+ * Read the contents of the VPD EEPROM and copy it to the VPD
+ * buffer if not already done. Insert/overwrite the keyword 'key'
+ * in the VPD buffer. Cut the keyword value if it does not fit
+ * into the VPD read / write area.
+ *
+ * returns 0: success
+ * 2: value string was cut
+ * 3: VPD transfer timeout
+ * 4: VPD full, keyword was not written
+ * 5: keyword cannot be written
+ * 6: fatal VPD error
+ */
+int VpdWrite(
+SK_AC *pAC, /* common data base */
+SK_IOC IoC, /* IO Context */
+const char *key, /* keyword to write (allowed values "Yx", "Vx") */
+const char *buf) /* buffer where the keyword value can be read from */
+{
+ int len; /* length of the keyword to write */
+ int rtv; /* return code */
+ int rtv2;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX,
+ ("VPD write %s = %s\n",key,buf));
+
+ if ((*key != 'Y' && *key != 'V') ||
+ key[1] < '0' || key[1] > 'Z' ||
+ (key[1] > '9' && key[1] < 'A') || strlen(key) != 2) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("illegal key tag, keyword not written\n"));
+ return(5);
+ }
+
+ if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
+ if (VpdInit(pAC, IoC) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD init error\n"));
+ return(6);
+ }
+ }
+
+ rtv = 0;
+ len = strlen(buf);
+ if (len > VPD_MAX_LEN) {
+ /* cut it */
+ len = VPD_MAX_LEN;
+ rtv = 2;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("keyword too long, cut after %d bytes\n",VPD_MAX_LEN));
+ }
+ if ((rtv2 = VpdSetupPara(pAC, key, buf, len, VPD_RW_KEY, OWR_KEY)) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD write error\n"));
+ return(rtv2);
+ }
+
+ return(rtv);
+}
+
+/*
+ * Read the contents of the VPD EEPROM and copy it to the
+ * VPD buffer if not already done. Remove the VPD keyword
+ * 'key' from the VPD buffer.
+ * Only the keywords in the read/write area can be deleted.
+ * Keywords in the read only area cannot be deleted.
+ *
+ * returns 0: success, keyword was removed
+ * 1: keyword not found
+ * 5: keyword cannot be deleted
+ * 6: fatal VPD error
+ */
+int VpdDelete(
+SK_AC *pAC, /* common data base */
+SK_IOC IoC, /* IO Context */
+char *key) /* keyword to read (e.g. "MN") */
+{
+ SK_VPD_PARA *p, vp;
+ char *etp;
+ int vpd_size;
+
+ vpd_size = pAC->vpd.vpd_size;
+
+ SK_DBG_MSG(pAC,SK_DBGMOD_VPD,SK_DBGCAT_TX,("VPD delete key %s\n",key));
+ if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
+ if (VpdInit(pAC, IoC) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD init error\n"));
+ return(6);
+ }
+ }
+
+ if ((p = vpd_find_para(pAC, key, &vp)) != NULL) {
+ if (p->p_val < pAC->vpd.vpd_buf + vpd_size/2) {
+ /* try to delete read only keyword */
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("cannot delete RO keyword\n"));
+ return(5);
+ }
+
+ etp = pAC->vpd.vpd_buf + (vpd_size-pAC->vpd.v.vpd_free_rw-1-3);
+
+ vpd_move_para(vp.p_val+vp.p_len, etp+2,
+ - ((int)(vp.p_len + 3)));
+ if (vpd_mod_endtag(pAC, etp - vp.p_len - 3)) {
+ pAC->vpd.v.vpd_status &= ~VPD_VALID;
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD encoding error\n"));
+ return(6);
+ }
+ }
+ else {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("keyword not found\n"));
+ return(1);
+ }
+
+ return(0);
+}
+
+/*
+ * If the VPD buffer contains valid data write the VPD
+ * read/write area back to the VPD EEPROM.
+ *
+ * returns 0: success
+ * 3: VPD transfer timeout
+ */
+int VpdUpdate(
+SK_AC *pAC, /* Adapters context */
+SK_IOC IoC) /* IO Context */
+{
+ int vpd_size;
+
+ vpd_size = pAC->vpd.vpd_size;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("VPD update .. "));
+ if ((pAC->vpd.v.vpd_status & VPD_VALID) != 0) {
+ if (VpdTransferBlock(pAC, IoC, pAC->vpd.vpd_buf + vpd_size/2,
+ vpd_size/2, vpd_size/2, VPD_WRITE) != vpd_size/2) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("transfer timed out\n"));
+ return(3);
+ }
+ }
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("done\n"));
+ return(0);
+}
+
+
+/*
+ * Read the contents of the VPD EEPROM and copy it to the VPD buffer
+ * if not already done. If the keyword "VF" is not present it will be
+ * created and the error log message will be stored to this keyword.
+ * If "VF" is not present the error log message will be stored to the
+ * keyword "VL". "VL" will created or overwritten if "VF" is present.
+ * The VPD read/write area is saved to the VPD EEPROM.
+ *
+ * returns nothing, errors will be ignored.
+ */
+void VpdErrLog(
+SK_AC *pAC, /* common data base */
+SK_IOC IoC, /* IO Context */
+char *msg) /* error log message */
+{
+ SK_VPD_PARA *v, vf; /* VF */
+ int len;
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX,
+ ("VPD error log msg %s\n", msg));
+ if ((pAC->vpd.v.vpd_status & VPD_VALID) == 0) {
+ if (VpdInit(pAC, IoC) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_ERR,
+ ("VPD init error\n"));
+ return;
+ }
+ }
+
+ len = strlen(msg);
+ if (len > VPD_MAX_LEN) {
+ /* cut it */
+ len = VPD_MAX_LEN;
+ }
+ if ((v = vpd_find_para(pAC, VPD_VF, &vf)) != NULL) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("overwrite VL\n"));
+ (void)VpdSetupPara(pAC, VPD_VL, msg, len, VPD_RW_KEY, OWR_KEY);
+ }
+ else {
+ SK_DBG_MSG(pAC, SK_DBGMOD_VPD, SK_DBGCAT_TX, ("write VF\n"));
+ (void)VpdSetupPara(pAC, VPD_VF, msg, len, VPD_RW_KEY, ADD_KEY);
+ }
+
+ (void)VpdUpdate(pAC, IoC);
+}
diff -Naur u-boot-2009.03_orig/drivers/net/sk98lin/skxmac2.c u-boot-2009.03/drivers/net/sk98lin/skxmac2.c
--- u-boot-2009.03_orig/drivers/net/sk98lin/skxmac2.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/net/sk98lin/skxmac2.c 2009-03-31 14:54:29.878124800 -0700
@@ -1,4392 +1,4395 @@
-/******************************************************************************
- *
- * Name: skxmac2.c
- * Project: GEnesis, PCI Gigabit Ethernet Adapter
- * Version: $Revision: 1.91 $
- * Date: $Date: 2003/02/05 15:09:34 $
- * Purpose: Contains functions to initialize the MACs and PHYs
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * (C)Copyright 1998-2003 SysKonnect GmbH.
- *
- * 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.
- *
- * The information in this file is provided "AS IS" without warranty.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- * History:
- *
- * $Log: skxmac2.c,v $
- * Revision 1.91 2003/02/05 15:09:34 rschmidt
- * Removed setting of 'Collision Test'-bit in SkGmInitPhyMarv().
- * Disabled auto-update for speed, duplex and flow-control when
- * auto-negotiation is not enabled (Bug Id #10766).
- * Editorial changes.
- *
- * Revision 1.90 2003/01/29 13:35:19 rschmidt
- * Increment Rx FIFO Overflow counter only in DEBUG-mode.
- * Corrected define for blinking active LED.
- *
- * Revision 1.89 2003/01/28 16:37:45 rschmidt
- * Changed init for blinking active LED
- *
- * Revision 1.88 2003/01/28 10:09:38 rschmidt
- * Added debug outputs in SkGmInitMac().
- * Added customized init of LED registers in SkGmInitPhyMarv(),
- * for blinking active LED (#ifdef ACT_LED_BLINK) and
- * for normal duplex LED (#ifdef DUP_LED_NORMAL).
- * Editorial changes.
- *
- * Revision 1.87 2002/12/10 14:39:05 rschmidt
- * Improved initialization of GPHY in SkGmInitPhyMarv().
- * Editorial changes.
- *
- * Revision 1.86 2002/12/09 15:01:12 rschmidt
- * Added setup of Ext. PHY Specific Ctrl Reg (downshift feature).
- *
- * Revision 1.85 2002/12/05 14:09:16 rschmidt
- * Improved avoiding endless loop in SkGmPhyWrite(), SkGmPhyWrite().
- * Added additional advertising for 10Base-T when 100Base-T is selected.
- * Added case SK_PHY_MARV_FIBER for YUKON Fiber adapter.
- * Editorial changes.
- *
- * Revision 1.84 2002/11/15 12:50:09 rschmidt
- * Changed SkGmCableDiagStatus() when getting results.
- *
- * Revision 1.83 2002/11/13 10:28:29 rschmidt
- * Added some typecasts to avoid compiler warnings.
- *
- * Revision 1.82 2002/11/13 09:20:46 rschmidt
- * Replaced for(..) with do {} while (...) in SkXmUpdateStats().
- * Replaced 2 macros GM_IN16() with 1 GM_IN32() in SkGmMacStatistic().
- * Added SkGmCableDiagStatus() for Virtual Cable Test (VCT).
- * Editorial changes.
- *
- * Revision 1.81 2002/10/28 14:28:08 rschmidt
- * Changed MAC address setup for GMAC in SkGmInitMac().
- * Optimized handling of counter overflow IRQ in SkGmOverflowStatus().
- * Editorial changes.
- *
- * Revision 1.80 2002/10/14 15:29:44 rschmidt
- * Corrected disabling of all PHY IRQs.
- * Added WA for deviation #16 (address used for pause packets).
- * Set Pause Mode in SkMacRxTxEnable() only for Genesis.
- * Added IRQ and counter for Receive FIFO Overflow in DEBUG-mode.
- * SkXmTimeStamp() replaced by SkMacTimeStamp().
- * Added clearing of GMAC Tx FIFO Underrun IRQ in SkGmIrq().
- * Editorial changes.
- *
- * Revision 1.79 2002/10/10 15:55:36 mkarl
- * changes for PLinkSpeedUsed
- *
- * Revision 1.78 2002/09/12 09:39:51 rwahl
- * Removed deactivate code for SIRQ overflow event separate for TX/RX.
- *
- * Revision 1.77 2002/09/09 12:26:37 mkarl
- * added handling for Yukon to SkXmTimeStamp
- *
- * Revision 1.76 2002/08/21 16:41:16 rschmidt
- * Added bit GPC_ENA_XC (Enable MDI crossover) in HWCFG_MODE.
- * Added forced speed settings in SkGmInitPhyMarv().
- * Added settings of full/half duplex capabilities for YUKON Fiber.
- * Editorial changes.
- *
- * Revision 1.75 2002/08/16 15:12:01 rschmidt
- * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis.
- * Added function SkMacHashing() for ADDR-Module.
- * Removed functions SkXmClrSrcCheck(), SkXmClrHashAddr() (calls replaced
- * with macros).
- * Removed functions SkGmGetMuxConfig().
- * Added HWCFG_MODE init for YUKON Fiber.
- * Changed initialization of GPHY in SkGmInitPhyMarv().
- * Changed check of parameter in SkXmMacStatistic().
- * Editorial changes.
- *
- * Revision 1.74 2002/08/12 14:00:17 rschmidt
- * Replaced usage of Broadcom PHY Ids with defines.
- * Corrected error messages in SkGmMacStatistic().
- * Made SkMacPromiscMode() public for ADDR-Modul.
- * Editorial changes.
- *
- * Revision 1.73 2002/08/08 16:26:24 rschmidt
- * Improved reset sequence for YUKON in SkGmHardRst() and SkGmInitMac().
- * Replaced XMAC Rx High Watermark init value with SK_XM_RX_HI_WM.
- * Editorial changes.
- *
- * Revision 1.72 2002/07/24 15:11:19 rschmidt
- * Fixed wrong placement of parenthesis.
- * Editorial changes.
- *
- * Revision 1.71 2002/07/23 16:05:18 rschmidt
- * Added global functions for PHY: SkGePhyRead(), SkGePhyWrite().
- * Fixed Tx Counter Overflow IRQ (Bug ID #10730).
- * Editorial changes.
- *
- * Revision 1.70 2002/07/18 14:27:27 rwahl
- * Fixed syntax error.
- *
- * Revision 1.69 2002/07/17 17:08:47 rwahl
- * Fixed check in SkXmMacStatistic().
- *
- * Revision 1.68 2002/07/16 07:35:24 rwahl
- * Removed check for cleared mib counter in SkGmResetCounter().
- *
- * Revision 1.67 2002/07/15 18:35:56 rwahl
- * Added SkXmUpdateStats(), SkGmUpdateStats(), SkXmMacStatistic(),
- * SkGmMacStatistic(), SkXmResetCounter(), SkGmResetCounter(),
- * SkXmOverflowStatus(), SkGmOverflowStatus().
- * Changes to SkXmIrq() & SkGmIrq(): Combined SIRQ Overflow for both
- * RX & TX.
- * Changes to SkGmInitMac(): call to SkGmResetCounter().
- * Editorial changes.
- *
- * Revision 1.66 2002/07/15 15:59:30 rschmidt
- * Added PHY Address in SkXmPhyRead(), SkXmPhyWrite().
- * Added MIB Clear Counter in SkGmInitMac().
- * Added Duplex and Flow-Control settings.
- * Reset all Multicast filtering Hash reg. in SkGmInitMac().
- * Added new function: SkGmGetMuxConfig().
- * Editorial changes.
- *
- * Revision 1.65 2002/06/10 09:35:39 rschmidt
- * Replaced C++ comments (//).
- * Added #define VCPU around VCPUwaitTime.
- * Editorial changes.
- *
- * Revision 1.64 2002/06/05 08:41:10 rschmidt
- * Added function for XMAC2: SkXmTimeStamp().
- * Added function for YUKON: SkGmSetRxCmd().
- * Changed SkGmInitMac() resp. SkGmHardRst().
- * Fixed wrong variable in SkXmAutoNegLipaXmac() (debug mode).
- * SkXmRxTxEnable() replaced by SkMacRxTxEnable().
- * Editorial changes.
- *
- * Revision 1.63 2002/04/25 13:04:44 rschmidt
- * Changes for handling YUKON.
- * Use of #ifdef OTHER_PHY to eliminate code for unused Phy types.
- * Macros for XMAC PHY access PHY_READ(), PHY_WRITE() replaced
- * by functions SkXmPhyRead(), SkXmPhyWrite();
- * Removed use of PRxCmd to setup XMAC.
- * Added define PHY_B_AS_PAUSE_MSK for BCom Pause Res.
- * Added setting of XM_RX_DIS_CEXT in SkXmInitMac().
- * Removed status parameter from MAC IRQ handler SkMacIrq(),
- * SkXmIrq() and SkGmIrq().
- * SkXmAutoNegLipa...() for ext. Phy replaced by SkMacAutoNegLipaPhy().
- * Added SkMac...() functions to handle both XMAC and GMAC.
- * Added functions for YUKON: SkGmHardRst(), SkGmSoftRst(),
- * SkGmSetRxTxEn(), SkGmIrq(), SkGmInitMac(), SkGmInitPhyMarv(),
- * SkGmAutoNegDoneMarv(), SkGmPhyRead(), SkGmPhyWrite().
- * Changes for V-CPU support.
- * Editorial changes.
- *
- * Revision 1.62 2001/08/06 09:50:14 rschmidt
- * Workaround BCOM Errata #1 for the C5 type.
- * Editorial changes.
- *
- * Revision 1.61 2001/02/09 15:40:59 rassmann
- * Editorial changes.
- *
- * Revision 1.60 2001/02/07 15:02:01 cgoos
- * Added workaround for Fujitsu switch link down.
- *
- * Revision 1.59 2001/01/10 09:38:06 cgoos
- * Fixed Broadcom C0/A1 Id check for workaround.
- *
- * Revision 1.58 2000/11/29 11:30:38 cgoos
- * Changed DEBUG sections with NW output to xDEBUG
- *
- * Revision 1.57 2000/11/27 12:40:40 rassmann
- * Suppressing preamble after first access to BCom, not before (#10556).
- *
- * Revision 1.56 2000/11/09 12:32:48 rassmann
- * Renamed variables.
- *
- * Revision 1.55 2000/11/09 11:30:10 rassmann
- * WA: Waiting after releasing reset until BCom chip is accessible.
- *
- * Revision 1.54 2000/10/02 14:10:27 rassmann
- * Reading BCOM PHY after releasing reset until it returns a valid value.
- *
- * Revision 1.53 2000/07/27 12:22:11 gklug
- * fix: possible endless loop in XmHardRst.
- *
- * Revision 1.52 2000/05/22 08:48:31 malthoff
- * Fix: #10523 errata valid for all BCOM PHYs.
- *
- * Revision 1.51 2000/05/17 12:52:18 malthoff
- * Fixes BCom link errata (#10523).
- *
- * Revision 1.50 1999/11/22 13:40:14 cgoos
- * Changed license header to GPL.
- *
- * Revision 1.49 1999/11/22 08:12:13 malthoff
- * Add workaround for power consumption feature of BCom C0 chip.
- *
- * Revision 1.48 1999/11/16 08:39:01 malthoff
- * Fix: MDIO preamble suppression is port dependent.
- *
- * Revision 1.47 1999/08/27 08:55:35 malthoff
- * 1000BT: Optimizing MDIO transfer by oppressing MDIO preamble.
- *
- * Revision 1.46 1999/08/13 11:01:12 malthoff
- * Fix for 1000BT: pFlowCtrlMode was not set correctly.
- *
- * Revision 1.45 1999/08/12 19:18:28 malthoff
- * 1000BT Fixes: Do not owerwrite XM_MMU_CMD.
- * Do not execute BCOM A1 workaround for B1 chips.
- * Fix pause frame setting.
- * Always set PHY_B_AC_TX_TST in PHY_BCOM_AUX_CTRL.
- *
- * Revision 1.44 1999/08/03 15:23:48 cgoos
- * Fixed setting of PHY interrupt mask in half duplex mode.
- *
- * Revision 1.43 1999/08/03 15:22:17 cgoos
- * Added some debug output.
- * Disabled XMac GP0 interrupt for external PHYs.
- *
- * Revision 1.42 1999/08/02 08:39:23 malthoff
- * BCOM PHY: TX LED: To get the mono flop behaviour it is required
- * to set the LED Traffic Mode bit in PHY_BCOM_P_EXT_CTRL.
- *
- * Revision 1.41 1999/07/30 06:54:31 malthoff
- * Add temp. workarounds for the BCOM Phy revision A1.
- *
- * Revision 1.40 1999/06/01 07:43:26 cgoos
- * Changed Link Mode Status in SkXmAutoNegDone... from FULL/HALF to
- * AUTOFULL/AUTOHALF.
- *
- * Revision 1.39 1999/05/19 07:29:51 cgoos
- * Changes for 1000Base-T.
- *
- * Revision 1.38 1999/04/08 14:35:10 malthoff
- * Add code for enabling signal detect. Enabling signal detect is disabled.
- *
- * Revision 1.37 1999/03/12 13:42:54 malthoff
- * Add: Jumbo Frame Support.
- * Add: Receive modes SK_LENERR_OK_ON/OFF and
- * SK_BIG_PK_OK_ON/OFF in SkXmSetRxCmd().
- *
- * Revision 1.36 1999/03/08 10:10:55 gklug
- * fix: AutoSensing did switch to next mode even if LiPa indicated offline
- *
- * Revision 1.35 1999/02/22 15:16:41 malthoff
- * Remove some compiler warnings.
- *
- * Revision 1.34 1999/01/22 09:19:59 gklug
- * fix: Init DupMode and InitPauseMd are now called in RxTxEnable
- *
- * Revision 1.33 1998/12/11 15:19:11 gklug
- * chg: lipa autoneg stati
- * chg: debug messages
- * chg: do NOT use spurious XmIrq
- *
- * Revision 1.32 1998/12/10 11:08:44 malthoff
- * bug fix: pAC has been used for IOs in SkXmHardRst().
- * SkXmInitPhy() is also called for the Diag in SkXmInitMac().
- *
- * Revision 1.31 1998/12/10 10:39:11 gklug
- * fix: do 4 RESETS of the XMAC at the beginning
- * fix: dummy read interrupt source register BEFORE initializing the Phy
- * add: debug messages
- * fix: Linkpartners autoneg capability cannot be shown by TX_PAGE interrupt
- *
- * Revision 1.30 1998/12/07 12:18:32 gklug
- * add: refinement of autosense mode: take into account the autoneg cap of LiPa
- *
- * Revision 1.29 1998/12/07 07:12:29 gklug
- * fix: if page is received the link is down.
- *
- * Revision 1.28 1998/12/01 10:12:47 gklug
- * chg: if spurious IRQ from XMAC encountered, save it
- *
- * Revision 1.27 1998/11/26 07:33:38 gklug
- * add: InitPhy call is now in XmInit function
- *
- * Revision 1.26 1998/11/18 13:38:24 malthoff
- * 'Imsk' is also unused in SkXmAutoNegDone.
- *
- * Revision 1.25 1998/11/18 13:28:01 malthoff
- * Remove unused variable 'Reg' in SkXmAutoNegDone().
- *
- * Revision 1.24 1998/11/18 13:18:45 gklug
- * add: workaround for xmac errata #1
- * add: detect Link Down also when Link partner requested config
- * chg: XMIrq is only used when link is up
- *
- * Revision 1.23 1998/11/04 07:07:04 cgoos
- * Added function SkXmRxTxEnable.
- *
- * Revision 1.22 1998/10/30 07:35:54 gklug
- * fix: serve LinkDown interrupt when link is already down
- *
- * Revision 1.21 1998/10/29 15:32:03 gklug
- * fix: Link Down signaling
- *
- * Revision 1.20 1998/10/29 11:17:27 gklug
- * fix: AutoNegDone bug
- *
- * Revision 1.19 1998/10/29 10:14:43 malthoff
- * Add endainesss comment for reading/writing MAC addresses.
- *
- * Revision 1.18 1998/10/28 07:48:55 cgoos
- * Fix: ASS somtimes signaled although link is up.
- *
- * Revision 1.17 1998/10/26 07:55:39 malthoff
- * Fix in SkXmInitPauseMd(): Pause Mode
- * was disabled and not enabled.
- * Fix in SkXmAutoNegDone(): Checking Mode bits
- * always failed, becaues of some missing braces.
- *
- * Revision 1.16 1998/10/22 09:46:52 gklug
- * fix SysKonnectFileId typo
- *
- * Revision 1.15 1998/10/21 05:51:37 gklug
- * add: para DoLoop to InitPhy function for loopback set-up
- *
- * Revision 1.14 1998/10/16 10:59:23 malthoff
- * Remove Lint warning for dummy reads.
- *
- * Revision 1.13 1998/10/15 14:01:20 malthoff
- * Fix: SkXmAutoNegDone() is (int) but does not return a value.
- *
- * Revision 1.12 1998/10/14 14:45:04 malthoff
- * Remove SKERR_SIRQ_E0xx and SKERR_SIRQ_E0xxMSG by
- * SKERR_HWI_Exx and SKERR_HWI_E0xxMSG to be independent
- * from the Sirq module.
- *
- * Revision 1.11 1998/10/14 13:59:01 gklug
- * add: InitPhy function
- *
- * Revision 1.10 1998/10/14 11:20:57 malthoff
- * Make SkXmAutoNegDone() public, because it's
- * used in diagnostics, too.
- * The Link Up event to the RLMT is issued in SkXmIrq().
- * SkXmIrq() is not available in diagnostics.
- * Use PHY_READ when reading PHY registers.
- *
- * Revision 1.9 1998/10/14 05:50:10 cgoos
- * Added definition for Para.
- *
- * Revision 1.8 1998/10/14 05:41:28 gklug
- * add: Xmac IRQ
- * add: auto-negotiation done function
- *
- * Revision 1.7 1998/10/09 06:55:20 malthoff
- * The configuration of the XMACs Tx Request Threshold
- * depends from the drivers port usage now. The port
- * usage is configured in GIPortUsage.
- *
- * Revision 1.6 1998/10/05 07:48:00 malthoff
- * minor changes
- *
- * Revision 1.5 1998/10/01 07:03:54 gklug
- * add: dummy function for XMAC ISR
- *
- * Revision 1.4 1998/09/30 12:37:44 malthoff
- * Add SkXmSetRxCmd() and related code.
- *
- * Revision 1.3 1998/09/28 13:26:40 malthoff
- * Add SkXmInitMac(), SkXmInitDupMd(), and SkXmInitPauseMd()
- *
- * Revision 1.2 1998/09/16 14:34:21 malthoff
- * Add SkXmClrExactAddr(), SkXmClrSrcCheck(),
- * SkXmClrHashAddr(), SkXmFlushTxFifo(),
- * SkXmFlushRxFifo(), and SkXmHardRst().
- * Finish Coding of SkXmSoftRst().
- * The sources may be compiled now.
- *
- * Revision 1.1 1998/09/04 10:05:56 malthoff
- * Created.
- *
- *
- ******************************************************************************/
-
-#include <config.h>
-
-#include "h/skdrv1st.h"
-#include "h/skdrv2nd.h"
-
-/* typedefs *******************************************************************/
-
-/* BCOM PHY magic pattern list */
-typedef struct s_PhyHack {
- int PhyReg; /* Phy register */
- SK_U16 PhyVal; /* Value to write */
-} BCOM_HACK;
-
-/* local variables ************************************************************/
-static const char SysKonnectFileId[] =
- "@(#)$Id: skxmac2.c,v 1.91 2003/02/05 15:09:34 rschmidt Exp $ (C) SK ";
-
-BCOM_HACK BcomRegA1Hack[] = {
- { 0x18, 0x0c20 }, { 0x17, 0x0012 }, { 0x15, 0x1104 }, { 0x17, 0x0013 },
- { 0x15, 0x0404 }, { 0x17, 0x8006 }, { 0x15, 0x0132 }, { 0x17, 0x8006 },
- { 0x15, 0x0232 }, { 0x17, 0x800D }, { 0x15, 0x000F }, { 0x18, 0x0420 },
- { 0, 0 }
-};
-BCOM_HACK BcomRegC0Hack[] = {
- { 0x18, 0x0c20 }, { 0x17, 0x0012 }, { 0x15, 0x1204 }, { 0x17, 0x0013 },
- { 0x15, 0x0A04 }, { 0x18, 0x0420 },
- { 0, 0 }
-};
-
-/* function prototypes ********************************************************/
-static void SkXmInitPhyXmac(SK_AC*, SK_IOC, int, SK_BOOL);
-static void SkXmInitPhyBcom(SK_AC*, SK_IOC, int, SK_BOOL);
-static void SkGmInitPhyMarv(SK_AC*, SK_IOC, int, SK_BOOL);
-static int SkXmAutoNegDoneXmac(SK_AC*, SK_IOC, int);
-static int SkXmAutoNegDoneBcom(SK_AC*, SK_IOC, int);
-static int SkGmAutoNegDoneMarv(SK_AC*, SK_IOC, int);
-#ifdef OTHER_PHY
-static void SkXmInitPhyLone(SK_AC*, SK_IOC, int, SK_BOOL);
-static void SkXmInitPhyNat (SK_AC*, SK_IOC, int, SK_BOOL);
-static int SkXmAutoNegDoneLone(SK_AC*, SK_IOC, int);
-static int SkXmAutoNegDoneNat (SK_AC*, SK_IOC, int);
-#endif /* OTHER_PHY */
-
-
-/******************************************************************************
- *
- * SkXmPhyRead() - Read from XMAC PHY register
- *
- * Description: reads a 16-bit word from XMAC PHY or ext. PHY
- *
- * Returns:
- * nothing
- */
-void SkXmPhyRead(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Port, /* Port Index (MAC_1 + n) */
-int PhyReg, /* Register Address (Offset) */
-SK_U16 *pVal) /* Pointer to Value */
-{
- SK_U16 Mmu;
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* write the PHY register's address */
- XM_OUT16(IoC, Port, XM_PHY_ADDR, PhyReg | pPrt->PhyAddr);
-
- /* get the PHY register's value */
- XM_IN16(IoC, Port, XM_PHY_DATA, pVal);
-
- if (pPrt->PhyType != SK_PHY_XMAC) {
- do {
- XM_IN16(IoC, Port, XM_MMU_CMD, &Mmu);
- /* wait until 'Ready' is set */
- } while ((Mmu & XM_MMU_PHY_RDY) == 0);
-
- /* get the PHY register's value */
- XM_IN16(IoC, Port, XM_PHY_DATA, pVal);
- }
-} /* SkXmPhyRead */
-
-
-/******************************************************************************
- *
- * SkXmPhyWrite() - Write to XMAC PHY register
- *
- * Description: writes a 16-bit word to XMAC PHY or ext. PHY
- *
- * Returns:
- * nothing
- */
-void SkXmPhyWrite(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Port, /* Port Index (MAC_1 + n) */
-int PhyReg, /* Register Address (Offset) */
-SK_U16 Val) /* Value */
-{
- SK_U16 Mmu;
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PhyType != SK_PHY_XMAC) {
- do {
- XM_IN16(IoC, Port, XM_MMU_CMD, &Mmu);
- /* wait until 'Busy' is cleared */
- } while ((Mmu & XM_MMU_PHY_BUSY) != 0);
- }
-
- /* write the PHY register's address */
- XM_OUT16(IoC, Port, XM_PHY_ADDR, PhyReg | pPrt->PhyAddr);
-
- /* write the PHY register's value */
- XM_OUT16(IoC, Port, XM_PHY_DATA, Val);
-
- if (pPrt->PhyType != SK_PHY_XMAC) {
- do {
- XM_IN16(IoC, Port, XM_MMU_CMD, &Mmu);
- /* wait until 'Busy' is cleared */
- } while ((Mmu & XM_MMU_PHY_BUSY) != 0);
- }
-} /* SkXmPhyWrite */
-
-
-/******************************************************************************
- *
- * SkGmPhyRead() - Read from GPHY register
- *
- * Description: reads a 16-bit word from GPHY through MDIO
- *
- * Returns:
- * nothing
- */
-void SkGmPhyRead(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Port, /* Port Index (MAC_1 + n) */
-int PhyReg, /* Register Address (Offset) */
-SK_U16 *pVal) /* Pointer to Value */
-{
- SK_U16 Ctrl;
- SK_GEPORT *pPrt;
-#ifdef VCPU
- u_long SimCyle;
- u_long SimLowTime;
-
- VCPUgetTime(&SimCyle, &SimLowTime);
- VCPUprintf(0, "SkGmPhyRead(%u), SimCyle=%u, SimLowTime=%u\n",
- PhyReg, SimCyle, SimLowTime);
-#endif /* VCPU */
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* set PHY-Register offset and 'Read' OpCode (= 1) */
- *pVal = (SK_U16)(GM_SMI_CT_PHY_AD(pPrt->PhyAddr) |
- GM_SMI_CT_REG_AD(PhyReg) | GM_SMI_CT_OP_RD);
-
- GM_OUT16(IoC, Port, GM_SMI_CTRL, *pVal);
-
- GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
-
- /* additional check for MDC/MDIO activity */
- if ((Ctrl & GM_SMI_CT_BUSY) == 0) {
- *pVal = 0;
- return;
- }
-
- *pVal |= GM_SMI_CT_BUSY;
-
- do {
-#ifdef VCPU
- VCPUwaitTime(1000);
-#endif /* VCPU */
-
- GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
-
- /* wait until 'ReadValid' is set */
- } while (Ctrl == *pVal);
-
- /* get the PHY register's value */
- GM_IN16(IoC, Port, GM_SMI_DATA, pVal);
-
-#ifdef VCPU
- VCPUgetTime(&SimCyle, &SimLowTime);
- VCPUprintf(0, "VCPUgetTime(), SimCyle=%u, SimLowTime=%u\n",
- SimCyle, SimLowTime);
-#endif /* VCPU */
-} /* SkGmPhyRead */
-
-
-/******************************************************************************
- *
- * SkGmPhyWrite() - Write to GPHY register
- *
- * Description: writes a 16-bit word to GPHY through MDIO
- *
- * Returns:
- * nothing
- */
-void SkGmPhyWrite(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Port, /* Port Index (MAC_1 + n) */
-int PhyReg, /* Register Address (Offset) */
-SK_U16 Val) /* Value */
-{
- SK_U16 Ctrl;
- SK_GEPORT *pPrt;
-#ifdef VCPU
- SK_U32 DWord;
- u_long SimCyle;
- u_long SimLowTime;
-
- VCPUgetTime(&SimCyle, &SimLowTime);
- VCPUprintf(0, "SkGmPhyWrite(Reg=%u, Val=0x%04x), SimCyle=%u, SimLowTime=%u\n",
- PhyReg, Val, SimCyle, SimLowTime);
-#endif /* VCPU */
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* write the PHY register's value */
- GM_OUT16(IoC, Port, GM_SMI_DATA, Val);
-
- /* set PHY-Register offset and 'Write' OpCode (= 0) */
- Val = GM_SMI_CT_PHY_AD(pPrt->PhyAddr) | GM_SMI_CT_REG_AD(PhyReg);
-
- GM_OUT16(IoC, Port, GM_SMI_CTRL, Val);
-
- GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
-
- /* additional check for MDC/MDIO activity */
- if ((Ctrl & GM_SMI_CT_BUSY) == 0) {
- return;
- }
-
- Val |= GM_SMI_CT_BUSY;
-
- do {
-#ifdef VCPU
- /* read Timer value */
- SK_IN32(IoC, B2_TI_VAL, &DWord);
-
- VCPUwaitTime(1000);
-#endif /* VCPU */
-
- GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
-
- /* wait until 'Busy' is cleared */
- } while (Ctrl == Val);
-
-#ifdef VCPU
- VCPUgetTime(&SimCyle, &SimLowTime);
- VCPUprintf(0, "VCPUgetTime(), SimCyle=%u, SimLowTime=%u\n",
- SimCyle, SimLowTime);
-#endif /* VCPU */
-} /* SkGmPhyWrite */
-
-
-/******************************************************************************
- *
- * SkGePhyRead() - Read from PHY register
- *
- * Description: calls a read PHY routine dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkGePhyRead(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Port, /* Port Index (MAC_1 + n) */
-int PhyReg, /* Register Address (Offset) */
-SK_U16 *pVal) /* Pointer to Value */
-{
- void (*r_func)(SK_AC *pAC, SK_IOC IoC, int Port, int Reg, SK_U16 *pVal);
-
- if (pAC->GIni.GIGenesis) {
- r_func = SkXmPhyRead;
- }
- else {
- r_func = SkGmPhyRead;
- }
-
- r_func(pAC, IoC, Port, PhyReg, pVal);
-} /* SkGePhyRead */
-
-
-/******************************************************************************
- *
- * SkGePhyWrite() - Write to PHY register
- *
- * Description: calls a write PHY routine dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkGePhyWrite(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* I/O Context */
-int Port, /* Port Index (MAC_1 + n) */
-int PhyReg, /* Register Address (Offset) */
-SK_U16 Val) /* Value */
-{
- void (*w_func)(SK_AC *pAC, SK_IOC IoC, int Port, int Reg, SK_U16 Val);
-
- if (pAC->GIni.GIGenesis) {
- w_func = SkXmPhyWrite;
- }
- else {
- w_func = SkGmPhyWrite;
- }
-
- w_func(pAC, IoC, Port, PhyReg, Val);
-} /* SkGePhyWrite */
-
-
-/******************************************************************************
- *
- * SkMacPromiscMode() - Enable / Disable Promiscuous Mode
- *
- * Description:
- * enables / disables promiscuous mode by setting Mode Register (XMAC) or
- * Receive Control Register (GMAC) dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkMacPromiscMode(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL Enable) /* Enable / Disable */
-{
- SK_U16 RcReg;
- SK_U32 MdReg;
-
- if (pAC->GIni.GIGenesis) {
-
- XM_IN32(IoC, Port, XM_MODE, &MdReg);
- /* enable or disable promiscuous mode */
- if (Enable) {
- MdReg |= XM_MD_ENA_PROM;
- }
- else {
- MdReg &= ~XM_MD_ENA_PROM;
- }
- /* setup Mode Register */
- XM_OUT32(IoC, Port, XM_MODE, MdReg);
- }
- else {
-
- GM_IN16(IoC, Port, GM_RX_CTRL, &RcReg);
-
- /* enable or disable unicast and multicast filtering */
- if (Enable) {
- RcReg &= ~(GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
- }
- else {
- RcReg |= (GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
- }
- /* setup Receive Control Register */
- GM_OUT16(IoC, Port, GM_RX_CTRL, RcReg);
- }
-} /* SkMacPromiscMode*/
-
-
-/******************************************************************************
- *
- * SkMacHashing() - Enable / Disable Hashing
- *
- * Description:
- * enables / disables hashing by setting Mode Register (XMAC) or
- * Receive Control Register (GMAC) dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkMacHashing(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL Enable) /* Enable / Disable */
-{
- SK_U16 RcReg;
- SK_U32 MdReg;
-
- if (pAC->GIni.GIGenesis) {
-
- XM_IN32(IoC, Port, XM_MODE, &MdReg);
- /* enable or disable hashing */
- if (Enable) {
- MdReg |= XM_MD_ENA_HASH;
- }
- else {
- MdReg &= ~XM_MD_ENA_HASH;
- }
- /* setup Mode Register */
- XM_OUT32(IoC, Port, XM_MODE, MdReg);
- }
- else {
-
- GM_IN16(IoC, Port, GM_RX_CTRL, &RcReg);
-
- /* enable or disable multicast filtering */
- if (Enable) {
- RcReg |= GM_RXCR_MCF_ENA;
- }
- else {
- RcReg &= ~GM_RXCR_MCF_ENA;
- }
- /* setup Receive Control Register */
- GM_OUT16(IoC, Port, GM_RX_CTRL, RcReg);
- }
-} /* SkMacHashing*/
-
-
-#ifdef SK_DIAG
-/******************************************************************************
- *
- * SkXmSetRxCmd() - Modify the value of the XMAC's Rx Command Register
- *
- * Description:
- * The features
- * - FCS stripping, SK_STRIP_FCS_ON/OFF
- * - pad byte stripping, SK_STRIP_PAD_ON/OFF
- * - don't set XMR_FS_ERR in status SK_LENERR_OK_ON/OFF
- * for inrange length error frames
- * - don't set XMR_FS_ERR in status SK_BIG_PK_OK_ON/OFF
- * for frames > 1514 bytes
- * - enable Rx of own packets SK_SELF_RX_ON/OFF
- *
- * for incoming packets may be enabled/disabled by this function.
- * Additional modes may be added later.
- * Multiple modes can be enabled/disabled at the same time.
- * The new configuration is written to the Rx Command register immediately.
- *
- * Returns:
- * nothing
- */
-static void SkXmSetRxCmd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-int Mode) /* Mode is SK_STRIP_FCS_ON/OFF, SK_STRIP_PAD_ON/OFF,
- SK_LENERR_OK_ON/OFF, or SK_BIG_PK_OK_ON/OFF */
-{
- SK_U16 OldRxCmd;
- SK_U16 RxCmd;
-
- XM_IN16(IoC, Port, XM_RX_CMD, &OldRxCmd);
-
- RxCmd = OldRxCmd;
-
- switch (Mode & (SK_STRIP_FCS_ON | SK_STRIP_FCS_OFF)) {
- case SK_STRIP_FCS_ON:
- RxCmd |= XM_RX_STRIP_FCS;
- break;
- case SK_STRIP_FCS_OFF:
- RxCmd &= ~XM_RX_STRIP_FCS;
- break;
- }
-
- switch (Mode & (SK_STRIP_PAD_ON | SK_STRIP_PAD_OFF)) {
- case SK_STRIP_PAD_ON:
- RxCmd |= XM_RX_STRIP_PAD;
- break;
- case SK_STRIP_PAD_OFF:
- RxCmd &= ~XM_RX_STRIP_PAD;
- break;
- }
-
- switch (Mode & (SK_LENERR_OK_ON | SK_LENERR_OK_OFF)) {
- case SK_LENERR_OK_ON:
- RxCmd |= XM_RX_LENERR_OK;
- break;
- case SK_LENERR_OK_OFF:
- RxCmd &= ~XM_RX_LENERR_OK;
- break;
- }
-
- switch (Mode & (SK_BIG_PK_OK_ON | SK_BIG_PK_OK_OFF)) {
- case SK_BIG_PK_OK_ON:
- RxCmd |= XM_RX_BIG_PK_OK;
- break;
- case SK_BIG_PK_OK_OFF:
- RxCmd &= ~XM_RX_BIG_PK_OK;
- break;
- }
-
- switch (Mode & (SK_SELF_RX_ON | SK_SELF_RX_OFF)) {
- case SK_SELF_RX_ON:
- RxCmd |= XM_RX_SELF_RX;
- break;
- case SK_SELF_RX_OFF:
- RxCmd &= ~XM_RX_SELF_RX;
- break;
- }
-
- /* Write the new mode to the Rx command register if required */
- if (OldRxCmd != RxCmd) {
- XM_OUT16(IoC, Port, XM_RX_CMD, RxCmd);
- }
-} /* SkXmSetRxCmd */
-
-
-/******************************************************************************
- *
- * SkGmSetRxCmd() - Modify the value of the GMAC's Rx Control Register
- *
- * Description:
- * The features
- * - FCS (CRC) stripping, SK_STRIP_FCS_ON/OFF
- * - don't set GMR_FS_LONG_ERR SK_BIG_PK_OK_ON/OFF
- * for frames > 1514 bytes
- * - enable Rx of own packets SK_SELF_RX_ON/OFF
- *
- * for incoming packets may be enabled/disabled by this function.
- * Additional modes may be added later.
- * Multiple modes can be enabled/disabled at the same time.
- * The new configuration is written to the Rx Command register immediately.
- *
- * Returns:
- * nothing
- */
-static void SkGmSetRxCmd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-int Mode) /* Mode is SK_STRIP_FCS_ON/OFF, SK_STRIP_PAD_ON/OFF,
- SK_LENERR_OK_ON/OFF, or SK_BIG_PK_OK_ON/OFF */
-{
- SK_U16 OldRxCmd;
- SK_U16 RxCmd;
-
- if ((Mode & (SK_STRIP_FCS_ON | SK_STRIP_FCS_OFF)) != 0) {
-
- GM_IN16(IoC, Port, GM_RX_CTRL, &OldRxCmd);
-
- RxCmd = OldRxCmd;
-
- if ((Mode & SK_STRIP_FCS_ON) != 0) {
- RxCmd |= GM_RXCR_CRC_DIS;
- }
- else {
- RxCmd &= ~GM_RXCR_CRC_DIS;
- }
- /* Write the new mode to the Rx control register if required */
- if (OldRxCmd != RxCmd) {
- GM_OUT16(IoC, Port, GM_RX_CTRL, RxCmd);
- }
- }
-
- if ((Mode & (SK_BIG_PK_OK_ON | SK_BIG_PK_OK_OFF)) != 0) {
-
- GM_IN16(IoC, Port, GM_SERIAL_MODE, &OldRxCmd);
-
- RxCmd = OldRxCmd;
-
- if ((Mode & SK_BIG_PK_OK_ON) != 0) {
- RxCmd |= GM_SMOD_JUMBO_ENA;
- }
- else {
- RxCmd &= ~GM_SMOD_JUMBO_ENA;
- }
- /* Write the new mode to the Rx control register if required */
- if (OldRxCmd != RxCmd) {
- GM_OUT16(IoC, Port, GM_SERIAL_MODE, RxCmd);
- }
- }
-} /* SkGmSetRxCmd */
-
-
-/******************************************************************************
- *
- * SkMacSetRxCmd() - Modify the value of the MAC's Rx Control Register
- *
- * Description: modifies the MAC's Rx Control reg. dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkMacSetRxCmd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-int Mode) /* Rx Mode */
-{
- if (pAC->GIni.GIGenesis) {
-
- SkXmSetRxCmd(pAC, IoC, Port, Mode);
- }
- else {
-
- SkGmSetRxCmd(pAC, IoC, Port, Mode);
- }
-} /* SkMacSetRxCmd */
-
-
-/******************************************************************************
- *
- * SkMacCrcGener() - Enable / Disable CRC Generation
- *
- * Description: enables / disables CRC generation dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkMacCrcGener(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL Enable) /* Enable / Disable */
-{
- SK_U16 Word;
-
- if (pAC->GIni.GIGenesis) {
-
- XM_IN16(IoC, Port, XM_TX_CMD, &Word);
-
- if (Enable) {
- Word &= ~XM_TX_NO_CRC;
- }
- else {
- Word |= XM_TX_NO_CRC;
- }
- /* setup Tx Command Register */
- XM_OUT16(pAC, Port, XM_TX_CMD, Word);
- }
- else {
-
- GM_IN16(IoC, Port, GM_TX_CTRL, &Word);
-
- if (Enable) {
- Word &= ~GM_TXCR_CRC_DIS;
- }
- else {
- Word |= GM_TXCR_CRC_DIS;
- }
- /* setup Tx Control Register */
- GM_OUT16(IoC, Port, GM_TX_CTRL, Word);
- }
-} /* SkMacCrcGener*/
-
-#endif /* SK_DIAG */
-
-
-/******************************************************************************
- *
- * SkXmClrExactAddr() - Clear Exact Match Address Registers
- *
- * Description:
- * All Exact Match Address registers of the XMAC 'Port' will be
- * cleared starting with 'StartNum' up to (and including) the
- * Exact Match address number of 'StopNum'.
- *
- * Returns:
- * nothing
- */
-void SkXmClrExactAddr(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-int StartNum, /* Begin with this Address Register Index (0..15) */
-int StopNum) /* Stop after finished with this Register Idx (0..15) */
-{
- int i;
- SK_U16 ZeroAddr[3] = {0x0000, 0x0000, 0x0000};
-
- if ((unsigned)StartNum > 15 || (unsigned)StopNum > 15 ||
- StartNum > StopNum) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E001, SKERR_HWI_E001MSG);
- return;
- }
-
- for (i = StartNum; i <= StopNum; i++) {
- XM_OUTADDR(IoC, Port, XM_EXM(i), &ZeroAddr[0]);
- }
-} /* SkXmClrExactAddr */
-
-
-/******************************************************************************
- *
- * SkMacFlushTxFifo() - Flush the MAC's transmit FIFO
- *
- * Description:
- * Flush the transmit FIFO of the MAC specified by the index 'Port'
- *
- * Returns:
- * nothing
- */
-void SkMacFlushTxFifo(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U32 MdReg;
-
- if (pAC->GIni.GIGenesis) {
-
- XM_IN32(IoC, Port, XM_MODE, &MdReg);
-
- XM_OUT32(IoC, Port, XM_MODE, MdReg | XM_MD_FTF);
- }
- else {
- /* no way to flush the FIFO we have to issue a reset */
- /* TBD */
- }
-} /* SkMacFlushTxFifo */
-
-
-/******************************************************************************
- *
- * SkMacFlushRxFifo() - Flush the MAC's receive FIFO
- *
- * Description:
- * Flush the receive FIFO of the MAC specified by the index 'Port'
- *
- * Returns:
- * nothing
- */
-void SkMacFlushRxFifo(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U32 MdReg;
-
- if (pAC->GIni.GIGenesis) {
-
- XM_IN32(IoC, Port, XM_MODE, &MdReg);
-
- XM_OUT32(IoC, Port, XM_MODE, MdReg | XM_MD_FRF);
- }
- else {
- /* no way to flush the FIFO we have to issue a reset */
- /* TBD */
- }
-} /* SkMacFlushRxFifo */
-
-
-/******************************************************************************
- *
- * SkXmSoftRst() - Do a XMAC software reset
- *
- * Description:
- * The PHY registers should not be destroyed during this
- * kind of software reset. Therefore the XMAC Software Reset
- * (XM_GP_RES_MAC bit in XM_GP_PORT) must not be used!
- *
- * The software reset is done by
- * - disabling the Rx and Tx state machine,
- * - resetting the statistics module,
- * - clear all other significant XMAC Mode,
- * Command, and Control Registers
- * - clearing the Hash Register and the
- * Exact Match Address registers, and
- * - flushing the XMAC's Rx and Tx FIFOs.
- *
- * Note:
- * Another requirement when stopping the XMAC is to
- * avoid sending corrupted frames on the network.
- * Disabling the Tx state machine will NOT interrupt
- * the currently transmitted frame. But we must take care
- * that the Tx FIFO is cleared AFTER the current frame
- * is complete sent to the network.
- *
- * It takes about 12ns to send a frame with 1538 bytes.
- * One PCI clock goes at least 15ns (66MHz). Therefore
- * after reading XM_GP_PORT back, we are sure that the
- * transmitter is disabled AND idle. And this means
- * we may flush the transmit FIFO now.
- *
- * Returns:
- * nothing
- */
-static void SkXmSoftRst(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U16 ZeroAddr[4] = {0x0000, 0x0000, 0x0000, 0x0000};
-
- /* reset the statistics module */
- XM_OUT32(IoC, Port, XM_GP_PORT, XM_GP_RES_STAT);
-
- /* disable all XMAC IRQs */
- XM_OUT16(IoC, Port, XM_IMSK, 0xffff);
-
- XM_OUT32(IoC, Port, XM_MODE, 0); /* clear Mode Reg */
-
- XM_OUT16(IoC, Port, XM_TX_CMD, 0); /* reset TX CMD Reg */
- XM_OUT16(IoC, Port, XM_RX_CMD, 0); /* reset RX CMD Reg */
-
- /* disable all PHY IRQs */
- switch (pAC->GIni.GP[Port].PhyType) {
- case SK_PHY_BCOM:
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_INT_MASK, 0xffff);
- break;
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_INT_ENAB, 0);
- break;
- case SK_PHY_NAT:
- /* todo: National
- SkXmPhyWrite(pAC, IoC, Port, PHY_NAT_INT_MASK, 0xffff); */
- break;
-#endif /* OTHER_PHY */
- }
-
- /* clear the Hash Register */
- XM_OUTHASH(IoC, Port, XM_HSM, &ZeroAddr);
-
- /* clear the Exact Match Address registers */
- SkXmClrExactAddr(pAC, IoC, Port, 0, 15);
-
- /* clear the Source Check Address registers */
- XM_OUTHASH(IoC, Port, XM_SRC_CHK, &ZeroAddr);
-
-} /* SkXmSoftRst */
-
-
-/******************************************************************************
- *
- * SkXmHardRst() - Do a XMAC hardware reset
- *
- * Description:
- * The XMAC of the specified 'Port' and all connected devices
- * (PHY and SERDES) will receive a reset signal on its *Reset pins.
- * External PHYs must be reset be clearing a bit in the GPIO register
- * (Timing requirements: Broadcom: 400ns, Level One: none, National: 80ns).
- *
- * ATTENTION:
- * It is absolutely necessary to reset the SW_RST Bit first
- * before calling this function.
- *
- * Returns:
- * nothing
- */
-static void SkXmHardRst(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U32 Reg;
- int i;
- int TOut;
- SK_U16 Word;
-
- for (i = 0; i < 4; i++) {
- /* TX_MFF_CTRL1 has 32 bits, but only the lowest 16 bits are used */
- SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_CLR_MAC_RST);
-
- TOut = 0;
- do {
- if (TOut++ > 10000) {
- /*
- * Adapter seems to be in RESET state.
- * Registers cannot be written.
- */
- return;
- }
-
- SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_SET_MAC_RST);
-
- SK_IN16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), &Word);
-
- } while ((Word & MFF_SET_MAC_RST) == 0);
- }
-
- /* For external PHYs there must be special handling */
- if (pAC->GIni.GP[Port].PhyType != SK_PHY_XMAC) {
- /* reset external PHY */
- SK_IN32(IoC, B2_GP_IO, &Reg);
- if (Port == 0) {
- Reg |= GP_DIR_0; /* set to output */
- Reg &= ~GP_IO_0;
- }
- else {
- Reg |= GP_DIR_2; /* set to output */
- Reg &= ~GP_IO_2;
- }
- SK_OUT32(IoC, B2_GP_IO, Reg);
-
- /* short delay */
- SK_IN32(IoC, B2_GP_IO, &Reg);
- }
-
-} /* SkXmHardRst */
-
-
-/******************************************************************************
- *
- * SkGmSoftRst() - Do a GMAC software reset
- *
- * Description:
- * The GPHY registers should not be destroyed during this
- * kind of software reset.
- *
- * Returns:
- * nothing
- */
-static void SkGmSoftRst(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U16 EmptyHash[4] = {0x0000, 0x0000, 0x0000, 0x0000};
- SK_U16 RxCtrl;
-
- /* reset the statistics module */
-
- /* disable all GMAC IRQs */
- SK_OUT8(IoC, GMAC_IRQ_MSK, 0);
-
- /* disable all PHY IRQs */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_INT_MASK, 0);
-
- /* clear the Hash Register */
- GM_OUTHASH(IoC, Port, GM_MC_ADDR_H1, EmptyHash);
-
- /* Enable Unicast and Multicast filtering */
- GM_IN16(IoC, Port, GM_RX_CTRL, &RxCtrl);
-
- GM_OUT16(IoC, Port, GM_RX_CTRL,
- RxCtrl | GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
-
-} /* SkGmSoftRst */
-
-
-/******************************************************************************
- *
- * SkGmHardRst() - Do a GMAC hardware reset
- *
- * Description:
- *
- * ATTENTION:
- * It is absolutely necessary to reset the SW_RST Bit first
- * before calling this function.
- *
- * Returns:
- * nothing
- */
-static void SkGmHardRst(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- /* set GPHY Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), GPC_RST_SET);
-
- /* set GMAC Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_SET);
-
-} /* SkGmHardRst */
-
-
-/******************************************************************************
- *
- * SkMacSoftRst() - Do a MAC software reset
- *
- * Description: calls a MAC software reset routine dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkMacSoftRst(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* disable receiver and transmitter */
- SkMacRxTxDisable(pAC, IoC, Port);
-
- if (pAC->GIni.GIGenesis) {
-
- SkXmSoftRst(pAC, IoC, Port);
- }
- else {
-
- SkGmSoftRst(pAC, IoC, Port);
- }
-
- /* flush the MAC's Rx and Tx FIFOs */
- SkMacFlushTxFifo(pAC, IoC, Port);
-
- SkMacFlushRxFifo(pAC, IoC, Port);
-
- pPrt->PState = SK_PRT_STOP;
-
-} /* SkMacSoftRst */
-
-
-/******************************************************************************
- *
- * SkMacHardRst() - Do a MAC hardware reset
- *
- * Description: calls a MAC hardware reset routine dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkMacHardRst(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
-
- if (pAC->GIni.GIGenesis) {
-
- SkXmHardRst(pAC, IoC, Port);
- }
- else {
-
- SkGmHardRst(pAC, IoC, Port);
- }
-
- pAC->GIni.GP[Port].PState = SK_PRT_RESET;
-
-} /* SkMacHardRst */
-
-
-/******************************************************************************
- *
- * SkXmInitMac() - Initialize the XMAC II
- *
- * Description:
- * Initialize the XMAC of the specified port.
- * The XMAC must be reset or stopped before calling this function.
- *
- * Note:
- * The XMAC's Rx and Tx state machine is still disabled when returning.
- *
- * Returns:
- * nothing
- */
-void SkXmInitMac(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U32 Reg;
- int i;
- SK_U16 SWord;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PState == SK_PRT_STOP) {
- /* Port State: SK_PRT_STOP */
- /* Verify that the reset bit is cleared */
- SK_IN16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), &SWord);
-
- if ((SWord & MFF_SET_MAC_RST) != 0) {
- /* PState does not match HW state */
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E006, SKERR_HWI_E006MSG);
- /* Correct it */
- pPrt->PState = SK_PRT_RESET;
- }
- }
-
- if (pPrt->PState == SK_PRT_RESET) {
- /*
- * clear HW reset
- * Note: The SW reset is self clearing, therefore there is
- * nothing to do here.
- */
- SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_CLR_MAC_RST);
-
- /* Ensure that XMAC reset release is done (errata from LReinbold?) */
- SK_IN16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), &SWord);
-
- /* Clear PHY reset */
- if (pPrt->PhyType != SK_PHY_XMAC) {
-
- SK_IN32(IoC, B2_GP_IO, &Reg);
-
- if (Port == 0) {
- Reg |= (GP_DIR_0 | GP_IO_0); /* set to output */
- }
- else {
- Reg |= (GP_DIR_2 | GP_IO_2); /* set to output */
- }
- SK_OUT32(IoC, B2_GP_IO, Reg);
-
- /* Enable GMII interface */
- XM_OUT16(IoC, Port, XM_HW_CFG, XM_HW_GMII_MD);
-
- /* read Id from external PHY (all have the same address) */
- SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_ID1, &pPrt->PhyId1);
-
- /*
- * Optimize MDIO transfer by suppressing preamble.
- * Must be done AFTER first access to BCOM chip.
- */
- XM_IN16(IoC, Port, XM_MMU_CMD, &SWord);
-
- XM_OUT16(IoC, Port, XM_MMU_CMD, SWord | XM_MMU_NO_PRE);
-
- if (pPrt->PhyId1 == PHY_BCOM_ID1_C0) {
- /*
- * Workaround BCOM Errata for the C0 type.
- * Write magic patterns to reserved registers.
- */
- i = 0;
- while (BcomRegC0Hack[i].PhyReg != 0) {
- SkXmPhyWrite(pAC, IoC, Port, BcomRegC0Hack[i].PhyReg,
- BcomRegC0Hack[i].PhyVal);
- i++;
- }
- }
- else if (pPrt->PhyId1 == PHY_BCOM_ID1_A1) {
- /*
- * Workaround BCOM Errata for the A1 type.
- * Write magic patterns to reserved registers.
- */
- i = 0;
- while (BcomRegA1Hack[i].PhyReg != 0) {
- SkXmPhyWrite(pAC, IoC, Port, BcomRegA1Hack[i].PhyReg,
- BcomRegA1Hack[i].PhyVal);
- i++;
- }
- }
-
- /*
- * Workaround BCOM Errata (#10523) for all BCom PHYs.
- * Disable Power Management after reset.
- */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &SWord);
-
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL,
- (SK_U16)(SWord | PHY_B_AC_DIS_PM));
-
- /* PHY LED initialization is done in SkGeXmitLED() */
- }
-
- /* Dummy read the Interrupt source register */
- XM_IN16(IoC, Port, XM_ISRC, &SWord);
-
- /*
- * The auto-negotiation process starts immediately after
- * clearing the reset. The auto-negotiation process should be
- * started by the SIRQ, therefore stop it here immediately.
- */
- SkMacInitPhy(pAC, IoC, Port, SK_FALSE);
-
-#if 0
- /* temp. code: enable signal detect */
- /* WARNING: do not override GMII setting above */
- XM_OUT16(pAC, Port, XM_HW_CFG, XM_HW_COM4SIG);
-#endif
- }
-
- /*
- * configure the XMACs Station Address
- * B2_MAC_2 = xx xx xx xx xx x1 is programmed to XMAC A
- * B2_MAC_3 = xx xx xx xx xx x2 is programmed to XMAC B
- */
- for (i = 0; i < 3; i++) {
- /*
- * The following 2 statements are together endianess
- * independent. Remember this when changing.
- */
- SK_IN16(IoC, (B2_MAC_2 + Port * 8 + i * 2), &SWord);
-
- XM_OUT16(IoC, Port, (XM_SA + i * 2), SWord);
- }
-
- /* Tx Inter Packet Gap (XM_TX_IPG): use default */
- /* Tx High Water Mark (XM_TX_HI_WM): use default */
- /* Tx Low Water Mark (XM_TX_LO_WM): use default */
- /* Host Request Threshold (XM_HT_THR): use default */
- /* Rx Request Threshold (XM_RX_THR): use default */
- /* Rx Low Water Mark (XM_RX_LO_WM): use default */
-
- /* configure Rx High Water Mark (XM_RX_HI_WM) */
- XM_OUT16(IoC, Port, XM_RX_HI_WM, SK_XM_RX_HI_WM);
-
- /* Configure Tx Request Threshold */
- SWord = SK_XM_THR_SL; /* for single port */
-
- if (pAC->GIni.GIMacsFound > 1) {
- switch (pAC->GIni.GIPortUsage) {
- case SK_RED_LINK:
- SWord = SK_XM_THR_REDL; /* redundant link */
- break;
- case SK_MUL_LINK:
- SWord = SK_XM_THR_MULL; /* load balancing */
- break;
- case SK_JUMBO_LINK:
- SWord = SK_XM_THR_JUMBO; /* jumbo frames */
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E014, SKERR_HWI_E014MSG);
- break;
- }
- }
- XM_OUT16(IoC, Port, XM_TX_THR, SWord);
-
- /* setup register defaults for the Tx Command Register */
- XM_OUT16(IoC, Port, XM_TX_CMD, XM_TX_AUTO_PAD);
-
- /* setup register defaults for the Rx Command Register */
- SWord = XM_RX_STRIP_FCS | XM_RX_LENERR_OK;
-
- if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
- SWord |= XM_RX_BIG_PK_OK;
- }
-
- if (pPrt->PLinkModeConf == SK_LMODE_HALF) {
- /*
- * If in manual half duplex mode the other side might be in
- * full duplex mode, so ignore if a carrier extension is not seen
- * on frames received
- */
- SWord |= XM_RX_DIS_CEXT;
- }
-
- XM_OUT16(IoC, Port, XM_RX_CMD, SWord);
-
- /*
- * setup register defaults for the Mode Register
- * - Don't strip error frames to avoid Store & Forward
- * on the Rx side.
- * - Enable 'Check Station Address' bit
- * - Enable 'Check Address Array' bit
- */
- XM_OUT32(IoC, Port, XM_MODE, XM_DEF_MODE);
-
- /*
- * Initialize the Receive Counter Event Mask (XM_RX_EV_MSK)
- * - Enable all bits excepting 'Octets Rx OK Low CntOv'
- * and 'Octets Rx OK Hi Cnt Ov'.
- */
- XM_OUT32(IoC, Port, XM_RX_EV_MSK, XMR_DEF_MSK);
-
- /*
- * Initialize the Transmit Counter Event Mask (XM_TX_EV_MSK)
- * - Enable all bits excepting 'Octets Tx OK Low CntOv'
- * and 'Octets Tx OK Hi Cnt Ov'.
- */
- XM_OUT32(IoC, Port, XM_TX_EV_MSK, XMT_DEF_MSK);
-
- /*
- * Do NOT init XMAC interrupt mask here.
- * All interrupts remain disable until link comes up!
- */
-
- /*
- * Any additional configuration changes may be done now.
- * The last action is to enable the Rx and Tx state machine.
- * This should be done after the auto-negotiation process
- * has been completed successfully.
- */
-} /* SkXmInitMac */
-
-/******************************************************************************
- *
- * SkGmInitMac() - Initialize the GMAC
- *
- * Description:
- * Initialize the GMAC of the specified port.
- * The GMAC must be reset or stopped before calling this function.
- *
- * Note:
- * The GMAC's Rx and Tx state machine is still disabled when returning.
- *
- * Returns:
- * nothing
- */
-void SkGmInitMac(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- int i;
- SK_U16 SWord;
- SK_U32 DWord;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PState == SK_PRT_STOP) {
- /* Port State: SK_PRT_STOP */
- /* Verify that the reset bit is cleared */
- SK_IN32(IoC, MR_ADDR(Port, GMAC_CTRL), &DWord);
-
- if ((DWord & GMC_RST_SET) != 0) {
- /* PState does not match HW state */
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E006, SKERR_HWI_E006MSG);
- /* Correct it */
- pPrt->PState = SK_PRT_RESET;
- }
- }
-
- if (pPrt->PState == SK_PRT_RESET) {
- /* set GPHY Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), GPC_RST_SET);
-
- /* set GMAC Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_SET);
-
- /* clear GMAC Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_CLR);
-
- /* set GMAC Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_SET);
-
- /* set HWCFG_MODE */
- DWord = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP |
- GPC_ENA_XC | GPC_ANEG_ADV_ALL_M | GPC_ENA_PAUSE |
- (pAC->GIni.GICopperType ? GPC_HWCFG_GMII_COP :
- GPC_HWCFG_GMII_FIB);
-
- /* set GPHY Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), DWord | GPC_RST_SET);
-
- /* release GPHY Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), DWord | GPC_RST_CLR);
-
- /* clear GMAC Control reset */
- SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_PAUSE_ON | GMC_RST_CLR);
-
- /* Dummy read the Interrupt source register */
- SK_IN16(IoC, GMAC_IRQ_SRC, &SWord);
-
-#ifndef VCPU
- /* read Id from PHY */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_ID1, &pPrt->PhyId1);
-
- SkGmInitPhyMarv(pAC, IoC, Port, SK_FALSE);
-#endif /* VCPU */
- }
-
- (void)SkGmResetCounter(pAC, IoC, Port);
-
- SWord = 0;
-
- /* speed settings */
- switch (pPrt->PLinkSpeed) {
- case SK_LSPEED_AUTO:
- case SK_LSPEED_1000MBPS:
- SWord |= GM_GPCR_SPEED_1000 | GM_GPCR_SPEED_100;
- break;
- case SK_LSPEED_100MBPS:
- SWord |= GM_GPCR_SPEED_100;
- break;
- case SK_LSPEED_10MBPS:
- break;
- }
-
- /* duplex settings */
- if (pPrt->PLinkMode != SK_LMODE_HALF) {
- /* set full duplex */
- SWord |= GM_GPCR_DUP_FULL;
- }
-
- /* flow control settings */
- switch (pPrt->PFlowCtrlMode) {
- case SK_FLOW_MODE_NONE:
- /* disable auto-negotiation for flow-control */
- SWord |= GM_GPCR_FC_TX_DIS | GM_GPCR_FC_RX_DIS;
- break;
- case SK_FLOW_MODE_LOC_SEND:
- SWord |= GM_GPCR_FC_RX_DIS;
- break;
- case SK_FLOW_MODE_SYMMETRIC:
- /* TBD */
- case SK_FLOW_MODE_SYM_OR_REM:
- /* enable auto-negotiation for flow-control and */
- /* enable Rx and Tx of pause frames */
- break;
- }
-
- /* Auto-negotiation ? */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- /* disable auto-update for speed, duplex and flow-control */
- SWord |= GM_GPCR_AU_ALL_DIS;
- }
-
- /* setup General Purpose Control Register */
- GM_OUT16(IoC, Port, GM_GP_CTRL, SWord);
-
- /* setup Transmit Control Register */
- GM_OUT16(IoC, Port, GM_TX_CTRL, GM_TXCR_COL_THR);
-
- /* setup Receive Control Register */
- GM_OUT16(IoC, Port, GM_RX_CTRL, GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA |
- GM_RXCR_CRC_DIS);
-
- /* setup Transmit Flow Control Register */
- GM_OUT16(IoC, Port, GM_TX_FLOW_CTRL, 0xffff);
-
- /* setup Transmit Parameter Register */
-#ifdef VCPU
- GM_IN16(IoC, Port, GM_TX_PARAM, &SWord);
-#endif /* VCPU */
-
- SWord = JAM_LEN_VAL(3) | JAM_IPG_VAL(11) | IPG_JAM_DATA(26);
-
- GM_OUT16(IoC, Port, GM_TX_PARAM, SWord);
-
- /* configure the Serial Mode Register */
-#ifdef VCPU
- GM_IN16(IoC, Port, GM_SERIAL_MODE, &SWord);
-#endif /* VCPU */
-
- SWord = GM_SMOD_VLAN_ENA | IPG_VAL_FAST_ETH;
-
- if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
- /* enable jumbo mode (Max. Frame Length = 9018) */
- SWord |= GM_SMOD_JUMBO_ENA;
- }
-
- GM_OUT16(IoC, Port, GM_SERIAL_MODE, SWord);
-
- /*
- * configure the GMACs Station Addresses
- * in PROM you can find our addresses at:
- * B2_MAC_1 = xx xx xx xx xx x0 virtual address
- * B2_MAC_2 = xx xx xx xx xx x1 is programmed to GMAC A
- * B2_MAC_3 = xx xx xx xx xx x2 is reserved for DualPort
- */
-
- for (i = 0; i < 3; i++) {
- /*
- * The following 2 statements are together endianess
- * independent. Remember this when changing.
- */
- /* physical address: will be used for pause frames */
- SK_IN16(IoC, (B2_MAC_2 + Port * 8 + i * 2), &SWord);
-
-#ifdef WA_DEV_16
- /* WA for deviation #16 */
- if (pAC->GIni.GIChipRev == 0) {
- /* swap the address bytes */
- SWord = ((SWord & 0xff00) >> 8) | ((SWord & 0x00ff) << 8);
-
- /* write to register in reversed order */
- GM_OUT16(IoC, Port, (GM_SRC_ADDR_1L + (2 - i) * 4), SWord);
- }
- else {
- GM_OUT16(IoC, Port, (GM_SRC_ADDR_1L + i * 4), SWord);
- }
-#else
- GM_OUT16(IoC, Port, (GM_SRC_ADDR_1L + i * 4), SWord);
-#endif /* WA_DEV_16 */
-
- /* virtual address: will be used for data */
- SK_IN16(IoC, (B2_MAC_1 + Port * 8 + i * 2), &SWord);
-
- GM_OUT16(IoC, Port, (GM_SRC_ADDR_2L + i * 4), SWord);
-
- /* reset Multicast filtering Hash registers 1-3 */
- GM_OUT16(IoC, Port, GM_MC_ADDR_H1 + 4*i, 0);
- }
-
- /* reset Multicast filtering Hash register 4 */
- GM_OUT16(IoC, Port, GM_MC_ADDR_H4, 0);
-
- /* enable interrupt mask for counter overflows */
- GM_OUT16(IoC, Port, GM_TX_IRQ_MSK, 0);
- GM_OUT16(IoC, Port, GM_RX_IRQ_MSK, 0);
- GM_OUT16(IoC, Port, GM_TR_IRQ_MSK, 0);
-
- /* read General Purpose Status */
- GM_IN16(IoC, Port, GM_GP_STAT, &SWord);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("MAC Stat Reg=0x%04X\n", SWord));
-
-#ifdef SK_DIAG
- c_print("MAC Stat Reg=0x%04X\n", SWord);
-#endif /* SK_DIAG */
-
-} /* SkGmInitMac */
-
-
-/******************************************************************************
- *
- * SkXmInitDupMd() - Initialize the XMACs Duplex Mode
- *
- * Description:
- * This function initializes the XMACs Duplex Mode.
- * It should be called after successfully finishing
- * the Auto-negotiation Process
- *
- * Returns:
- * nothing
- */
-void SkXmInitDupMd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- switch (pAC->GIni.GP[Port].PLinkModeStatus) {
- case SK_LMODE_STAT_AUTOHALF:
- case SK_LMODE_STAT_HALF:
- /* Configuration Actions for Half Duplex Mode */
- /*
- * XM_BURST = default value. We are probable not quick
- * enough at the 'XMAC' bus to burst 8kB.
- * The XMAC stops bursting if no transmit frames
- * are available or the burst limit is exceeded.
- */
- /* XM_TX_RT_LIM = default value (15) */
- /* XM_TX_STIME = default value (0xff = 4096 bit times) */
- break;
- case SK_LMODE_STAT_AUTOFULL:
- case SK_LMODE_STAT_FULL:
- /* Configuration Actions for Full Duplex Mode */
- /*
- * The duplex mode is configured by the PHY,
- * therefore it seems to be that there is nothing
- * to do here.
- */
- break;
- case SK_LMODE_STAT_UNKNOWN:
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E007, SKERR_HWI_E007MSG);
- break;
- }
-} /* SkXmInitDupMd */
-
-
-/******************************************************************************
- *
- * SkXmInitPauseMd() - initialize the Pause Mode to be used for this port
- *
- * Description:
- * This function initializes the Pause Mode which should
- * be used for this port.
- * It should be called after successfully finishing
- * the Auto-negotiation Process
- *
- * Returns:
- * nothing
- */
-void SkXmInitPauseMd(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U32 DWord;
- SK_U16 Word;
-
- pPrt = &pAC->GIni.GP[Port];
-
- XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
-
- if (pPrt->PFlowCtrlStatus == SK_FLOW_STAT_NONE ||
- pPrt->PFlowCtrlStatus == SK_FLOW_STAT_LOC_SEND) {
-
- /* Disable Pause Frame Reception */
- Word |= XM_MMU_IGN_PF;
- }
- else {
- /*
- * enabling pause frame reception is required for 1000BT
- * because the XMAC is not reset if the link is going down
- */
- /* Enable Pause Frame Reception */
- Word &= ~XM_MMU_IGN_PF;
- }
-
- XM_OUT16(IoC, Port, XM_MMU_CMD, Word);
-
- XM_IN32(IoC, Port, XM_MODE, &DWord);
-
- if (pPrt->PFlowCtrlStatus == SK_FLOW_STAT_SYMMETRIC ||
- pPrt->PFlowCtrlStatus == SK_FLOW_STAT_LOC_SEND) {
-
- /*
- * Configure Pause Frame Generation
- * Use internal and external Pause Frame Generation.
- * Sending pause frames is edge triggered.
- * Send a Pause frame with the maximum pause time if
- * internal oder external FIFO full condition occurs.
- * Send a zero pause time frame to re-start transmission.
- */
-
- /* XM_PAUSE_DA = '010000C28001' (default) */
-
- /* XM_MAC_PTIME = 0xffff (maximum) */
- /* remember this value is defined in big endian (!) */
- XM_OUT16(IoC, Port, XM_MAC_PTIME, 0xffff);
-
- /* Set Pause Mode in Mode Register */
- DWord |= XM_PAUSE_MODE;
-
- /* Set Pause Mode in MAC Rx FIFO */
- SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_ENA_PAUSE);
- }
- else {
- /*
- * disable pause frame generation is required for 1000BT
- * because the XMAC is not reset if the link is going down
- */
- /* Disable Pause Mode in Mode Register */
- DWord &= ~XM_PAUSE_MODE;
-
- /* Disable Pause Mode in MAC Rx FIFO */
- SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_DIS_PAUSE);
- }
-
- XM_OUT32(IoC, Port, XM_MODE, DWord);
-} /* SkXmInitPauseMd*/
-
-
-/******************************************************************************
- *
- * SkXmInitPhyXmac() - Initialize the XMAC Phy registers
- *
- * Description: initializes all the XMACs Phy registers
- *
- * Note:
- *
- * Returns:
- * nothing
- */
-static void SkXmInitPhyXmac(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
-{
- SK_GEPORT *pPrt;
- SK_U16 Ctrl;
-
- pPrt = &pAC->GIni.GP[Port];
- Ctrl = 0;
-
- /* Auto-negotiation ? */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyXmac: no auto-negotiation Port %d\n", Port));
- /* Set DuplexMode in Config register */
- if (pPrt->PLinkMode == SK_LMODE_FULL) {
- Ctrl |= PHY_CT_DUP_MD;
- }
-
- /*
- * Do NOT enable Auto-negotiation here. This would hold
- * the link down because no IDLEs are transmitted
- */
- }
- else {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyXmac: with auto-negotiation Port %d\n", Port));
- /* Set Auto-negotiation advertisement */
-
- /* Set Full/half duplex capabilities */
- switch (pPrt->PLinkMode) {
- case SK_LMODE_AUTOHALF:
- Ctrl |= PHY_X_AN_HD;
- break;
- case SK_LMODE_AUTOFULL:
- Ctrl |= PHY_X_AN_FD;
- break;
- case SK_LMODE_AUTOBOTH:
- Ctrl |= PHY_X_AN_FD | PHY_X_AN_HD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
- SKERR_HWI_E015MSG);
- }
-
- switch (pPrt->PFlowCtrlMode) {
- case SK_FLOW_MODE_NONE:
- Ctrl |= PHY_X_P_NO_PAUSE;
- break;
- case SK_FLOW_MODE_LOC_SEND:
- Ctrl |= PHY_X_P_ASYM_MD;
- break;
- case SK_FLOW_MODE_SYMMETRIC:
- Ctrl |= PHY_X_P_SYM_MD;
- break;
- case SK_FLOW_MODE_SYM_OR_REM:
- Ctrl |= PHY_X_P_BOTH_MD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
- SKERR_HWI_E016MSG);
- }
-
- /* Write AutoNeg Advertisement Register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_XMAC_AUNE_ADV, Ctrl);
-
- /* Restart Auto-negotiation */
- Ctrl = PHY_CT_ANE | PHY_CT_RE_CFG;
- }
-
- if (DoLoop) {
- /* Set the Phy Loopback bit, too */
- Ctrl |= PHY_CT_LOOP;
- }
-
- /* Write to the Phy control register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_XMAC_CTRL, Ctrl);
-} /* SkXmInitPhyXmac */
-
-
-/******************************************************************************
- *
- * SkXmInitPhyBcom() - Initialize the Broadcom Phy registers
- *
- * Description: initializes all the Broadcom Phy registers
- *
- * Note:
- *
- * Returns:
- * nothing
- */
-static void SkXmInitPhyBcom(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
-{
- SK_GEPORT *pPrt;
- SK_U16 Ctrl1;
- SK_U16 Ctrl2;
- SK_U16 Ctrl3;
- SK_U16 Ctrl4;
- SK_U16 Ctrl5;
-
- Ctrl1 = PHY_CT_SP1000;
- Ctrl2 = 0;
- Ctrl3 = PHY_SEL_TYPE;
- Ctrl4 = PHY_B_PEC_EN_LTR;
- Ctrl5 = PHY_B_AC_TX_TST;
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* manually Master/Slave ? */
- if (pPrt->PMSMode != SK_MS_MODE_AUTO) {
- Ctrl2 |= PHY_B_1000C_MSE;
-
- if (pPrt->PMSMode == SK_MS_MODE_MASTER) {
- Ctrl2 |= PHY_B_1000C_MSC;
- }
- }
- /* Auto-negotiation ? */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyBcom: no auto-negotiation Port %d\n", Port));
- /* Set DuplexMode in Config register */
- Ctrl1 |= (pPrt->PLinkMode == SK_LMODE_FULL ? PHY_CT_DUP_MD : 0);
-
- /* Determine Master/Slave manually if not already done */
- if (pPrt->PMSMode == SK_MS_MODE_AUTO) {
- Ctrl2 |= PHY_B_1000C_MSE; /* set it to Slave */
- }
-
- /*
- * Do NOT enable Auto-negotiation here. This would hold
- * the link down because no IDLES are transmitted
- */
- }
- else {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyBcom: with auto-negotiation Port %d\n", Port));
- /* Set Auto-negotiation advertisement */
-
- /*
- * Workaround BCOM Errata #1 for the C5 type.
- * 1000Base-T Link Acquisition Failure in Slave Mode
- * Set Repeater/DTE bit 10 of the 1000Base-T Control Register
- */
- Ctrl2 |= PHY_B_1000C_RD;
-
- /* Set Full/half duplex capabilities */
- switch (pPrt->PLinkMode) {
- case SK_LMODE_AUTOHALF:
- Ctrl2 |= PHY_B_1000C_AHD;
- break;
- case SK_LMODE_AUTOFULL:
- Ctrl2 |= PHY_B_1000C_AFD;
- break;
- case SK_LMODE_AUTOBOTH:
- Ctrl2 |= PHY_B_1000C_AFD | PHY_B_1000C_AHD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
- SKERR_HWI_E015MSG);
- }
-
- switch (pPrt->PFlowCtrlMode) {
- case SK_FLOW_MODE_NONE:
- Ctrl3 |= PHY_B_P_NO_PAUSE;
- break;
- case SK_FLOW_MODE_LOC_SEND:
- Ctrl3 |= PHY_B_P_ASYM_MD;
- break;
- case SK_FLOW_MODE_SYMMETRIC:
- Ctrl3 |= PHY_B_P_SYM_MD;
- break;
- case SK_FLOW_MODE_SYM_OR_REM:
- Ctrl3 |= PHY_B_P_BOTH_MD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
- SKERR_HWI_E016MSG);
- }
-
- /* Restart Auto-negotiation */
- Ctrl1 |= PHY_CT_ANE | PHY_CT_RE_CFG;
- }
-
- /* Initialize LED register here? */
- /* No. Please do it in SkDgXmitLed() (if required) and swap
- init order of LEDs and XMAC. (MAl) */
-
- /* Write 1000Base-T Control Register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_1000T_CTRL, Ctrl2);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("1000B-T Ctrl Reg=0x%04X\n", Ctrl2));
-
- /* Write AutoNeg Advertisement Register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUNE_ADV, Ctrl3);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Auto-Neg. Adv. Reg=0x%04X\n", Ctrl3));
-
- if (DoLoop) {
- /* Set the Phy Loopback bit, too */
- Ctrl1 |= PHY_CT_LOOP;
- }
-
- if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
- /* configure FIFO to high latency for transmission of ext. packets */
- Ctrl4 |= PHY_B_PEC_HIGH_LA;
-
- /* configure reception of extended packets */
- Ctrl5 |= PHY_B_AC_LONG_PACK;
-
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, Ctrl5);
- }
-
- /* Configure LED Traffic Mode and Jumbo Frame usage if specified */
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_P_EXT_CTRL, Ctrl4);
-
- /* Write to the Phy control register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_CTRL, Ctrl1);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("PHY Control Reg=0x%04X\n", Ctrl1));
-} /* SkXmInitPhyBcom */
-
-
-/******************************************************************************
- *
- * SkGmInitPhyMarv() - Initialize the Marvell Phy registers
- *
- * Description: initializes all the Marvell Phy registers
- *
- * Note:
- *
- * Returns:
- * nothing
- */
-static void SkGmInitPhyMarv(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
-{
- SK_GEPORT *pPrt;
- SK_U16 PhyCtrl;
- SK_U16 C1000BaseT;
- SK_U16 AutoNegAdv;
- SK_U16 ExtPhyCtrl;
- SK_U16 PhyStat;
- SK_U16 PhyStat1;
- SK_U16 PhySpecStat;
- SK_U16 LedCtrl;
- SK_BOOL AutoNeg;
-
-#ifdef VCPU
- VCPUprintf(0, "SkGmInitPhyMarv(), Port=%u, DoLoop=%u\n",
- Port, DoLoop);
-#else /* VCPU */
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* Auto-negotiation ? */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- AutoNeg = SK_FALSE;
- }
- else {
- AutoNeg = SK_TRUE;
- }
-
- if (!DoLoop) {
- /* Read Ext. PHY Specific Control */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_EXT_CTRL, &ExtPhyCtrl);
-
- ExtPhyCtrl &= ~(PHY_M_EC_M_DSC_MSK | PHY_M_EC_S_DSC_MSK |
- PHY_M_EC_MAC_S_MSK);
-
- ExtPhyCtrl |= PHY_M_EC_M_DSC(1) | PHY_M_EC_S_DSC(1) |
- PHY_M_EC_MAC_S(MAC_TX_CLK_25_MHZ);
-
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_CTRL, ExtPhyCtrl);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Ext.PHYCtrl=0x%04X\n", ExtPhyCtrl));
-
- /* Read PHY Control */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CTRL, &PhyCtrl);
-
- /* Assert software reset */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_CTRL,
- (SK_U16)(PhyCtrl | PHY_CT_RESET));
- }
-#endif /* VCPU */
-
- PhyCtrl = 0 /* PHY_CT_COL_TST */;
- C1000BaseT = 0;
- AutoNegAdv = PHY_SEL_TYPE;
-
- /* manually Master/Slave ? */
- if (pPrt->PMSMode != SK_MS_MODE_AUTO) {
- /* enable Manual Master/Slave */
- C1000BaseT |= PHY_M_1000C_MSE;
-
- if (pPrt->PMSMode == SK_MS_MODE_MASTER) {
- C1000BaseT |= PHY_M_1000C_MSC; /* set it to Master */
- }
- }
-
- /* Auto-negotiation ? */
- if (!AutoNeg) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyMarv: no auto-negotiation Port %d\n", Port));
-
- if (pPrt->PLinkMode == SK_LMODE_FULL) {
- /* Set Full Duplex Mode */
- PhyCtrl |= PHY_CT_DUP_MD;
- }
-
- /* Set Master/Slave manually if not already done */
- if (pPrt->PMSMode == SK_MS_MODE_AUTO) {
- C1000BaseT |= PHY_M_1000C_MSE; /* set it to Slave */
- }
-
- /* Set Speed */
- switch (pPrt->PLinkSpeed) {
- case SK_LSPEED_AUTO:
- case SK_LSPEED_1000MBPS:
- PhyCtrl |= PHY_CT_SP1000;
- break;
- case SK_LSPEED_100MBPS:
- PhyCtrl |= PHY_CT_SP100;
- break;
- case SK_LSPEED_10MBPS:
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E019,
- SKERR_HWI_E019MSG);
- }
-
- if (!DoLoop) {
- PhyCtrl |= PHY_CT_RESET;
- }
- /*
- * Do NOT enable Auto-negotiation here. This would hold
- * the link down because no IDLES are transmitted
- */
- }
- else {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyMarv: with auto-negotiation Port %d\n", Port));
-
- PhyCtrl |= PHY_CT_ANE;
-
- if (pAC->GIni.GICopperType) {
- /* Set Speed capabilities */
- switch (pPrt->PLinkSpeed) {
- case SK_LSPEED_AUTO:
- C1000BaseT |= PHY_M_1000C_AHD | PHY_M_1000C_AFD;
- AutoNegAdv |= PHY_M_AN_100_FD | PHY_M_AN_100_HD |
- PHY_M_AN_10_FD | PHY_M_AN_10_HD;
- break;
- case SK_LSPEED_1000MBPS:
- C1000BaseT |= PHY_M_1000C_AHD | PHY_M_1000C_AFD;
- break;
- case SK_LSPEED_100MBPS:
- AutoNegAdv |= PHY_M_AN_100_FD | PHY_M_AN_100_HD |
- PHY_M_AN_10_FD | PHY_M_AN_10_HD;
- break;
- case SK_LSPEED_10MBPS:
- AutoNegAdv |= PHY_M_AN_10_FD | PHY_M_AN_10_HD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E019,
- SKERR_HWI_E019MSG);
- }
-
- /* Set Full/half duplex capabilities */
- switch (pPrt->PLinkMode) {
- case SK_LMODE_AUTOHALF:
- C1000BaseT &= ~PHY_M_1000C_AFD;
- AutoNegAdv &= ~(PHY_M_AN_100_FD | PHY_M_AN_10_FD);
- break;
- case SK_LMODE_AUTOFULL:
- C1000BaseT &= ~PHY_M_1000C_AHD;
- AutoNegAdv &= ~(PHY_M_AN_100_HD | PHY_M_AN_10_HD);
- break;
- case SK_LMODE_AUTOBOTH:
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
- SKERR_HWI_E015MSG);
- }
-
- /* Set Auto-negotiation advertisement */
- switch (pPrt->PFlowCtrlMode) {
- case SK_FLOW_MODE_NONE:
- AutoNegAdv |= PHY_B_P_NO_PAUSE;
- break;
- case SK_FLOW_MODE_LOC_SEND:
- AutoNegAdv |= PHY_B_P_ASYM_MD;
- break;
- case SK_FLOW_MODE_SYMMETRIC:
- AutoNegAdv |= PHY_B_P_SYM_MD;
- break;
- case SK_FLOW_MODE_SYM_OR_REM:
- AutoNegAdv |= PHY_B_P_BOTH_MD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
- SKERR_HWI_E016MSG);
- }
- }
- else { /* special defines for FIBER (88E1011S only) */
-
- /* Set Full/half duplex capabilities */
- switch (pPrt->PLinkMode) {
- case SK_LMODE_AUTOHALF:
- AutoNegAdv |= PHY_M_AN_1000X_AHD;
- break;
- case SK_LMODE_AUTOFULL:
- AutoNegAdv |= PHY_M_AN_1000X_AFD;
- break;
- case SK_LMODE_AUTOBOTH:
- AutoNegAdv |= PHY_M_AN_1000X_AHD | PHY_M_AN_1000X_AFD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
- SKERR_HWI_E015MSG);
- }
-
- /* Set Auto-negotiation advertisement */
- switch (pPrt->PFlowCtrlMode) {
- case SK_FLOW_MODE_NONE:
- AutoNegAdv |= PHY_M_P_NO_PAUSE_X;
- break;
- case SK_FLOW_MODE_LOC_SEND:
- AutoNegAdv |= PHY_M_P_ASYM_MD_X;
- break;
- case SK_FLOW_MODE_SYMMETRIC:
- AutoNegAdv |= PHY_M_P_SYM_MD_X;
- break;
- case SK_FLOW_MODE_SYM_OR_REM:
- AutoNegAdv |= PHY_M_P_BOTH_MD_X;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
- SKERR_HWI_E016MSG);
- }
- }
-
- if (!DoLoop) {
- /* Restart Auto-negotiation */
- PhyCtrl |= PHY_CT_RE_CFG;
- }
- }
-
-#ifdef VCPU
- /*
- * E-mail from Gu Lin (08-03-2002):
- */
-
- /* Program PHY register 30 as 16'h0708 for simulation speed up */
- SkGmPhyWrite(pAC, IoC, Port, 30, 0x0708);
-
- VCpuWait(2000);
-
-#else /* VCPU */
-
- /* Write 1000Base-T Control Register */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_1000T_CTRL, C1000BaseT);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("1000B-T Ctrl=0x%04X\n", C1000BaseT));
-
- /* Write AutoNeg Advertisement Register */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_AUNE_ADV, AutoNegAdv);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Auto-Neg.Ad.=0x%04X\n", AutoNegAdv));
-#endif /* VCPU */
-
- if (DoLoop) {
- /* Set the PHY Loopback bit */
- PhyCtrl |= PHY_CT_LOOP;
-
- /* Program PHY register 16 as 16'h0400 to force link good */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_PHY_CTRL, PHY_M_PC_FL_GOOD);
-
-#if 0
- if (pPrt->PLinkSpeed != SK_LSPEED_AUTO) {
- /* Write Ext. PHY Specific Control */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_CTRL,
- (SK_U16)((pPrt->PLinkSpeed + 2) << 4));
- }
- }
- else if (pPrt->PLinkSpeed == SK_LSPEED_10MBPS) {
- /* Write PHY Specific Control */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_PHY_CTRL, PHY_M_PC_EN_DET_MSK);
- }
-#endif /* 0 */
- }
-
- /* Write to the PHY Control register */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_CTRL, PhyCtrl);
-
-#ifdef VCPU
- VCpuWait(2000);
-#else
-
- LedCtrl = PHY_M_LED_PULS_DUR(PULS_170MS) | PHY_M_LED_BLINK_RT(BLINK_84MS);
-
-#ifdef ACT_LED_BLINK
- LedCtrl |= PHY_M_LEDC_RX_CTRL | PHY_M_LEDC_TX_CTRL;
-#endif /* ACT_LED_BLINK */
-
-#ifdef DUP_LED_NORMAL
- LedCtrl |= PHY_M_LEDC_DP_CTRL;
-#endif /* DUP_LED_NORMAL */
-
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_LED_CTRL, LedCtrl);
-
-#endif /* VCPU */
-
-#ifdef SK_DIAG
- c_print("Set PHY Ctrl=0x%04X\n", PhyCtrl);
- c_print("Set 1000 B-T=0x%04X\n", C1000BaseT);
- c_print("Set Auto-Neg=0x%04X\n", AutoNegAdv);
- c_print("Set Ext Ctrl=0x%04X\n", ExtPhyCtrl);
-#endif /* SK_DIAG */
-
-#ifndef xDEBUG
- /* Read PHY Control */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CTRL, &PhyCtrl);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("PHY Ctrl Reg.=0x%04X\n", PhyCtrl));
-
- /* Read 1000Base-T Control Register */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_1000T_CTRL, &C1000BaseT);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("1000B-T Ctrl =0x%04X\n", C1000BaseT));
-
- /* Read AutoNeg Advertisement Register */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_AUNE_ADV, &AutoNegAdv);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Auto-Neg. Ad.=0x%04X\n", AutoNegAdv));
-
- /* Read Ext. PHY Specific Control */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_EXT_CTRL, &ExtPhyCtrl);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Ext PHY Ctrl=0x%04X\n", ExtPhyCtrl));
-
- /* Read PHY Status */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_STAT, &PhyStat);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("PHY Stat Reg.=0x%04X\n", PhyStat));
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_STAT, &PhyStat1);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("PHY Stat Reg.=0x%04X\n", PhyStat1));
-
- /* Read PHY Specific Status */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_PHY_STAT, &PhySpecStat);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("PHY Spec Stat=0x%04X\n", PhySpecStat));
-#endif /* DEBUG */
-
-#ifdef SK_DIAG
- c_print("PHY Ctrl Reg=0x%04X\n", PhyCtrl);
- c_print("PHY 1000 Reg=0x%04X\n", C1000BaseT);
- c_print("PHY AnAd Reg=0x%04X\n", AutoNegAdv);
- c_print("Ext Ctrl Reg=0x%04X\n", ExtPhyCtrl);
- c_print("PHY Stat Reg=0x%04X\n", PhyStat);
- c_print("PHY Stat Reg=0x%04X\n", PhyStat1);
- c_print("PHY Spec Reg=0x%04X\n", PhySpecStat);
-#endif /* SK_DIAG */
-
-} /* SkGmInitPhyMarv */
-
-
-#ifdef OTHER_PHY
-/******************************************************************************
- *
- * SkXmInitPhyLone() - Initialize the Level One Phy registers
- *
- * Description: initializes all the Level One Phy registers
- *
- * Note:
- *
- * Returns:
- * nothing
- */
-static void SkXmInitPhyLone(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
-{
- SK_GEPORT *pPrt;
- SK_U16 Ctrl1;
- SK_U16 Ctrl2;
- SK_U16 Ctrl3;
-
- Ctrl1 = PHY_CT_SP1000;
- Ctrl2 = 0;
- Ctrl3 = PHY_SEL_TYPE;
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* manually Master/Slave ? */
- if (pPrt->PMSMode != SK_MS_MODE_AUTO) {
- Ctrl2 |= PHY_L_1000C_MSE;
-
- if (pPrt->PMSMode == SK_MS_MODE_MASTER) {
- Ctrl2 |= PHY_L_1000C_MSC;
- }
- }
- /* Auto-negotiation ? */
- if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
- /*
- * level one spec say: "1000Mbps: manual mode not allowed"
- * but lets see what happens...
- */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyLone: no auto-negotiation Port %d\n", Port));
- /* Set DuplexMode in Config register */
- Ctrl1 = (pPrt->PLinkMode == SK_LMODE_FULL ? PHY_CT_DUP_MD : 0);
-
- /* Determine Master/Slave manually if not already done */
- if (pPrt->PMSMode == SK_MS_MODE_AUTO) {
- Ctrl2 |= PHY_L_1000C_MSE; /* set it to Slave */
- }
-
- /*
- * Do NOT enable Auto-negotiation here. This would hold
- * the link down because no IDLES are transmitted
- */
- }
- else {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("InitPhyLone: with auto-negotiation Port %d\n", Port));
- /* Set Auto-negotiation advertisement */
-
- /* Set Full/half duplex capabilities */
- switch (pPrt->PLinkMode) {
- case SK_LMODE_AUTOHALF:
- Ctrl2 |= PHY_L_1000C_AHD;
- break;
- case SK_LMODE_AUTOFULL:
- Ctrl2 |= PHY_L_1000C_AFD;
- break;
- case SK_LMODE_AUTOBOTH:
- Ctrl2 |= PHY_L_1000C_AFD | PHY_L_1000C_AHD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
- SKERR_HWI_E015MSG);
- }
-
- switch (pPrt->PFlowCtrlMode) {
- case SK_FLOW_MODE_NONE:
- Ctrl3 |= PHY_L_P_NO_PAUSE;
- break;
- case SK_FLOW_MODE_LOC_SEND:
- Ctrl3 |= PHY_L_P_ASYM_MD;
- break;
- case SK_FLOW_MODE_SYMMETRIC:
- Ctrl3 |= PHY_L_P_SYM_MD;
- break;
- case SK_FLOW_MODE_SYM_OR_REM:
- Ctrl3 |= PHY_L_P_BOTH_MD;
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
- SKERR_HWI_E016MSG);
- }
-
- /* Restart Auto-negotiation */
- Ctrl1 = PHY_CT_ANE | PHY_CT_RE_CFG;
-
- }
-
- /* Initialize LED register here ? */
- /* No. Please do it in SkDgXmitLed() (if required) and swap
- init order of LEDs and XMAC. (MAl) */
-
- /* Write 1000Base-T Control Register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_1000T_CTRL, Ctrl2);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("1000B-T Ctrl Reg=0x%04X\n", Ctrl2));
-
- /* Write AutoNeg Advertisement Register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_AUNE_ADV, Ctrl3);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Auto-Neg. Adv. Reg=0x%04X\n", Ctrl3));
-
-
- if (DoLoop) {
- /* Set the Phy Loopback bit, too */
- Ctrl1 |= PHY_CT_LOOP;
- }
-
- /* Write to the Phy control register */
- SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_CTRL, Ctrl1);
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("PHY Control Reg=0x%04X\n", Ctrl1));
-} /* SkXmInitPhyLone */
-
-
-/******************************************************************************
- *
- * SkXmInitPhyNat() - Initialize the National Phy registers
- *
- * Description: initializes all the National Phy registers
- *
- * Note:
- *
- * Returns:
- * nothing
- */
-static void SkXmInitPhyNat(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
-{
-/* todo: National */
-} /* SkXmInitPhyNat */
-#endif /* OTHER_PHY */
-
-
-/******************************************************************************
- *
- * SkMacInitPhy() - Initialize the PHY registers
- *
- * Description: calls the Init PHY routines dep. on board type
- *
- * Note:
- *
- * Returns:
- * nothing
- */
-void SkMacInitPhy(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
-{
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- switch (pPrt->PhyType) {
- case SK_PHY_XMAC:
- SkXmInitPhyXmac(pAC, IoC, Port, DoLoop);
- break;
- case SK_PHY_BCOM:
- SkXmInitPhyBcom(pAC, IoC, Port, DoLoop);
- break;
- case SK_PHY_MARV_COPPER:
- case SK_PHY_MARV_FIBER:
- SkGmInitPhyMarv(pAC, IoC, Port, DoLoop);
- break;
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- SkXmInitPhyLone(pAC, IoC, Port, DoLoop);
- break;
- case SK_PHY_NAT:
- SkXmInitPhyNat(pAC, IoC, Port, DoLoop);
- break;
-#endif /* OTHER_PHY */
- }
-} /* SkMacInitPhy */
-
-
-#ifndef SK_DIAG
-/******************************************************************************
- *
- * SkXmAutoNegLipaXmac() - Decides whether Link Partner could do auto-neg
- *
- * This function analyses the Interrupt status word. If any of the
- * Auto-negotiating interrupt bits are set, the PLipaAutoNeg variable
- * is set true.
- */
-void SkXmAutoNegLipaXmac(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_U16 IStatus) /* Interrupt Status word to analyse */
-{
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PLipaAutoNeg != SK_LIPA_AUTO &&
- (IStatus & (XM_IS_LIPA_RC | XM_IS_RX_PAGE | XM_IS_AND)) != 0) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegLipa: AutoNeg detected on Port %d, IStatus=0x%04x\n",
- Port, IStatus));
- pPrt->PLipaAutoNeg = SK_LIPA_AUTO;
- }
-} /* SkXmAutoNegLipaXmac */
-
-
-/******************************************************************************
- *
- * SkMacAutoNegLipaPhy() - Decides whether Link Partner could do auto-neg
- *
- * This function analyses the PHY status word.
- * If any of the Auto-negotiating bits are set, the PLipaAutoNeg variable
- * is set true.
- */
-void SkMacAutoNegLipaPhy(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_U16 PhyStat) /* PHY Status word to analyse */
-{
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PLipaAutoNeg != SK_LIPA_AUTO &&
- (PhyStat & PHY_ST_AN_OVER) != 0) {
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegLipa: AutoNeg detected on Port %d, PhyStat=0x%04x\n",
- Port, PhyStat));
- pPrt->PLipaAutoNeg = SK_LIPA_AUTO;
- }
-} /* SkMacAutoNegLipaPhy */
-#endif /* SK_DIAG */
-
-
-/******************************************************************************
- *
- * SkXmAutoNegDoneXmac() - Auto-negotiation handling
- *
- * Description:
- * This function handles the auto-negotiation if the Done bit is set.
- *
- * Returns:
- * SK_AND_OK o.k.
- * SK_AND_DUP_CAP Duplex capability error happened
- * SK_AND_OTHER Other error happened
- */
-static int SkXmAutoNegDoneXmac(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U16 ResAb; /* Resolved Ability */
- SK_U16 LPAb; /* Link Partner Ability */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegDoneXmac, Port %d\n",Port));
-
- pPrt = &pAC->GIni.GP[Port];
-
- /* Get PHY parameters */
- SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_AUNE_LP, &LPAb);
- SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_RES_ABI, &ResAb);
-
- if ((LPAb & PHY_X_AN_RFB) != 0) {
- /* At least one of the remote fault bit is set */
- /* Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegFail: Remote fault bit set Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- return(SK_AND_OTHER);
- }
-
- /* Check Duplex mismatch */
- if ((ResAb & (PHY_X_RS_HD | PHY_X_RS_FD)) == PHY_X_RS_FD) {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
- }
- else if ((ResAb & (PHY_X_RS_HD | PHY_X_RS_FD)) == PHY_X_RS_HD) {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
- }
- else {
- /* Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegFail: Duplex mode mismatch Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- return(SK_AND_DUP_CAP);
- }
-
- /* Check PAUSE mismatch */
- /* We are NOT using chapter 4.23 of the Xaqti manual */
- /* We are using IEEE 802.3z/D5.0 Table 37-4 */
- if ((pPrt->PFlowCtrlMode == SK_FLOW_MODE_SYMMETRIC ||
- pPrt->PFlowCtrlMode == SK_FLOW_MODE_SYM_OR_REM) &&
- (LPAb & PHY_X_P_SYM_MD) != 0) {
- /* Symmetric PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
- }
- else if (pPrt->PFlowCtrlMode == SK_FLOW_MODE_SYM_OR_REM &&
- (LPAb & PHY_X_RS_PAUSE) == PHY_X_P_ASYM_MD) {
- /* Enable PAUSE receive, disable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
- }
- else if (pPrt->PFlowCtrlMode == SK_FLOW_MODE_LOC_SEND &&
- (LPAb & PHY_X_RS_PAUSE) == PHY_X_P_BOTH_MD) {
- /* Disable PAUSE receive, enable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
- }
- else {
- /* PAUSE mismatch -> no PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
- }
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
-
- return(SK_AND_OK);
-} /* SkXmAutoNegDoneXmac */
-
-
-/******************************************************************************
- *
- * SkXmAutoNegDoneBcom() - Auto-negotiation handling
- *
- * Description:
- * This function handles the auto-negotiation if the Done bit is set.
- *
- * Returns:
- * SK_AND_OK o.k.
- * SK_AND_DUP_CAP Duplex capability error happened
- * SK_AND_OTHER Other error happened
- */
-static int SkXmAutoNegDoneBcom(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U16 LPAb; /* Link Partner Ability */
- SK_U16 AuxStat; /* Auxiliary Status */
-
-#if 0
-01-Sep-2000 RA;:;:
- SK_U16 ResAb; /* Resolved Ability */
-#endif /* 0 */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegDoneBcom, Port %d\n", Port));
- pPrt = &pAC->GIni.GP[Port];
-
- /* Get PHY parameters */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &LPAb);
-#if 0
-01-Sep-2000 RA;:;:
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);
-#endif /* 0 */
-
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_STAT, &AuxStat);
-
- if ((LPAb & PHY_B_AN_RF) != 0) {
- /* Remote fault bit is set: Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegFail: Remote fault bit set Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- return(SK_AND_OTHER);
- }
-
- /* Check Duplex mismatch */
- if ((AuxStat & PHY_B_AS_AN_RES_MSK) == PHY_B_RES_1000FD) {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
- }
- else if ((AuxStat & PHY_B_AS_AN_RES_MSK) == PHY_B_RES_1000HD) {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
- }
- else {
- /* Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegFail: Duplex mode mismatch Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- return(SK_AND_DUP_CAP);
- }
-
-#if 0
-01-Sep-2000 RA;:;:
- /* Check Master/Slave resolution */
- if ((ResAb & PHY_B_1000S_MSF) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Master/Slave Fault Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- pPrt->PMSStatus = SK_MS_STAT_FAULT;
- return(SK_AND_OTHER);
- }
-
- pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
- SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;
-#endif /* 0 */
-
- /* Check PAUSE mismatch */
- /* We are using IEEE 802.3z/D5.0 Table 37-4 */
- if ((AuxStat & PHY_B_AS_PAUSE_MSK) == PHY_B_AS_PAUSE_MSK) {
- /* Symmetric PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
- }
- else if ((AuxStat & PHY_B_AS_PAUSE_MSK) == PHY_B_AS_PRR) {
- /* Enable PAUSE receive, disable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
- }
- else if ((AuxStat & PHY_B_AS_PAUSE_MSK) == PHY_B_AS_PRT) {
- /* Disable PAUSE receive, enable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
- }
- else {
- /* PAUSE mismatch -> no PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
- }
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
-
- return(SK_AND_OK);
-} /* SkXmAutoNegDoneBcom */
-
-
-/******************************************************************************
- *
- * SkGmAutoNegDoneMarv() - Auto-negotiation handling
- *
- * Description:
- * This function handles the auto-negotiation if the Done bit is set.
- *
- * Returns:
- * SK_AND_OK o.k.
- * SK_AND_DUP_CAP Duplex capability error happened
- * SK_AND_OTHER Other error happened
- */
-static int SkGmAutoNegDoneMarv(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U16 LPAb; /* Link Partner Ability */
- SK_U16 ResAb; /* Resolved Ability */
- SK_U16 AuxStat; /* Auxiliary Status */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegDoneMarv, Port %d\n", Port));
- pPrt = &pAC->GIni.GP[Port];
-
- /* Get PHY parameters */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_AUNE_LP, &LPAb);
-
- if ((LPAb & PHY_M_AN_RF) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegFail: Remote fault bit set Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- return(SK_AND_OTHER);
- }
-
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_1000T_STAT, &ResAb);
-
- /* Check Master/Slave resolution */
- if ((ResAb & PHY_B_1000S_MSF) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Master/Slave Fault Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- pPrt->PMSStatus = SK_MS_STAT_FAULT;
- return(SK_AND_OTHER);
- }
-
- pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
- (SK_U8)SK_MS_STAT_MASTER : (SK_U8)SK_MS_STAT_SLAVE;
-
- /* Read PHY Specific Status */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_PHY_STAT, &AuxStat);
-
- /* Check Speed & Duplex resolved */
- if ((AuxStat & PHY_M_PS_SPDUP_RES) == 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegFail: Speed & Duplex not resolved Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
- return(SK_AND_DUP_CAP);
- }
-
- if ((AuxStat & PHY_M_PS_FULL_DUP) != 0) {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
- }
- else {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
- }
-
- /* Check PAUSE mismatch */
- /* We are using IEEE 802.3z/D5.0 Table 37-4 */
- if ((AuxStat & PHY_M_PS_PAUSE_MSK) == PHY_M_PS_PAUSE_MSK) {
- /* Symmetric PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
- }
- else if ((AuxStat & PHY_M_PS_PAUSE_MSK) == PHY_M_PS_RX_P_EN) {
- /* Enable PAUSE receive, disable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
- }
- else if ((AuxStat & PHY_M_PS_PAUSE_MSK) == PHY_M_PS_TX_P_EN) {
- /* Disable PAUSE receive, enable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
- }
- else {
- /* PAUSE mismatch -> no PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
- }
-
- /* set used link speed */
- switch ((unsigned)(AuxStat & PHY_M_PS_SPEED_MSK)) {
- case (unsigned)PHY_M_PS_SPEED_1000:
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
- break;
- case PHY_M_PS_SPEED_100:
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_100MBPS;
- break;
- default:
- pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_10MBPS;
- }
-
- return(SK_AND_OK);
-} /* SkGmAutoNegDoneMarv */
-
-
-#ifdef OTHER_PHY
-/******************************************************************************
- *
- * SkXmAutoNegDoneLone() - Auto-negotiation handling
- *
- * Description:
- * This function handles the auto-negotiation if the Done bit is set.
- *
- * Returns:
- * SK_AND_OK o.k.
- * SK_AND_DUP_CAP Duplex capability error happened
- * SK_AND_OTHER Other error happened
- */
-static int SkXmAutoNegDoneLone(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U16 ResAb; /* Resolved Ability */
- SK_U16 LPAb; /* Link Partner Ability */
- SK_U16 QuickStat; /* Auxiliary Status */
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegDoneLone, Port %d\n",Port));
- pPrt = &pAC->GIni.GP[Port];
-
- /* Get PHY parameters */
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_AUNE_LP, &LPAb);
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_1000T_STAT, &ResAb);
- SkXmPhyRead(pAC, IoC, Port, PHY_LONE_Q_STAT, &QuickStat);
-
- if ((LPAb & PHY_L_AN_RF) != 0) {
- /* Remote fault bit is set */
- /* Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("AutoNegFail: Remote fault bit set Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- return(SK_AND_OTHER);
- }
-
- /* Check Duplex mismatch */
- if ((QuickStat & PHY_L_QS_DUP_MOD) != 0) {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
- }
- else {
- pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
- }
-
- /* Check Master/Slave resolution */
- if ((ResAb & PHY_L_1000S_MSF) != 0) {
- /* Error */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("Master/Slave Fault Port %d\n", Port));
- pPrt->PAutoNegFail = SK_TRUE;
- pPrt->PMSStatus = SK_MS_STAT_FAULT;
- return(SK_AND_OTHER);
- }
- else if (ResAb & PHY_L_1000S_MSR) {
- pPrt->PMSStatus = SK_MS_STAT_MASTER;
- }
- else {
- pPrt->PMSStatus = SK_MS_STAT_SLAVE;
- }
-
- /* Check PAUSE mismatch */
- /* We are using IEEE 802.3z/D5.0 Table 37-4 */
- /* we must manually resolve the abilities here */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
- switch (pPrt->PFlowCtrlMode) {
- case SK_FLOW_MODE_NONE:
- /* default */
- break;
- case SK_FLOW_MODE_LOC_SEND:
- if ((QuickStat & (PHY_L_QS_PAUSE | PHY_L_QS_AS_PAUSE)) ==
- (PHY_L_QS_PAUSE | PHY_L_QS_AS_PAUSE)) {
- /* Disable PAUSE receive, enable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
- }
- break;
- case SK_FLOW_MODE_SYMMETRIC:
- if ((QuickStat & PHY_L_QS_PAUSE) != 0) {
- /* Symmetric PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
- }
- break;
- case SK_FLOW_MODE_SYM_OR_REM:
- if ((QuickStat & (PHY_L_QS_PAUSE | PHY_L_QS_AS_PAUSE)) ==
- PHY_L_QS_AS_PAUSE) {
- /* Enable PAUSE receive, disable PAUSE transmit */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
- }
- else if ((QuickStat & PHY_L_QS_PAUSE) != 0) {
- /* Symmetric PAUSE */
- pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
- }
- break;
- default:
- SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
- SKERR_HWI_E016MSG);
- }
-
- return(SK_AND_OK);
-} /* SkXmAutoNegDoneLone */
-
-
-/******************************************************************************
- *
- * SkXmAutoNegDoneNat() - Auto-negotiation handling
- *
- * Description:
- * This function handles the auto-negotiation if the Done bit is set.
- *
- * Returns:
- * SK_AND_OK o.k.
- * SK_AND_DUP_CAP Duplex capability error happened
- * SK_AND_OTHER Other error happened
- */
-static int SkXmAutoNegDoneNat(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
-/* todo: National */
- return(SK_AND_OK);
-} /* SkXmAutoNegDoneNat */
-#endif /* OTHER_PHY */
-
-
-/******************************************************************************
- *
- * SkMacAutoNegDone() - Auto-negotiation handling
- *
- * Description: calls the auto-negotiation done routines dep. on board type
- *
- * Returns:
- * SK_AND_OK o.k.
- * SK_AND_DUP_CAP Duplex capability error happened
- * SK_AND_OTHER Other error happened
- */
-int SkMacAutoNegDone(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- int Rtv;
-
- pPrt = &pAC->GIni.GP[Port];
-
- switch (pPrt->PhyType) {
- case SK_PHY_XMAC:
- Rtv = SkXmAutoNegDoneXmac(pAC, IoC, Port);
- break;
- case SK_PHY_BCOM:
- Rtv = SkXmAutoNegDoneBcom(pAC, IoC, Port);
- break;
- case SK_PHY_MARV_COPPER:
- case SK_PHY_MARV_FIBER:
- Rtv = SkGmAutoNegDoneMarv(pAC, IoC, Port);
- break;
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- Rtv = SkXmAutoNegDoneLone(pAC, IoC, Port);
- break;
- case SK_PHY_NAT:
- Rtv = SkXmAutoNegDoneNat(pAC, IoC, Port);
- break;
-#endif /* OTHER_PHY */
- default:
- return(SK_AND_OTHER);
- }
-
- if (Rtv != SK_AND_OK) {
- return(Rtv);
- }
-
- /* We checked everything and may now enable the link */
- pPrt->PAutoNegFail = SK_FALSE;
-
- SkMacRxTxEnable(pAC, IoC, Port);
-
- return(SK_AND_OK);
-} /* SkMacAutoNegDone */
-
-
-/******************************************************************************
- *
- * SkXmSetRxTxEn() - Special Set Rx/Tx Enable and some features in XMAC
- *
- * Description:
- * sets MAC or PHY LoopBack and Duplex Mode in the MMU Command Reg.
- * enables Rx/Tx
- *
- * Returns: N/A
- */
-static void SkXmSetRxTxEn(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-int Para) /* Parameter to set: MAC or PHY LoopBack, Duplex Mode */
-{
- SK_U16 Word;
-
- XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
-
- switch (Para & (SK_MAC_LOOPB_ON | SK_MAC_LOOPB_OFF)) {
- case SK_MAC_LOOPB_ON:
- Word |= XM_MMU_MAC_LB;
- break;
- case SK_MAC_LOOPB_OFF:
- Word &= ~XM_MMU_MAC_LB;
- break;
- }
-
- switch (Para & (SK_PHY_LOOPB_ON | SK_PHY_LOOPB_OFF)) {
- case SK_PHY_LOOPB_ON:
- Word |= XM_MMU_GMII_LOOP;
- break;
- case SK_PHY_LOOPB_OFF:
- Word &= ~XM_MMU_GMII_LOOP;
- break;
- }
-
- switch (Para & (SK_PHY_FULLD_ON | SK_PHY_FULLD_OFF)) {
- case SK_PHY_FULLD_ON:
- Word |= XM_MMU_GMII_FD;
- break;
- case SK_PHY_FULLD_OFF:
- Word &= ~XM_MMU_GMII_FD;
- break;
- }
-
- XM_OUT16(IoC, Port, XM_MMU_CMD, Word | XM_MMU_ENA_RX | XM_MMU_ENA_TX);
-
- /* dummy read to ensure writing */
- XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
-
-} /* SkXmSetRxTxEn */
-
-
-/******************************************************************************
- *
- * SkGmSetRxTxEn() - Special Set Rx/Tx Enable and some features in GMAC
- *
- * Description:
- * sets MAC LoopBack and Duplex Mode in the General Purpose Control Reg.
- * enables Rx/Tx
- *
- * Returns: N/A
- */
-static void SkGmSetRxTxEn(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-int Para) /* Parameter to set: MAC LoopBack, Duplex Mode */
-{
- SK_U16 Ctrl;
-
- GM_IN16(IoC, Port, GM_GP_CTRL, &Ctrl);
-
- switch (Para & (SK_MAC_LOOPB_ON | SK_MAC_LOOPB_OFF)) {
- case SK_MAC_LOOPB_ON:
- Ctrl |= GM_GPCR_LOOP_ENA;
- break;
- case SK_MAC_LOOPB_OFF:
- Ctrl &= ~GM_GPCR_LOOP_ENA;
- break;
- }
-
- switch (Para & (SK_PHY_FULLD_ON | SK_PHY_FULLD_OFF)) {
- case SK_PHY_FULLD_ON:
- Ctrl |= GM_GPCR_DUP_FULL;
- break;
- case SK_PHY_FULLD_OFF:
- Ctrl &= ~GM_GPCR_DUP_FULL;
- break;
- }
-
- GM_OUT16(IoC, Port, GM_GP_CTRL, Ctrl | GM_GPCR_RX_ENA | GM_GPCR_TX_ENA);
-
- /* dummy read to ensure writing */
- GM_IN16(IoC, Port, GM_GP_CTRL, &Ctrl);
-
-} /* SkGmSetRxTxEn */
-
-
-/******************************************************************************
- *
- * SkMacSetRxTxEn() - Special Set Rx/Tx Enable and parameters
- *
- * Description: calls the Special Set Rx/Tx Enable routines dep. on board type
- *
- * Returns: N/A
- */
-void SkMacSetRxTxEn(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-int Para)
-{
- if (pAC->GIni.GIGenesis) {
-
- SkXmSetRxTxEn(pAC, IoC, Port, Para);
- }
- else {
-
- SkGmSetRxTxEn(pAC, IoC, Port, Para);
- }
-
-} /* SkMacSetRxTxEn */
-
-
-/******************************************************************************
- *
- * SkMacRxTxEnable() - Enable Rx/Tx activity if port is up
- *
- * Description: enables Rx/Tx dep. on board type
- *
- * Returns:
- * 0 o.k.
- * != 0 Error happened
- */
-int SkMacRxTxEnable(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U16 Reg; /* 16-bit register value */
- SK_U16 IntMask; /* MAC interrupt mask */
- SK_U16 SWord;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (!pPrt->PHWLinkUp) {
- /* The Hardware link is NOT up */
- return(0);
- }
-
- if ((pPrt->PLinkMode == SK_LMODE_AUTOHALF ||
- pPrt->PLinkMode == SK_LMODE_AUTOFULL ||
- pPrt->PLinkMode == SK_LMODE_AUTOBOTH) &&
- pPrt->PAutoNegFail) {
- /* Auto-negotiation is not done or failed */
- return(0);
- }
-
- if (pAC->GIni.GIGenesis) {
- /* set Duplex Mode and Pause Mode */
- SkXmInitDupMd(pAC, IoC, Port);
-
- SkXmInitPauseMd(pAC, IoC, Port);
-
- /*
- * Initialize the Interrupt Mask Register. Default IRQs are...
- * - Link Asynchronous Event
- * - Link Partner requests config
- * - Auto Negotiation Done
- * - Rx Counter Event Overflow
- * - Tx Counter Event Overflow
- * - Transmit FIFO Underrun
- */
- IntMask = XM_DEF_MSK;
-
-#ifdef DEBUG
- /* add IRQ for Receive FIFO Overflow */
- IntMask &= ~XM_IS_RXF_OV;
-#endif /* DEBUG */
-
- if (pPrt->PhyType != SK_PHY_XMAC) {
- /* disable GP0 interrupt bit */
- IntMask |= XM_IS_INP_ASS;
- }
- XM_OUT16(IoC, Port, XM_IMSK, IntMask);
-
- /* get MMU Command Reg. */
- XM_IN16(IoC, Port, XM_MMU_CMD, &Reg);
-
- if (pPrt->PhyType != SK_PHY_XMAC &&
- (pPrt->PLinkModeStatus == SK_LMODE_STAT_FULL ||
- pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOFULL)) {
- /* set to Full Duplex */
- Reg |= XM_MMU_GMII_FD;
- }
-
- switch (pPrt->PhyType) {
- case SK_PHY_BCOM:
- /*
- * Workaround BCOM Errata (#10523) for all BCom Phys
- * Enable Power Management after link up
- */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &SWord);
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL,
- (SK_U16)(SWord & ~PHY_B_AC_DIS_PM));
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_INT_MASK, PHY_B_DEF_MSK);
- break;
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_INT_ENAB, PHY_L_DEF_MSK);
- break;
- case SK_PHY_NAT:
- /* todo National:
- SkXmPhyWrite(pAC, IoC, Port, PHY_NAT_INT_MASK, PHY_N_DEF_MSK); */
- /* no interrupts possible from National ??? */
- break;
-#endif /* OTHER_PHY */
- }
-
- /* enable Rx/Tx */
- XM_OUT16(IoC, Port, XM_MMU_CMD, Reg | XM_MMU_ENA_RX | XM_MMU_ENA_TX);
- }
- else {
- /*
- * Initialize the Interrupt Mask Register. Default IRQs are...
- * - Rx Counter Event Overflow
- * - Tx Counter Event Overflow
- * - Transmit FIFO Underrun
- */
- IntMask = GMAC_DEF_MSK;
-
-#ifdef DEBUG
- /* add IRQ for Receive FIFO Overrun */
- IntMask |= GM_IS_RX_FF_OR;
-#endif /* DEBUG */
-
- SK_OUT8(IoC, GMAC_IRQ_MSK, (SK_U8)IntMask);
-
- /* get General Purpose Control */
- GM_IN16(IoC, Port, GM_GP_CTRL, &Reg);
-
- if (pPrt->PLinkModeStatus == SK_LMODE_STAT_FULL ||
- pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOFULL) {
- /* set to Full Duplex */
- Reg |= GM_GPCR_DUP_FULL;
- }
-
- /* enable Rx/Tx */
- GM_OUT16(IoC, Port, GM_GP_CTRL, Reg | GM_GPCR_RX_ENA | GM_GPCR_TX_ENA);
-
-#ifndef VCPU
- /* Enable all PHY interrupts */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK);
-#endif /* VCPU */
- }
-
- return(0);
-
-} /* SkMacRxTxEnable */
-
-
-/******************************************************************************
- *
- * SkMacRxTxDisable() - Disable Receiver and Transmitter
- *
- * Description: disables Rx/Tx dep. on board type
- *
- * Returns: N/A
- */
-void SkMacRxTxDisable(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U16 Word;
-
- if (pAC->GIni.GIGenesis) {
-
- XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
-
- XM_OUT16(IoC, Port, XM_MMU_CMD, Word & ~(XM_MMU_ENA_RX | XM_MMU_ENA_TX));
-
- /* dummy read to ensure writing */
- XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
- }
- else {
-
- GM_IN16(IoC, Port, GM_GP_CTRL, &Word);
-
- GM_OUT16(IoC, Port, GM_GP_CTRL, Word & ~(GM_GPCR_RX_ENA | GM_GPCR_TX_ENA));
-
- /* dummy read to ensure writing */
- GM_IN16(IoC, Port, GM_GP_CTRL, &Word);
- }
-} /* SkMacRxTxDisable */
-
-
-/******************************************************************************
- *
- * SkMacIrqDisable() - Disable IRQ from MAC
- *
- * Description: sets the IRQ-mask to disable IRQ dep. on board type
- *
- * Returns: N/A
- */
-void SkMacIrqDisable(
-SK_AC *pAC, /* Adapter Context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U16 Word;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pAC->GIni.GIGenesis) {
-
- /* disable all XMAC IRQs */
- XM_OUT16(IoC, Port, XM_IMSK, 0xffff);
-
- /* Disable all PHY interrupts */
- switch (pPrt->PhyType) {
- case SK_PHY_BCOM:
- /* Make sure that PHY is initialized */
- if (pPrt->PState != SK_PRT_RESET) {
- /* NOT allowed if BCOM is in RESET state */
- /* Workaround BCOM Errata (#10523) all BCom */
- /* Disable Power Management if link is down */
- SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &Word);
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL,
- (SK_U16)(Word | PHY_B_AC_DIS_PM));
- SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_INT_MASK, 0xffff);
- }
- break;
-#ifdef OTHER_PHY
- case SK_PHY_LONE:
- SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_INT_ENAB, 0);
- break;
- case SK_PHY_NAT:
- /* todo: National
- SkXmPhyWrite(pAC, IoC, Port, PHY_NAT_INT_MASK, 0xffff); */
- break;
-#endif /* OTHER_PHY */
- }
- }
- else {
- /* disable all GMAC IRQs */
- SK_OUT8(IoC, GMAC_IRQ_MSK, 0);
-
-#ifndef VCPU
- /* Disable all PHY interrupts */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_INT_MASK, 0);
-#endif /* VCPU */
- }
-} /* SkMacIrqDisable */
-
-
-#ifdef SK_DIAG
-/******************************************************************************
- *
- * SkXmSendCont() - Enable / Disable Send Continuous Mode
- *
- * Description: enable / disable Send Continuous Mode on XMAC
- *
- * Returns:
- * nothing
- */
-void SkXmSendCont(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL Enable) /* Enable / Disable */
-{
- SK_U32 MdReg;
-
- XM_IN32(IoC, Port, XM_MODE, &MdReg);
-
- if (Enable) {
- MdReg |= XM_MD_TX_CONT;
- }
- else {
- MdReg &= ~XM_MD_TX_CONT;
- }
- /* setup Mode Register */
- XM_OUT32(IoC, Port, XM_MODE, MdReg);
-
-} /* SkXmSendCont*/
-
-/******************************************************************************
- *
- * SkMacTimeStamp() - Enable / Disable Time Stamp
- *
- * Description: enable / disable Time Stamp generation for Rx packets
- *
- * Returns:
- * nothing
- */
-void SkMacTimeStamp(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL Enable) /* Enable / Disable */
-{
- SK_U32 MdReg;
- SK_U8 TimeCtrl;
-
- if (pAC->GIni.GIGenesis) {
-
- XM_IN32(IoC, Port, XM_MODE, &MdReg);
-
- if (Enable) {
- MdReg |= XM_MD_ATS;
- }
- else {
- MdReg &= ~XM_MD_ATS;
- }
- /* setup Mode Register */
- XM_OUT32(IoC, Port, XM_MODE, MdReg);
- }
- else {
- if (Enable) {
- TimeCtrl = GMT_ST_START | GMT_ST_CLR_IRQ;
- }
- else {
- TimeCtrl = GMT_ST_STOP | GMT_ST_CLR_IRQ;
- }
- /* Start/Stop Time Stamp Timer */
- SK_OUT8(pAC, GMAC_TI_ST_CTRL, TimeCtrl);
- }
-} /* SkMacTimeStamp*/
-
-#else /* SK_DIAG */
-
-/******************************************************************************
- *
- * SkXmIrq() - Interrupt Service Routine
- *
- * Description: services an Interrupt Request of the XMAC
- *
- * Note:
- * With an external PHY, some interrupt bits are not meaningfull any more:
- * - LinkAsyncEvent (bit #14) XM_IS_LNK_AE
- * - LinkPartnerReqConfig (bit #10) XM_IS_LIPA_RC
- * - Page Received (bit #9) XM_IS_RX_PAGE
- * - NextPageLoadedForXmt (bit #8) XM_IS_TX_PAGE
- * - AutoNegDone (bit #7) XM_IS_AND
- * Also probably not valid any more is the GP0 input bit:
- * - GPRegisterBit0set XM_IS_INP_ASS
- *
- * Returns:
- * nothing
- */
-void SkXmIrq(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_EVPARA Para;
- SK_U16 IStatus; /* Interrupt status read from the XMAC */
- SK_U16 IStatus2;
-
- pPrt = &pAC->GIni.GP[Port];
-
- XM_IN16(IoC, Port, XM_ISRC, &IStatus);
-
- /* LinkPartner Auto-negable? */
- if (pPrt->PhyType == SK_PHY_XMAC) {
- SkXmAutoNegLipaXmac(pAC, IoC, Port, IStatus);
- }
- else {
- /* mask bits that are not used with ext. PHY */
- IStatus &= ~(XM_IS_LNK_AE | XM_IS_LIPA_RC |
- XM_IS_RX_PAGE | XM_IS_TX_PAGE |
- XM_IS_AND | XM_IS_INP_ASS);
- }
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("XmacIrq Port %d Isr 0x%04x\n", Port, IStatus));
-
- if (!pPrt->PHWLinkUp) {
- /* Spurious XMAC interrupt */
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("SkXmIrq: spurious interrupt on Port %d\n", Port));
- return;
- }
-
- if ((IStatus & XM_IS_INP_ASS) != 0) {
- /* Reread ISR Register if link is not in sync */
- XM_IN16(IoC, Port, XM_ISRC, &IStatus2);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("SkXmIrq: Link async. Double check Port %d 0x%04x 0x%04x\n",
- Port, IStatus, IStatus2));
- IStatus &= ~XM_IS_INP_ASS;
- IStatus |= IStatus2;
- }
-
- if ((IStatus & XM_IS_LNK_AE) != 0) {
- /* not used, GP0 is used instead */
- }
-
- if ((IStatus & XM_IS_TX_ABORT) != 0) {
- /* not used */
- }
-
- if ((IStatus & XM_IS_FRC_INT) != 0) {
- /* not used, use ASIC IRQ instead if needed */
- }
-
- if ((IStatus & (XM_IS_INP_ASS | XM_IS_LIPA_RC | XM_IS_RX_PAGE)) != 0) {
- SkHWLinkDown(pAC, IoC, Port);
-
- /* Signal to RLMT */
- Para.Para32[0] = (SK_U32)Port;
- SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
-
- /* Start workaround Errata #2 timer */
- SkTimerStart(pAC, IoC, &pPrt->PWaTimer, SK_WA_INA_TIME,
- SKGE_HWAC, SK_HWEV_WATIM, Para);
- }
-
- if ((IStatus & XM_IS_RX_PAGE) != 0) {
- /* not used */
- }
-
- if ((IStatus & XM_IS_TX_PAGE) != 0) {
- /* not used */
- }
-
- if ((IStatus & XM_IS_AND) != 0) {
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("SkXmIrq: AND on link that is up Port %d\n", Port));
- }
-
- if ((IStatus & XM_IS_TSC_OV) != 0) {
- /* not used */
- }
-
- /* Combined Tx & Rx Counter Overflow SIRQ Event */
- if ((IStatus & (XM_IS_RXC_OV | XM_IS_TXC_OV)) != 0) {
- Para.Para32[0] = (SK_U32)Port;
- Para.Para32[1] = (SK_U32)IStatus;
- SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_SIRQ_OVERFLOW, Para);
- }
-
- if ((IStatus & XM_IS_RXF_OV) != 0) {
- /* normal situation -> no effect */
-#ifdef DEBUG
- pPrt->PRxOverCnt++;
-#endif /* DEBUG */
- }
-
- if ((IStatus & XM_IS_TXF_UR) != 0) {
- /* may NOT happen -> error log */
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E020, SKERR_SIRQ_E020MSG);
- }
-
- if ((IStatus & XM_IS_TX_COMP) != 0) {
- /* not served here */
- }
-
- if ((IStatus & XM_IS_RX_COMP) != 0) {
- /* not served here */
- }
-} /* SkXmIrq */
-
-
-/******************************************************************************
- *
- * SkGmIrq() - Interrupt Service Routine
- *
- * Description: services an Interrupt Request of the GMAC
- *
- * Note:
- *
- * Returns:
- * nothing
- */
-void SkGmIrq(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_EVPARA Para;
- SK_U8 IStatus; /* Interrupt status */
-
- pPrt = &pAC->GIni.GP[Port];
-
- SK_IN8(IoC, GMAC_IRQ_SRC, &IStatus);
-
- /* LinkPartner Auto-negable? */
- SkMacAutoNegLipaPhy(pAC, IoC, Port, IStatus);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
- ("GmacIrq Port %d Isr 0x%04x\n", Port, IStatus));
-
- /* Combined Tx & Rx Counter Overflow SIRQ Event */
- if (IStatus & (GM_IS_RX_CO_OV | GM_IS_TX_CO_OV)) {
- /* these IRQs will be cleared by reading GMACs register */
- Para.Para32[0] = (SK_U32)Port;
- Para.Para32[1] = (SK_U32)IStatus;
- SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_SIRQ_OVERFLOW, Para);
- }
-
- if (IStatus & GM_IS_RX_FF_OR) {
- /* clear GMAC Rx FIFO Overrun IRQ */
- SK_OUT8(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), (SK_U8)GMF_CLI_RX_FO);
-#ifdef DEBUG
- pPrt->PRxOverCnt++;
-#endif /* DEBUG */
- }
-
- if (IStatus & GM_IS_TX_FF_UR) {
- /* clear GMAC Tx FIFO Underrun IRQ */
- SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U8)GMF_CLI_TX_FU);
- /* may NOT happen -> error log */
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E020, SKERR_SIRQ_E020MSG);
- }
-
- if (IStatus & GM_IS_TX_COMPL) {
- /* not served here */
- }
-
- if (IStatus & GM_IS_RX_COMPL) {
- /* not served here */
- }
-} /* SkGmIrq */
-
-/******************************************************************************
- *
- * SkMacIrq() - Interrupt Service Routine for MAC
- *
- * Description: calls the Interrupt Service Routine dep. on board type
- *
- * Returns:
- * nothing
- */
-void SkMacIrq(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port) /* Port Index (MAC_1 + n) */
-{
-
- if (pAC->GIni.GIGenesis) {
- /* IRQ from XMAC */
- SkXmIrq(pAC, IoC, Port);
- }
- else {
- /* IRQ from GMAC */
- SkGmIrq(pAC, IoC, Port);
- }
-} /* SkMacIrq */
-
-#endif /* !SK_DIAG */
-
-/******************************************************************************
- *
- * SkXmUpdateStats() - Force the XMAC to output the current statistic
- *
- * Description:
- * The XMAC holds its statistic internally. To obtain the current
- * values a command must be sent so that the statistic data will
- * be written to a predefined memory area on the adapter.
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkXmUpdateStats(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port) /* Port Index (MAC_1 + n) */
-{
- SK_GEPORT *pPrt;
- SK_U16 StatReg;
- int WaitIndex;
-
- pPrt = &pAC->GIni.GP[Port];
- WaitIndex = 0;
-
- /* Send an update command to XMAC specified */
- XM_OUT16(IoC, Port, XM_STAT_CMD, XM_SC_SNP_TXC | XM_SC_SNP_RXC);
-
- /*
- * It is an auto-clearing register. If the command bits
- * went to zero again, the statistics are transferred.
- * Normally the command should be executed immediately.
- * But just to be sure we execute a loop.
- */
- do {
-
- XM_IN16(IoC, Port, XM_STAT_CMD, &StatReg);
-
- if (++WaitIndex > 10) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_HWI_E021, SKERR_HWI_E021MSG);
-
- return(1);
- }
- } while ((StatReg & (XM_SC_SNP_TXC | XM_SC_SNP_RXC)) != 0);
-
- return(0);
-} /* SkXmUpdateStats */
-
-/******************************************************************************
- *
- * SkGmUpdateStats() - Force the GMAC to output the current statistic
- *
- * Description:
- * Empty function for GMAC. Statistic data is accessible in direct way.
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkGmUpdateStats(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port) /* Port Index (MAC_1 + n) */
-{
- return(0);
-}
-
-/******************************************************************************
- *
- * SkXmMacStatistic() - Get XMAC counter value
- *
- * Description:
- * Gets the 32bit counter value. Except for the octet counters
- * the lower 32bit are counted in hardware and the upper 32bit
- * must be counted in software by monitoring counter overflow interrupts.
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkXmMacStatistic(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port, /* Port Index (MAC_1 + n) */
-SK_U16 StatAddr, /* MIB counter base address */
-SK_U32 *pVal) /* ptr to return statistic value */
-{
- if ((StatAddr < XM_TXF_OK) || (StatAddr > XM_RXF_MAX_SZ)) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E022, SKERR_HWI_E022MSG);
-
- return(1);
- }
-
- XM_IN32(IoC, Port, StatAddr, pVal);
-
- return(0);
-} /* SkXmMacStatistic */
-
-/******************************************************************************
- *
- * SkGmMacStatistic() - Get GMAC counter value
- *
- * Description:
- * Gets the 32bit counter value. Except for the octet counters
- * the lower 32bit are counted in hardware and the upper 32bit
- * must be counted in software by monitoring counter overflow interrupts.
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkGmMacStatistic(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port, /* Port Index (MAC_1 + n) */
-SK_U16 StatAddr, /* MIB counter base address */
-SK_U32 *pVal) /* ptr to return statistic value */
-{
-
- if ((StatAddr < GM_RXF_UC_OK) || (StatAddr > GM_TXE_FIFO_UR)) {
-
- SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E022, SKERR_HWI_E022MSG);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("SkGmMacStat: wrong MIB counter 0x%04X\n", StatAddr));
- return(1);
- }
-
- GM_IN32(IoC, Port, StatAddr, pVal);
-
- return(0);
-} /* SkGmMacStatistic */
-
-/******************************************************************************
- *
- * SkXmResetCounter() - Clear MAC statistic counter
- *
- * Description:
- * Force the XMAC to clear its statistic counter.
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkXmResetCounter(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port) /* Port Index (MAC_1 + n) */
-{
- XM_OUT16(IoC, Port, XM_STAT_CMD, XM_SC_CLR_RXC | XM_SC_CLR_TXC);
- /* Clear two times according to Errata #3 */
- XM_OUT16(IoC, Port, XM_STAT_CMD, XM_SC_CLR_RXC | XM_SC_CLR_TXC);
-
- return(0);
-} /* SkXmResetCounter */
-
-/******************************************************************************
- *
- * SkGmResetCounter() - Clear MAC statistic counter
- *
- * Description:
- * Force GMAC to clear its statistic counter.
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkGmResetCounter(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port) /* Port Index (MAC_1 + n) */
-{
- SK_U16 Reg; /* Phy Address Register */
- SK_U16 Word;
- int i;
-
- GM_IN16(IoC, Port, GM_PHY_ADDR, &Reg);
-
-#ifndef VCPU
- /* set MIB Clear Counter Mode */
- GM_OUT16(IoC, Port, GM_PHY_ADDR, Reg | GM_PAR_MIB_CLR);
-
- /* read all MIB Counters with Clear Mode set */
- for (i = 0; i < GM_MIB_CNT_SIZE; i++) {
- /* the reset is performed only when the lower 16 bits are read */
- GM_IN16(IoC, Port, GM_MIB_CNT_BASE + 8*i, &Word);
- }
-
- /* clear MIB Clear Counter Mode */
- GM_OUT16(IoC, Port, GM_PHY_ADDR, Reg);
-#endif /* !VCPU */
-
- return(0);
-} /* SkGmResetCounter */
-
-/******************************************************************************
- *
- * SkXmOverflowStatus() - Gets the status of counter overflow interrupt
- *
- * Description:
- * Checks the source causing an counter overflow interrupt. On success the
- * resulting counter overflow status is written to <pStatus>, whereas the
- * upper dword stores the XMAC ReceiveCounterEvent register and the lower
- * dword the XMAC TransmitCounterEvent register.
- *
- * Note:
- * For XMAC the interrupt source is a self-clearing register, so the source
- * must be checked only once. SIRQ module does another check to be sure
- * that no interrupt get lost during process time.
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkXmOverflowStatus(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port, /* Port Index (MAC_1 + n) */
-SK_U16 IStatus, /* Interupt Status from MAC */
-SK_U64 *pStatus) /* ptr for return overflow status value */
-{
- SK_U64 Status; /* Overflow status */
- SK_U32 RegVal;
-
- Status = 0;
-
- if ((IStatus & XM_IS_RXC_OV) != 0) {
-
- XM_IN32(IoC, Port, XM_RX_CNT_EV, &RegVal);
- Status |= (SK_U64)RegVal << 32;
- }
-
- if ((IStatus & XM_IS_TXC_OV) != 0) {
-
- XM_IN32(IoC, Port, XM_TX_CNT_EV, &RegVal);
- Status |= (SK_U64)RegVal;
- }
-
- *pStatus = Status;
-
- return(0);
-} /* SkXmOverflowStatus */
-
-
-/******************************************************************************
- *
- * SkGmOverflowStatus() - Gets the status of counter overflow interrupt
- *
- * Description:
- * Checks the source causing an counter overflow interrupt. On success the
- * resulting counter overflow status is written to <pStatus>, whereas the
- * the following bit coding is used:
- * 63:56 - unused
- * 55:48 - TxRx interrupt register bit7:0
- * 32:47 - Rx interrupt register
- * 31:24 - unused
- * 23:16 - TxRx interrupt register bit15:8
- * 15:0 - Tx interrupt register
- *
- * Returns:
- * 0: success
- * 1: something went wrong
- */
-int SkGmOverflowStatus(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-unsigned int Port, /* Port Index (MAC_1 + n) */
-SK_U16 IStatus, /* Interupt Status from MAC */
-SK_U64 *pStatus) /* ptr for return overflow status value */
-{
- SK_U64 Status; /* Overflow status */
- SK_U16 RegVal;
-
- Status = 0;
-
- if ((IStatus & GM_IS_RX_CO_OV) != 0) {
- /* this register is self-clearing after read */
- GM_IN16(IoC, Port, GM_RX_IRQ_SRC, &RegVal);
- Status |= (SK_U64)RegVal << 32;
- }
-
- if ((IStatus & GM_IS_TX_CO_OV) != 0) {
- /* this register is self-clearing after read */
- GM_IN16(IoC, Port, GM_TX_IRQ_SRC, &RegVal);
- Status |= (SK_U64)RegVal;
- }
-
- /* this register is self-clearing after read */
- GM_IN16(IoC, Port, GM_TR_IRQ_SRC, &RegVal);
- /* Rx overflow interrupt register bits (LoByte)*/
- Status |= (SK_U64)((SK_U8)RegVal) << 48;
- /* Tx overflow interrupt register bits (HiByte)*/
- Status |= (SK_U64)(RegVal >> 8) << 16;
-
- *pStatus = Status;
-
- return(0);
-} /* SkGmOverflowStatus */
-
-/******************************************************************************
- *
- * SkGmCableDiagStatus() - Starts / Gets status of cable diagnostic test
- *
- * Description:
- * starts the cable diagnostic test if 'StartTest' is true
- * gets the results if 'StartTest' is true
- *
- * NOTE: this test is meaningful only when link is down
- *
- * Returns:
- * 0: success
- * 1: no YUKON copper
- * 2: test in progress
- */
-int SkGmCableDiagStatus(
-SK_AC *pAC, /* adapter context */
-SK_IOC IoC, /* IO context */
-int Port, /* Port Index (MAC_1 + n) */
-SK_BOOL StartTest) /* flag for start / get result */
-{
- int i;
- SK_U16 RegVal;
- SK_GEPORT *pPrt;
-
- pPrt = &pAC->GIni.GP[Port];
-
- if (pPrt->PhyType != SK_PHY_MARV_COPPER) {
-
- return(1);
- }
-
- if (StartTest) {
- /* only start the cable test */
- if ((pPrt->PhyId1 & PHY_I1_REV_MSK) < 4) {
- /* apply TDR workaround from Marvell */
- SkGmPhyWrite(pAC, IoC, Port, 29, 0x001e);
-
- SkGmPhyWrite(pAC, IoC, Port, 30, 0xcc00);
- SkGmPhyWrite(pAC, IoC, Port, 30, 0xc800);
- SkGmPhyWrite(pAC, IoC, Port, 30, 0xc400);
- SkGmPhyWrite(pAC, IoC, Port, 30, 0xc000);
- SkGmPhyWrite(pAC, IoC, Port, 30, 0xc100);
- }
-
- /* set address to 0 for MDI[0] */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_ADR, 0);
-
- /* Read Cable Diagnostic Reg */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CABLE_DIAG, &RegVal);
-
- /* start Cable Diagnostic Test */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_CABLE_DIAG,
- (SK_U16)(RegVal | PHY_M_CABD_ENA_TEST));
-
- return(0);
- }
-
- /* Read Cable Diagnostic Reg */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CABLE_DIAG, &RegVal);
-
- SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
- ("PHY Cable Diag.=0x%04X\n", RegVal));
-
- if ((RegVal & PHY_M_CABD_ENA_TEST) != 0) {
- /* test is running */
- return(2);
- }
-
- /* get the test results */
- for (i = 0; i < 4; i++) {
- /* set address to i for MDI[i] */
- SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_ADR, (SK_U16)i);
-
- /* get Cable Diagnostic values */
- SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CABLE_DIAG, &RegVal);
-
- pPrt->PMdiPairLen[i] = (SK_U8)(RegVal & PHY_M_CABD_DIST_MSK);
-
- pPrt->PMdiPairSts[i] = (SK_U8)((RegVal & PHY_M_CABD_STAT_MSK) >> 13);
- }
-
- return(0);
-} /* SkGmCableDiagStatus */
-
-/* End of file */
+/******************************************************************************
+ *
+ * Name: skxmac2.c
+ * Project: GEnesis, PCI Gigabit Ethernet Adapter
+ * Version: $Revision: 1.1.1.1 $
+ * Date: $Date: 2009/03/25 22:22:09 $
+ * Purpose: Contains functions to initialize the MACs and PHYs
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * (C)Copyright 1998-2003 SysKonnect GmbH.
+ *
+ * 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.
+ *
+ * The information in this file is provided "AS IS" without warranty.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * History:
+ *
+ * $Log: skxmac2.c,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:09 kenagy
+ * no message
+ *
+ * Revision 1.91 2003/02/05 15:09:34 rschmidt
+ * Removed setting of 'Collision Test'-bit in SkGmInitPhyMarv().
+ * Disabled auto-update for speed, duplex and flow-control when
+ * auto-negotiation is not enabled (Bug Id #10766).
+ * Editorial changes.
+ *
+ * Revision 1.90 2003/01/29 13:35:19 rschmidt
+ * Increment Rx FIFO Overflow counter only in DEBUG-mode.
+ * Corrected define for blinking active LED.
+ *
+ * Revision 1.89 2003/01/28 16:37:45 rschmidt
+ * Changed init for blinking active LED
+ *
+ * Revision 1.88 2003/01/28 10:09:38 rschmidt
+ * Added debug outputs in SkGmInitMac().
+ * Added customized init of LED registers in SkGmInitPhyMarv(),
+ * for blinking active LED (#ifdef ACT_LED_BLINK) and
+ * for normal duplex LED (#ifdef DUP_LED_NORMAL).
+ * Editorial changes.
+ *
+ * Revision 1.87 2002/12/10 14:39:05 rschmidt
+ * Improved initialization of GPHY in SkGmInitPhyMarv().
+ * Editorial changes.
+ *
+ * Revision 1.86 2002/12/09 15:01:12 rschmidt
+ * Added setup of Ext. PHY Specific Ctrl Reg (downshift feature).
+ *
+ * Revision 1.85 2002/12/05 14:09:16 rschmidt
+ * Improved avoiding endless loop in SkGmPhyWrite(), SkGmPhyWrite().
+ * Added additional advertising for 10Base-T when 100Base-T is selected.
+ * Added case SK_PHY_MARV_FIBER for YUKON Fiber adapter.
+ * Editorial changes.
+ *
+ * Revision 1.84 2002/11/15 12:50:09 rschmidt
+ * Changed SkGmCableDiagStatus() when getting results.
+ *
+ * Revision 1.83 2002/11/13 10:28:29 rschmidt
+ * Added some typecasts to avoid compiler warnings.
+ *
+ * Revision 1.82 2002/11/13 09:20:46 rschmidt
+ * Replaced for(..) with do {} while (...) in SkXmUpdateStats().
+ * Replaced 2 macros GM_IN16() with 1 GM_IN32() in SkGmMacStatistic().
+ * Added SkGmCableDiagStatus() for Virtual Cable Test (VCT).
+ * Editorial changes.
+ *
+ * Revision 1.81 2002/10/28 14:28:08 rschmidt
+ * Changed MAC address setup for GMAC in SkGmInitMac().
+ * Optimized handling of counter overflow IRQ in SkGmOverflowStatus().
+ * Editorial changes.
+ *
+ * Revision 1.80 2002/10/14 15:29:44 rschmidt
+ * Corrected disabling of all PHY IRQs.
+ * Added WA for deviation #16 (address used for pause packets).
+ * Set Pause Mode in SkMacRxTxEnable() only for Genesis.
+ * Added IRQ and counter for Receive FIFO Overflow in DEBUG-mode.
+ * SkXmTimeStamp() replaced by SkMacTimeStamp().
+ * Added clearing of GMAC Tx FIFO Underrun IRQ in SkGmIrq().
+ * Editorial changes.
+ *
+ * Revision 1.79 2002/10/10 15:55:36 mkarl
+ * changes for PLinkSpeedUsed
+ *
+ * Revision 1.78 2002/09/12 09:39:51 rwahl
+ * Removed deactivate code for SIRQ overflow event separate for TX/RX.
+ *
+ * Revision 1.77 2002/09/09 12:26:37 mkarl
+ * added handling for Yukon to SkXmTimeStamp
+ *
+ * Revision 1.76 2002/08/21 16:41:16 rschmidt
+ * Added bit GPC_ENA_XC (Enable MDI crossover) in HWCFG_MODE.
+ * Added forced speed settings in SkGmInitPhyMarv().
+ * Added settings of full/half duplex capabilities for YUKON Fiber.
+ * Editorial changes.
+ *
+ * Revision 1.75 2002/08/16 15:12:01 rschmidt
+ * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis.
+ * Added function SkMacHashing() for ADDR-Module.
+ * Removed functions SkXmClrSrcCheck(), SkXmClrHashAddr() (calls replaced
+ * with macros).
+ * Removed functions SkGmGetMuxConfig().
+ * Added HWCFG_MODE init for YUKON Fiber.
+ * Changed initialization of GPHY in SkGmInitPhyMarv().
+ * Changed check of parameter in SkXmMacStatistic().
+ * Editorial changes.
+ *
+ * Revision 1.74 2002/08/12 14:00:17 rschmidt
+ * Replaced usage of Broadcom PHY Ids with defines.
+ * Corrected error messages in SkGmMacStatistic().
+ * Made SkMacPromiscMode() public for ADDR-Modul.
+ * Editorial changes.
+ *
+ * Revision 1.73 2002/08/08 16:26:24 rschmidt
+ * Improved reset sequence for YUKON in SkGmHardRst() and SkGmInitMac().
+ * Replaced XMAC Rx High Watermark init value with SK_XM_RX_HI_WM.
+ * Editorial changes.
+ *
+ * Revision 1.72 2002/07/24 15:11:19 rschmidt
+ * Fixed wrong placement of parenthesis.
+ * Editorial changes.
+ *
+ * Revision 1.71 2002/07/23 16:05:18 rschmidt
+ * Added global functions for PHY: SkGePhyRead(), SkGePhyWrite().
+ * Fixed Tx Counter Overflow IRQ (Bug ID #10730).
+ * Editorial changes.
+ *
+ * Revision 1.70 2002/07/18 14:27:27 rwahl
+ * Fixed syntax error.
+ *
+ * Revision 1.69 2002/07/17 17:08:47 rwahl
+ * Fixed check in SkXmMacStatistic().
+ *
+ * Revision 1.68 2002/07/16 07:35:24 rwahl
+ * Removed check for cleared mib counter in SkGmResetCounter().
+ *
+ * Revision 1.67 2002/07/15 18:35:56 rwahl
+ * Added SkXmUpdateStats(), SkGmUpdateStats(), SkXmMacStatistic(),
+ * SkGmMacStatistic(), SkXmResetCounter(), SkGmResetCounter(),
+ * SkXmOverflowStatus(), SkGmOverflowStatus().
+ * Changes to SkXmIrq() & SkGmIrq(): Combined SIRQ Overflow for both
+ * RX & TX.
+ * Changes to SkGmInitMac(): call to SkGmResetCounter().
+ * Editorial changes.
+ *
+ * Revision 1.66 2002/07/15 15:59:30 rschmidt
+ * Added PHY Address in SkXmPhyRead(), SkXmPhyWrite().
+ * Added MIB Clear Counter in SkGmInitMac().
+ * Added Duplex and Flow-Control settings.
+ * Reset all Multicast filtering Hash reg. in SkGmInitMac().
+ * Added new function: SkGmGetMuxConfig().
+ * Editorial changes.
+ *
+ * Revision 1.65 2002/06/10 09:35:39 rschmidt
+ * Replaced C++ comments (//).
+ * Added #define VCPU around VCPUwaitTime.
+ * Editorial changes.
+ *
+ * Revision 1.64 2002/06/05 08:41:10 rschmidt
+ * Added function for XMAC2: SkXmTimeStamp().
+ * Added function for YUKON: SkGmSetRxCmd().
+ * Changed SkGmInitMac() resp. SkGmHardRst().
+ * Fixed wrong variable in SkXmAutoNegLipaXmac() (debug mode).
+ * SkXmRxTxEnable() replaced by SkMacRxTxEnable().
+ * Editorial changes.
+ *
+ * Revision 1.63 2002/04/25 13:04:44 rschmidt
+ * Changes for handling YUKON.
+ * Use of #ifdef OTHER_PHY to eliminate code for unused Phy types.
+ * Macros for XMAC PHY access PHY_READ(), PHY_WRITE() replaced
+ * by functions SkXmPhyRead(), SkXmPhyWrite();
+ * Removed use of PRxCmd to setup XMAC.
+ * Added define PHY_B_AS_PAUSE_MSK for BCom Pause Res.
+ * Added setting of XM_RX_DIS_CEXT in SkXmInitMac().
+ * Removed status parameter from MAC IRQ handler SkMacIrq(),
+ * SkXmIrq() and SkGmIrq().
+ * SkXmAutoNegLipa...() for ext. Phy replaced by SkMacAutoNegLipaPhy().
+ * Added SkMac...() functions to handle both XMAC and GMAC.
+ * Added functions for YUKON: SkGmHardRst(), SkGmSoftRst(),
+ * SkGmSetRxTxEn(), SkGmIrq(), SkGmInitMac(), SkGmInitPhyMarv(),
+ * SkGmAutoNegDoneMarv(), SkGmPhyRead(), SkGmPhyWrite().
+ * Changes for V-CPU support.
+ * Editorial changes.
+ *
+ * Revision 1.62 2001/08/06 09:50:14 rschmidt
+ * Workaround BCOM Errata #1 for the C5 type.
+ * Editorial changes.
+ *
+ * Revision 1.61 2001/02/09 15:40:59 rassmann
+ * Editorial changes.
+ *
+ * Revision 1.60 2001/02/07 15:02:01 cgoos
+ * Added workaround for Fujitsu switch link down.
+ *
+ * Revision 1.59 2001/01/10 09:38:06 cgoos
+ * Fixed Broadcom C0/A1 Id check for workaround.
+ *
+ * Revision 1.58 2000/11/29 11:30:38 cgoos
+ * Changed DEBUG sections with NW output to xDEBUG
+ *
+ * Revision 1.57 2000/11/27 12:40:40 rassmann
+ * Suppressing preamble after first access to BCom, not before (#10556).
+ *
+ * Revision 1.56 2000/11/09 12:32:48 rassmann
+ * Renamed variables.
+ *
+ * Revision 1.55 2000/11/09 11:30:10 rassmann
+ * WA: Waiting after releasing reset until BCom chip is accessible.
+ *
+ * Revision 1.54 2000/10/02 14:10:27 rassmann
+ * Reading BCOM PHY after releasing reset until it returns a valid value.
+ *
+ * Revision 1.53 2000/07/27 12:22:11 gklug
+ * fix: possible endless loop in XmHardRst.
+ *
+ * Revision 1.52 2000/05/22 08:48:31 malthoff
+ * Fix: #10523 errata valid for all BCOM PHYs.
+ *
+ * Revision 1.51 2000/05/17 12:52:18 malthoff
+ * Fixes BCom link errata (#10523).
+ *
+ * Revision 1.50 1999/11/22 13:40:14 cgoos
+ * Changed license header to GPL.
+ *
+ * Revision 1.49 1999/11/22 08:12:13 malthoff
+ * Add workaround for power consumption feature of BCom C0 chip.
+ *
+ * Revision 1.48 1999/11/16 08:39:01 malthoff
+ * Fix: MDIO preamble suppression is port dependent.
+ *
+ * Revision 1.47 1999/08/27 08:55:35 malthoff
+ * 1000BT: Optimizing MDIO transfer by oppressing MDIO preamble.
+ *
+ * Revision 1.46 1999/08/13 11:01:12 malthoff
+ * Fix for 1000BT: pFlowCtrlMode was not set correctly.
+ *
+ * Revision 1.45 1999/08/12 19:18:28 malthoff
+ * 1000BT Fixes: Do not owerwrite XM_MMU_CMD.
+ * Do not execute BCOM A1 workaround for B1 chips.
+ * Fix pause frame setting.
+ * Always set PHY_B_AC_TX_TST in PHY_BCOM_AUX_CTRL.
+ *
+ * Revision 1.44 1999/08/03 15:23:48 cgoos
+ * Fixed setting of PHY interrupt mask in half duplex mode.
+ *
+ * Revision 1.43 1999/08/03 15:22:17 cgoos
+ * Added some debug output.
+ * Disabled XMac GP0 interrupt for external PHYs.
+ *
+ * Revision 1.42 1999/08/02 08:39:23 malthoff
+ * BCOM PHY: TX LED: To get the mono flop behaviour it is required
+ * to set the LED Traffic Mode bit in PHY_BCOM_P_EXT_CTRL.
+ *
+ * Revision 1.41 1999/07/30 06:54:31 malthoff
+ * Add temp. workarounds for the BCOM Phy revision A1.
+ *
+ * Revision 1.40 1999/06/01 07:43:26 cgoos
+ * Changed Link Mode Status in SkXmAutoNegDone... from FULL/HALF to
+ * AUTOFULL/AUTOHALF.
+ *
+ * Revision 1.39 1999/05/19 07:29:51 cgoos
+ * Changes for 1000Base-T.
+ *
+ * Revision 1.38 1999/04/08 14:35:10 malthoff
+ * Add code for enabling signal detect. Enabling signal detect is disabled.
+ *
+ * Revision 1.37 1999/03/12 13:42:54 malthoff
+ * Add: Jumbo Frame Support.
+ * Add: Receive modes SK_LENERR_OK_ON/OFF and
+ * SK_BIG_PK_OK_ON/OFF in SkXmSetRxCmd().
+ *
+ * Revision 1.36 1999/03/08 10:10:55 gklug
+ * fix: AutoSensing did switch to next mode even if LiPa indicated offline
+ *
+ * Revision 1.35 1999/02/22 15:16:41 malthoff
+ * Remove some compiler warnings.
+ *
+ * Revision 1.34 1999/01/22 09:19:59 gklug
+ * fix: Init DupMode and InitPauseMd are now called in RxTxEnable
+ *
+ * Revision 1.33 1998/12/11 15:19:11 gklug
+ * chg: lipa autoneg stati
+ * chg: debug messages
+ * chg: do NOT use spurious XmIrq
+ *
+ * Revision 1.32 1998/12/10 11:08:44 malthoff
+ * bug fix: pAC has been used for IOs in SkXmHardRst().
+ * SkXmInitPhy() is also called for the Diag in SkXmInitMac().
+ *
+ * Revision 1.31 1998/12/10 10:39:11 gklug
+ * fix: do 4 RESETS of the XMAC at the beginning
+ * fix: dummy read interrupt source register BEFORE initializing the Phy
+ * add: debug messages
+ * fix: Linkpartners autoneg capability cannot be shown by TX_PAGE interrupt
+ *
+ * Revision 1.30 1998/12/07 12:18:32 gklug
+ * add: refinement of autosense mode: take into account the autoneg cap of LiPa
+ *
+ * Revision 1.29 1998/12/07 07:12:29 gklug
+ * fix: if page is received the link is down.
+ *
+ * Revision 1.28 1998/12/01 10:12:47 gklug
+ * chg: if spurious IRQ from XMAC encountered, save it
+ *
+ * Revision 1.27 1998/11/26 07:33:38 gklug
+ * add: InitPhy call is now in XmInit function
+ *
+ * Revision 1.26 1998/11/18 13:38:24 malthoff
+ * 'Imsk' is also unused in SkXmAutoNegDone.
+ *
+ * Revision 1.25 1998/11/18 13:28:01 malthoff
+ * Remove unused variable 'Reg' in SkXmAutoNegDone().
+ *
+ * Revision 1.24 1998/11/18 13:18:45 gklug
+ * add: workaround for xmac errata #1
+ * add: detect Link Down also when Link partner requested config
+ * chg: XMIrq is only used when link is up
+ *
+ * Revision 1.23 1998/11/04 07:07:04 cgoos
+ * Added function SkXmRxTxEnable.
+ *
+ * Revision 1.22 1998/10/30 07:35:54 gklug
+ * fix: serve LinkDown interrupt when link is already down
+ *
+ * Revision 1.21 1998/10/29 15:32:03 gklug
+ * fix: Link Down signaling
+ *
+ * Revision 1.20 1998/10/29 11:17:27 gklug
+ * fix: AutoNegDone bug
+ *
+ * Revision 1.19 1998/10/29 10:14:43 malthoff
+ * Add endainesss comment for reading/writing MAC addresses.
+ *
+ * Revision 1.18 1998/10/28 07:48:55 cgoos
+ * Fix: ASS somtimes signaled although link is up.
+ *
+ * Revision 1.17 1998/10/26 07:55:39 malthoff
+ * Fix in SkXmInitPauseMd(): Pause Mode
+ * was disabled and not enabled.
+ * Fix in SkXmAutoNegDone(): Checking Mode bits
+ * always failed, becaues of some missing braces.
+ *
+ * Revision 1.16 1998/10/22 09:46:52 gklug
+ * fix SysKonnectFileId typo
+ *
+ * Revision 1.15 1998/10/21 05:51:37 gklug
+ * add: para DoLoop to InitPhy function for loopback set-up
+ *
+ * Revision 1.14 1998/10/16 10:59:23 malthoff
+ * Remove Lint warning for dummy reads.
+ *
+ * Revision 1.13 1998/10/15 14:01:20 malthoff
+ * Fix: SkXmAutoNegDone() is (int) but does not return a value.
+ *
+ * Revision 1.12 1998/10/14 14:45:04 malthoff
+ * Remove SKERR_SIRQ_E0xx and SKERR_SIRQ_E0xxMSG by
+ * SKERR_HWI_Exx and SKERR_HWI_E0xxMSG to be independent
+ * from the Sirq module.
+ *
+ * Revision 1.11 1998/10/14 13:59:01 gklug
+ * add: InitPhy function
+ *
+ * Revision 1.10 1998/10/14 11:20:57 malthoff
+ * Make SkXmAutoNegDone() public, because it's
+ * used in diagnostics, too.
+ * The Link Up event to the RLMT is issued in SkXmIrq().
+ * SkXmIrq() is not available in diagnostics.
+ * Use PHY_READ when reading PHY registers.
+ *
+ * Revision 1.9 1998/10/14 05:50:10 cgoos
+ * Added definition for Para.
+ *
+ * Revision 1.8 1998/10/14 05:41:28 gklug
+ * add: Xmac IRQ
+ * add: auto-negotiation done function
+ *
+ * Revision 1.7 1998/10/09 06:55:20 malthoff
+ * The configuration of the XMACs Tx Request Threshold
+ * depends from the drivers port usage now. The port
+ * usage is configured in GIPortUsage.
+ *
+ * Revision 1.6 1998/10/05 07:48:00 malthoff
+ * minor changes
+ *
+ * Revision 1.5 1998/10/01 07:03:54 gklug
+ * add: dummy function for XMAC ISR
+ *
+ * Revision 1.4 1998/09/30 12:37:44 malthoff
+ * Add SkXmSetRxCmd() and related code.
+ *
+ * Revision 1.3 1998/09/28 13:26:40 malthoff
+ * Add SkXmInitMac(), SkXmInitDupMd(), and SkXmInitPauseMd()
+ *
+ * Revision 1.2 1998/09/16 14:34:21 malthoff
+ * Add SkXmClrExactAddr(), SkXmClrSrcCheck(),
+ * SkXmClrHashAddr(), SkXmFlushTxFifo(),
+ * SkXmFlushRxFifo(), and SkXmHardRst().
+ * Finish Coding of SkXmSoftRst().
+ * The sources may be compiled now.
+ *
+ * Revision 1.1 1998/09/04 10:05:56 malthoff
+ * Created.
+ *
+ *
+ ******************************************************************************/
+
+#include <config.h>
+
+#include "h/skdrv1st.h"
+#include "h/skdrv2nd.h"
+
+/* typedefs *******************************************************************/
+
+/* BCOM PHY magic pattern list */
+typedef struct s_PhyHack {
+ int PhyReg; /* Phy register */
+ SK_U16 PhyVal; /* Value to write */
+} BCOM_HACK;
+
+/* local variables ************************************************************/
+static const char SysKonnectFileId[] =
+ "@(#)$Id: skxmac2.c,v 1.1.1.1 2009/03/25 22:22:09 kenagy Exp $ (C) SK ";
+
+BCOM_HACK BcomRegA1Hack[] = {
+ { 0x18, 0x0c20 }, { 0x17, 0x0012 }, { 0x15, 0x1104 }, { 0x17, 0x0013 },
+ { 0x15, 0x0404 }, { 0x17, 0x8006 }, { 0x15, 0x0132 }, { 0x17, 0x8006 },
+ { 0x15, 0x0232 }, { 0x17, 0x800D }, { 0x15, 0x000F }, { 0x18, 0x0420 },
+ { 0, 0 }
+};
+BCOM_HACK BcomRegC0Hack[] = {
+ { 0x18, 0x0c20 }, { 0x17, 0x0012 }, { 0x15, 0x1204 }, { 0x17, 0x0013 },
+ { 0x15, 0x0A04 }, { 0x18, 0x0420 },
+ { 0, 0 }
+};
+
+/* function prototypes ********************************************************/
+static void SkXmInitPhyXmac(SK_AC*, SK_IOC, int, SK_BOOL);
+static void SkXmInitPhyBcom(SK_AC*, SK_IOC, int, SK_BOOL);
+static void SkGmInitPhyMarv(SK_AC*, SK_IOC, int, SK_BOOL);
+static int SkXmAutoNegDoneXmac(SK_AC*, SK_IOC, int);
+static int SkXmAutoNegDoneBcom(SK_AC*, SK_IOC, int);
+static int SkGmAutoNegDoneMarv(SK_AC*, SK_IOC, int);
+#ifdef OTHER_PHY
+static void SkXmInitPhyLone(SK_AC*, SK_IOC, int, SK_BOOL);
+static void SkXmInitPhyNat (SK_AC*, SK_IOC, int, SK_BOOL);
+static int SkXmAutoNegDoneLone(SK_AC*, SK_IOC, int);
+static int SkXmAutoNegDoneNat (SK_AC*, SK_IOC, int);
+#endif /* OTHER_PHY */
+
+
+/******************************************************************************
+ *
+ * SkXmPhyRead() - Read from XMAC PHY register
+ *
+ * Description: reads a 16-bit word from XMAC PHY or ext. PHY
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmPhyRead(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Port, /* Port Index (MAC_1 + n) */
+int PhyReg, /* Register Address (Offset) */
+SK_U16 *pVal) /* Pointer to Value */
+{
+ SK_U16 Mmu;
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* write the PHY register's address */
+ XM_OUT16(IoC, Port, XM_PHY_ADDR, PhyReg | pPrt->PhyAddr);
+
+ /* get the PHY register's value */
+ XM_IN16(IoC, Port, XM_PHY_DATA, pVal);
+
+ if (pPrt->PhyType != SK_PHY_XMAC) {
+ do {
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Mmu);
+ /* wait until 'Ready' is set */
+ } while ((Mmu & XM_MMU_PHY_RDY) == 0);
+
+ /* get the PHY register's value */
+ XM_IN16(IoC, Port, XM_PHY_DATA, pVal);
+ }
+} /* SkXmPhyRead */
+
+
+/******************************************************************************
+ *
+ * SkXmPhyWrite() - Write to XMAC PHY register
+ *
+ * Description: writes a 16-bit word to XMAC PHY or ext. PHY
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmPhyWrite(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Port, /* Port Index (MAC_1 + n) */
+int PhyReg, /* Register Address (Offset) */
+SK_U16 Val) /* Value */
+{
+ SK_U16 Mmu;
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PhyType != SK_PHY_XMAC) {
+ do {
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Mmu);
+ /* wait until 'Busy' is cleared */
+ } while ((Mmu & XM_MMU_PHY_BUSY) != 0);
+ }
+
+ /* write the PHY register's address */
+ XM_OUT16(IoC, Port, XM_PHY_ADDR, PhyReg | pPrt->PhyAddr);
+
+ /* write the PHY register's value */
+ XM_OUT16(IoC, Port, XM_PHY_DATA, Val);
+
+ if (pPrt->PhyType != SK_PHY_XMAC) {
+ do {
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Mmu);
+ /* wait until 'Busy' is cleared */
+ } while ((Mmu & XM_MMU_PHY_BUSY) != 0);
+ }
+} /* SkXmPhyWrite */
+
+
+/******************************************************************************
+ *
+ * SkGmPhyRead() - Read from GPHY register
+ *
+ * Description: reads a 16-bit word from GPHY through MDIO
+ *
+ * Returns:
+ * nothing
+ */
+void SkGmPhyRead(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Port, /* Port Index (MAC_1 + n) */
+int PhyReg, /* Register Address (Offset) */
+SK_U16 *pVal) /* Pointer to Value */
+{
+ SK_U16 Ctrl;
+ SK_GEPORT *pPrt;
+#ifdef VCPU
+ u_long SimCyle;
+ u_long SimLowTime;
+
+ VCPUgetTime(&SimCyle, &SimLowTime);
+ VCPUprintf(0, "SkGmPhyRead(%u), SimCyle=%u, SimLowTime=%u\n",
+ PhyReg, SimCyle, SimLowTime);
+#endif /* VCPU */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* set PHY-Register offset and 'Read' OpCode (= 1) */
+ *pVal = (SK_U16)(GM_SMI_CT_PHY_AD(pPrt->PhyAddr) |
+ GM_SMI_CT_REG_AD(PhyReg) | GM_SMI_CT_OP_RD);
+
+ GM_OUT16(IoC, Port, GM_SMI_CTRL, *pVal);
+
+ GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
+
+ /* additional check for MDC/MDIO activity */
+ if ((Ctrl & GM_SMI_CT_BUSY) == 0) {
+ *pVal = 0;
+ return;
+ }
+
+ *pVal |= GM_SMI_CT_BUSY;
+
+ do {
+#ifdef VCPU
+ VCPUwaitTime(1000);
+#endif /* VCPU */
+
+ GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
+
+ /* wait until 'ReadValid' is set */
+ } while (Ctrl == *pVal);
+
+ /* get the PHY register's value */
+ GM_IN16(IoC, Port, GM_SMI_DATA, pVal);
+
+#ifdef VCPU
+ VCPUgetTime(&SimCyle, &SimLowTime);
+ VCPUprintf(0, "VCPUgetTime(), SimCyle=%u, SimLowTime=%u\n",
+ SimCyle, SimLowTime);
+#endif /* VCPU */
+} /* SkGmPhyRead */
+
+
+/******************************************************************************
+ *
+ * SkGmPhyWrite() - Write to GPHY register
+ *
+ * Description: writes a 16-bit word to GPHY through MDIO
+ *
+ * Returns:
+ * nothing
+ */
+void SkGmPhyWrite(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Port, /* Port Index (MAC_1 + n) */
+int PhyReg, /* Register Address (Offset) */
+SK_U16 Val) /* Value */
+{
+ SK_U16 Ctrl;
+ SK_GEPORT *pPrt;
+#ifdef VCPU
+ SK_U32 DWord;
+ u_long SimCyle;
+ u_long SimLowTime;
+
+ VCPUgetTime(&SimCyle, &SimLowTime);
+ VCPUprintf(0, "SkGmPhyWrite(Reg=%u, Val=0x%04x), SimCyle=%u, SimLowTime=%u\n",
+ PhyReg, Val, SimCyle, SimLowTime);
+#endif /* VCPU */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* write the PHY register's value */
+ GM_OUT16(IoC, Port, GM_SMI_DATA, Val);
+
+ /* set PHY-Register offset and 'Write' OpCode (= 0) */
+ Val = GM_SMI_CT_PHY_AD(pPrt->PhyAddr) | GM_SMI_CT_REG_AD(PhyReg);
+
+ GM_OUT16(IoC, Port, GM_SMI_CTRL, Val);
+
+ GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
+
+ /* additional check for MDC/MDIO activity */
+ if ((Ctrl & GM_SMI_CT_BUSY) == 0) {
+ return;
+ }
+
+ Val |= GM_SMI_CT_BUSY;
+
+ do {
+#ifdef VCPU
+ /* read Timer value */
+ SK_IN32(IoC, B2_TI_VAL, &DWord);
+
+ VCPUwaitTime(1000);
+#endif /* VCPU */
+
+ GM_IN16(IoC, Port, GM_SMI_CTRL, &Ctrl);
+
+ /* wait until 'Busy' is cleared */
+ } while (Ctrl == Val);
+
+#ifdef VCPU
+ VCPUgetTime(&SimCyle, &SimLowTime);
+ VCPUprintf(0, "VCPUgetTime(), SimCyle=%u, SimLowTime=%u\n",
+ SimCyle, SimLowTime);
+#endif /* VCPU */
+} /* SkGmPhyWrite */
+
+
+/******************************************************************************
+ *
+ * SkGePhyRead() - Read from PHY register
+ *
+ * Description: calls a read PHY routine dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkGePhyRead(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Port, /* Port Index (MAC_1 + n) */
+int PhyReg, /* Register Address (Offset) */
+SK_U16 *pVal) /* Pointer to Value */
+{
+ void (*r_func)(SK_AC *pAC, SK_IOC IoC, int Port, int Reg, SK_U16 *pVal);
+
+ if (pAC->GIni.GIGenesis) {
+ r_func = SkXmPhyRead;
+ }
+ else {
+ r_func = SkGmPhyRead;
+ }
+
+ r_func(pAC, IoC, Port, PhyReg, pVal);
+} /* SkGePhyRead */
+
+
+/******************************************************************************
+ *
+ * SkGePhyWrite() - Write to PHY register
+ *
+ * Description: calls a write PHY routine dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkGePhyWrite(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* I/O Context */
+int Port, /* Port Index (MAC_1 + n) */
+int PhyReg, /* Register Address (Offset) */
+SK_U16 Val) /* Value */
+{
+ void (*w_func)(SK_AC *pAC, SK_IOC IoC, int Port, int Reg, SK_U16 Val);
+
+ if (pAC->GIni.GIGenesis) {
+ w_func = SkXmPhyWrite;
+ }
+ else {
+ w_func = SkGmPhyWrite;
+ }
+
+ w_func(pAC, IoC, Port, PhyReg, Val);
+} /* SkGePhyWrite */
+
+
+/******************************************************************************
+ *
+ * SkMacPromiscMode() - Enable / Disable Promiscuous Mode
+ *
+ * Description:
+ * enables / disables promiscuous mode by setting Mode Register (XMAC) or
+ * Receive Control Register (GMAC) dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacPromiscMode(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL Enable) /* Enable / Disable */
+{
+ SK_U16 RcReg;
+ SK_U32 MdReg;
+
+ if (pAC->GIni.GIGenesis) {
+
+ XM_IN32(IoC, Port, XM_MODE, &MdReg);
+ /* enable or disable promiscuous mode */
+ if (Enable) {
+ MdReg |= XM_MD_ENA_PROM;
+ }
+ else {
+ MdReg &= ~XM_MD_ENA_PROM;
+ }
+ /* setup Mode Register */
+ XM_OUT32(IoC, Port, XM_MODE, MdReg);
+ }
+ else {
+
+ GM_IN16(IoC, Port, GM_RX_CTRL, &RcReg);
+
+ /* enable or disable unicast and multicast filtering */
+ if (Enable) {
+ RcReg &= ~(GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
+ }
+ else {
+ RcReg |= (GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
+ }
+ /* setup Receive Control Register */
+ GM_OUT16(IoC, Port, GM_RX_CTRL, RcReg);
+ }
+} /* SkMacPromiscMode*/
+
+
+/******************************************************************************
+ *
+ * SkMacHashing() - Enable / Disable Hashing
+ *
+ * Description:
+ * enables / disables hashing by setting Mode Register (XMAC) or
+ * Receive Control Register (GMAC) dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacHashing(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL Enable) /* Enable / Disable */
+{
+ SK_U16 RcReg;
+ SK_U32 MdReg;
+
+ if (pAC->GIni.GIGenesis) {
+
+ XM_IN32(IoC, Port, XM_MODE, &MdReg);
+ /* enable or disable hashing */
+ if (Enable) {
+ MdReg |= XM_MD_ENA_HASH;
+ }
+ else {
+ MdReg &= ~XM_MD_ENA_HASH;
+ }
+ /* setup Mode Register */
+ XM_OUT32(IoC, Port, XM_MODE, MdReg);
+ }
+ else {
+
+ GM_IN16(IoC, Port, GM_RX_CTRL, &RcReg);
+
+ /* enable or disable multicast filtering */
+ if (Enable) {
+ RcReg |= GM_RXCR_MCF_ENA;
+ }
+ else {
+ RcReg &= ~GM_RXCR_MCF_ENA;
+ }
+ /* setup Receive Control Register */
+ GM_OUT16(IoC, Port, GM_RX_CTRL, RcReg);
+ }
+} /* SkMacHashing*/
+
+
+#ifdef SK_DIAG
+/******************************************************************************
+ *
+ * SkXmSetRxCmd() - Modify the value of the XMAC's Rx Command Register
+ *
+ * Description:
+ * The features
+ * - FCS stripping, SK_STRIP_FCS_ON/OFF
+ * - pad byte stripping, SK_STRIP_PAD_ON/OFF
+ * - don't set XMR_FS_ERR in status SK_LENERR_OK_ON/OFF
+ * for inrange length error frames
+ * - don't set XMR_FS_ERR in status SK_BIG_PK_OK_ON/OFF
+ * for frames > 1514 bytes
+ * - enable Rx of own packets SK_SELF_RX_ON/OFF
+ *
+ * for incoming packets may be enabled/disabled by this function.
+ * Additional modes may be added later.
+ * Multiple modes can be enabled/disabled at the same time.
+ * The new configuration is written to the Rx Command register immediately.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkXmSetRxCmd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+int Mode) /* Mode is SK_STRIP_FCS_ON/OFF, SK_STRIP_PAD_ON/OFF,
+ SK_LENERR_OK_ON/OFF, or SK_BIG_PK_OK_ON/OFF */
+{
+ SK_U16 OldRxCmd;
+ SK_U16 RxCmd;
+
+ XM_IN16(IoC, Port, XM_RX_CMD, &OldRxCmd);
+
+ RxCmd = OldRxCmd;
+
+ switch (Mode & (SK_STRIP_FCS_ON | SK_STRIP_FCS_OFF)) {
+ case SK_STRIP_FCS_ON:
+ RxCmd |= XM_RX_STRIP_FCS;
+ break;
+ case SK_STRIP_FCS_OFF:
+ RxCmd &= ~XM_RX_STRIP_FCS;
+ break;
+ }
+
+ switch (Mode & (SK_STRIP_PAD_ON | SK_STRIP_PAD_OFF)) {
+ case SK_STRIP_PAD_ON:
+ RxCmd |= XM_RX_STRIP_PAD;
+ break;
+ case SK_STRIP_PAD_OFF:
+ RxCmd &= ~XM_RX_STRIP_PAD;
+ break;
+ }
+
+ switch (Mode & (SK_LENERR_OK_ON | SK_LENERR_OK_OFF)) {
+ case SK_LENERR_OK_ON:
+ RxCmd |= XM_RX_LENERR_OK;
+ break;
+ case SK_LENERR_OK_OFF:
+ RxCmd &= ~XM_RX_LENERR_OK;
+ break;
+ }
+
+ switch (Mode & (SK_BIG_PK_OK_ON | SK_BIG_PK_OK_OFF)) {
+ case SK_BIG_PK_OK_ON:
+ RxCmd |= XM_RX_BIG_PK_OK;
+ break;
+ case SK_BIG_PK_OK_OFF:
+ RxCmd &= ~XM_RX_BIG_PK_OK;
+ break;
+ }
+
+ switch (Mode & (SK_SELF_RX_ON | SK_SELF_RX_OFF)) {
+ case SK_SELF_RX_ON:
+ RxCmd |= XM_RX_SELF_RX;
+ break;
+ case SK_SELF_RX_OFF:
+ RxCmd &= ~XM_RX_SELF_RX;
+ break;
+ }
+
+ /* Write the new mode to the Rx command register if required */
+ if (OldRxCmd != RxCmd) {
+ XM_OUT16(IoC, Port, XM_RX_CMD, RxCmd);
+ }
+} /* SkXmSetRxCmd */
+
+
+/******************************************************************************
+ *
+ * SkGmSetRxCmd() - Modify the value of the GMAC's Rx Control Register
+ *
+ * Description:
+ * The features
+ * - FCS (CRC) stripping, SK_STRIP_FCS_ON/OFF
+ * - don't set GMR_FS_LONG_ERR SK_BIG_PK_OK_ON/OFF
+ * for frames > 1514 bytes
+ * - enable Rx of own packets SK_SELF_RX_ON/OFF
+ *
+ * for incoming packets may be enabled/disabled by this function.
+ * Additional modes may be added later.
+ * Multiple modes can be enabled/disabled at the same time.
+ * The new configuration is written to the Rx Command register immediately.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGmSetRxCmd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+int Mode) /* Mode is SK_STRIP_FCS_ON/OFF, SK_STRIP_PAD_ON/OFF,
+ SK_LENERR_OK_ON/OFF, or SK_BIG_PK_OK_ON/OFF */
+{
+ SK_U16 OldRxCmd;
+ SK_U16 RxCmd;
+
+ if ((Mode & (SK_STRIP_FCS_ON | SK_STRIP_FCS_OFF)) != 0) {
+
+ GM_IN16(IoC, Port, GM_RX_CTRL, &OldRxCmd);
+
+ RxCmd = OldRxCmd;
+
+ if ((Mode & SK_STRIP_FCS_ON) != 0) {
+ RxCmd |= GM_RXCR_CRC_DIS;
+ }
+ else {
+ RxCmd &= ~GM_RXCR_CRC_DIS;
+ }
+ /* Write the new mode to the Rx control register if required */
+ if (OldRxCmd != RxCmd) {
+ GM_OUT16(IoC, Port, GM_RX_CTRL, RxCmd);
+ }
+ }
+
+ if ((Mode & (SK_BIG_PK_OK_ON | SK_BIG_PK_OK_OFF)) != 0) {
+
+ GM_IN16(IoC, Port, GM_SERIAL_MODE, &OldRxCmd);
+
+ RxCmd = OldRxCmd;
+
+ if ((Mode & SK_BIG_PK_OK_ON) != 0) {
+ RxCmd |= GM_SMOD_JUMBO_ENA;
+ }
+ else {
+ RxCmd &= ~GM_SMOD_JUMBO_ENA;
+ }
+ /* Write the new mode to the Rx control register if required */
+ if (OldRxCmd != RxCmd) {
+ GM_OUT16(IoC, Port, GM_SERIAL_MODE, RxCmd);
+ }
+ }
+} /* SkGmSetRxCmd */
+
+
+/******************************************************************************
+ *
+ * SkMacSetRxCmd() - Modify the value of the MAC's Rx Control Register
+ *
+ * Description: modifies the MAC's Rx Control reg. dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacSetRxCmd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+int Mode) /* Rx Mode */
+{
+ if (pAC->GIni.GIGenesis) {
+
+ SkXmSetRxCmd(pAC, IoC, Port, Mode);
+ }
+ else {
+
+ SkGmSetRxCmd(pAC, IoC, Port, Mode);
+ }
+} /* SkMacSetRxCmd */
+
+
+/******************************************************************************
+ *
+ * SkMacCrcGener() - Enable / Disable CRC Generation
+ *
+ * Description: enables / disables CRC generation dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacCrcGener(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL Enable) /* Enable / Disable */
+{
+ SK_U16 Word;
+
+ if (pAC->GIni.GIGenesis) {
+
+ XM_IN16(IoC, Port, XM_TX_CMD, &Word);
+
+ if (Enable) {
+ Word &= ~XM_TX_NO_CRC;
+ }
+ else {
+ Word |= XM_TX_NO_CRC;
+ }
+ /* setup Tx Command Register */
+ XM_OUT16(pAC, Port, XM_TX_CMD, Word);
+ }
+ else {
+
+ GM_IN16(IoC, Port, GM_TX_CTRL, &Word);
+
+ if (Enable) {
+ Word &= ~GM_TXCR_CRC_DIS;
+ }
+ else {
+ Word |= GM_TXCR_CRC_DIS;
+ }
+ /* setup Tx Control Register */
+ GM_OUT16(IoC, Port, GM_TX_CTRL, Word);
+ }
+} /* SkMacCrcGener*/
+
+#endif /* SK_DIAG */
+
+
+/******************************************************************************
+ *
+ * SkXmClrExactAddr() - Clear Exact Match Address Registers
+ *
+ * Description:
+ * All Exact Match Address registers of the XMAC 'Port' will be
+ * cleared starting with 'StartNum' up to (and including) the
+ * Exact Match address number of 'StopNum'.
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmClrExactAddr(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+int StartNum, /* Begin with this Address Register Index (0..15) */
+int StopNum) /* Stop after finished with this Register Idx (0..15) */
+{
+ int i;
+ SK_U16 ZeroAddr[3] = {0x0000, 0x0000, 0x0000};
+
+ if ((unsigned)StartNum > 15 || (unsigned)StopNum > 15 ||
+ StartNum > StopNum) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E001, SKERR_HWI_E001MSG);
+ return;
+ }
+
+ for (i = StartNum; i <= StopNum; i++) {
+ XM_OUTADDR(IoC, Port, XM_EXM(i), &ZeroAddr[0]);
+ }
+} /* SkXmClrExactAddr */
+
+
+/******************************************************************************
+ *
+ * SkMacFlushTxFifo() - Flush the MAC's transmit FIFO
+ *
+ * Description:
+ * Flush the transmit FIFO of the MAC specified by the index 'Port'
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacFlushTxFifo(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U32 MdReg;
+
+ if (pAC->GIni.GIGenesis) {
+
+ XM_IN32(IoC, Port, XM_MODE, &MdReg);
+
+ XM_OUT32(IoC, Port, XM_MODE, MdReg | XM_MD_FTF);
+ }
+ else {
+ /* no way to flush the FIFO we have to issue a reset */
+ /* TBD */
+ }
+} /* SkMacFlushTxFifo */
+
+
+/******************************************************************************
+ *
+ * SkMacFlushRxFifo() - Flush the MAC's receive FIFO
+ *
+ * Description:
+ * Flush the receive FIFO of the MAC specified by the index 'Port'
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacFlushRxFifo(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U32 MdReg;
+
+ if (pAC->GIni.GIGenesis) {
+
+ XM_IN32(IoC, Port, XM_MODE, &MdReg);
+
+ XM_OUT32(IoC, Port, XM_MODE, MdReg | XM_MD_FRF);
+ }
+ else {
+ /* no way to flush the FIFO we have to issue a reset */
+ /* TBD */
+ }
+} /* SkMacFlushRxFifo */
+
+
+/******************************************************************************
+ *
+ * SkXmSoftRst() - Do a XMAC software reset
+ *
+ * Description:
+ * The PHY registers should not be destroyed during this
+ * kind of software reset. Therefore the XMAC Software Reset
+ * (XM_GP_RES_MAC bit in XM_GP_PORT) must not be used!
+ *
+ * The software reset is done by
+ * - disabling the Rx and Tx state machine,
+ * - resetting the statistics module,
+ * - clear all other significant XMAC Mode,
+ * Command, and Control Registers
+ * - clearing the Hash Register and the
+ * Exact Match Address registers, and
+ * - flushing the XMAC's Rx and Tx FIFOs.
+ *
+ * Note:
+ * Another requirement when stopping the XMAC is to
+ * avoid sending corrupted frames on the network.
+ * Disabling the Tx state machine will NOT interrupt
+ * the currently transmitted frame. But we must take care
+ * that the Tx FIFO is cleared AFTER the current frame
+ * is complete sent to the network.
+ *
+ * It takes about 12ns to send a frame with 1538 bytes.
+ * One PCI clock goes at least 15ns (66MHz). Therefore
+ * after reading XM_GP_PORT back, we are sure that the
+ * transmitter is disabled AND idle. And this means
+ * we may flush the transmit FIFO now.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkXmSoftRst(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U16 ZeroAddr[4] = {0x0000, 0x0000, 0x0000, 0x0000};
+
+ /* reset the statistics module */
+ XM_OUT32(IoC, Port, XM_GP_PORT, XM_GP_RES_STAT);
+
+ /* disable all XMAC IRQs */
+ XM_OUT16(IoC, Port, XM_IMSK, 0xffff);
+
+ XM_OUT32(IoC, Port, XM_MODE, 0); /* clear Mode Reg */
+
+ XM_OUT16(IoC, Port, XM_TX_CMD, 0); /* reset TX CMD Reg */
+ XM_OUT16(IoC, Port, XM_RX_CMD, 0); /* reset RX CMD Reg */
+
+ /* disable all PHY IRQs */
+ switch (pAC->GIni.GP[Port].PhyType) {
+ case SK_PHY_BCOM:
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_INT_MASK, 0xffff);
+ break;
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_INT_ENAB, 0);
+ break;
+ case SK_PHY_NAT:
+ /* todo: National
+ SkXmPhyWrite(pAC, IoC, Port, PHY_NAT_INT_MASK, 0xffff); */
+ break;
+#endif /* OTHER_PHY */
+ }
+
+ /* clear the Hash Register */
+ XM_OUTHASH(IoC, Port, XM_HSM, &ZeroAddr);
+
+ /* clear the Exact Match Address registers */
+ SkXmClrExactAddr(pAC, IoC, Port, 0, 15);
+
+ /* clear the Source Check Address registers */
+ XM_OUTHASH(IoC, Port, XM_SRC_CHK, &ZeroAddr);
+
+} /* SkXmSoftRst */
+
+
+/******************************************************************************
+ *
+ * SkXmHardRst() - Do a XMAC hardware reset
+ *
+ * Description:
+ * The XMAC of the specified 'Port' and all connected devices
+ * (PHY and SERDES) will receive a reset signal on its *Reset pins.
+ * External PHYs must be reset be clearing a bit in the GPIO register
+ * (Timing requirements: Broadcom: 400ns, Level One: none, National: 80ns).
+ *
+ * ATTENTION:
+ * It is absolutely necessary to reset the SW_RST Bit first
+ * before calling this function.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkXmHardRst(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U32 Reg;
+ int i;
+ int TOut;
+ SK_U16 Word;
+
+ for (i = 0; i < 4; i++) {
+ /* TX_MFF_CTRL1 has 32 bits, but only the lowest 16 bits are used */
+ SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_CLR_MAC_RST);
+
+ TOut = 0;
+ do {
+ if (TOut++ > 10000) {
+ /*
+ * Adapter seems to be in RESET state.
+ * Registers cannot be written.
+ */
+ return;
+ }
+
+ SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_SET_MAC_RST);
+
+ SK_IN16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), &Word);
+
+ } while ((Word & MFF_SET_MAC_RST) == 0);
+ }
+
+ /* For external PHYs there must be special handling */
+ if (pAC->GIni.GP[Port].PhyType != SK_PHY_XMAC) {
+ /* reset external PHY */
+ SK_IN32(IoC, B2_GP_IO, &Reg);
+ if (Port == 0) {
+ Reg |= GP_DIR_0; /* set to output */
+ Reg &= ~GP_IO_0;
+ }
+ else {
+ Reg |= GP_DIR_2; /* set to output */
+ Reg &= ~GP_IO_2;
+ }
+ SK_OUT32(IoC, B2_GP_IO, Reg);
+
+ /* short delay */
+ SK_IN32(IoC, B2_GP_IO, &Reg);
+ }
+
+} /* SkXmHardRst */
+
+
+/******************************************************************************
+ *
+ * SkGmSoftRst() - Do a GMAC software reset
+ *
+ * Description:
+ * The GPHY registers should not be destroyed during this
+ * kind of software reset.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGmSoftRst(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U16 EmptyHash[4] = {0x0000, 0x0000, 0x0000, 0x0000};
+ SK_U16 RxCtrl;
+
+ /* reset the statistics module */
+
+ /* disable all GMAC IRQs */
+ SK_OUT8(IoC, GMAC_IRQ_MSK, 0);
+
+ /* disable all PHY IRQs */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_INT_MASK, 0);
+
+ /* clear the Hash Register */
+ GM_OUTHASH(IoC, Port, GM_MC_ADDR_H1, EmptyHash);
+
+ /* Enable Unicast and Multicast filtering */
+ GM_IN16(IoC, Port, GM_RX_CTRL, &RxCtrl);
+
+ GM_OUT16(IoC, Port, GM_RX_CTRL,
+ RxCtrl | GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
+
+} /* SkGmSoftRst */
+
+
+/******************************************************************************
+ *
+ * SkGmHardRst() - Do a GMAC hardware reset
+ *
+ * Description:
+ *
+ * ATTENTION:
+ * It is absolutely necessary to reset the SW_RST Bit first
+ * before calling this function.
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGmHardRst(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ /* set GPHY Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), GPC_RST_SET);
+
+ /* set GMAC Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_SET);
+
+} /* SkGmHardRst */
+
+
+/******************************************************************************
+ *
+ * SkMacSoftRst() - Do a MAC software reset
+ *
+ * Description: calls a MAC software reset routine dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacSoftRst(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* disable receiver and transmitter */
+ SkMacRxTxDisable(pAC, IoC, Port);
+
+ if (pAC->GIni.GIGenesis) {
+
+ SkXmSoftRst(pAC, IoC, Port);
+ }
+ else {
+
+ SkGmSoftRst(pAC, IoC, Port);
+ }
+
+ /* flush the MAC's Rx and Tx FIFOs */
+ SkMacFlushTxFifo(pAC, IoC, Port);
+
+ SkMacFlushRxFifo(pAC, IoC, Port);
+
+ pPrt->PState = SK_PRT_STOP;
+
+} /* SkMacSoftRst */
+
+
+/******************************************************************************
+ *
+ * SkMacHardRst() - Do a MAC hardware reset
+ *
+ * Description: calls a MAC hardware reset routine dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacHardRst(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+
+ if (pAC->GIni.GIGenesis) {
+
+ SkXmHardRst(pAC, IoC, Port);
+ }
+ else {
+
+ SkGmHardRst(pAC, IoC, Port);
+ }
+
+ pAC->GIni.GP[Port].PState = SK_PRT_RESET;
+
+} /* SkMacHardRst */
+
+
+/******************************************************************************
+ *
+ * SkXmInitMac() - Initialize the XMAC II
+ *
+ * Description:
+ * Initialize the XMAC of the specified port.
+ * The XMAC must be reset or stopped before calling this function.
+ *
+ * Note:
+ * The XMAC's Rx and Tx state machine is still disabled when returning.
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmInitMac(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U32 Reg;
+ int i;
+ SK_U16 SWord;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PState == SK_PRT_STOP) {
+ /* Port State: SK_PRT_STOP */
+ /* Verify that the reset bit is cleared */
+ SK_IN16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), &SWord);
+
+ if ((SWord & MFF_SET_MAC_RST) != 0) {
+ /* PState does not match HW state */
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E006, SKERR_HWI_E006MSG);
+ /* Correct it */
+ pPrt->PState = SK_PRT_RESET;
+ }
+ }
+
+ if (pPrt->PState == SK_PRT_RESET) {
+ /*
+ * clear HW reset
+ * Note: The SW reset is self clearing, therefore there is
+ * nothing to do here.
+ */
+ SK_OUT16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), MFF_CLR_MAC_RST);
+
+ /* Ensure that XMAC reset release is done (errata from LReinbold?) */
+ SK_IN16(IoC, MR_ADDR(Port, TX_MFF_CTRL1), &SWord);
+
+ /* Clear PHY reset */
+ if (pPrt->PhyType != SK_PHY_XMAC) {
+
+ SK_IN32(IoC, B2_GP_IO, &Reg);
+
+ if (Port == 0) {
+ Reg |= (GP_DIR_0 | GP_IO_0); /* set to output */
+ }
+ else {
+ Reg |= (GP_DIR_2 | GP_IO_2); /* set to output */
+ }
+ SK_OUT32(IoC, B2_GP_IO, Reg);
+
+ /* Enable GMII interface */
+ XM_OUT16(IoC, Port, XM_HW_CFG, XM_HW_GMII_MD);
+
+ /* read Id from external PHY (all have the same address) */
+ SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_ID1, &pPrt->PhyId1);
+
+ /*
+ * Optimize MDIO transfer by suppressing preamble.
+ * Must be done AFTER first access to BCOM chip.
+ */
+ XM_IN16(IoC, Port, XM_MMU_CMD, &SWord);
+
+ XM_OUT16(IoC, Port, XM_MMU_CMD, SWord | XM_MMU_NO_PRE);
+
+ if (pPrt->PhyId1 == PHY_BCOM_ID1_C0) {
+ /*
+ * Workaround BCOM Errata for the C0 type.
+ * Write magic patterns to reserved registers.
+ */
+ i = 0;
+ while (BcomRegC0Hack[i].PhyReg != 0) {
+ SkXmPhyWrite(pAC, IoC, Port, BcomRegC0Hack[i].PhyReg,
+ BcomRegC0Hack[i].PhyVal);
+ i++;
+ }
+ }
+ else if (pPrt->PhyId1 == PHY_BCOM_ID1_A1) {
+ /*
+ * Workaround BCOM Errata for the A1 type.
+ * Write magic patterns to reserved registers.
+ */
+ i = 0;
+ while (BcomRegA1Hack[i].PhyReg != 0) {
+ SkXmPhyWrite(pAC, IoC, Port, BcomRegA1Hack[i].PhyReg,
+ BcomRegA1Hack[i].PhyVal);
+ i++;
+ }
+ }
+
+ /*
+ * Workaround BCOM Errata (#10523) for all BCom PHYs.
+ * Disable Power Management after reset.
+ */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &SWord);
+
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL,
+ (SK_U16)(SWord | PHY_B_AC_DIS_PM));
+
+ /* PHY LED initialization is done in SkGeXmitLED() */
+ }
+
+ /* Dummy read the Interrupt source register */
+ XM_IN16(IoC, Port, XM_ISRC, &SWord);
+
+ /*
+ * The auto-negotiation process starts immediately after
+ * clearing the reset. The auto-negotiation process should be
+ * started by the SIRQ, therefore stop it here immediately.
+ */
+ SkMacInitPhy(pAC, IoC, Port, SK_FALSE);
+
+#if 0
+ /* temp. code: enable signal detect */
+ /* WARNING: do not override GMII setting above */
+ XM_OUT16(pAC, Port, XM_HW_CFG, XM_HW_COM4SIG);
+#endif
+ }
+
+ /*
+ * configure the XMACs Station Address
+ * B2_MAC_2 = xx xx xx xx xx x1 is programmed to XMAC A
+ * B2_MAC_3 = xx xx xx xx xx x2 is programmed to XMAC B
+ */
+ for (i = 0; i < 3; i++) {
+ /*
+ * The following 2 statements are together endianess
+ * independent. Remember this when changing.
+ */
+ SK_IN16(IoC, (B2_MAC_2 + Port * 8 + i * 2), &SWord);
+
+ XM_OUT16(IoC, Port, (XM_SA + i * 2), SWord);
+ }
+
+ /* Tx Inter Packet Gap (XM_TX_IPG): use default */
+ /* Tx High Water Mark (XM_TX_HI_WM): use default */
+ /* Tx Low Water Mark (XM_TX_LO_WM): use default */
+ /* Host Request Threshold (XM_HT_THR): use default */
+ /* Rx Request Threshold (XM_RX_THR): use default */
+ /* Rx Low Water Mark (XM_RX_LO_WM): use default */
+
+ /* configure Rx High Water Mark (XM_RX_HI_WM) */
+ XM_OUT16(IoC, Port, XM_RX_HI_WM, SK_XM_RX_HI_WM);
+
+ /* Configure Tx Request Threshold */
+ SWord = SK_XM_THR_SL; /* for single port */
+
+ if (pAC->GIni.GIMacsFound > 1) {
+ switch (pAC->GIni.GIPortUsage) {
+ case SK_RED_LINK:
+ SWord = SK_XM_THR_REDL; /* redundant link */
+ break;
+ case SK_MUL_LINK:
+ SWord = SK_XM_THR_MULL; /* load balancing */
+ break;
+ case SK_JUMBO_LINK:
+ SWord = SK_XM_THR_JUMBO; /* jumbo frames */
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E014, SKERR_HWI_E014MSG);
+ break;
+ }
+ }
+ XM_OUT16(IoC, Port, XM_TX_THR, SWord);
+
+ /* setup register defaults for the Tx Command Register */
+ XM_OUT16(IoC, Port, XM_TX_CMD, XM_TX_AUTO_PAD);
+
+ /* setup register defaults for the Rx Command Register */
+ SWord = XM_RX_STRIP_FCS | XM_RX_LENERR_OK;
+
+ if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
+ SWord |= XM_RX_BIG_PK_OK;
+ }
+
+ if (pPrt->PLinkModeConf == SK_LMODE_HALF) {
+ /*
+ * If in manual half duplex mode the other side might be in
+ * full duplex mode, so ignore if a carrier extension is not seen
+ * on frames received
+ */
+ SWord |= XM_RX_DIS_CEXT;
+ }
+
+ XM_OUT16(IoC, Port, XM_RX_CMD, SWord);
+
+ /*
+ * setup register defaults for the Mode Register
+ * - Don't strip error frames to avoid Store & Forward
+ * on the Rx side.
+ * - Enable 'Check Station Address' bit
+ * - Enable 'Check Address Array' bit
+ */
+ XM_OUT32(IoC, Port, XM_MODE, XM_DEF_MODE);
+
+ /*
+ * Initialize the Receive Counter Event Mask (XM_RX_EV_MSK)
+ * - Enable all bits excepting 'Octets Rx OK Low CntOv'
+ * and 'Octets Rx OK Hi Cnt Ov'.
+ */
+ XM_OUT32(IoC, Port, XM_RX_EV_MSK, XMR_DEF_MSK);
+
+ /*
+ * Initialize the Transmit Counter Event Mask (XM_TX_EV_MSK)
+ * - Enable all bits excepting 'Octets Tx OK Low CntOv'
+ * and 'Octets Tx OK Hi Cnt Ov'.
+ */
+ XM_OUT32(IoC, Port, XM_TX_EV_MSK, XMT_DEF_MSK);
+
+ /*
+ * Do NOT init XMAC interrupt mask here.
+ * All interrupts remain disable until link comes up!
+ */
+
+ /*
+ * Any additional configuration changes may be done now.
+ * The last action is to enable the Rx and Tx state machine.
+ * This should be done after the auto-negotiation process
+ * has been completed successfully.
+ */
+} /* SkXmInitMac */
+
+/******************************************************************************
+ *
+ * SkGmInitMac() - Initialize the GMAC
+ *
+ * Description:
+ * Initialize the GMAC of the specified port.
+ * The GMAC must be reset or stopped before calling this function.
+ *
+ * Note:
+ * The GMAC's Rx and Tx state machine is still disabled when returning.
+ *
+ * Returns:
+ * nothing
+ */
+void SkGmInitMac(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ int i;
+ SK_U16 SWord;
+ SK_U32 DWord;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PState == SK_PRT_STOP) {
+ /* Port State: SK_PRT_STOP */
+ /* Verify that the reset bit is cleared */
+ SK_IN32(IoC, MR_ADDR(Port, GMAC_CTRL), &DWord);
+
+ if ((DWord & GMC_RST_SET) != 0) {
+ /* PState does not match HW state */
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E006, SKERR_HWI_E006MSG);
+ /* Correct it */
+ pPrt->PState = SK_PRT_RESET;
+ }
+ }
+
+ if (pPrt->PState == SK_PRT_RESET) {
+ /* set GPHY Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), GPC_RST_SET);
+
+ /* set GMAC Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_SET);
+
+ /* clear GMAC Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_CLR);
+
+ /* set GMAC Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_RST_SET);
+
+ /* set HWCFG_MODE */
+ DWord = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP |
+ GPC_ENA_XC | GPC_ANEG_ADV_ALL_M | GPC_ENA_PAUSE |
+ (pAC->GIni.GICopperType ? GPC_HWCFG_GMII_COP :
+ GPC_HWCFG_GMII_FIB);
+
+ /* set GPHY Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), DWord | GPC_RST_SET);
+
+ /* release GPHY Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GPHY_CTRL), DWord | GPC_RST_CLR);
+
+ /* clear GMAC Control reset */
+ SK_OUT32(IoC, MR_ADDR(Port, GMAC_CTRL), GMC_PAUSE_ON | GMC_RST_CLR);
+
+ /* Dummy read the Interrupt source register */
+ SK_IN16(IoC, GMAC_IRQ_SRC, &SWord);
+
+#ifndef VCPU
+ /* read Id from PHY */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_ID1, &pPrt->PhyId1);
+
+ SkGmInitPhyMarv(pAC, IoC, Port, SK_FALSE);
+#endif /* VCPU */
+ }
+
+ (void)SkGmResetCounter(pAC, IoC, Port);
+
+ SWord = 0;
+
+ /* speed settings */
+ switch (pPrt->PLinkSpeed) {
+ case SK_LSPEED_AUTO:
+ case SK_LSPEED_1000MBPS:
+ SWord |= GM_GPCR_SPEED_1000 | GM_GPCR_SPEED_100;
+ break;
+ case SK_LSPEED_100MBPS:
+ SWord |= GM_GPCR_SPEED_100;
+ break;
+ case SK_LSPEED_10MBPS:
+ break;
+ }
+
+ /* duplex settings */
+ if (pPrt->PLinkMode != SK_LMODE_HALF) {
+ /* set full duplex */
+ SWord |= GM_GPCR_DUP_FULL;
+ }
+
+ /* flow control settings */
+ switch (pPrt->PFlowCtrlMode) {
+ case SK_FLOW_MODE_NONE:
+ /* disable auto-negotiation for flow-control */
+ SWord |= GM_GPCR_FC_TX_DIS | GM_GPCR_FC_RX_DIS;
+ break;
+ case SK_FLOW_MODE_LOC_SEND:
+ SWord |= GM_GPCR_FC_RX_DIS;
+ break;
+ case SK_FLOW_MODE_SYMMETRIC:
+ /* TBD */
+ case SK_FLOW_MODE_SYM_OR_REM:
+ /* enable auto-negotiation for flow-control and */
+ /* enable Rx and Tx of pause frames */
+ break;
+ }
+
+ /* Auto-negotiation ? */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ /* disable auto-update for speed, duplex and flow-control */
+ SWord |= GM_GPCR_AU_ALL_DIS;
+ }
+
+ /* setup General Purpose Control Register */
+ GM_OUT16(IoC, Port, GM_GP_CTRL, SWord);
+
+ /* setup Transmit Control Register */
+ GM_OUT16(IoC, Port, GM_TX_CTRL, GM_TXCR_COL_THR);
+
+ /* setup Receive Control Register */
+ GM_OUT16(IoC, Port, GM_RX_CTRL, GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA |
+ GM_RXCR_CRC_DIS);
+
+ /* setup Transmit Flow Control Register */
+ GM_OUT16(IoC, Port, GM_TX_FLOW_CTRL, 0xffff);
+
+ /* setup Transmit Parameter Register */
+#ifdef VCPU
+ GM_IN16(IoC, Port, GM_TX_PARAM, &SWord);
+#endif /* VCPU */
+
+ SWord = JAM_LEN_VAL(3) | JAM_IPG_VAL(11) | IPG_JAM_DATA(26);
+
+ GM_OUT16(IoC, Port, GM_TX_PARAM, SWord);
+
+ /* configure the Serial Mode Register */
+#ifdef VCPU
+ GM_IN16(IoC, Port, GM_SERIAL_MODE, &SWord);
+#endif /* VCPU */
+
+ SWord = GM_SMOD_VLAN_ENA | IPG_VAL_FAST_ETH;
+
+ if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
+ /* enable jumbo mode (Max. Frame Length = 9018) */
+ SWord |= GM_SMOD_JUMBO_ENA;
+ }
+
+ GM_OUT16(IoC, Port, GM_SERIAL_MODE, SWord);
+
+ /*
+ * configure the GMACs Station Addresses
+ * in PROM you can find our addresses at:
+ * B2_MAC_1 = xx xx xx xx xx x0 virtual address
+ * B2_MAC_2 = xx xx xx xx xx x1 is programmed to GMAC A
+ * B2_MAC_3 = xx xx xx xx xx x2 is reserved for DualPort
+ */
+
+ for (i = 0; i < 3; i++) {
+ /*
+ * The following 2 statements are together endianess
+ * independent. Remember this when changing.
+ */
+ /* physical address: will be used for pause frames */
+ SK_IN16(IoC, (B2_MAC_2 + Port * 8 + i * 2), &SWord);
+
+#ifdef WA_DEV_16
+ /* WA for deviation #16 */
+ if (pAC->GIni.GIChipRev == 0) {
+ /* swap the address bytes */
+ SWord = ((SWord & 0xff00) >> 8) | ((SWord & 0x00ff) << 8);
+
+ /* write to register in reversed order */
+ GM_OUT16(IoC, Port, (GM_SRC_ADDR_1L + (2 - i) * 4), SWord);
+ }
+ else {
+ GM_OUT16(IoC, Port, (GM_SRC_ADDR_1L + i * 4), SWord);
+ }
+#else
+ GM_OUT16(IoC, Port, (GM_SRC_ADDR_1L + i * 4), SWord);
+#endif /* WA_DEV_16 */
+
+ /* virtual address: will be used for data */
+ SK_IN16(IoC, (B2_MAC_1 + Port * 8 + i * 2), &SWord);
+
+ GM_OUT16(IoC, Port, (GM_SRC_ADDR_2L + i * 4), SWord);
+
+ /* reset Multicast filtering Hash registers 1-3 */
+ GM_OUT16(IoC, Port, GM_MC_ADDR_H1 + 4*i, 0);
+ }
+
+ /* reset Multicast filtering Hash register 4 */
+ GM_OUT16(IoC, Port, GM_MC_ADDR_H4, 0);
+
+ /* enable interrupt mask for counter overflows */
+ GM_OUT16(IoC, Port, GM_TX_IRQ_MSK, 0);
+ GM_OUT16(IoC, Port, GM_RX_IRQ_MSK, 0);
+ GM_OUT16(IoC, Port, GM_TR_IRQ_MSK, 0);
+
+ /* read General Purpose Status */
+ GM_IN16(IoC, Port, GM_GP_STAT, &SWord);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("MAC Stat Reg=0x%04X\n", SWord));
+
+#ifdef SK_DIAG
+ c_print("MAC Stat Reg=0x%04X\n", SWord);
+#endif /* SK_DIAG */
+
+} /* SkGmInitMac */
+
+
+/******************************************************************************
+ *
+ * SkXmInitDupMd() - Initialize the XMACs Duplex Mode
+ *
+ * Description:
+ * This function initializes the XMACs Duplex Mode.
+ * It should be called after successfully finishing
+ * the Auto-negotiation Process
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmInitDupMd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ switch (pAC->GIni.GP[Port].PLinkModeStatus) {
+ case SK_LMODE_STAT_AUTOHALF:
+ case SK_LMODE_STAT_HALF:
+ /* Configuration Actions for Half Duplex Mode */
+ /*
+ * XM_BURST = default value. We are probable not quick
+ * enough at the 'XMAC' bus to burst 8kB.
+ * The XMAC stops bursting if no transmit frames
+ * are available or the burst limit is exceeded.
+ */
+ /* XM_TX_RT_LIM = default value (15) */
+ /* XM_TX_STIME = default value (0xff = 4096 bit times) */
+ break;
+ case SK_LMODE_STAT_AUTOFULL:
+ case SK_LMODE_STAT_FULL:
+ /* Configuration Actions for Full Duplex Mode */
+ /*
+ * The duplex mode is configured by the PHY,
+ * therefore it seems to be that there is nothing
+ * to do here.
+ */
+ break;
+ case SK_LMODE_STAT_UNKNOWN:
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E007, SKERR_HWI_E007MSG);
+ break;
+ }
+} /* SkXmInitDupMd */
+
+
+/******************************************************************************
+ *
+ * SkXmInitPauseMd() - initialize the Pause Mode to be used for this port
+ *
+ * Description:
+ * This function initializes the Pause Mode which should
+ * be used for this port.
+ * It should be called after successfully finishing
+ * the Auto-negotiation Process
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmInitPauseMd(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U32 DWord;
+ SK_U16 Word;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
+
+ if (pPrt->PFlowCtrlStatus == SK_FLOW_STAT_NONE ||
+ pPrt->PFlowCtrlStatus == SK_FLOW_STAT_LOC_SEND) {
+
+ /* Disable Pause Frame Reception */
+ Word |= XM_MMU_IGN_PF;
+ }
+ else {
+ /*
+ * enabling pause frame reception is required for 1000BT
+ * because the XMAC is not reset if the link is going down
+ */
+ /* Enable Pause Frame Reception */
+ Word &= ~XM_MMU_IGN_PF;
+ }
+
+ XM_OUT16(IoC, Port, XM_MMU_CMD, Word);
+
+ XM_IN32(IoC, Port, XM_MODE, &DWord);
+
+ if (pPrt->PFlowCtrlStatus == SK_FLOW_STAT_SYMMETRIC ||
+ pPrt->PFlowCtrlStatus == SK_FLOW_STAT_LOC_SEND) {
+
+ /*
+ * Configure Pause Frame Generation
+ * Use internal and external Pause Frame Generation.
+ * Sending pause frames is edge triggered.
+ * Send a Pause frame with the maximum pause time if
+ * internal oder external FIFO full condition occurs.
+ * Send a zero pause time frame to re-start transmission.
+ */
+
+ /* XM_PAUSE_DA = '010000C28001' (default) */
+
+ /* XM_MAC_PTIME = 0xffff (maximum) */
+ /* remember this value is defined in big endian (!) */
+ XM_OUT16(IoC, Port, XM_MAC_PTIME, 0xffff);
+
+ /* Set Pause Mode in Mode Register */
+ DWord |= XM_PAUSE_MODE;
+
+ /* Set Pause Mode in MAC Rx FIFO */
+ SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_ENA_PAUSE);
+ }
+ else {
+ /*
+ * disable pause frame generation is required for 1000BT
+ * because the XMAC is not reset if the link is going down
+ */
+ /* Disable Pause Mode in Mode Register */
+ DWord &= ~XM_PAUSE_MODE;
+
+ /* Disable Pause Mode in MAC Rx FIFO */
+ SK_OUT16(IoC, MR_ADDR(Port, RX_MFF_CTRL1), MFF_DIS_PAUSE);
+ }
+
+ XM_OUT32(IoC, Port, XM_MODE, DWord);
+} /* SkXmInitPauseMd*/
+
+
+/******************************************************************************
+ *
+ * SkXmInitPhyXmac() - Initialize the XMAC Phy registers
+ *
+ * Description: initializes all the XMACs Phy registers
+ *
+ * Note:
+ *
+ * Returns:
+ * nothing
+ */
+static void SkXmInitPhyXmac(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 Ctrl;
+
+ pPrt = &pAC->GIni.GP[Port];
+ Ctrl = 0;
+
+ /* Auto-negotiation ? */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyXmac: no auto-negotiation Port %d\n", Port));
+ /* Set DuplexMode in Config register */
+ if (pPrt->PLinkMode == SK_LMODE_FULL) {
+ Ctrl |= PHY_CT_DUP_MD;
+ }
+
+ /*
+ * Do NOT enable Auto-negotiation here. This would hold
+ * the link down because no IDLEs are transmitted
+ */
+ }
+ else {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyXmac: with auto-negotiation Port %d\n", Port));
+ /* Set Auto-negotiation advertisement */
+
+ /* Set Full/half duplex capabilities */
+ switch (pPrt->PLinkMode) {
+ case SK_LMODE_AUTOHALF:
+ Ctrl |= PHY_X_AN_HD;
+ break;
+ case SK_LMODE_AUTOFULL:
+ Ctrl |= PHY_X_AN_FD;
+ break;
+ case SK_LMODE_AUTOBOTH:
+ Ctrl |= PHY_X_AN_FD | PHY_X_AN_HD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
+ SKERR_HWI_E015MSG);
+ }
+
+ switch (pPrt->PFlowCtrlMode) {
+ case SK_FLOW_MODE_NONE:
+ Ctrl |= PHY_X_P_NO_PAUSE;
+ break;
+ case SK_FLOW_MODE_LOC_SEND:
+ Ctrl |= PHY_X_P_ASYM_MD;
+ break;
+ case SK_FLOW_MODE_SYMMETRIC:
+ Ctrl |= PHY_X_P_SYM_MD;
+ break;
+ case SK_FLOW_MODE_SYM_OR_REM:
+ Ctrl |= PHY_X_P_BOTH_MD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
+ SKERR_HWI_E016MSG);
+ }
+
+ /* Write AutoNeg Advertisement Register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_XMAC_AUNE_ADV, Ctrl);
+
+ /* Restart Auto-negotiation */
+ Ctrl = PHY_CT_ANE | PHY_CT_RE_CFG;
+ }
+
+ if (DoLoop) {
+ /* Set the Phy Loopback bit, too */
+ Ctrl |= PHY_CT_LOOP;
+ }
+
+ /* Write to the Phy control register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_XMAC_CTRL, Ctrl);
+} /* SkXmInitPhyXmac */
+
+
+/******************************************************************************
+ *
+ * SkXmInitPhyBcom() - Initialize the Broadcom Phy registers
+ *
+ * Description: initializes all the Broadcom Phy registers
+ *
+ * Note:
+ *
+ * Returns:
+ * nothing
+ */
+static void SkXmInitPhyBcom(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 Ctrl1;
+ SK_U16 Ctrl2;
+ SK_U16 Ctrl3;
+ SK_U16 Ctrl4;
+ SK_U16 Ctrl5;
+
+ Ctrl1 = PHY_CT_SP1000;
+ Ctrl2 = 0;
+ Ctrl3 = PHY_SEL_TYPE;
+ Ctrl4 = PHY_B_PEC_EN_LTR;
+ Ctrl5 = PHY_B_AC_TX_TST;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* manually Master/Slave ? */
+ if (pPrt->PMSMode != SK_MS_MODE_AUTO) {
+ Ctrl2 |= PHY_B_1000C_MSE;
+
+ if (pPrt->PMSMode == SK_MS_MODE_MASTER) {
+ Ctrl2 |= PHY_B_1000C_MSC;
+ }
+ }
+ /* Auto-negotiation ? */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyBcom: no auto-negotiation Port %d\n", Port));
+ /* Set DuplexMode in Config register */
+ Ctrl1 |= (pPrt->PLinkMode == SK_LMODE_FULL ? PHY_CT_DUP_MD : 0);
+
+ /* Determine Master/Slave manually if not already done */
+ if (pPrt->PMSMode == SK_MS_MODE_AUTO) {
+ Ctrl2 |= PHY_B_1000C_MSE; /* set it to Slave */
+ }
+
+ /*
+ * Do NOT enable Auto-negotiation here. This would hold
+ * the link down because no IDLES are transmitted
+ */
+ }
+ else {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyBcom: with auto-negotiation Port %d\n", Port));
+ /* Set Auto-negotiation advertisement */
+
+ /*
+ * Workaround BCOM Errata #1 for the C5 type.
+ * 1000Base-T Link Acquisition Failure in Slave Mode
+ * Set Repeater/DTE bit 10 of the 1000Base-T Control Register
+ */
+ Ctrl2 |= PHY_B_1000C_RD;
+
+ /* Set Full/half duplex capabilities */
+ switch (pPrt->PLinkMode) {
+ case SK_LMODE_AUTOHALF:
+ Ctrl2 |= PHY_B_1000C_AHD;
+ break;
+ case SK_LMODE_AUTOFULL:
+ Ctrl2 |= PHY_B_1000C_AFD;
+ break;
+ case SK_LMODE_AUTOBOTH:
+ Ctrl2 |= PHY_B_1000C_AFD | PHY_B_1000C_AHD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
+ SKERR_HWI_E015MSG);
+ }
+
+ switch (pPrt->PFlowCtrlMode) {
+ case SK_FLOW_MODE_NONE:
+ Ctrl3 |= PHY_B_P_NO_PAUSE;
+ break;
+ case SK_FLOW_MODE_LOC_SEND:
+ Ctrl3 |= PHY_B_P_ASYM_MD;
+ break;
+ case SK_FLOW_MODE_SYMMETRIC:
+ Ctrl3 |= PHY_B_P_SYM_MD;
+ break;
+ case SK_FLOW_MODE_SYM_OR_REM:
+ Ctrl3 |= PHY_B_P_BOTH_MD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
+ SKERR_HWI_E016MSG);
+ }
+
+ /* Restart Auto-negotiation */
+ Ctrl1 |= PHY_CT_ANE | PHY_CT_RE_CFG;
+ }
+
+ /* Initialize LED register here? */
+ /* No. Please do it in SkDgXmitLed() (if required) and swap
+ init order of LEDs and XMAC. (MAl) */
+
+ /* Write 1000Base-T Control Register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_1000T_CTRL, Ctrl2);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("1000B-T Ctrl Reg=0x%04X\n", Ctrl2));
+
+ /* Write AutoNeg Advertisement Register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUNE_ADV, Ctrl3);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Auto-Neg. Adv. Reg=0x%04X\n", Ctrl3));
+
+ if (DoLoop) {
+ /* Set the Phy Loopback bit, too */
+ Ctrl1 |= PHY_CT_LOOP;
+ }
+
+ if (pAC->GIni.GIPortUsage == SK_JUMBO_LINK) {
+ /* configure FIFO to high latency for transmission of ext. packets */
+ Ctrl4 |= PHY_B_PEC_HIGH_LA;
+
+ /* configure reception of extended packets */
+ Ctrl5 |= PHY_B_AC_LONG_PACK;
+
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, Ctrl5);
+ }
+
+ /* Configure LED Traffic Mode and Jumbo Frame usage if specified */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_P_EXT_CTRL, Ctrl4);
+
+ /* Write to the Phy control register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_CTRL, Ctrl1);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("PHY Control Reg=0x%04X\n", Ctrl1));
+} /* SkXmInitPhyBcom */
+
+
+/******************************************************************************
+ *
+ * SkGmInitPhyMarv() - Initialize the Marvell Phy registers
+ *
+ * Description: initializes all the Marvell Phy registers
+ *
+ * Note:
+ *
+ * Returns:
+ * nothing
+ */
+static void SkGmInitPhyMarv(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 PhyCtrl;
+ SK_U16 C1000BaseT;
+ SK_U16 AutoNegAdv;
+ SK_U16 ExtPhyCtrl;
+ SK_U16 PhyStat;
+ SK_U16 PhyStat1;
+ SK_U16 PhySpecStat;
+ SK_U16 LedCtrl;
+ SK_BOOL AutoNeg;
+
+#ifdef VCPU
+ VCPUprintf(0, "SkGmInitPhyMarv(), Port=%u, DoLoop=%u\n",
+ Port, DoLoop);
+#else /* VCPU */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Auto-negotiation ? */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ AutoNeg = SK_FALSE;
+ }
+ else {
+ AutoNeg = SK_TRUE;
+ }
+
+ if (!DoLoop) {
+ /* Read Ext. PHY Specific Control */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_EXT_CTRL, &ExtPhyCtrl);
+
+ ExtPhyCtrl &= ~(PHY_M_EC_M_DSC_MSK | PHY_M_EC_S_DSC_MSK |
+ PHY_M_EC_MAC_S_MSK);
+
+ ExtPhyCtrl |= PHY_M_EC_M_DSC(1) | PHY_M_EC_S_DSC(1) |
+ PHY_M_EC_MAC_S(MAC_TX_CLK_25_MHZ);
+
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_CTRL, ExtPhyCtrl);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Ext.PHYCtrl=0x%04X\n", ExtPhyCtrl));
+
+ /* Read PHY Control */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CTRL, &PhyCtrl);
+
+ /* Assert software reset */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_CTRL,
+ (SK_U16)(PhyCtrl | PHY_CT_RESET));
+ }
+#endif /* VCPU */
+
+ PhyCtrl = 0 /* PHY_CT_COL_TST */;
+ C1000BaseT = 0;
+ AutoNegAdv = PHY_SEL_TYPE;
+
+ /* manually Master/Slave ? */
+ if (pPrt->PMSMode != SK_MS_MODE_AUTO) {
+ /* enable Manual Master/Slave */
+ C1000BaseT |= PHY_M_1000C_MSE;
+
+ if (pPrt->PMSMode == SK_MS_MODE_MASTER) {
+ C1000BaseT |= PHY_M_1000C_MSC; /* set it to Master */
+ }
+ }
+
+ /* Auto-negotiation ? */
+ if (!AutoNeg) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyMarv: no auto-negotiation Port %d\n", Port));
+
+ if (pPrt->PLinkMode == SK_LMODE_FULL) {
+ /* Set Full Duplex Mode */
+ PhyCtrl |= PHY_CT_DUP_MD;
+ }
+
+ /* Set Master/Slave manually if not already done */
+ if (pPrt->PMSMode == SK_MS_MODE_AUTO) {
+ C1000BaseT |= PHY_M_1000C_MSE; /* set it to Slave */
+ }
+
+ /* Set Speed */
+ switch (pPrt->PLinkSpeed) {
+ case SK_LSPEED_AUTO:
+ case SK_LSPEED_1000MBPS:
+ PhyCtrl |= PHY_CT_SP1000;
+ break;
+ case SK_LSPEED_100MBPS:
+ PhyCtrl |= PHY_CT_SP100;
+ break;
+ case SK_LSPEED_10MBPS:
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E019,
+ SKERR_HWI_E019MSG);
+ }
+
+ if (!DoLoop) {
+ PhyCtrl |= PHY_CT_RESET;
+ }
+ /*
+ * Do NOT enable Auto-negotiation here. This would hold
+ * the link down because no IDLES are transmitted
+ */
+ }
+ else {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyMarv: with auto-negotiation Port %d\n", Port));
+
+ PhyCtrl |= PHY_CT_ANE;
+
+ if (pAC->GIni.GICopperType) {
+ /* Set Speed capabilities */
+ switch (pPrt->PLinkSpeed) {
+ case SK_LSPEED_AUTO:
+ C1000BaseT |= PHY_M_1000C_AHD | PHY_M_1000C_AFD;
+ AutoNegAdv |= PHY_M_AN_100_FD | PHY_M_AN_100_HD |
+ PHY_M_AN_10_FD | PHY_M_AN_10_HD;
+ break;
+ case SK_LSPEED_1000MBPS:
+ C1000BaseT |= PHY_M_1000C_AHD | PHY_M_1000C_AFD;
+ break;
+ case SK_LSPEED_100MBPS:
+ AutoNegAdv |= PHY_M_AN_100_FD | PHY_M_AN_100_HD |
+ PHY_M_AN_10_FD | PHY_M_AN_10_HD;
+ break;
+ case SK_LSPEED_10MBPS:
+ AutoNegAdv |= PHY_M_AN_10_FD | PHY_M_AN_10_HD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E019,
+ SKERR_HWI_E019MSG);
+ }
+
+ /* Set Full/half duplex capabilities */
+ switch (pPrt->PLinkMode) {
+ case SK_LMODE_AUTOHALF:
+ C1000BaseT &= ~PHY_M_1000C_AFD;
+ AutoNegAdv &= ~(PHY_M_AN_100_FD | PHY_M_AN_10_FD);
+ break;
+ case SK_LMODE_AUTOFULL:
+ C1000BaseT &= ~PHY_M_1000C_AHD;
+ AutoNegAdv &= ~(PHY_M_AN_100_HD | PHY_M_AN_10_HD);
+ break;
+ case SK_LMODE_AUTOBOTH:
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
+ SKERR_HWI_E015MSG);
+ }
+
+ /* Set Auto-negotiation advertisement */
+ switch (pPrt->PFlowCtrlMode) {
+ case SK_FLOW_MODE_NONE:
+ AutoNegAdv |= PHY_B_P_NO_PAUSE;
+ break;
+ case SK_FLOW_MODE_LOC_SEND:
+ AutoNegAdv |= PHY_B_P_ASYM_MD;
+ break;
+ case SK_FLOW_MODE_SYMMETRIC:
+ AutoNegAdv |= PHY_B_P_SYM_MD;
+ break;
+ case SK_FLOW_MODE_SYM_OR_REM:
+ AutoNegAdv |= PHY_B_P_BOTH_MD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
+ SKERR_HWI_E016MSG);
+ }
+ }
+ else { /* special defines for FIBER (88E1011S only) */
+
+ /* Set Full/half duplex capabilities */
+ switch (pPrt->PLinkMode) {
+ case SK_LMODE_AUTOHALF:
+ AutoNegAdv |= PHY_M_AN_1000X_AHD;
+ break;
+ case SK_LMODE_AUTOFULL:
+ AutoNegAdv |= PHY_M_AN_1000X_AFD;
+ break;
+ case SK_LMODE_AUTOBOTH:
+ AutoNegAdv |= PHY_M_AN_1000X_AHD | PHY_M_AN_1000X_AFD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
+ SKERR_HWI_E015MSG);
+ }
+
+ /* Set Auto-negotiation advertisement */
+ switch (pPrt->PFlowCtrlMode) {
+ case SK_FLOW_MODE_NONE:
+ AutoNegAdv |= PHY_M_P_NO_PAUSE_X;
+ break;
+ case SK_FLOW_MODE_LOC_SEND:
+ AutoNegAdv |= PHY_M_P_ASYM_MD_X;
+ break;
+ case SK_FLOW_MODE_SYMMETRIC:
+ AutoNegAdv |= PHY_M_P_SYM_MD_X;
+ break;
+ case SK_FLOW_MODE_SYM_OR_REM:
+ AutoNegAdv |= PHY_M_P_BOTH_MD_X;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
+ SKERR_HWI_E016MSG);
+ }
+ }
+
+ if (!DoLoop) {
+ /* Restart Auto-negotiation */
+ PhyCtrl |= PHY_CT_RE_CFG;
+ }
+ }
+
+#ifdef VCPU
+ /*
+ * E-mail from Gu Lin (08-03-2002):
+ */
+
+ /* Program PHY register 30 as 16'h0708 for simulation speed up */
+ SkGmPhyWrite(pAC, IoC, Port, 30, 0x0708);
+
+ VCpuWait(2000);
+
+#else /* VCPU */
+
+ /* Write 1000Base-T Control Register */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_1000T_CTRL, C1000BaseT);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("1000B-T Ctrl=0x%04X\n", C1000BaseT));
+
+ /* Write AutoNeg Advertisement Register */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_AUNE_ADV, AutoNegAdv);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Auto-Neg.Ad.=0x%04X\n", AutoNegAdv));
+#endif /* VCPU */
+
+ if (DoLoop) {
+ /* Set the PHY Loopback bit */
+ PhyCtrl |= PHY_CT_LOOP;
+
+ /* Program PHY register 16 as 16'h0400 to force link good */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_PHY_CTRL, PHY_M_PC_FL_GOOD);
+
+#if 0
+ if (pPrt->PLinkSpeed != SK_LSPEED_AUTO) {
+ /* Write Ext. PHY Specific Control */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_CTRL,
+ (SK_U16)((pPrt->PLinkSpeed + 2) << 4));
+ }
+ }
+ else if (pPrt->PLinkSpeed == SK_LSPEED_10MBPS) {
+ /* Write PHY Specific Control */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_PHY_CTRL, PHY_M_PC_EN_DET_MSK);
+ }
+#endif /* 0 */
+ }
+
+ /* Write to the PHY Control register */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_CTRL, PhyCtrl);
+
+#ifdef VCPU
+ VCpuWait(2000);
+#else
+
+ LedCtrl = PHY_M_LED_PULS_DUR(PULS_170MS) | PHY_M_LED_BLINK_RT(BLINK_84MS);
+
+#ifdef ACT_LED_BLINK
+ LedCtrl |= PHY_M_LEDC_RX_CTRL | PHY_M_LEDC_TX_CTRL;
+#endif /* ACT_LED_BLINK */
+
+#ifdef DUP_LED_NORMAL
+ LedCtrl |= PHY_M_LEDC_DP_CTRL;
+#endif /* DUP_LED_NORMAL */
+
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_LED_CTRL, LedCtrl);
+
+#endif /* VCPU */
+
+#ifdef SK_DIAG
+ c_print("Set PHY Ctrl=0x%04X\n", PhyCtrl);
+ c_print("Set 1000 B-T=0x%04X\n", C1000BaseT);
+ c_print("Set Auto-Neg=0x%04X\n", AutoNegAdv);
+ c_print("Set Ext Ctrl=0x%04X\n", ExtPhyCtrl);
+#endif /* SK_DIAG */
+
+#ifndef xDEBUG
+ /* Read PHY Control */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CTRL, &PhyCtrl);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("PHY Ctrl Reg.=0x%04X\n", PhyCtrl));
+
+ /* Read 1000Base-T Control Register */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_1000T_CTRL, &C1000BaseT);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("1000B-T Ctrl =0x%04X\n", C1000BaseT));
+
+ /* Read AutoNeg Advertisement Register */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_AUNE_ADV, &AutoNegAdv);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Auto-Neg. Ad.=0x%04X\n", AutoNegAdv));
+
+ /* Read Ext. PHY Specific Control */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_EXT_CTRL, &ExtPhyCtrl);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Ext PHY Ctrl=0x%04X\n", ExtPhyCtrl));
+
+ /* Read PHY Status */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_STAT, &PhyStat);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("PHY Stat Reg.=0x%04X\n", PhyStat));
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_STAT, &PhyStat1);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("PHY Stat Reg.=0x%04X\n", PhyStat1));
+
+ /* Read PHY Specific Status */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_PHY_STAT, &PhySpecStat);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("PHY Spec Stat=0x%04X\n", PhySpecStat));
+#endif /* DEBUG */
+
+#ifdef SK_DIAG
+ c_print("PHY Ctrl Reg=0x%04X\n", PhyCtrl);
+ c_print("PHY 1000 Reg=0x%04X\n", C1000BaseT);
+ c_print("PHY AnAd Reg=0x%04X\n", AutoNegAdv);
+ c_print("Ext Ctrl Reg=0x%04X\n", ExtPhyCtrl);
+ c_print("PHY Stat Reg=0x%04X\n", PhyStat);
+ c_print("PHY Stat Reg=0x%04X\n", PhyStat1);
+ c_print("PHY Spec Reg=0x%04X\n", PhySpecStat);
+#endif /* SK_DIAG */
+
+} /* SkGmInitPhyMarv */
+
+
+#ifdef OTHER_PHY
+/******************************************************************************
+ *
+ * SkXmInitPhyLone() - Initialize the Level One Phy registers
+ *
+ * Description: initializes all the Level One Phy registers
+ *
+ * Note:
+ *
+ * Returns:
+ * nothing
+ */
+static void SkXmInitPhyLone(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 Ctrl1;
+ SK_U16 Ctrl2;
+ SK_U16 Ctrl3;
+
+ Ctrl1 = PHY_CT_SP1000;
+ Ctrl2 = 0;
+ Ctrl3 = PHY_SEL_TYPE;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* manually Master/Slave ? */
+ if (pPrt->PMSMode != SK_MS_MODE_AUTO) {
+ Ctrl2 |= PHY_L_1000C_MSE;
+
+ if (pPrt->PMSMode == SK_MS_MODE_MASTER) {
+ Ctrl2 |= PHY_L_1000C_MSC;
+ }
+ }
+ /* Auto-negotiation ? */
+ if (pPrt->PLinkMode == SK_LMODE_HALF || pPrt->PLinkMode == SK_LMODE_FULL) {
+ /*
+ * level one spec say: "1000Mbps: manual mode not allowed"
+ * but lets see what happens...
+ */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyLone: no auto-negotiation Port %d\n", Port));
+ /* Set DuplexMode in Config register */
+ Ctrl1 = (pPrt->PLinkMode == SK_LMODE_FULL ? PHY_CT_DUP_MD : 0);
+
+ /* Determine Master/Slave manually if not already done */
+ if (pPrt->PMSMode == SK_MS_MODE_AUTO) {
+ Ctrl2 |= PHY_L_1000C_MSE; /* set it to Slave */
+ }
+
+ /*
+ * Do NOT enable Auto-negotiation here. This would hold
+ * the link down because no IDLES are transmitted
+ */
+ }
+ else {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("InitPhyLone: with auto-negotiation Port %d\n", Port));
+ /* Set Auto-negotiation advertisement */
+
+ /* Set Full/half duplex capabilities */
+ switch (pPrt->PLinkMode) {
+ case SK_LMODE_AUTOHALF:
+ Ctrl2 |= PHY_L_1000C_AHD;
+ break;
+ case SK_LMODE_AUTOFULL:
+ Ctrl2 |= PHY_L_1000C_AFD;
+ break;
+ case SK_LMODE_AUTOBOTH:
+ Ctrl2 |= PHY_L_1000C_AFD | PHY_L_1000C_AHD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E015,
+ SKERR_HWI_E015MSG);
+ }
+
+ switch (pPrt->PFlowCtrlMode) {
+ case SK_FLOW_MODE_NONE:
+ Ctrl3 |= PHY_L_P_NO_PAUSE;
+ break;
+ case SK_FLOW_MODE_LOC_SEND:
+ Ctrl3 |= PHY_L_P_ASYM_MD;
+ break;
+ case SK_FLOW_MODE_SYMMETRIC:
+ Ctrl3 |= PHY_L_P_SYM_MD;
+ break;
+ case SK_FLOW_MODE_SYM_OR_REM:
+ Ctrl3 |= PHY_L_P_BOTH_MD;
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
+ SKERR_HWI_E016MSG);
+ }
+
+ /* Restart Auto-negotiation */
+ Ctrl1 = PHY_CT_ANE | PHY_CT_RE_CFG;
+
+ }
+
+ /* Initialize LED register here ? */
+ /* No. Please do it in SkDgXmitLed() (if required) and swap
+ init order of LEDs and XMAC. (MAl) */
+
+ /* Write 1000Base-T Control Register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_1000T_CTRL, Ctrl2);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("1000B-T Ctrl Reg=0x%04X\n", Ctrl2));
+
+ /* Write AutoNeg Advertisement Register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_AUNE_ADV, Ctrl3);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Auto-Neg. Adv. Reg=0x%04X\n", Ctrl3));
+
+
+ if (DoLoop) {
+ /* Set the Phy Loopback bit, too */
+ Ctrl1 |= PHY_CT_LOOP;
+ }
+
+ /* Write to the Phy control register */
+ SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_CTRL, Ctrl1);
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("PHY Control Reg=0x%04X\n", Ctrl1));
+} /* SkXmInitPhyLone */
+
+
+/******************************************************************************
+ *
+ * SkXmInitPhyNat() - Initialize the National Phy registers
+ *
+ * Description: initializes all the National Phy registers
+ *
+ * Note:
+ *
+ * Returns:
+ * nothing
+ */
+static void SkXmInitPhyNat(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
+{
+/* todo: National */
+} /* SkXmInitPhyNat */
+#endif /* OTHER_PHY */
+
+
+/******************************************************************************
+ *
+ * SkMacInitPhy() - Initialize the PHY registers
+ *
+ * Description: calls the Init PHY routines dep. on board type
+ *
+ * Note:
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacInitPhy(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL DoLoop) /* Should a Phy LoopBack be set-up? */
+{
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ switch (pPrt->PhyType) {
+ case SK_PHY_XMAC:
+ SkXmInitPhyXmac(pAC, IoC, Port, DoLoop);
+ break;
+ case SK_PHY_BCOM:
+ SkXmInitPhyBcom(pAC, IoC, Port, DoLoop);
+ break;
+ case SK_PHY_MARV_COPPER:
+ case SK_PHY_MARV_FIBER:
+ SkGmInitPhyMarv(pAC, IoC, Port, DoLoop);
+ break;
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ SkXmInitPhyLone(pAC, IoC, Port, DoLoop);
+ break;
+ case SK_PHY_NAT:
+ SkXmInitPhyNat(pAC, IoC, Port, DoLoop);
+ break;
+#endif /* OTHER_PHY */
+ }
+} /* SkMacInitPhy */
+
+
+#ifndef SK_DIAG
+/******************************************************************************
+ *
+ * SkXmAutoNegLipaXmac() - Decides whether Link Partner could do auto-neg
+ *
+ * This function analyses the Interrupt status word. If any of the
+ * Auto-negotiating interrupt bits are set, the PLipaAutoNeg variable
+ * is set true.
+ */
+void SkXmAutoNegLipaXmac(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_U16 IStatus) /* Interrupt Status word to analyse */
+{
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PLipaAutoNeg != SK_LIPA_AUTO &&
+ (IStatus & (XM_IS_LIPA_RC | XM_IS_RX_PAGE | XM_IS_AND)) != 0) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegLipa: AutoNeg detected on Port %d, IStatus=0x%04x\n",
+ Port, IStatus));
+ pPrt->PLipaAutoNeg = SK_LIPA_AUTO;
+ }
+} /* SkXmAutoNegLipaXmac */
+
+
+/******************************************************************************
+ *
+ * SkMacAutoNegLipaPhy() - Decides whether Link Partner could do auto-neg
+ *
+ * This function analyses the PHY status word.
+ * If any of the Auto-negotiating bits are set, the PLipaAutoNeg variable
+ * is set true.
+ */
+void SkMacAutoNegLipaPhy(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_U16 PhyStat) /* PHY Status word to analyse */
+{
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PLipaAutoNeg != SK_LIPA_AUTO &&
+ (PhyStat & PHY_ST_AN_OVER) != 0) {
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegLipa: AutoNeg detected on Port %d, PhyStat=0x%04x\n",
+ Port, PhyStat));
+ pPrt->PLipaAutoNeg = SK_LIPA_AUTO;
+ }
+} /* SkMacAutoNegLipaPhy */
+#endif /* SK_DIAG */
+
+
+/******************************************************************************
+ *
+ * SkXmAutoNegDoneXmac() - Auto-negotiation handling
+ *
+ * Description:
+ * This function handles the auto-negotiation if the Done bit is set.
+ *
+ * Returns:
+ * SK_AND_OK o.k.
+ * SK_AND_DUP_CAP Duplex capability error happened
+ * SK_AND_OTHER Other error happened
+ */
+static int SkXmAutoNegDoneXmac(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 ResAb; /* Resolved Ability */
+ SK_U16 LPAb; /* Link Partner Ability */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegDoneXmac, Port %d\n",Port));
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Get PHY parameters */
+ SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_AUNE_LP, &LPAb);
+ SkXmPhyRead(pAC, IoC, Port, PHY_XMAC_RES_ABI, &ResAb);
+
+ if ((LPAb & PHY_X_AN_RFB) != 0) {
+ /* At least one of the remote fault bit is set */
+ /* Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegFail: Remote fault bit set Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ return(SK_AND_OTHER);
+ }
+
+ /* Check Duplex mismatch */
+ if ((ResAb & (PHY_X_RS_HD | PHY_X_RS_FD)) == PHY_X_RS_FD) {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
+ }
+ else if ((ResAb & (PHY_X_RS_HD | PHY_X_RS_FD)) == PHY_X_RS_HD) {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
+ }
+ else {
+ /* Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegFail: Duplex mode mismatch Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ return(SK_AND_DUP_CAP);
+ }
+
+ /* Check PAUSE mismatch */
+ /* We are NOT using chapter 4.23 of the Xaqti manual */
+ /* We are using IEEE 802.3z/D5.0 Table 37-4 */
+ if ((pPrt->PFlowCtrlMode == SK_FLOW_MODE_SYMMETRIC ||
+ pPrt->PFlowCtrlMode == SK_FLOW_MODE_SYM_OR_REM) &&
+ (LPAb & PHY_X_P_SYM_MD) != 0) {
+ /* Symmetric PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
+ }
+ else if (pPrt->PFlowCtrlMode == SK_FLOW_MODE_SYM_OR_REM &&
+ (LPAb & PHY_X_RS_PAUSE) == PHY_X_P_ASYM_MD) {
+ /* Enable PAUSE receive, disable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
+ }
+ else if (pPrt->PFlowCtrlMode == SK_FLOW_MODE_LOC_SEND &&
+ (LPAb & PHY_X_RS_PAUSE) == PHY_X_P_BOTH_MD) {
+ /* Disable PAUSE receive, enable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
+ }
+ else {
+ /* PAUSE mismatch -> no PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
+ }
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
+
+ return(SK_AND_OK);
+} /* SkXmAutoNegDoneXmac */
+
+
+/******************************************************************************
+ *
+ * SkXmAutoNegDoneBcom() - Auto-negotiation handling
+ *
+ * Description:
+ * This function handles the auto-negotiation if the Done bit is set.
+ *
+ * Returns:
+ * SK_AND_OK o.k.
+ * SK_AND_DUP_CAP Duplex capability error happened
+ * SK_AND_OTHER Other error happened
+ */
+static int SkXmAutoNegDoneBcom(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 LPAb; /* Link Partner Ability */
+ SK_U16 AuxStat; /* Auxiliary Status */
+
+#if 0
+01-Sep-2000 RA;:;:
+ SK_U16 ResAb; /* Resolved Ability */
+#endif /* 0 */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegDoneBcom, Port %d\n", Port));
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Get PHY parameters */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &LPAb);
+#if 0
+01-Sep-2000 RA;:;:
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);
+#endif /* 0 */
+
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_STAT, &AuxStat);
+
+ if ((LPAb & PHY_B_AN_RF) != 0) {
+ /* Remote fault bit is set: Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegFail: Remote fault bit set Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ return(SK_AND_OTHER);
+ }
+
+ /* Check Duplex mismatch */
+ if ((AuxStat & PHY_B_AS_AN_RES_MSK) == PHY_B_RES_1000FD) {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
+ }
+ else if ((AuxStat & PHY_B_AS_AN_RES_MSK) == PHY_B_RES_1000HD) {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
+ }
+ else {
+ /* Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegFail: Duplex mode mismatch Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ return(SK_AND_DUP_CAP);
+ }
+
+#if 0
+01-Sep-2000 RA;:;:
+ /* Check Master/Slave resolution */
+ if ((ResAb & PHY_B_1000S_MSF) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Master/Slave Fault Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ pPrt->PMSStatus = SK_MS_STAT_FAULT;
+ return(SK_AND_OTHER);
+ }
+
+ pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
+ SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;
+#endif /* 0 */
+
+ /* Check PAUSE mismatch */
+ /* We are using IEEE 802.3z/D5.0 Table 37-4 */
+ if ((AuxStat & PHY_B_AS_PAUSE_MSK) == PHY_B_AS_PAUSE_MSK) {
+ /* Symmetric PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
+ }
+ else if ((AuxStat & PHY_B_AS_PAUSE_MSK) == PHY_B_AS_PRR) {
+ /* Enable PAUSE receive, disable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
+ }
+ else if ((AuxStat & PHY_B_AS_PAUSE_MSK) == PHY_B_AS_PRT) {
+ /* Disable PAUSE receive, enable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
+ }
+ else {
+ /* PAUSE mismatch -> no PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
+ }
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
+
+ return(SK_AND_OK);
+} /* SkXmAutoNegDoneBcom */
+
+
+/******************************************************************************
+ *
+ * SkGmAutoNegDoneMarv() - Auto-negotiation handling
+ *
+ * Description:
+ * This function handles the auto-negotiation if the Done bit is set.
+ *
+ * Returns:
+ * SK_AND_OK o.k.
+ * SK_AND_DUP_CAP Duplex capability error happened
+ * SK_AND_OTHER Other error happened
+ */
+static int SkGmAutoNegDoneMarv(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 LPAb; /* Link Partner Ability */
+ SK_U16 ResAb; /* Resolved Ability */
+ SK_U16 AuxStat; /* Auxiliary Status */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegDoneMarv, Port %d\n", Port));
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Get PHY parameters */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_AUNE_LP, &LPAb);
+
+ if ((LPAb & PHY_M_AN_RF) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegFail: Remote fault bit set Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ return(SK_AND_OTHER);
+ }
+
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_1000T_STAT, &ResAb);
+
+ /* Check Master/Slave resolution */
+ if ((ResAb & PHY_B_1000S_MSF) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Master/Slave Fault Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ pPrt->PMSStatus = SK_MS_STAT_FAULT;
+ return(SK_AND_OTHER);
+ }
+
+ pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?
+ (SK_U8)SK_MS_STAT_MASTER : (SK_U8)SK_MS_STAT_SLAVE;
+
+ /* Read PHY Specific Status */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_PHY_STAT, &AuxStat);
+
+ /* Check Speed & Duplex resolved */
+ if ((AuxStat & PHY_M_PS_SPDUP_RES) == 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegFail: Speed & Duplex not resolved Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_UNKNOWN;
+ return(SK_AND_DUP_CAP);
+ }
+
+ if ((AuxStat & PHY_M_PS_FULL_DUP) != 0) {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
+ }
+ else {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
+ }
+
+ /* Check PAUSE mismatch */
+ /* We are using IEEE 802.3z/D5.0 Table 37-4 */
+ if ((AuxStat & PHY_M_PS_PAUSE_MSK) == PHY_M_PS_PAUSE_MSK) {
+ /* Symmetric PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
+ }
+ else if ((AuxStat & PHY_M_PS_PAUSE_MSK) == PHY_M_PS_RX_P_EN) {
+ /* Enable PAUSE receive, disable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
+ }
+ else if ((AuxStat & PHY_M_PS_PAUSE_MSK) == PHY_M_PS_TX_P_EN) {
+ /* Disable PAUSE receive, enable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
+ }
+ else {
+ /* PAUSE mismatch -> no PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
+ }
+
+ /* set used link speed */
+ switch ((unsigned)(AuxStat & PHY_M_PS_SPEED_MSK)) {
+ case (unsigned)PHY_M_PS_SPEED_1000:
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_1000MBPS;
+ break;
+ case PHY_M_PS_SPEED_100:
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_100MBPS;
+ break;
+ default:
+ pPrt->PLinkSpeedUsed = SK_LSPEED_STAT_10MBPS;
+ }
+
+ return(SK_AND_OK);
+} /* SkGmAutoNegDoneMarv */
+
+
+#ifdef OTHER_PHY
+/******************************************************************************
+ *
+ * SkXmAutoNegDoneLone() - Auto-negotiation handling
+ *
+ * Description:
+ * This function handles the auto-negotiation if the Done bit is set.
+ *
+ * Returns:
+ * SK_AND_OK o.k.
+ * SK_AND_DUP_CAP Duplex capability error happened
+ * SK_AND_OTHER Other error happened
+ */
+static int SkXmAutoNegDoneLone(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 ResAb; /* Resolved Ability */
+ SK_U16 LPAb; /* Link Partner Ability */
+ SK_U16 QuickStat; /* Auxiliary Status */
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegDoneLone, Port %d\n",Port));
+ pPrt = &pAC->GIni.GP[Port];
+
+ /* Get PHY parameters */
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_AUNE_LP, &LPAb);
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_1000T_STAT, &ResAb);
+ SkXmPhyRead(pAC, IoC, Port, PHY_LONE_Q_STAT, &QuickStat);
+
+ if ((LPAb & PHY_L_AN_RF) != 0) {
+ /* Remote fault bit is set */
+ /* Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("AutoNegFail: Remote fault bit set Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ return(SK_AND_OTHER);
+ }
+
+ /* Check Duplex mismatch */
+ if ((QuickStat & PHY_L_QS_DUP_MOD) != 0) {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOFULL;
+ }
+ else {
+ pPrt->PLinkModeStatus = SK_LMODE_STAT_AUTOHALF;
+ }
+
+ /* Check Master/Slave resolution */
+ if ((ResAb & PHY_L_1000S_MSF) != 0) {
+ /* Error */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("Master/Slave Fault Port %d\n", Port));
+ pPrt->PAutoNegFail = SK_TRUE;
+ pPrt->PMSStatus = SK_MS_STAT_FAULT;
+ return(SK_AND_OTHER);
+ }
+ else if (ResAb & PHY_L_1000S_MSR) {
+ pPrt->PMSStatus = SK_MS_STAT_MASTER;
+ }
+ else {
+ pPrt->PMSStatus = SK_MS_STAT_SLAVE;
+ }
+
+ /* Check PAUSE mismatch */
+ /* We are using IEEE 802.3z/D5.0 Table 37-4 */
+ /* we must manually resolve the abilities here */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_NONE;
+ switch (pPrt->PFlowCtrlMode) {
+ case SK_FLOW_MODE_NONE:
+ /* default */
+ break;
+ case SK_FLOW_MODE_LOC_SEND:
+ if ((QuickStat & (PHY_L_QS_PAUSE | PHY_L_QS_AS_PAUSE)) ==
+ (PHY_L_QS_PAUSE | PHY_L_QS_AS_PAUSE)) {
+ /* Disable PAUSE receive, enable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_LOC_SEND;
+ }
+ break;
+ case SK_FLOW_MODE_SYMMETRIC:
+ if ((QuickStat & PHY_L_QS_PAUSE) != 0) {
+ /* Symmetric PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
+ }
+ break;
+ case SK_FLOW_MODE_SYM_OR_REM:
+ if ((QuickStat & (PHY_L_QS_PAUSE | PHY_L_QS_AS_PAUSE)) ==
+ PHY_L_QS_AS_PAUSE) {
+ /* Enable PAUSE receive, disable PAUSE transmit */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_REM_SEND;
+ }
+ else if ((QuickStat & PHY_L_QS_PAUSE) != 0) {
+ /* Symmetric PAUSE */
+ pPrt->PFlowCtrlStatus = SK_FLOW_STAT_SYMMETRIC;
+ }
+ break;
+ default:
+ SK_ERR_LOG(pAC, SK_ERRCL_SW | SK_ERRCL_INIT, SKERR_HWI_E016,
+ SKERR_HWI_E016MSG);
+ }
+
+ return(SK_AND_OK);
+} /* SkXmAutoNegDoneLone */
+
+
+/******************************************************************************
+ *
+ * SkXmAutoNegDoneNat() - Auto-negotiation handling
+ *
+ * Description:
+ * This function handles the auto-negotiation if the Done bit is set.
+ *
+ * Returns:
+ * SK_AND_OK o.k.
+ * SK_AND_DUP_CAP Duplex capability error happened
+ * SK_AND_OTHER Other error happened
+ */
+static int SkXmAutoNegDoneNat(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+/* todo: National */
+ return(SK_AND_OK);
+} /* SkXmAutoNegDoneNat */
+#endif /* OTHER_PHY */
+
+
+/******************************************************************************
+ *
+ * SkMacAutoNegDone() - Auto-negotiation handling
+ *
+ * Description: calls the auto-negotiation done routines dep. on board type
+ *
+ * Returns:
+ * SK_AND_OK o.k.
+ * SK_AND_DUP_CAP Duplex capability error happened
+ * SK_AND_OTHER Other error happened
+ */
+int SkMacAutoNegDone(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ int Rtv;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ switch (pPrt->PhyType) {
+ case SK_PHY_XMAC:
+ Rtv = SkXmAutoNegDoneXmac(pAC, IoC, Port);
+ break;
+ case SK_PHY_BCOM:
+ Rtv = SkXmAutoNegDoneBcom(pAC, IoC, Port);
+ break;
+ case SK_PHY_MARV_COPPER:
+ case SK_PHY_MARV_FIBER:
+ Rtv = SkGmAutoNegDoneMarv(pAC, IoC, Port);
+ break;
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ Rtv = SkXmAutoNegDoneLone(pAC, IoC, Port);
+ break;
+ case SK_PHY_NAT:
+ Rtv = SkXmAutoNegDoneNat(pAC, IoC, Port);
+ break;
+#endif /* OTHER_PHY */
+ default:
+ return(SK_AND_OTHER);
+ }
+
+ if (Rtv != SK_AND_OK) {
+ return(Rtv);
+ }
+
+ /* We checked everything and may now enable the link */
+ pPrt->PAutoNegFail = SK_FALSE;
+
+ SkMacRxTxEnable(pAC, IoC, Port);
+
+ return(SK_AND_OK);
+} /* SkMacAutoNegDone */
+
+
+/******************************************************************************
+ *
+ * SkXmSetRxTxEn() - Special Set Rx/Tx Enable and some features in XMAC
+ *
+ * Description:
+ * sets MAC or PHY LoopBack and Duplex Mode in the MMU Command Reg.
+ * enables Rx/Tx
+ *
+ * Returns: N/A
+ */
+static void SkXmSetRxTxEn(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+int Para) /* Parameter to set: MAC or PHY LoopBack, Duplex Mode */
+{
+ SK_U16 Word;
+
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
+
+ switch (Para & (SK_MAC_LOOPB_ON | SK_MAC_LOOPB_OFF)) {
+ case SK_MAC_LOOPB_ON:
+ Word |= XM_MMU_MAC_LB;
+ break;
+ case SK_MAC_LOOPB_OFF:
+ Word &= ~XM_MMU_MAC_LB;
+ break;
+ }
+
+ switch (Para & (SK_PHY_LOOPB_ON | SK_PHY_LOOPB_OFF)) {
+ case SK_PHY_LOOPB_ON:
+ Word |= XM_MMU_GMII_LOOP;
+ break;
+ case SK_PHY_LOOPB_OFF:
+ Word &= ~XM_MMU_GMII_LOOP;
+ break;
+ }
+
+ switch (Para & (SK_PHY_FULLD_ON | SK_PHY_FULLD_OFF)) {
+ case SK_PHY_FULLD_ON:
+ Word |= XM_MMU_GMII_FD;
+ break;
+ case SK_PHY_FULLD_OFF:
+ Word &= ~XM_MMU_GMII_FD;
+ break;
+ }
+
+ XM_OUT16(IoC, Port, XM_MMU_CMD, Word | XM_MMU_ENA_RX | XM_MMU_ENA_TX);
+
+ /* dummy read to ensure writing */
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
+
+} /* SkXmSetRxTxEn */
+
+
+/******************************************************************************
+ *
+ * SkGmSetRxTxEn() - Special Set Rx/Tx Enable and some features in GMAC
+ *
+ * Description:
+ * sets MAC LoopBack and Duplex Mode in the General Purpose Control Reg.
+ * enables Rx/Tx
+ *
+ * Returns: N/A
+ */
+static void SkGmSetRxTxEn(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+int Para) /* Parameter to set: MAC LoopBack, Duplex Mode */
+{
+ SK_U16 Ctrl;
+
+ GM_IN16(IoC, Port, GM_GP_CTRL, &Ctrl);
+
+ switch (Para & (SK_MAC_LOOPB_ON | SK_MAC_LOOPB_OFF)) {
+ case SK_MAC_LOOPB_ON:
+ Ctrl |= GM_GPCR_LOOP_ENA;
+ break;
+ case SK_MAC_LOOPB_OFF:
+ Ctrl &= ~GM_GPCR_LOOP_ENA;
+ break;
+ }
+
+ switch (Para & (SK_PHY_FULLD_ON | SK_PHY_FULLD_OFF)) {
+ case SK_PHY_FULLD_ON:
+ Ctrl |= GM_GPCR_DUP_FULL;
+ break;
+ case SK_PHY_FULLD_OFF:
+ Ctrl &= ~GM_GPCR_DUP_FULL;
+ break;
+ }
+
+ GM_OUT16(IoC, Port, GM_GP_CTRL, Ctrl | GM_GPCR_RX_ENA | GM_GPCR_TX_ENA);
+
+ /* dummy read to ensure writing */
+ GM_IN16(IoC, Port, GM_GP_CTRL, &Ctrl);
+
+} /* SkGmSetRxTxEn */
+
+
+/******************************************************************************
+ *
+ * SkMacSetRxTxEn() - Special Set Rx/Tx Enable and parameters
+ *
+ * Description: calls the Special Set Rx/Tx Enable routines dep. on board type
+ *
+ * Returns: N/A
+ */
+void SkMacSetRxTxEn(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+int Para)
+{
+ if (pAC->GIni.GIGenesis) {
+
+ SkXmSetRxTxEn(pAC, IoC, Port, Para);
+ }
+ else {
+
+ SkGmSetRxTxEn(pAC, IoC, Port, Para);
+ }
+
+} /* SkMacSetRxTxEn */
+
+
+/******************************************************************************
+ *
+ * SkMacRxTxEnable() - Enable Rx/Tx activity if port is up
+ *
+ * Description: enables Rx/Tx dep. on board type
+ *
+ * Returns:
+ * 0 o.k.
+ * != 0 Error happened
+ */
+int SkMacRxTxEnable(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 Reg; /* 16-bit register value */
+ SK_U16 IntMask; /* MAC interrupt mask */
+ SK_U16 SWord;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (!pPrt->PHWLinkUp) {
+ /* The Hardware link is NOT up */
+ return(0);
+ }
+
+ if ((pPrt->PLinkMode == SK_LMODE_AUTOHALF ||
+ pPrt->PLinkMode == SK_LMODE_AUTOFULL ||
+ pPrt->PLinkMode == SK_LMODE_AUTOBOTH) &&
+ pPrt->PAutoNegFail) {
+ /* Auto-negotiation is not done or failed */
+ return(0);
+ }
+
+ if (pAC->GIni.GIGenesis) {
+ /* set Duplex Mode and Pause Mode */
+ SkXmInitDupMd(pAC, IoC, Port);
+
+ SkXmInitPauseMd(pAC, IoC, Port);
+
+ /*
+ * Initialize the Interrupt Mask Register. Default IRQs are...
+ * - Link Asynchronous Event
+ * - Link Partner requests config
+ * - Auto Negotiation Done
+ * - Rx Counter Event Overflow
+ * - Tx Counter Event Overflow
+ * - Transmit FIFO Underrun
+ */
+ IntMask = XM_DEF_MSK;
+
+#ifdef DEBUG
+ /* add IRQ for Receive FIFO Overflow */
+ IntMask &= ~XM_IS_RXF_OV;
+#endif /* DEBUG */
+
+ if (pPrt->PhyType != SK_PHY_XMAC) {
+ /* disable GP0 interrupt bit */
+ IntMask |= XM_IS_INP_ASS;
+ }
+ XM_OUT16(IoC, Port, XM_IMSK, IntMask);
+
+ /* get MMU Command Reg. */
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Reg);
+
+ if (pPrt->PhyType != SK_PHY_XMAC &&
+ (pPrt->PLinkModeStatus == SK_LMODE_STAT_FULL ||
+ pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOFULL)) {
+ /* set to Full Duplex */
+ Reg |= XM_MMU_GMII_FD;
+ }
+
+ switch (pPrt->PhyType) {
+ case SK_PHY_BCOM:
+ /*
+ * Workaround BCOM Errata (#10523) for all BCom Phys
+ * Enable Power Management after link up
+ */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &SWord);
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL,
+ (SK_U16)(SWord & ~PHY_B_AC_DIS_PM));
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_INT_MASK, PHY_B_DEF_MSK);
+ break;
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_INT_ENAB, PHY_L_DEF_MSK);
+ break;
+ case SK_PHY_NAT:
+ /* todo National:
+ SkXmPhyWrite(pAC, IoC, Port, PHY_NAT_INT_MASK, PHY_N_DEF_MSK); */
+ /* no interrupts possible from National ??? */
+ break;
+#endif /* OTHER_PHY */
+ }
+
+ /* enable Rx/Tx */
+ XM_OUT16(IoC, Port, XM_MMU_CMD, Reg | XM_MMU_ENA_RX | XM_MMU_ENA_TX);
+ }
+ else {
+ /*
+ * Initialize the Interrupt Mask Register. Default IRQs are...
+ * - Rx Counter Event Overflow
+ * - Tx Counter Event Overflow
+ * - Transmit FIFO Underrun
+ */
+ IntMask = GMAC_DEF_MSK;
+
+#ifdef DEBUG
+ /* add IRQ for Receive FIFO Overrun */
+ IntMask |= GM_IS_RX_FF_OR;
+#endif /* DEBUG */
+
+ SK_OUT8(IoC, GMAC_IRQ_MSK, (SK_U8)IntMask);
+
+ /* get General Purpose Control */
+ GM_IN16(IoC, Port, GM_GP_CTRL, &Reg);
+
+ if (pPrt->PLinkModeStatus == SK_LMODE_STAT_FULL ||
+ pPrt->PLinkModeStatus == SK_LMODE_STAT_AUTOFULL) {
+ /* set to Full Duplex */
+ Reg |= GM_GPCR_DUP_FULL;
+ }
+
+ /* enable Rx/Tx */
+ GM_OUT16(IoC, Port, GM_GP_CTRL, Reg | GM_GPCR_RX_ENA | GM_GPCR_TX_ENA);
+
+#ifndef VCPU
+ /* Enable all PHY interrupts */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK);
+#endif /* VCPU */
+ }
+
+ return(0);
+
+} /* SkMacRxTxEnable */
+
+
+/******************************************************************************
+ *
+ * SkMacRxTxDisable() - Disable Receiver and Transmitter
+ *
+ * Description: disables Rx/Tx dep. on board type
+ *
+ * Returns: N/A
+ */
+void SkMacRxTxDisable(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U16 Word;
+
+ if (pAC->GIni.GIGenesis) {
+
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
+
+ XM_OUT16(IoC, Port, XM_MMU_CMD, Word & ~(XM_MMU_ENA_RX | XM_MMU_ENA_TX));
+
+ /* dummy read to ensure writing */
+ XM_IN16(IoC, Port, XM_MMU_CMD, &Word);
+ }
+ else {
+
+ GM_IN16(IoC, Port, GM_GP_CTRL, &Word);
+
+ GM_OUT16(IoC, Port, GM_GP_CTRL, Word & ~(GM_GPCR_RX_ENA | GM_GPCR_TX_ENA));
+
+ /* dummy read to ensure writing */
+ GM_IN16(IoC, Port, GM_GP_CTRL, &Word);
+ }
+} /* SkMacRxTxDisable */
+
+
+/******************************************************************************
+ *
+ * SkMacIrqDisable() - Disable IRQ from MAC
+ *
+ * Description: sets the IRQ-mask to disable IRQ dep. on board type
+ *
+ * Returns: N/A
+ */
+void SkMacIrqDisable(
+SK_AC *pAC, /* Adapter Context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 Word;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pAC->GIni.GIGenesis) {
+
+ /* disable all XMAC IRQs */
+ XM_OUT16(IoC, Port, XM_IMSK, 0xffff);
+
+ /* Disable all PHY interrupts */
+ switch (pPrt->PhyType) {
+ case SK_PHY_BCOM:
+ /* Make sure that PHY is initialized */
+ if (pPrt->PState != SK_PRT_RESET) {
+ /* NOT allowed if BCOM is in RESET state */
+ /* Workaround BCOM Errata (#10523) all BCom */
+ /* Disable Power Management if link is down */
+ SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &Word);
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_AUX_CTRL,
+ (SK_U16)(Word | PHY_B_AC_DIS_PM));
+ SkXmPhyWrite(pAC, IoC, Port, PHY_BCOM_INT_MASK, 0xffff);
+ }
+ break;
+#ifdef OTHER_PHY
+ case SK_PHY_LONE:
+ SkXmPhyWrite(pAC, IoC, Port, PHY_LONE_INT_ENAB, 0);
+ break;
+ case SK_PHY_NAT:
+ /* todo: National
+ SkXmPhyWrite(pAC, IoC, Port, PHY_NAT_INT_MASK, 0xffff); */
+ break;
+#endif /* OTHER_PHY */
+ }
+ }
+ else {
+ /* disable all GMAC IRQs */
+ SK_OUT8(IoC, GMAC_IRQ_MSK, 0);
+
+#ifndef VCPU
+ /* Disable all PHY interrupts */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_INT_MASK, 0);
+#endif /* VCPU */
+ }
+} /* SkMacIrqDisable */
+
+
+#ifdef SK_DIAG
+/******************************************************************************
+ *
+ * SkXmSendCont() - Enable / Disable Send Continuous Mode
+ *
+ * Description: enable / disable Send Continuous Mode on XMAC
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmSendCont(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL Enable) /* Enable / Disable */
+{
+ SK_U32 MdReg;
+
+ XM_IN32(IoC, Port, XM_MODE, &MdReg);
+
+ if (Enable) {
+ MdReg |= XM_MD_TX_CONT;
+ }
+ else {
+ MdReg &= ~XM_MD_TX_CONT;
+ }
+ /* setup Mode Register */
+ XM_OUT32(IoC, Port, XM_MODE, MdReg);
+
+} /* SkXmSendCont*/
+
+/******************************************************************************
+ *
+ * SkMacTimeStamp() - Enable / Disable Time Stamp
+ *
+ * Description: enable / disable Time Stamp generation for Rx packets
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacTimeStamp(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL Enable) /* Enable / Disable */
+{
+ SK_U32 MdReg;
+ SK_U8 TimeCtrl;
+
+ if (pAC->GIni.GIGenesis) {
+
+ XM_IN32(IoC, Port, XM_MODE, &MdReg);
+
+ if (Enable) {
+ MdReg |= XM_MD_ATS;
+ }
+ else {
+ MdReg &= ~XM_MD_ATS;
+ }
+ /* setup Mode Register */
+ XM_OUT32(IoC, Port, XM_MODE, MdReg);
+ }
+ else {
+ if (Enable) {
+ TimeCtrl = GMT_ST_START | GMT_ST_CLR_IRQ;
+ }
+ else {
+ TimeCtrl = GMT_ST_STOP | GMT_ST_CLR_IRQ;
+ }
+ /* Start/Stop Time Stamp Timer */
+ SK_OUT8(pAC, GMAC_TI_ST_CTRL, TimeCtrl);
+ }
+} /* SkMacTimeStamp*/
+
+#else /* SK_DIAG */
+
+/******************************************************************************
+ *
+ * SkXmIrq() - Interrupt Service Routine
+ *
+ * Description: services an Interrupt Request of the XMAC
+ *
+ * Note:
+ * With an external PHY, some interrupt bits are not meaningfull any more:
+ * - LinkAsyncEvent (bit #14) XM_IS_LNK_AE
+ * - LinkPartnerReqConfig (bit #10) XM_IS_LIPA_RC
+ * - Page Received (bit #9) XM_IS_RX_PAGE
+ * - NextPageLoadedForXmt (bit #8) XM_IS_TX_PAGE
+ * - AutoNegDone (bit #7) XM_IS_AND
+ * Also probably not valid any more is the GP0 input bit:
+ * - GPRegisterBit0set XM_IS_INP_ASS
+ *
+ * Returns:
+ * nothing
+ */
+void SkXmIrq(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_EVPARA Para;
+ SK_U16 IStatus; /* Interrupt status read from the XMAC */
+ SK_U16 IStatus2;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ XM_IN16(IoC, Port, XM_ISRC, &IStatus);
+
+ /* LinkPartner Auto-negable? */
+ if (pPrt->PhyType == SK_PHY_XMAC) {
+ SkXmAutoNegLipaXmac(pAC, IoC, Port, IStatus);
+ }
+ else {
+ /* mask bits that are not used with ext. PHY */
+ IStatus &= ~(XM_IS_LNK_AE | XM_IS_LIPA_RC |
+ XM_IS_RX_PAGE | XM_IS_TX_PAGE |
+ XM_IS_AND | XM_IS_INP_ASS);
+ }
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("XmacIrq Port %d Isr 0x%04x\n", Port, IStatus));
+
+ if (!pPrt->PHWLinkUp) {
+ /* Spurious XMAC interrupt */
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("SkXmIrq: spurious interrupt on Port %d\n", Port));
+ return;
+ }
+
+ if ((IStatus & XM_IS_INP_ASS) != 0) {
+ /* Reread ISR Register if link is not in sync */
+ XM_IN16(IoC, Port, XM_ISRC, &IStatus2);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("SkXmIrq: Link async. Double check Port %d 0x%04x 0x%04x\n",
+ Port, IStatus, IStatus2));
+ IStatus &= ~XM_IS_INP_ASS;
+ IStatus |= IStatus2;
+ }
+
+ if ((IStatus & XM_IS_LNK_AE) != 0) {
+ /* not used, GP0 is used instead */
+ }
+
+ if ((IStatus & XM_IS_TX_ABORT) != 0) {
+ /* not used */
+ }
+
+ if ((IStatus & XM_IS_FRC_INT) != 0) {
+ /* not used, use ASIC IRQ instead if needed */
+ }
+
+ if ((IStatus & (XM_IS_INP_ASS | XM_IS_LIPA_RC | XM_IS_RX_PAGE)) != 0) {
+ SkHWLinkDown(pAC, IoC, Port);
+
+ /* Signal to RLMT */
+ Para.Para32[0] = (SK_U32)Port;
+ SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_LINK_DOWN, Para);
+
+ /* Start workaround Errata #2 timer */
+ SkTimerStart(pAC, IoC, &pPrt->PWaTimer, SK_WA_INA_TIME,
+ SKGE_HWAC, SK_HWEV_WATIM, Para);
+ }
+
+ if ((IStatus & XM_IS_RX_PAGE) != 0) {
+ /* not used */
+ }
+
+ if ((IStatus & XM_IS_TX_PAGE) != 0) {
+ /* not used */
+ }
+
+ if ((IStatus & XM_IS_AND) != 0) {
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("SkXmIrq: AND on link that is up Port %d\n", Port));
+ }
+
+ if ((IStatus & XM_IS_TSC_OV) != 0) {
+ /* not used */
+ }
+
+ /* Combined Tx & Rx Counter Overflow SIRQ Event */
+ if ((IStatus & (XM_IS_RXC_OV | XM_IS_TXC_OV)) != 0) {
+ Para.Para32[0] = (SK_U32)Port;
+ Para.Para32[1] = (SK_U32)IStatus;
+ SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_SIRQ_OVERFLOW, Para);
+ }
+
+ if ((IStatus & XM_IS_RXF_OV) != 0) {
+ /* normal situation -> no effect */
+#ifdef DEBUG
+ pPrt->PRxOverCnt++;
+#endif /* DEBUG */
+ }
+
+ if ((IStatus & XM_IS_TXF_UR) != 0) {
+ /* may NOT happen -> error log */
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E020, SKERR_SIRQ_E020MSG);
+ }
+
+ if ((IStatus & XM_IS_TX_COMP) != 0) {
+ /* not served here */
+ }
+
+ if ((IStatus & XM_IS_RX_COMP) != 0) {
+ /* not served here */
+ }
+} /* SkXmIrq */
+
+
+/******************************************************************************
+ *
+ * SkGmIrq() - Interrupt Service Routine
+ *
+ * Description: services an Interrupt Request of the GMAC
+ *
+ * Note:
+ *
+ * Returns:
+ * nothing
+ */
+void SkGmIrq(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_EVPARA Para;
+ SK_U8 IStatus; /* Interrupt status */
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ SK_IN8(IoC, GMAC_IRQ_SRC, &IStatus);
+
+ /* LinkPartner Auto-negable? */
+ SkMacAutoNegLipaPhy(pAC, IoC, Port, IStatus);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,
+ ("GmacIrq Port %d Isr 0x%04x\n", Port, IStatus));
+
+ /* Combined Tx & Rx Counter Overflow SIRQ Event */
+ if (IStatus & (GM_IS_RX_CO_OV | GM_IS_TX_CO_OV)) {
+ /* these IRQs will be cleared by reading GMACs register */
+ Para.Para32[0] = (SK_U32)Port;
+ Para.Para32[1] = (SK_U32)IStatus;
+ SkPnmiEvent(pAC, IoC, SK_PNMI_EVT_SIRQ_OVERFLOW, Para);
+ }
+
+ if (IStatus & GM_IS_RX_FF_OR) {
+ /* clear GMAC Rx FIFO Overrun IRQ */
+ SK_OUT8(IoC, MR_ADDR(Port, RX_GMF_CTRL_T), (SK_U8)GMF_CLI_RX_FO);
+#ifdef DEBUG
+ pPrt->PRxOverCnt++;
+#endif /* DEBUG */
+ }
+
+ if (IStatus & GM_IS_TX_FF_UR) {
+ /* clear GMAC Tx FIFO Underrun IRQ */
+ SK_OUT8(IoC, MR_ADDR(Port, TX_GMF_CTRL_T), (SK_U8)GMF_CLI_TX_FU);
+ /* may NOT happen -> error log */
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E020, SKERR_SIRQ_E020MSG);
+ }
+
+ if (IStatus & GM_IS_TX_COMPL) {
+ /* not served here */
+ }
+
+ if (IStatus & GM_IS_RX_COMPL) {
+ /* not served here */
+ }
+} /* SkGmIrq */
+
+/******************************************************************************
+ *
+ * SkMacIrq() - Interrupt Service Routine for MAC
+ *
+ * Description: calls the Interrupt Service Routine dep. on board type
+ *
+ * Returns:
+ * nothing
+ */
+void SkMacIrq(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port) /* Port Index (MAC_1 + n) */
+{
+
+ if (pAC->GIni.GIGenesis) {
+ /* IRQ from XMAC */
+ SkXmIrq(pAC, IoC, Port);
+ }
+ else {
+ /* IRQ from GMAC */
+ SkGmIrq(pAC, IoC, Port);
+ }
+} /* SkMacIrq */
+
+#endif /* !SK_DIAG */
+
+/******************************************************************************
+ *
+ * SkXmUpdateStats() - Force the XMAC to output the current statistic
+ *
+ * Description:
+ * The XMAC holds its statistic internally. To obtain the current
+ * values a command must be sent so that the statistic data will
+ * be written to a predefined memory area on the adapter.
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkXmUpdateStats(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_GEPORT *pPrt;
+ SK_U16 StatReg;
+ int WaitIndex;
+
+ pPrt = &pAC->GIni.GP[Port];
+ WaitIndex = 0;
+
+ /* Send an update command to XMAC specified */
+ XM_OUT16(IoC, Port, XM_STAT_CMD, XM_SC_SNP_TXC | XM_SC_SNP_RXC);
+
+ /*
+ * It is an auto-clearing register. If the command bits
+ * went to zero again, the statistics are transferred.
+ * Normally the command should be executed immediately.
+ * But just to be sure we execute a loop.
+ */
+ do {
+
+ XM_IN16(IoC, Port, XM_STAT_CMD, &StatReg);
+
+ if (++WaitIndex > 10) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_HWI_E021, SKERR_HWI_E021MSG);
+
+ return(1);
+ }
+ } while ((StatReg & (XM_SC_SNP_TXC | XM_SC_SNP_RXC)) != 0);
+
+ return(0);
+} /* SkXmUpdateStats */
+
+/******************************************************************************
+ *
+ * SkGmUpdateStats() - Force the GMAC to output the current statistic
+ *
+ * Description:
+ * Empty function for GMAC. Statistic data is accessible in direct way.
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkGmUpdateStats(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port) /* Port Index (MAC_1 + n) */
+{
+ return(0);
+}
+
+/******************************************************************************
+ *
+ * SkXmMacStatistic() - Get XMAC counter value
+ *
+ * Description:
+ * Gets the 32bit counter value. Except for the octet counters
+ * the lower 32bit are counted in hardware and the upper 32bit
+ * must be counted in software by monitoring counter overflow interrupts.
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkXmMacStatistic(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port, /* Port Index (MAC_1 + n) */
+SK_U16 StatAddr, /* MIB counter base address */
+SK_U32 *pVal) /* ptr to return statistic value */
+{
+ if ((StatAddr < XM_TXF_OK) || (StatAddr > XM_RXF_MAX_SZ)) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E022, SKERR_HWI_E022MSG);
+
+ return(1);
+ }
+
+ XM_IN32(IoC, Port, StatAddr, pVal);
+
+ return(0);
+} /* SkXmMacStatistic */
+
+/******************************************************************************
+ *
+ * SkGmMacStatistic() - Get GMAC counter value
+ *
+ * Description:
+ * Gets the 32bit counter value. Except for the octet counters
+ * the lower 32bit are counted in hardware and the upper 32bit
+ * must be counted in software by monitoring counter overflow interrupts.
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkGmMacStatistic(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port, /* Port Index (MAC_1 + n) */
+SK_U16 StatAddr, /* MIB counter base address */
+SK_U32 *pVal) /* ptr to return statistic value */
+{
+
+ if ((StatAddr < GM_RXF_UC_OK) || (StatAddr > GM_TXE_FIFO_UR)) {
+
+ SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_HWI_E022, SKERR_HWI_E022MSG);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("SkGmMacStat: wrong MIB counter 0x%04X\n", StatAddr));
+ return(1);
+ }
+
+ GM_IN32(IoC, Port, StatAddr, pVal);
+
+ return(0);
+} /* SkGmMacStatistic */
+
+/******************************************************************************
+ *
+ * SkXmResetCounter() - Clear MAC statistic counter
+ *
+ * Description:
+ * Force the XMAC to clear its statistic counter.
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkXmResetCounter(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port) /* Port Index (MAC_1 + n) */
+{
+ XM_OUT16(IoC, Port, XM_STAT_CMD, XM_SC_CLR_RXC | XM_SC_CLR_TXC);
+ /* Clear two times according to Errata #3 */
+ XM_OUT16(IoC, Port, XM_STAT_CMD, XM_SC_CLR_RXC | XM_SC_CLR_TXC);
+
+ return(0);
+} /* SkXmResetCounter */
+
+/******************************************************************************
+ *
+ * SkGmResetCounter() - Clear MAC statistic counter
+ *
+ * Description:
+ * Force GMAC to clear its statistic counter.
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkGmResetCounter(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port) /* Port Index (MAC_1 + n) */
+{
+ SK_U16 Reg; /* Phy Address Register */
+ SK_U16 Word;
+ int i;
+
+ GM_IN16(IoC, Port, GM_PHY_ADDR, &Reg);
+
+#ifndef VCPU
+ /* set MIB Clear Counter Mode */
+ GM_OUT16(IoC, Port, GM_PHY_ADDR, Reg | GM_PAR_MIB_CLR);
+
+ /* read all MIB Counters with Clear Mode set */
+ for (i = 0; i < GM_MIB_CNT_SIZE; i++) {
+ /* the reset is performed only when the lower 16 bits are read */
+ GM_IN16(IoC, Port, GM_MIB_CNT_BASE + 8*i, &Word);
+ }
+
+ /* clear MIB Clear Counter Mode */
+ GM_OUT16(IoC, Port, GM_PHY_ADDR, Reg);
+#endif /* !VCPU */
+
+ return(0);
+} /* SkGmResetCounter */
+
+/******************************************************************************
+ *
+ * SkXmOverflowStatus() - Gets the status of counter overflow interrupt
+ *
+ * Description:
+ * Checks the source causing an counter overflow interrupt. On success the
+ * resulting counter overflow status is written to <pStatus>, whereas the
+ * upper dword stores the XMAC ReceiveCounterEvent register and the lower
+ * dword the XMAC TransmitCounterEvent register.
+ *
+ * Note:
+ * For XMAC the interrupt source is a self-clearing register, so the source
+ * must be checked only once. SIRQ module does another check to be sure
+ * that no interrupt get lost during process time.
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkXmOverflowStatus(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port, /* Port Index (MAC_1 + n) */
+SK_U16 IStatus, /* Interupt Status from MAC */
+SK_U64 *pStatus) /* ptr for return overflow status value */
+{
+ SK_U64 Status; /* Overflow status */
+ SK_U32 RegVal;
+
+ Status = 0;
+
+ if ((IStatus & XM_IS_RXC_OV) != 0) {
+
+ XM_IN32(IoC, Port, XM_RX_CNT_EV, &RegVal);
+ Status |= (SK_U64)RegVal << 32;
+ }
+
+ if ((IStatus & XM_IS_TXC_OV) != 0) {
+
+ XM_IN32(IoC, Port, XM_TX_CNT_EV, &RegVal);
+ Status |= (SK_U64)RegVal;
+ }
+
+ *pStatus = Status;
+
+ return(0);
+} /* SkXmOverflowStatus */
+
+
+/******************************************************************************
+ *
+ * SkGmOverflowStatus() - Gets the status of counter overflow interrupt
+ *
+ * Description:
+ * Checks the source causing an counter overflow interrupt. On success the
+ * resulting counter overflow status is written to <pStatus>, whereas the
+ * the following bit coding is used:
+ * 63:56 - unused
+ * 55:48 - TxRx interrupt register bit7:0
+ * 32:47 - Rx interrupt register
+ * 31:24 - unused
+ * 23:16 - TxRx interrupt register bit15:8
+ * 15:0 - Tx interrupt register
+ *
+ * Returns:
+ * 0: success
+ * 1: something went wrong
+ */
+int SkGmOverflowStatus(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+unsigned int Port, /* Port Index (MAC_1 + n) */
+SK_U16 IStatus, /* Interupt Status from MAC */
+SK_U64 *pStatus) /* ptr for return overflow status value */
+{
+ SK_U64 Status; /* Overflow status */
+ SK_U16 RegVal;
+
+ Status = 0;
+
+ if ((IStatus & GM_IS_RX_CO_OV) != 0) {
+ /* this register is self-clearing after read */
+ GM_IN16(IoC, Port, GM_RX_IRQ_SRC, &RegVal);
+ Status |= (SK_U64)RegVal << 32;
+ }
+
+ if ((IStatus & GM_IS_TX_CO_OV) != 0) {
+ /* this register is self-clearing after read */
+ GM_IN16(IoC, Port, GM_TX_IRQ_SRC, &RegVal);
+ Status |= (SK_U64)RegVal;
+ }
+
+ /* this register is self-clearing after read */
+ GM_IN16(IoC, Port, GM_TR_IRQ_SRC, &RegVal);
+ /* Rx overflow interrupt register bits (LoByte)*/
+ Status |= (SK_U64)((SK_U8)RegVal) << 48;
+ /* Tx overflow interrupt register bits (HiByte)*/
+ Status |= (SK_U64)(RegVal >> 8) << 16;
+
+ *pStatus = Status;
+
+ return(0);
+} /* SkGmOverflowStatus */
+
+/******************************************************************************
+ *
+ * SkGmCableDiagStatus() - Starts / Gets status of cable diagnostic test
+ *
+ * Description:
+ * starts the cable diagnostic test if 'StartTest' is true
+ * gets the results if 'StartTest' is true
+ *
+ * NOTE: this test is meaningful only when link is down
+ *
+ * Returns:
+ * 0: success
+ * 1: no YUKON copper
+ * 2: test in progress
+ */
+int SkGmCableDiagStatus(
+SK_AC *pAC, /* adapter context */
+SK_IOC IoC, /* IO context */
+int Port, /* Port Index (MAC_1 + n) */
+SK_BOOL StartTest) /* flag for start / get result */
+{
+ int i;
+ SK_U16 RegVal;
+ SK_GEPORT *pPrt;
+
+ pPrt = &pAC->GIni.GP[Port];
+
+ if (pPrt->PhyType != SK_PHY_MARV_COPPER) {
+
+ return(1);
+ }
+
+ if (StartTest) {
+ /* only start the cable test */
+ if ((pPrt->PhyId1 & PHY_I1_REV_MSK) < 4) {
+ /* apply TDR workaround from Marvell */
+ SkGmPhyWrite(pAC, IoC, Port, 29, 0x001e);
+
+ SkGmPhyWrite(pAC, IoC, Port, 30, 0xcc00);
+ SkGmPhyWrite(pAC, IoC, Port, 30, 0xc800);
+ SkGmPhyWrite(pAC, IoC, Port, 30, 0xc400);
+ SkGmPhyWrite(pAC, IoC, Port, 30, 0xc000);
+ SkGmPhyWrite(pAC, IoC, Port, 30, 0xc100);
+ }
+
+ /* set address to 0 for MDI[0] */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_ADR, 0);
+
+ /* Read Cable Diagnostic Reg */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CABLE_DIAG, &RegVal);
+
+ /* start Cable Diagnostic Test */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_CABLE_DIAG,
+ (SK_U16)(RegVal | PHY_M_CABD_ENA_TEST));
+
+ return(0);
+ }
+
+ /* Read Cable Diagnostic Reg */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CABLE_DIAG, &RegVal);
+
+ SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,
+ ("PHY Cable Diag.=0x%04X\n", RegVal));
+
+ if ((RegVal & PHY_M_CABD_ENA_TEST) != 0) {
+ /* test is running */
+ return(2);
+ }
+
+ /* get the test results */
+ for (i = 0; i < 4; i++) {
+ /* set address to i for MDI[i] */
+ SkGmPhyWrite(pAC, IoC, Port, PHY_MARV_EXT_ADR, (SK_U16)i);
+
+ /* get Cable Diagnostic values */
+ SkGmPhyRead(pAC, IoC, Port, PHY_MARV_CABLE_DIAG, &RegVal);
+
+ pPrt->PMdiPairLen[i] = (SK_U8)(RegVal & PHY_M_CABD_DIST_MSK);
+
+ pPrt->PMdiPairSts[i] = (SK_U8)((RegVal & PHY_M_CABD_STAT_MSK) >> 13);
+ }
+
+ return(0);
+} /* SkGmCableDiagStatus */
+
+/* End of file */
diff -Naur u-boot-2009.03_orig/drivers/pci/CVS/Entries u-boot-2009.03/drivers/pci/CVS/Entries
--- u-boot-2009.03_orig/drivers/pci/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pci/CVS/Entries 2009-03-25 15:58:03.246750400 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_pci_init.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_auto.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_indirect.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_ixp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_sh4.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_sh7751.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_sh7780.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsi108_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/w83c553f.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/pci/CVS/Entries.Extra u-boot-2009.03/drivers/pci/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/pci/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pci/CVS/Entries.Extra 2009-03-25 15:58:03.246750400 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019730/
+/fsl_pci_init.c///1238019730/
+/pci.c///1238019730/
+/pci_auto.c///1238019730/
+/pci_indirect.c///1238019730/
+/pci_ixp.c///1238019730/
+/pci_sh4.c///1238019730/
+/pci_sh7751.c///1238019730/
+/pci_sh7780.c///1238019730/
+/tsi108_pci.c///1238019730/
+/w83c553f.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/pci/CVS/Entries.Extra.Old u-boot-2009.03/drivers/pci/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/pci/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pci/CVS/Entries.Extra.Old 2009-03-25 15:25:31.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile///1238019730/
+/fsl_pci_init.c///1238019730/
+/pci.c///1238019730/
+/pci_auto.c///1238019730/
+/pci_indirect.c///1238019730/
+/pci_ixp.c///1238019730/
+/pci_sh4.c///1238019730/
+/pci_sh7751.c///1238019730/
+/pci_sh7780.c///1238019730/
+/tsi108_pci.c///1238019730/
+/w83c553f.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/pci/CVS/Entries.Old u-boot-2009.03/drivers/pci/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/pci/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pci/CVS/Entries.Old 2009-03-25 15:25:31.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/fsl_pci_init.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pci_auto.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pci_indirect.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pci_ixp.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pci_sh4.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pci_sh7751.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pci_sh7780.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/tsi108_pci.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/w83c553f.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/pci/CVS/Repository u-boot-2009.03/drivers/pci/CVS/Repository
--- u-boot-2009.03_orig/drivers/pci/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pci/CVS/Repository 2009-03-25 15:25:31.806114700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/pci
diff -Naur u-boot-2009.03_orig/drivers/pci/CVS/Root u-boot-2009.03/drivers/pci/CVS/Root
--- u-boot-2009.03_orig/drivers/pci/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pci/CVS/Root 2009-03-25 15:25:31.790489800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries u-boot-2009.03/drivers/pcmcia/CVS/Entries
--- u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pcmcia/CVS/Entries 2009-03-25 15:58:03.340499800 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i82365.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/marubun_pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xx_pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa_pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rpx_pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ti_pci1410a.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tqm8xx_pcmcia.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries.Extra u-boot-2009.03/drivers/pcmcia/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pcmcia/CVS/Entries.Extra 2009-03-25 15:58:03.356124700 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019730/
+/i82365.c///1238019730/
+/marubun_pcmcia.c///1238019730/
+/mpc8xx_pcmcia.c///1238019730/
+/pxa_pcmcia.c///1238019730/
+/rpx_pcmcia.c///1238019730/
+/ti_pci1410a.c///1238019730/
+/tqm8xx_pcmcia.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries.Extra.Old u-boot-2009.03/drivers/pcmcia/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pcmcia/CVS/Entries.Extra.Old 2009-03-25 15:25:32.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019730/
+/i82365.c///1238019730/
+/marubun_pcmcia.c///1238019730/
+/mpc8xx_pcmcia.c///1238019730/
+/pxa_pcmcia.c///1238019730/
+/rpx_pcmcia.c///1238019730/
+/ti_pci1410a.c///1238019730/
+/tqm8xx_pcmcia.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries.Old u-boot-2009.03/drivers/pcmcia/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/pcmcia/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pcmcia/CVS/Entries.Old 2009-03-25 15:25:32.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/i82365.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/marubun_pcmcia.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mpc8xx_pcmcia.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pxa_pcmcia.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/rpx_pcmcia.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ti_pci1410a.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/tqm8xx_pcmcia.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/pcmcia/CVS/Repository u-boot-2009.03/drivers/pcmcia/CVS/Repository
--- u-boot-2009.03_orig/drivers/pcmcia/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pcmcia/CVS/Repository 2009-03-25 15:25:31.977988600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/pcmcia
diff -Naur u-boot-2009.03_orig/drivers/pcmcia/CVS/Root u-boot-2009.03/drivers/pcmcia/CVS/Root
--- u-boot-2009.03_orig/drivers/pcmcia/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/pcmcia/CVS/Root 2009-03-25 15:25:31.977988600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/qe/CVS/Entries u-boot-2009.03/drivers/qe/CVS/Entries
--- u-boot-2009.03_orig/drivers/qe/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/qe/CVS/Entries 2009-03-25 15:58:03.449874100 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qe.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uccf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uccf.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uec_phy.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uec_phy.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/qe/CVS/Entries.Extra u-boot-2009.03/drivers/qe/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/qe/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/qe/CVS/Entries.Extra 2009-03-25 15:58:03.449874100 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019730/
+/fdt.c///1238019730/
+/qe.c///1238019730/
+/qe.h///1238019730/
+/uccf.c///1238019730/
+/uccf.h///1238019730/
+/uec.c///1238019730/
+/uec.h///1238019730/
+/uec_phy.c///1238019730/
+/uec_phy.h///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/qe/CVS/Entries.Extra.Old u-boot-2009.03/drivers/qe/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/qe/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/qe/CVS/Entries.Extra.Old 2009-03-25 15:25:32.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019730/
+/fdt.c///1238019730/
+/qe.c///1238019730/
+/qe.h///1238019730/
+/uccf.c///1238019730/
+/uccf.h///1238019730/
+/uec.c///1238019730/
+/uec.h///1238019730/
+/uec_phy.c///1238019730/
+/uec_phy.h///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/qe/CVS/Entries.Old u-boot-2009.03/drivers/qe/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/qe/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/qe/CVS/Entries.Old 2009-03-25 15:25:32.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/fdt.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/qe.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/qe.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/uccf.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/uccf.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/uec.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/uec.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/uec_phy.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/uec_phy.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/qe/CVS/Repository u-boot-2009.03/drivers/qe/CVS/Repository
--- u-boot-2009.03_orig/drivers/qe/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/qe/CVS/Repository 2009-03-25 15:25:32.134237600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/qe
diff -Naur u-boot-2009.03_orig/drivers/qe/CVS/Root u-boot-2009.03/drivers/qe/CVS/Root
--- u-boot-2009.03_orig/drivers/qe/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/qe/CVS/Root 2009-03-25 15:25:32.134237600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/rtc/CVS/Entries u-boot-2009.03/drivers/rtc/CVS/Entries
--- u-boot-2009.03_orig/drivers/rtc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/rtc/CVS/Entries 2009-03-25 15:58:03.606123100 -0700
@@ -0,0 +1,32 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_rtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/date.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds12887.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1302.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1306.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1307.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1337.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1374.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds1556.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds164x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds174x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds3231.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/isl1208.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m41t11.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m41t60.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m41t62.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m48t35ax.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/max6900.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mc13783-rtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mc146818.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcfrtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mk48t59.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcf8563.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pl031.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rs5c372.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rx8025.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c24x0_rtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/x1205.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/rtc/CVS/Entries.Extra u-boot-2009.03/drivers/rtc/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/rtc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/rtc/CVS/Entries.Extra 2009-03-25 15:58:03.621748000 -0700
@@ -0,0 +1,31 @@
+/Makefile///1238019730/
+/bfin_rtc.c///1238019730/
+/date.c///1238019730/
+/ds12887.c///1238019730/
+/ds1302.c///1238019730/
+/ds1306.c///1238019730/
+/ds1307.c///1238019730/
+/ds1337.c///1238019730/
+/ds1374.c///1238019730/
+/ds1556.c///1238019730/
+/ds164x.c///1238019730/
+/ds174x.c///1238019730/
+/ds3231.c///1238019730/
+/isl1208.c///1238019730/
+/m41t11.c///1238019730/
+/m41t60.c///1238019730/
+/m41t62.c///1238019730/
+/m48t35ax.c///1238019730/
+/max6900.c///1238019730/
+/mc13783-rtc.c///1238019730/
+/mc146818.c///1238019730/
+/mcfrtc.c///1238019730/
+/mk48t59.c///1238019730/
+/mpc5xxx.c///1238019730/
+/mpc8xx.c///1238019730/
+/pcf8563.c///1238019730/
+/pl031.c///1238019730/
+/rs5c372.c///1238019730/
+/rx8025.c///1238019730/
+/s3c24x0_rtc.c///1238019730/
+/x1205.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/rtc/CVS/Entries.Extra.Old u-boot-2009.03/drivers/rtc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/rtc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/rtc/CVS/Entries.Extra.Old 2009-03-25 15:25:32.000000000 -0700
@@ -0,0 +1,31 @@
+/Makefile///1238019730/
+/bfin_rtc.c///1238019730/
+/date.c///1238019730/
+/ds12887.c///1238019730/
+/ds1302.c///1238019730/
+/ds1306.c///1238019730/
+/ds1307.c///1238019730/
+/ds1337.c///1238019730/
+/ds1374.c///1238019730/
+/ds1556.c///1238019730/
+/ds164x.c///1238019730/
+/ds174x.c///1238019730/
+/ds3231.c///1238019730/
+/isl1208.c///1238019730/
+/m41t11.c///1238019730/
+/m41t60.c///1238019730/
+/m41t62.c///1238019730/
+/m48t35ax.c///1238019730/
+/max6900.c///1238019730/
+/mc13783-rtc.c///1238019730/
+/mc146818.c///1238019730/
+/mcfrtc.c///1238019730/
+/mk48t59.c///1238019730/
+/mpc5xxx.c///1238019730/
+/mpc8xx.c///1238019730/
+/pcf8563.c///1238019730/
+/pl031.c///1238019730/
+/rs5c372.c///1238019730/
+/rx8025.c///1238019730/
+/s3c24x0_rtc.c///1238019730/
+/x1205.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/rtc/CVS/Entries.Old u-boot-2009.03/drivers/rtc/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/rtc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/rtc/CVS/Entries.Old 2009-03-25 15:25:32.000000000 -0700
@@ -0,0 +1,32 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/bfin_rtc.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/date.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds12887.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds1302.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds1306.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds1307.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds1337.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds1374.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds1556.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds164x.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds174x.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/ds3231.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/isl1208.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/m41t11.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/m41t60.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/m41t62.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/m48t35ax.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/max6900.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mc13783-rtc.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mc146818.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mcfrtc.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mk48t59.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mpc5xxx.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mpc8xx.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pcf8563.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/pl031.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/rs5c372.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/rx8025.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/s3c24x0_rtc.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/x1205.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/rtc/CVS/Repository u-boot-2009.03/drivers/rtc/CVS/Repository
--- u-boot-2009.03_orig/drivers/rtc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/rtc/CVS/Repository 2009-03-25 15:25:32.290486600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/rtc
diff -Naur u-boot-2009.03_orig/drivers/rtc/CVS/Root u-boot-2009.03/drivers/rtc/CVS/Root
--- u-boot-2009.03_orig/drivers/rtc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/rtc/CVS/Root 2009-03-25 15:25:32.290486600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/serial/CVS/Entries u-boot-2009.03/drivers/serial/CVS/Entries
--- u-boot-2009.03_orig/drivers/serial/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/serial/CVS/Entries 2009-03-31 14:55:26.002406400 -0700
@@ -0,0 +1,21 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm_dcc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_usart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_usart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcfuart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c4510b_uart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c64xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_ixp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_max3100.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_pl01x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_pl01x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_sh.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_xuartlite.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbtty.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbtty.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vct.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns9750_serial.c/1.1.1.1/Tue Mar 31 21:55:25 2009//T1.1.1.1
+/s3c4510b_uart.c/1.1.1.1/Tue Mar 31 21:55:25 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/drivers/serial/CVS/Entries.Extra u-boot-2009.03/drivers/serial/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/serial/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/serial/CVS/Entries.Extra 2009-03-31 14:55:26.002406400 -0700
@@ -0,0 +1,20 @@
+/Makefile///1238019730/
+/arm_dcc.c///1238019730/
+/atmel_usart.c///1238019730/
+/atmel_usart.h///1238019730/
+/mcfuart.c///1238019730/
+/ns16550.c///1238019730/
+/s3c4510b_uart.h///1238019730/
+/s3c64xx.c///1238019730/
+/serial.c///1238019730/
+/serial_ixp.c///1238019730/
+/serial_max3100.c///1238019730/
+/serial_pl01x.c///1238019730/
+/serial_pl01x.h///1238019730/
+/serial_sh.c///1238019730/
+/serial_xuartlite.c///1238019730/
+/usbtty.c///1238019730/
+/usbtty.h///1238019730/
+/vct.c///1238019730/
+/ns9750_serial.c///1238019730/
+/s3c4510b_uart.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/serial/CVS/Entries.Extra.Old u-boot-2009.03/drivers/serial/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/serial/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/serial/CVS/Entries.Extra.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,20 @@
+/Makefile///1238019730/
+/arm_dcc.c///1238019730/
+/atmel_usart.c///1238019730/
+/atmel_usart.h///1238019730/
+/mcfuart.c///1238019730/
+/ns16550.c///1238019730/
+/s3c4510b_uart.h///1238019730/
+/s3c64xx.c///1238019730/
+/serial.c///1238019730/
+/serial_ixp.c///1238019730/
+/serial_max3100.c///1238019730/
+/serial_pl01x.c///1238019730/
+/serial_pl01x.h///1238019730/
+/serial_sh.c///1238019730/
+/serial_xuartlite.c///1238019730/
+/usbtty.c///1238019730/
+/usbtty.h///1238019730/
+/vct.c///1238019730/
+/ns9750_serial.c///1238028707/
+/s3c4510b_uart.c///1238028707/
diff -Naur u-boot-2009.03_orig/drivers/serial/CVS/Entries.Old u-boot-2009.03/drivers/serial/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/serial/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/serial/CVS/Entries.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,21 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm_dcc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_usart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_usart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcfuart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c4510b_uart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c64xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_ixp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_max3100.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_pl01x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_pl01x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_sh.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial_xuartlite.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbtty.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbtty.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vct.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns9750_serial.c/1.2/Thu Mar 26 00:51:47 2009//
+/s3c4510b_uart.c/1.2/Thu Mar 26 00:51:47 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/serial/CVS/Repository u-boot-2009.03/drivers/serial/CVS/Repository
--- u-boot-2009.03_orig/drivers/serial/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/serial/CVS/Repository 2009-03-25 15:25:32.681109100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/serial
diff -Naur u-boot-2009.03_orig/drivers/serial/CVS/Root u-boot-2009.03/drivers/serial/CVS/Root
--- u-boot-2009.03_orig/drivers/serial/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/serial/CVS/Root 2009-03-25 15:25:32.681109100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/serial/ns9750_serial.c u-boot-2009.03/drivers/serial/ns9750_serial.c
--- u-boot-2009.03_orig/drivers/serial/ns9750_serial.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/serial/ns9750_serial.c 2009-03-31 14:55:25.814908800 -0700
@@ -1,210 +1,210 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_serial.c,v 1.1 2004/02/16 10:37:20 mpietrek Exp $
- * @Author: Markus Pietrek
- * @Descr: Serial driver for the NS9750. Only one UART is supported yet.
- * @References: [1] NS9750 Hardware Reference/December 2003
- * @TODO: Implement Character GAP Timer when chip is fixed for PLL bypass
- *
- * 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
- *
- ***********************************************************************/
-
-#include <common.h>
-
-#include "ns9750_bbus.h" /* for GPIOs */
-#include "ns9750_ser.h" /* for serial configuration */
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#if !defined(CONFIG_CONS_INDEX)
-#error "No console index specified."
-#endif
-
-#define CONSOLE CONFIG_CONS_INDEX
-
-static unsigned int calcBitrateRegister( void );
-static unsigned int calcRxCharGapRegister( void );
-
-static char cCharsAvailable; /* Numbers of chars in unCharCache */
-static unsigned int unCharCache; /* unCharCache is only valid if
- * cCharsAvailable > 0 */
-
-/***********************************************************************
- * @Function: serial_init
- * @Return: 0
- * @Descr: configures GPIOs and UART. Requires BBUS Master Reset turned off
- ***********************************************************************/
-
-int serial_init( void )
-{
- unsigned int aunGPIOTxD[] = { 0, 8, 40, 44 };
- unsigned int aunGPIORxD[] = { 1, 9, 41, 45 };
-
- cCharsAvailable = 0;
-
- /* configure TxD and RxD pins for their special function */
- set_gpio_cfg_reg_val( aunGPIOTxD[ CONSOLE ],
- NS9750_GPIO_CFG_FUNC_0 | NS9750_GPIO_CFG_OUTPUT );
- set_gpio_cfg_reg_val( aunGPIORxD[ CONSOLE ],
- NS9750_GPIO_CFG_FUNC_0 | NS9750_GPIO_CFG_INPUT );
-
- /* configure serial engine */
- *get_ser_reg_addr_channel( NS9750_SER_CTRL_A, CONSOLE ) =
- NS9750_SER_CTRL_A_CE |
- NS9750_SER_CTRL_A_STOP |
- NS9750_SER_CTRL_A_WLS_8;
-
- serial_setbrg();
-
- *get_ser_reg_addr_channel( NS9750_SER_CTRL_B, CONSOLE ) =
- NS9750_SER_CTRL_B_RCGT;
-
- return 0;
-}
-
-/***********************************************************************
- * @Function: serial_putc
- * @Return: n/a
- * @Descr: writes one character to the FIFO. Blocks until FIFO is not full
- ***********************************************************************/
-
-void serial_putc( const char c )
-{
- if (c == '\n')
- serial_putc( '\r' );
-
- while (!(*get_ser_reg_addr_channel( NS9750_SER_STAT_A, CONSOLE) &
- NS9750_SER_STAT_A_TRDY ) ) {
- /* do nothing, wait for characters in FIFO sent */
- }
-
- *(volatile char*) get_ser_reg_addr_channel( NS9750_SER_FIFO,
- CONSOLE) = c;
-}
-
-/***********************************************************************
- * @Function: serial_puts
- * @Return: n/a
- * @Descr: writes non-zero string to the FIFO.
- ***********************************************************************/
-
-void serial_puts( const char *s )
-{
- while (*s) {
- serial_putc( *s++ );
- }
-}
-
-/***********************************************************************
- * @Function: serial_getc
- * @Return: the character read
- * @Descr: performs only 8bit accesses to the FIFO. No error handling
- ***********************************************************************/
-
-int serial_getc( void )
-{
- int i;
-
- while (!serial_tstc() ) {
- /* do nothing, wait for incoming characters */
- }
-
- /* at least one character in unCharCache */
- i = (int) (unCharCache & 0xff);
-
- unCharCache >>= 8;
- cCharsAvailable--;
-
- return i;
-}
-
-/***********************************************************************
- * @Function: serial_tstc
- * @Return: 0 if no input available, otherwise != 0
- * @Descr: checks for incoming FIFO not empty. Stores the incoming chars in
- * unCharCache and the numbers of characters in cCharsAvailable
- ***********************************************************************/
-
-int serial_tstc( void )
-{
- unsigned int unRegCache;
-
- if ( cCharsAvailable )
- return 1;
-
- unRegCache = *get_ser_reg_addr_channel( NS9750_SER_STAT_A,CONSOLE );
- if( unRegCache & NS9750_SER_STAT_A_RBC ) {
- *get_ser_reg_addr_channel( NS9750_SER_STAT_A, CONSOLE ) =
- NS9750_SER_STAT_A_RBC;
- unRegCache = *get_ser_reg_addr_channel( NS9750_SER_STAT_A,
- CONSOLE );
- }
-
- if ( unRegCache & NS9750_SER_STAT_A_RRDY ) {
- cCharsAvailable = (unRegCache & NS9750_SER_STAT_A_RXFDB_MA)>>20;
- if ( !cCharsAvailable )
- cCharsAvailable = 4;
-
- unCharCache = *get_ser_reg_addr_channel( NS9750_SER_FIFO,
- CONSOLE );
- return 1;
- }
-
- /* no chars available */
- return 0;
-}
-
-void serial_setbrg( void )
-{
- *get_ser_reg_addr_channel( NS9750_SER_BITRATE, CONSOLE ) =
- calcBitrateRegister();
- *get_ser_reg_addr_channel( NS9750_SER_RX_CHAR_TIMER, CONSOLE ) =
- calcRxCharGapRegister();
-}
-
-/***********************************************************************
- * @Function: calcBitrateRegister
- * @Return: value for the serial bitrate register
- * @Descr: register value depends on clock frequency and baudrate
- ***********************************************************************/
-
-static unsigned int calcBitrateRegister( void )
-{
- return ( NS9750_SER_BITRATE_EBIT |
- NS9750_SER_BITRATE_CLKMUX_BCLK |
- NS9750_SER_BITRATE_TMODE |
- NS9750_SER_BITRATE_TCDR_16 |
- NS9750_SER_BITRATE_RCDR_16 |
- ( ( ( ( CONFIG_SYS_CLK_FREQ / 8 ) / /* BBUS clock,[1] Fig. 38 */
- ( gd->baudrate * 16 ) ) - 1 ) &
- NS9750_SER_BITRATE_N_MA ) );
-}
-
-/***********************************************************************
- * @Function: calcRxCharGapRegister
- * @Return: value for the character gap timer register
- * @Descr: register value depends on clock frequency and baudrate. Currently 0
- * is used as there is a bug with the gap timer in PLL bypass mode.
- ***********************************************************************/
-
-static unsigned int calcRxCharGapRegister( void )
-{
- return NS9750_SER_RX_CHAR_TIMER_TRUN;
-}
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns9750_serial.c,v 1.1.1.1 2009/03/25 22:22:10 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @Descr: Serial driver for the NS9750. Only one UART is supported yet.
+ * @References: [1] NS9750 Hardware Reference/December 2003
+ * @TODO: Implement Character GAP Timer when chip is fixed for PLL bypass
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#include <common.h>
+
+#include "ns9750_bbus.h" /* for GPIOs */
+#include "ns9750_ser.h" /* for serial configuration */
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if !defined(CONFIG_CONS_INDEX)
+#error "No console index specified."
+#endif
+
+#define CONSOLE CONFIG_CONS_INDEX
+
+static unsigned int calcBitrateRegister( void );
+static unsigned int calcRxCharGapRegister( void );
+
+static char cCharsAvailable; /* Numbers of chars in unCharCache */
+static unsigned int unCharCache; /* unCharCache is only valid if
+ * cCharsAvailable > 0 */
+
+/***********************************************************************
+ * @Function: serial_init
+ * @Return: 0
+ * @Descr: configures GPIOs and UART. Requires BBUS Master Reset turned off
+ ***********************************************************************/
+
+int serial_init( void )
+{
+ unsigned int aunGPIOTxD[] = { 0, 8, 40, 44 };
+ unsigned int aunGPIORxD[] = { 1, 9, 41, 45 };
+
+ cCharsAvailable = 0;
+
+ /* configure TxD and RxD pins for their special function */
+ set_gpio_cfg_reg_val( aunGPIOTxD[ CONSOLE ],
+ NS9750_GPIO_CFG_FUNC_0 | NS9750_GPIO_CFG_OUTPUT );
+ set_gpio_cfg_reg_val( aunGPIORxD[ CONSOLE ],
+ NS9750_GPIO_CFG_FUNC_0 | NS9750_GPIO_CFG_INPUT );
+
+ /* configure serial engine */
+ *get_ser_reg_addr_channel( NS9750_SER_CTRL_A, CONSOLE ) =
+ NS9750_SER_CTRL_A_CE |
+ NS9750_SER_CTRL_A_STOP |
+ NS9750_SER_CTRL_A_WLS_8;
+
+ serial_setbrg();
+
+ *get_ser_reg_addr_channel( NS9750_SER_CTRL_B, CONSOLE ) =
+ NS9750_SER_CTRL_B_RCGT;
+
+ return 0;
+}
+
+/***********************************************************************
+ * @Function: serial_putc
+ * @Return: n/a
+ * @Descr: writes one character to the FIFO. Blocks until FIFO is not full
+ ***********************************************************************/
+
+void serial_putc( const char c )
+{
+ if (c == '\n')
+ serial_putc( '\r' );
+
+ while (!(*get_ser_reg_addr_channel( NS9750_SER_STAT_A, CONSOLE) &
+ NS9750_SER_STAT_A_TRDY ) ) {
+ /* do nothing, wait for characters in FIFO sent */
+ }
+
+ *(volatile char*) get_ser_reg_addr_channel( NS9750_SER_FIFO,
+ CONSOLE) = c;
+}
+
+/***********************************************************************
+ * @Function: serial_puts
+ * @Return: n/a
+ * @Descr: writes non-zero string to the FIFO.
+ ***********************************************************************/
+
+void serial_puts( const char *s )
+{
+ while (*s) {
+ serial_putc( *s++ );
+ }
+}
+
+/***********************************************************************
+ * @Function: serial_getc
+ * @Return: the character read
+ * @Descr: performs only 8bit accesses to the FIFO. No error handling
+ ***********************************************************************/
+
+int serial_getc( void )
+{
+ int i;
+
+ while (!serial_tstc() ) {
+ /* do nothing, wait for incoming characters */
+ }
+
+ /* at least one character in unCharCache */
+ i = (int) (unCharCache & 0xff);
+
+ unCharCache >>= 8;
+ cCharsAvailable--;
+
+ return i;
+}
+
+/***********************************************************************
+ * @Function: serial_tstc
+ * @Return: 0 if no input available, otherwise != 0
+ * @Descr: checks for incoming FIFO not empty. Stores the incoming chars in
+ * unCharCache and the numbers of characters in cCharsAvailable
+ ***********************************************************************/
+
+int serial_tstc( void )
+{
+ unsigned int unRegCache;
+
+ if ( cCharsAvailable )
+ return 1;
+
+ unRegCache = *get_ser_reg_addr_channel( NS9750_SER_STAT_A,CONSOLE );
+ if( unRegCache & NS9750_SER_STAT_A_RBC ) {
+ *get_ser_reg_addr_channel( NS9750_SER_STAT_A, CONSOLE ) =
+ NS9750_SER_STAT_A_RBC;
+ unRegCache = *get_ser_reg_addr_channel( NS9750_SER_STAT_A,
+ CONSOLE );
+ }
+
+ if ( unRegCache & NS9750_SER_STAT_A_RRDY ) {
+ cCharsAvailable = (unRegCache & NS9750_SER_STAT_A_RXFDB_MA)>>20;
+ if ( !cCharsAvailable )
+ cCharsAvailable = 4;
+
+ unCharCache = *get_ser_reg_addr_channel( NS9750_SER_FIFO,
+ CONSOLE );
+ return 1;
+ }
+
+ /* no chars available */
+ return 0;
+}
+
+void serial_setbrg( void )
+{
+ *get_ser_reg_addr_channel( NS9750_SER_BITRATE, CONSOLE ) =
+ calcBitrateRegister();
+ *get_ser_reg_addr_channel( NS9750_SER_RX_CHAR_TIMER, CONSOLE ) =
+ calcRxCharGapRegister();
+}
+
+/***********************************************************************
+ * @Function: calcBitrateRegister
+ * @Return: value for the serial bitrate register
+ * @Descr: register value depends on clock frequency and baudrate
+ ***********************************************************************/
+
+static unsigned int calcBitrateRegister( void )
+{
+ return ( NS9750_SER_BITRATE_EBIT |
+ NS9750_SER_BITRATE_CLKMUX_BCLK |
+ NS9750_SER_BITRATE_TMODE |
+ NS9750_SER_BITRATE_TCDR_16 |
+ NS9750_SER_BITRATE_RCDR_16 |
+ ( ( ( ( CONFIG_SYS_CLK_FREQ / 8 ) / /* BBUS clock,[1] Fig. 38 */
+ ( gd->baudrate * 16 ) ) - 1 ) &
+ NS9750_SER_BITRATE_N_MA ) );
+}
+
+/***********************************************************************
+ * @Function: calcRxCharGapRegister
+ * @Return: value for the character gap timer register
+ * @Descr: register value depends on clock frequency and baudrate. Currently 0
+ * is used as there is a bug with the gap timer in PLL bypass mode.
+ ***********************************************************************/
+
+static unsigned int calcRxCharGapRegister( void )
+{
+ return NS9750_SER_RX_CHAR_TIMER_TRUN;
+}
diff -Naur u-boot-2009.03_orig/drivers/serial/s3c4510b_uart.c u-boot-2009.03/drivers/serial/s3c4510b_uart.c
--- u-boot-2009.03_orig/drivers/serial/s3c4510b_uart.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/drivers/serial/s3c4510b_uart.c 2009-03-31 14:55:25.971156800 -0700
@@ -1,212 +1,212 @@
-/*
- * Copyright (c) 2004 Cucy Systems (http://www.cucy.com)
- * Curt Brune <curt@cucy.com>
- *
- * (C) Copyright 2004
- * DAVE Srl
- * http://www.dave-tech.it
- * http://www.wawnet.biz
- * mailto:info@wawnet.biz
- *
- * (C) Copyright 2002-2004
- * Wolfgang Denk, DENX Software Engineering, <wd@denx.de>
- *
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
- *
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Alex Zuepke <azu@sysgo.de>
- *
- * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
- *
- * 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
- *
- * MODULE: $Id:$
- * Description: UART/Serial interface for Samsung S3C4510B SoC
- * Runtime Env: ARM7TDMI
- * Change History:
- * 03-02-04 Create (Curt Brune) curt@cucy.com
- *
- */
-
-#include <common.h>
-
-#include <asm/hardware.h>
-#include "s3c4510b_uart.h"
-
-DECLARE_GLOBAL_DATA_PTR;
-
-static UART *uart;
-
-/* flush serial input queue. returns 0 on success or negative error
- * number otherwise
- */
-static int serial_flush_input(void)
-{
- volatile u32 tmp;
-
- /* keep on reading as long as the receiver is not empty */
- while( uart->m_stat.bf.rxReady) {
- tmp = uart->m_rx;
- }
-
- return 0;
-}
-
-
-/* flush output queue. returns 0 on success or negative error number
- * otherwise
- */
-static int serial_flush_output(void)
-{
- /* wait until the transmitter is no longer busy */
- while( !uart->m_stat.bf.txBufEmpty);
-
- return 0;
-}
-
-
-void serial_setbrg (void)
-{
- UART_LINE_CTRL ulctrl;
- UART_CTRL uctrl;
- UART_BAUD_DIV ubd;
-
- serial_flush_output();
- serial_flush_input();
-
- /* control register */
- uctrl.ui = 0x0;
- uctrl.bf.rxMode = 0x1;
- uctrl.bf.rxIrq = 0x0;
- uctrl.bf.txMode = 0x1;
- uctrl.bf.DSR = 0x0;
- uctrl.bf.sendBreak = 0x0;
- uctrl.bf.loopBack = 0x0;
- uart->m_ctrl.ui = uctrl.ui;
-
- /* line control register */
- ulctrl.ui = 0x0;
- ulctrl.bf.wordLen = 0x3; /* 8 bit data */
- ulctrl.bf.nStop = 0x0; /* 1 stop bit */
- ulctrl.bf.parity = 0x0; /* no parity */
- ulctrl.bf.clk = 0x0; /* internal clock */
- ulctrl.bf.infra_red = 0x0; /* no infra_red */
- uart->m_lineCtrl.ui = ulctrl.ui;
-
- ubd.ui = 0x0;
-
- /* see table on page 10-15 in SAMSUNG S3C4510B manual */
- /* get correct divisor */
- switch(gd->baudrate) {
- case 1200: ubd.bf.cnt0 = 1301; break;
- case 2400: ubd.bf.cnt0 = 650; break;
- case 4800: ubd.bf.cnt0 = 324; break;
- case 9600: ubd.bf.cnt0 = 162; break;
- case 19200: ubd.bf.cnt0 = 80; break;
- case 38400: ubd.bf.cnt0 = 40; break;
- case 57600: ubd.bf.cnt0 = 26; break;
- case 115200: ubd.bf.cnt0 = 13; break;
- }
-
- uart->m_baudDiv.ui = ubd.ui;
- uart->m_baudCnt = 0x0;
- uart->m_baudClk = 0x0;
-
-}
-
-
-/*
- * Initialise the serial port with the given baudrate. The settings
- * are always 8 data bits, no parity, 1 stop bit, no start bits.
- *
- */
-int serial_init (void)
-{
-
-#if CONFIG_SERIAL1 == 1
- uart = (UART *)UART0_BASE;
-#elif CONFIG_SERIAL1 == 2
- uart = (UART *)UART1_BASE;
-#else
-#error CONFIG_SERIAL1 not equal to 1 or 2
-#endif
-
- serial_setbrg ();
-
- return (0);
-}
-
-
-/*
- * Output a single byte to the serial port.
- */
-void serial_putc (const char c)
-{
- /* wait for room in the transmit FIFO */
- while( !uart->m_stat.bf.txBufEmpty);
-
- uart->m_tx = c;
-
- /*
- to be polite with serial console add a line feed
- to the carriage return character
- */
- if (c=='\n')
- serial_putc('\r');
-}
-
-/*
- * Test if an input byte is ready from the serial port. Returns non-zero on
- * success, 0 otherwise.
- */
-int serial_tstc (void)
-{
- return uart->m_stat.bf.rxReady;
-}
-
-/*
- * Read a single byte from the serial port. Returns 1 on success, 0
- * otherwise. When the function is succesfull, the character read is
- * written into its argument c.
- */
-int serial_getc (void)
-{
- int rv;
-
- for(;;) {
- rv = serial_tstc();
-
- if (rv) {
- return uart->m_rx & 0xFF;
- }
- }
-}
-
-void serial_puts (const char *s)
-{
- while (*s) {
- serial_putc (*s++);
- }
-
- /* busy wait for tx complete */
- while ( !uart->m_stat.bf.txComplete);
-
- /* clear break */
- uart->m_ctrl.bf.sendBreak = 0;
-
-}
+/*
+ * Copyright (c) 2004 Cucy Systems (http://www.cucy.com)
+ * Curt Brune <curt@cucy.com>
+ *
+ * (C) Copyright 2004
+ * DAVE Srl
+ * http://www.dave-tech.it
+ * http://www.wawnet.biz
+ * mailto:info@wawnet.biz
+ *
+ * (C) Copyright 2002-2004
+ * Wolfgang Denk, DENX Software Engineering, <wd@denx.de>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Alex Zuepke <azu@sysgo.de>
+ *
+ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
+ *
+ * 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
+ *
+ * MODULE: $Id: s3c4510b_uart.c,v 1.1.1.1 2009/03/25 22:22:10 kenagy Exp $
+ * Description: UART/Serial interface for Samsung S3C4510B SoC
+ * Runtime Env: ARM7TDMI
+ * Change History:
+ * 03-02-04 Create (Curt Brune) curt@cucy.com
+ *
+ */
+
+#include <common.h>
+
+#include <asm/hardware.h>
+#include "s3c4510b_uart.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static UART *uart;
+
+/* flush serial input queue. returns 0 on success or negative error
+ * number otherwise
+ */
+static int serial_flush_input(void)
+{
+ volatile u32 tmp;
+
+ /* keep on reading as long as the receiver is not empty */
+ while( uart->m_stat.bf.rxReady) {
+ tmp = uart->m_rx;
+ }
+
+ return 0;
+}
+
+
+/* flush output queue. returns 0 on success or negative error number
+ * otherwise
+ */
+static int serial_flush_output(void)
+{
+ /* wait until the transmitter is no longer busy */
+ while( !uart->m_stat.bf.txBufEmpty);
+
+ return 0;
+}
+
+
+void serial_setbrg (void)
+{
+ UART_LINE_CTRL ulctrl;
+ UART_CTRL uctrl;
+ UART_BAUD_DIV ubd;
+
+ serial_flush_output();
+ serial_flush_input();
+
+ /* control register */
+ uctrl.ui = 0x0;
+ uctrl.bf.rxMode = 0x1;
+ uctrl.bf.rxIrq = 0x0;
+ uctrl.bf.txMode = 0x1;
+ uctrl.bf.DSR = 0x0;
+ uctrl.bf.sendBreak = 0x0;
+ uctrl.bf.loopBack = 0x0;
+ uart->m_ctrl.ui = uctrl.ui;
+
+ /* line control register */
+ ulctrl.ui = 0x0;
+ ulctrl.bf.wordLen = 0x3; /* 8 bit data */
+ ulctrl.bf.nStop = 0x0; /* 1 stop bit */
+ ulctrl.bf.parity = 0x0; /* no parity */
+ ulctrl.bf.clk = 0x0; /* internal clock */
+ ulctrl.bf.infra_red = 0x0; /* no infra_red */
+ uart->m_lineCtrl.ui = ulctrl.ui;
+
+ ubd.ui = 0x0;
+
+ /* see table on page 10-15 in SAMSUNG S3C4510B manual */
+ /* get correct divisor */
+ switch(gd->baudrate) {
+ case 1200: ubd.bf.cnt0 = 1301; break;
+ case 2400: ubd.bf.cnt0 = 650; break;
+ case 4800: ubd.bf.cnt0 = 324; break;
+ case 9600: ubd.bf.cnt0 = 162; break;
+ case 19200: ubd.bf.cnt0 = 80; break;
+ case 38400: ubd.bf.cnt0 = 40; break;
+ case 57600: ubd.bf.cnt0 = 26; break;
+ case 115200: ubd.bf.cnt0 = 13; break;
+ }
+
+ uart->m_baudDiv.ui = ubd.ui;
+ uart->m_baudCnt = 0x0;
+ uart->m_baudClk = 0x0;
+
+}
+
+
+/*
+ * Initialise the serial port with the given baudrate. The settings
+ * are always 8 data bits, no parity, 1 stop bit, no start bits.
+ *
+ */
+int serial_init (void)
+{
+
+#if CONFIG_SERIAL1 == 1
+ uart = (UART *)UART0_BASE;
+#elif CONFIG_SERIAL1 == 2
+ uart = (UART *)UART1_BASE;
+#else
+#error CONFIG_SERIAL1 not equal to 1 or 2
+#endif
+
+ serial_setbrg ();
+
+ return (0);
+}
+
+
+/*
+ * Output a single byte to the serial port.
+ */
+void serial_putc (const char c)
+{
+ /* wait for room in the transmit FIFO */
+ while( !uart->m_stat.bf.txBufEmpty);
+
+ uart->m_tx = c;
+
+ /*
+ to be polite with serial console add a line feed
+ to the carriage return character
+ */
+ if (c=='\n')
+ serial_putc('\r');
+}
+
+/*
+ * Test if an input byte is ready from the serial port. Returns non-zero on
+ * success, 0 otherwise.
+ */
+int serial_tstc (void)
+{
+ return uart->m_stat.bf.rxReady;
+}
+
+/*
+ * Read a single byte from the serial port. Returns 1 on success, 0
+ * otherwise. When the function is succesfull, the character read is
+ * written into its argument c.
+ */
+int serial_getc (void)
+{
+ int rv;
+
+ for(;;) {
+ rv = serial_tstc();
+
+ if (rv) {
+ return uart->m_rx & 0xFF;
+ }
+ }
+}
+
+void serial_puts (const char *s)
+{
+ while (*s) {
+ serial_putc (*s++);
+ }
+
+ /* busy wait for tx complete */
+ while ( !uart->m_stat.bf.txComplete);
+
+ /* clear break */
+ uart->m_ctrl.bf.sendBreak = 0;
+
+}
diff -Naur u-boot-2009.03_orig/drivers/spi/CVS/Entries u-boot-2009.03/drivers/spi/CVS/Entries
--- u-boot-2009.03_orig/drivers/spi/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/spi/CVS/Entries 2009-03-25 15:58:03.840496600 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_spi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bfin_spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xxx_spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mxc_spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/soft_spi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/spi/CVS/Entries.Extra u-boot-2009.03/drivers/spi/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/spi/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/spi/CVS/Entries.Extra 2009-03-25 15:58:03.840496600 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019730/
+/atmel_spi.c///1238019730/
+/atmel_spi.h///1238019730/
+/bfin_spi.c///1238019730/
+/mpc8xxx_spi.c///1238019730/
+/mxc_spi.c///1238019730/
+/soft_spi.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/spi/CVS/Entries.Extra.Old u-boot-2009.03/drivers/spi/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/spi/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/spi/CVS/Entries.Extra.Old 2009-03-25 15:25:33.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019730/
+/atmel_spi.c///1238019730/
+/atmel_spi.h///1238019730/
+/bfin_spi.c///1238019730/
+/mpc8xxx_spi.c///1238019730/
+/mxc_spi.c///1238019730/
+/soft_spi.c///1238019730/
diff -Naur u-boot-2009.03_orig/drivers/spi/CVS/Entries.Old u-boot-2009.03/drivers/spi/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/spi/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/spi/CVS/Entries.Old 2009-03-25 15:25:33.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/atmel_spi.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/atmel_spi.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/bfin_spi.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mpc8xxx_spi.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/mxc_spi.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/soft_spi.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/spi/CVS/Repository u-boot-2009.03/drivers/spi/CVS/Repository
--- u-boot-2009.03_orig/drivers/spi/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/spi/CVS/Repository 2009-03-25 15:25:32.946732400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/spi
diff -Naur u-boot-2009.03_orig/drivers/spi/CVS/Root u-boot-2009.03/drivers/spi/CVS/Root
--- u-boot-2009.03_orig/drivers/spi/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/spi/CVS/Root 2009-03-25 15:25:32.946732400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/usb/CVS/Entries u-boot-2009.03/drivers/usb/CVS/Entries
--- u-boot-2009.03_orig/drivers/usb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/usb/CVS/Entries 2009-03-25 15:58:04.012370500 -0700
@@ -0,0 +1,28 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_usb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/isp116x-hcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/isp116x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/musb_core.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/musb_core.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/musb_hcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/musb_hcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r8a66597-hcd.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r8a66597.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sl811.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sl811_usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci_core.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci_core.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci_fsl.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci_fsl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci_ixp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci_pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ehci_vct.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_ohci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_ep0.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_mpc8xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_omap1510.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/usb/CVS/Entries.Extra u-boot-2009.03/drivers/usb/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/usb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/usb/CVS/Entries.Extra 2009-03-25 15:58:04.012370500 -0700
@@ -0,0 +1,27 @@
+/Makefile///1238019730/
+/davinci_usb.c///1238019730/
+/davinci_usb.h///1238019730/
+/isp116x-hcd.c///1238019730/
+/isp116x.h///1238019730/
+/musb_core.c///1238019730/
+/musb_core.h///1238019730/
+/musb_hcd.c///1238019730/
+/musb_hcd.h///1238019730/
+/r8a66597-hcd.c///1238019730/
+/r8a66597.h///1238019730/
+/sl811.h///1238019731/
+/sl811_usb.c///1238019731/
+/usb_ehci.h///1238019731/
+/usb_ehci_core.c///1238019731/
+/usb_ehci_core.h///1238019731/
+/usb_ehci_fsl.c///1238019731/
+/usb_ehci_fsl.h///1238019731/
+/usb_ehci_ixp.c///1238019731/
+/usb_ehci_pci.c///1238019731/
+/usb_ehci_vct.c///1238019731/
+/usb_ohci.c///1238019731/
+/usb_ohci.h///1238019731/
+/usbdcore.c///1238019731/
+/usbdcore_ep0.c///1238019731/
+/usbdcore_mpc8xx.c///1238019731/
+/usbdcore_omap1510.c///1238019731/
diff -Naur u-boot-2009.03_orig/drivers/usb/CVS/Entries.Extra.Old u-boot-2009.03/drivers/usb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/usb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/usb/CVS/Entries.Extra.Old 2009-03-25 15:25:33.000000000 -0700
@@ -0,0 +1,27 @@
+/Makefile///1238019730/
+/davinci_usb.c///1238019730/
+/davinci_usb.h///1238019730/
+/isp116x-hcd.c///1238019730/
+/isp116x.h///1238019730/
+/musb_core.c///1238019730/
+/musb_core.h///1238019730/
+/musb_hcd.c///1238019730/
+/musb_hcd.h///1238019730/
+/r8a66597-hcd.c///1238019730/
+/r8a66597.h///1238019730/
+/sl811.h///1238019731/
+/sl811_usb.c///1238019731/
+/usb_ehci.h///1238019731/
+/usb_ehci_core.c///1238019731/
+/usb_ehci_core.h///1238019731/
+/usb_ehci_fsl.c///1238019731/
+/usb_ehci_fsl.h///1238019731/
+/usb_ehci_ixp.c///1238019731/
+/usb_ehci_pci.c///1238019731/
+/usb_ehci_vct.c///1238019731/
+/usb_ohci.c///1238019731/
+/usb_ohci.h///1238019731/
+/usbdcore.c///1238019731/
+/usbdcore_ep0.c///1238019731/
+/usbdcore_mpc8xx.c///1238019731/
+/usbdcore_omap1510.c///1238019731/
diff -Naur u-boot-2009.03_orig/drivers/usb/CVS/Entries.Old u-boot-2009.03/drivers/usb/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/usb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/usb/CVS/Entries.Old 2009-03-25 15:25:33.000000000 -0700
@@ -0,0 +1,28 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/davinci_usb.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/davinci_usb.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/isp116x-hcd.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/isp116x.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/musb_core.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/musb_core.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/musb_hcd.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/musb_hcd.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/r8a66597-hcd.c/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/r8a66597.h/1.1.1.1/Wed Mar 25 22:22:10 2009//
+/sl811.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/sl811_usb.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci_core.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci_core.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci_fsl.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci_fsl.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci_ixp.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci_pci.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ehci_vct.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ohci.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usb_ohci.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usbdcore.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usbdcore_ep0.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usbdcore_mpc8xx.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/usbdcore_omap1510.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/usb/CVS/Repository u-boot-2009.03/drivers/usb/CVS/Repository
--- u-boot-2009.03_orig/drivers/usb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/usb/CVS/Repository 2009-03-25 15:25:33.102981400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/usb
diff -Naur u-boot-2009.03_orig/drivers/usb/CVS/Root u-boot-2009.03/drivers/usb/CVS/Root
--- u-boot-2009.03_orig/drivers/usb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/usb/CVS/Root 2009-03-25 15:25:33.087356500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/drivers/video/CVS/Entries u-boot-2009.03/drivers/video/CVS/Entries
--- u-boot-2009.03_orig/drivers/video/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/video/CVS/Entries 2009-03-25 15:58:04.277993800 -0700
@@ -0,0 +1,17 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ati_ids.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ati_radeon_fb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ati_radeon_fb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_lcdfb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cfb_console.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ct69000.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mb862xx.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx3fb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s6e63d6.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sed13806.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sed156x.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sm501.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smiLynxEM.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/videomodes.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/videomodes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/video/CVS/Entries.Extra u-boot-2009.03/drivers/video/CVS/Entries.Extra
--- u-boot-2009.03_orig/drivers/video/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/video/CVS/Entries.Extra 2009-03-25 15:58:04.277993800 -0700
@@ -0,0 +1,16 @@
+/Makefile///1238019731/
+/ati_ids.h///1238019731/
+/ati_radeon_fb.c///1238019731/
+/ati_radeon_fb.h///1238019731/
+/atmel_lcdfb.c///1238019731/
+/cfb_console.c///1238019731/
+/ct69000.c///1238019731/
+/mb862xx.c///1238019731/
+/mx3fb.c///1238019731/
+/s6e63d6.c///1238019731/
+/sed13806.c///1238019731/
+/sed156x.c///1238019731/
+/sm501.c///1238019731/
+/smiLynxEM.c///1238019731/
+/videomodes.c///1238019731/
+/videomodes.h///1238019731/
diff -Naur u-boot-2009.03_orig/drivers/video/CVS/Entries.Extra.Old u-boot-2009.03/drivers/video/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/drivers/video/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/video/CVS/Entries.Extra.Old 2009-03-25 15:25:33.000000000 -0700
@@ -0,0 +1,16 @@
+/Makefile///1238019731/
+/ati_ids.h///1238019731/
+/ati_radeon_fb.c///1238019731/
+/ati_radeon_fb.h///1238019731/
+/atmel_lcdfb.c///1238019731/
+/cfb_console.c///1238019731/
+/ct69000.c///1238019731/
+/mb862xx.c///1238019731/
+/mx3fb.c///1238019731/
+/s6e63d6.c///1238019731/
+/sed13806.c///1238019731/
+/sed156x.c///1238019731/
+/sm501.c///1238019731/
+/smiLynxEM.c///1238019731/
+/videomodes.c///1238019731/
+/videomodes.h///1238019731/
diff -Naur u-boot-2009.03_orig/drivers/video/CVS/Entries.Old u-boot-2009.03/drivers/video/CVS/Entries.Old
--- u-boot-2009.03_orig/drivers/video/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/video/CVS/Entries.Old 2009-03-25 15:25:33.000000000 -0700
@@ -0,0 +1,17 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/ati_ids.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/ati_radeon_fb.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/ati_radeon_fb.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/atmel_lcdfb.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/cfb_console.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/ct69000.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/mb862xx.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/mx3fb.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/s6e63d6.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/sed13806.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/sed156x.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/sm501.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/smiLynxEM.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/videomodes.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/videomodes.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D
diff -Naur u-boot-2009.03_orig/drivers/video/CVS/Repository u-boot-2009.03/drivers/video/CVS/Repository
--- u-boot-2009.03_orig/drivers/video/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/video/CVS/Repository 2009-03-25 15:25:33.618603100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/drivers/video
diff -Naur u-boot-2009.03_orig/drivers/video/CVS/Root u-boot-2009.03/drivers/video/CVS/Root
--- u-boot-2009.03_orig/drivers/video/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/drivers/video/CVS/Root 2009-03-25 15:25:33.618603100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/examples/CVS/Entries u-boot-2009.03/examples/CVS/Entries
--- u-boot-2009.03_orig/examples/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/examples/CVS/Entries 2009-03-25 15:58:04.418617900 -0700
@@ -0,0 +1,24 @@
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/82559_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.smc91111_eeprom/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eepro100_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hello_world.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mem_to_mem_idma2intr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mips.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_longjmp.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_setjmp.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sched.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc91111_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smc911x_eeprom.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sparc.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stubs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/test_burst.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/test_burst.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/test_burst_lib.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/x86-testapp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/examples/CVS/Entries.Extra u-boot-2009.03/examples/CVS/Entries.Extra
--- u-boot-2009.03_orig/examples/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/examples/CVS/Entries.Extra 2009-03-25 15:58:04.418617900 -0700
@@ -0,0 +1,23 @@
+/.gitignore///1238019731/
+/82559_eeprom.c///1238019731/
+/Makefile///1238019731/
+/README.smc91111_eeprom///1238019731/
+/eepro100_eeprom.c///1238019731/
+/hello_world.c///1238019731/
+/interrupt.c///1238019731/
+/mem_to_mem_idma2intr.c///1238019731/
+/mips.lds///1238019731/
+/nios.lds///1238019731/
+/nios2.lds///1238019731/
+/ppc_longjmp.S///1238019731/
+/ppc_setjmp.S///1238019731/
+/sched.c///1238019731/
+/smc91111_eeprom.c///1238019731/
+/smc911x_eeprom.c///1238019731/
+/sparc.lds///1238019731/
+/stubs.c///1238019731/
+/test_burst.c///1238019731/
+/test_burst.h///1238019731/
+/test_burst_lib.S///1238019731/
+/timer.c///1238019731/
+/x86-testapp.c///1238019731/
diff -Naur u-boot-2009.03_orig/examples/CVS/Entries.Extra.Old u-boot-2009.03/examples/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/examples/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/examples/CVS/Entries.Extra.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,23 @@
+/.gitignore///1238019731/
+/82559_eeprom.c///1238019731/
+/Makefile///1238019731/
+/README.smc91111_eeprom///1238019731/
+/eepro100_eeprom.c///1238019731/
+/hello_world.c///1238019731/
+/interrupt.c///1238019731/
+/mem_to_mem_idma2intr.c///1238019731/
+/mips.lds///1238019731/
+/nios.lds///1238019731/
+/nios2.lds///1238019731/
+/ppc_longjmp.S///1238019731/
+/ppc_setjmp.S///1238019731/
+/sched.c///1238019731/
+/smc91111_eeprom.c///1238019731/
+/smc911x_eeprom.c///1238019731/
+/sparc.lds///1238019731/
+/stubs.c///1238019731/
+/test_burst.c///1238019731/
+/test_burst.h///1238019731/
+/test_burst_lib.S///1238019731/
+/timer.c///1238019731/
+/x86-testapp.c///1238019731/
diff -Naur u-boot-2009.03_orig/examples/CVS/Entries.Old u-boot-2009.03/examples/CVS/Entries.Old
--- u-boot-2009.03_orig/examples/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/examples/CVS/Entries.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,24 @@
+/.gitignore/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/82559_eeprom.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/README.smc91111_eeprom/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/eepro100_eeprom.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/hello_world.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/interrupt.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/mem_to_mem_idma2intr.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/mips.lds/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/nios.lds/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/nios2.lds/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/ppc_longjmp.S/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/ppc_setjmp.S/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/sched.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/smc91111_eeprom.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/smc911x_eeprom.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/sparc.lds/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/stubs.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/test_burst.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/test_burst.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/test_burst_lib.S/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/timer.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/x86-testapp.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D
diff -Naur u-boot-2009.03_orig/examples/CVS/Repository u-boot-2009.03/examples/CVS/Repository
--- u-boot-2009.03_orig/examples/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/examples/CVS/Repository 2009-03-25 15:25:33.899851300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/examples
diff -Naur u-boot-2009.03_orig/examples/CVS/Root u-boot-2009.03/examples/CVS/Root
--- u-boot-2009.03_orig/examples/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/examples/CVS/Root 2009-03-25 15:25:33.899851300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/CVS/Entries u-boot-2009.03/fs/CVS/Entries
--- u-boot-2009.03_orig/fs/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/CVS/Entries 2009-03-25 15:58:05.168613100 -0700
@@ -0,0 +1,8 @@
+D/cramfs////
+D/ext2////
+D/fat////
+D/fdos////
+D/jffs2////
+D/reiserfs////
+D/yaffs2////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/fs/CVS/Entries.Extra u-boot-2009.03/fs/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/CVS/Entries.Extra 2009-03-25 15:58:05.168613100 -0700
@@ -0,0 +1,8 @@
+D/cramfs////
+D/ext2////
+D/fat////
+D/fdos////
+D/jffs2////
+D/reiserfs////
+D/yaffs2////
+/Makefile///1238019731/
diff -Naur u-boot-2009.03_orig/fs/CVS/Entries.Extra.Old u-boot-2009.03/fs/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/CVS/Entries.Extra.Old 2009-03-25 15:25:35.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019731/
+D/cramfs////
+D/ext2////
+D/fat////
+D/fdos////
+D/jffs2////
+D/reiserfs////
+D/yaffs2////
diff -Naur u-boot-2009.03_orig/fs/CVS/Entries.Old u-boot-2009.03/fs/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/CVS/Entries.Old 2009-03-25 15:25:35.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D/cramfs////
+D/ext2////
+D/fat////
+D/fdos////
+D/jffs2////
+D/reiserfs////
+D/yaffs2////
diff -Naur u-boot-2009.03_orig/fs/CVS/Repository u-boot-2009.03/fs/CVS/Repository
--- u-boot-2009.03_orig/fs/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/CVS/Repository 2009-03-25 15:25:34.181099500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs
diff -Naur u-boot-2009.03_orig/fs/CVS/Root u-boot-2009.03/fs/CVS/Root
--- u-boot-2009.03_orig/fs/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/CVS/Root 2009-03-25 15:25:34.181099500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/cramfs/CVS/Entries u-boot-2009.03/fs/cramfs/CVS/Entries
--- u-boot-2009.03_orig/fs/cramfs/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/cramfs/CVS/Entries 2009-03-25 15:58:04.512367300 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cramfs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uncompress.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/cramfs/CVS/Entries.Extra u-boot-2009.03/fs/cramfs/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/cramfs/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/cramfs/CVS/Entries.Extra 2009-03-25 15:58:04.512367300 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019731/
+/cramfs.c///1238019731/
+/uncompress.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/cramfs/CVS/Entries.Extra.Old u-boot-2009.03/fs/cramfs/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/cramfs/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/cramfs/CVS/Entries.Extra.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019731/
+/cramfs.c///1238019731/
+/uncompress.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/cramfs/CVS/Entries.Old u-boot-2009.03/fs/cramfs/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/cramfs/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/cramfs/CVS/Entries.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/cramfs.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/uncompress.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/cramfs/CVS/Repository u-boot-2009.03/fs/cramfs/CVS/Repository
--- u-boot-2009.03_orig/fs/cramfs/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/cramfs/CVS/Repository 2009-03-25 15:25:34.212349300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs/cramfs
diff -Naur u-boot-2009.03_orig/fs/cramfs/CVS/Root u-boot-2009.03/fs/cramfs/CVS/Root
--- u-boot-2009.03_orig/fs/cramfs/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/cramfs/CVS/Root 2009-03-25 15:25:34.212349300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/ext2/CVS/Entries u-boot-2009.03/fs/ext2/CVS/Entries
--- u-boot-2009.03_orig/fs/ext2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/ext2/CVS/Entries 2009-03-25 15:58:04.574866900 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dev.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ext2fs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/ext2/CVS/Entries.Extra u-boot-2009.03/fs/ext2/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/ext2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/ext2/CVS/Entries.Extra 2009-03-25 15:58:04.574866900 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019731/
+/dev.c///1238019731/
+/ext2fs.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/ext2/CVS/Entries.Extra.Old u-boot-2009.03/fs/ext2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/ext2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/ext2/CVS/Entries.Extra.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019731/
+/dev.c///1238019731/
+/ext2fs.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/ext2/CVS/Entries.Old u-boot-2009.03/fs/ext2/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/ext2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/ext2/CVS/Entries.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/dev.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/ext2fs.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/ext2/CVS/Repository u-boot-2009.03/fs/ext2/CVS/Repository
--- u-boot-2009.03_orig/fs/ext2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/ext2/CVS/Repository 2009-03-25 15:25:34.321723600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs/ext2
diff -Naur u-boot-2009.03_orig/fs/ext2/CVS/Root u-boot-2009.03/fs/ext2/CVS/Root
--- u-boot-2009.03_orig/fs/ext2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/ext2/CVS/Root 2009-03-25 15:25:34.321723600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/fat/CVS/Entries u-boot-2009.03/fs/fat/CVS/Entries
--- u-boot-2009.03_orig/fs/fat/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fat/CVS/Entries 2009-03-25 15:58:04.621741600 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/file.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/fat/CVS/Entries.Extra u-boot-2009.03/fs/fat/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/fat/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fat/CVS/Entries.Extra 2009-03-25 15:58:04.621741600 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019731/
+/fat.c///1238019731/
+/file.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/fat/CVS/Entries.Extra.Old u-boot-2009.03/fs/fat/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/fat/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fat/CVS/Entries.Extra.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019731/
+/fat.c///1238019731/
+/file.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/fat/CVS/Entries.Old u-boot-2009.03/fs/fat/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/fat/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fat/CVS/Entries.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/fat.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/file.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/fat/CVS/Repository u-boot-2009.03/fs/fat/CVS/Repository
--- u-boot-2009.03_orig/fs/fat/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fat/CVS/Repository 2009-03-25 15:25:34.712346100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs/fat
diff -Naur u-boot-2009.03_orig/fs/fat/CVS/Root u-boot-2009.03/fs/fat/CVS/Root
--- u-boot-2009.03_orig/fs/fat/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fat/CVS/Root 2009-03-25 15:25:34.696721200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/fdos/CVS/Entries u-boot-2009.03/fs/fdos/CVS/Entries
--- u-boot-2009.03_orig/fs/fdos/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fdos/CVS/Entries 2009-03-25 15:58:04.715491000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dev.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dos.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdos.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdos.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/subdir.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vfat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/fdos/CVS/Entries.Extra u-boot-2009.03/fs/fdos/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/fdos/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fdos/CVS/Entries.Extra 2009-03-25 15:58:04.715491000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019731/
+/dev.c///1238019731/
+/dos.h///1238019731/
+/fat.c///1238019731/
+/fdos.c///1238019731/
+/fdos.h///1238019731/
+/fs.c///1238019731/
+/subdir.c///1238019731/
+/vfat.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/fdos/CVS/Entries.Extra.Old u-boot-2009.03/fs/fdos/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/fdos/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fdos/CVS/Entries.Extra.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019731/
+/dev.c///1238019731/
+/dos.h///1238019731/
+/fat.c///1238019731/
+/fdos.c///1238019731/
+/fdos.h///1238019731/
+/fs.c///1238019731/
+/subdir.c///1238019731/
+/vfat.c///1238019731/
diff -Naur u-boot-2009.03_orig/fs/fdos/CVS/Entries.Old u-boot-2009.03/fs/fdos/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/fdos/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fdos/CVS/Entries.Old 2009-03-25 15:25:34.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/dev.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/dos.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/fat.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/fdos.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/fdos.h/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/fs.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/subdir.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+/vfat.c/1.1.1.1/Wed Mar 25 22:22:11 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/fdos/CVS/Repository u-boot-2009.03/fs/fdos/CVS/Repository
--- u-boot-2009.03_orig/fs/fdos/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fdos/CVS/Repository 2009-03-25 15:25:34.868595100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs/fdos
diff -Naur u-boot-2009.03_orig/fs/fdos/CVS/Root u-boot-2009.03/fs/fdos/CVS/Root
--- u-boot-2009.03_orig/fs/fdos/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/fdos/CVS/Root 2009-03-25 15:25:34.852970200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/jffs2/CVS/Entries u-boot-2009.03/fs/jffs2/CVS/Entries
--- u-boot-2009.03_orig/fs/jffs2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/jffs2/CVS/Entries 2009-03-31 14:55:58.048871200 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jffs2_nand_1pass.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jffs2_nand_private.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jffs2_private.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/summary.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/compr_lzari.c/1.1.1.1/Tue Mar 31 21:55:57 2009//T1.1.1.1
+/compr_lzo.c/1.1.1.1/Tue Mar 31 21:55:57 2009//T1.1.1.1
+/compr_rtime.c/1.1.1.1/Tue Mar 31 21:55:57 2009//T1.1.1.1
+/compr_rubin.c/1.1.1.1/Tue Mar 31 21:55:57 2009//T1.1.1.1
+/compr_zlib.c/1.1.1.1/Tue Mar 31 21:55:57 2009//T1.1.1.1
+/jffs2_1pass.c/1.1.1.1/Tue Mar 31 21:55:58 2009//T1.1.1.1
+/mini_inflate.c/1.1.1.1/Tue Mar 31 21:55:58 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/fs/jffs2/CVS/Entries.Extra u-boot-2009.03/fs/jffs2/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/jffs2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/jffs2/CVS/Entries.Extra 2009-03-31 14:55:58.048871200 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019731/
+/jffs2_nand_1pass.c///1238019731/
+/jffs2_nand_private.h///1238019731/
+/jffs2_private.h///1238019731/
+/summary.h///1238019732/
+/compr_lzari.c///1238019731/
+/compr_lzo.c///1238019731/
+/compr_rtime.c///1238019731/
+/compr_rubin.c///1238019731/
+/compr_zlib.c///1238019731/
+/jffs2_1pass.c///1238019731/
+/mini_inflate.c///1238019732/
diff -Naur u-boot-2009.03_orig/fs/jffs2/CVS/Entries.Extra.Old u-boot-2009.03/fs/jffs2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/jffs2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/jffs2/CVS/Entries.Extra.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019731/
+/jffs2_nand_1pass.c///1238019731/
+/jffs2_nand_private.h///1238019731/
+/jffs2_private.h///1238019731/
+/summary.h///1238019732/
+/compr_lzari.c///1238028707/
+/compr_lzo.c///1238028707/
+/compr_rtime.c///1238028707/
+/compr_rubin.c///1238028707/
+/compr_zlib.c///1238028707/
+/jffs2_1pass.c///1238028707/
+/mini_inflate.c///1238028707/
diff -Naur u-boot-2009.03_orig/fs/jffs2/CVS/Entries.Old u-boot-2009.03/fs/jffs2/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/jffs2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/jffs2/CVS/Entries.Old 2009-03-25 17:51:47.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jffs2_nand_1pass.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jffs2_nand_private.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jffs2_private.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/summary.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/compr_lzari.c/1.2/Thu Mar 26 00:51:47 2009//
+/compr_lzo.c/1.2/Thu Mar 26 00:51:47 2009//
+/compr_rtime.c/1.2/Thu Mar 26 00:51:47 2009//
+/compr_rubin.c/1.2/Thu Mar 26 00:51:47 2009//
+/compr_zlib.c/1.2/Thu Mar 26 00:51:47 2009//
+/jffs2_1pass.c/1.2/Thu Mar 26 00:51:47 2009//
+/mini_inflate.c/1.2/Thu Mar 26 00:51:47 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/jffs2/CVS/Repository u-boot-2009.03/fs/jffs2/CVS/Repository
--- u-boot-2009.03_orig/fs/jffs2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/jffs2/CVS/Repository 2009-03-25 15:25:35.040469000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs/jffs2
diff -Naur u-boot-2009.03_orig/fs/jffs2/CVS/Root u-boot-2009.03/fs/jffs2/CVS/Root
--- u-boot-2009.03_orig/fs/jffs2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/jffs2/CVS/Root 2009-03-25 15:25:35.024844100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/jffs2/compr_lzari.c u-boot-2009.03/fs/jffs2/compr_lzari.c
--- u-boot-2009.03_orig/fs/jffs2/compr_lzari.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/jffs2/compr_lzari.c 2009-03-31 14:55:57.705125600 -0700
@@ -1,259 +1,259 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2004 Patrik Kluba,
- * University of Szeged, Hungary
- *
- * For licensing information, see the file 'LICENCE' in the
- * jffs2 directory.
- *
- * $Id: compr_lzari.c,v 1.3 2004/06/23 16:34:39 havasi Exp $
- *
- */
-
-/*
- Lempel-Ziv-Arithmetic coding compression module for jffs2
- Based on the LZARI source included in LDS (lossless datacompression sources)
-*/
-
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
-
-/*
-Original copyright follows:
-
-**************************************************************
- LZARI.C -- A Data Compression Program
- (tab = 4 spaces)
-**************************************************************
- 4/7/1989 Haruhiko Okumura
- Use, distribute, and modify this program freely.
- Please send me your improved versions.
- PC-VAN SCIENCE
- NIFTY-Serve PAF01022
- CompuServe 74050,1022
-**************************************************************
-
-LZARI.C (c)1989 by Haruyasu Yoshizaki, Haruhiko Okumura, and Kenji Rikitake.
-All rights reserved. Permission granted for non-commercial use.
-
-*/
-
-/*
-
- 2004-02-18 pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
- Removed unused variables and fixed no return value
-
- 2004-02-16 pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
- Initial release
-
-*/
-
-
-#include <config.h>
-#include <linux/stddef.h>
-#include <jffs2/jffs2.h>
-
-
-#define N 4096 /* size of ring buffer */
-#define F 60 /* upper limit for match_length */
-#define THRESHOLD 2 /* encode string into position and length
- if match_length is greater than this */
-#define NIL N /* index for root of binary search trees */
-
-static unsigned char
- text_buf[N + F - 1]; /* ring buffer of size N,
- with extra F-1 bytes to facilitate string comparison */
-
-/********** Arithmetic Compression **********/
-
-/* If you are not familiar with arithmetic compression, you should read
- I. E. Witten, R. M. Neal, and J. G. Cleary,
- Communications of the ACM, Vol. 30, pp. 520-540 (1987),
- from which much have been borrowed. */
-
-#define M 15
-
-/* Q1 (= 2 to the M) must be sufficiently large, but not so
- large as the unsigned long 4 * Q1 * (Q1 - 1) overflows. */
-
-#define Q1 (1UL << M)
-#define Q2 (2 * Q1)
-#define Q3 (3 * Q1)
-#define Q4 (4 * Q1)
-#define MAX_CUM (Q1 - 1)
-
-#define N_CHAR (256 - THRESHOLD + F)
- /* character code = 0, 1, ..., N_CHAR - 1 */
-
-static unsigned long char_to_sym[N_CHAR], sym_to_char[N_CHAR + 1];
-static unsigned long
- sym_freq[N_CHAR + 1], /* frequency for symbols */
- sym_cum[N_CHAR + 1], /* cumulative freq for symbols */
- position_cum[N + 1]; /* cumulative freq for positions */
-
-static void StartModel(void) /* Initialize model */
-{
- unsigned long ch, sym, i;
-
- sym_cum[N_CHAR] = 0;
- for (sym = N_CHAR; sym >= 1; sym--) {
- ch = sym - 1;
- char_to_sym[ch] = sym; sym_to_char[sym] = ch;
- sym_freq[sym] = 1;
- sym_cum[sym - 1] = sym_cum[sym] + sym_freq[sym];
- }
- sym_freq[0] = 0; /* sentinel (!= sym_freq[1]) */
- position_cum[N] = 0;
- for (i = N; i >= 1; i--)
- position_cum[i - 1] = position_cum[i] + 10000 / (i + 200);
- /* empirical distribution function (quite tentative) */
- /* Please devise a better mechanism! */
-}
-
-static void UpdateModel(unsigned long sym)
-{
- unsigned long c, ch_i, ch_sym;
- unsigned long i;
- if (sym_cum[0] >= MAX_CUM) {
- c = 0;
- for (i = N_CHAR; i > 0; i--) {
- sym_cum[i] = c;
- c += (sym_freq[i] = (sym_freq[i] + 1) >> 1);
- }
- sym_cum[0] = c;
- }
- for (i = sym; sym_freq[i] == sym_freq[i - 1]; i--) ;
- if (i < sym) {
- ch_i = sym_to_char[i]; ch_sym = sym_to_char[sym];
- sym_to_char[i] = ch_sym; sym_to_char[sym] = ch_i;
- char_to_sym[ch_i] = sym; char_to_sym[ch_sym] = i;
- }
- sym_freq[i]++;
- while (--i > 0) sym_cum[i]++;
- sym_cum[0]++;
-}
-
-static unsigned long BinarySearchSym(unsigned long x)
- /* 1 if x >= sym_cum[1],
- N_CHAR if sym_cum[N_CHAR] > x,
- i such that sym_cum[i - 1] > x >= sym_cum[i] otherwise */
-{
- unsigned long i, j, k;
-
- i = 1; j = N_CHAR;
- while (i < j) {
- k = (i + j) / 2;
- if (sym_cum[k] > x) i = k + 1; else j = k;
- }
- return i;
-}
-
-unsigned long BinarySearchPos(unsigned long x)
- /* 0 if x >= position_cum[1],
- N - 1 if position_cum[N] > x,
- i such that position_cum[i] > x >= position_cum[i + 1] otherwise */
-{
- unsigned long i, j, k;
-
- i = 1; j = N;
- while (i < j) {
- k = (i + j) / 2;
- if (position_cum[k] > x) i = k + 1; else j = k;
- }
- return i - 1;
-}
-
-static int Decode(unsigned char *srcbuf, unsigned char *dstbuf, unsigned long srclen,
- unsigned long dstlen) /* Just the reverse of Encode(). */
-{
- unsigned long i, r, j, k, c, range, sym;
- unsigned char *ip, *op;
- unsigned char *srcend = srcbuf + srclen;
- unsigned char *dstend = dstbuf + dstlen;
- unsigned char buffer = 0;
- unsigned char mask = 0;
- unsigned long low = 0;
- unsigned long high = Q4;
- unsigned long value = 0;
-
- ip = srcbuf;
- op = dstbuf;
- for (i = 0; i < M + 2; i++) {
- value *= 2;
- if ((mask >>= 1) == 0) {
- buffer = (ip >= srcend) ? 0 : *(ip++);
- mask = 128;
- }
- value += ((buffer & mask) != 0);
- }
-
- StartModel();
- for (i = 0; i < N - F; i++) text_buf[i] = ' ';
- r = N - F;
-
- while (op < dstend) {
- range = high - low;
- sym = BinarySearchSym((unsigned long)
- (((value - low + 1) * sym_cum[0] - 1) / range));
- high = low + (range * sym_cum[sym - 1]) / sym_cum[0];
- low += (range * sym_cum[sym ]) / sym_cum[0];
- for ( ; ; ) {
- if (low >= Q2) {
- value -= Q2; low -= Q2; high -= Q2;
- } else if (low >= Q1 && high <= Q3) {
- value -= Q1; low -= Q1; high -= Q1;
- } else if (high > Q2) break;
- low += low; high += high;
- value *= 2;
- if ((mask >>= 1) == 0) {
- buffer = (ip >= srcend) ? 0 : *(ip++);
- mask = 128;
- }
- value += ((buffer & mask) != 0);
- }
- c = sym_to_char[sym];
- UpdateModel(sym);
- if (c < 256) {
- if (op >= dstend) return -1;
- *(op++) = c;
- text_buf[r++] = c;
- r &= (N - 1);
- } else {
- j = c - 255 + THRESHOLD;
- range = high - low;
- i = BinarySearchPos((unsigned long)
- (((value - low + 1) * position_cum[0] - 1) / range));
- high = low + (range * position_cum[i ]) / position_cum[0];
- low += (range * position_cum[i + 1]) / position_cum[0];
- for ( ; ; ) {
- if (low >= Q2) {
- value -= Q2; low -= Q2; high -= Q2;
- } else if (low >= Q1 && high <= Q3) {
- value -= Q1; low -= Q1; high -= Q1;
- } else if (high > Q2) break;
- low += low; high += high;
- value *= 2;
- if ((mask >>= 1) == 0) {
- buffer = (ip >= srcend) ? 0 : *(ip++);
- mask = 128;
- }
- value += ((buffer & mask) != 0);
- }
- i = (r - i - 1) & (N - 1);
- for (k = 0; k < j; k++) {
- c = text_buf[(i + k) & (N - 1)];
- if (op >= dstend) return -1;
- *(op++) = c;
- text_buf[r++] = c;
- r &= (N - 1);
- }
- }
- }
- return 0;
-}
-
-int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
- u32 srclen, u32 destlen)
-{
- return Decode(data_in, cpage_out, srclen, destlen);
-}
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright (C) 2004 Patrik Kluba,
+ * University of Szeged, Hungary
+ *
+ * For licensing information, see the file 'LICENCE' in the
+ * jffs2 directory.
+ *
+ * $Id: compr_lzari.c,v 1.1.1.1 2009/03/25 22:22:11 kenagy Exp $
+ *
+ */
+
+/*
+ Lempel-Ziv-Arithmetic coding compression module for jffs2
+ Based on the LZARI source included in LDS (lossless datacompression sources)
+*/
+
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+
+/*
+Original copyright follows:
+
+**************************************************************
+ LZARI.C -- A Data Compression Program
+ (tab = 4 spaces)
+**************************************************************
+ 4/7/1989 Haruhiko Okumura
+ Use, distribute, and modify this program freely.
+ Please send me your improved versions.
+ PC-VAN SCIENCE
+ NIFTY-Serve PAF01022
+ CompuServe 74050,1022
+**************************************************************
+
+LZARI.C (c)1989 by Haruyasu Yoshizaki, Haruhiko Okumura, and Kenji Rikitake.
+All rights reserved. Permission granted for non-commercial use.
+
+*/
+
+/*
+
+ 2004-02-18 pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
+ Removed unused variables and fixed no return value
+
+ 2004-02-16 pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
+ Initial release
+
+*/
+
+
+#include <config.h>
+#include <linux/stddef.h>
+#include <jffs2/jffs2.h>
+
+
+#define N 4096 /* size of ring buffer */
+#define F 60 /* upper limit for match_length */
+#define THRESHOLD 2 /* encode string into position and length
+ if match_length is greater than this */
+#define NIL N /* index for root of binary search trees */
+
+static unsigned char
+ text_buf[N + F - 1]; /* ring buffer of size N,
+ with extra F-1 bytes to facilitate string comparison */
+
+/********** Arithmetic Compression **********/
+
+/* If you are not familiar with arithmetic compression, you should read
+ I. E. Witten, R. M. Neal, and J. G. Cleary,
+ Communications of the ACM, Vol. 30, pp. 520-540 (1987),
+ from which much have been borrowed. */
+
+#define M 15
+
+/* Q1 (= 2 to the M) must be sufficiently large, but not so
+ large as the unsigned long 4 * Q1 * (Q1 - 1) overflows. */
+
+#define Q1 (1UL << M)
+#define Q2 (2 * Q1)
+#define Q3 (3 * Q1)
+#define Q4 (4 * Q1)
+#define MAX_CUM (Q1 - 1)
+
+#define N_CHAR (256 - THRESHOLD + F)
+ /* character code = 0, 1, ..., N_CHAR - 1 */
+
+static unsigned long char_to_sym[N_CHAR], sym_to_char[N_CHAR + 1];
+static unsigned long
+ sym_freq[N_CHAR + 1], /* frequency for symbols */
+ sym_cum[N_CHAR + 1], /* cumulative freq for symbols */
+ position_cum[N + 1]; /* cumulative freq for positions */
+
+static void StartModel(void) /* Initialize model */
+{
+ unsigned long ch, sym, i;
+
+ sym_cum[N_CHAR] = 0;
+ for (sym = N_CHAR; sym >= 1; sym--) {
+ ch = sym - 1;
+ char_to_sym[ch] = sym; sym_to_char[sym] = ch;
+ sym_freq[sym] = 1;
+ sym_cum[sym - 1] = sym_cum[sym] + sym_freq[sym];
+ }
+ sym_freq[0] = 0; /* sentinel (!= sym_freq[1]) */
+ position_cum[N] = 0;
+ for (i = N; i >= 1; i--)
+ position_cum[i - 1] = position_cum[i] + 10000 / (i + 200);
+ /* empirical distribution function (quite tentative) */
+ /* Please devise a better mechanism! */
+}
+
+static void UpdateModel(unsigned long sym)
+{
+ unsigned long c, ch_i, ch_sym;
+ unsigned long i;
+ if (sym_cum[0] >= MAX_CUM) {
+ c = 0;
+ for (i = N_CHAR; i > 0; i--) {
+ sym_cum[i] = c;
+ c += (sym_freq[i] = (sym_freq[i] + 1) >> 1);
+ }
+ sym_cum[0] = c;
+ }
+ for (i = sym; sym_freq[i] == sym_freq[i - 1]; i--) ;
+ if (i < sym) {
+ ch_i = sym_to_char[i]; ch_sym = sym_to_char[sym];
+ sym_to_char[i] = ch_sym; sym_to_char[sym] = ch_i;
+ char_to_sym[ch_i] = sym; char_to_sym[ch_sym] = i;
+ }
+ sym_freq[i]++;
+ while (--i > 0) sym_cum[i]++;
+ sym_cum[0]++;
+}
+
+static unsigned long BinarySearchSym(unsigned long x)
+ /* 1 if x >= sym_cum[1],
+ N_CHAR if sym_cum[N_CHAR] > x,
+ i such that sym_cum[i - 1] > x >= sym_cum[i] otherwise */
+{
+ unsigned long i, j, k;
+
+ i = 1; j = N_CHAR;
+ while (i < j) {
+ k = (i + j) / 2;
+ if (sym_cum[k] > x) i = k + 1; else j = k;
+ }
+ return i;
+}
+
+unsigned long BinarySearchPos(unsigned long x)
+ /* 0 if x >= position_cum[1],
+ N - 1 if position_cum[N] > x,
+ i such that position_cum[i] > x >= position_cum[i + 1] otherwise */
+{
+ unsigned long i, j, k;
+
+ i = 1; j = N;
+ while (i < j) {
+ k = (i + j) / 2;
+ if (position_cum[k] > x) i = k + 1; else j = k;
+ }
+ return i - 1;
+}
+
+static int Decode(unsigned char *srcbuf, unsigned char *dstbuf, unsigned long srclen,
+ unsigned long dstlen) /* Just the reverse of Encode(). */
+{
+ unsigned long i, r, j, k, c, range, sym;
+ unsigned char *ip, *op;
+ unsigned char *srcend = srcbuf + srclen;
+ unsigned char *dstend = dstbuf + dstlen;
+ unsigned char buffer = 0;
+ unsigned char mask = 0;
+ unsigned long low = 0;
+ unsigned long high = Q4;
+ unsigned long value = 0;
+
+ ip = srcbuf;
+ op = dstbuf;
+ for (i = 0; i < M + 2; i++) {
+ value *= 2;
+ if ((mask >>= 1) == 0) {
+ buffer = (ip >= srcend) ? 0 : *(ip++);
+ mask = 128;
+ }
+ value += ((buffer & mask) != 0);
+ }
+
+ StartModel();
+ for (i = 0; i < N - F; i++) text_buf[i] = ' ';
+ r = N - F;
+
+ while (op < dstend) {
+ range = high - low;
+ sym = BinarySearchSym((unsigned long)
+ (((value - low + 1) * sym_cum[0] - 1) / range));
+ high = low + (range * sym_cum[sym - 1]) / sym_cum[0];
+ low += (range * sym_cum[sym ]) / sym_cum[0];
+ for ( ; ; ) {
+ if (low >= Q2) {
+ value -= Q2; low -= Q2; high -= Q2;
+ } else if (low >= Q1 && high <= Q3) {
+ value -= Q1; low -= Q1; high -= Q1;
+ } else if (high > Q2) break;
+ low += low; high += high;
+ value *= 2;
+ if ((mask >>= 1) == 0) {
+ buffer = (ip >= srcend) ? 0 : *(ip++);
+ mask = 128;
+ }
+ value += ((buffer & mask) != 0);
+ }
+ c = sym_to_char[sym];
+ UpdateModel(sym);
+ if (c < 256) {
+ if (op >= dstend) return -1;
+ *(op++) = c;
+ text_buf[r++] = c;
+ r &= (N - 1);
+ } else {
+ j = c - 255 + THRESHOLD;
+ range = high - low;
+ i = BinarySearchPos((unsigned long)
+ (((value - low + 1) * position_cum[0] - 1) / range));
+ high = low + (range * position_cum[i ]) / position_cum[0];
+ low += (range * position_cum[i + 1]) / position_cum[0];
+ for ( ; ; ) {
+ if (low >= Q2) {
+ value -= Q2; low -= Q2; high -= Q2;
+ } else if (low >= Q1 && high <= Q3) {
+ value -= Q1; low -= Q1; high -= Q1;
+ } else if (high > Q2) break;
+ low += low; high += high;
+ value *= 2;
+ if ((mask >>= 1) == 0) {
+ buffer = (ip >= srcend) ? 0 : *(ip++);
+ mask = 128;
+ }
+ value += ((buffer & mask) != 0);
+ }
+ i = (r - i - 1) & (N - 1);
+ for (k = 0; k < j; k++) {
+ c = text_buf[(i + k) & (N - 1)];
+ if (op >= dstend) return -1;
+ *(op++) = c;
+ text_buf[r++] = c;
+ r &= (N - 1);
+ }
+ }
+ }
+ return 0;
+}
+
+int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ u32 srclen, u32 destlen)
+{
+ return Decode(data_in, cpage_out, srclen, destlen);
+}
diff -Naur u-boot-2009.03_orig/fs/jffs2/compr_lzo.c u-boot-2009.03/fs/jffs2/compr_lzo.c
--- u-boot-2009.03_orig/fs/jffs2/compr_lzo.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/jffs2/compr_lzo.c 2009-03-31 14:55:57.876998400 -0700
@@ -1,401 +1,401 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2004 Patrik Kluba,
- * University of Szeged, Hungary
- *
- * For licensing information, see the file 'LICENCE' in the
- * jffs2 directory.
- *
- * $Id: compr_lzo.c,v 1.3 2004/06/23 16:34:39 havasi Exp $
- *
- */
-
-/*
- LZO1X-1 (and -999) compression module for jffs2
- based on the original LZO sources
-*/
-
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
-
-/*
- Original copyright notice follows:
-
- lzo1x_9x.c -- implementation of the LZO1X-999 compression algorithm
- lzo_ptr.h -- low-level pointer constructs
- lzo_swd.ch -- sliding window dictionary
- lzoconf.h -- configuration for the LZO real-time data compression library
- lzo_mchw.ch -- matching functions using a window
- minilzo.c -- mini subset of the LZO real-time data compression library
- config1x.h -- configuration for the LZO1X algorithm
- lzo1x.h -- public interface of the LZO1X compression algorithm
-
- These files are part of the LZO real-time data compression library.
-
- Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer
- All Rights Reserved.
-
- The LZO library 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.
-
- The LZO library 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 the LZO library; see the file COPYING.
- If not, write to the Free Software Foundation, Inc.,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- Markus F.X.J. Oberhumer
- <markus@oberhumer.com>
-*/
-
-/*
-
- 2004-02-16 pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
- Initial release
- -removed all 16 bit code
- -all sensitive data will be on 4 byte boundary
- -removed check parts for library use
- -removed all but LZO1X-* compression
-
-*/
-
-
-#include <config.h>
-#include <linux/stddef.h>
-#include <jffs2/jffs2.h>
-#include <jffs2/compr_rubin.h>
-
-/* Integral types that have *exactly* the same number of bits as a lzo_voidp */
-typedef unsigned long lzo_ptr_t;
-typedef long lzo_sptr_t;
-
-/* data type definitions */
-#define U32 unsigned long
-#define S32 signed long
-#define I32 long
-#define U16 unsigned short
-#define S16 signed short
-#define I16 short
-#define U8 unsigned char
-#define S8 signed char
-#define I8 char
-
-#define M1_MAX_OFFSET 0x0400
-#define M2_MAX_OFFSET 0x0800
-#define M3_MAX_OFFSET 0x4000
-#define M4_MAX_OFFSET 0xbfff
-
-#define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src)
-#define COPY4(dst,src) __COPY4((lzo_ptr_t)(dst),(lzo_ptr_t)(src))
-
-#define TEST_IP (ip < ip_end)
-#define TEST_OP (op <= op_end)
-
-#define NEED_IP(x) \
- if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun
-#define NEED_OP(x) \
- if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun
-#define TEST_LOOKBEHIND(m_pos,out) if (m_pos < out) goto lookbehind_overrun
-
-typedef U32 lzo_uint32;
-typedef I32 lzo_int32;
-typedef U32 lzo_uint;
-typedef I32 lzo_int;
-typedef int lzo_bool;
-
-#define lzo_byte U8
-#define lzo_bytep U8 *
-#define lzo_charp char *
-#define lzo_voidp void *
-#define lzo_shortp short *
-#define lzo_ushortp unsigned short *
-#define lzo_uint32p lzo_uint32 *
-#define lzo_int32p lzo_int32 *
-#define lzo_uintp lzo_uint *
-#define lzo_intp lzo_int *
-#define lzo_voidpp lzo_voidp *
-#define lzo_bytepp lzo_bytep *
-#define lzo_sizeof_dict_t sizeof(lzo_bytep)
-
-#define LZO_E_OK 0
-#define LZO_E_ERROR (-1)
-#define LZO_E_OUT_OF_MEMORY (-2) /* not used right now */
-#define LZO_E_NOT_COMPRESSIBLE (-3) /* not used right now */
-#define LZO_E_INPUT_OVERRUN (-4)
-#define LZO_E_OUTPUT_OVERRUN (-5)
-#define LZO_E_LOOKBEHIND_OVERRUN (-6)
-#define LZO_E_EOF_NOT_FOUND (-7)
-#define LZO_E_INPUT_NOT_CONSUMED (-8)
-
-#define PTR(a) ((lzo_ptr_t) (a))
-#define PTR_LINEAR(a) PTR(a)
-#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0)
-#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0)
-#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0)
-#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0)
-#define PTR_LT(a,b) (PTR(a) < PTR(b))
-#define PTR_GE(a,b) (PTR(a) >= PTR(b))
-#define PTR_DIFF(a,b) ((lzo_ptrdiff_t) (PTR(a) - PTR(b)))
-#define pd(a,b) ((lzo_uint) ((a)-(b)))
-
-typedef ptrdiff_t lzo_ptrdiff_t;
-
-static int
-lzo1x_decompress (const lzo_byte * in, lzo_uint in_len,
- lzo_byte * out, lzo_uintp out_len, lzo_voidp wrkmem)
-{
- register lzo_byte *op;
- register const lzo_byte *ip;
- register lzo_uint t;
-
- register const lzo_byte *m_pos;
-
- const lzo_byte *const ip_end = in + in_len;
- lzo_byte *const op_end = out + *out_len;
-
- *out_len = 0;
-
- op = out;
- ip = in;
-
- if (*ip > 17)
- {
- t = *ip++ - 17;
- if (t < 4)
- goto match_next;
- NEED_OP (t);
- NEED_IP (t + 1);
- do
- *op++ = *ip++;
- while (--t > 0);
- goto first_literal_run;
- }
-
- while (TEST_IP && TEST_OP)
- {
- t = *ip++;
- if (t >= 16)
- goto match;
- if (t == 0)
- {
- NEED_IP (1);
- while (*ip == 0)
- {
- t += 255;
- ip++;
- NEED_IP (1);
- }
- t += 15 + *ip++;
- }
- NEED_OP (t + 3);
- NEED_IP (t + 4);
- if (PTR_ALIGNED2_4 (op, ip))
- {
- COPY4 (op, ip);
-
- op += 4;
- ip += 4;
- if (--t > 0)
- {
- if (t >= 4)
- {
- do
- {
- COPY4 (op, ip);
- op += 4;
- ip += 4;
- t -= 4;
- }
- while (t >= 4);
- if (t > 0)
- do
- *op++ = *ip++;
- while (--t > 0);
- }
- else
- do
- *op++ = *ip++;
- while (--t > 0);
- }
- }
- else
- {
- *op++ = *ip++;
- *op++ = *ip++;
- *op++ = *ip++;
- do
- *op++ = *ip++;
- while (--t > 0);
- }
- first_literal_run:
-
- t = *ip++;
- if (t >= 16)
- goto match;
-
- m_pos = op - (1 + M2_MAX_OFFSET);
- m_pos -= t >> 2;
- m_pos -= *ip++ << 2;
- TEST_LOOKBEHIND (m_pos, out);
- NEED_OP (3);
- *op++ = *m_pos++;
- *op++ = *m_pos++;
- *op++ = *m_pos;
-
- goto match_done;
-
- while (TEST_IP && TEST_OP)
- {
- match:
- if (t >= 64)
- {
- m_pos = op - 1;
- m_pos -= (t >> 2) & 7;
- m_pos -= *ip++ << 3;
- t = (t >> 5) - 1;
- TEST_LOOKBEHIND (m_pos, out);
- NEED_OP (t + 3 - 1);
- goto copy_match;
-
- }
- else if (t >= 32)
- {
- t &= 31;
- if (t == 0)
- {
- NEED_IP (1);
- while (*ip == 0)
- {
- t += 255;
- ip++;
- NEED_IP (1);
- }
- t += 31 + *ip++;
- }
-
- m_pos = op - 1;
- m_pos -= (ip[0] >> 2) + (ip[1] << 6);
-
- ip += 2;
- }
- else if (t >= 16)
- {
- m_pos = op;
- m_pos -= (t & 8) << 11;
-
- t &= 7;
- if (t == 0)
- {
- NEED_IP (1);
- while (*ip == 0)
- {
- t += 255;
- ip++;
- NEED_IP (1);
- }
- t += 7 + *ip++;
- }
-
- m_pos -= (ip[0] >> 2) + (ip[1] << 6);
-
- ip += 2;
- if (m_pos == op)
- goto eof_found;
- m_pos -= 0x4000;
- }
- else
- {
-
- m_pos = op - 1;
- m_pos -= t >> 2;
- m_pos -= *ip++ << 2;
- TEST_LOOKBEHIND (m_pos, out);
- NEED_OP (2);
- *op++ = *m_pos++;
- *op++ = *m_pos;
-
- goto match_done;
- }
-
- TEST_LOOKBEHIND (m_pos, out);
- NEED_OP (t + 3 - 1);
- if (t >= 2 * 4 - (3 - 1)
- && PTR_ALIGNED2_4 (op, m_pos))
- {
- COPY4 (op, m_pos);
- op += 4;
- m_pos += 4;
- t -= 4 - (3 - 1);
- do
- {
- COPY4 (op, m_pos);
- op += 4;
- m_pos += 4;
- t -= 4;
- }
- while (t >= 4);
- if (t > 0)
- do
- *op++ = *m_pos++;
- while (--t > 0);
- }
- else
-
- {
- copy_match:
- *op++ = *m_pos++;
- *op++ = *m_pos++;
- do
- *op++ = *m_pos++;
- while (--t > 0);
- }
-
- match_done:
- t = ip[-2] & 3;
-
- if (t == 0)
- break;
-
- match_next:
- NEED_OP (t);
- NEED_IP (t + 1);
- do
- *op++ = *ip++;
- while (--t > 0);
- t = *ip++;
- }
- }
- *out_len = op - out;
- return LZO_E_EOF_NOT_FOUND;
-
- eof_found:
- *out_len = op - out;
- return (ip == ip_end ? LZO_E_OK :
- (ip <
- ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
-
- input_overrun:
- *out_len = op - out;
- return LZO_E_INPUT_OVERRUN;
-
- output_overrun:
- *out_len = op - out;
- return LZO_E_OUTPUT_OVERRUN;
-
- lookbehind_overrun:
- *out_len = op - out;
- return LZO_E_LOOKBEHIND_OVERRUN;
-}
-
-int lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
- u32 srclen, u32 destlen)
-{
- lzo_uint outlen = destlen;
- return lzo1x_decompress (data_in, srclen, cpage_out, &outlen, NULL);
-}
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright (C) 2004 Patrik Kluba,
+ * University of Szeged, Hungary
+ *
+ * For licensing information, see the file 'LICENCE' in the
+ * jffs2 directory.
+ *
+ * $Id: compr_lzo.c,v 1.1.1.1 2009/03/25 22:22:11 kenagy Exp $
+ *
+ */
+
+/*
+ LZO1X-1 (and -999) compression module for jffs2
+ based on the original LZO sources
+*/
+
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+
+/*
+ Original copyright notice follows:
+
+ lzo1x_9x.c -- implementation of the LZO1X-999 compression algorithm
+ lzo_ptr.h -- low-level pointer constructs
+ lzo_swd.ch -- sliding window dictionary
+ lzoconf.h -- configuration for the LZO real-time data compression library
+ lzo_mchw.ch -- matching functions using a window
+ minilzo.c -- mini subset of the LZO real-time data compression library
+ config1x.h -- configuration for the LZO1X algorithm
+ lzo1x.h -- public interface of the LZO1X compression algorithm
+
+ These files are part of the LZO real-time data compression library.
+
+ Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer
+ All Rights Reserved.
+
+ The LZO library 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.
+
+ The LZO library 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 the LZO library; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Markus F.X.J. Oberhumer
+ <markus@oberhumer.com>
+*/
+
+/*
+
+ 2004-02-16 pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
+ Initial release
+ -removed all 16 bit code
+ -all sensitive data will be on 4 byte boundary
+ -removed check parts for library use
+ -removed all but LZO1X-* compression
+
+*/
+
+
+#include <config.h>
+#include <linux/stddef.h>
+#include <jffs2/jffs2.h>
+#include <jffs2/compr_rubin.h>
+
+/* Integral types that have *exactly* the same number of bits as a lzo_voidp */
+typedef unsigned long lzo_ptr_t;
+typedef long lzo_sptr_t;
+
+/* data type definitions */
+#define U32 unsigned long
+#define S32 signed long
+#define I32 long
+#define U16 unsigned short
+#define S16 signed short
+#define I16 short
+#define U8 unsigned char
+#define S8 signed char
+#define I8 char
+
+#define M1_MAX_OFFSET 0x0400
+#define M2_MAX_OFFSET 0x0800
+#define M3_MAX_OFFSET 0x4000
+#define M4_MAX_OFFSET 0xbfff
+
+#define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src)
+#define COPY4(dst,src) __COPY4((lzo_ptr_t)(dst),(lzo_ptr_t)(src))
+
+#define TEST_IP (ip < ip_end)
+#define TEST_OP (op <= op_end)
+
+#define NEED_IP(x) \
+ if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun
+#define NEED_OP(x) \
+ if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun
+#define TEST_LOOKBEHIND(m_pos,out) if (m_pos < out) goto lookbehind_overrun
+
+typedef U32 lzo_uint32;
+typedef I32 lzo_int32;
+typedef U32 lzo_uint;
+typedef I32 lzo_int;
+typedef int lzo_bool;
+
+#define lzo_byte U8
+#define lzo_bytep U8 *
+#define lzo_charp char *
+#define lzo_voidp void *
+#define lzo_shortp short *
+#define lzo_ushortp unsigned short *
+#define lzo_uint32p lzo_uint32 *
+#define lzo_int32p lzo_int32 *
+#define lzo_uintp lzo_uint *
+#define lzo_intp lzo_int *
+#define lzo_voidpp lzo_voidp *
+#define lzo_bytepp lzo_bytep *
+#define lzo_sizeof_dict_t sizeof(lzo_bytep)
+
+#define LZO_E_OK 0
+#define LZO_E_ERROR (-1)
+#define LZO_E_OUT_OF_MEMORY (-2) /* not used right now */
+#define LZO_E_NOT_COMPRESSIBLE (-3) /* not used right now */
+#define LZO_E_INPUT_OVERRUN (-4)
+#define LZO_E_OUTPUT_OVERRUN (-5)
+#define LZO_E_LOOKBEHIND_OVERRUN (-6)
+#define LZO_E_EOF_NOT_FOUND (-7)
+#define LZO_E_INPUT_NOT_CONSUMED (-8)
+
+#define PTR(a) ((lzo_ptr_t) (a))
+#define PTR_LINEAR(a) PTR(a)
+#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0)
+#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0)
+#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0)
+#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0)
+#define PTR_LT(a,b) (PTR(a) < PTR(b))
+#define PTR_GE(a,b) (PTR(a) >= PTR(b))
+#define PTR_DIFF(a,b) ((lzo_ptrdiff_t) (PTR(a) - PTR(b)))
+#define pd(a,b) ((lzo_uint) ((a)-(b)))
+
+typedef ptrdiff_t lzo_ptrdiff_t;
+
+static int
+lzo1x_decompress (const lzo_byte * in, lzo_uint in_len,
+ lzo_byte * out, lzo_uintp out_len, lzo_voidp wrkmem)
+{
+ register lzo_byte *op;
+ register const lzo_byte *ip;
+ register lzo_uint t;
+
+ register const lzo_byte *m_pos;
+
+ const lzo_byte *const ip_end = in + in_len;
+ lzo_byte *const op_end = out + *out_len;
+
+ *out_len = 0;
+
+ op = out;
+ ip = in;
+
+ if (*ip > 17)
+ {
+ t = *ip++ - 17;
+ if (t < 4)
+ goto match_next;
+ NEED_OP (t);
+ NEED_IP (t + 1);
+ do
+ *op++ = *ip++;
+ while (--t > 0);
+ goto first_literal_run;
+ }
+
+ while (TEST_IP && TEST_OP)
+ {
+ t = *ip++;
+ if (t >= 16)
+ goto match;
+ if (t == 0)
+ {
+ NEED_IP (1);
+ while (*ip == 0)
+ {
+ t += 255;
+ ip++;
+ NEED_IP (1);
+ }
+ t += 15 + *ip++;
+ }
+ NEED_OP (t + 3);
+ NEED_IP (t + 4);
+ if (PTR_ALIGNED2_4 (op, ip))
+ {
+ COPY4 (op, ip);
+
+ op += 4;
+ ip += 4;
+ if (--t > 0)
+ {
+ if (t >= 4)
+ {
+ do
+ {
+ COPY4 (op, ip);
+ op += 4;
+ ip += 4;
+ t -= 4;
+ }
+ while (t >= 4);
+ if (t > 0)
+ do
+ *op++ = *ip++;
+ while (--t > 0);
+ }
+ else
+ do
+ *op++ = *ip++;
+ while (--t > 0);
+ }
+ }
+ else
+ {
+ *op++ = *ip++;
+ *op++ = *ip++;
+ *op++ = *ip++;
+ do
+ *op++ = *ip++;
+ while (--t > 0);
+ }
+ first_literal_run:
+
+ t = *ip++;
+ if (t >= 16)
+ goto match;
+
+ m_pos = op - (1 + M2_MAX_OFFSET);
+ m_pos -= t >> 2;
+ m_pos -= *ip++ << 2;
+ TEST_LOOKBEHIND (m_pos, out);
+ NEED_OP (3);
+ *op++ = *m_pos++;
+ *op++ = *m_pos++;
+ *op++ = *m_pos;
+
+ goto match_done;
+
+ while (TEST_IP && TEST_OP)
+ {
+ match:
+ if (t >= 64)
+ {
+ m_pos = op - 1;
+ m_pos -= (t >> 2) & 7;
+ m_pos -= *ip++ << 3;
+ t = (t >> 5) - 1;
+ TEST_LOOKBEHIND (m_pos, out);
+ NEED_OP (t + 3 - 1);
+ goto copy_match;
+
+ }
+ else if (t >= 32)
+ {
+ t &= 31;
+ if (t == 0)
+ {
+ NEED_IP (1);
+ while (*ip == 0)
+ {
+ t += 255;
+ ip++;
+ NEED_IP (1);
+ }
+ t += 31 + *ip++;
+ }
+
+ m_pos = op - 1;
+ m_pos -= (ip[0] >> 2) + (ip[1] << 6);
+
+ ip += 2;
+ }
+ else if (t >= 16)
+ {
+ m_pos = op;
+ m_pos -= (t & 8) << 11;
+
+ t &= 7;
+ if (t == 0)
+ {
+ NEED_IP (1);
+ while (*ip == 0)
+ {
+ t += 255;
+ ip++;
+ NEED_IP (1);
+ }
+ t += 7 + *ip++;
+ }
+
+ m_pos -= (ip[0] >> 2) + (ip[1] << 6);
+
+ ip += 2;
+ if (m_pos == op)
+ goto eof_found;
+ m_pos -= 0x4000;
+ }
+ else
+ {
+
+ m_pos = op - 1;
+ m_pos -= t >> 2;
+ m_pos -= *ip++ << 2;
+ TEST_LOOKBEHIND (m_pos, out);
+ NEED_OP (2);
+ *op++ = *m_pos++;
+ *op++ = *m_pos;
+
+ goto match_done;
+ }
+
+ TEST_LOOKBEHIND (m_pos, out);
+ NEED_OP (t + 3 - 1);
+ if (t >= 2 * 4 - (3 - 1)
+ && PTR_ALIGNED2_4 (op, m_pos))
+ {
+ COPY4 (op, m_pos);
+ op += 4;
+ m_pos += 4;
+ t -= 4 - (3 - 1);
+ do
+ {
+ COPY4 (op, m_pos);
+ op += 4;
+ m_pos += 4;
+ t -= 4;
+ }
+ while (t >= 4);
+ if (t > 0)
+ do
+ *op++ = *m_pos++;
+ while (--t > 0);
+ }
+ else
+
+ {
+ copy_match:
+ *op++ = *m_pos++;
+ *op++ = *m_pos++;
+ do
+ *op++ = *m_pos++;
+ while (--t > 0);
+ }
+
+ match_done:
+ t = ip[-2] & 3;
+
+ if (t == 0)
+ break;
+
+ match_next:
+ NEED_OP (t);
+ NEED_IP (t + 1);
+ do
+ *op++ = *ip++;
+ while (--t > 0);
+ t = *ip++;
+ }
+ }
+ *out_len = op - out;
+ return LZO_E_EOF_NOT_FOUND;
+
+ eof_found:
+ *out_len = op - out;
+ return (ip == ip_end ? LZO_E_OK :
+ (ip <
+ ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
+
+ input_overrun:
+ *out_len = op - out;
+ return LZO_E_INPUT_OVERRUN;
+
+ output_overrun:
+ *out_len = op - out;
+ return LZO_E_OUTPUT_OVERRUN;
+
+ lookbehind_overrun:
+ *out_len = op - out;
+ return LZO_E_LOOKBEHIND_OVERRUN;
+}
+
+int lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ u32 srclen, u32 destlen)
+{
+ lzo_uint outlen = destlen;
+ return lzo1x_decompress (data_in, srclen, cpage_out, &outlen, NULL);
+}
diff -Naur u-boot-2009.03_orig/fs/jffs2/compr_rtime.c u-boot-2009.03/fs/jffs2/compr_rtime.c
--- u-boot-2009.03_orig/fs/jffs2/compr_rtime.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/jffs2/compr_rtime.c 2009-03-31 14:55:57.908248000 -0700
@@ -1,87 +1,87 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2001 Red Hat, Inc.
- *
- * Created by Arjan van de Ven <arjanv@redhat.com>
- *
- * The original JFFS, from which the design for JFFS2 was derived,
- * was designed and implemented by Axis Communications AB.
- *
- * The contents of this file are subject to the Red Hat eCos Public
- * License Version 1.1 (the "Licence"); you may not use this file
- * except in compliance with the Licence. You may obtain a copy of
- * the Licence at http://www.redhat.com/
- *
- * Software distributed under the Licence is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing rights and
- * limitations under the Licence.
- *
- * The Original Code is JFFS2 - Journalling Flash File System, version 2
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License version 2 (the "GPL"), in
- * which case the provisions of the GPL are applicable instead of the
- * above. If you wish to allow the use of your version of this file
- * only under the terms of the GPL and not to allow others to use your
- * version of this file under the RHEPL, indicate your decision by
- * deleting the provisions above and replace them with the notice and
- * other provisions required by the GPL. If you do not delete the
- * provisions above, a recipient may use your version of this file
- * under either the RHEPL or the GPL.
- *
- * $Id: compr_rtime.c,v 1.2 2002/01/24 22:58:42 rfeany Exp $
- *
- *
- * Very simple lz77-ish encoder.
- *
- * Theory of operation: Both encoder and decoder have a list of "last
- * occurances" for every possible source-value; after sending the
- * first source-byte, the second byte indicated the "run" length of
- * matches
- *
- * The algorithm is intended to only send "whole bytes", no bit-messing.
- *
- */
-
-#include <config.h>
-#include <jffs2/jffs2.h>
-
-void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
- u32 srclen, u32 destlen)
-{
- int positions[256];
- int outpos;
- int pos;
- int i;
-
- outpos = pos = 0;
-
- for (i = 0; i < 256; positions[i++] = 0);
-
- while (outpos<destlen) {
- unsigned char value;
- int backoffs;
- int repeat;
-
- value = data_in[pos++];
- cpage_out[outpos++] = value; /* first the verbatim copied byte */
- repeat = data_in[pos++];
- backoffs = positions[value];
-
- positions[value]=outpos;
- if (repeat) {
- if (backoffs + repeat >= outpos) {
- while(repeat) {
- cpage_out[outpos++] = cpage_out[backoffs++];
- repeat--;
- }
- } else {
- for (i = 0; i < repeat; i++)
- *(cpage_out + outpos + i) = *(cpage_out + backoffs + i);
- outpos+=repeat;
- }
- }
- }
-}
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by Arjan van de Ven <arjanv@redhat.com>
+ *
+ * The original JFFS, from which the design for JFFS2 was derived,
+ * was designed and implemented by Axis Communications AB.
+ *
+ * The contents of this file are subject to the Red Hat eCos Public
+ * License Version 1.1 (the "Licence"); you may not use this file
+ * except in compliance with the Licence. You may obtain a copy of
+ * the Licence at http://www.redhat.com/
+ *
+ * Software distributed under the Licence is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing rights and
+ * limitations under the Licence.
+ *
+ * The Original Code is JFFS2 - Journalling Flash File System, version 2
+ *
+ * Alternatively, the contents of this file may be used under the
+ * terms of the GNU General Public License version 2 (the "GPL"), in
+ * which case the provisions of the GPL are applicable instead of the
+ * above. If you wish to allow the use of your version of this file
+ * only under the terms of the GPL and not to allow others to use your
+ * version of this file under the RHEPL, indicate your decision by
+ * deleting the provisions above and replace them with the notice and
+ * other provisions required by the GPL. If you do not delete the
+ * provisions above, a recipient may use your version of this file
+ * under either the RHEPL or the GPL.
+ *
+ * $Id: compr_rtime.c,v 1.1.1.1 2009/03/25 22:22:11 kenagy Exp $
+ *
+ *
+ * Very simple lz77-ish encoder.
+ *
+ * Theory of operation: Both encoder and decoder have a list of "last
+ * occurances" for every possible source-value; after sending the
+ * first source-byte, the second byte indicated the "run" length of
+ * matches
+ *
+ * The algorithm is intended to only send "whole bytes", no bit-messing.
+ *
+ */
+
+#include <config.h>
+#include <jffs2/jffs2.h>
+
+void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ u32 srclen, u32 destlen)
+{
+ int positions[256];
+ int outpos;
+ int pos;
+ int i;
+
+ outpos = pos = 0;
+
+ for (i = 0; i < 256; positions[i++] = 0);
+
+ while (outpos<destlen) {
+ unsigned char value;
+ int backoffs;
+ int repeat;
+
+ value = data_in[pos++];
+ cpage_out[outpos++] = value; /* first the verbatim copied byte */
+ repeat = data_in[pos++];
+ backoffs = positions[value];
+
+ positions[value]=outpos;
+ if (repeat) {
+ if (backoffs + repeat >= outpos) {
+ while(repeat) {
+ cpage_out[outpos++] = cpage_out[backoffs++];
+ repeat--;
+ }
+ } else {
+ for (i = 0; i < repeat; i++)
+ *(cpage_out + outpos + i) = *(cpage_out + backoffs + i);
+ outpos+=repeat;
+ }
+ }
+ }
+}
diff -Naur u-boot-2009.03_orig/fs/jffs2/compr_rubin.c u-boot-2009.03/fs/jffs2/compr_rubin.c
--- u-boot-2009.03_orig/fs/jffs2/compr_rubin.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/jffs2/compr_rubin.c 2009-03-31 14:55:57.939497600 -0700
@@ -1,122 +1,122 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2001 Red Hat, Inc.
- *
- * Created by Arjan van de Ven <arjanv@redhat.com>
- *
- * Heavily modified by Russ Dill <Russ.Dill@asu.edu> in an attempt at
- * a little more speed.
- *
- * The original JFFS, from which the design for JFFS2 was derived,
- * was designed and implemented by Axis Communications AB.
- *
- * The contents of this file are subject to the Red Hat eCos Public
- * License Version 1.1 (the "Licence"); you may not use this file
- * except in compliance with the Licence. You may obtain a copy of
- * the Licence at http://www.redhat.com/
- *
- * Software distributed under the Licence is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing rights and
- * limitations under the Licence.
- *
- * The Original Code is JFFS2 - Journalling Flash File System, version 2
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License version 2 (the "GPL"), in
- * which case the provisions of the GPL are applicable instead of the
- * above. If you wish to allow the use of your version of this file
- * only under the terms of the GPL and not to allow others to use your
- * version of this file under the RHEPL, indicate your decision by
- * deleting the provisions above and replace them with the notice and
- * other provisions required by the GPL. If you do not delete the
- * provisions above, a recipient may use your version of this file
- * under either the RHEPL or the GPL.
- *
- * $Id: compr_rubin.c,v 1.2 2002/01/24 22:58:42 rfeany Exp $
- *
- */
-
-#include <config.h>
-#include <jffs2/jffs2.h>
-#include <jffs2/compr_rubin.h>
-
-
-void rubin_do_decompress(unsigned char *bits, unsigned char *in,
- unsigned char *page_out, __u32 destlen)
-{
- register char *curr = (char *)page_out;
- char *end = (char *)(page_out + destlen);
- register unsigned long temp;
- register unsigned long result;
- register unsigned long p;
- register unsigned long q;
- register unsigned long rec_q;
- register unsigned long bit;
- register long i0;
- unsigned long i;
-
- /* init_pushpull */
- temp = *(u32 *) in;
- bit = 16;
-
- /* init_rubin */
- q = 0;
- p = (long) (2 * UPPER_BIT_RUBIN);
-
- /* init_decode */
- rec_q = (in[0] << 8) | in[1];
-
- while (curr < end) {
- /* in byte */
-
- result = 0;
- for (i = 0; i < 8; i++) {
- /* decode */
-
- while ((q & UPPER_BIT_RUBIN) || ((p + q) <= UPPER_BIT_RUBIN)) {
- q &= ~UPPER_BIT_RUBIN;
- q <<= 1;
- p <<= 1;
- rec_q &= ~UPPER_BIT_RUBIN;
- rec_q <<= 1;
- rec_q |= (temp >> (bit++ ^ 7)) & 1;
- if (bit > 31) {
- u32 *p = (u32 *)in;
- bit = 0;
- temp = *(++p);
- in = (unsigned char *)p;
- }
- }
- i0 = (bits[i] * p) >> 8;
-
- if (i0 <= 0) i0 = 1;
- /* if it fails, it fails, we have our crc
- if (i0 >= p) i0 = p - 1; */
-
- result >>= 1;
- if (rec_q < q + i0) {
- /* result |= 0x00; */
- p = i0;
- } else {
- result |= 0x80;
- p -= i0;
- q += i0;
- }
- }
- *(curr++) = result;
- }
-}
-
-void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
- unsigned long sourcelen, unsigned long dstlen)
-{
- unsigned char bits[8];
- int c;
-
- for (c=0; c<8; c++)
- bits[c] = (256 - data_in[c]);
-
- rubin_do_decompress(bits, data_in+8, cpage_out, dstlen);
-}
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by Arjan van de Ven <arjanv@redhat.com>
+ *
+ * Heavily modified by Russ Dill <Russ.Dill@asu.edu> in an attempt at
+ * a little more speed.
+ *
+ * The original JFFS, from which the design for JFFS2 was derived,
+ * was designed and implemented by Axis Communications AB.
+ *
+ * The contents of this file are subject to the Red Hat eCos Public
+ * License Version 1.1 (the "Licence"); you may not use this file
+ * except in compliance with the Licence. You may obtain a copy of
+ * the Licence at http://www.redhat.com/
+ *
+ * Software distributed under the Licence is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing rights and
+ * limitations under the Licence.
+ *
+ * The Original Code is JFFS2 - Journalling Flash File System, version 2
+ *
+ * Alternatively, the contents of this file may be used under the
+ * terms of the GNU General Public License version 2 (the "GPL"), in
+ * which case the provisions of the GPL are applicable instead of the
+ * above. If you wish to allow the use of your version of this file
+ * only under the terms of the GPL and not to allow others to use your
+ * version of this file under the RHEPL, indicate your decision by
+ * deleting the provisions above and replace them with the notice and
+ * other provisions required by the GPL. If you do not delete the
+ * provisions above, a recipient may use your version of this file
+ * under either the RHEPL or the GPL.
+ *
+ * $Id: compr_rubin.c,v 1.1.1.1 2009/03/25 22:22:11 kenagy Exp $
+ *
+ */
+
+#include <config.h>
+#include <jffs2/jffs2.h>
+#include <jffs2/compr_rubin.h>
+
+
+void rubin_do_decompress(unsigned char *bits, unsigned char *in,
+ unsigned char *page_out, __u32 destlen)
+{
+ register char *curr = (char *)page_out;
+ char *end = (char *)(page_out + destlen);
+ register unsigned long temp;
+ register unsigned long result;
+ register unsigned long p;
+ register unsigned long q;
+ register unsigned long rec_q;
+ register unsigned long bit;
+ register long i0;
+ unsigned long i;
+
+ /* init_pushpull */
+ temp = *(u32 *) in;
+ bit = 16;
+
+ /* init_rubin */
+ q = 0;
+ p = (long) (2 * UPPER_BIT_RUBIN);
+
+ /* init_decode */
+ rec_q = (in[0] << 8) | in[1];
+
+ while (curr < end) {
+ /* in byte */
+
+ result = 0;
+ for (i = 0; i < 8; i++) {
+ /* decode */
+
+ while ((q & UPPER_BIT_RUBIN) || ((p + q) <= UPPER_BIT_RUBIN)) {
+ q &= ~UPPER_BIT_RUBIN;
+ q <<= 1;
+ p <<= 1;
+ rec_q &= ~UPPER_BIT_RUBIN;
+ rec_q <<= 1;
+ rec_q |= (temp >> (bit++ ^ 7)) & 1;
+ if (bit > 31) {
+ u32 *p = (u32 *)in;
+ bit = 0;
+ temp = *(++p);
+ in = (unsigned char *)p;
+ }
+ }
+ i0 = (bits[i] * p) >> 8;
+
+ if (i0 <= 0) i0 = 1;
+ /* if it fails, it fails, we have our crc
+ if (i0 >= p) i0 = p - 1; */
+
+ result >>= 1;
+ if (rec_q < q + i0) {
+ /* result |= 0x00; */
+ p = i0;
+ } else {
+ result |= 0x80;
+ p -= i0;
+ q += i0;
+ }
+ }
+ *(curr++) = result;
+ }
+}
+
+void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ unsigned long sourcelen, unsigned long dstlen)
+{
+ unsigned char bits[8];
+ int c;
+
+ for (c=0; c<8; c++)
+ bits[c] = (256 - data_in[c]);
+
+ rubin_do_decompress(bits, data_in+8, cpage_out, dstlen);
+}
diff -Naur u-boot-2009.03_orig/fs/jffs2/compr_zlib.c u-boot-2009.03/fs/jffs2/compr_zlib.c
--- u-boot-2009.03_orig/fs/jffs2/compr_zlib.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/jffs2/compr_zlib.c 2009-03-31 14:55:57.970747200 -0700
@@ -1,48 +1,48 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2001 Red Hat, Inc.
- *
- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
- *
- * The original JFFS, from which the design for JFFS2 was derived,
- * was designed and implemented by Axis Communications AB.
- *
- * The contents of this file are subject to the Red Hat eCos Public
- * License Version 1.1 (the "Licence"); you may not use this file
- * except in compliance with the Licence. You may obtain a copy of
- * the Licence at http://www.redhat.com/
- *
- * Software distributed under the Licence is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing rights and
- * limitations under the Licence.
- *
- * The Original Code is JFFS2 - Journalling Flash File System, version 2
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License version 2 (the "GPL"), in
- * which case the provisions of the GPL are applicable instead of the
- * above. If you wish to allow the use of your version of this file
- * only under the terms of the GPL and not to allow others to use your
- * version of this file under the RHEPL, indicate your decision by
- * deleting the provisions above and replace them with the notice and
- * other provisions required by the GPL. If you do not delete the
- * provisions above, a recipient may use your version of this file
- * under either the RHEPL or the GPL.
- *
- * $Id: compr_zlib.c,v 1.2 2002/01/24 22:58:42 rfeany Exp $
- *
- */
-
-#include <common.h>
-#include <config.h>
-#include <jffs2/jffs2.h>
-#include <jffs2/mini_inflate.h>
-
-long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
- __u32 srclen, __u32 destlen)
-{
- return (decompress_block(cpage_out, data_in + 2, (void *) ldr_memcpy));
-
-}
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+ * The original JFFS, from which the design for JFFS2 was derived,
+ * was designed and implemented by Axis Communications AB.
+ *
+ * The contents of this file are subject to the Red Hat eCos Public
+ * License Version 1.1 (the "Licence"); you may not use this file
+ * except in compliance with the Licence. You may obtain a copy of
+ * the Licence at http://www.redhat.com/
+ *
+ * Software distributed under the Licence is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing rights and
+ * limitations under the Licence.
+ *
+ * The Original Code is JFFS2 - Journalling Flash File System, version 2
+ *
+ * Alternatively, the contents of this file may be used under the
+ * terms of the GNU General Public License version 2 (the "GPL"), in
+ * which case the provisions of the GPL are applicable instead of the
+ * above. If you wish to allow the use of your version of this file
+ * only under the terms of the GPL and not to allow others to use your
+ * version of this file under the RHEPL, indicate your decision by
+ * deleting the provisions above and replace them with the notice and
+ * other provisions required by the GPL. If you do not delete the
+ * provisions above, a recipient may use your version of this file
+ * under either the RHEPL or the GPL.
+ *
+ * $Id: compr_zlib.c,v 1.1.1.1 2009/03/25 22:22:11 kenagy Exp $
+ *
+ */
+
+#include <common.h>
+#include <config.h>
+#include <jffs2/jffs2.h>
+#include <jffs2/mini_inflate.h>
+
+long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ __u32 srclen, __u32 destlen)
+{
+ return (decompress_block(cpage_out, data_in + 2, (void *) ldr_memcpy));
+
+}
diff -Naur u-boot-2009.03_orig/fs/jffs2/jffs2_1pass.c u-boot-2009.03/fs/jffs2/jffs2_1pass.c
--- u-boot-2009.03_orig/fs/jffs2/jffs2_1pass.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/jffs2/jffs2_1pass.c 2009-03-31 14:55:58.001996800 -0700
@@ -1,1835 +1,1835 @@
-/*
--------------------------------------------------------------------------
- * Filename: jffs2.c
- * Version: $Id: jffs2_1pass.c,v 1.7 2002/01/25 01:56:47 nyet Exp $
- * Copyright: Copyright (C) 2001, Russ Dill
- * Author: Russ Dill <Russ.Dill@asu.edu>
- * Description: Module to load kernel from jffs2
- *-----------------------------------------------------------------------*/
-/*
- * some portions of this code are taken from jffs2, and as such, the
- * following copyright notice is included.
- *
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2001 Red Hat, Inc.
- *
- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
- *
- * The original JFFS, from which the design for JFFS2 was derived,
- * was designed and implemented by Axis Communications AB.
- *
- * The contents of this file are subject to the Red Hat eCos Public
- * License Version 1.1 (the "Licence"); you may not use this file
- * except in compliance with the Licence. You may obtain a copy of
- * the Licence at http://www.redhat.com/
- *
- * Software distributed under the Licence is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing rights and
- * limitations under the Licence.
- *
- * The Original Code is JFFS2 - Journalling Flash File System, version 2
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License version 2 (the "GPL"), in
- * which case the provisions of the GPL are applicable instead of the
- * above. If you wish to allow the use of your version of this file
- * only under the terms of the GPL and not to allow others to use your
- * version of this file under the RHEPL, indicate your decision by
- * deleting the provisions above and replace them with the notice and
- * other provisions required by the GPL. If you do not delete the
- * provisions above, a recipient may use your version of this file
- * under either the RHEPL or the GPL.
- *
- * $Id: jffs2_1pass.c,v 1.7 2002/01/25 01:56:47 nyet Exp $
- *
- */
-
-/* Ok, so anyone who knows the jffs2 code will probably want to get a papar
- * bag to throw up into before reading this code. I looked through the jffs2
- * code, the caching scheme is very elegant. I tried to keep the version
- * for a bootloader as small and simple as possible. Instead of worring about
- * unneccesary data copies, node scans, etc, I just optimized for the known
- * common case, a kernel, which looks like:
- * (1) most pages are 4096 bytes
- * (2) version numbers are somewhat sorted in acsending order
- * (3) multiple compressed blocks making up one page is uncommon
- *
- * So I create a linked list of decending version numbers (insertions at the
- * head), and then for each page, walk down the list, until a matching page
- * with 4096 bytes is found, and then decompress the watching pages in
- * reverse order.
- *
- */
-
-/*
- * Adapted by Nye Liu <nyet@zumanetworks.com> and
- * Rex Feany <rfeany@zumanetworks.com>
- * on Jan/2002 for U-Boot.
- *
- * Clipped out all the non-1pass functions, cleaned up warnings,
- * wrappers, etc. No major changes to the code.
- * Please, he really means it when he said have a paper bag
- * handy. We needed it ;).
- *
- */
-
-/*
- * Bugfixing by Kai-Uwe Bloem <kai-uwe.bloem@auerswald.de>, (C) Mar/2003
- *
- * - overhaul of the memory management. Removed much of the "paper-bagging"
- * in that part of the code, fixed several bugs, now frees memory when
- * partition is changed.
- * It's still ugly :-(
- * - fixed a bug in jffs2_1pass_read_inode where the file length calculation
- * was incorrect. Removed a bit of the paper-bagging as well.
- * - removed double crc calculation for fragment headers in jffs2_private.h
- * for speedup.
- * - scan_empty rewritten in a more "standard" manner (non-paperbag, that is).
- * - spinning wheel now spins depending on how much memory has been scanned
- * - lots of small changes all over the place to "improve" readability.
- * - implemented fragment sorting to ensure that the newest data is copied
- * if there are multiple copies of fragments for a certain file offset.
- *
- * The fragment sorting feature must be enabled by CONFIG_SYS_JFFS2_SORT_FRAGMENTS.
- * Sorting is done while adding fragments to the lists, which is more or less a
- * bubble sort. This takes a lot of time, and is most probably not an issue if
- * the boot filesystem is always mounted readonly.
- *
- * You should define it if the boot filesystem is mounted writable, and updates
- * to the boot files are done by copying files to that filesystem.
- *
- *
- * There's a big issue left: endianess is completely ignored in this code. Duh!
- *
- *
- * You still should have paper bags at hand :-(. The code lacks more or less
- * any comment, and is still arcane and difficult to read in places. As this
- * might be incompatible with any new code from the jffs2 maintainers anyway,
- * it should probably be dumped and replaced by something like jffs2reader!
- */
-
-
-#include <common.h>
-#include <config.h>
-#include <malloc.h>
-#include <linux/stat.h>
-#include <linux/time.h>
-#include <watchdog.h>
-#include <jffs2/jffs2.h>
-#include <jffs2/jffs2_1pass.h>
-#include <linux/mtd/compat.h>
-
-#include "jffs2_private.h"
-
-
-#define NODE_CHUNK 1024 /* size of memory allocation chunk in b_nodes */
-#define SPIN_BLKSIZE 18 /* spin after having scanned 1<<BLKSIZE bytes */
-
-/* Debugging switches */
-#undef DEBUG_DIRENTS /* print directory entry list after scan */
-#undef DEBUG_FRAGMENTS /* print fragment list after scan */
-#undef DEBUG /* enable debugging messages */
-
-
-#ifdef DEBUG
-# define DEBUGF(fmt,args...) printf(fmt ,##args)
-#else
-# define DEBUGF(fmt,args...)
-#endif
-
-#include "summary.h"
-
-/* keeps pointer to currentlu processed partition */
-static struct part_info *current_part;
-
-#if (defined(CONFIG_JFFS2_NAND) && \
- defined(CONFIG_CMD_NAND) )
-#if defined(CONFIG_NAND_LEGACY)
-#include <linux/mtd/nand_legacy.h>
-#else
-#include <nand.h>
-#endif
-/*
- * Support for jffs2 on top of NAND-flash
- *
- * NAND memory isn't mapped in processor's address space,
- * so data should be fetched from flash before
- * being processed. This is exactly what functions declared
- * here do.
- *
- */
-
-#if defined(CONFIG_NAND_LEGACY)
-/* this one defined in nand_legacy.c */
-int read_jffs2_nand(size_t start, size_t len,
- size_t * retlen, u_char * buf, int nanddev);
-#endif
-
-#define NAND_PAGE_SIZE 512
-#define NAND_PAGE_SHIFT 9
-#define NAND_PAGE_MASK (~(NAND_PAGE_SIZE-1))
-
-#ifndef NAND_CACHE_PAGES
-#define NAND_CACHE_PAGES 16
-#endif
-#define NAND_CACHE_SIZE (NAND_CACHE_PAGES*NAND_PAGE_SIZE)
-
-static u8* nand_cache = NULL;
-static u32 nand_cache_off = (u32)-1;
-
-static int read_nand_cached(u32 off, u32 size, u_char *buf)
-{
- struct mtdids *id = current_part->dev->id;
- u32 bytes_read = 0;
- size_t retlen;
- int cpy_bytes;
-
- while (bytes_read < size) {
- if ((off + bytes_read < nand_cache_off) ||
- (off + bytes_read >= nand_cache_off+NAND_CACHE_SIZE)) {
- nand_cache_off = (off + bytes_read) & NAND_PAGE_MASK;
- if (!nand_cache) {
- /* This memory never gets freed but 'cause
- it's a bootloader, nobody cares */
- nand_cache = malloc(NAND_CACHE_SIZE);
- if (!nand_cache) {
- printf("read_nand_cached: can't alloc cache size %d bytes\n",
- NAND_CACHE_SIZE);
- return -1;
- }
- }
-
-#if defined(CONFIG_NAND_LEGACY)
- if (read_jffs2_nand(nand_cache_off, NAND_CACHE_SIZE,
- &retlen, nand_cache, id->num) < 0 ||
- retlen != NAND_CACHE_SIZE) {
- printf("read_nand_cached: error reading nand off %#x size %d bytes\n",
- nand_cache_off, NAND_CACHE_SIZE);
- return -1;
- }
-#else
- retlen = NAND_CACHE_SIZE;
- if (nand_read(&nand_info[id->num], nand_cache_off,
- &retlen, nand_cache) != 0 ||
- retlen != NAND_CACHE_SIZE) {
- printf("read_nand_cached: error reading nand off %#x size %d bytes\n",
- nand_cache_off, NAND_CACHE_SIZE);
- return -1;
- }
-#endif
- }
- cpy_bytes = nand_cache_off + NAND_CACHE_SIZE - (off + bytes_read);
- if (cpy_bytes > size - bytes_read)
- cpy_bytes = size - bytes_read;
- memcpy(buf + bytes_read,
- nand_cache + off + bytes_read - nand_cache_off,
- cpy_bytes);
- bytes_read += cpy_bytes;
- }
- return bytes_read;
-}
-
-static void *get_fl_mem_nand(u32 off, u32 size, void *ext_buf)
-{
- u_char *buf = ext_buf ? (u_char*)ext_buf : (u_char*)malloc(size);
-
- if (NULL == buf) {
- printf("get_fl_mem_nand: can't alloc %d bytes\n", size);
- return NULL;
- }
- if (read_nand_cached(off, size, buf) < 0) {
- if (!ext_buf)
- free(buf);
- return NULL;
- }
-
- return buf;
-}
-
-static void *get_node_mem_nand(u32 off, void *ext_buf)
-{
- struct jffs2_unknown_node node;
- void *ret = NULL;
-
- if (NULL == get_fl_mem_nand(off, sizeof(node), &node))
- return NULL;
-
- if (!(ret = get_fl_mem_nand(off, node.magic ==
- JFFS2_MAGIC_BITMASK ? node.totlen : sizeof(node),
- ext_buf))) {
- printf("off = %#x magic %#x type %#x node.totlen = %d\n",
- off, node.magic, node.nodetype, node.totlen);
- }
- return ret;
-}
-
-static void put_fl_mem_nand(void *buf)
-{
- free(buf);
-}
-#endif
-
-#if defined(CONFIG_CMD_ONENAND)
-
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/onenand.h>
-#include <onenand_uboot.h>
-
-#define ONENAND_PAGE_SIZE 2048
-#define ONENAND_PAGE_SHIFT 11
-#define ONENAND_PAGE_MASK (~(ONENAND_PAGE_SIZE-1))
-
-#ifndef ONENAND_CACHE_PAGES
-#define ONENAND_CACHE_PAGES 4
-#endif
-#define ONENAND_CACHE_SIZE (ONENAND_CACHE_PAGES*ONENAND_PAGE_SIZE)
-
-static u8* onenand_cache;
-static u32 onenand_cache_off = (u32)-1;
-
-static int read_onenand_cached(u32 off, u32 size, u_char *buf)
-{
- u32 bytes_read = 0;
- size_t retlen;
- int cpy_bytes;
-
- while (bytes_read < size) {
- if ((off + bytes_read < onenand_cache_off) ||
- (off + bytes_read >= onenand_cache_off + ONENAND_CACHE_SIZE)) {
- onenand_cache_off = (off + bytes_read) & ONENAND_PAGE_MASK;
- if (!onenand_cache) {
- /* This memory never gets freed but 'cause
- it's a bootloader, nobody cares */
- onenand_cache = malloc(ONENAND_CACHE_SIZE);
- if (!onenand_cache) {
- printf("read_onenand_cached: can't alloc cache size %d bytes\n",
- ONENAND_CACHE_SIZE);
- return -1;
- }
- }
-
- retlen = ONENAND_CACHE_SIZE;
- if (onenand_read(&onenand_mtd, onenand_cache_off, retlen,
- &retlen, onenand_cache) != 0 ||
- retlen != ONENAND_CACHE_SIZE) {
- printf("read_onenand_cached: error reading nand off %#x size %d bytes\n",
- onenand_cache_off, ONENAND_CACHE_SIZE);
- return -1;
- }
- }
- cpy_bytes = onenand_cache_off + ONENAND_CACHE_SIZE - (off + bytes_read);
- if (cpy_bytes > size - bytes_read)
- cpy_bytes = size - bytes_read;
- memcpy(buf + bytes_read,
- onenand_cache + off + bytes_read - onenand_cache_off,
- cpy_bytes);
- bytes_read += cpy_bytes;
- }
- return bytes_read;
-}
-
-static void *get_fl_mem_onenand(u32 off, u32 size, void *ext_buf)
-{
- u_char *buf = ext_buf ? (u_char *)ext_buf : (u_char *)malloc(size);
-
- if (NULL == buf) {
- printf("get_fl_mem_onenand: can't alloc %d bytes\n", size);
- return NULL;
- }
- if (read_onenand_cached(off, size, buf) < 0) {
- if (!ext_buf)
- free(buf);
- return NULL;
- }
-
- return buf;
-}
-
-static void *get_node_mem_onenand(u32 off, void *ext_buf)
-{
- struct jffs2_unknown_node node;
- void *ret = NULL;
-
- if (NULL == get_fl_mem_onenand(off, sizeof(node), &node))
- return NULL;
-
- ret = get_fl_mem_onenand(off, node.magic ==
- JFFS2_MAGIC_BITMASK ? node.totlen : sizeof(node),
- ext_buf);
- if (!ret) {
- printf("off = %#x magic %#x type %#x node.totlen = %d\n",
- off, node.magic, node.nodetype, node.totlen);
- }
- return ret;
-}
-
-
-static void put_fl_mem_onenand(void *buf)
-{
- free(buf);
-}
-#endif
-
-
-#if defined(CONFIG_CMD_FLASH)
-/*
- * Support for jffs2 on top of NOR-flash
- *
- * NOR flash memory is mapped in processor's address space,
- * just return address.
- */
-static inline void *get_fl_mem_nor(u32 off, u32 size, void *ext_buf)
-{
- u32 addr = off;
- struct mtdids *id = current_part->dev->id;
-
- extern flash_info_t flash_info[];
- flash_info_t *flash = &flash_info[id->num];
-
- addr += flash->start[0];
- if (ext_buf) {
- memcpy(ext_buf, (void *)addr, size);
- return ext_buf;
- }
- return (void*)addr;
-}
-
-static inline void *get_node_mem_nor(u32 off, void *ext_buf)
-{
- struct jffs2_unknown_node *pNode;
-
- /* pNode will point directly to flash - don't provide external buffer
- and don't care about size */
- pNode = get_fl_mem_nor(off, 0, NULL);
- return (void *)get_fl_mem_nor(off, pNode->magic == JFFS2_MAGIC_BITMASK ?
- pNode->totlen : sizeof(*pNode), ext_buf);
-}
-#endif
-
-
-/*
- * Generic jffs2 raw memory and node read routines.
- *
- */
-static inline void *get_fl_mem(u32 off, u32 size, void *ext_buf)
-{
- struct mtdids *id = current_part->dev->id;
-
-#if defined(CONFIG_CMD_FLASH)
- if (id->type == MTD_DEV_TYPE_NOR) {
- return get_fl_mem_nor(off, size, ext_buf);
- }
-#endif
-
-#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
- if (id->type == MTD_DEV_TYPE_NAND)
- return get_fl_mem_nand(off, size, ext_buf);
-#endif
-
-#if defined(CONFIG_CMD_ONENAND)
- if (id->type == MTD_DEV_TYPE_ONENAND)
- return get_fl_mem_onenand(off, size, ext_buf);
-#endif
-
- printf("get_fl_mem: unknown device type, using raw offset!\n");
- return (void*)off;
-}
-
-static inline void *get_node_mem(u32 off, void *ext_buf)
-{
- struct mtdids *id = current_part->dev->id;
-
-#if defined(CONFIG_CMD_FLASH)
- if (id->type == MTD_DEV_TYPE_NOR)
- return get_node_mem_nor(off, ext_buf);
-#endif
-
-#if defined(CONFIG_JFFS2_NAND) && \
- defined(CONFIG_CMD_NAND)
- if (id->type == MTD_DEV_TYPE_NAND)
- return get_node_mem_nand(off, ext_buf);
-#endif
-
-#if defined(CONFIG_CMD_ONENAND)
- if (id->type == MTD_DEV_TYPE_ONENAND)
- return get_node_mem_onenand(off, ext_buf);
-#endif
-
- printf("get_node_mem: unknown device type, using raw offset!\n");
- return (void*)off;
-}
-
-static inline void put_fl_mem(void *buf, void *ext_buf)
-{
- struct mtdids *id = current_part->dev->id;
-
- /* If buf is the same as ext_buf, it was provided by the caller -
- we shouldn't free it then. */
- if (buf == ext_buf)
- return;
- switch (id->type) {
-#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
- case MTD_DEV_TYPE_NAND:
- return put_fl_mem_nand(buf);
-#endif
-#if defined(CONFIG_CMD_ONENAND)
- case MTD_DEV_TYPE_ONENAND:
- return put_fl_mem_onenand(buf);
-#endif
- }
-}
-
-/* Compression names */
-static char *compr_names[] = {
- "NONE",
- "ZERO",
- "RTIME",
- "RUBINMIPS",
- "COPY",
- "DYNRUBIN",
- "ZLIB",
-#if defined(CONFIG_JFFS2_LZO_LZARI)
- "LZO",
- "LZARI",
-#endif
-};
-
-/* Memory management */
-struct mem_block {
- u32 index;
- struct mem_block *next;
- struct b_node nodes[NODE_CHUNK];
-};
-
-
-static void
-free_nodes(struct b_list *list)
-{
- while (list->listMemBase != NULL) {
- struct mem_block *next = list->listMemBase->next;
- free( list->listMemBase );
- list->listMemBase = next;
- }
-}
-
-static struct b_node *
-add_node(struct b_list *list)
-{
- u32 index = 0;
- struct mem_block *memBase;
- struct b_node *b;
-
- memBase = list->listMemBase;
- if (memBase != NULL)
- index = memBase->index;
-#if 0
- putLabeledWord("add_node: index = ", index);
- putLabeledWord("add_node: memBase = ", list->listMemBase);
-#endif
-
- if (memBase == NULL || index >= NODE_CHUNK) {
- /* we need more space before we continue */
- memBase = mmalloc(sizeof(struct mem_block));
- if (memBase == NULL) {
- putstr("add_node: malloc failed\n");
- return NULL;
- }
- memBase->next = list->listMemBase;
- index = 0;
-#if 0
- putLabeledWord("add_node: alloced a new membase at ", *memBase);
-#endif
-
- }
- /* now we have room to add it. */
- b = &memBase->nodes[index];
- index ++;
-
- memBase->index = index;
- list->listMemBase = memBase;
- list->listCount++;
- return b;
-}
-
-static struct b_node *
-insert_node(struct b_list *list, u32 offset)
-{
- struct b_node *new;
-#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
- struct b_node *b, *prev;
-#endif
-
- if (!(new = add_node(list))) {
- putstr("add_node failed!\r\n");
- return NULL;
- }
- new->offset = offset;
-
-#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
- if (list->listTail != NULL && list->listCompare(new, list->listTail))
- prev = list->listTail;
- else if (list->listLast != NULL && list->listCompare(new, list->listLast))
- prev = list->listLast;
- else
- prev = NULL;
-
- for (b = (prev ? prev->next : list->listHead);
- b != NULL && list->listCompare(new, b);
- prev = b, b = b->next) {
- list->listLoops++;
- }
- if (b != NULL)
- list->listLast = prev;
-
- if (b != NULL) {
- new->next = b;
- if (prev != NULL)
- prev->next = new;
- else
- list->listHead = new;
- } else
-#endif
- {
- new->next = (struct b_node *) NULL;
- if (list->listTail != NULL) {
- list->listTail->next = new;
- list->listTail = new;
- } else {
- list->listTail = list->listHead = new;
- }
- }
-
- return new;
-}
-
-#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
-/* Sort data entries with the latest version last, so that if there
- * is overlapping data the latest version will be used.
- */
-static int compare_inodes(struct b_node *new, struct b_node *old)
-{
- struct jffs2_raw_inode ojNew;
- struct jffs2_raw_inode ojOld;
- struct jffs2_raw_inode *jNew =
- (struct jffs2_raw_inode *)get_fl_mem(new->offset, sizeof(ojNew), &ojNew);
- struct jffs2_raw_inode *jOld =
- (struct jffs2_raw_inode *)get_fl_mem(old->offset, sizeof(ojOld), &ojOld);
-
- return jNew->version > jOld->version;
-}
-
-/* Sort directory entries so all entries in the same directory
- * with the same name are grouped together, with the latest version
- * last. This makes it easy to eliminate all but the latest version
- * by marking the previous version dead by setting the inode to 0.
- */
-static int compare_dirents(struct b_node *new, struct b_node *old)
-{
- struct jffs2_raw_dirent ojNew;
- struct jffs2_raw_dirent ojOld;
- struct jffs2_raw_dirent *jNew =
- (struct jffs2_raw_dirent *)get_fl_mem(new->offset, sizeof(ojNew), &ojNew);
- struct jffs2_raw_dirent *jOld =
- (struct jffs2_raw_dirent *)get_fl_mem(old->offset, sizeof(ojOld), &ojOld);
- int cmp;
-
- /* ascending sort by pino */
- if (jNew->pino != jOld->pino)
- return jNew->pino > jOld->pino;
-
- /* pino is the same, so use ascending sort by nsize, so
- * we don't do strncmp unless we really must.
- */
- if (jNew->nsize != jOld->nsize)
- return jNew->nsize > jOld->nsize;
-
- /* length is also the same, so use ascending sort by name
- */
- cmp = strncmp((char *)jNew->name, (char *)jOld->name, jNew->nsize);
- if (cmp != 0)
- return cmp > 0;
-
- /* we have duplicate names in this directory, so use ascending
- * sort by version
- */
- if (jNew->version > jOld->version) {
- /* since jNew is newer, we know jOld is not valid, so
- * mark it with inode 0 and it will not be used
- */
- jOld->ino = 0;
- return 1;
- }
-
- return 0;
-}
-#endif
-
-void
-jffs2_free_cache(struct part_info *part)
-{
- struct b_lists *pL;
-
- if (part->jffs2_priv != NULL) {
- pL = (struct b_lists *)part->jffs2_priv;
- free_nodes(&pL->frag);
- free_nodes(&pL->dir);
- free(pL->readbuf);
- free(pL);
- }
-}
-
-static u32
-jffs_init_1pass_list(struct part_info *part)
-{
- struct b_lists *pL;
-
- jffs2_free_cache(part);
-
- if (NULL != (part->jffs2_priv = malloc(sizeof(struct b_lists)))) {
- pL = (struct b_lists *)part->jffs2_priv;
-
- memset(pL, 0, sizeof(*pL));
-#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
- pL->dir.listCompare = compare_dirents;
- pL->frag.listCompare = compare_inodes;
-#endif
- }
- return 0;
-}
-
-/* find the inode from the slashless name given a parent */
-static long
-jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest)
-{
- struct b_node *b;
- struct jffs2_raw_inode *jNode;
- u32 totalSize = 0;
- u32 latestVersion = 0;
- uchar *lDest;
- uchar *src;
- long ret;
- int i;
- u32 counter = 0;
-#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
- /* Find file size before loading any data, so fragments that
- * start past the end of file can be ignored. A fragment
- * that is partially in the file is loaded, so extra data may
- * be loaded up to the next 4K boundary above the file size.
- * This shouldn't cause trouble when loading kernel images, so
- * we will live with it.
- */
- for (b = pL->frag.listHead; b != NULL; b = b->next) {
- jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset,
- sizeof(struct jffs2_raw_inode), pL->readbuf);
- if ((inode == jNode->ino)) {
- /* get actual file length from the newest node */
- if (jNode->version >= latestVersion) {
- totalSize = jNode->isize;
- latestVersion = jNode->version;
- }
- }
- put_fl_mem(jNode, pL->readbuf);
- }
-#endif
-
- for (b = pL->frag.listHead; b != NULL; b = b->next) {
- jNode = (struct jffs2_raw_inode *) get_node_mem(b->offset,
- pL->readbuf);
- if ((inode == jNode->ino)) {
-#if 0
- putLabeledWord("\r\n\r\nread_inode: totlen = ", jNode->totlen);
- putLabeledWord("read_inode: inode = ", jNode->ino);
- putLabeledWord("read_inode: version = ", jNode->version);
- putLabeledWord("read_inode: isize = ", jNode->isize);
- putLabeledWord("read_inode: offset = ", jNode->offset);
- putLabeledWord("read_inode: csize = ", jNode->csize);
- putLabeledWord("read_inode: dsize = ", jNode->dsize);
- putLabeledWord("read_inode: compr = ", jNode->compr);
- putLabeledWord("read_inode: usercompr = ", jNode->usercompr);
- putLabeledWord("read_inode: flags = ", jNode->flags);
-#endif
-
-#ifndef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
- /* get actual file length from the newest node */
- if (jNode->version >= latestVersion) {
- totalSize = jNode->isize;
- latestVersion = jNode->version;
- }
-#endif
-
- if(dest) {
- src = ((uchar *) jNode) + sizeof(struct jffs2_raw_inode);
- /* ignore data behind latest known EOF */
- if (jNode->offset > totalSize) {
- put_fl_mem(jNode, pL->readbuf);
- continue;
- }
- if (b->datacrc == CRC_UNKNOWN)
- b->datacrc = data_crc(jNode) ?
- CRC_OK : CRC_BAD;
- if (b->datacrc == CRC_BAD) {
- put_fl_mem(jNode, pL->readbuf);
- continue;
- }
-
- lDest = (uchar *) (dest + jNode->offset);
-#if 0
- putLabeledWord("read_inode: src = ", src);
- putLabeledWord("read_inode: dest = ", lDest);
-#endif
- switch (jNode->compr) {
- case JFFS2_COMPR_NONE:
- ret = (unsigned long) ldr_memcpy(lDest, src, jNode->dsize);
- break;
- case JFFS2_COMPR_ZERO:
- ret = 0;
- for (i = 0; i < jNode->dsize; i++)
- *(lDest++) = 0;
- break;
- case JFFS2_COMPR_RTIME:
- ret = 0;
- rtime_decompress(src, lDest, jNode->csize, jNode->dsize);
- break;
- case JFFS2_COMPR_DYNRUBIN:
- /* this is slow but it works */
- ret = 0;
- dynrubin_decompress(src, lDest, jNode->csize, jNode->dsize);
- break;
- case JFFS2_COMPR_ZLIB:
- ret = zlib_decompress(src, lDest, jNode->csize, jNode->dsize);
- break;
-#if defined(CONFIG_JFFS2_LZO_LZARI)
- case JFFS2_COMPR_LZO:
- ret = lzo_decompress(src, lDest, jNode->csize, jNode->dsize);
- break;
- case JFFS2_COMPR_LZARI:
- ret = lzari_decompress(src, lDest, jNode->csize, jNode->dsize);
- break;
-#endif
- default:
- /* unknown */
- putLabeledWord("UNKOWN COMPRESSION METHOD = ", jNode->compr);
- put_fl_mem(jNode, pL->readbuf);
- return -1;
- break;
- }
- }
-
-#if 0
- putLabeledWord("read_inode: totalSize = ", totalSize);
- putLabeledWord("read_inode: compr ret = ", ret);
-#endif
- }
- counter++;
- put_fl_mem(jNode, pL->readbuf);
- }
-
-#if 0
- putLabeledWord("read_inode: returning = ", totalSize);
-#endif
- return totalSize;
-}
-
-/* find the inode from the slashless name given a parent */
-static u32
-jffs2_1pass_find_inode(struct b_lists * pL, const char *name, u32 pino)
-{
- struct b_node *b;
- struct jffs2_raw_dirent *jDir;
- int len;
- u32 counter;
- u32 version = 0;
- u32 inode = 0;
-
- /* name is assumed slash free */
- len = strlen(name);
-
- counter = 0;
- /* we need to search all and return the inode with the highest version */
- for(b = pL->dir.listHead; b; b = b->next, counter++) {
- jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
- pL->readbuf);
- if ((pino == jDir->pino) && (len == jDir->nsize) &&
- (jDir->ino) && /* 0 for unlink */
- (!strncmp((char *)jDir->name, name, len))) { /* a match */
- if (jDir->version < version) {
- put_fl_mem(jDir, pL->readbuf);
- continue;
- }
-
- if (jDir->version == version && inode != 0) {
- /* I'm pretty sure this isn't legal */
- putstr(" ** ERROR ** ");
- putnstr(jDir->name, jDir->nsize);
- putLabeledWord(" has dup version =", version);
- }
- inode = jDir->ino;
- version = jDir->version;
- }
-#if 0
- putstr("\r\nfind_inode:p&l ->");
- putnstr(jDir->name, jDir->nsize);
- putstr("\r\n");
- putLabeledWord("pino = ", jDir->pino);
- putLabeledWord("nsize = ", jDir->nsize);
- putLabeledWord("b = ", (u32) b);
- putLabeledWord("counter = ", counter);
-#endif
- put_fl_mem(jDir, pL->readbuf);
- }
- return inode;
-}
-
-char *mkmodestr(unsigned long mode, char *str)
-{
- static const char *l = "xwr";
- int mask = 1, i;
- char c;
-
- switch (mode & S_IFMT) {
- case S_IFDIR: str[0] = 'd'; break;
- case S_IFBLK: str[0] = 'b'; break;
- case S_IFCHR: str[0] = 'c'; break;
- case S_IFIFO: str[0] = 'f'; break;
- case S_IFLNK: str[0] = 'l'; break;
- case S_IFSOCK: str[0] = 's'; break;
- case S_IFREG: str[0] = '-'; break;
- default: str[0] = '?';
- }
-
- for(i = 0; i < 9; i++) {
- c = l[i%3];
- str[9-i] = (mode & mask)?c:'-';
- mask = mask<<1;
- }
-
- if(mode & S_ISUID) str[3] = (mode & S_IXUSR)?'s':'S';
- if(mode & S_ISGID) str[6] = (mode & S_IXGRP)?'s':'S';
- if(mode & S_ISVTX) str[9] = (mode & S_IXOTH)?'t':'T';
- str[10] = '\0';
- return str;
-}
-
-static inline void dump_stat(struct stat *st, const char *name)
-{
- char str[20];
- char s[64], *p;
-
- if (st->st_mtime == (time_t)(-1)) /* some ctimes really hate -1 */
- st->st_mtime = 1;
-
- ctime_r((time_t *)&st->st_mtime, s/*,64*/); /* newlib ctime doesn't have buflen */
-
- if ((p = strchr(s,'\n')) != NULL) *p = '\0';
- if ((p = strchr(s,'\r')) != NULL) *p = '\0';
-
-/*
- printf("%6lo %s %8ld %s %s\n", st->st_mode, mkmodestr(st->st_mode, str),
- st->st_size, s, name);
-*/
-
- printf(" %s %8ld %s %s", mkmodestr(st->st_mode,str), st->st_size, s, name);
-}
-
-static inline u32 dump_inode(struct b_lists * pL, struct jffs2_raw_dirent *d, struct jffs2_raw_inode *i)
-{
- char fname[256];
- struct stat st;
-
- if(!d || !i) return -1;
-
- strncpy(fname, (char *)d->name, d->nsize);
- fname[d->nsize] = '\0';
-
- memset(&st,0,sizeof(st));
-
- st.st_mtime = i->mtime;
- st.st_mode = i->mode;
- st.st_ino = i->ino;
- st.st_size = i->isize;
-
- dump_stat(&st, fname);
-
- if (d->type == DT_LNK) {
- unsigned char *src = (unsigned char *) (&i[1]);
- putstr(" -> ");
- putnstr(src, (int)i->dsize);
- }
-
- putstr("\r\n");
-
- return 0;
-}
-
-/* list inodes with the given pino */
-static u32
-jffs2_1pass_list_inodes(struct b_lists * pL, u32 pino)
-{
- struct b_node *b;
- struct jffs2_raw_dirent *jDir;
-
- for (b = pL->dir.listHead; b; b = b->next) {
- jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
- pL->readbuf);
- if ((pino == jDir->pino) && (jDir->ino)) { /* ino=0 -> unlink */
- u32 i_version = 0;
- struct jffs2_raw_inode ojNode;
- struct jffs2_raw_inode *jNode, *i = NULL;
- struct b_node *b2 = pL->frag.listHead;
-
- while (b2) {
- jNode = (struct jffs2_raw_inode *)
- get_fl_mem(b2->offset, sizeof(ojNode), &ojNode);
- if (jNode->ino == jDir->ino && jNode->version >= i_version) {
- i_version = jNode->version;
- if (i)
- put_fl_mem(i, NULL);
-
- if (jDir->type == DT_LNK)
- i = get_node_mem(b2->offset,
- NULL);
- else
- i = get_fl_mem(b2->offset,
- sizeof(*i),
- NULL);
- }
- b2 = b2->next;
- }
-
- dump_inode(pL, jDir, i);
- put_fl_mem(i, NULL);
- }
- put_fl_mem(jDir, pL->readbuf);
- }
- return pino;
-}
-
-static u32
-jffs2_1pass_search_inode(struct b_lists * pL, const char *fname, u32 pino)
-{
- int i;
- char tmp[256];
- char working_tmp[256];
- char *c;
-
- /* discard any leading slash */
- i = 0;
- while (fname[i] == '/')
- i++;
- strcpy(tmp, &fname[i]);
-
- while ((c = (char *) strchr(tmp, '/'))) /* we are still dired searching */
- {
- strncpy(working_tmp, tmp, c - tmp);
- working_tmp[c - tmp] = '\0';
-#if 0
- putstr("search_inode: tmp = ");
- putstr(tmp);
- putstr("\r\n");
- putstr("search_inode: wtmp = ");
- putstr(working_tmp);
- putstr("\r\n");
- putstr("search_inode: c = ");
- putstr(c);
- putstr("\r\n");
-#endif
- for (i = 0; i < strlen(c) - 1; i++)
- tmp[i] = c[i + 1];
- tmp[i] = '\0';
-#if 0
- putstr("search_inode: post tmp = ");
- putstr(tmp);
- putstr("\r\n");
-#endif
-
- if (!(pino = jffs2_1pass_find_inode(pL, working_tmp, pino))) {
- putstr("find_inode failed for name=");
- putstr(working_tmp);
- putstr("\r\n");
- return 0;
- }
- }
- /* this is for the bare filename, directories have already been mapped */
- if (!(pino = jffs2_1pass_find_inode(pL, tmp, pino))) {
- putstr("find_inode failed for name=");
- putstr(tmp);
- putstr("\r\n");
- return 0;
- }
- return pino;
-
-}
-
-static u32
-jffs2_1pass_resolve_inode(struct b_lists * pL, u32 ino)
-{
- struct b_node *b;
- struct b_node *b2;
- struct jffs2_raw_dirent *jDir;
- struct jffs2_raw_inode *jNode;
- u8 jDirFoundType = 0;
- u32 jDirFoundIno = 0;
- u32 jDirFoundPino = 0;
- char tmp[256];
- u32 version = 0;
- u32 pino;
- unsigned char *src;
-
- /* we need to search all and return the inode with the highest version */
- for(b = pL->dir.listHead; b; b = b->next) {
- jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
- pL->readbuf);
- if (ino == jDir->ino) {
- if (jDir->version < version) {
- put_fl_mem(jDir, pL->readbuf);
- continue;
- }
-
- if (jDir->version == version && jDirFoundType) {
- /* I'm pretty sure this isn't legal */
- putstr(" ** ERROR ** ");
- putnstr(jDir->name, jDir->nsize);
- putLabeledWord(" has dup version (resolve) = ",
- version);
- }
-
- jDirFoundType = jDir->type;
- jDirFoundIno = jDir->ino;
- jDirFoundPino = jDir->pino;
- version = jDir->version;
- }
- put_fl_mem(jDir, pL->readbuf);
- }
- /* now we found the right entry again. (shoulda returned inode*) */
- if (jDirFoundType != DT_LNK)
- return jDirFoundIno;
-
- /* it's a soft link so we follow it again. */
- b2 = pL->frag.listHead;
- while (b2) {
- jNode = (struct jffs2_raw_inode *) get_node_mem(b2->offset,
- pL->readbuf);
- if (jNode->ino == jDirFoundIno) {
- src = (unsigned char *)jNode + sizeof(struct jffs2_raw_inode);
-
-#if 0
- putLabeledWord("\t\t dsize = ", jNode->dsize);
- putstr("\t\t target = ");
- putnstr(src, jNode->dsize);
- putstr("\r\n");
-#endif
- strncpy(tmp, (char *)src, jNode->dsize);
- tmp[jNode->dsize] = '\0';
- put_fl_mem(jNode, pL->readbuf);
- break;
- }
- b2 = b2->next;
- put_fl_mem(jNode, pL->readbuf);
- }
- /* ok so the name of the new file to find is in tmp */
- /* if it starts with a slash it is root based else shared dirs */
- if (tmp[0] == '/')
- pino = 1;
- else
- pino = jDirFoundPino;
-
- return jffs2_1pass_search_inode(pL, tmp, pino);
-}
-
-static u32
-jffs2_1pass_search_list_inodes(struct b_lists * pL, const char *fname, u32 pino)
-{
- int i;
- char tmp[256];
- char working_tmp[256];
- char *c;
-
- /* discard any leading slash */
- i = 0;
- while (fname[i] == '/')
- i++;
- strcpy(tmp, &fname[i]);
- working_tmp[0] = '\0';
- while ((c = (char *) strchr(tmp, '/'))) /* we are still dired searching */
- {
- strncpy(working_tmp, tmp, c - tmp);
- working_tmp[c - tmp] = '\0';
- for (i = 0; i < strlen(c) - 1; i++)
- tmp[i] = c[i + 1];
- tmp[i] = '\0';
- /* only a failure if we arent looking at top level */
- if (!(pino = jffs2_1pass_find_inode(pL, working_tmp, pino)) &&
- (working_tmp[0])) {
- putstr("find_inode failed for name=");
- putstr(working_tmp);
- putstr("\r\n");
- return 0;
- }
- }
-
- if (tmp[0] && !(pino = jffs2_1pass_find_inode(pL, tmp, pino))) {
- putstr("find_inode failed for name=");
- putstr(tmp);
- putstr("\r\n");
- return 0;
- }
- /* this is for the bare filename, directories have already been mapped */
- if (!(pino = jffs2_1pass_list_inodes(pL, pino))) {
- putstr("find_inode failed for name=");
- putstr(tmp);
- putstr("\r\n");
- return 0;
- }
- return pino;
-
-}
-
-unsigned char
-jffs2_1pass_rescan_needed(struct part_info *part)
-{
- struct b_node *b;
- struct jffs2_unknown_node onode;
- struct jffs2_unknown_node *node;
- struct b_lists *pL = (struct b_lists *)part->jffs2_priv;
-
- if (part->jffs2_priv == 0){
- DEBUGF ("rescan: First time in use\n");
- return 1;
- }
-
- /* if we have no list, we need to rescan */
- if (pL->frag.listCount == 0) {
- DEBUGF ("rescan: fraglist zero\n");
- return 1;
- }
-
- /* but suppose someone reflashed a partition at the same offset... */
- b = pL->dir.listHead;
- while (b) {
- node = (struct jffs2_unknown_node *) get_fl_mem(b->offset,
- sizeof(onode), &onode);
- if (node->nodetype != JFFS2_NODETYPE_DIRENT) {
- DEBUGF ("rescan: fs changed beneath me? (%lx)\n",
- (unsigned long) b->offset);
- return 1;
- }
- b = b->next;
- }
- return 0;
-}
-
-#define dbg_summary(...) do {} while (0);
-/* Process the stored summary information - helper function for
- * jffs2_sum_scan_sumnode()
- */
-
-static int jffs2_sum_process_sum_data(struct part_info *part, uint32_t offset,
- struct jffs2_raw_summary *summary,
- struct b_lists *pL)
-{
- void *sp;
- int i;
-
- sp = summary->sum;
-
- for (i = 0; i < summary->sum_num; i++) {
- dbg_summary("processing summary index %d\n", i);
-
- switch (((struct jffs2_sum_unknown_flash *)sp)->nodetype) {
- case JFFS2_NODETYPE_INODE: {
- struct jffs2_sum_inode_flash *spi;
- spi = sp;
-
- dbg_summary("Inode at 0x%08x-0x%08x\n",
- offset + spi->offset,
- offset + spi->offset + spi->totlen);
-
- if (insert_node(&pL->frag, (u32) part->offset +
- offset + spi->offset) == NULL)
- return -1;
-
- sp += JFFS2_SUMMARY_INODE_SIZE;
-
- break;
- }
-
- case JFFS2_NODETYPE_DIRENT: {
- struct jffs2_sum_dirent_flash *spd;
- spd = sp;
-
- dbg_summary("Dirent at 0x%08x-0x%08x\n",
- offset + spd->offset,
- offset + spd->offset + spd->totlen);
-
- if (insert_node(&pL->dir, (u32) part->offset +
- offset + spd->offset) == NULL)
- return -1;
-
- sp += JFFS2_SUMMARY_DIRENT_SIZE(spd->nsize);
-
- break;
- }
- default : {
- uint16_t nodetype =
- ((struct jffs2_sum_unknown_flash *)
- sp)->nodetype;
- printf("Unsupported node type %x found in "
- "summary!\n", nodetype);
- break;
- }
- }
- }
- return 0;
-}
-
-/* Process the summary node - called from jffs2_scan_eraseblock() */
-int jffs2_sum_scan_sumnode(struct part_info *part, uint32_t offset,
- struct jffs2_raw_summary *summary, uint32_t sumsize,
- struct b_lists *pL)
-{
- struct jffs2_unknown_node crcnode;
- int ret, ofs;
- uint32_t crc;
-
- ofs = part->sector_size - sumsize;
-
- dbg_summary("summary found for 0x%08x at 0x%08x (0x%x bytes)\n",
- offset, offset + ofs, sumsize);
-
- /* OK, now check for node validity and CRC */
- crcnode.magic = JFFS2_MAGIC_BITMASK;
- crcnode.nodetype = JFFS2_NODETYPE_SUMMARY;
- crcnode.totlen = summary->totlen;
- crc = crc32_no_comp(0, (uchar *)&crcnode, sizeof(crcnode)-4);
-
- if (summary->hdr_crc != crc) {
- dbg_summary("Summary node header is corrupt (bad CRC or "
- "no summary at all)\n");
- goto crc_err;
- }
-
- if (summary->totlen != sumsize) {
- dbg_summary("Summary node is corrupt (wrong erasesize?)\n");
- goto crc_err;
- }
-
- crc = crc32_no_comp(0, (uchar *)summary,
- sizeof(struct jffs2_raw_summary)-8);
-
- if (summary->node_crc != crc) {
- dbg_summary("Summary node is corrupt (bad CRC)\n");
- goto crc_err;
- }
-
- crc = crc32_no_comp(0, (uchar *)summary->sum,
- sumsize - sizeof(struct jffs2_raw_summary));
-
- if (summary->sum_crc != crc) {
- dbg_summary("Summary node data is corrupt (bad CRC)\n");
- goto crc_err;
- }
-
- if (summary->cln_mkr)
- dbg_summary("Summary : CLEANMARKER node \n");
-
- ret = jffs2_sum_process_sum_data(part, offset, summary, pL);
- if (ret)
- return ret; /* real error */
-
- return 1;
-
-crc_err:
- putstr("Summary node crc error, skipping summary information.\n");
-
- return 0;
-}
-
-#ifdef DEBUG_FRAGMENTS
-static void
-dump_fragments(struct b_lists *pL)
-{
- struct b_node *b;
- struct jffs2_raw_inode ojNode;
- struct jffs2_raw_inode *jNode;
-
- putstr("\r\n\r\n******The fragment Entries******\r\n");
- b = pL->frag.listHead;
- while (b) {
- jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset,
- sizeof(ojNode), &ojNode);
- putLabeledWord("\r\n\tbuild_list: FLASH_OFFSET = ", b->offset);
- putLabeledWord("\tbuild_list: totlen = ", jNode->totlen);
- putLabeledWord("\tbuild_list: inode = ", jNode->ino);
- putLabeledWord("\tbuild_list: version = ", jNode->version);
- putLabeledWord("\tbuild_list: isize = ", jNode->isize);
- putLabeledWord("\tbuild_list: atime = ", jNode->atime);
- putLabeledWord("\tbuild_list: offset = ", jNode->offset);
- putLabeledWord("\tbuild_list: csize = ", jNode->csize);
- putLabeledWord("\tbuild_list: dsize = ", jNode->dsize);
- putLabeledWord("\tbuild_list: compr = ", jNode->compr);
- putLabeledWord("\tbuild_list: usercompr = ", jNode->usercompr);
- putLabeledWord("\tbuild_list: flags = ", jNode->flags);
- putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */
- b = b->next;
- }
-}
-#endif
-
-#ifdef DEBUG_DIRENTS
-static void
-dump_dirents(struct b_lists *pL)
-{
- struct b_node *b;
- struct jffs2_raw_dirent *jDir;
-
- putstr("\r\n\r\n******The directory Entries******\r\n");
- b = pL->dir.listHead;
- while (b) {
- jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
- pL->readbuf);
- putstr("\r\n");
- putnstr(jDir->name, jDir->nsize);
- putLabeledWord("\r\n\tbuild_list: magic = ", jDir->magic);
- putLabeledWord("\tbuild_list: nodetype = ", jDir->nodetype);
- putLabeledWord("\tbuild_list: hdr_crc = ", jDir->hdr_crc);
- putLabeledWord("\tbuild_list: pino = ", jDir->pino);
- putLabeledWord("\tbuild_list: version = ", jDir->version);
- putLabeledWord("\tbuild_list: ino = ", jDir->ino);
- putLabeledWord("\tbuild_list: mctime = ", jDir->mctime);
- putLabeledWord("\tbuild_list: nsize = ", jDir->nsize);
- putLabeledWord("\tbuild_list: type = ", jDir->type);
- putLabeledWord("\tbuild_list: node_crc = ", jDir->node_crc);
- putLabeledWord("\tbuild_list: name_crc = ", jDir->name_crc);
- putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */
- b = b->next;
- put_fl_mem(jDir, pL->readbuf);
- }
-}
-#endif
-
-#define DEFAULT_EMPTY_SCAN_SIZE 4096
-
-static inline uint32_t EMPTY_SCAN_SIZE(uint32_t sector_size)
-{
- if (sector_size < DEFAULT_EMPTY_SCAN_SIZE)
- return sector_size;
- else
- return DEFAULT_EMPTY_SCAN_SIZE;
-}
-
-static u32
-jffs2_1pass_build_lists(struct part_info * part)
-{
- struct b_lists *pL;
- struct jffs2_unknown_node *node;
- u32 nr_sectors = part->size/part->sector_size;
- u32 i;
- u32 counter4 = 0;
- u32 counterF = 0;
- u32 counterN = 0;
- u32 max_totlen = 0;
- u32 buf_size = DEFAULT_EMPTY_SCAN_SIZE;
- char *buf;
-
- /* turn off the lcd. Refreshing the lcd adds 50% overhead to the */
- /* jffs2 list building enterprise nope. in newer versions the overhead is */
- /* only about 5 %. not enough to inconvenience people for. */
- /* lcd_off(); */
-
- /* if we are building a list we need to refresh the cache. */
- jffs_init_1pass_list(part);
- pL = (struct b_lists *)part->jffs2_priv;
- buf = malloc(buf_size);
- puts ("Scanning JFFS2 FS: ");
-
- /* start at the beginning of the partition */
- for (i = 0; i < nr_sectors; i++) {
- uint32_t sector_ofs = i * part->sector_size;
- uint32_t buf_ofs = sector_ofs;
- uint32_t buf_len;
- uint32_t ofs, prevofs;
- struct jffs2_sum_marker *sm;
- void *sumptr = NULL;
- uint32_t sumlen;
- int ret;
-
- WATCHDOG_RESET();
-
- buf_len = sizeof(*sm);
-
- /* Read as much as we want into the _end_ of the preallocated
- * buffer
- */
- get_fl_mem(part->offset + sector_ofs + part->sector_size -
- buf_len, buf_len, buf + buf_size - buf_len);
-
- sm = (void *)buf + buf_size - sizeof(*sm);
- if (sm->magic == JFFS2_SUM_MAGIC) {
- sumlen = part->sector_size - sm->offset;
- sumptr = buf + buf_size - sumlen;
-
- /* Now, make sure the summary itself is available */
- if (sumlen > buf_size) {
- /* Need to kmalloc for this. */
- sumptr = malloc(sumlen);
- if (!sumptr) {
- putstr("Can't get memory for summary "
- "node!\n");
- return 0;
- }
- memcpy(sumptr + sumlen - buf_len, buf +
- buf_size - buf_len, buf_len);
- }
- if (buf_len < sumlen) {
- /* Need to read more so that the entire summary
- * node is present
- */
- get_fl_mem(part->offset + sector_ofs +
- part->sector_size - sumlen,
- sumlen - buf_len, sumptr);
- }
- }
-
- if (sumptr) {
- ret = jffs2_sum_scan_sumnode(part, sector_ofs, sumptr,
- sumlen, pL);
-
- if (buf_size && sumlen > buf_size)
- free(sumptr);
- if (ret < 0)
- return 0;
- if (ret)
- continue;
-
- }
-
- buf_len = EMPTY_SCAN_SIZE(part->sector_size);
-
- get_fl_mem((u32)part->offset + buf_ofs, buf_len, buf);
-
- /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
- ofs = 0;
-
- /* Scan only 4KiB of 0xFF before declaring it's empty */
- while (ofs < EMPTY_SCAN_SIZE(part->sector_size) &&
- *(uint32_t *)(&buf[ofs]) == 0xFFFFFFFF)
- ofs += 4;
-
- if (ofs == EMPTY_SCAN_SIZE(part->sector_size))
- continue;
-
- ofs += sector_ofs;
- prevofs = ofs - 1;
-
- scan_more:
- while (ofs < sector_ofs + part->sector_size) {
- if (ofs == prevofs) {
- printf("offset %08x already seen, skip\n", ofs);
- ofs += 4;
- counter4++;
- continue;
- }
- prevofs = ofs;
- if (sector_ofs + part->sector_size <
- ofs + sizeof(*node))
- break;
- if (buf_ofs + buf_len < ofs + sizeof(*node)) {
- buf_len = min_t(uint32_t, buf_size, sector_ofs
- + part->sector_size - ofs);
- get_fl_mem((u32)part->offset + ofs, buf_len,
- buf);
- buf_ofs = ofs;
- }
-
- node = (struct jffs2_unknown_node *)&buf[ofs-buf_ofs];
-
- if (*(uint32_t *)(&buf[ofs-buf_ofs]) == 0xffffffff) {
- uint32_t inbuf_ofs;
- uint32_t empty_start, scan_end;
-
- empty_start = ofs;
- ofs += 4;
- scan_end = min_t(uint32_t, EMPTY_SCAN_SIZE(
- part->sector_size)/8,
- buf_len);
- more_empty:
- inbuf_ofs = ofs - buf_ofs;
- while (inbuf_ofs < scan_end) {
- if (*(uint32_t *)(&buf[inbuf_ofs]) !=
- 0xffffffff)
- goto scan_more;
-
- inbuf_ofs += 4;
- ofs += 4;
- }
- /* Ran off end. */
-
- /* See how much more there is to read in this
- * eraseblock...
- */
- buf_len = min_t(uint32_t, buf_size,
- sector_ofs +
- part->sector_size - ofs);
- if (!buf_len) {
- /* No more to read. Break out of main
- * loop without marking this range of
- * empty space as dirty (because it's
- * not)
- */
- break;
- }
- scan_end = buf_len;
- get_fl_mem((u32)part->offset + ofs, buf_len,
- buf);
- buf_ofs = ofs;
- goto more_empty;
- }
- if (node->magic != JFFS2_MAGIC_BITMASK ||
- !hdr_crc(node)) {
- ofs += 4;
- counter4++;
- continue;
- }
- if (ofs + node->totlen >
- sector_ofs + part->sector_size) {
- ofs += 4;
- counter4++;
- continue;
- }
- /* if its a fragment add it */
- switch (node->nodetype) {
- case JFFS2_NODETYPE_INODE:
- if (buf_ofs + buf_len < ofs + sizeof(struct
- jffs2_raw_inode)) {
- get_fl_mem((u32)part->offset + ofs,
- buf_len, buf);
- buf_ofs = ofs;
- node = (void *)buf;
- }
- if (!inode_crc((struct jffs2_raw_inode *) node))
- break;
-
- if (insert_node(&pL->frag, (u32) part->offset +
- ofs) == NULL)
- return 0;
- if (max_totlen < node->totlen)
- max_totlen = node->totlen;
- break;
- case JFFS2_NODETYPE_DIRENT:
- if (buf_ofs + buf_len < ofs + sizeof(struct
- jffs2_raw_dirent) +
- ((struct
- jffs2_raw_dirent *)
- node)->nsize) {
- get_fl_mem((u32)part->offset + ofs,
- buf_len, buf);
- buf_ofs = ofs;
- node = (void *)buf;
- }
-
- if (!dirent_crc((struct jffs2_raw_dirent *)
- node) ||
- !dirent_name_crc(
- (struct
- jffs2_raw_dirent *)
- node))
- break;
- if (! (counterN%100))
- puts ("\b\b. ");
- if (insert_node(&pL->dir, (u32) part->offset +
- ofs) == NULL)
- return 0;
- if (max_totlen < node->totlen)
- max_totlen = node->totlen;
- counterN++;
- break;
- case JFFS2_NODETYPE_CLEANMARKER:
- if (node->totlen != sizeof(struct jffs2_unknown_node))
- printf("OOPS Cleanmarker has bad size "
- "%d != %zu\n",
- node->totlen,
- sizeof(struct jffs2_unknown_node));
- break;
- case JFFS2_NODETYPE_PADDING:
- if (node->totlen < sizeof(struct jffs2_unknown_node))
- printf("OOPS Padding has bad size "
- "%d < %zu\n",
- node->totlen,
- sizeof(struct jffs2_unknown_node));
- break;
- case JFFS2_NODETYPE_SUMMARY:
- break;
- default:
- printf("Unknown node type: %x len %d offset 0x%x\n",
- node->nodetype,
- node->totlen, ofs);
- }
- ofs += ((node->totlen + 3) & ~3);
- counterF++;
- }
- }
-
- free(buf);
- putstr("\b\b done.\r\n"); /* close off the dots */
-
- /* We don't care if malloc failed - then each read operation will
- * allocate its own buffer as necessary (NAND) or will read directly
- * from flash (NOR).
- */
- pL->readbuf = malloc(max_totlen);
-
- /* turn the lcd back on. */
- /* splash(); */
-
-#if 0
- putLabeledWord("dir entries = ", pL->dir.listCount);
- putLabeledWord("frag entries = ", pL->frag.listCount);
- putLabeledWord("+4 increments = ", counter4);
- putLabeledWord("+file_offset increments = ", counterF);
-
-#endif
-
-#ifdef DEBUG_DIRENTS
- dump_dirents(pL);
-#endif
-
-#ifdef DEBUG_FRAGMENTS
- dump_fragments(pL);
-#endif
-
- /* give visual feedback that we are done scanning the flash */
- led_blink(0x0, 0x0, 0x1, 0x1); /* off, forever, on 100ms, off 100ms */
- return 1;
-}
-
-
-static u32
-jffs2_1pass_fill_info(struct b_lists * pL, struct b_jffs2_info * piL)
-{
- struct b_node *b;
- struct jffs2_raw_inode ojNode;
- struct jffs2_raw_inode *jNode;
- int i;
-
- for (i = 0; i < JFFS2_NUM_COMPR; i++) {
- piL->compr_info[i].num_frags = 0;
- piL->compr_info[i].compr_sum = 0;
- piL->compr_info[i].decompr_sum = 0;
- }
-
- b = pL->frag.listHead;
- while (b) {
- jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset,
- sizeof(ojNode), &ojNode);
- if (jNode->compr < JFFS2_NUM_COMPR) {
- piL->compr_info[jNode->compr].num_frags++;
- piL->compr_info[jNode->compr].compr_sum += jNode->csize;
- piL->compr_info[jNode->compr].decompr_sum += jNode->dsize;
- }
- b = b->next;
- }
- return 0;
-}
-
-
-static struct b_lists *
-jffs2_get_list(struct part_info * part, const char *who)
-{
- /* copy requested part_info struct pointer to global location */
- current_part = part;
-
- if (jffs2_1pass_rescan_needed(part)) {
- if (!jffs2_1pass_build_lists(part)) {
- printf("%s: Failed to scan JFFSv2 file structure\n", who);
- return NULL;
- }
- }
- return (struct b_lists *)part->jffs2_priv;
-}
-
-
-/* Print directory / file contents */
-u32
-jffs2_1pass_ls(struct part_info * part, const char *fname)
-{
- struct b_lists *pl;
- long ret = 1;
- u32 inode;
-
- if (! (pl = jffs2_get_list(part, "ls")))
- return 0;
-
- if (! (inode = jffs2_1pass_search_list_inodes(pl, fname, 1))) {
- putstr("ls: Failed to scan jffs2 file structure\r\n");
- return 0;
- }
-
-
-#if 0
- putLabeledWord("found file at inode = ", inode);
- putLabeledWord("read_inode returns = ", ret);
-#endif
-
- return ret;
-}
-
-
-/* Load a file from flash into memory. fname can be a full path */
-u32
-jffs2_1pass_load(char *dest, struct part_info * part, const char *fname)
-{
-
- struct b_lists *pl;
- long ret = 1;
- u32 inode;
-
- if (! (pl = jffs2_get_list(part, "load")))
- return 0;
-
- if (! (inode = jffs2_1pass_search_inode(pl, fname, 1))) {
- putstr("load: Failed to find inode\r\n");
- return 0;
- }
-
- /* Resolve symlinks */
- if (! (inode = jffs2_1pass_resolve_inode(pl, inode))) {
- putstr("load: Failed to resolve inode structure\r\n");
- return 0;
- }
-
- if ((ret = jffs2_1pass_read_inode(pl, inode, dest)) < 0) {
- putstr("load: Failed to read inode\r\n");
- return 0;
- }
-
- DEBUGF ("load: loaded '%s' to 0x%lx (%ld bytes)\n", fname,
- (unsigned long) dest, ret);
- return ret;
-}
-
-/* Return information about the fs on this partition */
-u32
-jffs2_1pass_info(struct part_info * part)
-{
- struct b_jffs2_info info;
- struct b_lists *pl;
- int i;
-
- if (! (pl = jffs2_get_list(part, "info")))
- return 0;
-
- jffs2_1pass_fill_info(pl, &info);
- for (i = 0; i < JFFS2_NUM_COMPR; i++) {
- printf ("Compression: %s\n"
- "\tfrag count: %d\n"
- "\tcompressed sum: %d\n"
- "\tuncompressed sum: %d\n",
- compr_names[i],
- info.compr_info[i].num_frags,
- info.compr_info[i].compr_sum,
- info.compr_info[i].decompr_sum);
- }
- return 1;
-}
+/*
+-------------------------------------------------------------------------
+ * Filename: jffs2.c
+ * Version: $Id: jffs2_1pass.c,v 1.1.1.1 2009/03/25 22:22:11 kenagy Exp $
+ * Copyright: Copyright (C) 2001, Russ Dill
+ * Author: Russ Dill <Russ.Dill@asu.edu>
+ * Description: Module to load kernel from jffs2
+ *-----------------------------------------------------------------------*/
+/*
+ * some portions of this code are taken from jffs2, and as such, the
+ * following copyright notice is included.
+ *
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+ * The original JFFS, from which the design for JFFS2 was derived,
+ * was designed and implemented by Axis Communications AB.
+ *
+ * The contents of this file are subject to the Red Hat eCos Public
+ * License Version 1.1 (the "Licence"); you may not use this file
+ * except in compliance with the Licence. You may obtain a copy of
+ * the Licence at http://www.redhat.com/
+ *
+ * Software distributed under the Licence is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing rights and
+ * limitations under the Licence.
+ *
+ * The Original Code is JFFS2 - Journalling Flash File System, version 2
+ *
+ * Alternatively, the contents of this file may be used under the
+ * terms of the GNU General Public License version 2 (the "GPL"), in
+ * which case the provisions of the GPL are applicable instead of the
+ * above. If you wish to allow the use of your version of this file
+ * only under the terms of the GPL and not to allow others to use your
+ * version of this file under the RHEPL, indicate your decision by
+ * deleting the provisions above and replace them with the notice and
+ * other provisions required by the GPL. If you do not delete the
+ * provisions above, a recipient may use your version of this file
+ * under either the RHEPL or the GPL.
+ *
+ * $Id: jffs2_1pass.c,v 1.1.1.1 2009/03/25 22:22:11 kenagy Exp $
+ *
+ */
+
+/* Ok, so anyone who knows the jffs2 code will probably want to get a papar
+ * bag to throw up into before reading this code. I looked through the jffs2
+ * code, the caching scheme is very elegant. I tried to keep the version
+ * for a bootloader as small and simple as possible. Instead of worring about
+ * unneccesary data copies, node scans, etc, I just optimized for the known
+ * common case, a kernel, which looks like:
+ * (1) most pages are 4096 bytes
+ * (2) version numbers are somewhat sorted in acsending order
+ * (3) multiple compressed blocks making up one page is uncommon
+ *
+ * So I create a linked list of decending version numbers (insertions at the
+ * head), and then for each page, walk down the list, until a matching page
+ * with 4096 bytes is found, and then decompress the watching pages in
+ * reverse order.
+ *
+ */
+
+/*
+ * Adapted by Nye Liu <nyet@zumanetworks.com> and
+ * Rex Feany <rfeany@zumanetworks.com>
+ * on Jan/2002 for U-Boot.
+ *
+ * Clipped out all the non-1pass functions, cleaned up warnings,
+ * wrappers, etc. No major changes to the code.
+ * Please, he really means it when he said have a paper bag
+ * handy. We needed it ;).
+ *
+ */
+
+/*
+ * Bugfixing by Kai-Uwe Bloem <kai-uwe.bloem@auerswald.de>, (C) Mar/2003
+ *
+ * - overhaul of the memory management. Removed much of the "paper-bagging"
+ * in that part of the code, fixed several bugs, now frees memory when
+ * partition is changed.
+ * It's still ugly :-(
+ * - fixed a bug in jffs2_1pass_read_inode where the file length calculation
+ * was incorrect. Removed a bit of the paper-bagging as well.
+ * - removed double crc calculation for fragment headers in jffs2_private.h
+ * for speedup.
+ * - scan_empty rewritten in a more "standard" manner (non-paperbag, that is).
+ * - spinning wheel now spins depending on how much memory has been scanned
+ * - lots of small changes all over the place to "improve" readability.
+ * - implemented fragment sorting to ensure that the newest data is copied
+ * if there are multiple copies of fragments for a certain file offset.
+ *
+ * The fragment sorting feature must be enabled by CONFIG_SYS_JFFS2_SORT_FRAGMENTS.
+ * Sorting is done while adding fragments to the lists, which is more or less a
+ * bubble sort. This takes a lot of time, and is most probably not an issue if
+ * the boot filesystem is always mounted readonly.
+ *
+ * You should define it if the boot filesystem is mounted writable, and updates
+ * to the boot files are done by copying files to that filesystem.
+ *
+ *
+ * There's a big issue left: endianess is completely ignored in this code. Duh!
+ *
+ *
+ * You still should have paper bags at hand :-(. The code lacks more or less
+ * any comment, and is still arcane and difficult to read in places. As this
+ * might be incompatible with any new code from the jffs2 maintainers anyway,
+ * it should probably be dumped and replaced by something like jffs2reader!
+ */
+
+
+#include <common.h>
+#include <config.h>
+#include <malloc.h>
+#include <linux/stat.h>
+#include <linux/time.h>
+#include <watchdog.h>
+#include <jffs2/jffs2.h>
+#include <jffs2/jffs2_1pass.h>
+#include <linux/mtd/compat.h>
+
+#include "jffs2_private.h"
+
+
+#define NODE_CHUNK 1024 /* size of memory allocation chunk in b_nodes */
+#define SPIN_BLKSIZE 18 /* spin after having scanned 1<<BLKSIZE bytes */
+
+/* Debugging switches */
+#undef DEBUG_DIRENTS /* print directory entry list after scan */
+#undef DEBUG_FRAGMENTS /* print fragment list after scan */
+#undef DEBUG /* enable debugging messages */
+
+
+#ifdef DEBUG
+# define DEBUGF(fmt,args...) printf(fmt ,##args)
+#else
+# define DEBUGF(fmt,args...)
+#endif
+
+#include "summary.h"
+
+/* keeps pointer to currentlu processed partition */
+static struct part_info *current_part;
+
+#if (defined(CONFIG_JFFS2_NAND) && \
+ defined(CONFIG_CMD_NAND) )
+#if defined(CONFIG_NAND_LEGACY)
+#include <linux/mtd/nand_legacy.h>
+#else
+#include <nand.h>
+#endif
+/*
+ * Support for jffs2 on top of NAND-flash
+ *
+ * NAND memory isn't mapped in processor's address space,
+ * so data should be fetched from flash before
+ * being processed. This is exactly what functions declared
+ * here do.
+ *
+ */
+
+#if defined(CONFIG_NAND_LEGACY)
+/* this one defined in nand_legacy.c */
+int read_jffs2_nand(size_t start, size_t len,
+ size_t * retlen, u_char * buf, int nanddev);
+#endif
+
+#define NAND_PAGE_SIZE 512
+#define NAND_PAGE_SHIFT 9
+#define NAND_PAGE_MASK (~(NAND_PAGE_SIZE-1))
+
+#ifndef NAND_CACHE_PAGES
+#define NAND_CACHE_PAGES 16
+#endif
+#define NAND_CACHE_SIZE (NAND_CACHE_PAGES*NAND_PAGE_SIZE)
+
+static u8* nand_cache = NULL;
+static u32 nand_cache_off = (u32)-1;
+
+static int read_nand_cached(u32 off, u32 size, u_char *buf)
+{
+ struct mtdids *id = current_part->dev->id;
+ u32 bytes_read = 0;
+ size_t retlen;
+ int cpy_bytes;
+
+ while (bytes_read < size) {
+ if ((off + bytes_read < nand_cache_off) ||
+ (off + bytes_read >= nand_cache_off+NAND_CACHE_SIZE)) {
+ nand_cache_off = (off + bytes_read) & NAND_PAGE_MASK;
+ if (!nand_cache) {
+ /* This memory never gets freed but 'cause
+ it's a bootloader, nobody cares */
+ nand_cache = malloc(NAND_CACHE_SIZE);
+ if (!nand_cache) {
+ printf("read_nand_cached: can't alloc cache size %d bytes\n",
+ NAND_CACHE_SIZE);
+ return -1;
+ }
+ }
+
+#if defined(CONFIG_NAND_LEGACY)
+ if (read_jffs2_nand(nand_cache_off, NAND_CACHE_SIZE,
+ &retlen, nand_cache, id->num) < 0 ||
+ retlen != NAND_CACHE_SIZE) {
+ printf("read_nand_cached: error reading nand off %#x size %d bytes\n",
+ nand_cache_off, NAND_CACHE_SIZE);
+ return -1;
+ }
+#else
+ retlen = NAND_CACHE_SIZE;
+ if (nand_read(&nand_info[id->num], nand_cache_off,
+ &retlen, nand_cache) != 0 ||
+ retlen != NAND_CACHE_SIZE) {
+ printf("read_nand_cached: error reading nand off %#x size %d bytes\n",
+ nand_cache_off, NAND_CACHE_SIZE);
+ return -1;
+ }
+#endif
+ }
+ cpy_bytes = nand_cache_off + NAND_CACHE_SIZE - (off + bytes_read);
+ if (cpy_bytes > size - bytes_read)
+ cpy_bytes = size - bytes_read;
+ memcpy(buf + bytes_read,
+ nand_cache + off + bytes_read - nand_cache_off,
+ cpy_bytes);
+ bytes_read += cpy_bytes;
+ }
+ return bytes_read;
+}
+
+static void *get_fl_mem_nand(u32 off, u32 size, void *ext_buf)
+{
+ u_char *buf = ext_buf ? (u_char*)ext_buf : (u_char*)malloc(size);
+
+ if (NULL == buf) {
+ printf("get_fl_mem_nand: can't alloc %d bytes\n", size);
+ return NULL;
+ }
+ if (read_nand_cached(off, size, buf) < 0) {
+ if (!ext_buf)
+ free(buf);
+ return NULL;
+ }
+
+ return buf;
+}
+
+static void *get_node_mem_nand(u32 off, void *ext_buf)
+{
+ struct jffs2_unknown_node node;
+ void *ret = NULL;
+
+ if (NULL == get_fl_mem_nand(off, sizeof(node), &node))
+ return NULL;
+
+ if (!(ret = get_fl_mem_nand(off, node.magic ==
+ JFFS2_MAGIC_BITMASK ? node.totlen : sizeof(node),
+ ext_buf))) {
+ printf("off = %#x magic %#x type %#x node.totlen = %d\n",
+ off, node.magic, node.nodetype, node.totlen);
+ }
+ return ret;
+}
+
+static void put_fl_mem_nand(void *buf)
+{
+ free(buf);
+}
+#endif
+
+#if defined(CONFIG_CMD_ONENAND)
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/onenand.h>
+#include <onenand_uboot.h>
+
+#define ONENAND_PAGE_SIZE 2048
+#define ONENAND_PAGE_SHIFT 11
+#define ONENAND_PAGE_MASK (~(ONENAND_PAGE_SIZE-1))
+
+#ifndef ONENAND_CACHE_PAGES
+#define ONENAND_CACHE_PAGES 4
+#endif
+#define ONENAND_CACHE_SIZE (ONENAND_CACHE_PAGES*ONENAND_PAGE_SIZE)
+
+static u8* onenand_cache;
+static u32 onenand_cache_off = (u32)-1;
+
+static int read_onenand_cached(u32 off, u32 size, u_char *buf)
+{
+ u32 bytes_read = 0;
+ size_t retlen;
+ int cpy_bytes;
+
+ while (bytes_read < size) {
+ if ((off + bytes_read < onenand_cache_off) ||
+ (off + bytes_read >= onenand_cache_off + ONENAND_CACHE_SIZE)) {
+ onenand_cache_off = (off + bytes_read) & ONENAND_PAGE_MASK;
+ if (!onenand_cache) {
+ /* This memory never gets freed but 'cause
+ it's a bootloader, nobody cares */
+ onenand_cache = malloc(ONENAND_CACHE_SIZE);
+ if (!onenand_cache) {
+ printf("read_onenand_cached: can't alloc cache size %d bytes\n",
+ ONENAND_CACHE_SIZE);
+ return -1;
+ }
+ }
+
+ retlen = ONENAND_CACHE_SIZE;
+ if (onenand_read(&onenand_mtd, onenand_cache_off, retlen,
+ &retlen, onenand_cache) != 0 ||
+ retlen != ONENAND_CACHE_SIZE) {
+ printf("read_onenand_cached: error reading nand off %#x size %d bytes\n",
+ onenand_cache_off, ONENAND_CACHE_SIZE);
+ return -1;
+ }
+ }
+ cpy_bytes = onenand_cache_off + ONENAND_CACHE_SIZE - (off + bytes_read);
+ if (cpy_bytes > size - bytes_read)
+ cpy_bytes = size - bytes_read;
+ memcpy(buf + bytes_read,
+ onenand_cache + off + bytes_read - onenand_cache_off,
+ cpy_bytes);
+ bytes_read += cpy_bytes;
+ }
+ return bytes_read;
+}
+
+static void *get_fl_mem_onenand(u32 off, u32 size, void *ext_buf)
+{
+ u_char *buf = ext_buf ? (u_char *)ext_buf : (u_char *)malloc(size);
+
+ if (NULL == buf) {
+ printf("get_fl_mem_onenand: can't alloc %d bytes\n", size);
+ return NULL;
+ }
+ if (read_onenand_cached(off, size, buf) < 0) {
+ if (!ext_buf)
+ free(buf);
+ return NULL;
+ }
+
+ return buf;
+}
+
+static void *get_node_mem_onenand(u32 off, void *ext_buf)
+{
+ struct jffs2_unknown_node node;
+ void *ret = NULL;
+
+ if (NULL == get_fl_mem_onenand(off, sizeof(node), &node))
+ return NULL;
+
+ ret = get_fl_mem_onenand(off, node.magic ==
+ JFFS2_MAGIC_BITMASK ? node.totlen : sizeof(node),
+ ext_buf);
+ if (!ret) {
+ printf("off = %#x magic %#x type %#x node.totlen = %d\n",
+ off, node.magic, node.nodetype, node.totlen);
+ }
+ return ret;
+}
+
+
+static void put_fl_mem_onenand(void *buf)
+{
+ free(buf);
+}
+#endif
+
+
+#if defined(CONFIG_CMD_FLASH)
+/*
+ * Support for jffs2 on top of NOR-flash
+ *
+ * NOR flash memory is mapped in processor's address space,
+ * just return address.
+ */
+static inline void *get_fl_mem_nor(u32 off, u32 size, void *ext_buf)
+{
+ u32 addr = off;
+ struct mtdids *id = current_part->dev->id;
+
+ extern flash_info_t flash_info[];
+ flash_info_t *flash = &flash_info[id->num];
+
+ addr += flash->start[0];
+ if (ext_buf) {
+ memcpy(ext_buf, (void *)addr, size);
+ return ext_buf;
+ }
+ return (void*)addr;
+}
+
+static inline void *get_node_mem_nor(u32 off, void *ext_buf)
+{
+ struct jffs2_unknown_node *pNode;
+
+ /* pNode will point directly to flash - don't provide external buffer
+ and don't care about size */
+ pNode = get_fl_mem_nor(off, 0, NULL);
+ return (void *)get_fl_mem_nor(off, pNode->magic == JFFS2_MAGIC_BITMASK ?
+ pNode->totlen : sizeof(*pNode), ext_buf);
+}
+#endif
+
+
+/*
+ * Generic jffs2 raw memory and node read routines.
+ *
+ */
+static inline void *get_fl_mem(u32 off, u32 size, void *ext_buf)
+{
+ struct mtdids *id = current_part->dev->id;
+
+#if defined(CONFIG_CMD_FLASH)
+ if (id->type == MTD_DEV_TYPE_NOR) {
+ return get_fl_mem_nor(off, size, ext_buf);
+ }
+#endif
+
+#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
+ if (id->type == MTD_DEV_TYPE_NAND)
+ return get_fl_mem_nand(off, size, ext_buf);
+#endif
+
+#if defined(CONFIG_CMD_ONENAND)
+ if (id->type == MTD_DEV_TYPE_ONENAND)
+ return get_fl_mem_onenand(off, size, ext_buf);
+#endif
+
+ printf("get_fl_mem: unknown device type, using raw offset!\n");
+ return (void*)off;
+}
+
+static inline void *get_node_mem(u32 off, void *ext_buf)
+{
+ struct mtdids *id = current_part->dev->id;
+
+#if defined(CONFIG_CMD_FLASH)
+ if (id->type == MTD_DEV_TYPE_NOR)
+ return get_node_mem_nor(off, ext_buf);
+#endif
+
+#if defined(CONFIG_JFFS2_NAND) && \
+ defined(CONFIG_CMD_NAND)
+ if (id->type == MTD_DEV_TYPE_NAND)
+ return get_node_mem_nand(off, ext_buf);
+#endif
+
+#if defined(CONFIG_CMD_ONENAND)
+ if (id->type == MTD_DEV_TYPE_ONENAND)
+ return get_node_mem_onenand(off, ext_buf);
+#endif
+
+ printf("get_node_mem: unknown device type, using raw offset!\n");
+ return (void*)off;
+}
+
+static inline void put_fl_mem(void *buf, void *ext_buf)
+{
+ struct mtdids *id = current_part->dev->id;
+
+ /* If buf is the same as ext_buf, it was provided by the caller -
+ we shouldn't free it then. */
+ if (buf == ext_buf)
+ return;
+ switch (id->type) {
+#if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND)
+ case MTD_DEV_TYPE_NAND:
+ return put_fl_mem_nand(buf);
+#endif
+#if defined(CONFIG_CMD_ONENAND)
+ case MTD_DEV_TYPE_ONENAND:
+ return put_fl_mem_onenand(buf);
+#endif
+ }
+}
+
+/* Compression names */
+static char *compr_names[] = {
+ "NONE",
+ "ZERO",
+ "RTIME",
+ "RUBINMIPS",
+ "COPY",
+ "DYNRUBIN",
+ "ZLIB",
+#if defined(CONFIG_JFFS2_LZO_LZARI)
+ "LZO",
+ "LZARI",
+#endif
+};
+
+/* Memory management */
+struct mem_block {
+ u32 index;
+ struct mem_block *next;
+ struct b_node nodes[NODE_CHUNK];
+};
+
+
+static void
+free_nodes(struct b_list *list)
+{
+ while (list->listMemBase != NULL) {
+ struct mem_block *next = list->listMemBase->next;
+ free( list->listMemBase );
+ list->listMemBase = next;
+ }
+}
+
+static struct b_node *
+add_node(struct b_list *list)
+{
+ u32 index = 0;
+ struct mem_block *memBase;
+ struct b_node *b;
+
+ memBase = list->listMemBase;
+ if (memBase != NULL)
+ index = memBase->index;
+#if 0
+ putLabeledWord("add_node: index = ", index);
+ putLabeledWord("add_node: memBase = ", list->listMemBase);
+#endif
+
+ if (memBase == NULL || index >= NODE_CHUNK) {
+ /* we need more space before we continue */
+ memBase = mmalloc(sizeof(struct mem_block));
+ if (memBase == NULL) {
+ putstr("add_node: malloc failed\n");
+ return NULL;
+ }
+ memBase->next = list->listMemBase;
+ index = 0;
+#if 0
+ putLabeledWord("add_node: alloced a new membase at ", *memBase);
+#endif
+
+ }
+ /* now we have room to add it. */
+ b = &memBase->nodes[index];
+ index ++;
+
+ memBase->index = index;
+ list->listMemBase = memBase;
+ list->listCount++;
+ return b;
+}
+
+static struct b_node *
+insert_node(struct b_list *list, u32 offset)
+{
+ struct b_node *new;
+#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
+ struct b_node *b, *prev;
+#endif
+
+ if (!(new = add_node(list))) {
+ putstr("add_node failed!\r\n");
+ return NULL;
+ }
+ new->offset = offset;
+
+#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
+ if (list->listTail != NULL && list->listCompare(new, list->listTail))
+ prev = list->listTail;
+ else if (list->listLast != NULL && list->listCompare(new, list->listLast))
+ prev = list->listLast;
+ else
+ prev = NULL;
+
+ for (b = (prev ? prev->next : list->listHead);
+ b != NULL && list->listCompare(new, b);
+ prev = b, b = b->next) {
+ list->listLoops++;
+ }
+ if (b != NULL)
+ list->listLast = prev;
+
+ if (b != NULL) {
+ new->next = b;
+ if (prev != NULL)
+ prev->next = new;
+ else
+ list->listHead = new;
+ } else
+#endif
+ {
+ new->next = (struct b_node *) NULL;
+ if (list->listTail != NULL) {
+ list->listTail->next = new;
+ list->listTail = new;
+ } else {
+ list->listTail = list->listHead = new;
+ }
+ }
+
+ return new;
+}
+
+#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
+/* Sort data entries with the latest version last, so that if there
+ * is overlapping data the latest version will be used.
+ */
+static int compare_inodes(struct b_node *new, struct b_node *old)
+{
+ struct jffs2_raw_inode ojNew;
+ struct jffs2_raw_inode ojOld;
+ struct jffs2_raw_inode *jNew =
+ (struct jffs2_raw_inode *)get_fl_mem(new->offset, sizeof(ojNew), &ojNew);
+ struct jffs2_raw_inode *jOld =
+ (struct jffs2_raw_inode *)get_fl_mem(old->offset, sizeof(ojOld), &ojOld);
+
+ return jNew->version > jOld->version;
+}
+
+/* Sort directory entries so all entries in the same directory
+ * with the same name are grouped together, with the latest version
+ * last. This makes it easy to eliminate all but the latest version
+ * by marking the previous version dead by setting the inode to 0.
+ */
+static int compare_dirents(struct b_node *new, struct b_node *old)
+{
+ struct jffs2_raw_dirent ojNew;
+ struct jffs2_raw_dirent ojOld;
+ struct jffs2_raw_dirent *jNew =
+ (struct jffs2_raw_dirent *)get_fl_mem(new->offset, sizeof(ojNew), &ojNew);
+ struct jffs2_raw_dirent *jOld =
+ (struct jffs2_raw_dirent *)get_fl_mem(old->offset, sizeof(ojOld), &ojOld);
+ int cmp;
+
+ /* ascending sort by pino */
+ if (jNew->pino != jOld->pino)
+ return jNew->pino > jOld->pino;
+
+ /* pino is the same, so use ascending sort by nsize, so
+ * we don't do strncmp unless we really must.
+ */
+ if (jNew->nsize != jOld->nsize)
+ return jNew->nsize > jOld->nsize;
+
+ /* length is also the same, so use ascending sort by name
+ */
+ cmp = strncmp((char *)jNew->name, (char *)jOld->name, jNew->nsize);
+ if (cmp != 0)
+ return cmp > 0;
+
+ /* we have duplicate names in this directory, so use ascending
+ * sort by version
+ */
+ if (jNew->version > jOld->version) {
+ /* since jNew is newer, we know jOld is not valid, so
+ * mark it with inode 0 and it will not be used
+ */
+ jOld->ino = 0;
+ return 1;
+ }
+
+ return 0;
+}
+#endif
+
+void
+jffs2_free_cache(struct part_info *part)
+{
+ struct b_lists *pL;
+
+ if (part->jffs2_priv != NULL) {
+ pL = (struct b_lists *)part->jffs2_priv;
+ free_nodes(&pL->frag);
+ free_nodes(&pL->dir);
+ free(pL->readbuf);
+ free(pL);
+ }
+}
+
+static u32
+jffs_init_1pass_list(struct part_info *part)
+{
+ struct b_lists *pL;
+
+ jffs2_free_cache(part);
+
+ if (NULL != (part->jffs2_priv = malloc(sizeof(struct b_lists)))) {
+ pL = (struct b_lists *)part->jffs2_priv;
+
+ memset(pL, 0, sizeof(*pL));
+#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
+ pL->dir.listCompare = compare_dirents;
+ pL->frag.listCompare = compare_inodes;
+#endif
+ }
+ return 0;
+}
+
+/* find the inode from the slashless name given a parent */
+static long
+jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest)
+{
+ struct b_node *b;
+ struct jffs2_raw_inode *jNode;
+ u32 totalSize = 0;
+ u32 latestVersion = 0;
+ uchar *lDest;
+ uchar *src;
+ long ret;
+ int i;
+ u32 counter = 0;
+#ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
+ /* Find file size before loading any data, so fragments that
+ * start past the end of file can be ignored. A fragment
+ * that is partially in the file is loaded, so extra data may
+ * be loaded up to the next 4K boundary above the file size.
+ * This shouldn't cause trouble when loading kernel images, so
+ * we will live with it.
+ */
+ for (b = pL->frag.listHead; b != NULL; b = b->next) {
+ jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset,
+ sizeof(struct jffs2_raw_inode), pL->readbuf);
+ if ((inode == jNode->ino)) {
+ /* get actual file length from the newest node */
+ if (jNode->version >= latestVersion) {
+ totalSize = jNode->isize;
+ latestVersion = jNode->version;
+ }
+ }
+ put_fl_mem(jNode, pL->readbuf);
+ }
+#endif
+
+ for (b = pL->frag.listHead; b != NULL; b = b->next) {
+ jNode = (struct jffs2_raw_inode *) get_node_mem(b->offset,
+ pL->readbuf);
+ if ((inode == jNode->ino)) {
+#if 0
+ putLabeledWord("\r\n\r\nread_inode: totlen = ", jNode->totlen);
+ putLabeledWord("read_inode: inode = ", jNode->ino);
+ putLabeledWord("read_inode: version = ", jNode->version);
+ putLabeledWord("read_inode: isize = ", jNode->isize);
+ putLabeledWord("read_inode: offset = ", jNode->offset);
+ putLabeledWord("read_inode: csize = ", jNode->csize);
+ putLabeledWord("read_inode: dsize = ", jNode->dsize);
+ putLabeledWord("read_inode: compr = ", jNode->compr);
+ putLabeledWord("read_inode: usercompr = ", jNode->usercompr);
+ putLabeledWord("read_inode: flags = ", jNode->flags);
+#endif
+
+#ifndef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
+ /* get actual file length from the newest node */
+ if (jNode->version >= latestVersion) {
+ totalSize = jNode->isize;
+ latestVersion = jNode->version;
+ }
+#endif
+
+ if(dest) {
+ src = ((uchar *) jNode) + sizeof(struct jffs2_raw_inode);
+ /* ignore data behind latest known EOF */
+ if (jNode->offset > totalSize) {
+ put_fl_mem(jNode, pL->readbuf);
+ continue;
+ }
+ if (b->datacrc == CRC_UNKNOWN)
+ b->datacrc = data_crc(jNode) ?
+ CRC_OK : CRC_BAD;
+ if (b->datacrc == CRC_BAD) {
+ put_fl_mem(jNode, pL->readbuf);
+ continue;
+ }
+
+ lDest = (uchar *) (dest + jNode->offset);
+#if 0
+ putLabeledWord("read_inode: src = ", src);
+ putLabeledWord("read_inode: dest = ", lDest);
+#endif
+ switch (jNode->compr) {
+ case JFFS2_COMPR_NONE:
+ ret = (unsigned long) ldr_memcpy(lDest, src, jNode->dsize);
+ break;
+ case JFFS2_COMPR_ZERO:
+ ret = 0;
+ for (i = 0; i < jNode->dsize; i++)
+ *(lDest++) = 0;
+ break;
+ case JFFS2_COMPR_RTIME:
+ ret = 0;
+ rtime_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+ case JFFS2_COMPR_DYNRUBIN:
+ /* this is slow but it works */
+ ret = 0;
+ dynrubin_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+ case JFFS2_COMPR_ZLIB:
+ ret = zlib_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+#if defined(CONFIG_JFFS2_LZO_LZARI)
+ case JFFS2_COMPR_LZO:
+ ret = lzo_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+ case JFFS2_COMPR_LZARI:
+ ret = lzari_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+#endif
+ default:
+ /* unknown */
+ putLabeledWord("UNKOWN COMPRESSION METHOD = ", jNode->compr);
+ put_fl_mem(jNode, pL->readbuf);
+ return -1;
+ break;
+ }
+ }
+
+#if 0
+ putLabeledWord("read_inode: totalSize = ", totalSize);
+ putLabeledWord("read_inode: compr ret = ", ret);
+#endif
+ }
+ counter++;
+ put_fl_mem(jNode, pL->readbuf);
+ }
+
+#if 0
+ putLabeledWord("read_inode: returning = ", totalSize);
+#endif
+ return totalSize;
+}
+
+/* find the inode from the slashless name given a parent */
+static u32
+jffs2_1pass_find_inode(struct b_lists * pL, const char *name, u32 pino)
+{
+ struct b_node *b;
+ struct jffs2_raw_dirent *jDir;
+ int len;
+ u32 counter;
+ u32 version = 0;
+ u32 inode = 0;
+
+ /* name is assumed slash free */
+ len = strlen(name);
+
+ counter = 0;
+ /* we need to search all and return the inode with the highest version */
+ for(b = pL->dir.listHead; b; b = b->next, counter++) {
+ jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
+ pL->readbuf);
+ if ((pino == jDir->pino) && (len == jDir->nsize) &&
+ (jDir->ino) && /* 0 for unlink */
+ (!strncmp((char *)jDir->name, name, len))) { /* a match */
+ if (jDir->version < version) {
+ put_fl_mem(jDir, pL->readbuf);
+ continue;
+ }
+
+ if (jDir->version == version && inode != 0) {
+ /* I'm pretty sure this isn't legal */
+ putstr(" ** ERROR ** ");
+ putnstr(jDir->name, jDir->nsize);
+ putLabeledWord(" has dup version =", version);
+ }
+ inode = jDir->ino;
+ version = jDir->version;
+ }
+#if 0
+ putstr("\r\nfind_inode:p&l ->");
+ putnstr(jDir->name, jDir->nsize);
+ putstr("\r\n");
+ putLabeledWord("pino = ", jDir->pino);
+ putLabeledWord("nsize = ", jDir->nsize);
+ putLabeledWord("b = ", (u32) b);
+ putLabeledWord("counter = ", counter);
+#endif
+ put_fl_mem(jDir, pL->readbuf);
+ }
+ return inode;
+}
+
+char *mkmodestr(unsigned long mode, char *str)
+{
+ static const char *l = "xwr";
+ int mask = 1, i;
+ char c;
+
+ switch (mode & S_IFMT) {
+ case S_IFDIR: str[0] = 'd'; break;
+ case S_IFBLK: str[0] = 'b'; break;
+ case S_IFCHR: str[0] = 'c'; break;
+ case S_IFIFO: str[0] = 'f'; break;
+ case S_IFLNK: str[0] = 'l'; break;
+ case S_IFSOCK: str[0] = 's'; break;
+ case S_IFREG: str[0] = '-'; break;
+ default: str[0] = '?';
+ }
+
+ for(i = 0; i < 9; i++) {
+ c = l[i%3];
+ str[9-i] = (mode & mask)?c:'-';
+ mask = mask<<1;
+ }
+
+ if(mode & S_ISUID) str[3] = (mode & S_IXUSR)?'s':'S';
+ if(mode & S_ISGID) str[6] = (mode & S_IXGRP)?'s':'S';
+ if(mode & S_ISVTX) str[9] = (mode & S_IXOTH)?'t':'T';
+ str[10] = '\0';
+ return str;
+}
+
+static inline void dump_stat(struct stat *st, const char *name)
+{
+ char str[20];
+ char s[64], *p;
+
+ if (st->st_mtime == (time_t)(-1)) /* some ctimes really hate -1 */
+ st->st_mtime = 1;
+
+ ctime_r((time_t *)&st->st_mtime, s/*,64*/); /* newlib ctime doesn't have buflen */
+
+ if ((p = strchr(s,'\n')) != NULL) *p = '\0';
+ if ((p = strchr(s,'\r')) != NULL) *p = '\0';
+
+/*
+ printf("%6lo %s %8ld %s %s\n", st->st_mode, mkmodestr(st->st_mode, str),
+ st->st_size, s, name);
+*/
+
+ printf(" %s %8ld %s %s", mkmodestr(st->st_mode,str), st->st_size, s, name);
+}
+
+static inline u32 dump_inode(struct b_lists * pL, struct jffs2_raw_dirent *d, struct jffs2_raw_inode *i)
+{
+ char fname[256];
+ struct stat st;
+
+ if(!d || !i) return -1;
+
+ strncpy(fname, (char *)d->name, d->nsize);
+ fname[d->nsize] = '\0';
+
+ memset(&st,0,sizeof(st));
+
+ st.st_mtime = i->mtime;
+ st.st_mode = i->mode;
+ st.st_ino = i->ino;
+ st.st_size = i->isize;
+
+ dump_stat(&st, fname);
+
+ if (d->type == DT_LNK) {
+ unsigned char *src = (unsigned char *) (&i[1]);
+ putstr(" -> ");
+ putnstr(src, (int)i->dsize);
+ }
+
+ putstr("\r\n");
+
+ return 0;
+}
+
+/* list inodes with the given pino */
+static u32
+jffs2_1pass_list_inodes(struct b_lists * pL, u32 pino)
+{
+ struct b_node *b;
+ struct jffs2_raw_dirent *jDir;
+
+ for (b = pL->dir.listHead; b; b = b->next) {
+ jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
+ pL->readbuf);
+ if ((pino == jDir->pino) && (jDir->ino)) { /* ino=0 -> unlink */
+ u32 i_version = 0;
+ struct jffs2_raw_inode ojNode;
+ struct jffs2_raw_inode *jNode, *i = NULL;
+ struct b_node *b2 = pL->frag.listHead;
+
+ while (b2) {
+ jNode = (struct jffs2_raw_inode *)
+ get_fl_mem(b2->offset, sizeof(ojNode), &ojNode);
+ if (jNode->ino == jDir->ino && jNode->version >= i_version) {
+ i_version = jNode->version;
+ if (i)
+ put_fl_mem(i, NULL);
+
+ if (jDir->type == DT_LNK)
+ i = get_node_mem(b2->offset,
+ NULL);
+ else
+ i = get_fl_mem(b2->offset,
+ sizeof(*i),
+ NULL);
+ }
+ b2 = b2->next;
+ }
+
+ dump_inode(pL, jDir, i);
+ put_fl_mem(i, NULL);
+ }
+ put_fl_mem(jDir, pL->readbuf);
+ }
+ return pino;
+}
+
+static u32
+jffs2_1pass_search_inode(struct b_lists * pL, const char *fname, u32 pino)
+{
+ int i;
+ char tmp[256];
+ char working_tmp[256];
+ char *c;
+
+ /* discard any leading slash */
+ i = 0;
+ while (fname[i] == '/')
+ i++;
+ strcpy(tmp, &fname[i]);
+
+ while ((c = (char *) strchr(tmp, '/'))) /* we are still dired searching */
+ {
+ strncpy(working_tmp, tmp, c - tmp);
+ working_tmp[c - tmp] = '\0';
+#if 0
+ putstr("search_inode: tmp = ");
+ putstr(tmp);
+ putstr("\r\n");
+ putstr("search_inode: wtmp = ");
+ putstr(working_tmp);
+ putstr("\r\n");
+ putstr("search_inode: c = ");
+ putstr(c);
+ putstr("\r\n");
+#endif
+ for (i = 0; i < strlen(c) - 1; i++)
+ tmp[i] = c[i + 1];
+ tmp[i] = '\0';
+#if 0
+ putstr("search_inode: post tmp = ");
+ putstr(tmp);
+ putstr("\r\n");
+#endif
+
+ if (!(pino = jffs2_1pass_find_inode(pL, working_tmp, pino))) {
+ putstr("find_inode failed for name=");
+ putstr(working_tmp);
+ putstr("\r\n");
+ return 0;
+ }
+ }
+ /* this is for the bare filename, directories have already been mapped */
+ if (!(pino = jffs2_1pass_find_inode(pL, tmp, pino))) {
+ putstr("find_inode failed for name=");
+ putstr(tmp);
+ putstr("\r\n");
+ return 0;
+ }
+ return pino;
+
+}
+
+static u32
+jffs2_1pass_resolve_inode(struct b_lists * pL, u32 ino)
+{
+ struct b_node *b;
+ struct b_node *b2;
+ struct jffs2_raw_dirent *jDir;
+ struct jffs2_raw_inode *jNode;
+ u8 jDirFoundType = 0;
+ u32 jDirFoundIno = 0;
+ u32 jDirFoundPino = 0;
+ char tmp[256];
+ u32 version = 0;
+ u32 pino;
+ unsigned char *src;
+
+ /* we need to search all and return the inode with the highest version */
+ for(b = pL->dir.listHead; b; b = b->next) {
+ jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
+ pL->readbuf);
+ if (ino == jDir->ino) {
+ if (jDir->version < version) {
+ put_fl_mem(jDir, pL->readbuf);
+ continue;
+ }
+
+ if (jDir->version == version && jDirFoundType) {
+ /* I'm pretty sure this isn't legal */
+ putstr(" ** ERROR ** ");
+ putnstr(jDir->name, jDir->nsize);
+ putLabeledWord(" has dup version (resolve) = ",
+ version);
+ }
+
+ jDirFoundType = jDir->type;
+ jDirFoundIno = jDir->ino;
+ jDirFoundPino = jDir->pino;
+ version = jDir->version;
+ }
+ put_fl_mem(jDir, pL->readbuf);
+ }
+ /* now we found the right entry again. (shoulda returned inode*) */
+ if (jDirFoundType != DT_LNK)
+ return jDirFoundIno;
+
+ /* it's a soft link so we follow it again. */
+ b2 = pL->frag.listHead;
+ while (b2) {
+ jNode = (struct jffs2_raw_inode *) get_node_mem(b2->offset,
+ pL->readbuf);
+ if (jNode->ino == jDirFoundIno) {
+ src = (unsigned char *)jNode + sizeof(struct jffs2_raw_inode);
+
+#if 0
+ putLabeledWord("\t\t dsize = ", jNode->dsize);
+ putstr("\t\t target = ");
+ putnstr(src, jNode->dsize);
+ putstr("\r\n");
+#endif
+ strncpy(tmp, (char *)src, jNode->dsize);
+ tmp[jNode->dsize] = '\0';
+ put_fl_mem(jNode, pL->readbuf);
+ break;
+ }
+ b2 = b2->next;
+ put_fl_mem(jNode, pL->readbuf);
+ }
+ /* ok so the name of the new file to find is in tmp */
+ /* if it starts with a slash it is root based else shared dirs */
+ if (tmp[0] == '/')
+ pino = 1;
+ else
+ pino = jDirFoundPino;
+
+ return jffs2_1pass_search_inode(pL, tmp, pino);
+}
+
+static u32
+jffs2_1pass_search_list_inodes(struct b_lists * pL, const char *fname, u32 pino)
+{
+ int i;
+ char tmp[256];
+ char working_tmp[256];
+ char *c;
+
+ /* discard any leading slash */
+ i = 0;
+ while (fname[i] == '/')
+ i++;
+ strcpy(tmp, &fname[i]);
+ working_tmp[0] = '\0';
+ while ((c = (char *) strchr(tmp, '/'))) /* we are still dired searching */
+ {
+ strncpy(working_tmp, tmp, c - tmp);
+ working_tmp[c - tmp] = '\0';
+ for (i = 0; i < strlen(c) - 1; i++)
+ tmp[i] = c[i + 1];
+ tmp[i] = '\0';
+ /* only a failure if we arent looking at top level */
+ if (!(pino = jffs2_1pass_find_inode(pL, working_tmp, pino)) &&
+ (working_tmp[0])) {
+ putstr("find_inode failed for name=");
+ putstr(working_tmp);
+ putstr("\r\n");
+ return 0;
+ }
+ }
+
+ if (tmp[0] && !(pino = jffs2_1pass_find_inode(pL, tmp, pino))) {
+ putstr("find_inode failed for name=");
+ putstr(tmp);
+ putstr("\r\n");
+ return 0;
+ }
+ /* this is for the bare filename, directories have already been mapped */
+ if (!(pino = jffs2_1pass_list_inodes(pL, pino))) {
+ putstr("find_inode failed for name=");
+ putstr(tmp);
+ putstr("\r\n");
+ return 0;
+ }
+ return pino;
+
+}
+
+unsigned char
+jffs2_1pass_rescan_needed(struct part_info *part)
+{
+ struct b_node *b;
+ struct jffs2_unknown_node onode;
+ struct jffs2_unknown_node *node;
+ struct b_lists *pL = (struct b_lists *)part->jffs2_priv;
+
+ if (part->jffs2_priv == 0){
+ DEBUGF ("rescan: First time in use\n");
+ return 1;
+ }
+
+ /* if we have no list, we need to rescan */
+ if (pL->frag.listCount == 0) {
+ DEBUGF ("rescan: fraglist zero\n");
+ return 1;
+ }
+
+ /* but suppose someone reflashed a partition at the same offset... */
+ b = pL->dir.listHead;
+ while (b) {
+ node = (struct jffs2_unknown_node *) get_fl_mem(b->offset,
+ sizeof(onode), &onode);
+ if (node->nodetype != JFFS2_NODETYPE_DIRENT) {
+ DEBUGF ("rescan: fs changed beneath me? (%lx)\n",
+ (unsigned long) b->offset);
+ return 1;
+ }
+ b = b->next;
+ }
+ return 0;
+}
+
+#define dbg_summary(...) do {} while (0);
+/* Process the stored summary information - helper function for
+ * jffs2_sum_scan_sumnode()
+ */
+
+static int jffs2_sum_process_sum_data(struct part_info *part, uint32_t offset,
+ struct jffs2_raw_summary *summary,
+ struct b_lists *pL)
+{
+ void *sp;
+ int i;
+
+ sp = summary->sum;
+
+ for (i = 0; i < summary->sum_num; i++) {
+ dbg_summary("processing summary index %d\n", i);
+
+ switch (((struct jffs2_sum_unknown_flash *)sp)->nodetype) {
+ case JFFS2_NODETYPE_INODE: {
+ struct jffs2_sum_inode_flash *spi;
+ spi = sp;
+
+ dbg_summary("Inode at 0x%08x-0x%08x\n",
+ offset + spi->offset,
+ offset + spi->offset + spi->totlen);
+
+ if (insert_node(&pL->frag, (u32) part->offset +
+ offset + spi->offset) == NULL)
+ return -1;
+
+ sp += JFFS2_SUMMARY_INODE_SIZE;
+
+ break;
+ }
+
+ case JFFS2_NODETYPE_DIRENT: {
+ struct jffs2_sum_dirent_flash *spd;
+ spd = sp;
+
+ dbg_summary("Dirent at 0x%08x-0x%08x\n",
+ offset + spd->offset,
+ offset + spd->offset + spd->totlen);
+
+ if (insert_node(&pL->dir, (u32) part->offset +
+ offset + spd->offset) == NULL)
+ return -1;
+
+ sp += JFFS2_SUMMARY_DIRENT_SIZE(spd->nsize);
+
+ break;
+ }
+ default : {
+ uint16_t nodetype =
+ ((struct jffs2_sum_unknown_flash *)
+ sp)->nodetype;
+ printf("Unsupported node type %x found in "
+ "summary!\n", nodetype);
+ break;
+ }
+ }
+ }
+ return 0;
+}
+
+/* Process the summary node - called from jffs2_scan_eraseblock() */
+int jffs2_sum_scan_sumnode(struct part_info *part, uint32_t offset,
+ struct jffs2_raw_summary *summary, uint32_t sumsize,
+ struct b_lists *pL)
+{
+ struct jffs2_unknown_node crcnode;
+ int ret, ofs;
+ uint32_t crc;
+
+ ofs = part->sector_size - sumsize;
+
+ dbg_summary("summary found for 0x%08x at 0x%08x (0x%x bytes)\n",
+ offset, offset + ofs, sumsize);
+
+ /* OK, now check for node validity and CRC */
+ crcnode.magic = JFFS2_MAGIC_BITMASK;
+ crcnode.nodetype = JFFS2_NODETYPE_SUMMARY;
+ crcnode.totlen = summary->totlen;
+ crc = crc32_no_comp(0, (uchar *)&crcnode, sizeof(crcnode)-4);
+
+ if (summary->hdr_crc != crc) {
+ dbg_summary("Summary node header is corrupt (bad CRC or "
+ "no summary at all)\n");
+ goto crc_err;
+ }
+
+ if (summary->totlen != sumsize) {
+ dbg_summary("Summary node is corrupt (wrong erasesize?)\n");
+ goto crc_err;
+ }
+
+ crc = crc32_no_comp(0, (uchar *)summary,
+ sizeof(struct jffs2_raw_summary)-8);
+
+ if (summary->node_crc != crc) {
+ dbg_summary("Summary node is corrupt (bad CRC)\n");
+ goto crc_err;
+ }
+
+ crc = crc32_no_comp(0, (uchar *)summary->sum,
+ sumsize - sizeof(struct jffs2_raw_summary));
+
+ if (summary->sum_crc != crc) {
+ dbg_summary("Summary node data is corrupt (bad CRC)\n");
+ goto crc_err;
+ }
+
+ if (summary->cln_mkr)
+ dbg_summary("Summary : CLEANMARKER node \n");
+
+ ret = jffs2_sum_process_sum_data(part, offset, summary, pL);
+ if (ret)
+ return ret; /* real error */
+
+ return 1;
+
+crc_err:
+ putstr("Summary node crc error, skipping summary information.\n");
+
+ return 0;
+}
+
+#ifdef DEBUG_FRAGMENTS
+static void
+dump_fragments(struct b_lists *pL)
+{
+ struct b_node *b;
+ struct jffs2_raw_inode ojNode;
+ struct jffs2_raw_inode *jNode;
+
+ putstr("\r\n\r\n******The fragment Entries******\r\n");
+ b = pL->frag.listHead;
+ while (b) {
+ jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset,
+ sizeof(ojNode), &ojNode);
+ putLabeledWord("\r\n\tbuild_list: FLASH_OFFSET = ", b->offset);
+ putLabeledWord("\tbuild_list: totlen = ", jNode->totlen);
+ putLabeledWord("\tbuild_list: inode = ", jNode->ino);
+ putLabeledWord("\tbuild_list: version = ", jNode->version);
+ putLabeledWord("\tbuild_list: isize = ", jNode->isize);
+ putLabeledWord("\tbuild_list: atime = ", jNode->atime);
+ putLabeledWord("\tbuild_list: offset = ", jNode->offset);
+ putLabeledWord("\tbuild_list: csize = ", jNode->csize);
+ putLabeledWord("\tbuild_list: dsize = ", jNode->dsize);
+ putLabeledWord("\tbuild_list: compr = ", jNode->compr);
+ putLabeledWord("\tbuild_list: usercompr = ", jNode->usercompr);
+ putLabeledWord("\tbuild_list: flags = ", jNode->flags);
+ putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */
+ b = b->next;
+ }
+}
+#endif
+
+#ifdef DEBUG_DIRENTS
+static void
+dump_dirents(struct b_lists *pL)
+{
+ struct b_node *b;
+ struct jffs2_raw_dirent *jDir;
+
+ putstr("\r\n\r\n******The directory Entries******\r\n");
+ b = pL->dir.listHead;
+ while (b) {
+ jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset,
+ pL->readbuf);
+ putstr("\r\n");
+ putnstr(jDir->name, jDir->nsize);
+ putLabeledWord("\r\n\tbuild_list: magic = ", jDir->magic);
+ putLabeledWord("\tbuild_list: nodetype = ", jDir->nodetype);
+ putLabeledWord("\tbuild_list: hdr_crc = ", jDir->hdr_crc);
+ putLabeledWord("\tbuild_list: pino = ", jDir->pino);
+ putLabeledWord("\tbuild_list: version = ", jDir->version);
+ putLabeledWord("\tbuild_list: ino = ", jDir->ino);
+ putLabeledWord("\tbuild_list: mctime = ", jDir->mctime);
+ putLabeledWord("\tbuild_list: nsize = ", jDir->nsize);
+ putLabeledWord("\tbuild_list: type = ", jDir->type);
+ putLabeledWord("\tbuild_list: node_crc = ", jDir->node_crc);
+ putLabeledWord("\tbuild_list: name_crc = ", jDir->name_crc);
+ putLabeledWord("\tbuild_list: offset = ", b->offset); /* FIXME: ? [RS] */
+ b = b->next;
+ put_fl_mem(jDir, pL->readbuf);
+ }
+}
+#endif
+
+#define DEFAULT_EMPTY_SCAN_SIZE 4096
+
+static inline uint32_t EMPTY_SCAN_SIZE(uint32_t sector_size)
+{
+ if (sector_size < DEFAULT_EMPTY_SCAN_SIZE)
+ return sector_size;
+ else
+ return DEFAULT_EMPTY_SCAN_SIZE;
+}
+
+static u32
+jffs2_1pass_build_lists(struct part_info * part)
+{
+ struct b_lists *pL;
+ struct jffs2_unknown_node *node;
+ u32 nr_sectors = part->size/part->sector_size;
+ u32 i;
+ u32 counter4 = 0;
+ u32 counterF = 0;
+ u32 counterN = 0;
+ u32 max_totlen = 0;
+ u32 buf_size = DEFAULT_EMPTY_SCAN_SIZE;
+ char *buf;
+
+ /* turn off the lcd. Refreshing the lcd adds 50% overhead to the */
+ /* jffs2 list building enterprise nope. in newer versions the overhead is */
+ /* only about 5 %. not enough to inconvenience people for. */
+ /* lcd_off(); */
+
+ /* if we are building a list we need to refresh the cache. */
+ jffs_init_1pass_list(part);
+ pL = (struct b_lists *)part->jffs2_priv;
+ buf = malloc(buf_size);
+ puts ("Scanning JFFS2 FS: ");
+
+ /* start at the beginning of the partition */
+ for (i = 0; i < nr_sectors; i++) {
+ uint32_t sector_ofs = i * part->sector_size;
+ uint32_t buf_ofs = sector_ofs;
+ uint32_t buf_len;
+ uint32_t ofs, prevofs;
+ struct jffs2_sum_marker *sm;
+ void *sumptr = NULL;
+ uint32_t sumlen;
+ int ret;
+
+ WATCHDOG_RESET();
+
+ buf_len = sizeof(*sm);
+
+ /* Read as much as we want into the _end_ of the preallocated
+ * buffer
+ */
+ get_fl_mem(part->offset + sector_ofs + part->sector_size -
+ buf_len, buf_len, buf + buf_size - buf_len);
+
+ sm = (void *)buf + buf_size - sizeof(*sm);
+ if (sm->magic == JFFS2_SUM_MAGIC) {
+ sumlen = part->sector_size - sm->offset;
+ sumptr = buf + buf_size - sumlen;
+
+ /* Now, make sure the summary itself is available */
+ if (sumlen > buf_size) {
+ /* Need to kmalloc for this. */
+ sumptr = malloc(sumlen);
+ if (!sumptr) {
+ putstr("Can't get memory for summary "
+ "node!\n");
+ return 0;
+ }
+ memcpy(sumptr + sumlen - buf_len, buf +
+ buf_size - buf_len, buf_len);
+ }
+ if (buf_len < sumlen) {
+ /* Need to read more so that the entire summary
+ * node is present
+ */
+ get_fl_mem(part->offset + sector_ofs +
+ part->sector_size - sumlen,
+ sumlen - buf_len, sumptr);
+ }
+ }
+
+ if (sumptr) {
+ ret = jffs2_sum_scan_sumnode(part, sector_ofs, sumptr,
+ sumlen, pL);
+
+ if (buf_size && sumlen > buf_size)
+ free(sumptr);
+ if (ret < 0)
+ return 0;
+ if (ret)
+ continue;
+
+ }
+
+ buf_len = EMPTY_SCAN_SIZE(part->sector_size);
+
+ get_fl_mem((u32)part->offset + buf_ofs, buf_len, buf);
+
+ /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
+ ofs = 0;
+
+ /* Scan only 4KiB of 0xFF before declaring it's empty */
+ while (ofs < EMPTY_SCAN_SIZE(part->sector_size) &&
+ *(uint32_t *)(&buf[ofs]) == 0xFFFFFFFF)
+ ofs += 4;
+
+ if (ofs == EMPTY_SCAN_SIZE(part->sector_size))
+ continue;
+
+ ofs += sector_ofs;
+ prevofs = ofs - 1;
+
+ scan_more:
+ while (ofs < sector_ofs + part->sector_size) {
+ if (ofs == prevofs) {
+ printf("offset %08x already seen, skip\n", ofs);
+ ofs += 4;
+ counter4++;
+ continue;
+ }
+ prevofs = ofs;
+ if (sector_ofs + part->sector_size <
+ ofs + sizeof(*node))
+ break;
+ if (buf_ofs + buf_len < ofs + sizeof(*node)) {
+ buf_len = min_t(uint32_t, buf_size, sector_ofs
+ + part->sector_size - ofs);
+ get_fl_mem((u32)part->offset + ofs, buf_len,
+ buf);
+ buf_ofs = ofs;
+ }
+
+ node = (struct jffs2_unknown_node *)&buf[ofs-buf_ofs];
+
+ if (*(uint32_t *)(&buf[ofs-buf_ofs]) == 0xffffffff) {
+ uint32_t inbuf_ofs;
+ uint32_t empty_start, scan_end;
+
+ empty_start = ofs;
+ ofs += 4;
+ scan_end = min_t(uint32_t, EMPTY_SCAN_SIZE(
+ part->sector_size)/8,
+ buf_len);
+ more_empty:
+ inbuf_ofs = ofs - buf_ofs;
+ while (inbuf_ofs < scan_end) {
+ if (*(uint32_t *)(&buf[inbuf_ofs]) !=
+ 0xffffffff)
+ goto scan_more;
+
+ inbuf_ofs += 4;
+ ofs += 4;
+ }
+ /* Ran off end. */
+
+ /* See how much more there is to read in this
+ * eraseblock...
+ */
+ buf_len = min_t(uint32_t, buf_size,
+ sector_ofs +
+ part->sector_size - ofs);
+ if (!buf_len) {
+ /* No more to read. Break out of main
+ * loop without marking this range of
+ * empty space as dirty (because it's
+ * not)
+ */
+ break;
+ }
+ scan_end = buf_len;
+ get_fl_mem((u32)part->offset + ofs, buf_len,
+ buf);
+ buf_ofs = ofs;
+ goto more_empty;
+ }
+ if (node->magic != JFFS2_MAGIC_BITMASK ||
+ !hdr_crc(node)) {
+ ofs += 4;
+ counter4++;
+ continue;
+ }
+ if (ofs + node->totlen >
+ sector_ofs + part->sector_size) {
+ ofs += 4;
+ counter4++;
+ continue;
+ }
+ /* if its a fragment add it */
+ switch (node->nodetype) {
+ case JFFS2_NODETYPE_INODE:
+ if (buf_ofs + buf_len < ofs + sizeof(struct
+ jffs2_raw_inode)) {
+ get_fl_mem((u32)part->offset + ofs,
+ buf_len, buf);
+ buf_ofs = ofs;
+ node = (void *)buf;
+ }
+ if (!inode_crc((struct jffs2_raw_inode *) node))
+ break;
+
+ if (insert_node(&pL->frag, (u32) part->offset +
+ ofs) == NULL)
+ return 0;
+ if (max_totlen < node->totlen)
+ max_totlen = node->totlen;
+ break;
+ case JFFS2_NODETYPE_DIRENT:
+ if (buf_ofs + buf_len < ofs + sizeof(struct
+ jffs2_raw_dirent) +
+ ((struct
+ jffs2_raw_dirent *)
+ node)->nsize) {
+ get_fl_mem((u32)part->offset + ofs,
+ buf_len, buf);
+ buf_ofs = ofs;
+ node = (void *)buf;
+ }
+
+ if (!dirent_crc((struct jffs2_raw_dirent *)
+ node) ||
+ !dirent_name_crc(
+ (struct
+ jffs2_raw_dirent *)
+ node))
+ break;
+ if (! (counterN%100))
+ puts ("\b\b. ");
+ if (insert_node(&pL->dir, (u32) part->offset +
+ ofs) == NULL)
+ return 0;
+ if (max_totlen < node->totlen)
+ max_totlen = node->totlen;
+ counterN++;
+ break;
+ case JFFS2_NODETYPE_CLEANMARKER:
+ if (node->totlen != sizeof(struct jffs2_unknown_node))
+ printf("OOPS Cleanmarker has bad size "
+ "%d != %zu\n",
+ node->totlen,
+ sizeof(struct jffs2_unknown_node));
+ break;
+ case JFFS2_NODETYPE_PADDING:
+ if (node->totlen < sizeof(struct jffs2_unknown_node))
+ printf("OOPS Padding has bad size "
+ "%d < %zu\n",
+ node->totlen,
+ sizeof(struct jffs2_unknown_node));
+ break;
+ case JFFS2_NODETYPE_SUMMARY:
+ break;
+ default:
+ printf("Unknown node type: %x len %d offset 0x%x\n",
+ node->nodetype,
+ node->totlen, ofs);
+ }
+ ofs += ((node->totlen + 3) & ~3);
+ counterF++;
+ }
+ }
+
+ free(buf);
+ putstr("\b\b done.\r\n"); /* close off the dots */
+
+ /* We don't care if malloc failed - then each read operation will
+ * allocate its own buffer as necessary (NAND) or will read directly
+ * from flash (NOR).
+ */
+ pL->readbuf = malloc(max_totlen);
+
+ /* turn the lcd back on. */
+ /* splash(); */
+
+#if 0
+ putLabeledWord("dir entries = ", pL->dir.listCount);
+ putLabeledWord("frag entries = ", pL->frag.listCount);
+ putLabeledWord("+4 increments = ", counter4);
+ putLabeledWord("+file_offset increments = ", counterF);
+
+#endif
+
+#ifdef DEBUG_DIRENTS
+ dump_dirents(pL);
+#endif
+
+#ifdef DEBUG_FRAGMENTS
+ dump_fragments(pL);
+#endif
+
+ /* give visual feedback that we are done scanning the flash */
+ led_blink(0x0, 0x0, 0x1, 0x1); /* off, forever, on 100ms, off 100ms */
+ return 1;
+}
+
+
+static u32
+jffs2_1pass_fill_info(struct b_lists * pL, struct b_jffs2_info * piL)
+{
+ struct b_node *b;
+ struct jffs2_raw_inode ojNode;
+ struct jffs2_raw_inode *jNode;
+ int i;
+
+ for (i = 0; i < JFFS2_NUM_COMPR; i++) {
+ piL->compr_info[i].num_frags = 0;
+ piL->compr_info[i].compr_sum = 0;
+ piL->compr_info[i].decompr_sum = 0;
+ }
+
+ b = pL->frag.listHead;
+ while (b) {
+ jNode = (struct jffs2_raw_inode *) get_fl_mem(b->offset,
+ sizeof(ojNode), &ojNode);
+ if (jNode->compr < JFFS2_NUM_COMPR) {
+ piL->compr_info[jNode->compr].num_frags++;
+ piL->compr_info[jNode->compr].compr_sum += jNode->csize;
+ piL->compr_info[jNode->compr].decompr_sum += jNode->dsize;
+ }
+ b = b->next;
+ }
+ return 0;
+}
+
+
+static struct b_lists *
+jffs2_get_list(struct part_info * part, const char *who)
+{
+ /* copy requested part_info struct pointer to global location */
+ current_part = part;
+
+ if (jffs2_1pass_rescan_needed(part)) {
+ if (!jffs2_1pass_build_lists(part)) {
+ printf("%s: Failed to scan JFFSv2 file structure\n", who);
+ return NULL;
+ }
+ }
+ return (struct b_lists *)part->jffs2_priv;
+}
+
+
+/* Print directory / file contents */
+u32
+jffs2_1pass_ls(struct part_info * part, const char *fname)
+{
+ struct b_lists *pl;
+ long ret = 1;
+ u32 inode;
+
+ if (! (pl = jffs2_get_list(part, "ls")))
+ return 0;
+
+ if (! (inode = jffs2_1pass_search_list_inodes(pl, fname, 1))) {
+ putstr("ls: Failed to scan jffs2 file structure\r\n");
+ return 0;
+ }
+
+
+#if 0
+ putLabeledWord("found file at inode = ", inode);
+ putLabeledWord("read_inode returns = ", ret);
+#endif
+
+ return ret;
+}
+
+
+/* Load a file from flash into memory. fname can be a full path */
+u32
+jffs2_1pass_load(char *dest, struct part_info * part, const char *fname)
+{
+
+ struct b_lists *pl;
+ long ret = 1;
+ u32 inode;
+
+ if (! (pl = jffs2_get_list(part, "load")))
+ return 0;
+
+ if (! (inode = jffs2_1pass_search_inode(pl, fname, 1))) {
+ putstr("load: Failed to find inode\r\n");
+ return 0;
+ }
+
+ /* Resolve symlinks */
+ if (! (inode = jffs2_1pass_resolve_inode(pl, inode))) {
+ putstr("load: Failed to resolve inode structure\r\n");
+ return 0;
+ }
+
+ if ((ret = jffs2_1pass_read_inode(pl, inode, dest)) < 0) {
+ putstr("load: Failed to read inode\r\n");
+ return 0;
+ }
+
+ DEBUGF ("load: loaded '%s' to 0x%lx (%ld bytes)\n", fname,
+ (unsigned long) dest, ret);
+ return ret;
+}
+
+/* Return information about the fs on this partition */
+u32
+jffs2_1pass_info(struct part_info * part)
+{
+ struct b_jffs2_info info;
+ struct b_lists *pl;
+ int i;
+
+ if (! (pl = jffs2_get_list(part, "info")))
+ return 0;
+
+ jffs2_1pass_fill_info(pl, &info);
+ for (i = 0; i < JFFS2_NUM_COMPR; i++) {
+ printf ("Compression: %s\n"
+ "\tfrag count: %d\n"
+ "\tcompressed sum: %d\n"
+ "\tuncompressed sum: %d\n",
+ compr_names[i],
+ info.compr_info[i].num_frags,
+ info.compr_info[i].compr_sum,
+ info.compr_info[i].decompr_sum);
+ }
+ return 1;
+}
diff -Naur u-boot-2009.03_orig/fs/jffs2/mini_inflate.c u-boot-2009.03/fs/jffs2/mini_inflate.c
--- u-boot-2009.03_orig/fs/jffs2/mini_inflate.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/jffs2/mini_inflate.c 2009-03-31 14:55:58.033246400 -0700
@@ -1,391 +1,391 @@
-/*-------------------------------------------------------------------------
- * Filename: mini_inflate.c
- * Version: $Id: mini_inflate.c,v 1.3 2002/01/24 22:58:42 rfeany Exp $
- * Copyright: Copyright (C) 2001, Russ Dill
- * Author: Russ Dill <Russ.Dill@asu.edu>
- * Description: Mini inflate implementation (RFC 1951)
- *-----------------------------------------------------------------------*/
-/*
- *
- * 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
- *
- */
-
-#include <config.h>
-#include <jffs2/mini_inflate.h>
-
-/* The order that the code lengths in section 3.2.7 are in */
-static unsigned char huffman_order[] = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5,
- 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-inline void cramfs_memset(int *s, const int c, size n)
-{
- n--;
- for (;n > 0; n--) s[n] = c;
- s[0] = c;
-}
-
-/* associate a stream with a block of data and reset the stream */
-static void init_stream(struct bitstream *stream, unsigned char *data,
- void *(*inflate_memcpy)(void *, const void *, size))
-{
- stream->error = NO_ERROR;
- stream->memcpy = inflate_memcpy;
- stream->decoded = 0;
- stream->data = data;
- stream->bit = 0; /* The first bit of the stream is the lsb of the
- * first byte */
-
- /* really sorry about all this initialization, think of a better way,
- * let me know and it will get cleaned up */
- stream->codes.bits = 8;
- stream->codes.num_symbols = 19;
- stream->codes.lengths = stream->code_lengths;
- stream->codes.symbols = stream->code_symbols;
- stream->codes.count = stream->code_count;
- stream->codes.first = stream->code_first;
- stream->codes.pos = stream->code_pos;
-
- stream->lengths.bits = 16;
- stream->lengths.num_symbols = 288;
- stream->lengths.lengths = stream->length_lengths;
- stream->lengths.symbols = stream->length_symbols;
- stream->lengths.count = stream->length_count;
- stream->lengths.first = stream->length_first;
- stream->lengths.pos = stream->length_pos;
-
- stream->distance.bits = 16;
- stream->distance.num_symbols = 32;
- stream->distance.lengths = stream->distance_lengths;
- stream->distance.symbols = stream->distance_symbols;
- stream->distance.count = stream->distance_count;
- stream->distance.first = stream->distance_first;
- stream->distance.pos = stream->distance_pos;
-
-}
-
-/* pull 'bits' bits out of the stream. The last bit pulled it returned as the
- * msb. (section 3.1.1)
- */
-inline unsigned long pull_bits(struct bitstream *stream,
- const unsigned int bits)
-{
- unsigned long ret;
- int i;
-
- ret = 0;
- for (i = 0; i < bits; i++) {
- ret += ((*(stream->data) >> stream->bit) & 1) << i;
-
- /* if, before incrementing, we are on bit 7,
- * go to the lsb of the next byte */
- if (stream->bit++ == 7) {
- stream->bit = 0;
- stream->data++;
- }
- }
- return ret;
-}
-
-inline int pull_bit(struct bitstream *stream)
-{
- int ret = ((*(stream->data) >> stream->bit) & 1);
- if (stream->bit++ == 7) {
- stream->bit = 0;
- stream->data++;
- }
- return ret;
-}
-
-/* discard bits up to the next whole byte */
-static void discard_bits(struct bitstream *stream)
-{
- if (stream->bit != 0) {
- stream->bit = 0;
- stream->data++;
- }
-}
-
-/* No decompression, the data is all literals (section 3.2.4) */
-static void decompress_none(struct bitstream *stream, unsigned char *dest)
-{
- unsigned int length;
-
- discard_bits(stream);
- length = *(stream->data++);
- length += *(stream->data++) << 8;
- pull_bits(stream, 16); /* throw away the inverse of the size */
-
- stream->decoded += length;
- stream->memcpy(dest, stream->data, length);
- stream->data += length;
-}
-
-/* Read in a symbol from the stream (section 3.2.2) */
-static int read_symbol(struct bitstream *stream, struct huffman_set *set)
-{
- int bits = 0;
- int code = 0;
- while (!(set->count[bits] && code < set->first[bits] +
- set->count[bits])) {
- code = (code << 1) + pull_bit(stream);
- if (++bits > set->bits) {
- /* error decoding (corrupted data?) */
- stream->error = CODE_NOT_FOUND;
- return -1;
- }
- }
- return set->symbols[set->pos[bits] + code - set->first[bits]];
-}
-
-/* decompress a stream of data encoded with the passed length and distance
- * huffman codes */
-static void decompress_huffman(struct bitstream *stream, unsigned char *dest)
-{
- struct huffman_set *lengths = &(stream->lengths);
- struct huffman_set *distance = &(stream->distance);
-
- int symbol, length, dist, i;
-
- do {
- if ((symbol = read_symbol(stream, lengths)) < 0) return;
- if (symbol < 256) {
- *(dest++) = symbol; /* symbol is a literal */
- stream->decoded++;
- } else if (symbol > 256) {
- /* Determine the length of the repitition
- * (section 3.2.5) */
- if (symbol < 265) length = symbol - 254;
- else if (symbol == 285) length = 258;
- else {
- length = pull_bits(stream, (symbol - 261) >> 2);
- length += (4 << ((symbol - 261) >> 2)) + 3;
- length += ((symbol - 1) % 4) <<
- ((symbol - 261) >> 2);
- }
-
- /* Determine how far back to go */
- if ((symbol = read_symbol(stream, distance)) < 0)
- return;
- if (symbol < 4) dist = symbol + 1;
- else {
- dist = pull_bits(stream, (symbol - 2) >> 1);
- dist += (2 << ((symbol - 2) >> 1)) + 1;
- dist += (symbol % 2) << ((symbol - 2) >> 1);
- }
- stream->decoded += length;
- for (i = 0; i < length; i++) {
- *dest = dest[-dist];
- dest++;
- }
- }
- } while (symbol != 256); /* 256 is the end of the data block */
-}
-
-/* Fill the lookup tables (section 3.2.2) */
-static void fill_code_tables(struct huffman_set *set)
-{
- int code = 0, i, length;
-
- /* fill in the first code of each bit length, and the pos pointer */
- set->pos[0] = 0;
- for (i = 1; i < set->bits; i++) {
- code = (code + set->count[i - 1]) << 1;
- set->first[i] = code;
- set->pos[i] = set->pos[i - 1] + set->count[i - 1];
- }
-
- /* Fill in the table of symbols in order of their huffman code */
- for (i = 0; i < set->num_symbols; i++) {
- if ((length = set->lengths[i]))
- set->symbols[set->pos[length]++] = i;
- }
-
- /* reset the pos pointer */
- for (i = 1; i < set->bits; i++) set->pos[i] -= set->count[i];
-}
-
-static void init_code_tables(struct huffman_set *set)
-{
- cramfs_memset(set->lengths, 0, set->num_symbols);
- cramfs_memset(set->count, 0, set->bits);
- cramfs_memset(set->first, 0, set->bits);
-}
-
-/* read in the huffman codes for dynamic decoding (section 3.2.7) */
-static void decompress_dynamic(struct bitstream *stream, unsigned char *dest)
-{
- /* I tried my best to minimize the memory footprint here, while still
- * keeping up performance. I really dislike the _lengths[] tables, but
- * I see no way of eliminating them without a sizable performance
- * impact. The first struct table keeps track of stats on each bit
- * length. The _length table keeps a record of the bit length of each
- * symbol. The _symbols table is for looking up symbols by the huffman
- * code (the pos element points to the first place in the symbol table
- * where that bit length occurs). I also hate the initization of these
- * structs, if someone knows how to compact these, lemme know. */
-
- struct huffman_set *codes = &(stream->codes);
- struct huffman_set *lengths = &(stream->lengths);
- struct huffman_set *distance = &(stream->distance);
-
- int hlit = pull_bits(stream, 5) + 257;
- int hdist = pull_bits(stream, 5) + 1;
- int hclen = pull_bits(stream, 4) + 4;
- int length, curr_code, symbol, i, last_code;
-
- last_code = 0;
-
- init_code_tables(codes);
- init_code_tables(lengths);
- init_code_tables(distance);
-
- /* fill in the count of each bit length' as well as the lengths
- * table */
- for (i = 0; i < hclen; i++) {
- length = pull_bits(stream, 3);
- codes->lengths[huffman_order[i]] = length;
- if (length) codes->count[length]++;
-
- }
- fill_code_tables(codes);
-
- /* Do the same for the length codes, being carefull of wrap through
- * to the distance table */
- curr_code = 0;
- while (curr_code < hlit) {
- if ((symbol = read_symbol(stream, codes)) < 0) return;
- if (symbol == 0) {
- curr_code++;
- last_code = 0;
- } else if (symbol < 16) { /* Literal length */
- lengths->lengths[curr_code] = last_code = symbol;
- lengths->count[symbol]++;
- curr_code++;
- } else if (symbol == 16) { /* repeat the last symbol 3 - 6
- * times */
- length = 3 + pull_bits(stream, 2);
- for (;length; length--, curr_code++)
- if (curr_code < hlit) {
- lengths->lengths[curr_code] =
- last_code;
- lengths->count[last_code]++;
- } else { /* wrap to the distance table */
- distance->lengths[curr_code - hlit] =
- last_code;
- distance->count[last_code]++;
- }
- } else if (symbol == 17) { /* repeat a bit length 0 */
- curr_code += 3 + pull_bits(stream, 3);
- last_code = 0;
- } else { /* same, but more times */
- curr_code += 11 + pull_bits(stream, 7);
- last_code = 0;
- }
- }
- fill_code_tables(lengths);
-
- /* Fill the distance table, don't need to worry about wrapthrough
- * here */
- curr_code -= hlit;
- while (curr_code < hdist) {
- if ((symbol = read_symbol(stream, codes)) < 0) return;
- if (symbol == 0) {
- curr_code++;
- last_code = 0;
- } else if (symbol < 16) {
- distance->lengths[curr_code] = last_code = symbol;
- distance->count[symbol]++;
- curr_code++;
- } else if (symbol == 16) {
- length = 3 + pull_bits(stream, 2);
- for (;length; length--, curr_code++) {
- distance->lengths[curr_code] =
- last_code;
- distance->count[last_code]++;
- }
- } else if (symbol == 17) {
- curr_code += 3 + pull_bits(stream, 3);
- last_code = 0;
- } else {
- curr_code += 11 + pull_bits(stream, 7);
- last_code = 0;
- }
- }
- fill_code_tables(distance);
-
- decompress_huffman(stream, dest);
-}
-
-/* fill in the length and distance huffman codes for fixed encoding
- * (section 3.2.6) */
-static void decompress_fixed(struct bitstream *stream, unsigned char *dest)
-{
- /* let gcc fill in the initial values */
- struct huffman_set *lengths = &(stream->lengths);
- struct huffman_set *distance = &(stream->distance);
-
- cramfs_memset(lengths->count, 0, 16);
- cramfs_memset(lengths->first, 0, 16);
- cramfs_memset(lengths->lengths, 8, 144);
- cramfs_memset(lengths->lengths + 144, 9, 112);
- cramfs_memset(lengths->lengths + 256, 7, 24);
- cramfs_memset(lengths->lengths + 280, 8, 8);
- lengths->count[7] = 24;
- lengths->count[8] = 152;
- lengths->count[9] = 112;
-
- cramfs_memset(distance->count, 0, 16);
- cramfs_memset(distance->first, 0, 16);
- cramfs_memset(distance->lengths, 5, 32);
- distance->count[5] = 32;
-
-
- fill_code_tables(lengths);
- fill_code_tables(distance);
-
-
- decompress_huffman(stream, dest);
-}
-
-/* returns the number of bytes decoded, < 0 if there was an error. Note that
- * this function assumes that the block starts on a byte boundry
- * (non-compliant, but I don't see where this would happen). section 3.2.3 */
-long decompress_block(unsigned char *dest, unsigned char *source,
- void *(*inflate_memcpy)(void *, const void *, size))
-{
- int bfinal, btype;
- struct bitstream stream;
-
- init_stream(&stream, source, inflate_memcpy);
- do {
- bfinal = pull_bit(&stream);
- btype = pull_bits(&stream, 2);
- if (btype == NO_COMP) decompress_none(&stream, dest + stream.decoded);
- else if (btype == DYNAMIC_COMP)
- decompress_dynamic(&stream, dest + stream.decoded);
- else if (btype == FIXED_COMP) decompress_fixed(&stream, dest + stream.decoded);
- else stream.error = COMP_UNKNOWN;
- } while (!bfinal && !stream.error);
-
-#if 0
- putstr("decompress_block start\r\n");
- putLabeledWord("stream.error = ",stream.error);
- putLabeledWord("stream.decoded = ",stream.decoded);
- putLabeledWord("dest = ",dest);
- putstr("decompress_block end\r\n");
-#endif
- return stream.error ? -stream.error : stream.decoded;
-}
+/*-------------------------------------------------------------------------
+ * Filename: mini_inflate.c
+ * Version: $Id: mini_inflate.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $
+ * Copyright: Copyright (C) 2001, Russ Dill
+ * Author: Russ Dill <Russ.Dill@asu.edu>
+ * Description: Mini inflate implementation (RFC 1951)
+ *-----------------------------------------------------------------------*/
+/*
+ *
+ * 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
+ *
+ */
+
+#include <config.h>
+#include <jffs2/mini_inflate.h>
+
+/* The order that the code lengths in section 3.2.7 are in */
+static unsigned char huffman_order[] = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5,
+ 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+inline void cramfs_memset(int *s, const int c, size n)
+{
+ n--;
+ for (;n > 0; n--) s[n] = c;
+ s[0] = c;
+}
+
+/* associate a stream with a block of data and reset the stream */
+static void init_stream(struct bitstream *stream, unsigned char *data,
+ void *(*inflate_memcpy)(void *, const void *, size))
+{
+ stream->error = NO_ERROR;
+ stream->memcpy = inflate_memcpy;
+ stream->decoded = 0;
+ stream->data = data;
+ stream->bit = 0; /* The first bit of the stream is the lsb of the
+ * first byte */
+
+ /* really sorry about all this initialization, think of a better way,
+ * let me know and it will get cleaned up */
+ stream->codes.bits = 8;
+ stream->codes.num_symbols = 19;
+ stream->codes.lengths = stream->code_lengths;
+ stream->codes.symbols = stream->code_symbols;
+ stream->codes.count = stream->code_count;
+ stream->codes.first = stream->code_first;
+ stream->codes.pos = stream->code_pos;
+
+ stream->lengths.bits = 16;
+ stream->lengths.num_symbols = 288;
+ stream->lengths.lengths = stream->length_lengths;
+ stream->lengths.symbols = stream->length_symbols;
+ stream->lengths.count = stream->length_count;
+ stream->lengths.first = stream->length_first;
+ stream->lengths.pos = stream->length_pos;
+
+ stream->distance.bits = 16;
+ stream->distance.num_symbols = 32;
+ stream->distance.lengths = stream->distance_lengths;
+ stream->distance.symbols = stream->distance_symbols;
+ stream->distance.count = stream->distance_count;
+ stream->distance.first = stream->distance_first;
+ stream->distance.pos = stream->distance_pos;
+
+}
+
+/* pull 'bits' bits out of the stream. The last bit pulled it returned as the
+ * msb. (section 3.1.1)
+ */
+inline unsigned long pull_bits(struct bitstream *stream,
+ const unsigned int bits)
+{
+ unsigned long ret;
+ int i;
+
+ ret = 0;
+ for (i = 0; i < bits; i++) {
+ ret += ((*(stream->data) >> stream->bit) & 1) << i;
+
+ /* if, before incrementing, we are on bit 7,
+ * go to the lsb of the next byte */
+ if (stream->bit++ == 7) {
+ stream->bit = 0;
+ stream->data++;
+ }
+ }
+ return ret;
+}
+
+inline int pull_bit(struct bitstream *stream)
+{
+ int ret = ((*(stream->data) >> stream->bit) & 1);
+ if (stream->bit++ == 7) {
+ stream->bit = 0;
+ stream->data++;
+ }
+ return ret;
+}
+
+/* discard bits up to the next whole byte */
+static void discard_bits(struct bitstream *stream)
+{
+ if (stream->bit != 0) {
+ stream->bit = 0;
+ stream->data++;
+ }
+}
+
+/* No decompression, the data is all literals (section 3.2.4) */
+static void decompress_none(struct bitstream *stream, unsigned char *dest)
+{
+ unsigned int length;
+
+ discard_bits(stream);
+ length = *(stream->data++);
+ length += *(stream->data++) << 8;
+ pull_bits(stream, 16); /* throw away the inverse of the size */
+
+ stream->decoded += length;
+ stream->memcpy(dest, stream->data, length);
+ stream->data += length;
+}
+
+/* Read in a symbol from the stream (section 3.2.2) */
+static int read_symbol(struct bitstream *stream, struct huffman_set *set)
+{
+ int bits = 0;
+ int code = 0;
+ while (!(set->count[bits] && code < set->first[bits] +
+ set->count[bits])) {
+ code = (code << 1) + pull_bit(stream);
+ if (++bits > set->bits) {
+ /* error decoding (corrupted data?) */
+ stream->error = CODE_NOT_FOUND;
+ return -1;
+ }
+ }
+ return set->symbols[set->pos[bits] + code - set->first[bits]];
+}
+
+/* decompress a stream of data encoded with the passed length and distance
+ * huffman codes */
+static void decompress_huffman(struct bitstream *stream, unsigned char *dest)
+{
+ struct huffman_set *lengths = &(stream->lengths);
+ struct huffman_set *distance = &(stream->distance);
+
+ int symbol, length, dist, i;
+
+ do {
+ if ((symbol = read_symbol(stream, lengths)) < 0) return;
+ if (symbol < 256) {
+ *(dest++) = symbol; /* symbol is a literal */
+ stream->decoded++;
+ } else if (symbol > 256) {
+ /* Determine the length of the repitition
+ * (section 3.2.5) */
+ if (symbol < 265) length = symbol - 254;
+ else if (symbol == 285) length = 258;
+ else {
+ length = pull_bits(stream, (symbol - 261) >> 2);
+ length += (4 << ((symbol - 261) >> 2)) + 3;
+ length += ((symbol - 1) % 4) <<
+ ((symbol - 261) >> 2);
+ }
+
+ /* Determine how far back to go */
+ if ((symbol = read_symbol(stream, distance)) < 0)
+ return;
+ if (symbol < 4) dist = symbol + 1;
+ else {
+ dist = pull_bits(stream, (symbol - 2) >> 1);
+ dist += (2 << ((symbol - 2) >> 1)) + 1;
+ dist += (symbol % 2) << ((symbol - 2) >> 1);
+ }
+ stream->decoded += length;
+ for (i = 0; i < length; i++) {
+ *dest = dest[-dist];
+ dest++;
+ }
+ }
+ } while (symbol != 256); /* 256 is the end of the data block */
+}
+
+/* Fill the lookup tables (section 3.2.2) */
+static void fill_code_tables(struct huffman_set *set)
+{
+ int code = 0, i, length;
+
+ /* fill in the first code of each bit length, and the pos pointer */
+ set->pos[0] = 0;
+ for (i = 1; i < set->bits; i++) {
+ code = (code + set->count[i - 1]) << 1;
+ set->first[i] = code;
+ set->pos[i] = set->pos[i - 1] + set->count[i - 1];
+ }
+
+ /* Fill in the table of symbols in order of their huffman code */
+ for (i = 0; i < set->num_symbols; i++) {
+ if ((length = set->lengths[i]))
+ set->symbols[set->pos[length]++] = i;
+ }
+
+ /* reset the pos pointer */
+ for (i = 1; i < set->bits; i++) set->pos[i] -= set->count[i];
+}
+
+static void init_code_tables(struct huffman_set *set)
+{
+ cramfs_memset(set->lengths, 0, set->num_symbols);
+ cramfs_memset(set->count, 0, set->bits);
+ cramfs_memset(set->first, 0, set->bits);
+}
+
+/* read in the huffman codes for dynamic decoding (section 3.2.7) */
+static void decompress_dynamic(struct bitstream *stream, unsigned char *dest)
+{
+ /* I tried my best to minimize the memory footprint here, while still
+ * keeping up performance. I really dislike the _lengths[] tables, but
+ * I see no way of eliminating them without a sizable performance
+ * impact. The first struct table keeps track of stats on each bit
+ * length. The _length table keeps a record of the bit length of each
+ * symbol. The _symbols table is for looking up symbols by the huffman
+ * code (the pos element points to the first place in the symbol table
+ * where that bit length occurs). I also hate the initization of these
+ * structs, if someone knows how to compact these, lemme know. */
+
+ struct huffman_set *codes = &(stream->codes);
+ struct huffman_set *lengths = &(stream->lengths);
+ struct huffman_set *distance = &(stream->distance);
+
+ int hlit = pull_bits(stream, 5) + 257;
+ int hdist = pull_bits(stream, 5) + 1;
+ int hclen = pull_bits(stream, 4) + 4;
+ int length, curr_code, symbol, i, last_code;
+
+ last_code = 0;
+
+ init_code_tables(codes);
+ init_code_tables(lengths);
+ init_code_tables(distance);
+
+ /* fill in the count of each bit length' as well as the lengths
+ * table */
+ for (i = 0; i < hclen; i++) {
+ length = pull_bits(stream, 3);
+ codes->lengths[huffman_order[i]] = length;
+ if (length) codes->count[length]++;
+
+ }
+ fill_code_tables(codes);
+
+ /* Do the same for the length codes, being carefull of wrap through
+ * to the distance table */
+ curr_code = 0;
+ while (curr_code < hlit) {
+ if ((symbol = read_symbol(stream, codes)) < 0) return;
+ if (symbol == 0) {
+ curr_code++;
+ last_code = 0;
+ } else if (symbol < 16) { /* Literal length */
+ lengths->lengths[curr_code] = last_code = symbol;
+ lengths->count[symbol]++;
+ curr_code++;
+ } else if (symbol == 16) { /* repeat the last symbol 3 - 6
+ * times */
+ length = 3 + pull_bits(stream, 2);
+ for (;length; length--, curr_code++)
+ if (curr_code < hlit) {
+ lengths->lengths[curr_code] =
+ last_code;
+ lengths->count[last_code]++;
+ } else { /* wrap to the distance table */
+ distance->lengths[curr_code - hlit] =
+ last_code;
+ distance->count[last_code]++;
+ }
+ } else if (symbol == 17) { /* repeat a bit length 0 */
+ curr_code += 3 + pull_bits(stream, 3);
+ last_code = 0;
+ } else { /* same, but more times */
+ curr_code += 11 + pull_bits(stream, 7);
+ last_code = 0;
+ }
+ }
+ fill_code_tables(lengths);
+
+ /* Fill the distance table, don't need to worry about wrapthrough
+ * here */
+ curr_code -= hlit;
+ while (curr_code < hdist) {
+ if ((symbol = read_symbol(stream, codes)) < 0) return;
+ if (symbol == 0) {
+ curr_code++;
+ last_code = 0;
+ } else if (symbol < 16) {
+ distance->lengths[curr_code] = last_code = symbol;
+ distance->count[symbol]++;
+ curr_code++;
+ } else if (symbol == 16) {
+ length = 3 + pull_bits(stream, 2);
+ for (;length; length--, curr_code++) {
+ distance->lengths[curr_code] =
+ last_code;
+ distance->count[last_code]++;
+ }
+ } else if (symbol == 17) {
+ curr_code += 3 + pull_bits(stream, 3);
+ last_code = 0;
+ } else {
+ curr_code += 11 + pull_bits(stream, 7);
+ last_code = 0;
+ }
+ }
+ fill_code_tables(distance);
+
+ decompress_huffman(stream, dest);
+}
+
+/* fill in the length and distance huffman codes for fixed encoding
+ * (section 3.2.6) */
+static void decompress_fixed(struct bitstream *stream, unsigned char *dest)
+{
+ /* let gcc fill in the initial values */
+ struct huffman_set *lengths = &(stream->lengths);
+ struct huffman_set *distance = &(stream->distance);
+
+ cramfs_memset(lengths->count, 0, 16);
+ cramfs_memset(lengths->first, 0, 16);
+ cramfs_memset(lengths->lengths, 8, 144);
+ cramfs_memset(lengths->lengths + 144, 9, 112);
+ cramfs_memset(lengths->lengths + 256, 7, 24);
+ cramfs_memset(lengths->lengths + 280, 8, 8);
+ lengths->count[7] = 24;
+ lengths->count[8] = 152;
+ lengths->count[9] = 112;
+
+ cramfs_memset(distance->count, 0, 16);
+ cramfs_memset(distance->first, 0, 16);
+ cramfs_memset(distance->lengths, 5, 32);
+ distance->count[5] = 32;
+
+
+ fill_code_tables(lengths);
+ fill_code_tables(distance);
+
+
+ decompress_huffman(stream, dest);
+}
+
+/* returns the number of bytes decoded, < 0 if there was an error. Note that
+ * this function assumes that the block starts on a byte boundry
+ * (non-compliant, but I don't see where this would happen). section 3.2.3 */
+long decompress_block(unsigned char *dest, unsigned char *source,
+ void *(*inflate_memcpy)(void *, const void *, size))
+{
+ int bfinal, btype;
+ struct bitstream stream;
+
+ init_stream(&stream, source, inflate_memcpy);
+ do {
+ bfinal = pull_bit(&stream);
+ btype = pull_bits(&stream, 2);
+ if (btype == NO_COMP) decompress_none(&stream, dest + stream.decoded);
+ else if (btype == DYNAMIC_COMP)
+ decompress_dynamic(&stream, dest + stream.decoded);
+ else if (btype == FIXED_COMP) decompress_fixed(&stream, dest + stream.decoded);
+ else stream.error = COMP_UNKNOWN;
+ } while (!bfinal && !stream.error);
+
+#if 0
+ putstr("decompress_block start\r\n");
+ putLabeledWord("stream.error = ",stream.error);
+ putLabeledWord("stream.decoded = ",stream.decoded);
+ putLabeledWord("dest = ",dest);
+ putstr("decompress_block end\r\n");
+#endif
+ return stream.error ? -stream.error : stream.decoded;
+}
diff -Naur u-boot-2009.03_orig/fs/reiserfs/CVS/Entries u-boot-2009.03/fs/reiserfs/CVS/Entries
--- u-boot-2009.03_orig/fs/reiserfs/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/reiserfs/CVS/Entries 2009-03-25 15:58:04.871740000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dev.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mode_string.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reiserfs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reiserfs_private.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/reiserfs/CVS/Entries.Extra u-boot-2009.03/fs/reiserfs/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/reiserfs/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/reiserfs/CVS/Entries.Extra 2009-03-25 15:58:04.871740000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019732/
+/dev.c///1238019732/
+/mode_string.c///1238019732/
+/reiserfs.c///1238019732/
+/reiserfs_private.h///1238019732/
diff -Naur u-boot-2009.03_orig/fs/reiserfs/CVS/Entries.Extra.Old u-boot-2009.03/fs/reiserfs/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/reiserfs/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/reiserfs/CVS/Entries.Extra.Old 2009-03-25 15:25:35.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019732/
+/dev.c///1238019732/
+/mode_string.c///1238019732/
+/reiserfs.c///1238019732/
+/reiserfs_private.h///1238019732/
diff -Naur u-boot-2009.03_orig/fs/reiserfs/CVS/Entries.Old u-boot-2009.03/fs/reiserfs/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/reiserfs/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/reiserfs/CVS/Entries.Old 2009-03-25 15:25:35.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:12 2009//
+/dev.c/1.1.1.1/Wed Mar 25 22:22:12 2009//
+/mode_string.c/1.1.1.1/Wed Mar 25 22:22:12 2009//
+/reiserfs.c/1.1.1.1/Wed Mar 25 22:22:12 2009//
+/reiserfs_private.h/1.1.1.1/Wed Mar 25 22:22:12 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/reiserfs/CVS/Repository u-boot-2009.03/fs/reiserfs/CVS/Repository
--- u-boot-2009.03_orig/fs/reiserfs/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/reiserfs/CVS/Repository 2009-03-25 15:25:35.243592700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs/reiserfs
diff -Naur u-boot-2009.03_orig/fs/reiserfs/CVS/Root u-boot-2009.03/fs/reiserfs/CVS/Root
--- u-boot-2009.03_orig/fs/reiserfs/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/reiserfs/CVS/Root 2009-03-25 15:25:35.243592700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/yaffs2/CVS/Entries u-boot-2009.03/fs/yaffs2/CVS/Entries
--- u-boot-2009.03_orig/fs/yaffs2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/yaffs2/CVS/Entries 2009-03-31 14:56:33.235920800 -0700
@@ -0,0 +1,37 @@
+/README-linux/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/devextras.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_checkptrw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_ecc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_flashif.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_guts.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_malloc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_mtdif.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_mtdif2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_nand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_nandemul2k.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_qsort.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_qsort.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_ramdisk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagscompat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagscompat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagsvalidity.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagsvalidity.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffscfg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffscfg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffsfs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffsinterface.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ydirectenv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yportenv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_checkptrw.c/1.1.1.1/Tue Mar 31 21:56:32 2009//T1.1.1.1
+/yaffs_ecc.c/1.1.1.1/Tue Mar 31 21:56:33 2009//T1.1.1.1
+/yaffs_guts.c/1.1.1.1/Tue Mar 31 21:56:33 2009//T1.1.1.1
+/yaffs_mtdif.c/1.1.1.1/Tue Mar 31 21:56:33 2009//T1.1.1.1
+/yaffs_mtdif2.c/1.1.1.1/Tue Mar 31 21:56:33 2009//T1.1.1.1
+/yaffs_nand.c/1.1.1.1/Tue Mar 31 21:56:33 2009//T1.1.1.1
+/yaffsfs.c/1.1.1.1/Tue Mar 31 21:56:33 2009//T1.1.1.1
+/Makefile/1.1.1.1/Tue Mar 31 21:56:33 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/fs/yaffs2/CVS/Entries.Extra u-boot-2009.03/fs/yaffs2/CVS/Entries.Extra
--- u-boot-2009.03_orig/fs/yaffs2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/yaffs2/CVS/Entries.Extra 2009-03-31 14:56:33.251545600 -0700
@@ -0,0 +1,36 @@
+/README-linux///1238019732/
+/devextras.h///1238019732/
+/yaffs_checkptrw.h///1238019732/
+/yaffs_ecc.h///1238019732/
+/yaffs_flashif.h///1238019732/
+/yaffs_guts.h///1238019732/
+/yaffs_malloc.h///1238019732/
+/yaffs_mtdif.h///1238019732/
+/yaffs_mtdif2.h///1238019732/
+/yaffs_nand.h///1238019732/
+/yaffs_nandemul2k.h///1238019732/
+/yaffs_packedtags1.c///1238019732/
+/yaffs_packedtags1.h///1238019732/
+/yaffs_packedtags2.c///1238019732/
+/yaffs_packedtags2.h///1238019732/
+/yaffs_qsort.c///1238019732/
+/yaffs_qsort.h///1238019732/
+/yaffs_ramdisk.h///1238019732/
+/yaffs_tagscompat.c///1238019732/
+/yaffs_tagscompat.h///1238019732/
+/yaffs_tagsvalidity.c///1238019733/
+/yaffs_tagsvalidity.h///1238019733/
+/yaffscfg.c///1238019732/
+/yaffscfg.h///1238019732/
+/yaffsfs.h///1238019732/
+/yaffsinterface.h///1238019732/
+/ydirectenv.h///1238019733/
+/yportenv.h///1238019733/
+/yaffs_checkptrw.c///1238019732/
+/yaffs_ecc.c///1238019732/
+/yaffs_guts.c///1238019732/
+/yaffs_mtdif.c///1238019732/
+/yaffs_mtdif2.c///1238019732/
+/yaffs_nand.c///1238019732/
+/yaffsfs.c///1238019732/
+/Makefile///1238019732/
diff -Naur u-boot-2009.03_orig/fs/yaffs2/CVS/Entries.Extra.Old u-boot-2009.03/fs/yaffs2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/fs/yaffs2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/yaffs2/CVS/Entries.Extra.Old 2009-03-25 17:51:48.000000000 -0700
@@ -0,0 +1,36 @@
+/README-linux///1238019732/
+/devextras.h///1238019732/
+/yaffs_checkptrw.h///1238019732/
+/yaffs_ecc.h///1238019732/
+/yaffs_flashif.h///1238019732/
+/yaffs_guts.h///1238019732/
+/yaffs_malloc.h///1238019732/
+/yaffs_mtdif.h///1238019732/
+/yaffs_mtdif2.h///1238019732/
+/yaffs_nand.h///1238019732/
+/yaffs_nandemul2k.h///1238019732/
+/yaffs_packedtags1.c///1238019732/
+/yaffs_packedtags1.h///1238019732/
+/yaffs_packedtags2.c///1238019732/
+/yaffs_packedtags2.h///1238019732/
+/yaffs_qsort.c///1238019732/
+/yaffs_qsort.h///1238019732/
+/yaffs_ramdisk.h///1238019732/
+/yaffs_tagscompat.c///1238019732/
+/yaffs_tagscompat.h///1238019732/
+/yaffs_tagsvalidity.c///1238019733/
+/yaffs_tagsvalidity.h///1238019733/
+/yaffscfg.c///1238019732/
+/yaffscfg.h///1238019732/
+/yaffsfs.h///1238019732/
+/yaffsinterface.h///1238019732/
+/ydirectenv.h///1238019733/
+/yportenv.h///1238019733/
+/Makefile///1238028708/
+/yaffs_checkptrw.c///1238028708/
+/yaffs_ecc.c///1238028708/
+/yaffs_guts.c///1238028708/
+/yaffs_mtdif.c///1238028708/
+/yaffs_mtdif2.c///1238028708/
+/yaffs_nand.c///1238028708/
+/yaffsfs.c///1238028708/
diff -Naur u-boot-2009.03_orig/fs/yaffs2/CVS/Entries.Old u-boot-2009.03/fs/yaffs2/CVS/Entries.Old
--- u-boot-2009.03_orig/fs/yaffs2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/yaffs2/CVS/Entries.Old 2009-03-25 17:51:48.000000000 -0700
@@ -0,0 +1,37 @@
+/README-linux/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/devextras.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_checkptrw.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_ecc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_flashif.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_guts.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_malloc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_mtdif.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_mtdif2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_nand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_nandemul2k.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_packedtags2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_qsort.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_qsort.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_ramdisk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagscompat.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagscompat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagsvalidity.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffs_tagsvalidity.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffscfg.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffscfg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffsfs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yaffsinterface.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ydirectenv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yportenv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.2/Thu Mar 26 00:51:48 2009//
+/yaffs_checkptrw.c/1.2/Thu Mar 26 00:51:48 2009//
+/yaffs_ecc.c/1.2/Thu Mar 26 00:51:48 2009//
+/yaffs_guts.c/1.2/Thu Mar 26 00:51:48 2009//
+/yaffs_mtdif.c/1.2/Thu Mar 26 00:51:48 2009//
+/yaffs_mtdif2.c/1.2/Thu Mar 26 00:51:48 2009//
+/yaffs_nand.c/1.2/Thu Mar 26 00:51:48 2009//
+/yaffsfs.c/1.2/Thu Mar 26 00:51:48 2009//
+D
diff -Naur u-boot-2009.03_orig/fs/yaffs2/CVS/Repository u-boot-2009.03/fs/yaffs2/CVS/Repository
--- u-boot-2009.03_orig/fs/yaffs2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/yaffs2/CVS/Repository 2009-03-25 15:25:35.352967000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/fs/yaffs2
diff -Naur u-boot-2009.03_orig/fs/yaffs2/CVS/Root u-boot-2009.03/fs/yaffs2/CVS/Root
--- u-boot-2009.03_orig/fs/yaffs2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/fs/yaffs2/CVS/Root 2009-03-25 15:25:35.352967000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/fs/yaffs2/Makefile u-boot-2009.03/fs/yaffs2/Makefile
--- u-boot-2009.03_orig/fs/yaffs2/Makefile 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/Makefile 2009-03-31 14:56:33.220296000 -0700
@@ -1,55 +1,55 @@
-# Makefile for YAFFS direct test
-#
-#
-# YAFFS: Yet another Flash File System. A NAND-flash specific file system.
-#
-# Copyright (C) 2003 Aleph One Ltd.
-#
-#
-# Created by Charles Manning <charles@aleph1.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# NB Warning this Makefile does not include header dependencies.
-#
-# $Id: Makefile,v 1.15 2007/07/18 19:40:38 charles Exp $
-
-#EXTRA_COMPILE_FLAGS = -DYAFFS_IGNORE_TAGS_ECC
-include $(TOPDIR)/config.mk
-
-LIB = $(obj)libyaffs2.a
-
-COBJS-$(CONFIG_YAFFS2) := \
- yaffscfg.o yaffs_ecc.o yaffsfs.o yaffs_guts.o yaffs_packedtags1.o \
- yaffs_tagscompat.o yaffs_packedtags2.o yaffs_tagsvalidity.o \
- yaffs_nand.o yaffs_checkptrw.o yaffs_qsort.o yaffs_mtdif.o \
- yaffs_mtdif2.o
-
-SRCS := $(COBJS-y:.o=.c)
-OBJS := $(addprefix $(obj),$(COBJS-y))
-
-# -DCONFIG_YAFFS_NO_YAFFS1
-CFLAGS += -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -DNO_Y_INLINE -DLINUX_VERSION_CODE=0x20622
-
-all: $(LIB)
-
-$(LIB): $(obj).depend $(OBJS)
- $(AR) $(ARFLAGS) $@ $(OBJS)
-
-.PHONY: clean distclean
-clean:
- rm -f $(OBJS)
-
-distclean: clean
- rm -f $(LIB) core *.bak .depend
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
+# Makefile for YAFFS direct test
+#
+#
+# YAFFS: Yet another Flash File System. A NAND-flash specific file system.
+#
+# Copyright (C) 2003 Aleph One Ltd.
+#
+#
+# Created by Charles Manning <charles@aleph1.co.uk>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# NB Warning this Makefile does not include header dependencies.
+#
+# $Id: Makefile,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $
+
+#EXTRA_COMPILE_FLAGS = -DYAFFS_IGNORE_TAGS_ECC
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)libyaffs2.a
+
+COBJS-$(CONFIG_YAFFS2) := \
+ yaffscfg.o yaffs_ecc.o yaffsfs.o yaffs_guts.o yaffs_packedtags1.o \
+ yaffs_tagscompat.o yaffs_packedtags2.o yaffs_tagsvalidity.o \
+ yaffs_nand.o yaffs_checkptrw.o yaffs_qsort.o yaffs_mtdif.o \
+ yaffs_mtdif2.o
+
+SRCS := $(COBJS-y:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS-y))
+
+# -DCONFIG_YAFFS_NO_YAFFS1
+CFLAGS += -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -DNO_Y_INLINE -DLINUX_VERSION_CODE=0x20622
+
+all: $(LIB)
+
+$(LIB): $(obj).depend $(OBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS)
+
+.PHONY: clean distclean
+clean:
+ rm -f $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff -Naur u-boot-2009.03_orig/fs/yaffs2/yaffs_checkptrw.c u-boot-2009.03/fs/yaffs2/yaffs_checkptrw.c
--- u-boot-2009.03_orig/fs/yaffs2/yaffs_checkptrw.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/yaffs_checkptrw.c 2009-03-31 14:56:32.845300800 -0700
@@ -1,405 +1,405 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-#include <malloc.h>
-
-const char *yaffs_checkptrw_c_version =
- "$Id: yaffs_checkptrw.c,v 1.14 2007/05/15 20:07:40 charles Exp $";
-
-
-#include "yaffs_checkptrw.h"
-
-
-static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
-{
-
- int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
-
- T(YAFFS_TRACE_CHECKPOINT,
- (TSTR("checkpt blocks available = %d" TENDSTR),
- blocksAvailable));
-
-
- return (blocksAvailable <= 0) ? 0 : 1;
-}
-
-
-static int yaffs_CheckpointErase(yaffs_Device *dev)
-{
-
- int i;
-
-
- if(!dev->eraseBlockInNAND)
- return 0;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
- dev->internalStartBlock,dev->internalEndBlock));
-
- for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
- if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
- if(dev->eraseBlockInNAND(dev,i- dev->blockOffset /* realign */)){
- bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- dev->nFreeChunks += dev->nChunksPerBlock;
- }
- else {
- dev->markNANDBlockBad(dev,i);
- bi->blockState = YAFFS_BLOCK_STATE_DEAD;
- }
- }
- }
-
- dev->blocksInCheckpoint = 0;
-
- return 1;
-}
-
-
-static void yaffs_CheckpointFindNextErasedBlock(yaffs_Device *dev)
-{
- int i;
- int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
- T(YAFFS_TRACE_CHECKPOINT,
- (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
- dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
-
- if(dev->checkpointNextBlock >= 0 &&
- dev->checkpointNextBlock <= dev->internalEndBlock &&
- blocksAvailable > 0){
-
- for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
- if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
- dev->checkpointNextBlock = i + 1;
- dev->checkpointCurrentBlock = i;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("allocating checkpt block %d"TENDSTR),i));
- return;
- }
- }
- }
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
-
- dev->checkpointNextBlock = -1;
- dev->checkpointCurrentBlock = -1;
-}
-
-static void yaffs_CheckpointFindNextCheckpointBlock(yaffs_Device *dev)
-{
- int i;
- yaffs_ExtendedTags tags;
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start: blocks %d next %d" TENDSTR),
- dev->blocksInCheckpoint, dev->checkpointNextBlock));
-
- if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
- for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
- int chunk = i * dev->nChunksPerBlock;
- int realignedChunk = chunk - dev->chunkOffset;
-
- dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
- i, tags.objectId,tags.sequenceNumber,tags.eccResult));
-
- if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
- /* Right kind of block */
- dev->checkpointNextBlock = tags.objectId;
- dev->checkpointCurrentBlock = i;
- dev->checkpointBlockList[dev->blocksInCheckpoint] = i;
- dev->blocksInCheckpoint++;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("found checkpt block %d"TENDSTR),i));
- return;
- }
- }
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("found no more checkpt blocks"TENDSTR)));
-
- dev->checkpointNextBlock = -1;
- dev->checkpointCurrentBlock = -1;
-}
-
-
-int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting)
-{
-
- /* Got the functions we need? */
- if (!dev->writeChunkWithTagsToNAND ||
- !dev->readChunkWithTagsFromNAND ||
- !dev->eraseBlockInNAND ||
- !dev->markNANDBlockBad)
- return 0;
-
- if(forWriting && !yaffs_CheckpointSpaceOk(dev))
- return 0;
-
- if(!dev->checkpointBuffer)
- dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
- if(!dev->checkpointBuffer)
- return 0;
-
-
- dev->checkpointPageSequence = 0;
-
- dev->checkpointOpenForWrite = forWriting;
-
- dev->checkpointByteCount = 0;
- dev->checkpointSum = 0;
- dev->checkpointXor = 0;
- dev->checkpointCurrentBlock = -1;
- dev->checkpointCurrentChunk = -1;
- dev->checkpointNextBlock = dev->internalStartBlock;
-
- /* Erase all the blocks in the checkpoint area */
- if(forWriting){
- memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
- dev->checkpointByteOffset = 0;
- return yaffs_CheckpointErase(dev);
-
-
- } else {
- int i;
- /* Set to a value that will kick off a read */
- dev->checkpointByteOffset = dev->nDataBytesPerChunk;
- /* A checkpoint block list of 1 checkpoint block per 16 block is (hopefully)
- * going to be way more than we need */
- dev->blocksInCheckpoint = 0;
- dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
- dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
- for(i = 0; i < dev->checkpointMaxBlocks; i++)
- dev->checkpointBlockList[i] = -1;
- }
-
- return 1;
-}
-
-int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum)
-{
- __u32 compositeSum;
- compositeSum = (dev->checkpointSum << 8) | (dev->checkpointXor & 0xFF);
- *sum = compositeSum;
- return 1;
-}
-
-static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
-{
-
- int chunk;
- int realignedChunk;
-
- yaffs_ExtendedTags tags;
-
- if(dev->checkpointCurrentBlock < 0){
- yaffs_CheckpointFindNextErasedBlock(dev);
- dev->checkpointCurrentChunk = 0;
- }
-
- if(dev->checkpointCurrentBlock < 0)
- return 0;
-
- tags.chunkDeleted = 0;
- tags.objectId = dev->checkpointNextBlock; /* Hint to next place to look */
- tags.chunkId = dev->checkpointPageSequence + 1;
- tags.sequenceNumber = YAFFS_SEQUENCE_CHECKPOINT_DATA;
- tags.byteCount = dev->nDataBytesPerChunk;
- if(dev->checkpointCurrentChunk == 0){
- /* First chunk we write for the block? Set block state to
- checkpoint */
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
- bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
- dev->blocksInCheckpoint++;
- }
-
- chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
-
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
- chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
-
- realignedChunk = chunk - dev->chunkOffset;
-
- dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
- dev->checkpointByteOffset = 0;
- dev->checkpointPageSequence++;
- dev->checkpointCurrentChunk++;
- if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
- dev->checkpointCurrentChunk = 0;
- dev->checkpointCurrentBlock = -1;
- }
- memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
-
- return 1;
-}
-
-
-int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
-{
- int i=0;
- int ok = 1;
-
-
- __u8 * dataBytes = (__u8 *)data;
-
-
-
- if(!dev->checkpointBuffer)
- return 0;
-
- if(!dev->checkpointOpenForWrite)
- return -1;
-
- while(i < nBytes && ok) {
-
-
-
- dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
- dev->checkpointSum += *dataBytes;
- dev->checkpointXor ^= *dataBytes;
-
- dev->checkpointByteOffset++;
- i++;
- dataBytes++;
- dev->checkpointByteCount++;
-
-
- if(dev->checkpointByteOffset < 0 ||
- dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
- ok = yaffs_CheckpointFlushBuffer(dev);
-
- }
-
- return i;
-}
-
-int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
-{
- int i=0;
- int ok = 1;
- yaffs_ExtendedTags tags;
-
-
- int chunk;
- int realignedChunk;
-
- __u8 *dataBytes = (__u8 *)data;
-
- if(!dev->checkpointBuffer)
- return 0;
-
- if(dev->checkpointOpenForWrite)
- return -1;
-
- while(i < nBytes && ok) {
-
-
- if(dev->checkpointByteOffset < 0 ||
- dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
-
- if(dev->checkpointCurrentBlock < 0){
- yaffs_CheckpointFindNextCheckpointBlock(dev);
- dev->checkpointCurrentChunk = 0;
- }
-
- if(dev->checkpointCurrentBlock < 0)
- ok = 0;
- else {
-
- chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
- dev->checkpointCurrentChunk;
-
- realignedChunk = chunk - dev->chunkOffset;
-
- /* read in the next chunk */
- /* printf("read checkpoint page %d\n",dev->checkpointPage); */
- dev->readChunkWithTagsFromNAND(dev, realignedChunk,
- dev->checkpointBuffer,
- &tags);
-
- if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
- tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
- ok = 0;
-
- dev->checkpointByteOffset = 0;
- dev->checkpointPageSequence++;
- dev->checkpointCurrentChunk++;
-
- if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
- dev->checkpointCurrentBlock = -1;
- }
- }
-
- if(ok){
- *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
- dev->checkpointSum += *dataBytes;
- dev->checkpointXor ^= *dataBytes;
- dev->checkpointByteOffset++;
- i++;
- dataBytes++;
- dev->checkpointByteCount++;
- }
- }
-
- return i;
-}
-
-int yaffs_CheckpointClose(yaffs_Device *dev)
-{
-
- if(dev->checkpointOpenForWrite){
- if(dev->checkpointByteOffset != 0)
- yaffs_CheckpointFlushBuffer(dev);
- } else {
- int i;
- for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
- if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
- bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
- else {
- // Todo this looks odd...
- }
- }
- YFREE(dev->checkpointBlockList);
- dev->checkpointBlockList = NULL;
- }
-
- dev->nFreeChunks -= dev->blocksInCheckpoint * dev->nChunksPerBlock;
- dev->nErasedBlocks -= dev->blocksInCheckpoint;
-
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
- dev->checkpointByteCount));
-
- if(dev->checkpointBuffer){
- /* free the buffer */
- YFREE(dev->checkpointBuffer);
- dev->checkpointBuffer = NULL;
- return 1;
- }
- else
- return 0;
-
-}
-
-int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
-{
- /* Erase the first checksum block */
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint invalidate"TENDSTR)));
-
- if(!yaffs_CheckpointSpaceOk(dev))
- return 0;
-
- return yaffs_CheckpointErase(dev);
-}
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/* XXX U-BOOT XXX */
+#include <common.h>
+#include <malloc.h>
+
+const char *yaffs_checkptrw_c_version =
+ "$Id: yaffs_checkptrw.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $";
+
+
+#include "yaffs_checkptrw.h"
+
+
+static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
+{
+
+ int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
+
+ T(YAFFS_TRACE_CHECKPOINT,
+ (TSTR("checkpt blocks available = %d" TENDSTR),
+ blocksAvailable));
+
+
+ return (blocksAvailable <= 0) ? 0 : 1;
+}
+
+
+static int yaffs_CheckpointErase(yaffs_Device *dev)
+{
+
+ int i;
+
+
+ if(!dev->eraseBlockInNAND)
+ return 0;
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
+ dev->internalStartBlock,dev->internalEndBlock));
+
+ for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
+ if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
+ if(dev->eraseBlockInNAND(dev,i- dev->blockOffset /* realign */)){
+ bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
+ dev->nErasedBlocks++;
+ dev->nFreeChunks += dev->nChunksPerBlock;
+ }
+ else {
+ dev->markNANDBlockBad(dev,i);
+ bi->blockState = YAFFS_BLOCK_STATE_DEAD;
+ }
+ }
+ }
+
+ dev->blocksInCheckpoint = 0;
+
+ return 1;
+}
+
+
+static void yaffs_CheckpointFindNextErasedBlock(yaffs_Device *dev)
+{
+ int i;
+ int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
+ T(YAFFS_TRACE_CHECKPOINT,
+ (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
+ dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
+
+ if(dev->checkpointNextBlock >= 0 &&
+ dev->checkpointNextBlock <= dev->internalEndBlock &&
+ blocksAvailable > 0){
+
+ for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
+ if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
+ dev->checkpointNextBlock = i + 1;
+ dev->checkpointCurrentBlock = i;
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("allocating checkpt block %d"TENDSTR),i));
+ return;
+ }
+ }
+ }
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
+
+ dev->checkpointNextBlock = -1;
+ dev->checkpointCurrentBlock = -1;
+}
+
+static void yaffs_CheckpointFindNextCheckpointBlock(yaffs_Device *dev)
+{
+ int i;
+ yaffs_ExtendedTags tags;
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start: blocks %d next %d" TENDSTR),
+ dev->blocksInCheckpoint, dev->checkpointNextBlock));
+
+ if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
+ for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
+ int chunk = i * dev->nChunksPerBlock;
+ int realignedChunk = chunk - dev->chunkOffset;
+
+ dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
+ i, tags.objectId,tags.sequenceNumber,tags.eccResult));
+
+ if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
+ /* Right kind of block */
+ dev->checkpointNextBlock = tags.objectId;
+ dev->checkpointCurrentBlock = i;
+ dev->checkpointBlockList[dev->blocksInCheckpoint] = i;
+ dev->blocksInCheckpoint++;
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("found checkpt block %d"TENDSTR),i));
+ return;
+ }
+ }
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("found no more checkpt blocks"TENDSTR)));
+
+ dev->checkpointNextBlock = -1;
+ dev->checkpointCurrentBlock = -1;
+}
+
+
+int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting)
+{
+
+ /* Got the functions we need? */
+ if (!dev->writeChunkWithTagsToNAND ||
+ !dev->readChunkWithTagsFromNAND ||
+ !dev->eraseBlockInNAND ||
+ !dev->markNANDBlockBad)
+ return 0;
+
+ if(forWriting && !yaffs_CheckpointSpaceOk(dev))
+ return 0;
+
+ if(!dev->checkpointBuffer)
+ dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
+ if(!dev->checkpointBuffer)
+ return 0;
+
+
+ dev->checkpointPageSequence = 0;
+
+ dev->checkpointOpenForWrite = forWriting;
+
+ dev->checkpointByteCount = 0;
+ dev->checkpointSum = 0;
+ dev->checkpointXor = 0;
+ dev->checkpointCurrentBlock = -1;
+ dev->checkpointCurrentChunk = -1;
+ dev->checkpointNextBlock = dev->internalStartBlock;
+
+ /* Erase all the blocks in the checkpoint area */
+ if(forWriting){
+ memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
+ dev->checkpointByteOffset = 0;
+ return yaffs_CheckpointErase(dev);
+
+
+ } else {
+ int i;
+ /* Set to a value that will kick off a read */
+ dev->checkpointByteOffset = dev->nDataBytesPerChunk;
+ /* A checkpoint block list of 1 checkpoint block per 16 block is (hopefully)
+ * going to be way more than we need */
+ dev->blocksInCheckpoint = 0;
+ dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
+ dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
+ for(i = 0; i < dev->checkpointMaxBlocks; i++)
+ dev->checkpointBlockList[i] = -1;
+ }
+
+ return 1;
+}
+
+int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum)
+{
+ __u32 compositeSum;
+ compositeSum = (dev->checkpointSum << 8) | (dev->checkpointXor & 0xFF);
+ *sum = compositeSum;
+ return 1;
+}
+
+static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
+{
+
+ int chunk;
+ int realignedChunk;
+
+ yaffs_ExtendedTags tags;
+
+ if(dev->checkpointCurrentBlock < 0){
+ yaffs_CheckpointFindNextErasedBlock(dev);
+ dev->checkpointCurrentChunk = 0;
+ }
+
+ if(dev->checkpointCurrentBlock < 0)
+ return 0;
+
+ tags.chunkDeleted = 0;
+ tags.objectId = dev->checkpointNextBlock; /* Hint to next place to look */
+ tags.chunkId = dev->checkpointPageSequence + 1;
+ tags.sequenceNumber = YAFFS_SEQUENCE_CHECKPOINT_DATA;
+ tags.byteCount = dev->nDataBytesPerChunk;
+ if(dev->checkpointCurrentChunk == 0){
+ /* First chunk we write for the block? Set block state to
+ checkpoint */
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
+ bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
+ dev->blocksInCheckpoint++;
+ }
+
+ chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
+
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
+ chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
+
+ realignedChunk = chunk - dev->chunkOffset;
+
+ dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
+ dev->checkpointByteOffset = 0;
+ dev->checkpointPageSequence++;
+ dev->checkpointCurrentChunk++;
+ if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
+ dev->checkpointCurrentChunk = 0;
+ dev->checkpointCurrentBlock = -1;
+ }
+ memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
+
+ return 1;
+}
+
+
+int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
+{
+ int i=0;
+ int ok = 1;
+
+
+ __u8 * dataBytes = (__u8 *)data;
+
+
+
+ if(!dev->checkpointBuffer)
+ return 0;
+
+ if(!dev->checkpointOpenForWrite)
+ return -1;
+
+ while(i < nBytes && ok) {
+
+
+
+ dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
+ dev->checkpointSum += *dataBytes;
+ dev->checkpointXor ^= *dataBytes;
+
+ dev->checkpointByteOffset++;
+ i++;
+ dataBytes++;
+ dev->checkpointByteCount++;
+
+
+ if(dev->checkpointByteOffset < 0 ||
+ dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
+ ok = yaffs_CheckpointFlushBuffer(dev);
+
+ }
+
+ return i;
+}
+
+int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
+{
+ int i=0;
+ int ok = 1;
+ yaffs_ExtendedTags tags;
+
+
+ int chunk;
+ int realignedChunk;
+
+ __u8 *dataBytes = (__u8 *)data;
+
+ if(!dev->checkpointBuffer)
+ return 0;
+
+ if(dev->checkpointOpenForWrite)
+ return -1;
+
+ while(i < nBytes && ok) {
+
+
+ if(dev->checkpointByteOffset < 0 ||
+ dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
+
+ if(dev->checkpointCurrentBlock < 0){
+ yaffs_CheckpointFindNextCheckpointBlock(dev);
+ dev->checkpointCurrentChunk = 0;
+ }
+
+ if(dev->checkpointCurrentBlock < 0)
+ ok = 0;
+ else {
+
+ chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
+ dev->checkpointCurrentChunk;
+
+ realignedChunk = chunk - dev->chunkOffset;
+
+ /* read in the next chunk */
+ /* printf("read checkpoint page %d\n",dev->checkpointPage); */
+ dev->readChunkWithTagsFromNAND(dev, realignedChunk,
+ dev->checkpointBuffer,
+ &tags);
+
+ if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
+ tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
+ ok = 0;
+
+ dev->checkpointByteOffset = 0;
+ dev->checkpointPageSequence++;
+ dev->checkpointCurrentChunk++;
+
+ if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
+ dev->checkpointCurrentBlock = -1;
+ }
+ }
+
+ if(ok){
+ *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
+ dev->checkpointSum += *dataBytes;
+ dev->checkpointXor ^= *dataBytes;
+ dev->checkpointByteOffset++;
+ i++;
+ dataBytes++;
+ dev->checkpointByteCount++;
+ }
+ }
+
+ return i;
+}
+
+int yaffs_CheckpointClose(yaffs_Device *dev)
+{
+
+ if(dev->checkpointOpenForWrite){
+ if(dev->checkpointByteOffset != 0)
+ yaffs_CheckpointFlushBuffer(dev);
+ } else {
+ int i;
+ for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
+ if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
+ bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
+ else {
+ // Todo this looks odd...
+ }
+ }
+ YFREE(dev->checkpointBlockList);
+ dev->checkpointBlockList = NULL;
+ }
+
+ dev->nFreeChunks -= dev->blocksInCheckpoint * dev->nChunksPerBlock;
+ dev->nErasedBlocks -= dev->blocksInCheckpoint;
+
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
+ dev->checkpointByteCount));
+
+ if(dev->checkpointBuffer){
+ /* free the buffer */
+ YFREE(dev->checkpointBuffer);
+ dev->checkpointBuffer = NULL;
+ return 1;
+ }
+ else
+ return 0;
+
+}
+
+int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
+{
+ /* Erase the first checksum block */
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint invalidate"TENDSTR)));
+
+ if(!yaffs_CheckpointSpaceOk(dev))
+ return 0;
+
+ return yaffs_CheckpointErase(dev);
+}
diff -Naur u-boot-2009.03_orig/fs/yaffs2/yaffs_ecc.c u-boot-2009.03/fs/yaffs2/yaffs_ecc.c
--- u-boot-2009.03_orig/fs/yaffs2/yaffs_ecc.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/yaffs_ecc.c 2009-03-31 14:56:33.017173600 -0700
@@ -1,333 +1,333 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/*
- * This code implements the ECC algorithm used in SmartMedia.
- *
- * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
- * The two unused bit are set to 1.
- * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
- * blocks are used on a 512-byte NAND page.
- *
- */
-
-/* Table generated by gen-ecc.c
- * Using a table means we do not have to calculate p1..p4 and p1'..p4'
- * for each byte of data. These are instead provided in a table in bits7..2.
- * Bit 0 of each entry indicates whether the entry has an odd or even parity, and therefore
- * this bytes influence on the line parity.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-const char *yaffs_ecc_c_version =
- "$Id: yaffs_ecc.c,v 1.9 2007/02/14 01:09:06 wookey Exp $";
-
-#include "yportenv.h"
-
-#include "yaffs_ecc.h"
-
-static const unsigned char column_parity_table[] = {
- 0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69,
- 0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
- 0x95, 0xc0, 0xcc, 0x99, 0xf0, 0xa5, 0xa9, 0xfc,
- 0xfc, 0xa9, 0xa5, 0xf0, 0x99, 0xcc, 0xc0, 0x95,
- 0x99, 0xcc, 0xc0, 0x95, 0xfc, 0xa9, 0xa5, 0xf0,
- 0xf0, 0xa5, 0xa9, 0xfc, 0x95, 0xc0, 0xcc, 0x99,
- 0x0c, 0x59, 0x55, 0x00, 0x69, 0x3c, 0x30, 0x65,
- 0x65, 0x30, 0x3c, 0x69, 0x00, 0x55, 0x59, 0x0c,
- 0xa5, 0xf0, 0xfc, 0xa9, 0xc0, 0x95, 0x99, 0xcc,
- 0xcc, 0x99, 0x95, 0xc0, 0xa9, 0xfc, 0xf0, 0xa5,
- 0x30, 0x65, 0x69, 0x3c, 0x55, 0x00, 0x0c, 0x59,
- 0x59, 0x0c, 0x00, 0x55, 0x3c, 0x69, 0x65, 0x30,
- 0x3c, 0x69, 0x65, 0x30, 0x59, 0x0c, 0x00, 0x55,
- 0x55, 0x00, 0x0c, 0x59, 0x30, 0x65, 0x69, 0x3c,
- 0xa9, 0xfc, 0xf0, 0xa5, 0xcc, 0x99, 0x95, 0xc0,
- 0xc0, 0x95, 0x99, 0xcc, 0xa5, 0xf0, 0xfc, 0xa9,
- 0xa9, 0xfc, 0xf0, 0xa5, 0xcc, 0x99, 0x95, 0xc0,
- 0xc0, 0x95, 0x99, 0xcc, 0xa5, 0xf0, 0xfc, 0xa9,
- 0x3c, 0x69, 0x65, 0x30, 0x59, 0x0c, 0x00, 0x55,
- 0x55, 0x00, 0x0c, 0x59, 0x30, 0x65, 0x69, 0x3c,
- 0x30, 0x65, 0x69, 0x3c, 0x55, 0x00, 0x0c, 0x59,
- 0x59, 0x0c, 0x00, 0x55, 0x3c, 0x69, 0x65, 0x30,
- 0xa5, 0xf0, 0xfc, 0xa9, 0xc0, 0x95, 0x99, 0xcc,
- 0xcc, 0x99, 0x95, 0xc0, 0xa9, 0xfc, 0xf0, 0xa5,
- 0x0c, 0x59, 0x55, 0x00, 0x69, 0x3c, 0x30, 0x65,
- 0x65, 0x30, 0x3c, 0x69, 0x00, 0x55, 0x59, 0x0c,
- 0x99, 0xcc, 0xc0, 0x95, 0xfc, 0xa9, 0xa5, 0xf0,
- 0xf0, 0xa5, 0xa9, 0xfc, 0x95, 0xc0, 0xcc, 0x99,
- 0x95, 0xc0, 0xcc, 0x99, 0xf0, 0xa5, 0xa9, 0xfc,
- 0xfc, 0xa9, 0xa5, 0xf0, 0x99, 0xcc, 0xc0, 0x95,
- 0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69,
- 0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
-};
-
-/* Count the bits in an unsigned char or a U32 */
-
-static int yaffs_CountBits(unsigned char x)
-{
- int r = 0;
- while (x) {
- if (x & 1)
- r++;
- x >>= 1;
- }
- return r;
-}
-
-static int yaffs_CountBits32(unsigned x)
-{
- int r = 0;
- while (x) {
- if (x & 1)
- r++;
- x >>= 1;
- }
- return r;
-}
-
-/* Calculate the ECC for a 256-byte block of data */
-void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc)
-{
- unsigned int i;
-
- unsigned char col_parity = 0;
- unsigned char line_parity = 0;
- unsigned char line_parity_prime = 0;
- unsigned char t;
- unsigned char b;
-
- for (i = 0; i < 256; i++) {
- b = column_parity_table[*data++];
- col_parity ^= b;
-
- if (b & 0x01) // odd number of bits in the byte
- {
- line_parity ^= i;
- line_parity_prime ^= ~i;
- }
-
- }
-
- ecc[2] = (~col_parity) | 0x03;
-
- t = 0;
- if (line_parity & 0x80)
- t |= 0x80;
- if (line_parity_prime & 0x80)
- t |= 0x40;
- if (line_parity & 0x40)
- t |= 0x20;
- if (line_parity_prime & 0x40)
- t |= 0x10;
- if (line_parity & 0x20)
- t |= 0x08;
- if (line_parity_prime & 0x20)
- t |= 0x04;
- if (line_parity & 0x10)
- t |= 0x02;
- if (line_parity_prime & 0x10)
- t |= 0x01;
- ecc[1] = ~t;
-
- t = 0;
- if (line_parity & 0x08)
- t |= 0x80;
- if (line_parity_prime & 0x08)
- t |= 0x40;
- if (line_parity & 0x04)
- t |= 0x20;
- if (line_parity_prime & 0x04)
- t |= 0x10;
- if (line_parity & 0x02)
- t |= 0x08;
- if (line_parity_prime & 0x02)
- t |= 0x04;
- if (line_parity & 0x01)
- t |= 0x02;
- if (line_parity_prime & 0x01)
- t |= 0x01;
- ecc[0] = ~t;
-
-#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
- // Swap the bytes into the wrong order
- t = ecc[0];
- ecc[0] = ecc[1];
- ecc[1] = t;
-#endif
-}
-
-
-/* Correct the ECC on a 256 byte block of data */
-
-int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
- const unsigned char *test_ecc)
-{
- unsigned char d0, d1, d2; /* deltas */
-
- d0 = read_ecc[0] ^ test_ecc[0];
- d1 = read_ecc[1] ^ test_ecc[1];
- d2 = read_ecc[2] ^ test_ecc[2];
-
- if ((d0 | d1 | d2) == 0)
- return 0; /* no error */
-
- if (((d0 ^ (d0 >> 1)) & 0x55) == 0x55 &&
- ((d1 ^ (d1 >> 1)) & 0x55) == 0x55 &&
- ((d2 ^ (d2 >> 1)) & 0x54) == 0x54) {
- /* Single bit (recoverable) error in data */
-
- unsigned byte;
- unsigned bit;
-
-#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
- // swap the bytes to correct for the wrong order
- unsigned char t;
-
- t = d0;
- d0 = d1;
- d1 = t;
-#endif
-
- bit = byte = 0;
-
- if (d1 & 0x80)
- byte |= 0x80;
- if (d1 & 0x20)
- byte |= 0x40;
- if (d1 & 0x08)
- byte |= 0x20;
- if (d1 & 0x02)
- byte |= 0x10;
- if (d0 & 0x80)
- byte |= 0x08;
- if (d0 & 0x20)
- byte |= 0x04;
- if (d0 & 0x08)
- byte |= 0x02;
- if (d0 & 0x02)
- byte |= 0x01;
-
- if (d2 & 0x80)
- bit |= 0x04;
- if (d2 & 0x20)
- bit |= 0x02;
- if (d2 & 0x08)
- bit |= 0x01;
-
- data[byte] ^= (1 << bit);
-
- return 1; /* Corrected the error */
- }
-
- if ((yaffs_CountBits(d0) +
- yaffs_CountBits(d1) +
- yaffs_CountBits(d2)) == 1) {
- /* Reccoverable error in ecc */
-
- read_ecc[0] = test_ecc[0];
- read_ecc[1] = test_ecc[1];
- read_ecc[2] = test_ecc[2];
-
- return 1; /* Corrected the error */
- }
-
- /* Unrecoverable error */
-
- return -1;
-
-}
-
-
-/*
- * ECCxxxOther does ECC calcs on arbitrary n bytes of data
- */
-void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
- yaffs_ECCOther * eccOther)
-{
- unsigned int i;
-
- unsigned char col_parity = 0;
- unsigned line_parity = 0;
- unsigned line_parity_prime = 0;
- unsigned char b;
-
- for (i = 0; i < nBytes; i++) {
- b = column_parity_table[*data++];
- col_parity ^= b;
-
- if (b & 0x01) {
- /* odd number of bits in the byte */
- line_parity ^= i;
- line_parity_prime ^= ~i;
- }
-
- }
-
- eccOther->colParity = (col_parity >> 2) & 0x3f;
- eccOther->lineParity = line_parity;
- eccOther->lineParityPrime = line_parity_prime;
-}
-
-int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
- yaffs_ECCOther * read_ecc,
- const yaffs_ECCOther * test_ecc)
-{
- unsigned char cDelta; /* column parity delta */
- unsigned lDelta; /* line parity delta */
- unsigned lDeltaPrime; /* line parity delta */
- unsigned bit;
-
- cDelta = read_ecc->colParity ^ test_ecc->colParity;
- lDelta = read_ecc->lineParity ^ test_ecc->lineParity;
- lDeltaPrime = read_ecc->lineParityPrime ^ test_ecc->lineParityPrime;
-
- if ((cDelta | lDelta | lDeltaPrime) == 0)
- return 0; /* no error */
-
- if (lDelta == ~lDeltaPrime &&
- (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
- {
- /* Single bit (recoverable) error in data */
-
- bit = 0;
-
- if (cDelta & 0x20)
- bit |= 0x04;
- if (cDelta & 0x08)
- bit |= 0x02;
- if (cDelta & 0x02)
- bit |= 0x01;
-
- if(lDelta >= nBytes)
- return -1;
-
- data[lDelta] ^= (1 << bit);
-
- return 1; /* corrected */
- }
-
- if ((yaffs_CountBits32(lDelta) + yaffs_CountBits32(lDeltaPrime) +
- yaffs_CountBits(cDelta)) == 1) {
- /* Reccoverable error in ecc */
-
- *read_ecc = *test_ecc;
- return 1; /* corrected */
- }
-
- /* Unrecoverable error */
-
- return -1;
-
-}
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/*
+ * This code implements the ECC algorithm used in SmartMedia.
+ *
+ * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
+ * The two unused bit are set to 1.
+ * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
+ * blocks are used on a 512-byte NAND page.
+ *
+ */
+
+/* Table generated by gen-ecc.c
+ * Using a table means we do not have to calculate p1..p4 and p1'..p4'
+ * for each byte of data. These are instead provided in a table in bits7..2.
+ * Bit 0 of each entry indicates whether the entry has an odd or even parity, and therefore
+ * this bytes influence on the line parity.
+ */
+
+/* XXX U-BOOT XXX */
+#include <common.h>
+
+const char *yaffs_ecc_c_version =
+ "$Id: yaffs_ecc.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $";
+
+#include "yportenv.h"
+
+#include "yaffs_ecc.h"
+
+static const unsigned char column_parity_table[] = {
+ 0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69,
+ 0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
+ 0x95, 0xc0, 0xcc, 0x99, 0xf0, 0xa5, 0xa9, 0xfc,
+ 0xfc, 0xa9, 0xa5, 0xf0, 0x99, 0xcc, 0xc0, 0x95,
+ 0x99, 0xcc, 0xc0, 0x95, 0xfc, 0xa9, 0xa5, 0xf0,
+ 0xf0, 0xa5, 0xa9, 0xfc, 0x95, 0xc0, 0xcc, 0x99,
+ 0x0c, 0x59, 0x55, 0x00, 0x69, 0x3c, 0x30, 0x65,
+ 0x65, 0x30, 0x3c, 0x69, 0x00, 0x55, 0x59, 0x0c,
+ 0xa5, 0xf0, 0xfc, 0xa9, 0xc0, 0x95, 0x99, 0xcc,
+ 0xcc, 0x99, 0x95, 0xc0, 0xa9, 0xfc, 0xf0, 0xa5,
+ 0x30, 0x65, 0x69, 0x3c, 0x55, 0x00, 0x0c, 0x59,
+ 0x59, 0x0c, 0x00, 0x55, 0x3c, 0x69, 0x65, 0x30,
+ 0x3c, 0x69, 0x65, 0x30, 0x59, 0x0c, 0x00, 0x55,
+ 0x55, 0x00, 0x0c, 0x59, 0x30, 0x65, 0x69, 0x3c,
+ 0xa9, 0xfc, 0xf0, 0xa5, 0xcc, 0x99, 0x95, 0xc0,
+ 0xc0, 0x95, 0x99, 0xcc, 0xa5, 0xf0, 0xfc, 0xa9,
+ 0xa9, 0xfc, 0xf0, 0xa5, 0xcc, 0x99, 0x95, 0xc0,
+ 0xc0, 0x95, 0x99, 0xcc, 0xa5, 0xf0, 0xfc, 0xa9,
+ 0x3c, 0x69, 0x65, 0x30, 0x59, 0x0c, 0x00, 0x55,
+ 0x55, 0x00, 0x0c, 0x59, 0x30, 0x65, 0x69, 0x3c,
+ 0x30, 0x65, 0x69, 0x3c, 0x55, 0x00, 0x0c, 0x59,
+ 0x59, 0x0c, 0x00, 0x55, 0x3c, 0x69, 0x65, 0x30,
+ 0xa5, 0xf0, 0xfc, 0xa9, 0xc0, 0x95, 0x99, 0xcc,
+ 0xcc, 0x99, 0x95, 0xc0, 0xa9, 0xfc, 0xf0, 0xa5,
+ 0x0c, 0x59, 0x55, 0x00, 0x69, 0x3c, 0x30, 0x65,
+ 0x65, 0x30, 0x3c, 0x69, 0x00, 0x55, 0x59, 0x0c,
+ 0x99, 0xcc, 0xc0, 0x95, 0xfc, 0xa9, 0xa5, 0xf0,
+ 0xf0, 0xa5, 0xa9, 0xfc, 0x95, 0xc0, 0xcc, 0x99,
+ 0x95, 0xc0, 0xcc, 0x99, 0xf0, 0xa5, 0xa9, 0xfc,
+ 0xfc, 0xa9, 0xa5, 0xf0, 0x99, 0xcc, 0xc0, 0x95,
+ 0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69,
+ 0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
+};
+
+/* Count the bits in an unsigned char or a U32 */
+
+static int yaffs_CountBits(unsigned char x)
+{
+ int r = 0;
+ while (x) {
+ if (x & 1)
+ r++;
+ x >>= 1;
+ }
+ return r;
+}
+
+static int yaffs_CountBits32(unsigned x)
+{
+ int r = 0;
+ while (x) {
+ if (x & 1)
+ r++;
+ x >>= 1;
+ }
+ return r;
+}
+
+/* Calculate the ECC for a 256-byte block of data */
+void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc)
+{
+ unsigned int i;
+
+ unsigned char col_parity = 0;
+ unsigned char line_parity = 0;
+ unsigned char line_parity_prime = 0;
+ unsigned char t;
+ unsigned char b;
+
+ for (i = 0; i < 256; i++) {
+ b = column_parity_table[*data++];
+ col_parity ^= b;
+
+ if (b & 0x01) // odd number of bits in the byte
+ {
+ line_parity ^= i;
+ line_parity_prime ^= ~i;
+ }
+
+ }
+
+ ecc[2] = (~col_parity) | 0x03;
+
+ t = 0;
+ if (line_parity & 0x80)
+ t |= 0x80;
+ if (line_parity_prime & 0x80)
+ t |= 0x40;
+ if (line_parity & 0x40)
+ t |= 0x20;
+ if (line_parity_prime & 0x40)
+ t |= 0x10;
+ if (line_parity & 0x20)
+ t |= 0x08;
+ if (line_parity_prime & 0x20)
+ t |= 0x04;
+ if (line_parity & 0x10)
+ t |= 0x02;
+ if (line_parity_prime & 0x10)
+ t |= 0x01;
+ ecc[1] = ~t;
+
+ t = 0;
+ if (line_parity & 0x08)
+ t |= 0x80;
+ if (line_parity_prime & 0x08)
+ t |= 0x40;
+ if (line_parity & 0x04)
+ t |= 0x20;
+ if (line_parity_prime & 0x04)
+ t |= 0x10;
+ if (line_parity & 0x02)
+ t |= 0x08;
+ if (line_parity_prime & 0x02)
+ t |= 0x04;
+ if (line_parity & 0x01)
+ t |= 0x02;
+ if (line_parity_prime & 0x01)
+ t |= 0x01;
+ ecc[0] = ~t;
+
+#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
+ // Swap the bytes into the wrong order
+ t = ecc[0];
+ ecc[0] = ecc[1];
+ ecc[1] = t;
+#endif
+}
+
+
+/* Correct the ECC on a 256 byte block of data */
+
+int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
+ const unsigned char *test_ecc)
+{
+ unsigned char d0, d1, d2; /* deltas */
+
+ d0 = read_ecc[0] ^ test_ecc[0];
+ d1 = read_ecc[1] ^ test_ecc[1];
+ d2 = read_ecc[2] ^ test_ecc[2];
+
+ if ((d0 | d1 | d2) == 0)
+ return 0; /* no error */
+
+ if (((d0 ^ (d0 >> 1)) & 0x55) == 0x55 &&
+ ((d1 ^ (d1 >> 1)) & 0x55) == 0x55 &&
+ ((d2 ^ (d2 >> 1)) & 0x54) == 0x54) {
+ /* Single bit (recoverable) error in data */
+
+ unsigned byte;
+ unsigned bit;
+
+#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
+ // swap the bytes to correct for the wrong order
+ unsigned char t;
+
+ t = d0;
+ d0 = d1;
+ d1 = t;
+#endif
+
+ bit = byte = 0;
+
+ if (d1 & 0x80)
+ byte |= 0x80;
+ if (d1 & 0x20)
+ byte |= 0x40;
+ if (d1 & 0x08)
+ byte |= 0x20;
+ if (d1 & 0x02)
+ byte |= 0x10;
+ if (d0 & 0x80)
+ byte |= 0x08;
+ if (d0 & 0x20)
+ byte |= 0x04;
+ if (d0 & 0x08)
+ byte |= 0x02;
+ if (d0 & 0x02)
+ byte |= 0x01;
+
+ if (d2 & 0x80)
+ bit |= 0x04;
+ if (d2 & 0x20)
+ bit |= 0x02;
+ if (d2 & 0x08)
+ bit |= 0x01;
+
+ data[byte] ^= (1 << bit);
+
+ return 1; /* Corrected the error */
+ }
+
+ if ((yaffs_CountBits(d0) +
+ yaffs_CountBits(d1) +
+ yaffs_CountBits(d2)) == 1) {
+ /* Reccoverable error in ecc */
+
+ read_ecc[0] = test_ecc[0];
+ read_ecc[1] = test_ecc[1];
+ read_ecc[2] = test_ecc[2];
+
+ return 1; /* Corrected the error */
+ }
+
+ /* Unrecoverable error */
+
+ return -1;
+
+}
+
+
+/*
+ * ECCxxxOther does ECC calcs on arbitrary n bytes of data
+ */
+void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
+ yaffs_ECCOther * eccOther)
+{
+ unsigned int i;
+
+ unsigned char col_parity = 0;
+ unsigned line_parity = 0;
+ unsigned line_parity_prime = 0;
+ unsigned char b;
+
+ for (i = 0; i < nBytes; i++) {
+ b = column_parity_table[*data++];
+ col_parity ^= b;
+
+ if (b & 0x01) {
+ /* odd number of bits in the byte */
+ line_parity ^= i;
+ line_parity_prime ^= ~i;
+ }
+
+ }
+
+ eccOther->colParity = (col_parity >> 2) & 0x3f;
+ eccOther->lineParity = line_parity;
+ eccOther->lineParityPrime = line_parity_prime;
+}
+
+int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
+ yaffs_ECCOther * read_ecc,
+ const yaffs_ECCOther * test_ecc)
+{
+ unsigned char cDelta; /* column parity delta */
+ unsigned lDelta; /* line parity delta */
+ unsigned lDeltaPrime; /* line parity delta */
+ unsigned bit;
+
+ cDelta = read_ecc->colParity ^ test_ecc->colParity;
+ lDelta = read_ecc->lineParity ^ test_ecc->lineParity;
+ lDeltaPrime = read_ecc->lineParityPrime ^ test_ecc->lineParityPrime;
+
+ if ((cDelta | lDelta | lDeltaPrime) == 0)
+ return 0; /* no error */
+
+ if (lDelta == ~lDeltaPrime &&
+ (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
+ {
+ /* Single bit (recoverable) error in data */
+
+ bit = 0;
+
+ if (cDelta & 0x20)
+ bit |= 0x04;
+ if (cDelta & 0x08)
+ bit |= 0x02;
+ if (cDelta & 0x02)
+ bit |= 0x01;
+
+ if(lDelta >= nBytes)
+ return -1;
+
+ data[lDelta] ^= (1 << bit);
+
+ return 1; /* corrected */
+ }
+
+ if ((yaffs_CountBits32(lDelta) + yaffs_CountBits32(lDeltaPrime) +
+ yaffs_CountBits(cDelta)) == 1) {
+ /* Reccoverable error in ecc */
+
+ *read_ecc = *test_ecc;
+ return 1; /* corrected */
+ }
+
+ /* Unrecoverable error */
+
+ return -1;
+
+}
diff -Naur u-boot-2009.03_orig/fs/yaffs2/yaffs_guts.c u-boot-2009.03/fs/yaffs2/yaffs_guts.c
--- u-boot-2009.03_orig/fs/yaffs2/yaffs_guts.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/yaffs_guts.c 2009-03-31 14:56:33.064048000 -0700
@@ -1,7491 +1,7491 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-const char *yaffs_guts_c_version =
- "$Id: yaffs_guts.c,v 1.52 2007/10/16 00:45:05 charles Exp $";
-
-#include "yportenv.h"
-#include "linux/stat.h"
-
-#include "yaffsinterface.h"
-#include "yaffsfs.h"
-#include "yaffs_guts.h"
-#include "yaffs_tagsvalidity.h"
-
-#include "yaffs_tagscompat.h"
-#ifndef CONFIG_YAFFS_USE_OWN_SORT
-#include "yaffs_qsort.h"
-#endif
-#include "yaffs_nand.h"
-
-#include "yaffs_checkptrw.h"
-
-#include "yaffs_nand.h"
-#include "yaffs_packedtags2.h"
-
-#include "malloc.h"
-
-#ifdef CONFIG_YAFFS_WINCE
-void yfsd_LockYAFFS(BOOL fsLockOnly);
-void yfsd_UnlockYAFFS(BOOL fsLockOnly);
-#endif
-
-#define YAFFS_PASSIVE_GC_CHUNKS 2
-
-#include "yaffs_ecc.h"
-
-
-/* Robustification (if it ever comes about...) */
-static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND);
-static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk);
-static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags * tags);
-static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
- const yaffs_ExtendedTags * tags);
-
-/* Other local prototypes */
-static int yaffs_UnlinkObject( yaffs_Object *obj);
-static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj);
-
-static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList);
-
-static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev,
- const __u8 * buffer,
- yaffs_ExtendedTags * tags,
- int useReserve);
-static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
- int chunkInNAND, int inScan);
-
-static yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
- yaffs_ObjectType type);
-static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
- yaffs_Object * obj);
-static int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name,
- int force, int isShrink, int shadows);
-static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj);
-static int yaffs_CheckStructures(void);
-static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
- int chunkOffset, int *limit);
-static int yaffs_DoGenericObjectDeletion(yaffs_Object * in);
-
-static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blockNo);
-
-static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo);
-static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
- int lineNo);
-
-static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
- int chunkInNAND);
-
-static int yaffs_UnlinkWorker(yaffs_Object * obj);
-static void yaffs_DestroyObject(yaffs_Object * obj);
-
-static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
- int chunkInObject);
-
-loff_t yaffs_GetFileSize(yaffs_Object * obj);
-
-static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr);
-
-static void yaffs_VerifyFreeChunks(yaffs_Device * dev);
-
-static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in);
-
-#ifdef YAFFS_PARANOID
-static int yaffs_CheckFileSanity(yaffs_Object * in);
-#else
-#define yaffs_CheckFileSanity(in)
-#endif
-
-static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in);
-static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId);
-
-static void yaffs_InvalidateCheckpoint(yaffs_Device *dev);
-
-static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
- yaffs_ExtendedTags * tags);
-
-static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos);
-static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
- yaffs_FileStructure * fStruct,
- __u32 chunkId);
-
-
-/* Function to calculate chunk and offset */
-
-static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, __u32 *chunk, __u32 *offset)
-{
- if(dev->chunkShift){
- /* Easy-peasy power of 2 case */
- *chunk = (__u32)(addr >> dev->chunkShift);
- *offset = (__u32)(addr & dev->chunkMask);
- }
- else if(dev->crumbsPerChunk)
- {
- /* Case where we're using "crumbs" */
- *offset = (__u32)(addr & dev->crumbMask);
- addr >>= dev->crumbShift;
- *chunk = ((__u32)addr)/dev->crumbsPerChunk;
- *offset += ((addr - (*chunk * dev->crumbsPerChunk)) << dev->crumbShift);
- }
- else
- YBUG();
-}
-
-/* Function to return the number of shifts for a power of 2 greater than or equal
- * to the given number
- * Note we don't try to cater for all possible numbers and this does not have to
- * be hellishly efficient.
- */
-
-static __u32 ShiftsGE(__u32 x)
-{
- int extraBits;
- int nShifts;
-
- nShifts = extraBits = 0;
-
- while(x>1){
- if(x & 1) extraBits++;
- x>>=1;
- nShifts++;
- }
-
- if(extraBits)
- nShifts++;
-
- return nShifts;
-}
-
-/* Function to return the number of shifts to get a 1 in bit 0
- */
-
-static __u32 ShiftDiv(__u32 x)
-{
- int nShifts;
-
- nShifts = 0;
-
- if(!x) return 0;
-
- while( !(x&1)){
- x>>=1;
- nShifts++;
- }
-
- return nShifts;
-}
-
-
-
-/*
- * Temporary buffer manipulations.
- */
-
-static int yaffs_InitialiseTempBuffers(yaffs_Device *dev)
-{
- int i;
- __u8 *buf = (__u8 *)1;
-
- memset(dev->tempBuffer,0,sizeof(dev->tempBuffer));
-
- for (i = 0; buf && i < YAFFS_N_TEMP_BUFFERS; i++) {
- dev->tempBuffer[i].line = 0; /* not in use */
- dev->tempBuffer[i].buffer = buf =
- YMALLOC_DMA(dev->nDataBytesPerChunk);
- }
-
- return buf ? YAFFS_OK : YAFFS_FAIL;
-
-}
-
-static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo)
-{
- int i, j;
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- if (dev->tempBuffer[i].line == 0) {
- dev->tempBuffer[i].line = lineNo;
- if ((i + 1) > dev->maxTemp) {
- dev->maxTemp = i + 1;
- for (j = 0; j <= i; j++)
- dev->tempBuffer[j].maxLine =
- dev->tempBuffer[j].line;
- }
-
- return dev->tempBuffer[i].buffer;
- }
- }
-
- T(YAFFS_TRACE_BUFFERS,
- (TSTR("Out of temp buffers at line %d, other held by lines:"),
- lineNo));
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- T(YAFFS_TRACE_BUFFERS, (TSTR(" %d "), dev->tempBuffer[i].line));
- }
- T(YAFFS_TRACE_BUFFERS, (TSTR(" " TENDSTR)));
-
- /*
- * If we got here then we have to allocate an unmanaged one
- * This is not good.
- */
-
- dev->unmanagedTempAllocations++;
- return YMALLOC(dev->nDataBytesPerChunk);
-
-}
-
-static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
- int lineNo)
-{
- int i;
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- if (dev->tempBuffer[i].buffer == buffer) {
- dev->tempBuffer[i].line = 0;
- return;
- }
- }
-
- if (buffer) {
- /* assume it is an unmanaged one. */
- T(YAFFS_TRACE_BUFFERS,
- (TSTR("Releasing unmanaged temp buffer in line %d" TENDSTR),
- lineNo));
- YFREE(buffer);
- dev->unmanagedTempDeallocations++;
- }
-
-}
-
-/*
- * Determine if we have a managed buffer.
- */
-int yaffs_IsManagedTempBuffer(yaffs_Device * dev, const __u8 * buffer)
-{
- int i;
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- if (dev->tempBuffer[i].buffer == buffer)
- return 1;
-
- }
-
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if( dev->srCache[i].data == buffer )
- return 1;
-
- }
-
- if (buffer == dev->checkpointBuffer)
- return 1;
-
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
- return 0;
-}
-
-
-
-/*
- * Chunk bitmap manipulations
- */
-
-static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device * dev, int blk)
-{
- if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
- blk));
- YBUG();
- }
- return dev->chunkBits +
- (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
-}
-
-static Y_INLINE void yaffs_VerifyChunkBitId(yaffs_Device *dev, int blk, int chunk)
-{
- if(blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
- chunk < 0 || chunk >= dev->nChunksPerBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),blk,chunk));
- YBUG();
- }
-}
-
-static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device * dev, int blk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
-
- memset(blkBits, 0, dev->chunkBitmapStride);
-}
-
-static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device * dev, int blk, int chunk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
-
- yaffs_VerifyChunkBitId(dev,blk,chunk);
-
- blkBits[chunk / 8] &= ~(1 << (chunk & 7));
-}
-
-static Y_INLINE void yaffs_SetChunkBit(yaffs_Device * dev, int blk, int chunk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
-
- yaffs_VerifyChunkBitId(dev,blk,chunk);
-
- blkBits[chunk / 8] |= (1 << (chunk & 7));
-}
-
-static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device * dev, int blk, int chunk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
- yaffs_VerifyChunkBitId(dev,blk,chunk);
-
- return (blkBits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
-}
-
-static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
- int i;
- for (i = 0; i < dev->chunkBitmapStride; i++) {
- if (*blkBits)
- return 1;
- blkBits++;
- }
- return 0;
-}
-
-static int yaffs_CountChunkBits(yaffs_Device * dev, int blk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
- int i;
- int n = 0;
- for (i = 0; i < dev->chunkBitmapStride; i++) {
- __u8 x = *blkBits;
- while(x){
- if(x & 1)
- n++;
- x >>=1;
- }
-
- blkBits++;
- }
- return n;
-}
-
-/*
- * Verification code
- */
-
-static int yaffs_SkipVerification(yaffs_Device *dev)
-{
- return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY | YAFFS_TRACE_VERIFY_FULL));
-}
-
-static int yaffs_SkipFullVerification(yaffs_Device *dev)
-{
- return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_FULL));
-}
-
-static int yaffs_SkipNANDVerification(yaffs_Device *dev)
-{
- return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_NAND));
-}
-
-static const char * blockStateName[] = {
-"Unknown",
-"Needs scanning",
-"Scanning",
-"Empty",
-"Allocating",
-"Full",
-"Dirty",
-"Checkpoint",
-"Collecting",
-"Dead"
-};
-
-static void yaffs_VerifyBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-{
- int actuallyUsed;
- int inUse;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- /* Report illegal runtime states */
- if(bi->blockState <0 || bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has undefined state %d"TENDSTR),n,bi->blockState));
-
- switch(bi->blockState){
- case YAFFS_BLOCK_STATE_UNKNOWN:
- case YAFFS_BLOCK_STATE_SCANNING:
- case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has bad run-state %s"TENDSTR),
- n,blockStateName[bi->blockState]));
- }
-
- /* Check pages in use and soft deletions are legal */
-
- actuallyUsed = bi->pagesInUse - bi->softDeletions;
-
- if(bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
- bi->softDeletions < 0 || bi->softDeletions > dev->nChunksPerBlock ||
- actuallyUsed < 0 || actuallyUsed > dev->nChunksPerBlock)
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
- n,bi->pagesInUse,bi->softDeletions));
-
-
- /* Check chunk bitmap legal */
- inUse = yaffs_CountChunkBits(dev,n);
- if(inUse != bi->pagesInUse)
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
- n,bi->pagesInUse,inUse));
-
- /* Check that the sequence number is valid.
- * Ten million is legal, but is very unlikely
- */
- if(dev->isYaffs2 &&
- (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING || bi->blockState == YAFFS_BLOCK_STATE_FULL) &&
- (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000 ))
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has suspect sequence number of %d"TENDSTR),
- n,bi->sequenceNumber));
-
-}
-
-static void yaffs_VerifyCollectedBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-{
- yaffs_VerifyBlock(dev,bi,n);
-
- /* After collection the block should be in the erased state */
- /* TODO: This will need to change if we do partial gc */
-
- if(bi->blockState != YAFFS_BLOCK_STATE_EMPTY){
- T(YAFFS_TRACE_ERROR,(TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
- n,bi->blockState));
- }
-}
-
-static void yaffs_VerifyBlocks(yaffs_Device *dev)
-{
- int i;
- int nBlocksPerState[YAFFS_NUMBER_OF_BLOCK_STATES];
- int nIllegalBlockStates = 0;
-
-
- if(yaffs_SkipVerification(dev))
- return;
-
- memset(nBlocksPerState,0,sizeof(nBlocksPerState));
-
-
- for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++){
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
- yaffs_VerifyBlock(dev,bi,i);
-
- if(bi->blockState >=0 && bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
- nBlocksPerState[bi->blockState]++;
- else
- nIllegalBlockStates++;
-
- }
-
- T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
- T(YAFFS_TRACE_VERIFY,(TSTR("Block summary"TENDSTR)));
-
- T(YAFFS_TRACE_VERIFY,(TSTR("%d blocks have illegal states"TENDSTR),nIllegalBlockStates));
- if(nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
- T(YAFFS_TRACE_VERIFY,(TSTR("Too many allocating blocks"TENDSTR)));
-
- for(i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("%s %d blocks"TENDSTR),
- blockStateName[i],nBlocksPerState[i]));
-
- if(dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Checkpoint block count wrong dev %d count %d"TENDSTR),
- dev->blocksInCheckpoint, nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT]));
-
- if(dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Erased block count wrong dev %d count %d"TENDSTR),
- dev->nErasedBlocks, nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY]));
-
- if(nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Too many collecting blocks %d (max is 1)"TENDSTR),
- nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING]));
-
- T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
-
-}
-
-/*
- * Verify the object header. oh must be valid, but obj and tags may be NULL in which
- * case those tests will not be performed.
- */
-static void yaffs_VerifyObjectHeader(yaffs_Object *obj, yaffs_ObjectHeader *oh, yaffs_ExtendedTags *tags, int parentCheck)
-{
- if(yaffs_SkipVerification(obj->myDev))
- return;
-
- if(!(tags && obj && oh)){
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
- (__u32)tags,(__u32)obj,(__u32)oh));
- return;
- }
-
- if(oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
- oh->type > YAFFS_OBJECT_TYPE_MAX)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
- tags->objectId, oh->type));
-
- if(tags->objectId != obj->objectId)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
- tags->objectId, obj->objectId));
-
-
- /*
- * Check that the object's parent ids match if parentCheck requested.
- *
- * Tests do not apply to the root object.
- */
-
- if(parentCheck && tags->objectId > 1 && !obj->parent)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
- tags->objectId, oh->parentObjectId));
-
-
- if(parentCheck && obj->parent &&
- oh->parentObjectId != obj->parent->objectId &&
- (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
- obj->parent->objectId != YAFFS_OBJECTID_DELETED))
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
- tags->objectId, oh->parentObjectId, obj->parent->objectId));
-
-
- if(tags->objectId > 1 && oh->name[0] == 0) /* Null name */
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header name is NULL"TENDSTR),
- obj->objectId));
-
- if(tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header name is 0xFF"TENDSTR),
- obj->objectId));
-}
-
-
-
-static int yaffs_VerifyTnodeWorker(yaffs_Object * obj, yaffs_Tnode * tn,
- __u32 level, int chunkOffset)
-{
- int i;
- yaffs_Device *dev = obj->myDev;
- int ok = 1;
-
- if (tn) {
- if (level > 0) {
-
- for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
- if (tn->internal[i]) {
- ok = yaffs_VerifyTnodeWorker(obj,
- tn->internal[i],
- level - 1,
- (chunkOffset<<YAFFS_TNODES_INTERNAL_BITS) + i);
- }
- }
- } else if (level == 0) {
- int i;
- yaffs_ExtendedTags tags;
- __u32 objectId = obj->objectId;
-
- chunkOffset <<= YAFFS_TNODES_LEVEL0_BITS;
-
- for(i = 0; i < YAFFS_NTNODES_LEVEL0; i++){
- __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-
- if(theChunk > 0){
- /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),tags.objectId,tags.chunkId,theChunk)); */
- yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
- if(tags.objectId != objectId || tags.chunkId != chunkOffset){
- T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
- objectId, chunkOffset, theChunk,
- tags.objectId, tags.chunkId));
- }
- }
- chunkOffset++;
- }
- }
- }
-
- return ok;
-
-}
-
-
-static void yaffs_VerifyFile(yaffs_Object *obj)
-{
- int requiredTallness;
- int actualTallness;
- __u32 lastChunk;
- __u32 x;
- __u32 i;
- yaffs_Device *dev;
- yaffs_ExtendedTags tags;
- yaffs_Tnode *tn;
- __u32 objectId;
-
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-
- dev = obj->myDev;
- objectId = obj->objectId;
-
- /* Check file size is consistent with tnode depth */
- lastChunk = obj->variant.fileVariant.fileSize / dev->nDataBytesPerChunk + 1;
- x = lastChunk >> YAFFS_TNODES_LEVEL0_BITS;
- requiredTallness = 0;
- while (x> 0) {
- x >>= YAFFS_TNODES_INTERNAL_BITS;
- requiredTallness++;
- }
-
- actualTallness = obj->variant.fileVariant.topLevel;
-
- if(requiredTallness > actualTallness )
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d had tnode tallness %d, needs to be %d"TENDSTR),
- obj->objectId,actualTallness, requiredTallness));
-
-
- /* Check that the chunks in the tnode tree are all correct.
- * We do this by scanning through the tnode tree and
- * checking the tags for every chunk match.
- */
-
- if(yaffs_SkipNANDVerification(dev))
- return;
-
- for(i = 1; i <= lastChunk; i++){
- tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant,i);
-
- if (tn) {
- __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
- if(theChunk > 0){
- /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),objectId,i,theChunk)); */
- yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
- if(tags.objectId != objectId || tags.chunkId != i){
- T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
- objectId, i, theChunk,
- tags.objectId, tags.chunkId));
- }
- }
- }
-
- }
-
-}
-
-static void yaffs_VerifyDirectory(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-
-}
-
-static void yaffs_VerifyHardLink(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-
- /* Verify sane equivalent object */
-}
-
-static void yaffs_VerifySymlink(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-
- /* Verify symlink string */
-}
-
-static void yaffs_VerifySpecial(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-}
-
-static void yaffs_VerifyObject(yaffs_Object *obj)
-{
- yaffs_Device *dev;
-
- __u32 chunkMin;
- __u32 chunkMax;
-
- __u32 chunkIdOk;
- __u32 chunkIsLive;
-
- if(!obj)
- return;
-
- dev = obj->myDev;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- /* Check sane object header chunk */
-
- chunkMin = dev->internalStartBlock * dev->nChunksPerBlock;
- chunkMax = (dev->internalEndBlock+1) * dev->nChunksPerBlock - 1;
-
- chunkIdOk = (obj->chunkId >= chunkMin && obj->chunkId <= chunkMax);
- chunkIsLive = chunkIdOk &&
- yaffs_CheckChunkBit(dev,
- obj->chunkId / dev->nChunksPerBlock,
- obj->chunkId % dev->nChunksPerBlock);
- if(!obj->fake &&
- (!chunkIdOk || !chunkIsLive)) {
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
- obj->objectId,obj->chunkId,
- chunkIdOk ? "" : ",out of range",
- chunkIsLive || !chunkIdOk ? "" : ",marked as deleted"));
- }
-
- if(chunkIdOk && chunkIsLive &&!yaffs_SkipNANDVerification(dev)) {
- yaffs_ExtendedTags tags;
- yaffs_ObjectHeader *oh;
- __u8 *buffer = yaffs_GetTempBuffer(dev,__LINE__);
-
- oh = (yaffs_ObjectHeader *)buffer;
-
- yaffs_ReadChunkWithTagsFromNAND(dev, obj->chunkId,buffer, &tags);
-
- yaffs_VerifyObjectHeader(obj,oh,&tags,1);
-
- yaffs_ReleaseTempBuffer(dev,buffer,__LINE__);
- }
-
- /* Verify it has a parent */
- if(obj && !obj->fake &&
- (!obj->parent || obj->parent->myDev != dev)){
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
- obj->objectId,obj->parent));
- }
-
- /* Verify parent is a directory */
- if(obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY){
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
- obj->objectId,obj->parent->variantType));
- }
-
- switch(obj->variantType){
- case YAFFS_OBJECT_TYPE_FILE:
- yaffs_VerifyFile(obj);
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- yaffs_VerifySymlink(obj);
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- yaffs_VerifyDirectory(obj);
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- yaffs_VerifyHardLink(obj);
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- yaffs_VerifySpecial(obj);
- break;
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- default:
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d has illegaltype %d"TENDSTR),
- obj->objectId,obj->variantType));
- break;
- }
-
-
-}
-
-static void yaffs_VerifyObjects(yaffs_Device *dev)
-{
- yaffs_Object *obj;
- int i;
- struct list_head *lh;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- /* Iterate through the objects in each hash entry */
-
- for(i = 0; i < YAFFS_NOBJECT_BUCKETS; i++){
- list_for_each(lh, &dev->objectBucket[i].list) {
- if (lh) {
- obj = list_entry(lh, yaffs_Object, hashLink);
- yaffs_VerifyObject(obj);
- }
- }
- }
-
-}
-
-
-/*
- * Simple hash function. Needs to have a reasonable spread
- */
-
-static Y_INLINE int yaffs_HashFunction(int n)
-{
-/* XXX U-BOOT XXX */
- /*n = abs(n); */
- if (n < 0)
- n = -n;
- return (n % YAFFS_NOBJECT_BUCKETS);
-}
-
-/*
- * Access functions to useful fake objects
- */
-
-yaffs_Object *yaffs_Root(yaffs_Device * dev)
-{
- return dev->rootDir;
-}
-
-yaffs_Object *yaffs_LostNFound(yaffs_Device * dev)
-{
- return dev->lostNFoundDir;
-}
-
-
-/*
- * Erased NAND checking functions
- */
-
-int yaffs_CheckFF(__u8 * buffer, int nBytes)
-{
- /* Horrible, slow implementation */
- while (nBytes--) {
- if (*buffer != 0xFF)
- return 0;
- buffer++;
- }
- return 1;
-}
-
-static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
- int chunkInNAND)
-{
-
- int retval = YAFFS_OK;
- __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
- yaffs_ExtendedTags tags;
- int result;
-
- result = yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
-
- if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
- retval = YAFFS_FAIL;
-
-
- if (!yaffs_CheckFF(data, dev->nDataBytesPerChunk) || tags.chunkUsed) {
- T(YAFFS_TRACE_NANDACCESS,
- (TSTR("Chunk %d not erased" TENDSTR), chunkInNAND));
- retval = YAFFS_FAIL;
- }
-
- yaffs_ReleaseTempBuffer(dev, data, __LINE__);
-
- return retval;
-
-}
-
-static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
- const __u8 * data,
- yaffs_ExtendedTags * tags,
- int useReserve)
-{
- int attempts = 0;
- int writeOk = 0;
- int chunk;
-
- yaffs_InvalidateCheckpoint(dev);
-
- do {
- yaffs_BlockInfo *bi = 0;
- int erasedOk = 0;
-
- chunk = yaffs_AllocateChunk(dev, useReserve, &bi);
- if (chunk < 0) {
- /* no space */
- break;
- }
-
- /* First check this chunk is erased, if it needs
- * checking. The checking policy (unless forced
- * always on) is as follows:
- *
- * Check the first page we try to write in a block.
- * If the check passes then we don't need to check any
- * more. If the check fails, we check again...
- * If the block has been erased, we don't need to check.
- *
- * However, if the block has been prioritised for gc,
- * then we think there might be something odd about
- * this block and stop using it.
- *
- * Rationale: We should only ever see chunks that have
- * not been erased if there was a partially written
- * chunk due to power loss. This checking policy should
- * catch that case with very few checks and thus save a
- * lot of checks that are most likely not needed.
- */
- if (bi->gcPrioritise) {
- yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
- /* try another chunk */
- continue;
- }
-
- /* let's give it a try */
- attempts++;
-
-#ifdef CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED
- bi->skipErasedCheck = 0;
-#endif
- if (!bi->skipErasedCheck) {
- erasedOk = yaffs_CheckChunkErased(dev, chunk);
- if (erasedOk != YAFFS_OK) {
- T(YAFFS_TRACE_ERROR,
- (TSTR ("**>> yaffs chunk %d was not erased"
- TENDSTR), chunk));
-
- /* try another chunk */
- continue;
- }
- bi->skipErasedCheck = 1;
- }
-
- writeOk = yaffs_WriteChunkWithTagsToNAND(dev, chunk,
- data, tags);
- if (writeOk != YAFFS_OK) {
- yaffs_HandleWriteChunkError(dev, chunk, erasedOk);
- /* try another chunk */
- continue;
- }
-
- /* Copy the data into the robustification buffer */
- yaffs_HandleWriteChunkOk(dev, chunk, data, tags);
-
- } while (writeOk != YAFFS_OK &&
- (yaffs_wr_attempts <= 0 || attempts <= yaffs_wr_attempts));
-
- if(!writeOk)
- chunk = -1;
-
- if (attempts > 1) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> yaffs write required %d attempts" TENDSTR),
- attempts));
-
- dev->nRetriedWrites += (attempts - 1);
- }
-
- return chunk;
-}
-
-/*
- * Block retiring for handling a broken block.
- */
-
-static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
-{
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
-
- yaffs_InvalidateCheckpoint(dev);
-
- yaffs_MarkBlockBad(dev, blockInNAND);
-
- bi->blockState = YAFFS_BLOCK_STATE_DEAD;
- bi->gcPrioritise = 0;
- bi->needsRetiring = 0;
-
- dev->nRetiredBlocks++;
-}
-
-/*
- * Functions for robustisizing TODO
- *
- */
-
-static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags * tags)
-{
-}
-
-static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
- const yaffs_ExtendedTags * tags)
-{
-}
-
-void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
-{
- if(!bi->gcPrioritise){
- bi->gcPrioritise = 1;
- dev->hasPendingPrioritisedGCs = 1;
- bi->chunkErrorStrikes ++;
-
- if(bi->chunkErrorStrikes > 3){
- bi->needsRetiring = 1; /* Too many stikes, so retire this */
- T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Block struck out" TENDSTR)));
-
- }
-
- }
-}
-
-static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk)
-{
-
- int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
-
- yaffs_HandleChunkError(dev,bi);
-
-
- if(erasedOk ) {
- /* Was an actual write failure, so mark the block for retirement */
- bi->needsRetiring = 1;
- T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("**>> Block %d needs retiring" TENDSTR), blockInNAND));
-
-
- }
-
- /* Delete the chunk */
- yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
-}
-
-
-/*---------------- Name handling functions ------------*/
-
-static __u16 yaffs_CalcNameSum(const YCHAR * name)
-{
- __u16 sum = 0;
- __u16 i = 1;
-
- YUCHAR *bname = (YUCHAR *) name;
- if (bname) {
- while ((*bname) && (i < (YAFFS_MAX_NAME_LENGTH/2))) {
-
-#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
- sum += yaffs_toupper(*bname) * i;
-#else
- sum += (*bname) * i;
-#endif
- i++;
- bname++;
- }
- }
- return sum;
-}
-
-static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
-{
-#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
- if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH) {
- yaffs_strcpy(obj->shortName, name);
- } else {
- obj->shortName[0] = _Y('\0');
- }
-#endif
- obj->sum = yaffs_CalcNameSum(name);
-}
-
-/*-------------------- TNODES -------------------
-
- * List of spare tnodes
- * The list is hooked together using the first pointer
- * in the tnode.
- */
-
-/* yaffs_CreateTnodes creates a bunch more tnodes and
- * adds them to the tnode free list.
- * Don't use this function directly
- */
-
-static int yaffs_CreateTnodes(yaffs_Device * dev, int nTnodes)
-{
- int i;
- int tnodeSize;
- yaffs_Tnode *newTnodes;
- __u8 *mem;
- yaffs_Tnode *curr;
- yaffs_Tnode *next;
- yaffs_TnodeList *tnl;
-
- if (nTnodes < 1)
- return YAFFS_OK;
-
- /* Calculate the tnode size in bytes for variable width tnode support.
- * Must be a multiple of 32-bits */
- tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-
- /* make these things */
-
- newTnodes = YMALLOC(nTnodes * tnodeSize);
- mem = (__u8 *)newTnodes;
-
- if (!newTnodes) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- /* Hook them into the free list */
-#if 0
- for (i = 0; i < nTnodes - 1; i++) {
- newTnodes[i].internal[0] = &newTnodes[i + 1];
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- newTnodes[i].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
-#endif
- }
-
- newTnodes[nTnodes - 1].internal[0] = dev->freeTnodes;
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- newTnodes[nTnodes - 1].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
-#endif
- dev->freeTnodes = newTnodes;
-#else
- /* New hookup for wide tnodes */
- for(i = 0; i < nTnodes -1; i++) {
- curr = (yaffs_Tnode *) &mem[i * tnodeSize];
- next = (yaffs_Tnode *) &mem[(i+1) * tnodeSize];
- curr->internal[0] = next;
- }
-
- curr = (yaffs_Tnode *) &mem[(nTnodes - 1) * tnodeSize];
- curr->internal[0] = dev->freeTnodes;
- dev->freeTnodes = (yaffs_Tnode *)mem;
-
-#endif
-
-
- dev->nFreeTnodes += nTnodes;
- dev->nTnodesCreated += nTnodes;
-
- /* Now add this bunch of tnodes to a list for freeing up.
- * NB If we can't add this to the management list it isn't fatal
- * but it just means we can't free this bunch of tnodes later.
- */
-
- tnl = YMALLOC(sizeof(yaffs_TnodeList));
- if (!tnl) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs: Could not add tnodes to management list" TENDSTR)));
- return YAFFS_FAIL;
-
- } else {
- tnl->tnodes = newTnodes;
- tnl->next = dev->allocatedTnodeList;
- dev->allocatedTnodeList = tnl;
- }
-
- T(YAFFS_TRACE_ALLOCATE, (TSTR("yaffs: Tnodes added" TENDSTR)));
-
- return YAFFS_OK;
-}
-
-/* GetTnode gets us a clean tnode. Tries to make allocate more if we run out */
-
-static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device * dev)
-{
- yaffs_Tnode *tn = NULL;
-
- /* If there are none left make more */
- if (!dev->freeTnodes) {
- yaffs_CreateTnodes(dev, YAFFS_ALLOCATION_NTNODES);
- }
-
- if (dev->freeTnodes) {
- tn = dev->freeTnodes;
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- if (tn->internal[YAFFS_NTNODES_INTERNAL] != (void *)1) {
- /* Hoosterman, this thing looks like it isn't in the list */
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: Tnode list bug 1" TENDSTR)));
- }
-#endif
- dev->freeTnodes = dev->freeTnodes->internal[0];
- dev->nFreeTnodes--;
- }
-
- return tn;
-}
-
-static yaffs_Tnode *yaffs_GetTnode(yaffs_Device * dev)
-{
- yaffs_Tnode *tn = yaffs_GetTnodeRaw(dev);
-
- if(tn)
- memset(tn, 0, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-
- return tn;
-}
-
-/* FreeTnode frees up a tnode and puts it back on the free list */
-static void yaffs_FreeTnode(yaffs_Device * dev, yaffs_Tnode * tn)
-{
- if (tn) {
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- if (tn->internal[YAFFS_NTNODES_INTERNAL] != 0) {
- /* Hoosterman, this thing looks like it is already in the list */
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: Tnode list bug 2" TENDSTR)));
- }
- tn->internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
-#endif
- tn->internal[0] = dev->freeTnodes;
- dev->freeTnodes = tn;
- dev->nFreeTnodes++;
- }
-}
-
-static void yaffs_DeinitialiseTnodes(yaffs_Device * dev)
-{
- /* Free the list of allocated tnodes */
- yaffs_TnodeList *tmp;
-
- while (dev->allocatedTnodeList) {
- tmp = dev->allocatedTnodeList->next;
-
- YFREE(dev->allocatedTnodeList->tnodes);
- YFREE(dev->allocatedTnodeList);
- dev->allocatedTnodeList = tmp;
-
- }
-
- dev->freeTnodes = NULL;
- dev->nFreeTnodes = 0;
-}
-
-static void yaffs_InitialiseTnodes(yaffs_Device * dev)
-{
- dev->allocatedTnodeList = NULL;
- dev->freeTnodes = NULL;
- dev->nFreeTnodes = 0;
- dev->nTnodesCreated = 0;
-
-}
-
-
-void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos, unsigned val)
-{
- __u32 *map = (__u32 *)tn;
- __u32 bitInMap;
- __u32 bitInWord;
- __u32 wordInMap;
- __u32 mask;
-
- pos &= YAFFS_TNODES_LEVEL0_MASK;
- val >>= dev->chunkGroupBits;
-
- bitInMap = pos * dev->tnodeWidth;
- wordInMap = bitInMap /32;
- bitInWord = bitInMap & (32 -1);
-
- mask = dev->tnodeMask << bitInWord;
-
- map[wordInMap] &= ~mask;
- map[wordInMap] |= (mask & (val << bitInWord));
-
- if(dev->tnodeWidth > (32-bitInWord)) {
- bitInWord = (32 - bitInWord);
- wordInMap++;;
- mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
- map[wordInMap] &= ~mask;
- map[wordInMap] |= (mask & (val >> bitInWord));
- }
-}
-
-static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos)
-{
- __u32 *map = (__u32 *)tn;
- __u32 bitInMap;
- __u32 bitInWord;
- __u32 wordInMap;
- __u32 val;
-
- pos &= YAFFS_TNODES_LEVEL0_MASK;
-
- bitInMap = pos * dev->tnodeWidth;
- wordInMap = bitInMap /32;
- bitInWord = bitInMap & (32 -1);
-
- val = map[wordInMap] >> bitInWord;
-
- if(dev->tnodeWidth > (32-bitInWord)) {
- bitInWord = (32 - bitInWord);
- wordInMap++;;
- val |= (map[wordInMap] << bitInWord);
- }
-
- val &= dev->tnodeMask;
- val <<= dev->chunkGroupBits;
-
- return val;
-}
-
-/* ------------------- End of individual tnode manipulation -----------------*/
-
-/* ---------Functions to manipulate the look-up tree (made up of tnodes) ------
- * The look up tree is represented by the top tnode and the number of topLevel
- * in the tree. 0 means only the level 0 tnode is in the tree.
- */
-
-/* FindLevel0Tnode finds the level 0 tnode, if one exists. */
-static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
- yaffs_FileStructure * fStruct,
- __u32 chunkId)
-{
-
- yaffs_Tnode *tn = fStruct->top;
- __u32 i;
- int requiredTallness;
- int level = fStruct->topLevel;
-
- /* Check sane level and chunk Id */
- if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) {
- return NULL;
- }
-
- if (chunkId > YAFFS_MAX_CHUNK_ID) {
- return NULL;
- }
-
- /* First check we're tall enough (ie enough topLevel) */
-
- i = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
- requiredTallness = 0;
- while (i) {
- i >>= YAFFS_TNODES_INTERNAL_BITS;
- requiredTallness++;
- }
-
- if (requiredTallness > fStruct->topLevel) {
- /* Not tall enough, so we can't find it, return NULL. */
- return NULL;
- }
-
- /* Traverse down to level 0 */
- while (level > 0 && tn) {
- tn = tn->
- internal[(chunkId >>
- ( YAFFS_TNODES_LEVEL0_BITS +
- (level - 1) *
- YAFFS_TNODES_INTERNAL_BITS)
- ) &
- YAFFS_TNODES_INTERNAL_MASK];
- level--;
-
- }
-
- return tn;
-}
-
-/* AddOrFindLevel0Tnode finds the level 0 tnode if it exists, otherwise first expands the tree.
- * This happens in two steps:
- * 1. If the tree isn't tall enough, then make it taller.
- * 2. Scan down the tree towards the level 0 tnode adding tnodes if required.
- *
- * Used when modifying the tree.
- *
- * If the tn argument is NULL, then a fresh tnode will be added otherwise the specified tn will
- * be plugged into the ttree.
- */
-
-static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
- yaffs_FileStructure * fStruct,
- __u32 chunkId,
- yaffs_Tnode *passedTn)
-{
-
- int requiredTallness;
- int i;
- int l;
- yaffs_Tnode *tn;
-
- __u32 x;
-
-
- /* Check sane level and page Id */
- if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL) {
- return NULL;
- }
-
- if (chunkId > YAFFS_MAX_CHUNK_ID) {
- return NULL;
- }
-
- /* First check we're tall enough (ie enough topLevel) */
-
- x = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
- requiredTallness = 0;
- while (x) {
- x >>= YAFFS_TNODES_INTERNAL_BITS;
- requiredTallness++;
- }
-
-
- if (requiredTallness > fStruct->topLevel) {
- /* Not tall enough,gotta make the tree taller */
- for (i = fStruct->topLevel; i < requiredTallness; i++) {
-
- tn = yaffs_GetTnode(dev);
-
- if (tn) {
- tn->internal[0] = fStruct->top;
- fStruct->top = tn;
- } else {
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs: no more tnodes" TENDSTR)));
- }
- }
-
- fStruct->topLevel = requiredTallness;
- }
-
- /* Traverse down to level 0, adding anything we need */
-
- l = fStruct->topLevel;
- tn = fStruct->top;
-
- if(l > 0) {
- while (l > 0 && tn) {
- x = (chunkId >>
- ( YAFFS_TNODES_LEVEL0_BITS +
- (l - 1) * YAFFS_TNODES_INTERNAL_BITS)) &
- YAFFS_TNODES_INTERNAL_MASK;
-
-
- if((l>1) && !tn->internal[x]){
- /* Add missing non-level-zero tnode */
- tn->internal[x] = yaffs_GetTnode(dev);
-
- } else if(l == 1) {
- /* Looking from level 1 at level 0 */
- if (passedTn) {
- /* If we already have one, then release it.*/
- if(tn->internal[x])
- yaffs_FreeTnode(dev,tn->internal[x]);
- tn->internal[x] = passedTn;
-
- } else if(!tn->internal[x]) {
- /* Don't have one, none passed in */
- tn->internal[x] = yaffs_GetTnode(dev);
- }
- }
-
- tn = tn->internal[x];
- l--;
- }
- } else {
- /* top is level 0 */
- if(passedTn) {
- memcpy(tn,passedTn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
- yaffs_FreeTnode(dev,passedTn);
- }
- }
-
- return tn;
-}
-
-static int yaffs_FindChunkInGroup(yaffs_Device * dev, int theChunk,
- yaffs_ExtendedTags * tags, int objectId,
- int chunkInInode)
-{
- int j;
-
- for (j = 0; theChunk && j < dev->chunkGroupSize; j++) {
- if (yaffs_CheckChunkBit
- (dev, theChunk / dev->nChunksPerBlock,
- theChunk % dev->nChunksPerBlock)) {
- yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL,
- tags);
- if (yaffs_TagsMatch(tags, objectId, chunkInInode)) {
- /* found it; */
- return theChunk;
-
- }
- }
- theChunk++;
- }
- return -1;
-}
-
-
-/* DeleteWorker scans backwards through the tnode tree and deletes all the
- * chunks and tnodes in the file
- * Returns 1 if the tree was deleted.
- * Returns 0 if it stopped early due to hitting the limit and the delete is incomplete.
- */
-
-static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
- int chunkOffset, int *limit)
-{
- int i;
- int chunkInInode;
- int theChunk;
- yaffs_ExtendedTags tags;
- int foundChunk;
- yaffs_Device *dev = in->myDev;
-
- int allDone = 1;
-
- if (tn) {
- if (level > 0) {
-
- for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
- i--) {
- if (tn->internal[i]) {
- if (limit && (*limit) < 0) {
- allDone = 0;
- } else {
- allDone =
- yaffs_DeleteWorker(in,
- tn->
- internal
- [i],
- level -
- 1,
- (chunkOffset
- <<
- YAFFS_TNODES_INTERNAL_BITS)
- + i,
- limit);
- }
- if (allDone) {
- yaffs_FreeTnode(dev,
- tn->
- internal[i]);
- tn->internal[i] = NULL;
- }
- }
-
- }
- return (allDone) ? 1 : 0;
- } else if (level == 0) {
- int hitLimit = 0;
-
- for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0 && !hitLimit;
- i--) {
- theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
- if (theChunk) {
-
- chunkInInode =
- (chunkOffset <<
- YAFFS_TNODES_LEVEL0_BITS) + i;
-
- foundChunk =
- yaffs_FindChunkInGroup(dev,
- theChunk,
- &tags,
- in->objectId,
- chunkInInode);
-
- if (foundChunk > 0) {
- yaffs_DeleteChunk(dev,
- foundChunk, 1,
- __LINE__);
- in->nDataChunks--;
- if (limit) {
- *limit = *limit - 1;
- if (*limit <= 0) {
- hitLimit = 1;
- }
- }
-
- }
-
- yaffs_PutLevel0Tnode(dev,tn,i,0);
- }
-
- }
- return (i < 0) ? 1 : 0;
-
- }
-
- }
-
- return 1;
-
-}
-
-static void yaffs_SoftDeleteChunk(yaffs_Device * dev, int chunk)
-{
-
- yaffs_BlockInfo *theBlock;
-
- T(YAFFS_TRACE_DELETION, (TSTR("soft delete chunk %d" TENDSTR), chunk));
-
- theBlock = yaffs_GetBlockInfo(dev, chunk / dev->nChunksPerBlock);
- if (theBlock) {
- theBlock->softDeletions++;
- dev->nFreeChunks++;
- }
-}
-
-/* SoftDeleteWorker scans backwards through the tnode tree and soft deletes all the chunks in the file.
- * All soft deleting does is increment the block's softdelete count and pulls the chunk out
- * of the tnode.
- * Thus, essentially this is the same as DeleteWorker except that the chunks are soft deleted.
- */
-
-static int yaffs_SoftDeleteWorker(yaffs_Object * in, yaffs_Tnode * tn,
- __u32 level, int chunkOffset)
-{
- int i;
- int theChunk;
- int allDone = 1;
- yaffs_Device *dev = in->myDev;
-
- if (tn) {
- if (level > 0) {
-
- for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
- i--) {
- if (tn->internal[i]) {
- allDone =
- yaffs_SoftDeleteWorker(in,
- tn->
- internal[i],
- level - 1,
- (chunkOffset
- <<
- YAFFS_TNODES_INTERNAL_BITS)
- + i);
- if (allDone) {
- yaffs_FreeTnode(dev,
- tn->
- internal[i]);
- tn->internal[i] = NULL;
- } else {
- /* Hoosterman... how could this happen? */
- }
- }
- }
- return (allDone) ? 1 : 0;
- } else if (level == 0) {
-
- for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
- theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
- if (theChunk) {
- /* Note this does not find the real chunk, only the chunk group.
- * We make an assumption that a chunk group is not larger than
- * a block.
- */
- yaffs_SoftDeleteChunk(dev, theChunk);
- yaffs_PutLevel0Tnode(dev,tn,i,0);
- }
-
- }
- return 1;
-
- }
-
- }
-
- return 1;
-
-}
-
-static void yaffs_SoftDeleteFile(yaffs_Object * obj)
-{
- if (obj->deleted &&
- obj->variantType == YAFFS_OBJECT_TYPE_FILE && !obj->softDeleted) {
- if (obj->nDataChunks <= 0) {
- /* Empty file with no duplicate object headers, just delete it immediately */
- yaffs_FreeTnode(obj->myDev,
- obj->variant.fileVariant.top);
- obj->variant.fileVariant.top = NULL;
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: Deleting empty file %d" TENDSTR),
- obj->objectId));
- yaffs_DoGenericObjectDeletion(obj);
- } else {
- yaffs_SoftDeleteWorker(obj,
- obj->variant.fileVariant.top,
- obj->variant.fileVariant.
- topLevel, 0);
- obj->softDeleted = 1;
- }
- }
-}
-
-/* Pruning removes any part of the file structure tree that is beyond the
- * bounds of the file (ie that does not point to chunks).
- *
- * A file should only get pruned when its size is reduced.
- *
- * Before pruning, the chunks must be pulled from the tree and the
- * level 0 tnode entries must be zeroed out.
- * Could also use this for file deletion, but that's probably better handled
- * by a special case.
- */
-
-static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device * dev, yaffs_Tnode * tn,
- __u32 level, int del0)
-{
- int i;
- int hasData;
-
- if (tn) {
- hasData = 0;
-
- for (i = 0; i < YAFFS_NTNODES_INTERNAL; i++) {
- if (tn->internal[i] && level > 0) {
- tn->internal[i] =
- yaffs_PruneWorker(dev, tn->internal[i],
- level - 1,
- (i == 0) ? del0 : 1);
- }
-
- if (tn->internal[i]) {
- hasData++;
- }
- }
-
- if (hasData == 0 && del0) {
- /* Free and return NULL */
-
- yaffs_FreeTnode(dev, tn);
- tn = NULL;
- }
-
- }
-
- return tn;
-
-}
-
-static int yaffs_PruneFileStructure(yaffs_Device * dev,
- yaffs_FileStructure * fStruct)
-{
- int i;
- int hasData;
- int done = 0;
- yaffs_Tnode *tn;
-
- if (fStruct->topLevel > 0) {
- fStruct->top =
- yaffs_PruneWorker(dev, fStruct->top, fStruct->topLevel, 0);
-
- /* Now we have a tree with all the non-zero branches NULL but the height
- * is the same as it was.
- * Let's see if we can trim internal tnodes to shorten the tree.
- * We can do this if only the 0th element in the tnode is in use
- * (ie all the non-zero are NULL)
- */
-
- while (fStruct->topLevel && !done) {
- tn = fStruct->top;
-
- hasData = 0;
- for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
- if (tn->internal[i]) {
- hasData++;
- }
- }
-
- if (!hasData) {
- fStruct->top = tn->internal[0];
- fStruct->topLevel--;
- yaffs_FreeTnode(dev, tn);
- } else {
- done = 1;
- }
- }
- }
-
- return YAFFS_OK;
-}
-
-/*-------------------- End of File Structure functions.-------------------*/
-
-/* yaffs_CreateFreeObjects creates a bunch more objects and
- * adds them to the object free list.
- */
-static int yaffs_CreateFreeObjects(yaffs_Device * dev, int nObjects)
-{
- int i;
- yaffs_Object *newObjects;
- yaffs_ObjectList *list;
-
- if (nObjects < 1)
- return YAFFS_OK;
-
- /* make these things */
- newObjects = YMALLOC(nObjects * sizeof(yaffs_Object));
- list = YMALLOC(sizeof(yaffs_ObjectList));
-
- if (!newObjects || !list) {
- if(newObjects)
- YFREE(newObjects);
- if(list)
- YFREE(list);
- T(YAFFS_TRACE_ALLOCATE,
- (TSTR("yaffs: Could not allocate more objects" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- /* Hook them into the free list */
- for (i = 0; i < nObjects - 1; i++) {
- newObjects[i].siblings.next =
- (struct list_head *)(&newObjects[i + 1]);
- }
-
- newObjects[nObjects - 1].siblings.next = (void *)dev->freeObjects;
- dev->freeObjects = newObjects;
- dev->nFreeObjects += nObjects;
- dev->nObjectsCreated += nObjects;
-
- /* Now add this bunch of Objects to a list for freeing up. */
-
- list->objects = newObjects;
- list->next = dev->allocatedObjectList;
- dev->allocatedObjectList = list;
-
- return YAFFS_OK;
-}
-
-
-/* AllocateEmptyObject gets us a clean Object. Tries to make allocate more if we run out */
-static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
-{
- yaffs_Object *tn = NULL;
-
- /* If there are none left make more */
- if (!dev->freeObjects) {
- yaffs_CreateFreeObjects(dev, YAFFS_ALLOCATION_NOBJECTS);
- }
-
- if (dev->freeObjects) {
- tn = dev->freeObjects;
- dev->freeObjects =
- (yaffs_Object *) (dev->freeObjects->siblings.next);
- dev->nFreeObjects--;
-
- /* Now sweeten it up... */
-
- memset(tn, 0, sizeof(yaffs_Object));
- tn->myDev = dev;
- tn->chunkId = -1;
- tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
- INIT_LIST_HEAD(&(tn->hardLinks));
- INIT_LIST_HEAD(&(tn->hashLink));
- INIT_LIST_HEAD(&tn->siblings);
-
- /* Add it to the lost and found directory.
- * NB Can't put root or lostNFound in lostNFound so
- * check if lostNFound exists first
- */
- if (dev->lostNFoundDir) {
- yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
- }
- }
-
- return tn;
-}
-
-static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device * dev, int number,
- __u32 mode)
-{
-
- yaffs_Object *obj =
- yaffs_CreateNewObject(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
- if (obj) {
- obj->fake = 1; /* it is fake so it has no NAND presence... */
- obj->renameAllowed = 0; /* ... and we're not allowed to rename it... */
- obj->unlinkAllowed = 0; /* ... or unlink it */
- obj->deleted = 0;
- obj->unlinked = 0;
- obj->yst_mode = mode;
- obj->myDev = dev;
- obj->chunkId = 0; /* Not a valid chunk. */
- }
-
- return obj;
-
-}
-
-static void yaffs_UnhashObject(yaffs_Object * tn)
-{
- int bucket;
- yaffs_Device *dev = tn->myDev;
-
- /* If it is still linked into the bucket list, free from the list */
- if (!list_empty(&tn->hashLink)) {
- list_del_init(&tn->hashLink);
- bucket = yaffs_HashFunction(tn->objectId);
- dev->objectBucket[bucket].count--;
- }
-
-}
-
-/* FreeObject frees up a Object and puts it back on the free list */
-static void yaffs_FreeObject(yaffs_Object * tn)
-{
-
- yaffs_Device *dev = tn->myDev;
-
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
- if (tn->myInode) {
- /* We're still hooked up to a cached inode.
- * Don't delete now, but mark for later deletion
- */
- tn->deferedFree = 1;
- return;
- }
-#endif
-#endif
- yaffs_UnhashObject(tn);
-
- /* Link into the free list. */
- tn->siblings.next = (struct list_head *)(dev->freeObjects);
- dev->freeObjects = tn;
- dev->nFreeObjects++;
-}
-
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
-
-void yaffs_HandleDeferedFree(yaffs_Object * obj)
-{
- if (obj->deferedFree) {
- yaffs_FreeObject(obj);
- }
-}
-
-#endif
-#endif
-
-static void yaffs_DeinitialiseObjects(yaffs_Device * dev)
-{
- /* Free the list of allocated Objects */
-
- yaffs_ObjectList *tmp;
-
- while (dev->allocatedObjectList) {
- tmp = dev->allocatedObjectList->next;
- YFREE(dev->allocatedObjectList->objects);
- YFREE(dev->allocatedObjectList);
-
- dev->allocatedObjectList = tmp;
- }
-
- dev->freeObjects = NULL;
- dev->nFreeObjects = 0;
-}
-
-static void yaffs_InitialiseObjects(yaffs_Device * dev)
-{
- int i;
-
- dev->allocatedObjectList = NULL;
- dev->freeObjects = NULL;
- dev->nFreeObjects = 0;
-
- for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
- INIT_LIST_HEAD(&dev->objectBucket[i].list);
- dev->objectBucket[i].count = 0;
- }
-
-}
-
-static int yaffs_FindNiceObjectBucket(yaffs_Device * dev)
-{
- static int x = 0;
- int i;
- int l = 999;
- int lowest = 999999;
-
- /* First let's see if we can find one that's empty. */
-
- for (i = 0; i < 10 && lowest > 0; i++) {
- x++;
- x %= YAFFS_NOBJECT_BUCKETS;
- if (dev->objectBucket[x].count < lowest) {
- lowest = dev->objectBucket[x].count;
- l = x;
- }
-
- }
-
- /* If we didn't find an empty list, then try
- * looking a bit further for a short one
- */
-
- for (i = 0; i < 10 && lowest > 3; i++) {
- x++;
- x %= YAFFS_NOBJECT_BUCKETS;
- if (dev->objectBucket[x].count < lowest) {
- lowest = dev->objectBucket[x].count;
- l = x;
- }
-
- }
-
- return l;
-}
-
-static int yaffs_CreateNewObjectNumber(yaffs_Device * dev)
-{
- int bucket = yaffs_FindNiceObjectBucket(dev);
-
- /* Now find an object value that has not already been taken
- * by scanning the list.
- */
-
- int found = 0;
- struct list_head *i;
-
- __u32 n = (__u32) bucket;
-
- /* yaffs_CheckObjectHashSanity(); */
-
- while (!found) {
- found = 1;
- n += YAFFS_NOBJECT_BUCKETS;
- if (1 || dev->objectBucket[bucket].count > 0) {
- list_for_each(i, &dev->objectBucket[bucket].list) {
- /* If there is already one in the list */
- if (i
- && list_entry(i, yaffs_Object,
- hashLink)->objectId == n) {
- found = 0;
- }
- }
- }
- }
-
-
- return n;
-}
-
-static void yaffs_HashObject(yaffs_Object * in)
-{
- int bucket = yaffs_HashFunction(in->objectId);
- yaffs_Device *dev = in->myDev;
-
- list_add(&in->hashLink, &dev->objectBucket[bucket].list);
- dev->objectBucket[bucket].count++;
-
-}
-
-yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number)
-{
- int bucket = yaffs_HashFunction(number);
- struct list_head *i;
- yaffs_Object *in;
-
- list_for_each(i, &dev->objectBucket[bucket].list) {
- /* Look if it is in the list */
- if (i) {
- in = list_entry(i, yaffs_Object, hashLink);
- if (in->objectId == number) {
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
- /* Don't tell the VFS about this one if it is defered free */
- if (in->deferedFree)
- return NULL;
-#endif
-#endif
- return in;
- }
- }
- }
-
- return NULL;
-}
-
-yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
- yaffs_ObjectType type)
-{
-
- yaffs_Object *theObject;
- yaffs_Tnode *tn;
-
- if (number < 0) {
- number = yaffs_CreateNewObjectNumber(dev);
- }
-
- theObject = yaffs_AllocateEmptyObject(dev);
- if(!theObject)
- return NULL;
-
- if(type == YAFFS_OBJECT_TYPE_FILE){
- tn = yaffs_GetTnode(dev);
- if(!tn){
- yaffs_FreeObject(theObject);
- return NULL;
- }
- }
-
-
-
- if (theObject) {
- theObject->fake = 0;
- theObject->renameAllowed = 1;
- theObject->unlinkAllowed = 1;
- theObject->objectId = number;
- yaffs_HashObject(theObject);
- theObject->variantType = type;
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_WinFileTimeNow(theObject->win_atime);
- theObject->win_ctime[0] = theObject->win_mtime[0] =
- theObject->win_atime[0];
- theObject->win_ctime[1] = theObject->win_mtime[1] =
- theObject->win_atime[1];
-
-#else
-
- theObject->yst_atime = theObject->yst_mtime =
- theObject->yst_ctime = Y_CURRENT_TIME;
-#endif
- switch (type) {
- case YAFFS_OBJECT_TYPE_FILE:
- theObject->variant.fileVariant.fileSize = 0;
- theObject->variant.fileVariant.scannedFileSize = 0;
- theObject->variant.fileVariant.shrinkSize = 0xFFFFFFFF; /* max __u32 */
- theObject->variant.fileVariant.topLevel = 0;
- theObject->variant.fileVariant.top = tn;
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- INIT_LIST_HEAD(&theObject->variant.directoryVariant.
- children);
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- case YAFFS_OBJECT_TYPE_HARDLINK:
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* No action required */
- break;
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* todo this should not happen */
- break;
- }
- }
-
- return theObject;
-}
-
-static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device * dev,
- int number,
- yaffs_ObjectType type)
-{
- yaffs_Object *theObject = NULL;
-
- if (number > 0) {
- theObject = yaffs_FindObjectByNumber(dev, number);
- }
-
- if (!theObject) {
- theObject = yaffs_CreateNewObject(dev, number, type);
- }
-
- return theObject;
-
-}
-
-
-static YCHAR *yaffs_CloneString(const YCHAR * str)
-{
- YCHAR *newStr = NULL;
-
- if (str && *str) {
- newStr = YMALLOC((yaffs_strlen(str) + 1) * sizeof(YCHAR));
- if(newStr)
- yaffs_strcpy(newStr, str);
- }
-
- return newStr;
-
-}
-
-/*
- * Mknod (create) a new object.
- * equivalentObject only has meaning for a hard link;
- * aliasString only has meaning for a sumlink.
- * rdev only has meaning for devices (a subset of special objects)
- */
-
-static yaffs_Object *yaffs_MknodObject(yaffs_ObjectType type,
- yaffs_Object * parent,
- const YCHAR * name,
- __u32 mode,
- __u32 uid,
- __u32 gid,
- yaffs_Object * equivalentObject,
- const YCHAR * aliasString, __u32 rdev)
-{
- yaffs_Object *in;
- YCHAR *str;
-
- yaffs_Device *dev = parent->myDev;
-
- /* Check if the entry exists. If it does then fail the call since we don't want a dup.*/
- if (yaffs_FindObjectByName(parent, name)) {
- return NULL;
- }
-
- in = yaffs_CreateNewObject(dev, -1, type);
-
- if(type == YAFFS_OBJECT_TYPE_SYMLINK){
- str = yaffs_CloneString(aliasString);
- if(!str){
- yaffs_FreeObject(in);
- return NULL;
- }
- }
-
-
-
- if (in) {
- in->chunkId = -1;
- in->valid = 1;
- in->variantType = type;
-
- in->yst_mode = mode;
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_WinFileTimeNow(in->win_atime);
- in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0];
- in->win_ctime[1] = in->win_mtime[1] = in->win_atime[1];
-
-#else
- in->yst_atime = in->yst_mtime = in->yst_ctime = Y_CURRENT_TIME;
-
- in->yst_rdev = rdev;
- in->yst_uid = uid;
- in->yst_gid = gid;
-#endif
- in->nDataChunks = 0;
-
- yaffs_SetObjectName(in, name);
- in->dirty = 1;
-
- yaffs_AddObjectToDirectory(parent, in);
-
- in->myDev = parent->myDev;
-
- switch (type) {
- case YAFFS_OBJECT_TYPE_SYMLINK:
- in->variant.symLinkVariant.alias = str;
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- in->variant.hardLinkVariant.equivalentObject =
- equivalentObject;
- in->variant.hardLinkVariant.equivalentObjectId =
- equivalentObject->objectId;
- list_add(&in->hardLinks, &equivalentObject->hardLinks);
- break;
- case YAFFS_OBJECT_TYPE_FILE:
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- case YAFFS_OBJECT_TYPE_SPECIAL:
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* do nothing */
- break;
- }
-
- if (yaffs_UpdateObjectHeader(in, name, 0, 0, 0) < 0) {
- /* Could not create the object header, fail the creation */
- yaffs_DestroyObject(in);
- in = NULL;
- }
-
- }
-
- return in;
-}
-
-yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid)
-{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
- uid, gid, NULL, NULL, 0);
-}
-
-yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid)
-{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
- mode, uid, gid, NULL, NULL, 0);
-}
-
-yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
-{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
- uid, gid, NULL, NULL, rdev);
-}
-
-yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid,
- const YCHAR * alias)
-{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
- uid, gid, NULL, alias, 0);
-}
-
-/* yaffs_Link returns the object id of the equivalent object.*/
-yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
- yaffs_Object * equivalentObject)
-{
- /* Get the real object in case we were fed a hard link as an equivalent object */
- equivalentObject = yaffs_GetEquivalentObject(equivalentObject);
-
- if (yaffs_MknodObject
- (YAFFS_OBJECT_TYPE_HARDLINK, parent, name, 0, 0, 0,
- equivalentObject, NULL, 0)) {
- return equivalentObject;
- } else {
- return NULL;
- }
-
-}
-
-static int yaffs_ChangeObjectName(yaffs_Object * obj, yaffs_Object * newDir,
- const YCHAR * newName, int force, int shadows)
-{
- int unlinkOp;
- int deleteOp;
-
- yaffs_Object *existingTarget;
-
- if (newDir == NULL) {
- newDir = obj->parent; /* use the old directory */
- }
-
- if (newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragendy: yaffs_ChangeObjectName: newDir is not a directory"
- TENDSTR)));
- YBUG();
- }
-
- /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
- if (obj->myDev->isYaffs2) {
- unlinkOp = (newDir == obj->myDev->unlinkedDir);
- } else {
- unlinkOp = (newDir == obj->myDev->unlinkedDir
- && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
- }
-
- deleteOp = (newDir == obj->myDev->deletedDir);
-
- existingTarget = yaffs_FindObjectByName(newDir, newName);
-
- /* If the object is a file going into the unlinked directory,
- * then it is OK to just stuff it in since duplicate names are allowed.
- * else only proceed if the new name does not exist and if we're putting
- * it into a directory.
- */
- if ((unlinkOp ||
- deleteOp ||
- force ||
- (shadows > 0) ||
- !existingTarget) &&
- newDir->variantType == YAFFS_OBJECT_TYPE_DIRECTORY) {
- yaffs_SetObjectName(obj, newName);
- obj->dirty = 1;
-
- yaffs_AddObjectToDirectory(newDir, obj);
-
- if (unlinkOp)
- obj->unlinked = 1;
-
- /* If it is a deletion then we mark it as a shrink for gc purposes. */
- if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows)>= 0)
- return YAFFS_OK;
- }
-
- return YAFFS_FAIL;
-}
-
-int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
- yaffs_Object * newDir, const YCHAR * newName)
-{
- yaffs_Object *obj;
- yaffs_Object *existingTarget;
- int force = 0;
-
-#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
- /* Special case for case insemsitive systems (eg. WinCE).
- * While look-up is case insensitive, the name isn't.
- * Therefore we might want to change x.txt to X.txt
- */
- if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0) {
- force = 1;
- }
-#endif
-
- obj = yaffs_FindObjectByName(oldDir, oldName);
- /* Check new name to long. */
- if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK &&
- yaffs_strlen(newName) > YAFFS_MAX_ALIAS_LENGTH)
- /* ENAMETOOLONG */
- return YAFFS_FAIL;
- else if (obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK &&
- yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
- /* ENAMETOOLONG */
- return YAFFS_FAIL;
-
- if (obj && obj->renameAllowed) {
-
- /* Now do the handling for an existing target, if there is one */
-
- existingTarget = yaffs_FindObjectByName(newDir, newName);
- if (existingTarget &&
- existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
- !list_empty(&existingTarget->variant.directoryVariant.children)) {
- /* There is a target that is a non-empty directory, so we fail */
- return YAFFS_FAIL; /* EEXIST or ENOTEMPTY */
- } else if (existingTarget && existingTarget != obj) {
- /* Nuke the target first, using shadowing,
- * but only if it isn't the same object
- */
- yaffs_ChangeObjectName(obj, newDir, newName, force,
- existingTarget->objectId);
- yaffs_UnlinkObject(existingTarget);
- }
-
- return yaffs_ChangeObjectName(obj, newDir, newName, 1, 0);
- }
- return YAFFS_FAIL;
-}
-
-/*------------------------- Block Management and Page Allocation ----------------*/
-
-static int yaffs_InitialiseBlocks(yaffs_Device * dev)
-{
- int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-
- dev->blockInfo = NULL;
- dev->chunkBits = NULL;
-
- dev->allocationBlock = -1; /* force it to get a new one */
-
- /* If the first allocation strategy fails, thry the alternate one */
- dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
- if(!dev->blockInfo){
- dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo));
- dev->blockInfoAlt = 1;
- }
- else
- dev->blockInfoAlt = 0;
-
- if(dev->blockInfo){
-
- /* Set up dynamic blockinfo stuff. */
- dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /* round up bytes */
- dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
- if(!dev->chunkBits){
- dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
- dev->chunkBitsAlt = 1;
- }
- else
- dev->chunkBitsAlt = 0;
- }
-
- if (dev->blockInfo && dev->chunkBits) {
- memset(dev->blockInfo, 0, nBlocks * sizeof(yaffs_BlockInfo));
- memset(dev->chunkBits, 0, dev->chunkBitmapStride * nBlocks);
- return YAFFS_OK;
- }
-
- return YAFFS_FAIL;
-
-}
-
-static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
-{
- if(dev->blockInfoAlt && dev->blockInfo)
- YFREE_ALT(dev->blockInfo);
- else if(dev->blockInfo)
- YFREE(dev->blockInfo);
-
- dev->blockInfoAlt = 0;
-
- dev->blockInfo = NULL;
-
- if(dev->chunkBitsAlt && dev->chunkBits)
- YFREE_ALT(dev->chunkBits);
- else if(dev->chunkBits)
- YFREE(dev->chunkBits);
- dev->chunkBitsAlt = 0;
- dev->chunkBits = NULL;
-}
-
-static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device * dev,
- yaffs_BlockInfo * bi)
-{
- int i;
- __u32 seq;
- yaffs_BlockInfo *b;
-
- if (!dev->isYaffs2)
- return 1; /* disqualification only applies to yaffs2. */
-
- if (!bi->hasShrinkHeader)
- return 1; /* can gc */
-
- /* Find the oldest dirty sequence number if we don't know it and save it
- * so we don't have to keep recomputing it.
- */
- if (!dev->oldestDirtySequence) {
- seq = dev->sequenceNumber;
-
- for (i = dev->internalStartBlock; i <= dev->internalEndBlock;
- i++) {
- b = yaffs_GetBlockInfo(dev, i);
- if (b->blockState == YAFFS_BLOCK_STATE_FULL &&
- (b->pagesInUse - b->softDeletions) <
- dev->nChunksPerBlock && b->sequenceNumber < seq) {
- seq = b->sequenceNumber;
- }
- }
- dev->oldestDirtySequence = seq;
- }
-
- /* Can't do gc of this block if there are any blocks older than this one that have
- * discarded pages.
- */
- return (bi->sequenceNumber <= dev->oldestDirtySequence);
-
-}
-
-/* FindDiretiestBlock is used to select the dirtiest block (or close enough)
- * for garbage collection.
- */
-
-static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
- int aggressive)
-{
-
- int b = dev->currentDirtyChecker;
-
- int i;
- int iterations;
- int dirtiest = -1;
- int pagesInUse = 0;
- int prioritised=0;
- yaffs_BlockInfo *bi;
- int pendingPrioritisedExist = 0;
-
- /* First let's see if we need to grab a prioritised block */
- if(dev->hasPendingPrioritisedGCs){
- for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
-
- bi = yaffs_GetBlockInfo(dev, i);
- //yaffs_VerifyBlock(dev,bi,i);
-
- if(bi->gcPrioritise) {
- pendingPrioritisedExist = 1;
- if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
- yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
- pagesInUse = (bi->pagesInUse - bi->softDeletions);
- dirtiest = i;
- prioritised = 1;
- aggressive = 1; /* Fool the non-aggressive skip logiv below */
- }
- }
- }
-
- if(!pendingPrioritisedExist) /* None found, so we can clear this */
- dev->hasPendingPrioritisedGCs = 0;
- }
-
- /* If we're doing aggressive GC then we are happy to take a less-dirty block, and
- * search harder.
- * else (we're doing a leasurely gc), then we only bother to do this if the
- * block has only a few pages in use.
- */
-
- dev->nonAggressiveSkip--;
-
- if (!aggressive && (dev->nonAggressiveSkip > 0)) {
- return -1;
- }
-
- if(!prioritised)
- pagesInUse =
- (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
-
- if (aggressive) {
- iterations =
- dev->internalEndBlock - dev->internalStartBlock + 1;
- } else {
- iterations =
- dev->internalEndBlock - dev->internalStartBlock + 1;
- iterations = iterations / 16;
- if (iterations > 200) {
- iterations = 200;
- }
- }
-
- for (i = 0; i <= iterations && pagesInUse > 0 && !prioritised; i++) {
- b++;
- if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
- b = dev->internalStartBlock;
- }
-
- if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> Block %d is not valid" TENDSTR), b));
- YBUG();
- }
-
- bi = yaffs_GetBlockInfo(dev, b);
-
-#if 0
- if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
- dirtiest = b;
- pagesInUse = 0;
- }
- else
-#endif
-
- if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
- (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
- yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
- dirtiest = b;
- pagesInUse = (bi->pagesInUse - bi->softDeletions);
- }
- }
-
- dev->currentDirtyChecker = b;
-
- if (dirtiest > 0) {
- T(YAFFS_TRACE_GC,
- (TSTR("GC Selected block %d with %d free, prioritised:%d" TENDSTR), dirtiest,
- dev->nChunksPerBlock - pagesInUse,prioritised));
- }
-
- dev->oldestDirtySequence = 0;
-
- if (dirtiest > 0) {
- dev->nonAggressiveSkip = 4;
- }
-
- return dirtiest;
-}
-
-static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
-{
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockNo);
-
- int erasedOk = 0;
-
- /* If the block is still healthy erase it and mark as clean.
- * If the block has had a data failure, then retire it.
- */
-
- T(YAFFS_TRACE_GC | YAFFS_TRACE_ERASE,
- (TSTR("yaffs_BlockBecameDirty block %d state %d %s"TENDSTR),
- blockNo, bi->blockState, (bi->needsRetiring) ? "needs retiring" : ""));
-
- bi->blockState = YAFFS_BLOCK_STATE_DIRTY;
-
- if (!bi->needsRetiring) {
- yaffs_InvalidateCheckpoint(dev);
- erasedOk = yaffs_EraseBlockInNAND(dev, blockNo);
- if (!erasedOk) {
- dev->nErasureFailures++;
- T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("**>> Erasure failed %d" TENDSTR), blockNo));
- }
- }
-
- if (erasedOk &&
- ((yaffs_traceMask & YAFFS_TRACE_ERASE) || !yaffs_SkipVerification(dev))) {
- int i;
- for (i = 0; i < dev->nChunksPerBlock; i++) {
- if (!yaffs_CheckChunkErased
- (dev, blockNo * dev->nChunksPerBlock + i)) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- (">>Block %d erasure supposedly OK, but chunk %d not erased"
- TENDSTR), blockNo, i));
- }
- }
- }
-
- if (erasedOk) {
- /* Clean it up... */
- bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- bi->pagesInUse = 0;
- bi->softDeletions = 0;
- bi->hasShrinkHeader = 0;
- bi->skipErasedCheck = 1; /* This is clean, so no need to check */
- bi->gcPrioritise = 0;
- yaffs_ClearChunkBits(dev, blockNo);
-
- T(YAFFS_TRACE_ERASE,
- (TSTR("Erased block %d" TENDSTR), blockNo));
- } else {
- dev->nFreeChunks -= dev->nChunksPerBlock; /* We lost a block of free space */
-
- yaffs_RetireBlock(dev, blockNo);
- T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("**>> Block %d retired" TENDSTR), blockNo));
- }
-}
-
-static int yaffs_FindBlockForAllocation(yaffs_Device * dev)
-{
- int i;
-
- yaffs_BlockInfo *bi;
-
- if (dev->nErasedBlocks < 1) {
- /* Hoosterman we've got a problem.
- * Can't get space to gc
- */
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs tragedy: no more eraased blocks" TENDSTR)));
-
- return -1;
- }
-
- /* Find an empty block. */
-
- for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
- dev->allocationBlockFinder++;
- if (dev->allocationBlockFinder < dev->internalStartBlock
- || dev->allocationBlockFinder > dev->internalEndBlock) {
- dev->allocationBlockFinder = dev->internalStartBlock;
- }
-
- bi = yaffs_GetBlockInfo(dev, dev->allocationBlockFinder);
-
- if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) {
- bi->blockState = YAFFS_BLOCK_STATE_ALLOCATING;
- dev->sequenceNumber++;
- bi->sequenceNumber = dev->sequenceNumber;
- dev->nErasedBlocks--;
- T(YAFFS_TRACE_ALLOCATE,
- (TSTR("Allocated block %d, seq %d, %d left" TENDSTR),
- dev->allocationBlockFinder, dev->sequenceNumber,
- dev->nErasedBlocks));
- return dev->allocationBlockFinder;
- }
- }
-
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs tragedy: no more eraased blocks, but there should have been %d"
- TENDSTR), dev->nErasedBlocks));
-
- return -1;
-}
-
-
-// Check if there's space to allocate...
-// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
-static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
-{
- int reservedChunks;
- int reservedBlocks = dev->nReservedBlocks;
- int checkpointBlocks;
-
- checkpointBlocks = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
- if(checkpointBlocks < 0)
- checkpointBlocks = 0;
-
- reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
-
- return (dev->nFreeChunks > reservedChunks);
-}
-
-static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr)
-{
- int retVal;
- yaffs_BlockInfo *bi;
-
- if (dev->allocationBlock < 0) {
- /* Get next block to allocate off */
- dev->allocationBlock = yaffs_FindBlockForAllocation(dev);
- dev->allocationPage = 0;
- }
-
- if (!useReserve && !yaffs_CheckSpaceForAllocation(dev)) {
- /* Not enough space to allocate unless we're allowed to use the reserve. */
- return -1;
- }
-
- if (dev->nErasedBlocks < dev->nReservedBlocks
- && dev->allocationPage == 0) {
- T(YAFFS_TRACE_ALLOCATE, (TSTR("Allocating reserve" TENDSTR)));
- }
-
- /* Next page please.... */
- if (dev->allocationBlock >= 0) {
- bi = yaffs_GetBlockInfo(dev, dev->allocationBlock);
-
- retVal = (dev->allocationBlock * dev->nChunksPerBlock) +
- dev->allocationPage;
- bi->pagesInUse++;
- yaffs_SetChunkBit(dev, dev->allocationBlock,
- dev->allocationPage);
-
- dev->allocationPage++;
-
- dev->nFreeChunks--;
-
- /* If the block is full set the state to full */
- if (dev->allocationPage >= dev->nChunksPerBlock) {
- bi->blockState = YAFFS_BLOCK_STATE_FULL;
- dev->allocationBlock = -1;
- }
-
- if(blockUsedPtr)
- *blockUsedPtr = bi;
-
- return retVal;
- }
-
- T(YAFFS_TRACE_ERROR,
- (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
-
- return -1;
-}
-
-static int yaffs_GetErasedChunks(yaffs_Device * dev)
-{
- int n;
-
- n = dev->nErasedBlocks * dev->nChunksPerBlock;
-
- if (dev->allocationBlock > 0) {
- n += (dev->nChunksPerBlock - dev->allocationPage);
- }
-
- return n;
-
-}
-
-static int yaffs_GarbageCollectBlock(yaffs_Device * dev, int block)
-{
- int oldChunk;
- int newChunk;
- int chunkInBlock;
- int markNAND;
- int retVal = YAFFS_OK;
- int cleanups = 0;
- int i;
- int isCheckpointBlock;
- int matchingChunk;
-
- int chunksBefore = yaffs_GetErasedChunks(dev);
- int chunksAfter;
-
- yaffs_ExtendedTags tags;
-
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, block);
-
- yaffs_Object *object;
-
- isCheckpointBlock = (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT);
-
- bi->blockState = YAFFS_BLOCK_STATE_COLLECTING;
-
- T(YAFFS_TRACE_TRACING,
- (TSTR("Collecting block %d, in use %d, shrink %d, " TENDSTR), block,
- bi->pagesInUse, bi->hasShrinkHeader));
-
- /*yaffs_VerifyFreeChunks(dev); */
-
- bi->hasShrinkHeader = 0; /* clear the flag so that the block can erase */
-
- /* Take off the number of soft deleted entries because
- * they're going to get really deleted during GC.
- */
- dev->nFreeChunks -= bi->softDeletions;
-
- dev->isDoingGC = 1;
-
- if (isCheckpointBlock ||
- !yaffs_StillSomeChunkBits(dev, block)) {
- T(YAFFS_TRACE_TRACING,
- (TSTR
- ("Collecting block %d that has no chunks in use" TENDSTR),
- block));
- yaffs_BlockBecameDirty(dev, block);
- } else {
-
- __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-
- yaffs_VerifyBlock(dev,bi,block);
-
- for (chunkInBlock = 0, oldChunk = block * dev->nChunksPerBlock;
- chunkInBlock < dev->nChunksPerBlock
- && yaffs_StillSomeChunkBits(dev, block);
- chunkInBlock++, oldChunk++) {
- if (yaffs_CheckChunkBit(dev, block, chunkInBlock)) {
-
- /* This page is in use and might need to be copied off */
-
- markNAND = 1;
-
- yaffs_InitialiseTags(&tags);
-
- yaffs_ReadChunkWithTagsFromNAND(dev, oldChunk,
- buffer, &tags);
-
- object =
- yaffs_FindObjectByNumber(dev,
- tags.objectId);
-
- T(YAFFS_TRACE_GC_DETAIL,
- (TSTR
- ("Collecting page %d, %d %d %d " TENDSTR),
- chunkInBlock, tags.objectId, tags.chunkId,
- tags.byteCount));
-
- if(object && !yaffs_SkipVerification(dev)){
- if(tags.chunkId == 0)
- matchingChunk = object->chunkId;
- else if(object->softDeleted)
- matchingChunk = oldChunk; /* Defeat the test */
- else
- matchingChunk = yaffs_FindChunkInFile(object,tags.chunkId,NULL);
-
- if(oldChunk != matchingChunk)
- T(YAFFS_TRACE_ERROR,
- (TSTR("gc: page in gc mismatch: %d %d %d %d"TENDSTR),
- oldChunk,matchingChunk,tags.objectId, tags.chunkId));
-
- }
-
- if (!object) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("page %d in gc has no object: %d %d %d "
- TENDSTR), oldChunk,
- tags.objectId, tags.chunkId, tags.byteCount));
- }
-
- if (object && object->deleted
- && tags.chunkId != 0) {
- /* Data chunk in a deleted file, throw it away
- * It's a soft deleted data chunk,
- * No need to copy this, just forget about it and
- * fix up the object.
- */
-
- object->nDataChunks--;
-
- if (object->nDataChunks <= 0) {
- /* remeber to clean up the object */
- dev->gcCleanupList[cleanups] =
- tags.objectId;
- cleanups++;
- }
- markNAND = 0;
- } else if (0
- /* Todo object && object->deleted && object->nDataChunks == 0 */
- ) {
- /* Deleted object header with no data chunks.
- * Can be discarded and the file deleted.
- */
- object->chunkId = 0;
- yaffs_FreeTnode(object->myDev,
- object->variant.
- fileVariant.top);
- object->variant.fileVariant.top = NULL;
- yaffs_DoGenericObjectDeletion(object);
-
- } else if (object) {
- /* It's either a data chunk in a live file or
- * an ObjectHeader, so we're interested in it.
- * NB Need to keep the ObjectHeaders of deleted files
- * until the whole file has been deleted off
- */
- tags.serialNumber++;
-
- dev->nGCCopies++;
-
- if (tags.chunkId == 0) {
- /* It is an object Id,
- * We need to nuke the shrinkheader flags first
- * We no longer want the shrinkHeader flag since its work is done
- * and if it is left in place it will mess up scanning.
- * Also, clear out any shadowing stuff
- */
-
- yaffs_ObjectHeader *oh;
- oh = (yaffs_ObjectHeader *)buffer;
- oh->isShrink = 0;
- oh->shadowsObject = -1;
- tags.extraShadows = 0;
- tags.extraIsShrinkHeader = 0;
-
- yaffs_VerifyObjectHeader(object,oh,&tags,1);
- }
-
- newChunk =
- yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &tags, 1);
-
- if (newChunk < 0) {
- retVal = YAFFS_FAIL;
- } else {
-
- /* Ok, now fix up the Tnodes etc. */
-
- if (tags.chunkId == 0) {
- /* It's a header */
- object->chunkId = newChunk;
- object->serial = tags.serialNumber;
- } else {
- /* It's a data chunk */
- yaffs_PutChunkIntoFile
- (object,
- tags.chunkId,
- newChunk, 0);
- }
- }
- }
-
- yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-
- }
- }
-
- yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-
-
- /* Do any required cleanups */
- for (i = 0; i < cleanups; i++) {
- /* Time to delete the file too */
- object =
- yaffs_FindObjectByNumber(dev,
- dev->gcCleanupList[i]);
- if (object) {
- yaffs_FreeTnode(dev,
- object->variant.fileVariant.
- top);
- object->variant.fileVariant.top = NULL;
- T(YAFFS_TRACE_GC,
- (TSTR
- ("yaffs: About to finally delete object %d"
- TENDSTR), object->objectId));
- yaffs_DoGenericObjectDeletion(object);
- object->myDev->nDeletedFiles--;
- }
-
- }
-
- }
-
- yaffs_VerifyCollectedBlock(dev,bi,block);
-
- if (chunksBefore >= (chunksAfter = yaffs_GetErasedChunks(dev))) {
- T(YAFFS_TRACE_GC,
- (TSTR
- ("gc did not increase free chunks before %d after %d"
- TENDSTR), chunksBefore, chunksAfter));
- }
-
- dev->isDoingGC = 0;
-
- return YAFFS_OK;
-}
-
-/* New garbage collector
- * If we're very low on erased blocks then we do aggressive garbage collection
- * otherwise we do "leasurely" garbage collection.
- * Aggressive gc looks further (whole array) and will accept less dirty blocks.
- * Passive gc only inspects smaller areas and will only accept more dirty blocks.
- *
- * The idea is to help clear out space in a more spread-out manner.
- * Dunno if it really does anything useful.
- */
-static int yaffs_CheckGarbageCollection(yaffs_Device * dev)
-{
- int block;
- int aggressive;
- int gcOk = YAFFS_OK;
- int maxTries = 0;
-
- int checkpointBlockAdjust;
-
- if (dev->isDoingGC) {
- /* Bail out so we don't get recursive gc */
- return YAFFS_OK;
- }
-
- /* This loop should pass the first time.
- * We'll only see looping here if the erase of the collected block fails.
- */
-
- do {
- maxTries++;
-
- checkpointBlockAdjust = (dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint);
- if(checkpointBlockAdjust < 0)
- checkpointBlockAdjust = 0;
-
- if (dev->nErasedBlocks < (dev->nReservedBlocks + checkpointBlockAdjust + 2)) {
- /* We need a block soon...*/
- aggressive = 1;
- } else {
- /* We're in no hurry */
- aggressive = 0;
- }
-
- block = yaffs_FindBlockForGarbageCollection(dev, aggressive);
-
- if (block > 0) {
- dev->garbageCollections++;
- if (!aggressive) {
- dev->passiveGarbageCollections++;
- }
-
- T(YAFFS_TRACE_GC,
- (TSTR
- ("yaffs: GC erasedBlocks %d aggressive %d" TENDSTR),
- dev->nErasedBlocks, aggressive));
-
- gcOk = yaffs_GarbageCollectBlock(dev, block);
- }
-
- if (dev->nErasedBlocks < (dev->nReservedBlocks) && block > 0) {
- T(YAFFS_TRACE_GC,
- (TSTR
- ("yaffs: GC !!!no reclaim!!! erasedBlocks %d after try %d block %d"
- TENDSTR), dev->nErasedBlocks, maxTries, block));
- }
- } while ((dev->nErasedBlocks < dev->nReservedBlocks) && (block > 0)
- && (maxTries < 2));
-
- return aggressive ? gcOk : YAFFS_OK;
-}
-
-/*------------------------- TAGS --------------------------------*/
-
-static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
- int chunkInObject)
-{
- return (tags->chunkId == chunkInObject &&
- tags->objectId == objectId && !tags->chunkDeleted) ? 1 : 0;
-
-}
-
-
-/*-------------------- Data file manipulation -----------------*/
-
-static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
- yaffs_ExtendedTags * tags)
-{
- /*Get the Tnode, then get the level 0 offset chunk offset */
- yaffs_Tnode *tn;
- int theChunk = -1;
- yaffs_ExtendedTags localTags;
- int retVal = -1;
-
- yaffs_Device *dev = in->myDev;
-
- if (!tags) {
- /* Passed a NULL, so use our own tags space */
- tags = &localTags;
- }
-
- tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
-
- if (tn) {
- theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-
- retVal =
- yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
- chunkInInode);
- }
- return retVal;
-}
-
-static int yaffs_FindAndDeleteChunkInFile(yaffs_Object * in, int chunkInInode,
- yaffs_ExtendedTags * tags)
-{
- /* Get the Tnode, then get the level 0 offset chunk offset */
- yaffs_Tnode *tn;
- int theChunk = -1;
- yaffs_ExtendedTags localTags;
-
- yaffs_Device *dev = in->myDev;
- int retVal = -1;
-
- if (!tags) {
- /* Passed a NULL, so use our own tags space */
- tags = &localTags;
- }
-
- tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
-
- if (tn) {
-
- theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-
- retVal =
- yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
- chunkInInode);
-
- /* Delete the entry in the filestructure (if found) */
- if (retVal != -1) {
- yaffs_PutLevel0Tnode(dev,tn,chunkInInode,0);
- }
- } else {
- /*T(("No level 0 found for %d\n", chunkInInode)); */
- }
-
- if (retVal == -1) {
- /* T(("Could not find %d to delete\n",chunkInInode)); */
- }
- return retVal;
-}
-
-#ifdef YAFFS_PARANOID
-
-static int yaffs_CheckFileSanity(yaffs_Object * in)
-{
- int chunk;
- int nChunks;
- int fSize;
- int failed = 0;
- int objId;
- yaffs_Tnode *tn;
- yaffs_Tags localTags;
- yaffs_Tags *tags = &localTags;
- int theChunk;
- int chunkDeleted;
-
- if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
- /* T(("Object not a file\n")); */
- return YAFFS_FAIL;
- }
-
- objId = in->objectId;
- fSize = in->variant.fileVariant.fileSize;
- nChunks =
- (fSize + in->myDev->nDataBytesPerChunk - 1) / in->myDev->nDataBytesPerChunk;
-
- for (chunk = 1; chunk <= nChunks; chunk++) {
- tn = yaffs_FindLevel0Tnode(in->myDev, &in->variant.fileVariant,
- chunk);
-
- if (tn) {
-
- theChunk = yaffs_GetChunkGroupBase(dev,tn,chunk);
-
- if (yaffs_CheckChunkBits
- (dev, theChunk / dev->nChunksPerBlock,
- theChunk % dev->nChunksPerBlock)) {
-
- yaffs_ReadChunkTagsFromNAND(in->myDev, theChunk,
- tags,
- &chunkDeleted);
- if (yaffs_TagsMatch
- (tags, in->objectId, chunk, chunkDeleted)) {
- /* found it; */
-
- }
- } else {
-
- failed = 1;
- }
-
- } else {
- /* T(("No level 0 found for %d\n", chunk)); */
- }
- }
-
- return failed ? YAFFS_FAIL : YAFFS_OK;
-}
-
-#endif
-
-static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
- int chunkInNAND, int inScan)
-{
- /* NB inScan is zero unless scanning.
- * For forward scanning, inScan is > 0;
- * for backward scanning inScan is < 0
- */
-
- yaffs_Tnode *tn;
- yaffs_Device *dev = in->myDev;
- int existingChunk;
- yaffs_ExtendedTags existingTags;
- yaffs_ExtendedTags newTags;
- unsigned existingSerial, newSerial;
-
- if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
- /* Just ignore an attempt at putting a chunk into a non-file during scanning
- * If it is not during Scanning then something went wrong!
- */
- if (!inScan) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy:attempt to put data chunk into a non-file"
- TENDSTR)));
- YBUG();
- }
-
- yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
- return YAFFS_OK;
- }
-
- tn = yaffs_AddOrFindLevel0Tnode(dev,
- &in->variant.fileVariant,
- chunkInInode,
- NULL);
- if (!tn) {
- return YAFFS_FAIL;
- }
-
- existingChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-
- if (inScan != 0) {
- /* If we're scanning then we need to test for duplicates
- * NB This does not need to be efficient since it should only ever
- * happen when the power fails during a write, then only one
- * chunk should ever be affected.
- *
- * Correction for YAFFS2: This could happen quite a lot and we need to think about efficiency! TODO
- * Update: For backward scanning we don't need to re-read tags so this is quite cheap.
- */
-
- if (existingChunk != 0) {
- /* NB Right now existing chunk will not be real chunkId if the device >= 32MB
- * thus we have to do a FindChunkInFile to get the real chunk id.
- *
- * We have a duplicate now we need to decide which one to use:
- *
- * Backwards scanning YAFFS2: The old one is what we use, dump the new one.
- * Forward scanning YAFFS2: The new one is what we use, dump the old one.
- * YAFFS1: Get both sets of tags and compare serial numbers.
- */
-
- if (inScan > 0) {
- /* Only do this for forward scanning */
- yaffs_ReadChunkWithTagsFromNAND(dev,
- chunkInNAND,
- NULL, &newTags);
-
- /* Do a proper find */
- existingChunk =
- yaffs_FindChunkInFile(in, chunkInInode,
- &existingTags);
- }
-
- if (existingChunk <= 0) {
- /*Hoosterman - how did this happen? */
-
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: existing chunk < 0 in scan"
- TENDSTR)));
-
- }
-
- /* NB The deleted flags should be false, otherwise the chunks will
- * not be loaded during a scan
- */
-
- newSerial = newTags.serialNumber;
- existingSerial = existingTags.serialNumber;
-
- if ((inScan > 0) &&
- (in->myDev->isYaffs2 ||
- existingChunk <= 0 ||
- ((existingSerial + 1) & 3) == newSerial)) {
- /* Forward scanning.
- * Use new
- * Delete the old one and drop through to update the tnode
- */
- yaffs_DeleteChunk(dev, existingChunk, 1,
- __LINE__);
- } else {
- /* Backward scanning or we want to use the existing one
- * Use existing.
- * Delete the new one and return early so that the tnode isn't changed
- */
- yaffs_DeleteChunk(dev, chunkInNAND, 1,
- __LINE__);
- return YAFFS_OK;
- }
- }
-
- }
-
- if (existingChunk == 0) {
- in->nDataChunks++;
- }
-
- yaffs_PutLevel0Tnode(dev,tn,chunkInInode,chunkInNAND);
-
- return YAFFS_OK;
-}
-
-static int yaffs_ReadChunkDataFromObject(yaffs_Object * in, int chunkInInode,
- __u8 * buffer)
-{
- int chunkInNAND = yaffs_FindChunkInFile(in, chunkInInode, NULL);
-
- if (chunkInNAND >= 0) {
- return yaffs_ReadChunkWithTagsFromNAND(in->myDev, chunkInNAND,
- buffer,NULL);
- } else {
- T(YAFFS_TRACE_NANDACCESS,
- (TSTR("Chunk %d not found zero instead" TENDSTR),
- chunkInNAND));
- /* get sane (zero) data if you read a hole */
- memset(buffer, 0, in->myDev->nDataBytesPerChunk);
- return 0;
- }
-
-}
-
-void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn)
-{
- int block;
- int page;
- yaffs_ExtendedTags tags;
- yaffs_BlockInfo *bi;
-
- if (chunkId <= 0)
- return;
-
-
- dev->nDeletions++;
- block = chunkId / dev->nChunksPerBlock;
- page = chunkId % dev->nChunksPerBlock;
-
-
- if(!yaffs_CheckChunkBit(dev,block,page))
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Deleting invalid chunk %d"TENDSTR),
- chunkId));
-
- bi = yaffs_GetBlockInfo(dev, block);
-
- T(YAFFS_TRACE_DELETION,
- (TSTR("line %d delete of chunk %d" TENDSTR), lyn, chunkId));
-
- if (markNAND &&
- bi->blockState != YAFFS_BLOCK_STATE_COLLECTING && !dev->isYaffs2) {
-
- yaffs_InitialiseTags(&tags);
-
- tags.chunkDeleted = 1;
-
- yaffs_WriteChunkWithTagsToNAND(dev, chunkId, NULL, &tags);
- yaffs_HandleUpdateChunk(dev, chunkId, &tags);
- } else {
- dev->nUnmarkedDeletions++;
- }
-
- /* Pull out of the management area.
- * If the whole block became dirty, this will kick off an erasure.
- */
- if (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING ||
- bi->blockState == YAFFS_BLOCK_STATE_FULL ||
- bi->blockState == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
- bi->blockState == YAFFS_BLOCK_STATE_COLLECTING) {
- dev->nFreeChunks++;
-
- yaffs_ClearChunkBit(dev, block, page);
-
- bi->pagesInUse--;
-
- if (bi->pagesInUse == 0 &&
- !bi->hasShrinkHeader &&
- bi->blockState != YAFFS_BLOCK_STATE_ALLOCATING &&
- bi->blockState != YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
- yaffs_BlockBecameDirty(dev, block);
- }
-
- } else {
- /* T(("Bad news deleting chunk %d\n",chunkId)); */
- }
-
-}
-
-static int yaffs_WriteChunkDataToObject(yaffs_Object * in, int chunkInInode,
- const __u8 * buffer, int nBytes,
- int useReserve)
-{
- /* Find old chunk Need to do this to get serial number
- * Write new one and patch into tree.
- * Invalidate old tags.
- */
-
- int prevChunkId;
- yaffs_ExtendedTags prevTags;
-
- int newChunkId;
- yaffs_ExtendedTags newTags;
-
- yaffs_Device *dev = in->myDev;
-
- yaffs_CheckGarbageCollection(dev);
-
- /* Get the previous chunk at this location in the file if it exists */
- prevChunkId = yaffs_FindChunkInFile(in, chunkInInode, &prevTags);
-
- /* Set up new tags */
- yaffs_InitialiseTags(&newTags);
-
- newTags.chunkId = chunkInInode;
- newTags.objectId = in->objectId;
- newTags.serialNumber =
- (prevChunkId >= 0) ? prevTags.serialNumber + 1 : 1;
- newTags.byteCount = nBytes;
-
- newChunkId =
- yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
- useReserve);
-
- if (newChunkId >= 0) {
- yaffs_PutChunkIntoFile(in, chunkInInode, newChunkId, 0);
-
- if (prevChunkId >= 0) {
- yaffs_DeleteChunk(dev, prevChunkId, 1, __LINE__);
-
- }
-
- yaffs_CheckFileSanity(in);
- }
- return newChunkId;
-
-}
-
-/* UpdateObjectHeader updates the header on NAND for an object.
- * If name is not NULL, then that new name is used.
- */
-int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
- int isShrink, int shadows)
-{
-
- yaffs_BlockInfo *bi;
-
- yaffs_Device *dev = in->myDev;
-
- int prevChunkId;
- int retVal = 0;
- int result = 0;
-
- int newChunkId;
- yaffs_ExtendedTags newTags;
- yaffs_ExtendedTags oldTags;
-
- __u8 *buffer = NULL;
- YCHAR oldName[YAFFS_MAX_NAME_LENGTH + 1];
-
- yaffs_ObjectHeader *oh = NULL;
-
- yaffs_strcpy(oldName,"silly old name");
-
- if (!in->fake || force) {
-
- yaffs_CheckGarbageCollection(dev);
- yaffs_CheckObjectDetailsLoaded(in);
-
- buffer = yaffs_GetTempBuffer(in->myDev, __LINE__);
- oh = (yaffs_ObjectHeader *) buffer;
-
- prevChunkId = in->chunkId;
-
- if (prevChunkId >= 0) {
- result = yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
- buffer, &oldTags);
-
- yaffs_VerifyObjectHeader(in,oh,&oldTags,0);
-
- memcpy(oldName, oh->name, sizeof(oh->name));
- }
-
- memset(buffer, 0xFF, dev->nDataBytesPerChunk);
-
- oh->type = in->variantType;
- oh->yst_mode = in->yst_mode;
- oh->shadowsObject = shadows;
-
-#ifdef CONFIG_YAFFS_WINCE
- oh->win_atime[0] = in->win_atime[0];
- oh->win_ctime[0] = in->win_ctime[0];
- oh->win_mtime[0] = in->win_mtime[0];
- oh->win_atime[1] = in->win_atime[1];
- oh->win_ctime[1] = in->win_ctime[1];
- oh->win_mtime[1] = in->win_mtime[1];
-#else
- oh->yst_uid = in->yst_uid;
- oh->yst_gid = in->yst_gid;
- oh->yst_atime = in->yst_atime;
- oh->yst_mtime = in->yst_mtime;
- oh->yst_ctime = in->yst_ctime;
- oh->yst_rdev = in->yst_rdev;
-#endif
- if (in->parent) {
- oh->parentObjectId = in->parent->objectId;
- } else {
- oh->parentObjectId = 0;
- }
-
- if (name && *name) {
- memset(oh->name, 0, sizeof(oh->name));
- yaffs_strncpy(oh->name, name, YAFFS_MAX_NAME_LENGTH);
- } else if (prevChunkId>=0) {
- memcpy(oh->name, oldName, sizeof(oh->name));
- } else {
- memset(oh->name, 0, sizeof(oh->name));
- }
-
- oh->isShrink = isShrink;
-
- switch (in->variantType) {
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* Should not happen */
- break;
- case YAFFS_OBJECT_TYPE_FILE:
- oh->fileSize =
- (oh->parentObjectId == YAFFS_OBJECTID_DELETED
- || oh->parentObjectId ==
- YAFFS_OBJECTID_UNLINKED) ? 0 : in->variant.
- fileVariant.fileSize;
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- oh->equivalentObjectId =
- in->variant.hardLinkVariant.equivalentObjectId;
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- yaffs_strncpy(oh->alias,
- in->variant.symLinkVariant.alias,
- YAFFS_MAX_ALIAS_LENGTH);
- oh->alias[YAFFS_MAX_ALIAS_LENGTH] = 0;
- break;
- }
-
- /* Tags */
- yaffs_InitialiseTags(&newTags);
- in->serial++;
- newTags.chunkId = 0;
- newTags.objectId = in->objectId;
- newTags.serialNumber = in->serial;
-
- /* Add extra info for file header */
-
- newTags.extraHeaderInfoAvailable = 1;
- newTags.extraParentObjectId = oh->parentObjectId;
- newTags.extraFileLength = oh->fileSize;
- newTags.extraIsShrinkHeader = oh->isShrink;
- newTags.extraEquivalentObjectId = oh->equivalentObjectId;
- newTags.extraShadows = (oh->shadowsObject > 0) ? 1 : 0;
- newTags.extraObjectType = in->variantType;
-
- yaffs_VerifyObjectHeader(in,oh,&newTags,1);
-
- /* Create new chunk in NAND */
- newChunkId =
- yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
- (prevChunkId >= 0) ? 1 : 0);
-
- if (newChunkId >= 0) {
-
- in->chunkId = newChunkId;
-
- if (prevChunkId >= 0) {
- yaffs_DeleteChunk(dev, prevChunkId, 1,
- __LINE__);
- }
-
- if(!yaffs_ObjectHasCachedWriteData(in))
- in->dirty = 0;
-
- /* If this was a shrink, then mark the block that the chunk lives on */
- if (isShrink) {
- bi = yaffs_GetBlockInfo(in->myDev,
- newChunkId /in->myDev-> nChunksPerBlock);
- bi->hasShrinkHeader = 1;
- }
-
- }
-
- retVal = newChunkId;
-
- }
-
- if (buffer)
- yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-
- return retVal;
-}
-
-/*------------------------ Short Operations Cache ----------------------------------------
- * In many situations where there is no high level buffering (eg WinCE) a lot of
- * reads might be short sequential reads, and a lot of writes may be short
- * sequential writes. eg. scanning/writing a jpeg file.
- * In these cases, a short read/write cache can provide a huge perfomance benefit
- * with dumb-as-a-rock code.
- * In Linux, the page cache provides read buffering aand the short op cache provides write
- * buffering.
- *
- * There are a limited number (~10) of cache chunks per device so that we don't
- * need a very intelligent search.
- */
-
-static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj)
-{
- yaffs_Device *dev = obj->myDev;
- int i;
- yaffs_ChunkCache *cache;
- int nCaches = obj->myDev->nShortOpCaches;
-
- for(i = 0; i < nCaches; i++){
- cache = &dev->srCache[i];
- if (cache->object == obj &&
- cache->dirty)
- return 1;
- }
-
- return 0;
-}
-
-
-static void yaffs_FlushFilesChunkCache(yaffs_Object * obj)
-{
- yaffs_Device *dev = obj->myDev;
- int lowest = -99; /* Stop compiler whining. */
- int i;
- yaffs_ChunkCache *cache;
- int chunkWritten = 0;
- int nCaches = obj->myDev->nShortOpCaches;
-
- if (nCaches > 0) {
- do {
- cache = NULL;
-
- /* Find the dirty cache for this object with the lowest chunk id. */
- for (i = 0; i < nCaches; i++) {
- if (dev->srCache[i].object == obj &&
- dev->srCache[i].dirty) {
- if (!cache
- || dev->srCache[i].chunkId <
- lowest) {
- cache = &dev->srCache[i];
- lowest = cache->chunkId;
- }
- }
- }
-
- if (cache && !cache->locked) {
- /* Write it out and free it up */
-
- chunkWritten =
- yaffs_WriteChunkDataToObject(cache->object,
- cache->chunkId,
- cache->data,
- cache->nBytes,
- 1);
- cache->dirty = 0;
- cache->object = NULL;
- }
-
- } while (cache && chunkWritten > 0);
-
- if (cache) {
- /* Hoosterman, disk full while writing cache out. */
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs tragedy: no space during cache write" TENDSTR)));
-
- }
- }
-
-}
-
-/*yaffs_FlushEntireDeviceCache(dev)
- *
- *
- */
-
-void yaffs_FlushEntireDeviceCache(yaffs_Device *dev)
-{
- yaffs_Object *obj;
- int nCaches = dev->nShortOpCaches;
- int i;
-
- /* Find a dirty object in the cache and flush it...
- * until there are no further dirty objects.
- */
- do {
- obj = NULL;
- for( i = 0; i < nCaches && !obj; i++) {
- if (dev->srCache[i].object &&
- dev->srCache[i].dirty)
- obj = dev->srCache[i].object;
-
- }
- if(obj)
- yaffs_FlushFilesChunkCache(obj);
-
- } while(obj);
-
-}
-
-
-/* Grab us a cache chunk for use.
- * First look for an empty one.
- * Then look for the least recently used non-dirty one.
- * Then look for the least recently used dirty one...., flush and look again.
- */
-static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device * dev)
-{
- int i;
- int usage;
- int theOne;
-
- if (dev->nShortOpCaches > 0) {
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (!dev->srCache[i].object)
- return &dev->srCache[i];
- }
-
- return NULL;
-
- theOne = -1;
- usage = 0; /* just to stop the compiler grizzling */
-
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (!dev->srCache[i].dirty &&
- ((dev->srCache[i].lastUse < usage && theOne >= 0) ||
- theOne < 0)) {
- usage = dev->srCache[i].lastUse;
- theOne = i;
- }
- }
-
-
- return theOne >= 0 ? &dev->srCache[theOne] : NULL;
- } else {
- return NULL;
- }
-
-}
-
-static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
-{
- yaffs_ChunkCache *cache;
- yaffs_Object *theObj;
- int usage;
- int i;
- int pushout;
-
- if (dev->nShortOpCaches > 0) {
- /* Try find a non-dirty one... */
-
- cache = yaffs_GrabChunkCacheWorker(dev);
-
- if (!cache) {
- /* They were all dirty, find the last recently used object and flush
- * its cache, then find again.
- * NB what's here is not very accurate, we actually flush the object
- * the last recently used page.
- */
-
- /* With locking we can't assume we can use entry zero */
-
- theObj = NULL;
- usage = -1;
- cache = NULL;
- pushout = -1;
-
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].object &&
- !dev->srCache[i].locked &&
- (dev->srCache[i].lastUse < usage || !cache))
- {
- usage = dev->srCache[i].lastUse;
- theObj = dev->srCache[i].object;
- cache = &dev->srCache[i];
- pushout = i;
- }
- }
-
- if (!cache || cache->dirty) {
- /* Flush and try again */
- yaffs_FlushFilesChunkCache(theObj);
- cache = yaffs_GrabChunkCacheWorker(dev);
- }
-
- }
- return cache;
- } else
- return NULL;
-
-}
-
-/* Find a cached chunk */
-static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object * obj,
- int chunkId)
-{
- yaffs_Device *dev = obj->myDev;
- int i;
- if (dev->nShortOpCaches > 0) {
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].object == obj &&
- dev->srCache[i].chunkId == chunkId) {
- dev->cacheHits++;
-
- return &dev->srCache[i];
- }
- }
- }
- return NULL;
-}
-
-/* Mark the chunk for the least recently used algorithym */
-static void yaffs_UseChunkCache(yaffs_Device * dev, yaffs_ChunkCache * cache,
- int isAWrite)
-{
-
- if (dev->nShortOpCaches > 0) {
- if (dev->srLastUse < 0 || dev->srLastUse > 100000000) {
- /* Reset the cache usages */
- int i;
- for (i = 1; i < dev->nShortOpCaches; i++) {
- dev->srCache[i].lastUse = 0;
- }
- dev->srLastUse = 0;
- }
-
- dev->srLastUse++;
-
- cache->lastUse = dev->srLastUse;
-
- if (isAWrite) {
- cache->dirty = 1;
- }
- }
-}
-
-/* Invalidate a single cache page.
- * Do this when a whole page gets written,
- * ie the short cache for this page is no longer valid.
- */
-static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId)
-{
- if (object->myDev->nShortOpCaches > 0) {
- yaffs_ChunkCache *cache = yaffs_FindChunkCache(object, chunkId);
-
- if (cache) {
- cache->object = NULL;
- }
- }
-}
-
-/* Invalidate all the cache pages associated with this object
- * Do this whenever ther file is deleted or resized.
- */
-static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in)
-{
- int i;
- yaffs_Device *dev = in->myDev;
-
- if (dev->nShortOpCaches > 0) {
- /* Invalidate it. */
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].object == in) {
- dev->srCache[i].object = NULL;
- }
- }
- }
-}
-
-/*--------------------- Checkpointing --------------------*/
-
-
-static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev,int head)
-{
- yaffs_CheckpointValidity cp;
-
- memset(&cp,0,sizeof(cp));
-
- cp.structType = sizeof(cp);
- cp.magic = YAFFS_MAGIC;
- cp.version = YAFFS_CHECKPOINT_VERSION;
- cp.head = (head) ? 1 : 0;
-
- return (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp))?
- 1 : 0;
-}
-
-static int yaffs_ReadCheckpointValidityMarker(yaffs_Device *dev, int head)
-{
- yaffs_CheckpointValidity cp;
- int ok;
-
- ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
-
- if(ok)
- ok = (cp.structType == sizeof(cp)) &&
- (cp.magic == YAFFS_MAGIC) &&
- (cp.version == YAFFS_CHECKPOINT_VERSION) &&
- (cp.head == ((head) ? 1 : 0));
- return ok ? 1 : 0;
-}
-
-static void yaffs_DeviceToCheckpointDevice(yaffs_CheckpointDevice *cp,
- yaffs_Device *dev)
-{
- cp->nErasedBlocks = dev->nErasedBlocks;
- cp->allocationBlock = dev->allocationBlock;
- cp->allocationPage = dev->allocationPage;
- cp->nFreeChunks = dev->nFreeChunks;
-
- cp->nDeletedFiles = dev->nDeletedFiles;
- cp->nUnlinkedFiles = dev->nUnlinkedFiles;
- cp->nBackgroundDeletions = dev->nBackgroundDeletions;
- cp->sequenceNumber = dev->sequenceNumber;
- cp->oldestDirtySequence = dev->oldestDirtySequence;
-
-}
-
-static void yaffs_CheckpointDeviceToDevice(yaffs_Device *dev,
- yaffs_CheckpointDevice *cp)
-{
- dev->nErasedBlocks = cp->nErasedBlocks;
- dev->allocationBlock = cp->allocationBlock;
- dev->allocationPage = cp->allocationPage;
- dev->nFreeChunks = cp->nFreeChunks;
-
- dev->nDeletedFiles = cp->nDeletedFiles;
- dev->nUnlinkedFiles = cp->nUnlinkedFiles;
- dev->nBackgroundDeletions = cp->nBackgroundDeletions;
- dev->sequenceNumber = cp->sequenceNumber;
- dev->oldestDirtySequence = cp->oldestDirtySequence;
-}
-
-
-static int yaffs_WriteCheckpointDevice(yaffs_Device *dev)
-{
- yaffs_CheckpointDevice cp;
- __u32 nBytes;
- __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
-
- int ok;
-
- /* Write device runtime values*/
- yaffs_DeviceToCheckpointDevice(&cp,dev);
- cp.structType = sizeof(cp);
-
- ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-
- /* Write block info */
- if(ok) {
- nBytes = nBlocks * sizeof(yaffs_BlockInfo);
- ok = (yaffs_CheckpointWrite(dev,dev->blockInfo,nBytes) == nBytes);
- }
-
- /* Write chunk bits */
- if(ok) {
- nBytes = nBlocks * dev->chunkBitmapStride;
- ok = (yaffs_CheckpointWrite(dev,dev->chunkBits,nBytes) == nBytes);
- }
- return ok ? 1 : 0;
-
-}
-
-static int yaffs_ReadCheckpointDevice(yaffs_Device *dev)
-{
- yaffs_CheckpointDevice cp;
- __u32 nBytes;
- __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
-
- int ok;
-
- ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
- if(!ok)
- return 0;
-
- if(cp.structType != sizeof(cp))
- return 0;
-
-
- yaffs_CheckpointDeviceToDevice(dev,&cp);
-
- nBytes = nBlocks * sizeof(yaffs_BlockInfo);
-
- ok = (yaffs_CheckpointRead(dev,dev->blockInfo,nBytes) == nBytes);
-
- if(!ok)
- return 0;
- nBytes = nBlocks * dev->chunkBitmapStride;
-
- ok = (yaffs_CheckpointRead(dev,dev->chunkBits,nBytes) == nBytes);
-
- return ok ? 1 : 0;
-}
-
-static void yaffs_ObjectToCheckpointObject(yaffs_CheckpointObject *cp,
- yaffs_Object *obj)
-{
-
- cp->objectId = obj->objectId;
- cp->parentId = (obj->parent) ? obj->parent->objectId : 0;
- cp->chunkId = obj->chunkId;
- cp->variantType = obj->variantType;
- cp->deleted = obj->deleted;
- cp->softDeleted = obj->softDeleted;
- cp->unlinked = obj->unlinked;
- cp->fake = obj->fake;
- cp->renameAllowed = obj->renameAllowed;
- cp->unlinkAllowed = obj->unlinkAllowed;
- cp->serial = obj->serial;
- cp->nDataChunks = obj->nDataChunks;
-
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
- cp->fileSizeOrEquivalentObjectId = obj->variant.fileVariant.fileSize;
- else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
- cp->fileSizeOrEquivalentObjectId = obj->variant.hardLinkVariant.equivalentObjectId;
-}
-
-static void yaffs_CheckpointObjectToObject( yaffs_Object *obj,yaffs_CheckpointObject *cp)
-{
-
- yaffs_Object *parent;
-
- obj->objectId = cp->objectId;
-
- if(cp->parentId)
- parent = yaffs_FindOrCreateObjectByNumber(
- obj->myDev,
- cp->parentId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
- else
- parent = NULL;
-
- if(parent)
- yaffs_AddObjectToDirectory(parent, obj);
-
- obj->chunkId = cp->chunkId;
- obj->variantType = cp->variantType;
- obj->deleted = cp->deleted;
- obj->softDeleted = cp->softDeleted;
- obj->unlinked = cp->unlinked;
- obj->fake = cp->fake;
- obj->renameAllowed = cp->renameAllowed;
- obj->unlinkAllowed = cp->unlinkAllowed;
- obj->serial = cp->serial;
- obj->nDataChunks = cp->nDataChunks;
-
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
- obj->variant.fileVariant.fileSize = cp->fileSizeOrEquivalentObjectId;
- else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
- obj->variant.hardLinkVariant.equivalentObjectId = cp->fileSizeOrEquivalentObjectId;
-
- if(obj->objectId >= YAFFS_NOBJECT_BUCKETS)
- obj->lazyLoaded = 1;
-}
-
-
-
-static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
- __u32 level, int chunkOffset)
-{
- int i;
- yaffs_Device *dev = in->myDev;
- int ok = 1;
- int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-
- if (tn) {
- if (level > 0) {
-
- for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
- if (tn->internal[i]) {
- ok = yaffs_CheckpointTnodeWorker(in,
- tn->internal[i],
- level - 1,
- (chunkOffset<<YAFFS_TNODES_INTERNAL_BITS) + i);
- }
- }
- } else if (level == 0) {
- __u32 baseOffset = chunkOffset << YAFFS_TNODES_LEVEL0_BITS;
- /* printf("write tnode at %d\n",baseOffset); */
- ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
- if(ok)
- ok = (yaffs_CheckpointWrite(dev,tn,nTnodeBytes) == nTnodeBytes);
- }
- }
-
- return ok;
-
-}
-
-static int yaffs_WriteCheckpointTnodes(yaffs_Object *obj)
-{
- __u32 endMarker = ~0;
- int ok = 1;
-
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE){
- ok = yaffs_CheckpointTnodeWorker(obj,
- obj->variant.fileVariant.top,
- obj->variant.fileVariant.topLevel,
- 0);
- if(ok)
- ok = (yaffs_CheckpointWrite(obj->myDev,&endMarker,sizeof(endMarker)) ==
- sizeof(endMarker));
- }
-
- return ok ? 1 : 0;
-}
-
-static int yaffs_ReadCheckpointTnodes(yaffs_Object *obj)
-{
- __u32 baseChunk;
- int ok = 1;
- yaffs_Device *dev = obj->myDev;
- yaffs_FileStructure *fileStructPtr = &obj->variant.fileVariant;
- yaffs_Tnode *tn;
- int nread = 0;
-
- ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-
- while(ok && (~baseChunk)){
- nread++;
- /* Read level 0 tnode */
-
-
- /* printf("read tnode at %d\n",baseChunk); */
- tn = yaffs_GetTnodeRaw(dev);
- if(tn)
- ok = (yaffs_CheckpointRead(dev,tn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8) ==
- (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
- else
- ok = 0;
-
- if(tn && ok){
- ok = yaffs_AddOrFindLevel0Tnode(dev,
- fileStructPtr,
- baseChunk,
- tn) ? 1 : 0;
-
- }
-
- if(ok)
- ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-
- }
-
- T(YAFFS_TRACE_CHECKPOINT,(
- TSTR("Checkpoint read tnodes %d records, last %d. ok %d" TENDSTR),
- nread,baseChunk,ok));
-
- return ok ? 1 : 0;
-}
-
-
-static int yaffs_WriteCheckpointObjects(yaffs_Device *dev)
-{
- yaffs_Object *obj;
- yaffs_CheckpointObject cp;
- int i;
- int ok = 1;
- struct list_head *lh;
-
-
- /* Iterate through the objects in each hash entry,
- * dumping them to the checkpointing stream.
- */
-
- for(i = 0; ok && i < YAFFS_NOBJECT_BUCKETS; i++){
- list_for_each(lh, &dev->objectBucket[i].list) {
- if (lh) {
- obj = list_entry(lh, yaffs_Object, hashLink);
- if (!obj->deferedFree) {
- yaffs_ObjectToCheckpointObject(&cp,obj);
- cp.structType = sizeof(cp);
-
- T(YAFFS_TRACE_CHECKPOINT,(
- TSTR("Checkpoint write object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
- cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
-
- ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-
- if(ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE){
- ok = yaffs_WriteCheckpointTnodes(obj);
- }
- }
- }
- }
- }
-
- /* Dump end of list */
- memset(&cp,0xFF,sizeof(yaffs_CheckpointObject));
- cp.structType = sizeof(cp);
-
- if(ok)
- ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-
- return ok ? 1 : 0;
-}
-
-static int yaffs_ReadCheckpointObjects(yaffs_Device *dev)
-{
- yaffs_Object *obj;
- yaffs_CheckpointObject cp;
- int ok = 1;
- int done = 0;
- yaffs_Object *hardList = NULL;
-
- while(ok && !done) {
- ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
- if(cp.structType != sizeof(cp)) {
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("struct size %d instead of %d ok %d"TENDSTR),
- cp.structType,sizeof(cp),ok));
- ok = 0;
- }
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
- cp.objectId,cp.parentId,cp.variantType,cp.chunkId));
-
- if(ok && cp.objectId == ~0)
- done = 1;
- else if(ok){
- obj = yaffs_FindOrCreateObjectByNumber(dev,cp.objectId, cp.variantType);
- if(obj) {
- yaffs_CheckpointObjectToObject(obj,&cp);
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
- ok = yaffs_ReadCheckpointTnodes(obj);
- } else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
- obj->hardLinks.next =
- (struct list_head *)
- hardList;
- hardList = obj;
- }
-
- }
- }
- }
-
- if(ok)
- yaffs_HardlinkFixup(dev,hardList);
-
- return ok ? 1 : 0;
-}
-
-static int yaffs_WriteCheckpointSum(yaffs_Device *dev)
-{
- __u32 checkpointSum;
- int ok;
-
- yaffs_GetCheckpointSum(dev,&checkpointSum);
-
- ok = (yaffs_CheckpointWrite(dev,&checkpointSum,sizeof(checkpointSum)) == sizeof(checkpointSum));
-
- if(!ok)
- return 0;
-
- return 1;
-}
-
-static int yaffs_ReadCheckpointSum(yaffs_Device *dev)
-{
- __u32 checkpointSum0;
- __u32 checkpointSum1;
- int ok;
-
- yaffs_GetCheckpointSum(dev,&checkpointSum0);
-
- ok = (yaffs_CheckpointRead(dev,&checkpointSum1,sizeof(checkpointSum1)) == sizeof(checkpointSum1));
-
- if(!ok)
- return 0;
-
- if(checkpointSum0 != checkpointSum1)
- return 0;
-
- return 1;
-}
-
-
-static int yaffs_WriteCheckpointData(yaffs_Device *dev)
-{
-
- int ok = 1;
-
- if(dev->skipCheckpointWrite || !dev->isYaffs2){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint write" TENDSTR)));
- ok = 0;
- }
-
- if(ok)
- ok = yaffs_CheckpointOpen(dev,1);
-
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
- ok = yaffs_WriteCheckpointValidityMarker(dev,1);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint device" TENDSTR)));
- ok = yaffs_WriteCheckpointDevice(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint objects" TENDSTR)));
- ok = yaffs_WriteCheckpointObjects(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
- ok = yaffs_WriteCheckpointValidityMarker(dev,0);
- }
-
- if(ok){
- ok = yaffs_WriteCheckpointSum(dev);
- }
-
-
- if(!yaffs_CheckpointClose(dev))
- ok = 0;
-
- if(ok)
- dev->isCheckpointed = 1;
- else
- dev->isCheckpointed = 0;
-
- return dev->isCheckpointed;
-}
-
-static int yaffs_ReadCheckpointData(yaffs_Device *dev)
-{
- int ok = 1;
-
- if(dev->skipCheckpointRead || !dev->isYaffs2){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint read" TENDSTR)));
- ok = 0;
- }
-
- if(ok)
- ok = yaffs_CheckpointOpen(dev,0); /* open for read */
-
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
- ok = yaffs_ReadCheckpointValidityMarker(dev,1);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint device" TENDSTR)));
- ok = yaffs_ReadCheckpointDevice(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint objects" TENDSTR)));
- ok = yaffs_ReadCheckpointObjects(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
- ok = yaffs_ReadCheckpointValidityMarker(dev,0);
- }
-
- if(ok){
- ok = yaffs_ReadCheckpointSum(dev);
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint checksum %d" TENDSTR),ok));
- }
-
- if(!yaffs_CheckpointClose(dev))
- ok = 0;
-
- if(ok)
- dev->isCheckpointed = 1;
- else
- dev->isCheckpointed = 0;
-
- return ok ? 1 : 0;
-
-}
-
-static void yaffs_InvalidateCheckpoint(yaffs_Device *dev)
-{
- if(dev->isCheckpointed ||
- dev->blocksInCheckpoint > 0){
- dev->isCheckpointed = 0;
- yaffs_CheckpointInvalidateStream(dev);
- if(dev->superBlock && dev->markSuperBlockDirty)
- dev->markSuperBlockDirty(dev->superBlock);
- }
-}
-
-
-int yaffs_CheckpointSave(yaffs_Device *dev)
-{
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("save entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-
- yaffs_VerifyObjects(dev);
- yaffs_VerifyBlocks(dev);
- yaffs_VerifyFreeChunks(dev);
-
- if(!dev->isCheckpointed) {
- yaffs_InvalidateCheckpoint(dev);
- yaffs_WriteCheckpointData(dev);
- }
-
- T(YAFFS_TRACE_ALWAYS,(TSTR("save exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-
- return dev->isCheckpointed;
-}
-
-int yaffs_CheckpointRestore(yaffs_Device *dev)
-{
- int retval;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-
- retval = yaffs_ReadCheckpointData(dev);
-
- if(dev->isCheckpointed){
- yaffs_VerifyObjects(dev);
- yaffs_VerifyBlocks(dev);
- yaffs_VerifyFreeChunks(dev);
- }
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-
- return retval;
-}
-
-/*--------------------- File read/write ------------------------
- * Read and write have very similar structures.
- * In general the read/write has three parts to it
- * An incomplete chunk to start with (if the read/write is not chunk-aligned)
- * Some complete chunks
- * An incomplete chunk to end off with
- *
- * Curve-balls: the first chunk might also be the last chunk.
- */
-
-int yaffs_ReadDataFromFile(yaffs_Object * in, __u8 * buffer, loff_t offset,
- int nBytes)
-{
-
- int chunk;
- int start;
- int nToCopy;
- int n = nBytes;
- int nDone = 0;
- yaffs_ChunkCache *cache;
-
- yaffs_Device *dev;
-
- dev = in->myDev;
-
- while (n > 0) {
- //chunk = offset / dev->nDataBytesPerChunk + 1;
- //start = offset % dev->nDataBytesPerChunk;
- yaffs_AddrToChunk(dev,offset,&chunk,&start);
- chunk++;
-
- /* OK now check for the curveball where the start and end are in
- * the same chunk.
- */
- if ((start + n) < dev->nDataBytesPerChunk) {
- nToCopy = n;
- } else {
- nToCopy = dev->nDataBytesPerChunk - start;
- }
-
- cache = yaffs_FindChunkCache(in, chunk);
-
- /* If the chunk is already in the cache or it is less than a whole chunk
- * then use the cache (if there is caching)
- * else bypass the cache.
- */
- if (cache || nToCopy != dev->nDataBytesPerChunk) {
- if (dev->nShortOpCaches > 0) {
-
- /* If we can't find the data in the cache, then load it up. */
-
- if (!cache) {
- cache = yaffs_GrabChunkCache(in->myDev);
- cache->object = in;
- cache->chunkId = chunk;
- cache->dirty = 0;
- cache->locked = 0;
- yaffs_ReadChunkDataFromObject(in, chunk,
- cache->
- data);
- cache->nBytes = 0;
- }
-
- yaffs_UseChunkCache(dev, cache, 0);
-
- cache->locked = 1;
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(buffer, &cache->data[start], nToCopy);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- cache->locked = 0;
- } else {
- /* Read into the local buffer then copy..*/
-
- __u8 *localBuffer =
- yaffs_GetTempBuffer(dev, __LINE__);
- yaffs_ReadChunkDataFromObject(in, chunk,
- localBuffer);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(buffer, &localBuffer[start], nToCopy);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- yaffs_ReleaseTempBuffer(dev, localBuffer,
- __LINE__);
- }
-
- } else {
-#ifdef CONFIG_YAFFS_WINCE
- __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
-
- /* Under WinCE can't do direct transfer. Need to use a local buffer.
- * This is because we otherwise screw up WinCE's memory mapper
- */
- yaffs_ReadChunkDataFromObject(in, chunk, localBuffer);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(buffer, localBuffer, dev->nDataBytesPerChunk);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
- yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
-#endif
-
-#else
- /* A full chunk. Read directly into the supplied buffer. */
- yaffs_ReadChunkDataFromObject(in, chunk, buffer);
-#endif
- }
-
- n -= nToCopy;
- offset += nToCopy;
- buffer += nToCopy;
- nDone += nToCopy;
-
- }
-
- return nDone;
-}
-
-int yaffs_WriteDataToFile(yaffs_Object * in, const __u8 * buffer, loff_t offset,
- int nBytes, int writeThrough)
-{
-
- int chunk;
- int start;
- int nToCopy;
- int n = nBytes;
- int nDone = 0;
- int nToWriteBack;
- int startOfWrite = offset;
- int chunkWritten = 0;
- int nBytesRead;
-
- yaffs_Device *dev;
-
- dev = in->myDev;
-
- while (n > 0 && chunkWritten >= 0) {
- //chunk = offset / dev->nDataBytesPerChunk + 1;
- //start = offset % dev->nDataBytesPerChunk;
- yaffs_AddrToChunk(dev,offset,&chunk,&start);
- chunk++;
-
- /* OK now check for the curveball where the start and end are in
- * the same chunk.
- */
-
- if ((start + n) < dev->nDataBytesPerChunk) {
- nToCopy = n;
-
- /* Now folks, to calculate how many bytes to write back....
- * If we're overwriting and not writing to then end of file then
- * we need to write back as much as was there before.
- */
-
- nBytesRead =
- in->variant.fileVariant.fileSize -
- ((chunk - 1) * dev->nDataBytesPerChunk);
-
- if (nBytesRead > dev->nDataBytesPerChunk) {
- nBytesRead = dev->nDataBytesPerChunk;
- }
-
- nToWriteBack =
- (nBytesRead >
- (start + n)) ? nBytesRead : (start + n);
-
- } else {
- nToCopy = dev->nDataBytesPerChunk - start;
- nToWriteBack = dev->nDataBytesPerChunk;
- }
-
- if (nToCopy != dev->nDataBytesPerChunk) {
- /* An incomplete start or end chunk (or maybe both start and end chunk) */
- if (dev->nShortOpCaches > 0) {
- yaffs_ChunkCache *cache;
- /* If we can't find the data in the cache, then load the cache */
- cache = yaffs_FindChunkCache(in, chunk);
-
- if (!cache
- && yaffs_CheckSpaceForAllocation(in->
- myDev)) {
- cache = yaffs_GrabChunkCache(in->myDev);
- cache->object = in;
- cache->chunkId = chunk;
- cache->dirty = 0;
- cache->locked = 0;
- yaffs_ReadChunkDataFromObject(in, chunk,
- cache->
- data);
- }
- else if(cache &&
- !cache->dirty &&
- !yaffs_CheckSpaceForAllocation(in->myDev)){
- /* Drop the cache if it was a read cache item and
- * no space check has been made for it.
- */
- cache = NULL;
- }
-
- if (cache) {
- yaffs_UseChunkCache(dev, cache, 1);
- cache->locked = 1;
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
-
- memcpy(&cache->data[start], buffer,
- nToCopy);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- cache->locked = 0;
- cache->nBytes = nToWriteBack;
-
- if (writeThrough) {
- chunkWritten =
- yaffs_WriteChunkDataToObject
- (cache->object,
- cache->chunkId,
- cache->data, cache->nBytes,
- 1);
- cache->dirty = 0;
- }
-
- } else {
- chunkWritten = -1; /* fail the write */
- }
- } else {
- /* An incomplete start or end chunk (or maybe both start and end chunk)
- * Read into the local buffer then copy, then copy over and write back.
- */
-
- __u8 *localBuffer =
- yaffs_GetTempBuffer(dev, __LINE__);
-
- yaffs_ReadChunkDataFromObject(in, chunk,
- localBuffer);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
-
- memcpy(&localBuffer[start], buffer, nToCopy);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- chunkWritten =
- yaffs_WriteChunkDataToObject(in, chunk,
- localBuffer,
- nToWriteBack,
- 0);
-
- yaffs_ReleaseTempBuffer(dev, localBuffer,
- __LINE__);
-
- }
-
- } else {
-
-#ifdef CONFIG_YAFFS_WINCE
- /* Under WinCE can't do direct transfer. Need to use a local buffer.
- * This is because we otherwise screw up WinCE's memory mapper
- */
- __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(localBuffer, buffer, dev->nDataBytesPerChunk);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- chunkWritten =
- yaffs_WriteChunkDataToObject(in, chunk, localBuffer,
- dev->nDataBytesPerChunk,
- 0);
- yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
-#else
- /* A full chunk. Write directly from the supplied buffer. */
- chunkWritten =
- yaffs_WriteChunkDataToObject(in, chunk, buffer,
- dev->nDataBytesPerChunk,
- 0);
-#endif
- /* Since we've overwritten the cached data, we better invalidate it. */
- yaffs_InvalidateChunkCache(in, chunk);
- }
-
- if (chunkWritten >= 0) {
- n -= nToCopy;
- offset += nToCopy;
- buffer += nToCopy;
- nDone += nToCopy;
- }
-
- }
-
- /* Update file object */
-
- if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize) {
- in->variant.fileVariant.fileSize = (startOfWrite + nDone);
- }
-
- in->dirty = 1;
-
- return nDone;
-}
-
-
-/* ---------------------- File resizing stuff ------------------ */
-
-static void yaffs_PruneResizedChunks(yaffs_Object * in, int newSize)
-{
-
- yaffs_Device *dev = in->myDev;
- int oldFileSize = in->variant.fileVariant.fileSize;
-
- int lastDel = 1 + (oldFileSize - 1) / dev->nDataBytesPerChunk;
-
- int startDel = 1 + (newSize + dev->nDataBytesPerChunk - 1) /
- dev->nDataBytesPerChunk;
- int i;
- int chunkId;
-
- /* Delete backwards so that we don't end up with holes if
- * power is lost part-way through the operation.
- */
- for (i = lastDel; i >= startDel; i--) {
- /* NB this could be optimised somewhat,
- * eg. could retrieve the tags and write them without
- * using yaffs_DeleteChunk
- */
-
- chunkId = yaffs_FindAndDeleteChunkInFile(in, i, NULL);
- if (chunkId > 0) {
- if (chunkId <
- (dev->internalStartBlock * dev->nChunksPerBlock)
- || chunkId >=
- ((dev->internalEndBlock +
- 1) * dev->nChunksPerBlock)) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("Found daft chunkId %d for %d" TENDSTR),
- chunkId, i));
- } else {
- in->nDataChunks--;
- yaffs_DeleteChunk(dev, chunkId, 1, __LINE__);
- }
- }
- }
-
-}
-
-int yaffs_ResizeFile(yaffs_Object * in, loff_t newSize)
-{
-
- int oldFileSize = in->variant.fileVariant.fileSize;
- int newSizeOfPartialChunk;
- int newFullChunks;
-
- yaffs_Device *dev = in->myDev;
-
- yaffs_AddrToChunk(dev, newSize, &newFullChunks, &newSizeOfPartialChunk);
-
- yaffs_FlushFilesChunkCache(in);
- yaffs_InvalidateWholeChunkCache(in);
-
- yaffs_CheckGarbageCollection(dev);
-
- if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
- return yaffs_GetFileSize(in);
- }
-
- if (newSize == oldFileSize) {
- return oldFileSize;
- }
-
- if (newSize < oldFileSize) {
-
- yaffs_PruneResizedChunks(in, newSize);
-
- if (newSizeOfPartialChunk != 0) {
- int lastChunk = 1 + newFullChunks;
-
- __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
-
- /* Got to read and rewrite the last chunk with its new size and zero pad */
- yaffs_ReadChunkDataFromObject(in, lastChunk,
- localBuffer);
-
- memset(localBuffer + newSizeOfPartialChunk, 0,
- dev->nDataBytesPerChunk - newSizeOfPartialChunk);
-
- yaffs_WriteChunkDataToObject(in, lastChunk, localBuffer,
- newSizeOfPartialChunk, 1);
-
- yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
- }
-
- in->variant.fileVariant.fileSize = newSize;
-
- yaffs_PruneFileStructure(dev, &in->variant.fileVariant);
- } else {
- /* newsSize > oldFileSize */
- in->variant.fileVariant.fileSize = newSize;
- }
-
-
-
- /* Write a new object header.
- * show we've shrunk the file, if need be
- * Do this only if the file is not in the deleted directories.
- */
- if (in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
- in->parent->objectId != YAFFS_OBJECTID_DELETED) {
- yaffs_UpdateObjectHeader(in, NULL, 0,
- (newSize < oldFileSize) ? 1 : 0, 0);
- }
-
- return YAFFS_OK;
-}
-
-loff_t yaffs_GetFileSize(yaffs_Object * obj)
-{
- obj = yaffs_GetEquivalentObject(obj);
-
- switch (obj->variantType) {
- case YAFFS_OBJECT_TYPE_FILE:
- return obj->variant.fileVariant.fileSize;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- return yaffs_strlen(obj->variant.symLinkVariant.alias);
- default:
- return 0;
- }
-}
-
-
-
-int yaffs_FlushFile(yaffs_Object * in, int updateTime)
-{
- int retVal;
- if (in->dirty) {
- yaffs_FlushFilesChunkCache(in);
- if (updateTime) {
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_WinFileTimeNow(in->win_mtime);
-#else
-
- in->yst_mtime = Y_CURRENT_TIME;
-
-#endif
- }
-
- retVal =
- (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
- 0) ? YAFFS_OK : YAFFS_FAIL;
- } else {
- retVal = YAFFS_OK;
- }
-
- return retVal;
-
-}
-
-static int yaffs_DoGenericObjectDeletion(yaffs_Object * in)
-{
-
- /* First off, invalidate the file's data in the cache, without flushing. */
- yaffs_InvalidateWholeChunkCache(in);
-
- if (in->myDev->isYaffs2 && (in->parent != in->myDev->deletedDir)) {
- /* Move to the unlinked directory so we have a record that it was deleted. */
- yaffs_ChangeObjectName(in, in->myDev->deletedDir,"deleted", 0, 0);
-
- }
-
- yaffs_RemoveObjectFromDirectory(in);
- yaffs_DeleteChunk(in->myDev, in->chunkId, 1, __LINE__);
- in->chunkId = -1;
-
- yaffs_FreeObject(in);
- return YAFFS_OK;
-
-}
-
-/* yaffs_DeleteFile deletes the whole file data
- * and the inode associated with the file.
- * It does not delete the links associated with the file.
- */
-static int yaffs_UnlinkFile(yaffs_Object * in)
-{
-
- int retVal;
- int immediateDeletion = 0;
-
- if (1) {
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
- if (!in->myInode) {
- immediateDeletion = 1;
-
- }
-#endif
-#else
- if (in->inUse <= 0) {
- immediateDeletion = 1;
-
- }
-#endif
- if (immediateDeletion) {
- retVal =
- yaffs_ChangeObjectName(in, in->myDev->deletedDir,
- "deleted", 0, 0);
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
- in->objectId));
- in->deleted = 1;
- in->myDev->nDeletedFiles++;
- if (0 && in->myDev->isYaffs2) {
- yaffs_ResizeFile(in, 0);
- }
- yaffs_SoftDeleteFile(in);
- } else {
- retVal =
- yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
- "unlinked", 0, 0);
- }
-
- }
- return retVal;
-}
-
-int yaffs_DeleteFile(yaffs_Object * in)
-{
- int retVal = YAFFS_OK;
-
- if (in->nDataChunks > 0) {
- /* Use soft deletion if there is data in the file */
- if (!in->unlinked) {
- retVal = yaffs_UnlinkFile(in);
- }
- if (retVal == YAFFS_OK && in->unlinked && !in->deleted) {
- in->deleted = 1;
- in->myDev->nDeletedFiles++;
- yaffs_SoftDeleteFile(in);
- }
- return in->deleted ? YAFFS_OK : YAFFS_FAIL;
- } else {
- /* The file has no data chunks so we toss it immediately */
- yaffs_FreeTnode(in->myDev, in->variant.fileVariant.top);
- in->variant.fileVariant.top = NULL;
- yaffs_DoGenericObjectDeletion(in);
-
- return YAFFS_OK;
- }
-}
-
-static int yaffs_DeleteDirectory(yaffs_Object * in)
-{
- /* First check that the directory is empty. */
- if (list_empty(&in->variant.directoryVariant.children)) {
- return yaffs_DoGenericObjectDeletion(in);
- }
-
- return YAFFS_FAIL;
-
-}
-
-static int yaffs_DeleteSymLink(yaffs_Object * in)
-{
- YFREE(in->variant.symLinkVariant.alias);
-
- return yaffs_DoGenericObjectDeletion(in);
-}
-
-static int yaffs_DeleteHardLink(yaffs_Object * in)
-{
- /* remove this hardlink from the list assocaited with the equivalent
- * object
- */
- list_del(&in->hardLinks);
- return yaffs_DoGenericObjectDeletion(in);
-}
-
-static void yaffs_DestroyObject(yaffs_Object * obj)
-{
- switch (obj->variantType) {
- case YAFFS_OBJECT_TYPE_FILE:
- yaffs_DeleteFile(obj);
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- yaffs_DeleteDirectory(obj);
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- yaffs_DeleteSymLink(obj);
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- yaffs_DeleteHardLink(obj);
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- yaffs_DoGenericObjectDeletion(obj);
- break;
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- break; /* should not happen. */
- }
-}
-
-static int yaffs_UnlinkWorker(yaffs_Object * obj)
-{
-
- if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
- return yaffs_DeleteHardLink(obj);
- } else if (!list_empty(&obj->hardLinks)) {
- /* Curve ball: We're unlinking an object that has a hardlink.
- *
- * This problem arises because we are not strictly following
- * The Linux link/inode model.
- *
- * We can't really delete the object.
- * Instead, we do the following:
- * - Select a hardlink.
- * - Unhook it from the hard links
- * - Unhook it from its parent directory (so that the rename can work)
- * - Rename the object to the hardlink's name.
- * - Delete the hardlink
- */
-
- yaffs_Object *hl;
- int retVal;
- YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
-
- hl = list_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
-
- list_del_init(&hl->hardLinks);
- list_del_init(&hl->siblings);
-
- yaffs_GetObjectName(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
-
- retVal = yaffs_ChangeObjectName(obj, hl->parent, name, 0, 0);
-
- if (retVal == YAFFS_OK) {
- retVal = yaffs_DoGenericObjectDeletion(hl);
- }
- return retVal;
-
- } else {
- switch (obj->variantType) {
- case YAFFS_OBJECT_TYPE_FILE:
- return yaffs_UnlinkFile(obj);
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- return yaffs_DeleteDirectory(obj);
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- return yaffs_DeleteSymLink(obj);
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- return yaffs_DoGenericObjectDeletion(obj);
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- default:
- return YAFFS_FAIL;
- }
- }
-}
-
-
-static int yaffs_UnlinkObject( yaffs_Object *obj)
-{
-
- if (obj && obj->unlinkAllowed) {
- return yaffs_UnlinkWorker(obj);
- }
-
- return YAFFS_FAIL;
-
-}
-int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name)
-{
- yaffs_Object *obj;
-
- obj = yaffs_FindObjectByName(dir, name);
- return yaffs_UnlinkObject(obj);
-}
-
-/*----------------------- Initialisation Scanning ---------------------- */
-
-static void yaffs_HandleShadowedObject(yaffs_Device * dev, int objId,
- int backwardScanning)
-{
- yaffs_Object *obj;
-
- if (!backwardScanning) {
- /* Handle YAFFS1 forward scanning case
- * For YAFFS1 we always do the deletion
- */
-
- } else {
- /* Handle YAFFS2 case (backward scanning)
- * If the shadowed object exists then ignore.
- */
- if (yaffs_FindObjectByNumber(dev, objId)) {
- return;
- }
- }
-
- /* Let's create it (if it does not exist) assuming it is a file so that it can do shrinking etc.
- * We put it in unlinked dir to be cleaned up after the scanning
- */
- obj =
- yaffs_FindOrCreateObjectByNumber(dev, objId,
- YAFFS_OBJECT_TYPE_FILE);
- yaffs_AddObjectToDirectory(dev->unlinkedDir, obj);
- obj->variant.fileVariant.shrinkSize = 0;
- obj->valid = 1; /* So that we don't read any other info for this file */
-
-}
-
-typedef struct {
- int seq;
- int block;
-} yaffs_BlockIndex;
-
-
-static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList)
-{
- yaffs_Object *hl;
- yaffs_Object *in;
-
- while (hardList) {
- hl = hardList;
- hardList = (yaffs_Object *) (hardList->hardLinks.next);
-
- in = yaffs_FindObjectByNumber(dev,
- hl->variant.hardLinkVariant.
- equivalentObjectId);
-
- if (in) {
- /* Add the hardlink pointers */
- hl->variant.hardLinkVariant.equivalentObject = in;
- list_add(&hl->hardLinks, &in->hardLinks);
- } else {
- /* Todo Need to report/handle this better.
- * Got a problem... hardlink to a non-existant object
- */
- hl->variant.hardLinkVariant.equivalentObject = NULL;
- INIT_LIST_HEAD(&hl->hardLinks);
-
- }
-
- }
-
-}
-
-
-
-
-
-static int ybicmp(const void *a, const void *b){
- register int aseq = ((yaffs_BlockIndex *)a)->seq;
- register int bseq = ((yaffs_BlockIndex *)b)->seq;
- register int ablock = ((yaffs_BlockIndex *)a)->block;
- register int bblock = ((yaffs_BlockIndex *)b)->block;
- if( aseq == bseq )
- return ablock - bblock;
- else
- return aseq - bseq;
-
-}
-
-static int yaffs_Scan(yaffs_Device * dev)
-{
- yaffs_ExtendedTags tags;
- int blk;
- int blockIterator;
- int startIterator;
- int endIterator;
- int nBlocksToScan = 0;
- int result;
-
- int chunk;
- int c;
- int deleted;
- yaffs_BlockState state;
- yaffs_Object *hardList = NULL;
- yaffs_BlockInfo *bi;
- int sequenceNumber;
- yaffs_ObjectHeader *oh;
- yaffs_Object *in;
- yaffs_Object *parent;
- int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-
- int alloc_failed = 0;
-
-
- __u8 *chunkData;
-
- yaffs_BlockIndex *blockIndex = NULL;
-
- if (dev->isYaffs2) {
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_Scan is not for YAFFS2!" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- //TODO Throw all the yaffs2 stuuf out of yaffs_Scan since it is only for yaffs1 format.
-
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_Scan starts intstartblk %d intendblk %d..." TENDSTR),
- dev->internalStartBlock, dev->internalEndBlock));
-
- chunkData = yaffs_GetTempBuffer(dev, __LINE__);
-
- dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
-
- if (dev->isYaffs2) {
- blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
- if(!blockIndex)
- return YAFFS_FAIL;
- }
-
- /* Scan all the blocks to determine their state */
- for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
- bi = yaffs_GetBlockInfo(dev, blk);
- yaffs_ClearChunkBits(dev, blk);
- bi->pagesInUse = 0;
- bi->softDeletions = 0;
-
- yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
-
- bi->blockState = state;
- bi->sequenceNumber = sequenceNumber;
-
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
- state, sequenceNumber));
-
- if (state == YAFFS_BLOCK_STATE_DEAD) {
- T(YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("block %d is bad" TENDSTR), blk));
- } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block empty " TENDSTR)));
- dev->nErasedBlocks++;
- dev->nFreeChunks += dev->nChunksPerBlock;
- } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
-
- /* Determine the highest sequence number */
- if (dev->isYaffs2 &&
- sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
- sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
-
- blockIndex[nBlocksToScan].seq = sequenceNumber;
- blockIndex[nBlocksToScan].block = blk;
-
- nBlocksToScan++;
-
- if (sequenceNumber >= dev->sequenceNumber) {
- dev->sequenceNumber = sequenceNumber;
- }
- } else if (dev->isYaffs2) {
- /* TODO: Nasty sequence number! */
- T(YAFFS_TRACE_SCAN,
- (TSTR
- ("Block scanning block %d has bad sequence number %d"
- TENDSTR), blk, sequenceNumber));
-
- }
- }
- }
-
- /* Sort the blocks
- * Dungy old bubble sort for now...
- */
- if (dev->isYaffs2) {
- yaffs_BlockIndex temp;
- int i;
- int j;
-
- for (i = 0; i < nBlocksToScan; i++)
- for (j = i + 1; j < nBlocksToScan; j++)
- if (blockIndex[i].seq > blockIndex[j].seq) {
- temp = blockIndex[j];
- blockIndex[j] = blockIndex[i];
- blockIndex[i] = temp;
- }
- }
-
- /* Now scan the blocks looking at the data. */
- if (dev->isYaffs2) {
- startIterator = 0;
- endIterator = nBlocksToScan - 1;
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
- } else {
- startIterator = dev->internalStartBlock;
- endIterator = dev->internalEndBlock;
- }
-
- /* For each block.... */
- for (blockIterator = startIterator; !alloc_failed && blockIterator <= endIterator;
- blockIterator++) {
-
- if (dev->isYaffs2) {
- /* get the block to scan in the correct order */
- blk = blockIndex[blockIterator].block;
- } else {
- blk = blockIterator;
- }
-
- bi = yaffs_GetBlockInfo(dev, blk);
- state = bi->blockState;
-
- deleted = 0;
-
- /* For each chunk in each block that needs scanning....*/
- for (c = 0; !alloc_failed && c < dev->nChunksPerBlock &&
- state == YAFFS_BLOCK_STATE_NEEDS_SCANNING; c++) {
- /* Read the tags and decide what to do */
- chunk = blk * dev->nChunksPerBlock + c;
-
- result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
- &tags);
-
- /* Let's have a good look at this chunk... */
-
- if (!dev->isYaffs2 && tags.chunkDeleted) {
- /* YAFFS1 only...
- * A deleted chunk
- */
- deleted++;
- dev->nFreeChunks++;
- /*T((" %d %d deleted\n",blk,c)); */
- } else if (!tags.chunkUsed) {
- /* An unassigned chunk in the block
- * This means that either the block is empty or
- * this is the one being allocated from
- */
-
- if (c == 0) {
- /* We're looking at the first chunk in the block so the block is unused */
- state = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- } else {
- /* this is the block being allocated from */
- T(YAFFS_TRACE_SCAN,
- (TSTR
- (" Allocating from %d %d" TENDSTR),
- blk, c));
- state = YAFFS_BLOCK_STATE_ALLOCATING;
- dev->allocationBlock = blk;
- dev->allocationPage = c;
- dev->allocationBlockFinder = blk;
- /* Set it to here to encourage the allocator to go forth from here. */
-
- /* Yaffs2 sanity check:
- * This should be the one with the highest sequence number
- */
- if (dev->isYaffs2
- && (dev->sequenceNumber !=
- bi->sequenceNumber)) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs: Allocation block %d was not highest sequence id:"
- " block seq = %d, dev seq = %d"
- TENDSTR), blk,bi->sequenceNumber,dev->sequenceNumber));
- }
- }
-
- dev->nFreeChunks += (dev->nChunksPerBlock - c);
- } else if (tags.chunkId > 0) {
- /* chunkId > 0 so it is a data chunk... */
- unsigned int endpos;
-
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- in = yaffs_FindOrCreateObjectByNumber(dev,
- tags.
- objectId,
- YAFFS_OBJECT_TYPE_FILE);
- /* PutChunkIntoFile checks for a clash (two data chunks with
- * the same chunkId).
- */
-
- if(!in)
- alloc_failed = 1;
-
- if(in){
- if(!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk,1))
- alloc_failed = 1;
- }
-
- endpos =
- (tags.chunkId - 1) * dev->nDataBytesPerChunk +
- tags.byteCount;
- if (in &&
- in->variantType == YAFFS_OBJECT_TYPE_FILE
- && in->variant.fileVariant.scannedFileSize <
- endpos) {
- in->variant.fileVariant.
- scannedFileSize = endpos;
- if (!dev->useHeaderFileSize) {
- in->variant.fileVariant.
- fileSize =
- in->variant.fileVariant.
- scannedFileSize;
- }
-
- }
- /* T((" %d %d data %d %d\n",blk,c,tags.objectId,tags.chunkId)); */
- } else {
- /* chunkId == 0, so it is an ObjectHeader.
- * Thus, we read in the object header and make the object
- */
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk,
- chunkData,
- NULL);
-
- oh = (yaffs_ObjectHeader *) chunkData;
-
- in = yaffs_FindObjectByNumber(dev,
- tags.objectId);
- if (in && in->variantType != oh->type) {
- /* This should not happen, but somehow
- * Wev'e ended up with an objectId that has been reused but not yet
- * deleted, and worse still it has changed type. Delete the old object.
- */
-
- yaffs_DestroyObject(in);
-
- in = 0;
- }
-
- in = yaffs_FindOrCreateObjectByNumber(dev,
- tags.
- objectId,
- oh->type);
-
- if(!in)
- alloc_failed = 1;
-
- if (in && oh->shadowsObject > 0) {
- yaffs_HandleShadowedObject(dev,
- oh->
- shadowsObject,
- 0);
- }
-
- if (in && in->valid) {
- /* We have already filled this one. We have a duplicate and need to resolve it. */
-
- unsigned existingSerial = in->serial;
- unsigned newSerial = tags.serialNumber;
-
- if (dev->isYaffs2 ||
- ((existingSerial + 1) & 3) ==
- newSerial) {
- /* Use new one - destroy the exisiting one */
- yaffs_DeleteChunk(dev,
- in->chunkId,
- 1, __LINE__);
- in->valid = 0;
- } else {
- /* Use existing - destroy this one. */
- yaffs_DeleteChunk(dev, chunk, 1,
- __LINE__);
- }
- }
-
- if (in && !in->valid &&
- (tags.objectId == YAFFS_OBJECTID_ROOT ||
- tags.objectId == YAFFS_OBJECTID_LOSTNFOUND)) {
- /* We only load some info, don't fiddle with directory structure */
- in->valid = 1;
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-#endif
- in->chunkId = chunk;
-
- } else if (in && !in->valid) {
- /* we need to load this info */
-
- in->valid = 1;
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-#endif
- in->chunkId = chunk;
-
- yaffs_SetObjectName(in, oh->name);
- in->dirty = 0;
-
- /* directory stuff...
- * hook up to parent
- */
-
- parent =
- yaffs_FindOrCreateObjectByNumber
- (dev, oh->parentObjectId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
- if (parent->variantType ==
- YAFFS_OBJECT_TYPE_UNKNOWN) {
- /* Set up as a directory */
- parent->variantType =
- YAFFS_OBJECT_TYPE_DIRECTORY;
- INIT_LIST_HEAD(&parent->variant.
- directoryVariant.
- children);
- } else if (parent->variantType !=
- YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- /* Hoosterman, another problem....
- * We're trying to use a non-directory as a directory
- */
-
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: attempting to use non-directory as"
- " a directory in scan. Put in lost+found."
- TENDSTR)));
- parent = dev->lostNFoundDir;
- }
-
- yaffs_AddObjectToDirectory(parent, in);
-
- if (0 && (parent == dev->deletedDir ||
- parent == dev->unlinkedDir)) {
- in->deleted = 1; /* If it is unlinked at start up then it wants deleting */
- dev->nDeletedFiles++;
- }
- /* Note re hardlinks.
- * Since we might scan a hardlink before its equivalent object is scanned
- * we put them all in a list.
- * After scanning is complete, we should have all the objects, so we run through this
- * list and fix up all the chains.
- */
-
- switch (in->variantType) {
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* Todo got a problem */
- break;
- case YAFFS_OBJECT_TYPE_FILE:
- if (dev->isYaffs2
- && oh->isShrink) {
- /* Prune back the shrunken chunks */
- yaffs_PruneResizedChunks
- (in, oh->fileSize);
- /* Mark the block as having a shrinkHeader */
- bi->hasShrinkHeader = 1;
- }
-
- if (dev->useHeaderFileSize)
-
- in->variant.fileVariant.
- fileSize =
- oh->fileSize;
-
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- in->variant.hardLinkVariant.
- equivalentObjectId =
- oh->equivalentObjectId;
- in->hardLinks.next =
- (struct list_head *)
- hardList;
- hardList = in;
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- in->variant.symLinkVariant.alias =
- yaffs_CloneString(oh->alias);
- if(!in->variant.symLinkVariant.alias)
- alloc_failed = 1;
- break;
- }
-
- if (parent == dev->deletedDir) {
- yaffs_DestroyObject(in);
- bi->hasShrinkHeader = 1;
- }
- }
- }
- }
-
- if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
- /* If we got this far while scanning, then the block is fully allocated.*/
- state = YAFFS_BLOCK_STATE_FULL;
- }
-
- bi->blockState = state;
-
- /* Now let's see if it was dirty */
- if (bi->pagesInUse == 0 &&
- !bi->hasShrinkHeader &&
- bi->blockState == YAFFS_BLOCK_STATE_FULL) {
- yaffs_BlockBecameDirty(dev, blk);
- }
-
- }
-
- if (blockIndex) {
- YFREE(blockIndex);
- }
-
-
- /* Ok, we've done all the scanning.
- * Fix up the hard link chains.
- * We should now have scanned all the objects, now it's time to add these
- * hardlinks.
- */
-
- yaffs_HardlinkFixup(dev,hardList);
-
- /* Handle the unlinked files. Since they were left in an unlinked state we should
- * just delete them.
- */
- {
- struct list_head *i;
- struct list_head *n;
-
- yaffs_Object *l;
- /* Soft delete all the unlinked files */
- list_for_each_safe(i, n,
- &dev->unlinkedDir->variant.directoryVariant.
- children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- yaffs_DestroyObject(l);
- }
- }
- }
-
- yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-
- if(alloc_failed){
- return YAFFS_FAIL;
- }
-
- T(YAFFS_TRACE_SCAN, (TSTR("yaffs_Scan ends" TENDSTR)));
-
-
- return YAFFS_OK;
-}
-
-static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in)
-{
- __u8 *chunkData;
- yaffs_ObjectHeader *oh;
- yaffs_Device *dev = in->myDev;
- yaffs_ExtendedTags tags;
- int result;
- int alloc_failed = 0;
-
- if(!in)
- return;
-
-#if 0
- T(YAFFS_TRACE_SCAN,(TSTR("details for object %d %s loaded" TENDSTR),
- in->objectId,
- in->lazyLoaded ? "not yet" : "already"));
-#endif
-
- if(in->lazyLoaded){
- in->lazyLoaded = 0;
- chunkData = yaffs_GetTempBuffer(dev, __LINE__);
-
- result = yaffs_ReadChunkWithTagsFromNAND(dev,in->chunkId,chunkData,&tags);
- oh = (yaffs_ObjectHeader *) chunkData;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-
-#endif
- yaffs_SetObjectName(in, oh->name);
-
- if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK){
- in->variant.symLinkVariant.alias =
- yaffs_CloneString(oh->alias);
- if(!in->variant.symLinkVariant.alias)
- alloc_failed = 1; /* Not returned to caller */
- }
-
- yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
- }
-}
-
-static int yaffs_ScanBackwards(yaffs_Device * dev)
-{
- yaffs_ExtendedTags tags;
- int blk;
- int blockIterator;
- int startIterator;
- int endIterator;
- int nBlocksToScan = 0;
-
- int chunk;
- int result;
- int c;
- int deleted;
- yaffs_BlockState state;
- yaffs_Object *hardList = NULL;
- yaffs_BlockInfo *bi;
- int sequenceNumber;
- yaffs_ObjectHeader *oh;
- yaffs_Object *in;
- yaffs_Object *parent;
- int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
- int itsUnlinked;
- __u8 *chunkData;
-
- int fileSize;
- int isShrink;
- int foundChunksInBlock;
- int equivalentObjectId;
- int alloc_failed = 0;
-
-
- yaffs_BlockIndex *blockIndex = NULL;
- int altBlockIndex = 0;
-
- if (!dev->isYaffs2) {
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_ScanBackwards is only for YAFFS2!" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- T(YAFFS_TRACE_SCAN,
- (TSTR
- ("yaffs_ScanBackwards starts intstartblk %d intendblk %d..."
- TENDSTR), dev->internalStartBlock, dev->internalEndBlock));
-
-
- dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
-
- blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
-
- if(!blockIndex) {
- blockIndex = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockIndex));
- altBlockIndex = 1;
- }
-
- if(!blockIndex) {
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_Scan() could not allocate block index!" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- dev->blocksInCheckpoint = 0;
-
- chunkData = yaffs_GetTempBuffer(dev, __LINE__);
-
- /* Scan all the blocks to determine their state */
- for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
- bi = yaffs_GetBlockInfo(dev, blk);
- yaffs_ClearChunkBits(dev, blk);
- bi->pagesInUse = 0;
- bi->softDeletions = 0;
-
- yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
-
- bi->blockState = state;
- bi->sequenceNumber = sequenceNumber;
-
- if(bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
- bi->blockState = state = YAFFS_BLOCK_STATE_CHECKPOINT;
-
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
- state, sequenceNumber));
-
-
- if(state == YAFFS_BLOCK_STATE_CHECKPOINT){
- dev->blocksInCheckpoint++;
-
- } else if (state == YAFFS_BLOCK_STATE_DEAD) {
- T(YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("block %d is bad" TENDSTR), blk));
- } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block empty " TENDSTR)));
- dev->nErasedBlocks++;
- dev->nFreeChunks += dev->nChunksPerBlock;
- } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
-
- /* Determine the highest sequence number */
- if (dev->isYaffs2 &&
- sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
- sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
-
- blockIndex[nBlocksToScan].seq = sequenceNumber;
- blockIndex[nBlocksToScan].block = blk;
-
- nBlocksToScan++;
-
- if (sequenceNumber >= dev->sequenceNumber) {
- dev->sequenceNumber = sequenceNumber;
- }
- } else if (dev->isYaffs2) {
- /* TODO: Nasty sequence number! */
- T(YAFFS_TRACE_SCAN,
- (TSTR
- ("Block scanning block %d has bad sequence number %d"
- TENDSTR), blk, sequenceNumber));
-
- }
- }
- }
-
- T(YAFFS_TRACE_SCAN,
- (TSTR("%d blocks to be sorted..." TENDSTR), nBlocksToScan));
-
-
-
- YYIELD();
-
- /* Sort the blocks */
-#ifndef CONFIG_YAFFS_USE_OWN_SORT
- {
- /* Use qsort now. */
- yaffs_qsort(blockIndex, nBlocksToScan, sizeof(yaffs_BlockIndex), ybicmp);
- }
-#else
- {
- /* Dungy old bubble sort... */
-
- yaffs_BlockIndex temp;
- int i;
- int j;
-
- for (i = 0; i < nBlocksToScan; i++)
- for (j = i + 1; j < nBlocksToScan; j++)
- if (blockIndex[i].seq > blockIndex[j].seq) {
- temp = blockIndex[j];
- blockIndex[j] = blockIndex[i];
- blockIndex[i] = temp;
- }
- }
-#endif
-
- YYIELD();
-
- T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-
- /* Now scan the blocks looking at the data. */
- startIterator = 0;
- endIterator = nBlocksToScan - 1;
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
-
- /* For each block.... backwards */
- for (blockIterator = endIterator; !alloc_failed && blockIterator >= startIterator;
- blockIterator--) {
- /* Cooperative multitasking! This loop can run for so
- long that watchdog timers expire. */
- YYIELD();
-
- /* get the block to scan in the correct order */
- blk = blockIndex[blockIterator].block;
-
- bi = yaffs_GetBlockInfo(dev, blk);
-
-
- state = bi->blockState;
-
- deleted = 0;
-
- /* For each chunk in each block that needs scanning.... */
- foundChunksInBlock = 0;
- for (c = dev->nChunksPerBlock - 1;
- !alloc_failed && c >= 0 &&
- (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
- state == YAFFS_BLOCK_STATE_ALLOCATING); c--) {
- /* Scan backwards...
- * Read the tags and decide what to do
- */
-
- chunk = blk * dev->nChunksPerBlock + c;
-
- result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
- &tags);
-
- /* Let's have a good look at this chunk... */
-
- if (!tags.chunkUsed) {
- /* An unassigned chunk in the block.
- * If there are used chunks after this one, then
- * it is a chunk that was skipped due to failing the erased
- * check. Just skip it so that it can be deleted.
- * But, more typically, We get here when this is an unallocated
- * chunk and his means that either the block is empty or
- * this is the one being allocated from
- */
-
- if(foundChunksInBlock)
- {
- /* This is a chunk that was skipped due to failing the erased check */
-
- } else if (c == 0) {
- /* We're looking at the first chunk in the block so the block is unused */
- state = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- } else {
- if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
- state == YAFFS_BLOCK_STATE_ALLOCATING) {
- if(dev->sequenceNumber == bi->sequenceNumber) {
- /* this is the block being allocated from */
-
- T(YAFFS_TRACE_SCAN,
- (TSTR
- (" Allocating from %d %d"
- TENDSTR), blk, c));
-
- state = YAFFS_BLOCK_STATE_ALLOCATING;
- dev->allocationBlock = blk;
- dev->allocationPage = c;
- dev->allocationBlockFinder = blk;
- }
- else {
- /* This is a partially written block that is not
- * the current allocation block. This block must have
- * had a write failure, so set up for retirement.
- */
-
- bi->needsRetiring = 1;
- bi->gcPrioritise = 1;
-
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("Partially written block %d being set for retirement" TENDSTR),
- blk));
- }
-
- }
-
- }
-
- dev->nFreeChunks++;
-
- } else if (tags.chunkId > 0) {
- /* chunkId > 0 so it is a data chunk... */
- unsigned int endpos;
- __u32 chunkBase =
- (tags.chunkId - 1) * dev->nDataBytesPerChunk;
-
- foundChunksInBlock = 1;
-
-
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- in = yaffs_FindOrCreateObjectByNumber(dev,
- tags.
- objectId,
- YAFFS_OBJECT_TYPE_FILE);
- if(!in){
- /* Out of memory */
- alloc_failed = 1;
- }
-
- if (in &&
- in->variantType == YAFFS_OBJECT_TYPE_FILE
- && chunkBase <
- in->variant.fileVariant.shrinkSize) {
- /* This has not been invalidated by a resize */
- if(!yaffs_PutChunkIntoFile(in, tags.chunkId,
- chunk, -1)){
- alloc_failed = 1;
- }
-
- /* File size is calculated by looking at the data chunks if we have not
- * seen an object header yet. Stop this practice once we find an object header.
- */
- endpos =
- (tags.chunkId -
- 1) * dev->nDataBytesPerChunk +
- tags.byteCount;
-
- if (!in->valid && /* have not got an object header yet */
- in->variant.fileVariant.
- scannedFileSize < endpos) {
- in->variant.fileVariant.
- scannedFileSize = endpos;
- in->variant.fileVariant.
- fileSize =
- in->variant.fileVariant.
- scannedFileSize;
- }
-
- } else if(in) {
- /* This chunk has been invalidated by a resize, so delete */
- yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
-
- }
- } else {
- /* chunkId == 0, so it is an ObjectHeader.
- * Thus, we read in the object header and make the object
- */
- foundChunksInBlock = 1;
-
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- oh = NULL;
- in = NULL;
-
- if (tags.extraHeaderInfoAvailable) {
- in = yaffs_FindOrCreateObjectByNumber
- (dev, tags.objectId,
- tags.extraObjectType);
- }
-
- if (!in ||
-#ifdef CONFIG_YAFFS_DISABLE_LAZY_LOAD
- !in->valid ||
-#endif
- tags.extraShadows ||
- (!in->valid &&
- (tags.objectId == YAFFS_OBJECTID_ROOT ||
- tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))
- ) {
-
- /* If we don't have valid info then we need to read the chunk
- * TODO In future we can probably defer reading the chunk and
- * living with invalid data until needed.
- */
-
- result = yaffs_ReadChunkWithTagsFromNAND(dev,
- chunk,
- chunkData,
- NULL);
-
- oh = (yaffs_ObjectHeader *) chunkData;
-
- if (!in)
- in = yaffs_FindOrCreateObjectByNumber(dev, tags.objectId, oh->type);
-
- }
-
- if (!in) {
- /* TODO Hoosterman we have a problem! */
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: Could not make object for object %d "
- "at chunk %d during scan"
- TENDSTR), tags.objectId, chunk));
-
- }
-
- if (in->valid) {
- /* We have already filled this one.
- * We have a duplicate that will be discarded, but
- * we first have to suck out resize info if it is a file.
- */
-
- if ((in->variantType == YAFFS_OBJECT_TYPE_FILE) &&
- ((oh &&
- oh-> type == YAFFS_OBJECT_TYPE_FILE)||
- (tags.extraHeaderInfoAvailable &&
- tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))
- ) {
- __u32 thisSize =
- (oh) ? oh->fileSize : tags.
- extraFileLength;
- __u32 parentObjectId =
- (oh) ? oh->
- parentObjectId : tags.
- extraParentObjectId;
- unsigned isShrink =
- (oh) ? oh->isShrink : tags.
- extraIsShrinkHeader;
-
- /* If it is deleted (unlinked at start also means deleted)
- * we treat the file size as being zeroed at this point.
- */
- if (parentObjectId ==
- YAFFS_OBJECTID_DELETED
- || parentObjectId ==
- YAFFS_OBJECTID_UNLINKED) {
- thisSize = 0;
- isShrink = 1;
- }
-
- if (isShrink &&
- in->variant.fileVariant.
- shrinkSize > thisSize) {
- in->variant.fileVariant.
- shrinkSize =
- thisSize;
- }
-
- if (isShrink) {
- bi->hasShrinkHeader = 1;
- }
-
- }
- /* Use existing - destroy this one. */
- yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
-
- }
-
- if (!in->valid &&
- (tags.objectId == YAFFS_OBJECTID_ROOT ||
- tags.objectId ==
- YAFFS_OBJECTID_LOSTNFOUND)) {
- /* We only load some info, don't fiddle with directory structure */
- in->valid = 1;
-
- if(oh) {
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-
-#endif
- } else {
- in->variantType = tags.extraObjectType;
- in->lazyLoaded = 1;
- }
-
- in->chunkId = chunk;
-
- } else if (!in->valid) {
- /* we need to load this info */
-
- in->valid = 1;
- in->chunkId = chunk;
-
- if(oh) {
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-#endif
-
- if (oh->shadowsObject > 0)
- yaffs_HandleShadowedObject(dev,
- oh->
- shadowsObject,
- 1);
-
-
- yaffs_SetObjectName(in, oh->name);
- parent =
- yaffs_FindOrCreateObjectByNumber
- (dev, oh->parentObjectId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
-
- fileSize = oh->fileSize;
- isShrink = oh->isShrink;
- equivalentObjectId = oh->equivalentObjectId;
-
- }
- else {
- in->variantType = tags.extraObjectType;
- parent =
- yaffs_FindOrCreateObjectByNumber
- (dev, tags.extraParentObjectId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
- fileSize = tags.extraFileLength;
- isShrink = tags.extraIsShrinkHeader;
- equivalentObjectId = tags.extraEquivalentObjectId;
- in->lazyLoaded = 1;
-
- }
- in->dirty = 0;
-
- /* directory stuff...
- * hook up to parent
- */
-
- if (parent->variantType ==
- YAFFS_OBJECT_TYPE_UNKNOWN) {
- /* Set up as a directory */
- parent->variantType =
- YAFFS_OBJECT_TYPE_DIRECTORY;
- INIT_LIST_HEAD(&parent->variant.
- directoryVariant.
- children);
- } else if (parent->variantType !=
- YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- /* Hoosterman, another problem....
- * We're trying to use a non-directory as a directory
- */
-
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: attempting to use non-directory as"
- " a directory in scan. Put in lost+found."
- TENDSTR)));
- parent = dev->lostNFoundDir;
- }
-
- yaffs_AddObjectToDirectory(parent, in);
-
- itsUnlinked = (parent == dev->deletedDir) ||
- (parent == dev->unlinkedDir);
-
- if (isShrink) {
- /* Mark the block as having a shrinkHeader */
- bi->hasShrinkHeader = 1;
- }
-
- /* Note re hardlinks.
- * Since we might scan a hardlink before its equivalent object is scanned
- * we put them all in a list.
- * After scanning is complete, we should have all the objects, so we run
- * through this list and fix up all the chains.
- */
-
- switch (in->variantType) {
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* Todo got a problem */
- break;
- case YAFFS_OBJECT_TYPE_FILE:
-
- if (in->variant.fileVariant.
- scannedFileSize < fileSize) {
- /* This covers the case where the file size is greater
- * than where the data is
- * This will happen if the file is resized to be larger
- * than its current data extents.
- */
- in->variant.fileVariant.fileSize = fileSize;
- in->variant.fileVariant.scannedFileSize =
- in->variant.fileVariant.fileSize;
- }
-
- if (isShrink &&
- in->variant.fileVariant.shrinkSize > fileSize) {
- in->variant.fileVariant.shrinkSize = fileSize;
- }
-
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- if(!itsUnlinked) {
- in->variant.hardLinkVariant.equivalentObjectId =
- equivalentObjectId;
- in->hardLinks.next =
- (struct list_head *) hardList;
- hardList = in;
- }
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- if(oh){
- in->variant.symLinkVariant.alias =
- yaffs_CloneString(oh->
- alias);
- if(!in->variant.symLinkVariant.alias)
- alloc_failed = 1;
- }
- break;
- }
-
- }
-
- }
-
- } /* End of scanning for each chunk */
-
- if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
- /* If we got this far while scanning, then the block is fully allocated. */
- state = YAFFS_BLOCK_STATE_FULL;
- }
-
- bi->blockState = state;
-
- /* Now let's see if it was dirty */
- if (bi->pagesInUse == 0 &&
- !bi->hasShrinkHeader &&
- bi->blockState == YAFFS_BLOCK_STATE_FULL) {
- yaffs_BlockBecameDirty(dev, blk);
- }
-
- }
-
- if (altBlockIndex)
- YFREE_ALT(blockIndex);
- else
- YFREE(blockIndex);
-
- /* Ok, we've done all the scanning.
- * Fix up the hard link chains.
- * We should now have scanned all the objects, now it's time to add these
- * hardlinks.
- */
- yaffs_HardlinkFixup(dev,hardList);
-
-
- /*
- * Sort out state of unlinked and deleted objects.
- */
- {
- struct list_head *i;
- struct list_head *n;
-
- yaffs_Object *l;
-
- /* Soft delete all the unlinked files */
- list_for_each_safe(i, n,
- &dev->unlinkedDir->variant.directoryVariant.
- children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- yaffs_DestroyObject(l);
- }
- }
-
- /* Soft delete all the deletedDir files */
- list_for_each_safe(i, n,
- &dev->deletedDir->variant.directoryVariant.
- children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- yaffs_DestroyObject(l);
-
- }
- }
- }
-
- yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-
- if(alloc_failed){
- return YAFFS_FAIL;
- }
-
- T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
-
- return YAFFS_OK;
-}
-
-/*------------------------------ Directory Functions ----------------------------- */
-
-static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj)
-{
- yaffs_Device *dev = obj->myDev;
-
- if(dev && dev->removeObjectCallback)
- dev->removeObjectCallback(obj);
-
- list_del_init(&obj->siblings);
- obj->parent = NULL;
-}
-
-
-static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
- yaffs_Object * obj)
-{
-
- if (!directory) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: Trying to add an object to a null pointer directory"
- TENDSTR)));
- YBUG();
- }
- if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: Trying to add an object to a non-directory"
- TENDSTR)));
- YBUG();
- }
-
- if (obj->siblings.prev == NULL) {
- /* Not initialised */
- INIT_LIST_HEAD(&obj->siblings);
-
- } else if (!list_empty(&obj->siblings)) {
- /* If it is holed up somewhere else, un hook it */
- yaffs_RemoveObjectFromDirectory(obj);
- }
- /* Now add it */
- list_add(&obj->siblings, &directory->variant.directoryVariant.children);
- obj->parent = directory;
-
- if (directory == obj->myDev->unlinkedDir
- || directory == obj->myDev->deletedDir) {
- obj->unlinked = 1;
- obj->myDev->nUnlinkedFiles++;
- obj->renameAllowed = 0;
- }
-}
-
-yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory,
- const YCHAR * name)
-{
- int sum;
-
- struct list_head *i;
- YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
-
- yaffs_Object *l;
-
- if (!name) {
- return NULL;
- }
-
- if (!directory) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: null pointer directory"
- TENDSTR)));
- YBUG();
- }
- if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
- YBUG();
- }
-
- sum = yaffs_CalcNameSum(name);
-
- list_for_each(i, &directory->variant.directoryVariant.children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
-
- yaffs_CheckObjectDetailsLoaded(l);
-
- /* Special case for lost-n-found */
- if (l->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
- if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0) {
- return l;
- }
- } else if (yaffs_SumCompare(l->sum, sum) || l->chunkId <= 0)
- {
- /* LostnFound cunk called Objxxx
- * Do a real check
- */
- yaffs_GetObjectName(l, buffer,
- YAFFS_MAX_NAME_LENGTH);
- if (yaffs_strncmp(name, buffer,YAFFS_MAX_NAME_LENGTH) == 0) {
- return l;
- }
-
- }
- }
- }
-
- return NULL;
-}
-
-
-#if 0
-int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
- int (*fn) (yaffs_Object *))
-{
- struct list_head *i;
- yaffs_Object *l;
-
- if (!theDir) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: null pointer directory"
- TENDSTR)));
- YBUG();
- }
- if (theDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
- YBUG();
- }
-
- list_for_each(i, &theDir->variant.directoryVariant.children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- if (l && !fn(l)) {
- return YAFFS_FAIL;
- }
- }
- }
-
- return YAFFS_OK;
-
-}
-#endif
-
-/* GetEquivalentObject dereferences any hard links to get to the
- * actual object.
- */
-
-yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj)
-{
- if (obj && obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
- /* We want the object id of the equivalent object, not this one */
- obj = obj->variant.hardLinkVariant.equivalentObject;
- yaffs_CheckObjectDetailsLoaded(obj);
- }
- return obj;
-
-}
-
-int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
-{
- memset(name, 0, buffSize * sizeof(YCHAR));
-
- yaffs_CheckObjectDetailsLoaded(obj);
-
- if (obj->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
- yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffSize - 1);
- } else if (obj->chunkId <= 0) {
- YCHAR locName[20];
- /* make up a name */
- yaffs_sprintf(locName, _Y("%s%d"), YAFFS_LOSTNFOUND_PREFIX,
- obj->objectId);
- yaffs_strncpy(name, locName, buffSize - 1);
-
- }
-#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
- else if (obj->shortName[0]) {
- yaffs_strcpy(name, obj->shortName);
- }
-#endif
- else {
- int result;
- __u8 *buffer = yaffs_GetTempBuffer(obj->myDev, __LINE__);
-
- yaffs_ObjectHeader *oh = (yaffs_ObjectHeader *) buffer;
-
- memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
-
- if (obj->chunkId >= 0) {
- result = yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
- obj->chunkId, buffer,
- NULL);
- }
- yaffs_strncpy(name, oh->name, buffSize - 1);
-
- yaffs_ReleaseTempBuffer(obj->myDev, buffer, __LINE__);
- }
-
- return yaffs_strlen(name);
-}
-
-int yaffs_GetObjectFileLength(yaffs_Object * obj)
-{
-
- /* Dereference any hard linking */
- obj = yaffs_GetEquivalentObject(obj);
-
- if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
- return obj->variant.fileVariant.fileSize;
- }
- if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
- return yaffs_strlen(obj->variant.symLinkVariant.alias);
- } else {
- /* Only a directory should drop through to here */
- return obj->myDev->nDataBytesPerChunk;
- }
-}
-
-int yaffs_GetObjectLinkCount(yaffs_Object * obj)
-{
- int count = 0;
- struct list_head *i;
-
- if (!obj->unlinked) {
- count++; /* the object itself */
- }
- list_for_each(i, &obj->hardLinks) {
- count++; /* add the hard links; */
- }
- return count;
-
-}
-
-int yaffs_GetObjectInode(yaffs_Object * obj)
-{
- obj = yaffs_GetEquivalentObject(obj);
-
- return obj->objectId;
-}
-
-unsigned yaffs_GetObjectType(yaffs_Object * obj)
-{
- obj = yaffs_GetEquivalentObject(obj);
-
- switch (obj->variantType) {
- case YAFFS_OBJECT_TYPE_FILE:
- return DT_REG;
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- return DT_DIR;
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- return DT_LNK;
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- return DT_REG;
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- if (S_ISFIFO(obj->yst_mode))
- return DT_FIFO;
- if (S_ISCHR(obj->yst_mode))
- return DT_CHR;
- if (S_ISBLK(obj->yst_mode))
- return DT_BLK;
- if (S_ISSOCK(obj->yst_mode))
- return DT_SOCK;
- default:
- return DT_REG;
- break;
- }
-}
-
-YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj)
-{
- obj = yaffs_GetEquivalentObject(obj);
- if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
- return yaffs_CloneString(obj->variant.symLinkVariant.alias);
- } else {
- return yaffs_CloneString(_Y(""));
- }
-}
-
-#ifndef CONFIG_YAFFS_WINCE
-
-int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr)
-{
- unsigned int valid = attr->ia_valid;
-
- if (valid & ATTR_MODE)
- obj->yst_mode = attr->ia_mode;
- if (valid & ATTR_UID)
- obj->yst_uid = attr->ia_uid;
- if (valid & ATTR_GID)
- obj->yst_gid = attr->ia_gid;
-
- if (valid & ATTR_ATIME)
- obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime);
- if (valid & ATTR_CTIME)
- obj->yst_ctime = Y_TIME_CONVERT(attr->ia_ctime);
- if (valid & ATTR_MTIME)
- obj->yst_mtime = Y_TIME_CONVERT(attr->ia_mtime);
-
- if (valid & ATTR_SIZE)
- yaffs_ResizeFile(obj, attr->ia_size);
-
- yaffs_UpdateObjectHeader(obj, NULL, 1, 0, 0);
-
- return YAFFS_OK;
-
-}
-int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr)
-{
- unsigned int valid = 0;
-
- attr->ia_mode = obj->yst_mode;
- valid |= ATTR_MODE;
- attr->ia_uid = obj->yst_uid;
- valid |= ATTR_UID;
- attr->ia_gid = obj->yst_gid;
- valid |= ATTR_GID;
-
- Y_TIME_CONVERT(attr->ia_atime) = obj->yst_atime;
- valid |= ATTR_ATIME;
- Y_TIME_CONVERT(attr->ia_ctime) = obj->yst_ctime;
- valid |= ATTR_CTIME;
- Y_TIME_CONVERT(attr->ia_mtime) = obj->yst_mtime;
- valid |= ATTR_MTIME;
-
- attr->ia_size = yaffs_GetFileSize(obj);
- valid |= ATTR_SIZE;
-
- attr->ia_valid = valid;
-
- return YAFFS_OK;
-
-}
-
-#endif
-
-#if 0
-int yaffs_DumpObject(yaffs_Object * obj)
-{
- YCHAR name[257];
-
- yaffs_GetObjectName(obj, name, 256);
-
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("Object %d, inode %d \"%s\"\n dirty %d valid %d serial %d sum %d"
- " chunk %d type %d size %d\n"
- TENDSTR), obj->objectId, yaffs_GetObjectInode(obj), name,
- obj->dirty, obj->valid, obj->serial, obj->sum, obj->chunkId,
- yaffs_GetObjectType(obj), yaffs_GetObjectFileLength(obj)));
-
- return YAFFS_OK;
-}
-#endif
-
-/*---------------------------- Initialisation code -------------------------------------- */
-
-static int yaffs_CheckDevFunctions(const yaffs_Device * dev)
-{
-
- /* Common functions, gotta have */
- if (!dev->eraseBlockInNAND || !dev->initialiseNAND)
- return 0;
-
-#ifdef CONFIG_YAFFS_YAFFS2
-
- /* Can use the "with tags" style interface for yaffs1 or yaffs2 */
- if (dev->writeChunkWithTagsToNAND &&
- dev->readChunkWithTagsFromNAND &&
- !dev->writeChunkToNAND &&
- !dev->readChunkFromNAND &&
- dev->markNANDBlockBad && dev->queryNANDBlock)
- return 1;
-#endif
-
- /* Can use the "spare" style interface for yaffs1 */
- if (!dev->isYaffs2 &&
- !dev->writeChunkWithTagsToNAND &&
- !dev->readChunkWithTagsFromNAND &&
- dev->writeChunkToNAND &&
- dev->readChunkFromNAND &&
- !dev->markNANDBlockBad && !dev->queryNANDBlock)
- return 1;
-
- return 0; /* bad */
-}
-
-
-static int yaffs_CreateInitialDirectories(yaffs_Device *dev)
-{
- /* Initialise the unlinked, deleted, root and lost and found directories */
-
- dev->lostNFoundDir = dev->rootDir = NULL;
- dev->unlinkedDir = dev->deletedDir = NULL;
-
- dev->unlinkedDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_UNLINKED, S_IFDIR);
-
- dev->deletedDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_DELETED, S_IFDIR);
-
- dev->rootDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_ROOT,
- YAFFS_ROOT_MODE | S_IFDIR);
- dev->lostNFoundDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_LOSTNFOUND,
- YAFFS_LOSTNFOUND_MODE | S_IFDIR);
-
- if(dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir){
- yaffs_AddObjectToDirectory(dev->rootDir, dev->lostNFoundDir);
- return YAFFS_OK;
- }
-
- return YAFFS_FAIL;
-}
-
-int yaffs_GutsInitialise(yaffs_Device * dev)
-{
- int init_failed = 0;
- unsigned x;
- int bits;
-
- T(YAFFS_TRACE_TRACING, (TSTR("yaffs: yaffs_GutsInitialise()" TENDSTR)));
-
- /* Check stuff that must be set */
-
- if (!dev) {
- T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Need a device" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- dev->internalStartBlock = dev->startBlock;
- dev->internalEndBlock = dev->endBlock;
- dev->blockOffset = 0;
- dev->chunkOffset = 0;
- dev->nFreeChunks = 0;
-
- if (dev->startBlock == 0) {
- dev->internalStartBlock = dev->startBlock + 1;
- dev->internalEndBlock = dev->endBlock + 1;
- dev->blockOffset = 1;
- dev->chunkOffset = dev->nChunksPerBlock;
- }
-
- /* Check geometry parameters. */
-
- if ((dev->isYaffs2 && dev->nDataBytesPerChunk < 1024) ||
- (!dev->isYaffs2 && dev->nDataBytesPerChunk != 512) ||
- dev->nChunksPerBlock < 2 ||
- dev->nReservedBlocks < 2 ||
- dev->internalStartBlock <= 0 ||
- dev->internalEndBlock <= 0 ||
- dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2) // otherwise it is too small
- ) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s "
- TENDSTR), dev->nDataBytesPerChunk, dev->isYaffs2 ? "2" : ""));
- return YAFFS_FAIL;
- }
-
- if (yaffs_InitialiseNAND(dev) != YAFFS_OK) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: InitialiseNAND failed" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- /* Got the right mix of functions? */
- if (!yaffs_CheckDevFunctions(dev)) {
- /* Function missing */
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs: device function(s) missing or wrong\n" TENDSTR)));
-
- return YAFFS_FAIL;
- }
-
- /* This is really a compilation check. */
- if (!yaffs_CheckStructures()) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs_CheckStructures failed\n" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- if (dev->isMounted) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: device already mounted\n" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- /* Finished with most checks. One or two more checks happen later on too. */
-
- dev->isMounted = 1;
-
-
-
- /* OK now calculate a few things for the device */
-
- /*
- * Calculate all the chunk size manipulation numbers:
- */
- /* Start off assuming it is a power of 2 */
- dev->chunkShift = ShiftDiv(dev->nDataBytesPerChunk);
- dev->chunkMask = (1<<dev->chunkShift) - 1;
-
- if(dev->nDataBytesPerChunk == (dev->chunkMask + 1)){
- /* Yes it is a power of 2, disable crumbs */
- dev->crumbMask = 0;
- dev->crumbShift = 0;
- dev->crumbsPerChunk = 0;
- } else {
- /* Not a power of 2, use crumbs instead */
- dev->crumbShift = ShiftDiv(sizeof(yaffs_PackedTags2TagsPart));
- dev->crumbMask = (1<<dev->crumbShift)-1;
- dev->crumbsPerChunk = dev->nDataBytesPerChunk/(1 << dev->crumbShift);
- dev->chunkShift = 0;
- dev->chunkMask = 0;
- }
-
-
- /*
- * Calculate chunkGroupBits.
- * We need to find the next power of 2 > than internalEndBlock
- */
-
- x = dev->nChunksPerBlock * (dev->internalEndBlock + 1);
-
- bits = ShiftsGE(x);
-
- /* Set up tnode width if wide tnodes are enabled. */
- if(!dev->wideTnodesDisabled){
- /* bits must be even so that we end up with 32-bit words */
- if(bits & 1)
- bits++;
- if(bits < 16)
- dev->tnodeWidth = 16;
- else
- dev->tnodeWidth = bits;
- }
- else
- dev->tnodeWidth = 16;
-
- dev->tnodeMask = (1<<dev->tnodeWidth)-1;
-
- /* Level0 Tnodes are 16 bits or wider (if wide tnodes are enabled),
- * so if the bitwidth of the
- * chunk range we're using is greater than 16 we need
- * to figure out chunk shift and chunkGroupSize
- */
-
- if (bits <= dev->tnodeWidth)
- dev->chunkGroupBits = 0;
- else
- dev->chunkGroupBits = bits - dev->tnodeWidth;
-
-
- dev->chunkGroupSize = 1 << dev->chunkGroupBits;
-
- if (dev->nChunksPerBlock < dev->chunkGroupSize) {
- /* We have a problem because the soft delete won't work if
- * the chunk group size > chunks per block.
- * This can be remedied by using larger "virtual blocks".
- */
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: chunk group too large\n" TENDSTR)));
-
- return YAFFS_FAIL;
- }
-
- /* OK, we've finished verifying the device, lets continue with initialisation */
-
- /* More device initialisation */
- dev->garbageCollections = 0;
- dev->passiveGarbageCollections = 0;
- dev->currentDirtyChecker = 0;
- dev->bufferedBlock = -1;
- dev->doingBufferedBlockRewrite = 0;
- dev->nDeletedFiles = 0;
- dev->nBackgroundDeletions = 0;
- dev->nUnlinkedFiles = 0;
- dev->eccFixed = 0;
- dev->eccUnfixed = 0;
- dev->tagsEccFixed = 0;
- dev->tagsEccUnfixed = 0;
- dev->nErasureFailures = 0;
- dev->nErasedBlocks = 0;
- dev->isDoingGC = 0;
- dev->hasPendingPrioritisedGCs = 1; /* Assume the worst for now, will get fixed on first GC */
-
- /* Initialise temporary buffers and caches. */
- if(!yaffs_InitialiseTempBuffers(dev))
- init_failed = 1;
-
- dev->srCache = NULL;
- dev->gcCleanupList = NULL;
-
-
- if (!init_failed &&
- dev->nShortOpCaches > 0) {
- int i;
- __u8 *buf;
- int srCacheBytes = dev->nShortOpCaches * sizeof(yaffs_ChunkCache);
-
- if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES) {
- dev->nShortOpCaches = YAFFS_MAX_SHORT_OP_CACHES;
- }
-
- buf = dev->srCache = YMALLOC(srCacheBytes);
-
- if(dev->srCache)
- memset(dev->srCache,0,srCacheBytes);
-
- for (i = 0; i < dev->nShortOpCaches && buf; i++) {
- dev->srCache[i].object = NULL;
- dev->srCache[i].lastUse = 0;
- dev->srCache[i].dirty = 0;
- dev->srCache[i].data = buf = YMALLOC_DMA(dev->nDataBytesPerChunk);
- }
- if(!buf)
- init_failed = 1;
-
- dev->srLastUse = 0;
- }
-
- dev->cacheHits = 0;
-
- if(!init_failed){
- dev->gcCleanupList = YMALLOC(dev->nChunksPerBlock * sizeof(__u32));
- if(!dev->gcCleanupList)
- init_failed = 1;
- }
-
- if (dev->isYaffs2) {
- dev->useHeaderFileSize = 1;
- }
- if(!init_failed && !yaffs_InitialiseBlocks(dev))
- init_failed = 1;
-
- yaffs_InitialiseTnodes(dev);
- yaffs_InitialiseObjects(dev);
-
- if(!init_failed && !yaffs_CreateInitialDirectories(dev))
- init_failed = 1;
-
-
- if(!init_failed){
- /* Now scan the flash. */
- if (dev->isYaffs2) {
- if(yaffs_CheckpointRestore(dev)) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: restored from checkpoint" TENDSTR)));
- } else {
-
- /* Clean up the mess caused by an aborted checkpoint load
- * and scan backwards.
- */
- yaffs_DeinitialiseBlocks(dev);
- yaffs_DeinitialiseTnodes(dev);
- yaffs_DeinitialiseObjects(dev);
-
-
- dev->nErasedBlocks = 0;
- dev->nFreeChunks = 0;
- dev->allocationBlock = -1;
- dev->allocationPage = -1;
- dev->nDeletedFiles = 0;
- dev->nUnlinkedFiles = 0;
- dev->nBackgroundDeletions = 0;
- dev->oldestDirtySequence = 0;
-
- if(!init_failed && !yaffs_InitialiseBlocks(dev))
- init_failed = 1;
-
- yaffs_InitialiseTnodes(dev);
- yaffs_InitialiseObjects(dev);
-
- if(!init_failed && !yaffs_CreateInitialDirectories(dev))
- init_failed = 1;
-
- if(!init_failed && !yaffs_ScanBackwards(dev))
- init_failed = 1;
- }
- }else
- if(!yaffs_Scan(dev))
- init_failed = 1;
- }
-
- if(init_failed){
- /* Clean up the mess */
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: yaffs_GutsInitialise() aborted.\n" TENDSTR)));
-
- yaffs_Deinitialise(dev);
- return YAFFS_FAIL;
- }
-
- /* Zero out stats */
- dev->nPageReads = 0;
- dev->nPageWrites = 0;
- dev->nBlockErasures = 0;
- dev->nGCCopies = 0;
- dev->nRetriedWrites = 0;
-
- dev->nRetiredBlocks = 0;
-
- yaffs_VerifyFreeChunks(dev);
- yaffs_VerifyBlocks(dev);
-
-
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: yaffs_GutsInitialise() done.\n" TENDSTR)));
- return YAFFS_OK;
-
-}
-
-void yaffs_Deinitialise(yaffs_Device * dev)
-{
- if (dev->isMounted) {
- int i;
-
- yaffs_DeinitialiseBlocks(dev);
- yaffs_DeinitialiseTnodes(dev);
- yaffs_DeinitialiseObjects(dev);
- if (dev->nShortOpCaches > 0 &&
- dev->srCache) {
-
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if(dev->srCache[i].data)
- YFREE(dev->srCache[i].data);
- dev->srCache[i].data = NULL;
- }
-
- YFREE(dev->srCache);
- dev->srCache = NULL;
- }
-
- YFREE(dev->gcCleanupList);
-
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- YFREE(dev->tempBuffer[i].buffer);
- }
-
- dev->isMounted = 0;
- }
-
-}
-
-static int yaffs_CountFreeChunks(yaffs_Device * dev)
-{
- int nFree;
- int b;
-
- yaffs_BlockInfo *blk;
-
- for (nFree = 0, b = dev->internalStartBlock; b <= dev->internalEndBlock;
- b++) {
- blk = yaffs_GetBlockInfo(dev, b);
-
- switch (blk->blockState) {
- case YAFFS_BLOCK_STATE_EMPTY:
- case YAFFS_BLOCK_STATE_ALLOCATING:
- case YAFFS_BLOCK_STATE_COLLECTING:
- case YAFFS_BLOCK_STATE_FULL:
- nFree +=
- (dev->nChunksPerBlock - blk->pagesInUse +
- blk->softDeletions);
- break;
- default:
- break;
- }
-
- }
-
- return nFree;
-}
-
-int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev)
-{
- /* This is what we report to the outside world */
-
- int nFree;
- int nDirtyCacheChunks;
- int blocksForCheckpoint;
-
-#if 1
- nFree = dev->nFreeChunks;
-#else
- nFree = yaffs_CountFreeChunks(dev);
-#endif
-
- nFree += dev->nDeletedFiles;
-
- /* Now count the number of dirty chunks in the cache and subtract those */
-
- {
- int i;
- for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].dirty)
- nDirtyCacheChunks++;
- }
- }
-
- nFree -= nDirtyCacheChunks;
-
- nFree -= ((dev->nReservedBlocks + 1) * dev->nChunksPerBlock);
-
- /* Now we figure out how much to reserve for the checkpoint and report that... */
- blocksForCheckpoint = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
- if(blocksForCheckpoint < 0)
- blocksForCheckpoint = 0;
-
- nFree -= (blocksForCheckpoint * dev->nChunksPerBlock);
-
- if (nFree < 0)
- nFree = 0;
-
- return nFree;
-
-}
-
-static int yaffs_freeVerificationFailures;
-
-static void yaffs_VerifyFreeChunks(yaffs_Device * dev)
-{
- int counted;
- int difference;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- counted = yaffs_CountFreeChunks(dev);
-
- difference = dev->nFreeChunks - counted;
-
- if (difference) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("Freechunks verification failure %d %d %d" TENDSTR),
- dev->nFreeChunks, counted, difference));
- yaffs_freeVerificationFailures++;
- }
-}
-
-/*---------------------------------------- YAFFS test code ----------------------*/
-
-#define yaffs_CheckStruct(structure,syze, name) \
- if(sizeof(structure) != syze) \
- { \
- T(YAFFS_TRACE_ALWAYS,(TSTR("%s should be %d but is %d\n" TENDSTR),\
- name,syze,sizeof(structure))); \
- return YAFFS_FAIL; \
- }
-
-static int yaffs_CheckStructures(void)
-{
-/* yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags") */
-/* yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion") */
-/* yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare") */
-#ifndef CONFIG_YAFFS_TNODE_LIST_DEBUG
- yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode")
-#endif
- yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader")
-
- return YAFFS_OK;
-}
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/* XXX U-BOOT XXX */
+#include <common.h>
+
+const char *yaffs_guts_c_version =
+ "$Id: yaffs_guts.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $";
+
+#include "yportenv.h"
+#include "linux/stat.h"
+
+#include "yaffsinterface.h"
+#include "yaffsfs.h"
+#include "yaffs_guts.h"
+#include "yaffs_tagsvalidity.h"
+
+#include "yaffs_tagscompat.h"
+#ifndef CONFIG_YAFFS_USE_OWN_SORT
+#include "yaffs_qsort.h"
+#endif
+#include "yaffs_nand.h"
+
+#include "yaffs_checkptrw.h"
+
+#include "yaffs_nand.h"
+#include "yaffs_packedtags2.h"
+
+#include "malloc.h"
+
+#ifdef CONFIG_YAFFS_WINCE
+void yfsd_LockYAFFS(BOOL fsLockOnly);
+void yfsd_UnlockYAFFS(BOOL fsLockOnly);
+#endif
+
+#define YAFFS_PASSIVE_GC_CHUNKS 2
+
+#include "yaffs_ecc.h"
+
+
+/* Robustification (if it ever comes about...) */
+static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND);
+static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk);
+static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
+ const __u8 * data,
+ const yaffs_ExtendedTags * tags);
+static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
+ const yaffs_ExtendedTags * tags);
+
+/* Other local prototypes */
+static int yaffs_UnlinkObject( yaffs_Object *obj);
+static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj);
+
+static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList);
+
+static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev,
+ const __u8 * buffer,
+ yaffs_ExtendedTags * tags,
+ int useReserve);
+static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
+ int chunkInNAND, int inScan);
+
+static yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
+ yaffs_ObjectType type);
+static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
+ yaffs_Object * obj);
+static int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name,
+ int force, int isShrink, int shadows);
+static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj);
+static int yaffs_CheckStructures(void);
+static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
+ int chunkOffset, int *limit);
+static int yaffs_DoGenericObjectDeletion(yaffs_Object * in);
+
+static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blockNo);
+
+static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo);
+static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
+ int lineNo);
+
+static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
+ int chunkInNAND);
+
+static int yaffs_UnlinkWorker(yaffs_Object * obj);
+static void yaffs_DestroyObject(yaffs_Object * obj);
+
+static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
+ int chunkInObject);
+
+loff_t yaffs_GetFileSize(yaffs_Object * obj);
+
+static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr);
+
+static void yaffs_VerifyFreeChunks(yaffs_Device * dev);
+
+static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in);
+
+#ifdef YAFFS_PARANOID
+static int yaffs_CheckFileSanity(yaffs_Object * in);
+#else
+#define yaffs_CheckFileSanity(in)
+#endif
+
+static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in);
+static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId);
+
+static void yaffs_InvalidateCheckpoint(yaffs_Device *dev);
+
+static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
+ yaffs_ExtendedTags * tags);
+
+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos);
+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
+ yaffs_FileStructure * fStruct,
+ __u32 chunkId);
+
+
+/* Function to calculate chunk and offset */
+
+static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, __u32 *chunk, __u32 *offset)
+{
+ if(dev->chunkShift){
+ /* Easy-peasy power of 2 case */
+ *chunk = (__u32)(addr >> dev->chunkShift);
+ *offset = (__u32)(addr & dev->chunkMask);
+ }
+ else if(dev->crumbsPerChunk)
+ {
+ /* Case where we're using "crumbs" */
+ *offset = (__u32)(addr & dev->crumbMask);
+ addr >>= dev->crumbShift;
+ *chunk = ((__u32)addr)/dev->crumbsPerChunk;
+ *offset += ((addr - (*chunk * dev->crumbsPerChunk)) << dev->crumbShift);
+ }
+ else
+ YBUG();
+}
+
+/* Function to return the number of shifts for a power of 2 greater than or equal
+ * to the given number
+ * Note we don't try to cater for all possible numbers and this does not have to
+ * be hellishly efficient.
+ */
+
+static __u32 ShiftsGE(__u32 x)
+{
+ int extraBits;
+ int nShifts;
+
+ nShifts = extraBits = 0;
+
+ while(x>1){
+ if(x & 1) extraBits++;
+ x>>=1;
+ nShifts++;
+ }
+
+ if(extraBits)
+ nShifts++;
+
+ return nShifts;
+}
+
+/* Function to return the number of shifts to get a 1 in bit 0
+ */
+
+static __u32 ShiftDiv(__u32 x)
+{
+ int nShifts;
+
+ nShifts = 0;
+
+ if(!x) return 0;
+
+ while( !(x&1)){
+ x>>=1;
+ nShifts++;
+ }
+
+ return nShifts;
+}
+
+
+
+/*
+ * Temporary buffer manipulations.
+ */
+
+static int yaffs_InitialiseTempBuffers(yaffs_Device *dev)
+{
+ int i;
+ __u8 *buf = (__u8 *)1;
+
+ memset(dev->tempBuffer,0,sizeof(dev->tempBuffer));
+
+ for (i = 0; buf && i < YAFFS_N_TEMP_BUFFERS; i++) {
+ dev->tempBuffer[i].line = 0; /* not in use */
+ dev->tempBuffer[i].buffer = buf =
+ YMALLOC_DMA(dev->nDataBytesPerChunk);
+ }
+
+ return buf ? YAFFS_OK : YAFFS_FAIL;
+
+}
+
+static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo)
+{
+ int i, j;
+ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
+ if (dev->tempBuffer[i].line == 0) {
+ dev->tempBuffer[i].line = lineNo;
+ if ((i + 1) > dev->maxTemp) {
+ dev->maxTemp = i + 1;
+ for (j = 0; j <= i; j++)
+ dev->tempBuffer[j].maxLine =
+ dev->tempBuffer[j].line;
+ }
+
+ return dev->tempBuffer[i].buffer;
+ }
+ }
+
+ T(YAFFS_TRACE_BUFFERS,
+ (TSTR("Out of temp buffers at line %d, other held by lines:"),
+ lineNo));
+ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
+ T(YAFFS_TRACE_BUFFERS, (TSTR(" %d "), dev->tempBuffer[i].line));
+ }
+ T(YAFFS_TRACE_BUFFERS, (TSTR(" " TENDSTR)));
+
+ /*
+ * If we got here then we have to allocate an unmanaged one
+ * This is not good.
+ */
+
+ dev->unmanagedTempAllocations++;
+ return YMALLOC(dev->nDataBytesPerChunk);
+
+}
+
+static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
+ int lineNo)
+{
+ int i;
+ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
+ if (dev->tempBuffer[i].buffer == buffer) {
+ dev->tempBuffer[i].line = 0;
+ return;
+ }
+ }
+
+ if (buffer) {
+ /* assume it is an unmanaged one. */
+ T(YAFFS_TRACE_BUFFERS,
+ (TSTR("Releasing unmanaged temp buffer in line %d" TENDSTR),
+ lineNo));
+ YFREE(buffer);
+ dev->unmanagedTempDeallocations++;
+ }
+
+}
+
+/*
+ * Determine if we have a managed buffer.
+ */
+int yaffs_IsManagedTempBuffer(yaffs_Device * dev, const __u8 * buffer)
+{
+ int i;
+ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
+ if (dev->tempBuffer[i].buffer == buffer)
+ return 1;
+
+ }
+
+ for (i = 0; i < dev->nShortOpCaches; i++) {
+ if( dev->srCache[i].data == buffer )
+ return 1;
+
+ }
+
+ if (buffer == dev->checkpointBuffer)
+ return 1;
+
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
+ return 0;
+}
+
+
+
+/*
+ * Chunk bitmap manipulations
+ */
+
+static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device * dev, int blk)
+{
+ if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
+ blk));
+ YBUG();
+ }
+ return dev->chunkBits +
+ (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
+}
+
+static Y_INLINE void yaffs_VerifyChunkBitId(yaffs_Device *dev, int blk, int chunk)
+{
+ if(blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
+ chunk < 0 || chunk >= dev->nChunksPerBlock) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),blk,chunk));
+ YBUG();
+ }
+}
+
+static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device * dev, int blk)
+{
+ __u8 *blkBits = yaffs_BlockBits(dev, blk);
+
+ memset(blkBits, 0, dev->chunkBitmapStride);
+}
+
+static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device * dev, int blk, int chunk)
+{
+ __u8 *blkBits = yaffs_BlockBits(dev, blk);
+
+ yaffs_VerifyChunkBitId(dev,blk,chunk);
+
+ blkBits[chunk / 8] &= ~(1 << (chunk & 7));
+}
+
+static Y_INLINE void yaffs_SetChunkBit(yaffs_Device * dev, int blk, int chunk)
+{
+ __u8 *blkBits = yaffs_BlockBits(dev, blk);
+
+ yaffs_VerifyChunkBitId(dev,blk,chunk);
+
+ blkBits[chunk / 8] |= (1 << (chunk & 7));
+}
+
+static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device * dev, int blk, int chunk)
+{
+ __u8 *blkBits = yaffs_BlockBits(dev, blk);
+ yaffs_VerifyChunkBitId(dev,blk,chunk);
+
+ return (blkBits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
+}
+
+static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
+{
+ __u8 *blkBits = yaffs_BlockBits(dev, blk);
+ int i;
+ for (i = 0; i < dev->chunkBitmapStride; i++) {
+ if (*blkBits)
+ return 1;
+ blkBits++;
+ }
+ return 0;
+}
+
+static int yaffs_CountChunkBits(yaffs_Device * dev, int blk)
+{
+ __u8 *blkBits = yaffs_BlockBits(dev, blk);
+ int i;
+ int n = 0;
+ for (i = 0; i < dev->chunkBitmapStride; i++) {
+ __u8 x = *blkBits;
+ while(x){
+ if(x & 1)
+ n++;
+ x >>=1;
+ }
+
+ blkBits++;
+ }
+ return n;
+}
+
+/*
+ * Verification code
+ */
+
+static int yaffs_SkipVerification(yaffs_Device *dev)
+{
+ return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY | YAFFS_TRACE_VERIFY_FULL));
+}
+
+static int yaffs_SkipFullVerification(yaffs_Device *dev)
+{
+ return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_FULL));
+}
+
+static int yaffs_SkipNANDVerification(yaffs_Device *dev)
+{
+ return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_NAND));
+}
+
+static const char * blockStateName[] = {
+"Unknown",
+"Needs scanning",
+"Scanning",
+"Empty",
+"Allocating",
+"Full",
+"Dirty",
+"Checkpoint",
+"Collecting",
+"Dead"
+};
+
+static void yaffs_VerifyBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
+{
+ int actuallyUsed;
+ int inUse;
+
+ if(yaffs_SkipVerification(dev))
+ return;
+
+ /* Report illegal runtime states */
+ if(bi->blockState <0 || bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
+ T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has undefined state %d"TENDSTR),n,bi->blockState));
+
+ switch(bi->blockState){
+ case YAFFS_BLOCK_STATE_UNKNOWN:
+ case YAFFS_BLOCK_STATE_SCANNING:
+ case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
+ T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has bad run-state %s"TENDSTR),
+ n,blockStateName[bi->blockState]));
+ }
+
+ /* Check pages in use and soft deletions are legal */
+
+ actuallyUsed = bi->pagesInUse - bi->softDeletions;
+
+ if(bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
+ bi->softDeletions < 0 || bi->softDeletions > dev->nChunksPerBlock ||
+ actuallyUsed < 0 || actuallyUsed > dev->nChunksPerBlock)
+ T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
+ n,bi->pagesInUse,bi->softDeletions));
+
+
+ /* Check chunk bitmap legal */
+ inUse = yaffs_CountChunkBits(dev,n);
+ if(inUse != bi->pagesInUse)
+ T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
+ n,bi->pagesInUse,inUse));
+
+ /* Check that the sequence number is valid.
+ * Ten million is legal, but is very unlikely
+ */
+ if(dev->isYaffs2 &&
+ (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING || bi->blockState == YAFFS_BLOCK_STATE_FULL) &&
+ (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000 ))
+ T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has suspect sequence number of %d"TENDSTR),
+ n,bi->sequenceNumber));
+
+}
+
+static void yaffs_VerifyCollectedBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
+{
+ yaffs_VerifyBlock(dev,bi,n);
+
+ /* After collection the block should be in the erased state */
+ /* TODO: This will need to change if we do partial gc */
+
+ if(bi->blockState != YAFFS_BLOCK_STATE_EMPTY){
+ T(YAFFS_TRACE_ERROR,(TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
+ n,bi->blockState));
+ }
+}
+
+static void yaffs_VerifyBlocks(yaffs_Device *dev)
+{
+ int i;
+ int nBlocksPerState[YAFFS_NUMBER_OF_BLOCK_STATES];
+ int nIllegalBlockStates = 0;
+
+
+ if(yaffs_SkipVerification(dev))
+ return;
+
+ memset(nBlocksPerState,0,sizeof(nBlocksPerState));
+
+
+ for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++){
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
+ yaffs_VerifyBlock(dev,bi,i);
+
+ if(bi->blockState >=0 && bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
+ nBlocksPerState[bi->blockState]++;
+ else
+ nIllegalBlockStates++;
+
+ }
+
+ T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
+ T(YAFFS_TRACE_VERIFY,(TSTR("Block summary"TENDSTR)));
+
+ T(YAFFS_TRACE_VERIFY,(TSTR("%d blocks have illegal states"TENDSTR),nIllegalBlockStates));
+ if(nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
+ T(YAFFS_TRACE_VERIFY,(TSTR("Too many allocating blocks"TENDSTR)));
+
+ for(i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("%s %d blocks"TENDSTR),
+ blockStateName[i],nBlocksPerState[i]));
+
+ if(dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Checkpoint block count wrong dev %d count %d"TENDSTR),
+ dev->blocksInCheckpoint, nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT]));
+
+ if(dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Erased block count wrong dev %d count %d"TENDSTR),
+ dev->nErasedBlocks, nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY]));
+
+ if(nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Too many collecting blocks %d (max is 1)"TENDSTR),
+ nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING]));
+
+ T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
+
+}
+
+/*
+ * Verify the object header. oh must be valid, but obj and tags may be NULL in which
+ * case those tests will not be performed.
+ */
+static void yaffs_VerifyObjectHeader(yaffs_Object *obj, yaffs_ObjectHeader *oh, yaffs_ExtendedTags *tags, int parentCheck)
+{
+ if(yaffs_SkipVerification(obj->myDev))
+ return;
+
+ if(!(tags && obj && oh)){
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
+ (__u32)tags,(__u32)obj,(__u32)oh));
+ return;
+ }
+
+ if(oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
+ oh->type > YAFFS_OBJECT_TYPE_MAX)
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
+ tags->objectId, oh->type));
+
+ if(tags->objectId != obj->objectId)
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
+ tags->objectId, obj->objectId));
+
+
+ /*
+ * Check that the object's parent ids match if parentCheck requested.
+ *
+ * Tests do not apply to the root object.
+ */
+
+ if(parentCheck && tags->objectId > 1 && !obj->parent)
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
+ tags->objectId, oh->parentObjectId));
+
+
+ if(parentCheck && obj->parent &&
+ oh->parentObjectId != obj->parent->objectId &&
+ (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
+ obj->parent->objectId != YAFFS_OBJECTID_DELETED))
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
+ tags->objectId, oh->parentObjectId, obj->parent->objectId));
+
+
+ if(tags->objectId > 1 && oh->name[0] == 0) /* Null name */
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d header name is NULL"TENDSTR),
+ obj->objectId));
+
+ if(tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d header name is 0xFF"TENDSTR),
+ obj->objectId));
+}
+
+
+
+static int yaffs_VerifyTnodeWorker(yaffs_Object * obj, yaffs_Tnode * tn,
+ __u32 level, int chunkOffset)
+{
+ int i;
+ yaffs_Device *dev = obj->myDev;
+ int ok = 1;
+
+ if (tn) {
+ if (level > 0) {
+
+ for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
+ if (tn->internal[i]) {
+ ok = yaffs_VerifyTnodeWorker(obj,
+ tn->internal[i],
+ level - 1,
+ (chunkOffset<<YAFFS_TNODES_INTERNAL_BITS) + i);
+ }
+ }
+ } else if (level == 0) {
+ int i;
+ yaffs_ExtendedTags tags;
+ __u32 objectId = obj->objectId;
+
+ chunkOffset <<= YAFFS_TNODES_LEVEL0_BITS;
+
+ for(i = 0; i < YAFFS_NTNODES_LEVEL0; i++){
+ __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
+
+ if(theChunk > 0){
+ /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),tags.objectId,tags.chunkId,theChunk)); */
+ yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
+ if(tags.objectId != objectId || tags.chunkId != chunkOffset){
+ T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
+ objectId, chunkOffset, theChunk,
+ tags.objectId, tags.chunkId));
+ }
+ }
+ chunkOffset++;
+ }
+ }
+ }
+
+ return ok;
+
+}
+
+
+static void yaffs_VerifyFile(yaffs_Object *obj)
+{
+ int requiredTallness;
+ int actualTallness;
+ __u32 lastChunk;
+ __u32 x;
+ __u32 i;
+ yaffs_Device *dev;
+ yaffs_ExtendedTags tags;
+ yaffs_Tnode *tn;
+ __u32 objectId;
+
+ if(obj && yaffs_SkipVerification(obj->myDev))
+ return;
+
+ dev = obj->myDev;
+ objectId = obj->objectId;
+
+ /* Check file size is consistent with tnode depth */
+ lastChunk = obj->variant.fileVariant.fileSize / dev->nDataBytesPerChunk + 1;
+ x = lastChunk >> YAFFS_TNODES_LEVEL0_BITS;
+ requiredTallness = 0;
+ while (x> 0) {
+ x >>= YAFFS_TNODES_INTERNAL_BITS;
+ requiredTallness++;
+ }
+
+ actualTallness = obj->variant.fileVariant.topLevel;
+
+ if(requiredTallness > actualTallness )
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d had tnode tallness %d, needs to be %d"TENDSTR),
+ obj->objectId,actualTallness, requiredTallness));
+
+
+ /* Check that the chunks in the tnode tree are all correct.
+ * We do this by scanning through the tnode tree and
+ * checking the tags for every chunk match.
+ */
+
+ if(yaffs_SkipNANDVerification(dev))
+ return;
+
+ for(i = 1; i <= lastChunk; i++){
+ tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant,i);
+
+ if (tn) {
+ __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
+ if(theChunk > 0){
+ /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),objectId,i,theChunk)); */
+ yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
+ if(tags.objectId != objectId || tags.chunkId != i){
+ T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
+ objectId, i, theChunk,
+ tags.objectId, tags.chunkId));
+ }
+ }
+ }
+
+ }
+
+}
+
+static void yaffs_VerifyDirectory(yaffs_Object *obj)
+{
+ if(obj && yaffs_SkipVerification(obj->myDev))
+ return;
+
+}
+
+static void yaffs_VerifyHardLink(yaffs_Object *obj)
+{
+ if(obj && yaffs_SkipVerification(obj->myDev))
+ return;
+
+ /* Verify sane equivalent object */
+}
+
+static void yaffs_VerifySymlink(yaffs_Object *obj)
+{
+ if(obj && yaffs_SkipVerification(obj->myDev))
+ return;
+
+ /* Verify symlink string */
+}
+
+static void yaffs_VerifySpecial(yaffs_Object *obj)
+{
+ if(obj && yaffs_SkipVerification(obj->myDev))
+ return;
+}
+
+static void yaffs_VerifyObject(yaffs_Object *obj)
+{
+ yaffs_Device *dev;
+
+ __u32 chunkMin;
+ __u32 chunkMax;
+
+ __u32 chunkIdOk;
+ __u32 chunkIsLive;
+
+ if(!obj)
+ return;
+
+ dev = obj->myDev;
+
+ if(yaffs_SkipVerification(dev))
+ return;
+
+ /* Check sane object header chunk */
+
+ chunkMin = dev->internalStartBlock * dev->nChunksPerBlock;
+ chunkMax = (dev->internalEndBlock+1) * dev->nChunksPerBlock - 1;
+
+ chunkIdOk = (obj->chunkId >= chunkMin && obj->chunkId <= chunkMax);
+ chunkIsLive = chunkIdOk &&
+ yaffs_CheckChunkBit(dev,
+ obj->chunkId / dev->nChunksPerBlock,
+ obj->chunkId % dev->nChunksPerBlock);
+ if(!obj->fake &&
+ (!chunkIdOk || !chunkIsLive)) {
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
+ obj->objectId,obj->chunkId,
+ chunkIdOk ? "" : ",out of range",
+ chunkIsLive || !chunkIdOk ? "" : ",marked as deleted"));
+ }
+
+ if(chunkIdOk && chunkIsLive &&!yaffs_SkipNANDVerification(dev)) {
+ yaffs_ExtendedTags tags;
+ yaffs_ObjectHeader *oh;
+ __u8 *buffer = yaffs_GetTempBuffer(dev,__LINE__);
+
+ oh = (yaffs_ObjectHeader *)buffer;
+
+ yaffs_ReadChunkWithTagsFromNAND(dev, obj->chunkId,buffer, &tags);
+
+ yaffs_VerifyObjectHeader(obj,oh,&tags,1);
+
+ yaffs_ReleaseTempBuffer(dev,buffer,__LINE__);
+ }
+
+ /* Verify it has a parent */
+ if(obj && !obj->fake &&
+ (!obj->parent || obj->parent->myDev != dev)){
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
+ obj->objectId,obj->parent));
+ }
+
+ /* Verify parent is a directory */
+ if(obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY){
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
+ obj->objectId,obj->parent->variantType));
+ }
+
+ switch(obj->variantType){
+ case YAFFS_OBJECT_TYPE_FILE:
+ yaffs_VerifyFile(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ yaffs_VerifySymlink(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ yaffs_VerifyDirectory(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ yaffs_VerifyHardLink(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ yaffs_VerifySpecial(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ default:
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Obj %d has illegaltype %d"TENDSTR),
+ obj->objectId,obj->variantType));
+ break;
+ }
+
+
+}
+
+static void yaffs_VerifyObjects(yaffs_Device *dev)
+{
+ yaffs_Object *obj;
+ int i;
+ struct list_head *lh;
+
+ if(yaffs_SkipVerification(dev))
+ return;
+
+ /* Iterate through the objects in each hash entry */
+
+ for(i = 0; i < YAFFS_NOBJECT_BUCKETS; i++){
+ list_for_each(lh, &dev->objectBucket[i].list) {
+ if (lh) {
+ obj = list_entry(lh, yaffs_Object, hashLink);
+ yaffs_VerifyObject(obj);
+ }
+ }
+ }
+
+}
+
+
+/*
+ * Simple hash function. Needs to have a reasonable spread
+ */
+
+static Y_INLINE int yaffs_HashFunction(int n)
+{
+/* XXX U-BOOT XXX */
+ /*n = abs(n); */
+ if (n < 0)
+ n = -n;
+ return (n % YAFFS_NOBJECT_BUCKETS);
+}
+
+/*
+ * Access functions to useful fake objects
+ */
+
+yaffs_Object *yaffs_Root(yaffs_Device * dev)
+{
+ return dev->rootDir;
+}
+
+yaffs_Object *yaffs_LostNFound(yaffs_Device * dev)
+{
+ return dev->lostNFoundDir;
+}
+
+
+/*
+ * Erased NAND checking functions
+ */
+
+int yaffs_CheckFF(__u8 * buffer, int nBytes)
+{
+ /* Horrible, slow implementation */
+ while (nBytes--) {
+ if (*buffer != 0xFF)
+ return 0;
+ buffer++;
+ }
+ return 1;
+}
+
+static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
+ int chunkInNAND)
+{
+
+ int retval = YAFFS_OK;
+ __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
+ yaffs_ExtendedTags tags;
+ int result;
+
+ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
+
+ if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
+ retval = YAFFS_FAIL;
+
+
+ if (!yaffs_CheckFF(data, dev->nDataBytesPerChunk) || tags.chunkUsed) {
+ T(YAFFS_TRACE_NANDACCESS,
+ (TSTR("Chunk %d not erased" TENDSTR), chunkInNAND));
+ retval = YAFFS_FAIL;
+ }
+
+ yaffs_ReleaseTempBuffer(dev, data, __LINE__);
+
+ return retval;
+
+}
+
+static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
+ const __u8 * data,
+ yaffs_ExtendedTags * tags,
+ int useReserve)
+{
+ int attempts = 0;
+ int writeOk = 0;
+ int chunk;
+
+ yaffs_InvalidateCheckpoint(dev);
+
+ do {
+ yaffs_BlockInfo *bi = 0;
+ int erasedOk = 0;
+
+ chunk = yaffs_AllocateChunk(dev, useReserve, &bi);
+ if (chunk < 0) {
+ /* no space */
+ break;
+ }
+
+ /* First check this chunk is erased, if it needs
+ * checking. The checking policy (unless forced
+ * always on) is as follows:
+ *
+ * Check the first page we try to write in a block.
+ * If the check passes then we don't need to check any
+ * more. If the check fails, we check again...
+ * If the block has been erased, we don't need to check.
+ *
+ * However, if the block has been prioritised for gc,
+ * then we think there might be something odd about
+ * this block and stop using it.
+ *
+ * Rationale: We should only ever see chunks that have
+ * not been erased if there was a partially written
+ * chunk due to power loss. This checking policy should
+ * catch that case with very few checks and thus save a
+ * lot of checks that are most likely not needed.
+ */
+ if (bi->gcPrioritise) {
+ yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
+ /* try another chunk */
+ continue;
+ }
+
+ /* let's give it a try */
+ attempts++;
+
+#ifdef CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED
+ bi->skipErasedCheck = 0;
+#endif
+ if (!bi->skipErasedCheck) {
+ erasedOk = yaffs_CheckChunkErased(dev, chunk);
+ if (erasedOk != YAFFS_OK) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR ("**>> yaffs chunk %d was not erased"
+ TENDSTR), chunk));
+
+ /* try another chunk */
+ continue;
+ }
+ bi->skipErasedCheck = 1;
+ }
+
+ writeOk = yaffs_WriteChunkWithTagsToNAND(dev, chunk,
+ data, tags);
+ if (writeOk != YAFFS_OK) {
+ yaffs_HandleWriteChunkError(dev, chunk, erasedOk);
+ /* try another chunk */
+ continue;
+ }
+
+ /* Copy the data into the robustification buffer */
+ yaffs_HandleWriteChunkOk(dev, chunk, data, tags);
+
+ } while (writeOk != YAFFS_OK &&
+ (yaffs_wr_attempts <= 0 || attempts <= yaffs_wr_attempts));
+
+ if(!writeOk)
+ chunk = -1;
+
+ if (attempts > 1) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("**>> yaffs write required %d attempts" TENDSTR),
+ attempts));
+
+ dev->nRetriedWrites += (attempts - 1);
+ }
+
+ return chunk;
+}
+
+/*
+ * Block retiring for handling a broken block.
+ */
+
+static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
+{
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
+
+ yaffs_InvalidateCheckpoint(dev);
+
+ yaffs_MarkBlockBad(dev, blockInNAND);
+
+ bi->blockState = YAFFS_BLOCK_STATE_DEAD;
+ bi->gcPrioritise = 0;
+ bi->needsRetiring = 0;
+
+ dev->nRetiredBlocks++;
+}
+
+/*
+ * Functions for robustisizing TODO
+ *
+ */
+
+static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
+ const __u8 * data,
+ const yaffs_ExtendedTags * tags)
+{
+}
+
+static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
+ const yaffs_ExtendedTags * tags)
+{
+}
+
+void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
+{
+ if(!bi->gcPrioritise){
+ bi->gcPrioritise = 1;
+ dev->hasPendingPrioritisedGCs = 1;
+ bi->chunkErrorStrikes ++;
+
+ if(bi->chunkErrorStrikes > 3){
+ bi->needsRetiring = 1; /* Too many stikes, so retire this */
+ T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Block struck out" TENDSTR)));
+
+ }
+
+ }
+}
+
+static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk)
+{
+
+ int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
+
+ yaffs_HandleChunkError(dev,bi);
+
+
+ if(erasedOk ) {
+ /* Was an actual write failure, so mark the block for retirement */
+ bi->needsRetiring = 1;
+ T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
+ (TSTR("**>> Block %d needs retiring" TENDSTR), blockInNAND));
+
+
+ }
+
+ /* Delete the chunk */
+ yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
+}
+
+
+/*---------------- Name handling functions ------------*/
+
+static __u16 yaffs_CalcNameSum(const YCHAR * name)
+{
+ __u16 sum = 0;
+ __u16 i = 1;
+
+ YUCHAR *bname = (YUCHAR *) name;
+ if (bname) {
+ while ((*bname) && (i < (YAFFS_MAX_NAME_LENGTH/2))) {
+
+#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
+ sum += yaffs_toupper(*bname) * i;
+#else
+ sum += (*bname) * i;
+#endif
+ i++;
+ bname++;
+ }
+ }
+ return sum;
+}
+
+static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
+{
+#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
+ if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH) {
+ yaffs_strcpy(obj->shortName, name);
+ } else {
+ obj->shortName[0] = _Y('\0');
+ }
+#endif
+ obj->sum = yaffs_CalcNameSum(name);
+}
+
+/*-------------------- TNODES -------------------
+
+ * List of spare tnodes
+ * The list is hooked together using the first pointer
+ * in the tnode.
+ */
+
+/* yaffs_CreateTnodes creates a bunch more tnodes and
+ * adds them to the tnode free list.
+ * Don't use this function directly
+ */
+
+static int yaffs_CreateTnodes(yaffs_Device * dev, int nTnodes)
+{
+ int i;
+ int tnodeSize;
+ yaffs_Tnode *newTnodes;
+ __u8 *mem;
+ yaffs_Tnode *curr;
+ yaffs_Tnode *next;
+ yaffs_TnodeList *tnl;
+
+ if (nTnodes < 1)
+ return YAFFS_OK;
+
+ /* Calculate the tnode size in bytes for variable width tnode support.
+ * Must be a multiple of 32-bits */
+ tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
+
+ /* make these things */
+
+ newTnodes = YMALLOC(nTnodes * tnodeSize);
+ mem = (__u8 *)newTnodes;
+
+ if (!newTnodes) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ /* Hook them into the free list */
+#if 0
+ for (i = 0; i < nTnodes - 1; i++) {
+ newTnodes[i].internal[0] = &newTnodes[i + 1];
+#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
+ newTnodes[i].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
+#endif
+ }
+
+ newTnodes[nTnodes - 1].internal[0] = dev->freeTnodes;
+#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
+ newTnodes[nTnodes - 1].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
+#endif
+ dev->freeTnodes = newTnodes;
+#else
+ /* New hookup for wide tnodes */
+ for(i = 0; i < nTnodes -1; i++) {
+ curr = (yaffs_Tnode *) &mem[i * tnodeSize];
+ next = (yaffs_Tnode *) &mem[(i+1) * tnodeSize];
+ curr->internal[0] = next;
+ }
+
+ curr = (yaffs_Tnode *) &mem[(nTnodes - 1) * tnodeSize];
+ curr->internal[0] = dev->freeTnodes;
+ dev->freeTnodes = (yaffs_Tnode *)mem;
+
+#endif
+
+
+ dev->nFreeTnodes += nTnodes;
+ dev->nTnodesCreated += nTnodes;
+
+ /* Now add this bunch of tnodes to a list for freeing up.
+ * NB If we can't add this to the management list it isn't fatal
+ * but it just means we can't free this bunch of tnodes later.
+ */
+
+ tnl = YMALLOC(sizeof(yaffs_TnodeList));
+ if (!tnl) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ ("yaffs: Could not add tnodes to management list" TENDSTR)));
+ return YAFFS_FAIL;
+
+ } else {
+ tnl->tnodes = newTnodes;
+ tnl->next = dev->allocatedTnodeList;
+ dev->allocatedTnodeList = tnl;
+ }
+
+ T(YAFFS_TRACE_ALLOCATE, (TSTR("yaffs: Tnodes added" TENDSTR)));
+
+ return YAFFS_OK;
+}
+
+/* GetTnode gets us a clean tnode. Tries to make allocate more if we run out */
+
+static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device * dev)
+{
+ yaffs_Tnode *tn = NULL;
+
+ /* If there are none left make more */
+ if (!dev->freeTnodes) {
+ yaffs_CreateTnodes(dev, YAFFS_ALLOCATION_NTNODES);
+ }
+
+ if (dev->freeTnodes) {
+ tn = dev->freeTnodes;
+#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
+ if (tn->internal[YAFFS_NTNODES_INTERNAL] != (void *)1) {
+ /* Hoosterman, this thing looks like it isn't in the list */
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs: Tnode list bug 1" TENDSTR)));
+ }
+#endif
+ dev->freeTnodes = dev->freeTnodes->internal[0];
+ dev->nFreeTnodes--;
+ }
+
+ return tn;
+}
+
+static yaffs_Tnode *yaffs_GetTnode(yaffs_Device * dev)
+{
+ yaffs_Tnode *tn = yaffs_GetTnodeRaw(dev);
+
+ if(tn)
+ memset(tn, 0, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
+
+ return tn;
+}
+
+/* FreeTnode frees up a tnode and puts it back on the free list */
+static void yaffs_FreeTnode(yaffs_Device * dev, yaffs_Tnode * tn)
+{
+ if (tn) {
+#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
+ if (tn->internal[YAFFS_NTNODES_INTERNAL] != 0) {
+ /* Hoosterman, this thing looks like it is already in the list */
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs: Tnode list bug 2" TENDSTR)));
+ }
+ tn->internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
+#endif
+ tn->internal[0] = dev->freeTnodes;
+ dev->freeTnodes = tn;
+ dev->nFreeTnodes++;
+ }
+}
+
+static void yaffs_DeinitialiseTnodes(yaffs_Device * dev)
+{
+ /* Free the list of allocated tnodes */
+ yaffs_TnodeList *tmp;
+
+ while (dev->allocatedTnodeList) {
+ tmp = dev->allocatedTnodeList->next;
+
+ YFREE(dev->allocatedTnodeList->tnodes);
+ YFREE(dev->allocatedTnodeList);
+ dev->allocatedTnodeList = tmp;
+
+ }
+
+ dev->freeTnodes = NULL;
+ dev->nFreeTnodes = 0;
+}
+
+static void yaffs_InitialiseTnodes(yaffs_Device * dev)
+{
+ dev->allocatedTnodeList = NULL;
+ dev->freeTnodes = NULL;
+ dev->nFreeTnodes = 0;
+ dev->nTnodesCreated = 0;
+
+}
+
+
+void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos, unsigned val)
+{
+ __u32 *map = (__u32 *)tn;
+ __u32 bitInMap;
+ __u32 bitInWord;
+ __u32 wordInMap;
+ __u32 mask;
+
+ pos &= YAFFS_TNODES_LEVEL0_MASK;
+ val >>= dev->chunkGroupBits;
+
+ bitInMap = pos * dev->tnodeWidth;
+ wordInMap = bitInMap /32;
+ bitInWord = bitInMap & (32 -1);
+
+ mask = dev->tnodeMask << bitInWord;
+
+ map[wordInMap] &= ~mask;
+ map[wordInMap] |= (mask & (val << bitInWord));
+
+ if(dev->tnodeWidth > (32-bitInWord)) {
+ bitInWord = (32 - bitInWord);
+ wordInMap++;;
+ mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
+ map[wordInMap] &= ~mask;
+ map[wordInMap] |= (mask & (val >> bitInWord));
+ }
+}
+
+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos)
+{
+ __u32 *map = (__u32 *)tn;
+ __u32 bitInMap;
+ __u32 bitInWord;
+ __u32 wordInMap;
+ __u32 val;
+
+ pos &= YAFFS_TNODES_LEVEL0_MASK;
+
+ bitInMap = pos * dev->tnodeWidth;
+ wordInMap = bitInMap /32;
+ bitInWord = bitInMap & (32 -1);
+
+ val = map[wordInMap] >> bitInWord;
+
+ if(dev->tnodeWidth > (32-bitInWord)) {
+ bitInWord = (32 - bitInWord);
+ wordInMap++;;
+ val |= (map[wordInMap] << bitInWord);
+ }
+
+ val &= dev->tnodeMask;
+ val <<= dev->chunkGroupBits;
+
+ return val;
+}
+
+/* ------------------- End of individual tnode manipulation -----------------*/
+
+/* ---------Functions to manipulate the look-up tree (made up of tnodes) ------
+ * The look up tree is represented by the top tnode and the number of topLevel
+ * in the tree. 0 means only the level 0 tnode is in the tree.
+ */
+
+/* FindLevel0Tnode finds the level 0 tnode, if one exists. */
+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
+ yaffs_FileStructure * fStruct,
+ __u32 chunkId)
+{
+
+ yaffs_Tnode *tn = fStruct->top;
+ __u32 i;
+ int requiredTallness;
+ int level = fStruct->topLevel;
+
+ /* Check sane level and chunk Id */
+ if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) {
+ return NULL;
+ }
+
+ if (chunkId > YAFFS_MAX_CHUNK_ID) {
+ return NULL;
+ }
+
+ /* First check we're tall enough (ie enough topLevel) */
+
+ i = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
+ requiredTallness = 0;
+ while (i) {
+ i >>= YAFFS_TNODES_INTERNAL_BITS;
+ requiredTallness++;
+ }
+
+ if (requiredTallness > fStruct->topLevel) {
+ /* Not tall enough, so we can't find it, return NULL. */
+ return NULL;
+ }
+
+ /* Traverse down to level 0 */
+ while (level > 0 && tn) {
+ tn = tn->
+ internal[(chunkId >>
+ ( YAFFS_TNODES_LEVEL0_BITS +
+ (level - 1) *
+ YAFFS_TNODES_INTERNAL_BITS)
+ ) &
+ YAFFS_TNODES_INTERNAL_MASK];
+ level--;
+
+ }
+
+ return tn;
+}
+
+/* AddOrFindLevel0Tnode finds the level 0 tnode if it exists, otherwise first expands the tree.
+ * This happens in two steps:
+ * 1. If the tree isn't tall enough, then make it taller.
+ * 2. Scan down the tree towards the level 0 tnode adding tnodes if required.
+ *
+ * Used when modifying the tree.
+ *
+ * If the tn argument is NULL, then a fresh tnode will be added otherwise the specified tn will
+ * be plugged into the ttree.
+ */
+
+static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
+ yaffs_FileStructure * fStruct,
+ __u32 chunkId,
+ yaffs_Tnode *passedTn)
+{
+
+ int requiredTallness;
+ int i;
+ int l;
+ yaffs_Tnode *tn;
+
+ __u32 x;
+
+
+ /* Check sane level and page Id */
+ if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL) {
+ return NULL;
+ }
+
+ if (chunkId > YAFFS_MAX_CHUNK_ID) {
+ return NULL;
+ }
+
+ /* First check we're tall enough (ie enough topLevel) */
+
+ x = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
+ requiredTallness = 0;
+ while (x) {
+ x >>= YAFFS_TNODES_INTERNAL_BITS;
+ requiredTallness++;
+ }
+
+
+ if (requiredTallness > fStruct->topLevel) {
+ /* Not tall enough,gotta make the tree taller */
+ for (i = fStruct->topLevel; i < requiredTallness; i++) {
+
+ tn = yaffs_GetTnode(dev);
+
+ if (tn) {
+ tn->internal[0] = fStruct->top;
+ fStruct->top = tn;
+ } else {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("yaffs: no more tnodes" TENDSTR)));
+ }
+ }
+
+ fStruct->topLevel = requiredTallness;
+ }
+
+ /* Traverse down to level 0, adding anything we need */
+
+ l = fStruct->topLevel;
+ tn = fStruct->top;
+
+ if(l > 0) {
+ while (l > 0 && tn) {
+ x = (chunkId >>
+ ( YAFFS_TNODES_LEVEL0_BITS +
+ (l - 1) * YAFFS_TNODES_INTERNAL_BITS)) &
+ YAFFS_TNODES_INTERNAL_MASK;
+
+
+ if((l>1) && !tn->internal[x]){
+ /* Add missing non-level-zero tnode */
+ tn->internal[x] = yaffs_GetTnode(dev);
+
+ } else if(l == 1) {
+ /* Looking from level 1 at level 0 */
+ if (passedTn) {
+ /* If we already have one, then release it.*/
+ if(tn->internal[x])
+ yaffs_FreeTnode(dev,tn->internal[x]);
+ tn->internal[x] = passedTn;
+
+ } else if(!tn->internal[x]) {
+ /* Don't have one, none passed in */
+ tn->internal[x] = yaffs_GetTnode(dev);
+ }
+ }
+
+ tn = tn->internal[x];
+ l--;
+ }
+ } else {
+ /* top is level 0 */
+ if(passedTn) {
+ memcpy(tn,passedTn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
+ yaffs_FreeTnode(dev,passedTn);
+ }
+ }
+
+ return tn;
+}
+
+static int yaffs_FindChunkInGroup(yaffs_Device * dev, int theChunk,
+ yaffs_ExtendedTags * tags, int objectId,
+ int chunkInInode)
+{
+ int j;
+
+ for (j = 0; theChunk && j < dev->chunkGroupSize; j++) {
+ if (yaffs_CheckChunkBit
+ (dev, theChunk / dev->nChunksPerBlock,
+ theChunk % dev->nChunksPerBlock)) {
+ yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL,
+ tags);
+ if (yaffs_TagsMatch(tags, objectId, chunkInInode)) {
+ /* found it; */
+ return theChunk;
+
+ }
+ }
+ theChunk++;
+ }
+ return -1;
+}
+
+
+/* DeleteWorker scans backwards through the tnode tree and deletes all the
+ * chunks and tnodes in the file
+ * Returns 1 if the tree was deleted.
+ * Returns 0 if it stopped early due to hitting the limit and the delete is incomplete.
+ */
+
+static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
+ int chunkOffset, int *limit)
+{
+ int i;
+ int chunkInInode;
+ int theChunk;
+ yaffs_ExtendedTags tags;
+ int foundChunk;
+ yaffs_Device *dev = in->myDev;
+
+ int allDone = 1;
+
+ if (tn) {
+ if (level > 0) {
+
+ for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
+ i--) {
+ if (tn->internal[i]) {
+ if (limit && (*limit) < 0) {
+ allDone = 0;
+ } else {
+ allDone =
+ yaffs_DeleteWorker(in,
+ tn->
+ internal
+ [i],
+ level -
+ 1,
+ (chunkOffset
+ <<
+ YAFFS_TNODES_INTERNAL_BITS)
+ + i,
+ limit);
+ }
+ if (allDone) {
+ yaffs_FreeTnode(dev,
+ tn->
+ internal[i]);
+ tn->internal[i] = NULL;
+ }
+ }
+
+ }
+ return (allDone) ? 1 : 0;
+ } else if (level == 0) {
+ int hitLimit = 0;
+
+ for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0 && !hitLimit;
+ i--) {
+ theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
+ if (theChunk) {
+
+ chunkInInode =
+ (chunkOffset <<
+ YAFFS_TNODES_LEVEL0_BITS) + i;
+
+ foundChunk =
+ yaffs_FindChunkInGroup(dev,
+ theChunk,
+ &tags,
+ in->objectId,
+ chunkInInode);
+
+ if (foundChunk > 0) {
+ yaffs_DeleteChunk(dev,
+ foundChunk, 1,
+ __LINE__);
+ in->nDataChunks--;
+ if (limit) {
+ *limit = *limit - 1;
+ if (*limit <= 0) {
+ hitLimit = 1;
+ }
+ }
+
+ }
+
+ yaffs_PutLevel0Tnode(dev,tn,i,0);
+ }
+
+ }
+ return (i < 0) ? 1 : 0;
+
+ }
+
+ }
+
+ return 1;
+
+}
+
+static void yaffs_SoftDeleteChunk(yaffs_Device * dev, int chunk)
+{
+
+ yaffs_BlockInfo *theBlock;
+
+ T(YAFFS_TRACE_DELETION, (TSTR("soft delete chunk %d" TENDSTR), chunk));
+
+ theBlock = yaffs_GetBlockInfo(dev, chunk / dev->nChunksPerBlock);
+ if (theBlock) {
+ theBlock->softDeletions++;
+ dev->nFreeChunks++;
+ }
+}
+
+/* SoftDeleteWorker scans backwards through the tnode tree and soft deletes all the chunks in the file.
+ * All soft deleting does is increment the block's softdelete count and pulls the chunk out
+ * of the tnode.
+ * Thus, essentially this is the same as DeleteWorker except that the chunks are soft deleted.
+ */
+
+static int yaffs_SoftDeleteWorker(yaffs_Object * in, yaffs_Tnode * tn,
+ __u32 level, int chunkOffset)
+{
+ int i;
+ int theChunk;
+ int allDone = 1;
+ yaffs_Device *dev = in->myDev;
+
+ if (tn) {
+ if (level > 0) {
+
+ for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
+ i--) {
+ if (tn->internal[i]) {
+ allDone =
+ yaffs_SoftDeleteWorker(in,
+ tn->
+ internal[i],
+ level - 1,
+ (chunkOffset
+ <<
+ YAFFS_TNODES_INTERNAL_BITS)
+ + i);
+ if (allDone) {
+ yaffs_FreeTnode(dev,
+ tn->
+ internal[i]);
+ tn->internal[i] = NULL;
+ } else {
+ /* Hoosterman... how could this happen? */
+ }
+ }
+ }
+ return (allDone) ? 1 : 0;
+ } else if (level == 0) {
+
+ for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
+ theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
+ if (theChunk) {
+ /* Note this does not find the real chunk, only the chunk group.
+ * We make an assumption that a chunk group is not larger than
+ * a block.
+ */
+ yaffs_SoftDeleteChunk(dev, theChunk);
+ yaffs_PutLevel0Tnode(dev,tn,i,0);
+ }
+
+ }
+ return 1;
+
+ }
+
+ }
+
+ return 1;
+
+}
+
+static void yaffs_SoftDeleteFile(yaffs_Object * obj)
+{
+ if (obj->deleted &&
+ obj->variantType == YAFFS_OBJECT_TYPE_FILE && !obj->softDeleted) {
+ if (obj->nDataChunks <= 0) {
+ /* Empty file with no duplicate object headers, just delete it immediately */
+ yaffs_FreeTnode(obj->myDev,
+ obj->variant.fileVariant.top);
+ obj->variant.fileVariant.top = NULL;
+ T(YAFFS_TRACE_TRACING,
+ (TSTR("yaffs: Deleting empty file %d" TENDSTR),
+ obj->objectId));
+ yaffs_DoGenericObjectDeletion(obj);
+ } else {
+ yaffs_SoftDeleteWorker(obj,
+ obj->variant.fileVariant.top,
+ obj->variant.fileVariant.
+ topLevel, 0);
+ obj->softDeleted = 1;
+ }
+ }
+}
+
+/* Pruning removes any part of the file structure tree that is beyond the
+ * bounds of the file (ie that does not point to chunks).
+ *
+ * A file should only get pruned when its size is reduced.
+ *
+ * Before pruning, the chunks must be pulled from the tree and the
+ * level 0 tnode entries must be zeroed out.
+ * Could also use this for file deletion, but that's probably better handled
+ * by a special case.
+ */
+
+static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device * dev, yaffs_Tnode * tn,
+ __u32 level, int del0)
+{
+ int i;
+ int hasData;
+
+ if (tn) {
+ hasData = 0;
+
+ for (i = 0; i < YAFFS_NTNODES_INTERNAL; i++) {
+ if (tn->internal[i] && level > 0) {
+ tn->internal[i] =
+ yaffs_PruneWorker(dev, tn->internal[i],
+ level - 1,
+ (i == 0) ? del0 : 1);
+ }
+
+ if (tn->internal[i]) {
+ hasData++;
+ }
+ }
+
+ if (hasData == 0 && del0) {
+ /* Free and return NULL */
+
+ yaffs_FreeTnode(dev, tn);
+ tn = NULL;
+ }
+
+ }
+
+ return tn;
+
+}
+
+static int yaffs_PruneFileStructure(yaffs_Device * dev,
+ yaffs_FileStructure * fStruct)
+{
+ int i;
+ int hasData;
+ int done = 0;
+ yaffs_Tnode *tn;
+
+ if (fStruct->topLevel > 0) {
+ fStruct->top =
+ yaffs_PruneWorker(dev, fStruct->top, fStruct->topLevel, 0);
+
+ /* Now we have a tree with all the non-zero branches NULL but the height
+ * is the same as it was.
+ * Let's see if we can trim internal tnodes to shorten the tree.
+ * We can do this if only the 0th element in the tnode is in use
+ * (ie all the non-zero are NULL)
+ */
+
+ while (fStruct->topLevel && !done) {
+ tn = fStruct->top;
+
+ hasData = 0;
+ for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
+ if (tn->internal[i]) {
+ hasData++;
+ }
+ }
+
+ if (!hasData) {
+ fStruct->top = tn->internal[0];
+ fStruct->topLevel--;
+ yaffs_FreeTnode(dev, tn);
+ } else {
+ done = 1;
+ }
+ }
+ }
+
+ return YAFFS_OK;
+}
+
+/*-------------------- End of File Structure functions.-------------------*/
+
+/* yaffs_CreateFreeObjects creates a bunch more objects and
+ * adds them to the object free list.
+ */
+static int yaffs_CreateFreeObjects(yaffs_Device * dev, int nObjects)
+{
+ int i;
+ yaffs_Object *newObjects;
+ yaffs_ObjectList *list;
+
+ if (nObjects < 1)
+ return YAFFS_OK;
+
+ /* make these things */
+ newObjects = YMALLOC(nObjects * sizeof(yaffs_Object));
+ list = YMALLOC(sizeof(yaffs_ObjectList));
+
+ if (!newObjects || !list) {
+ if(newObjects)
+ YFREE(newObjects);
+ if(list)
+ YFREE(list);
+ T(YAFFS_TRACE_ALLOCATE,
+ (TSTR("yaffs: Could not allocate more objects" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ /* Hook them into the free list */
+ for (i = 0; i < nObjects - 1; i++) {
+ newObjects[i].siblings.next =
+ (struct list_head *)(&newObjects[i + 1]);
+ }
+
+ newObjects[nObjects - 1].siblings.next = (void *)dev->freeObjects;
+ dev->freeObjects = newObjects;
+ dev->nFreeObjects += nObjects;
+ dev->nObjectsCreated += nObjects;
+
+ /* Now add this bunch of Objects to a list for freeing up. */
+
+ list->objects = newObjects;
+ list->next = dev->allocatedObjectList;
+ dev->allocatedObjectList = list;
+
+ return YAFFS_OK;
+}
+
+
+/* AllocateEmptyObject gets us a clean Object. Tries to make allocate more if we run out */
+static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
+{
+ yaffs_Object *tn = NULL;
+
+ /* If there are none left make more */
+ if (!dev->freeObjects) {
+ yaffs_CreateFreeObjects(dev, YAFFS_ALLOCATION_NOBJECTS);
+ }
+
+ if (dev->freeObjects) {
+ tn = dev->freeObjects;
+ dev->freeObjects =
+ (yaffs_Object *) (dev->freeObjects->siblings.next);
+ dev->nFreeObjects--;
+
+ /* Now sweeten it up... */
+
+ memset(tn, 0, sizeof(yaffs_Object));
+ tn->myDev = dev;
+ tn->chunkId = -1;
+ tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
+ INIT_LIST_HEAD(&(tn->hardLinks));
+ INIT_LIST_HEAD(&(tn->hashLink));
+ INIT_LIST_HEAD(&tn->siblings);
+
+ /* Add it to the lost and found directory.
+ * NB Can't put root or lostNFound in lostNFound so
+ * check if lostNFound exists first
+ */
+ if (dev->lostNFoundDir) {
+ yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
+ }
+ }
+
+ return tn;
+}
+
+static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device * dev, int number,
+ __u32 mode)
+{
+
+ yaffs_Object *obj =
+ yaffs_CreateNewObject(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
+ if (obj) {
+ obj->fake = 1; /* it is fake so it has no NAND presence... */
+ obj->renameAllowed = 0; /* ... and we're not allowed to rename it... */
+ obj->unlinkAllowed = 0; /* ... or unlink it */
+ obj->deleted = 0;
+ obj->unlinked = 0;
+ obj->yst_mode = mode;
+ obj->myDev = dev;
+ obj->chunkId = 0; /* Not a valid chunk. */
+ }
+
+ return obj;
+
+}
+
+static void yaffs_UnhashObject(yaffs_Object * tn)
+{
+ int bucket;
+ yaffs_Device *dev = tn->myDev;
+
+ /* If it is still linked into the bucket list, free from the list */
+ if (!list_empty(&tn->hashLink)) {
+ list_del_init(&tn->hashLink);
+ bucket = yaffs_HashFunction(tn->objectId);
+ dev->objectBucket[bucket].count--;
+ }
+
+}
+
+/* FreeObject frees up a Object and puts it back on the free list */
+static void yaffs_FreeObject(yaffs_Object * tn)
+{
+
+ yaffs_Device *dev = tn->myDev;
+
+/* XXX U-BOOT XXX */
+#if 0
+#ifdef __KERNEL__
+ if (tn->myInode) {
+ /* We're still hooked up to a cached inode.
+ * Don't delete now, but mark for later deletion
+ */
+ tn->deferedFree = 1;
+ return;
+ }
+#endif
+#endif
+ yaffs_UnhashObject(tn);
+
+ /* Link into the free list. */
+ tn->siblings.next = (struct list_head *)(dev->freeObjects);
+ dev->freeObjects = tn;
+ dev->nFreeObjects++;
+}
+
+/* XXX U-BOOT XXX */
+#if 0
+#ifdef __KERNEL__
+
+void yaffs_HandleDeferedFree(yaffs_Object * obj)
+{
+ if (obj->deferedFree) {
+ yaffs_FreeObject(obj);
+ }
+}
+
+#endif
+#endif
+
+static void yaffs_DeinitialiseObjects(yaffs_Device * dev)
+{
+ /* Free the list of allocated Objects */
+
+ yaffs_ObjectList *tmp;
+
+ while (dev->allocatedObjectList) {
+ tmp = dev->allocatedObjectList->next;
+ YFREE(dev->allocatedObjectList->objects);
+ YFREE(dev->allocatedObjectList);
+
+ dev->allocatedObjectList = tmp;
+ }
+
+ dev->freeObjects = NULL;
+ dev->nFreeObjects = 0;
+}
+
+static void yaffs_InitialiseObjects(yaffs_Device * dev)
+{
+ int i;
+
+ dev->allocatedObjectList = NULL;
+ dev->freeObjects = NULL;
+ dev->nFreeObjects = 0;
+
+ for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
+ INIT_LIST_HEAD(&dev->objectBucket[i].list);
+ dev->objectBucket[i].count = 0;
+ }
+
+}
+
+static int yaffs_FindNiceObjectBucket(yaffs_Device * dev)
+{
+ static int x = 0;
+ int i;
+ int l = 999;
+ int lowest = 999999;
+
+ /* First let's see if we can find one that's empty. */
+
+ for (i = 0; i < 10 && lowest > 0; i++) {
+ x++;
+ x %= YAFFS_NOBJECT_BUCKETS;
+ if (dev->objectBucket[x].count < lowest) {
+ lowest = dev->objectBucket[x].count;
+ l = x;
+ }
+
+ }
+
+ /* If we didn't find an empty list, then try
+ * looking a bit further for a short one
+ */
+
+ for (i = 0; i < 10 && lowest > 3; i++) {
+ x++;
+ x %= YAFFS_NOBJECT_BUCKETS;
+ if (dev->objectBucket[x].count < lowest) {
+ lowest = dev->objectBucket[x].count;
+ l = x;
+ }
+
+ }
+
+ return l;
+}
+
+static int yaffs_CreateNewObjectNumber(yaffs_Device * dev)
+{
+ int bucket = yaffs_FindNiceObjectBucket(dev);
+
+ /* Now find an object value that has not already been taken
+ * by scanning the list.
+ */
+
+ int found = 0;
+ struct list_head *i;
+
+ __u32 n = (__u32) bucket;
+
+ /* yaffs_CheckObjectHashSanity(); */
+
+ while (!found) {
+ found = 1;
+ n += YAFFS_NOBJECT_BUCKETS;
+ if (1 || dev->objectBucket[bucket].count > 0) {
+ list_for_each(i, &dev->objectBucket[bucket].list) {
+ /* If there is already one in the list */
+ if (i
+ && list_entry(i, yaffs_Object,
+ hashLink)->objectId == n) {
+ found = 0;
+ }
+ }
+ }
+ }
+
+
+ return n;
+}
+
+static void yaffs_HashObject(yaffs_Object * in)
+{
+ int bucket = yaffs_HashFunction(in->objectId);
+ yaffs_Device *dev = in->myDev;
+
+ list_add(&in->hashLink, &dev->objectBucket[bucket].list);
+ dev->objectBucket[bucket].count++;
+
+}
+
+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number)
+{
+ int bucket = yaffs_HashFunction(number);
+ struct list_head *i;
+ yaffs_Object *in;
+
+ list_for_each(i, &dev->objectBucket[bucket].list) {
+ /* Look if it is in the list */
+ if (i) {
+ in = list_entry(i, yaffs_Object, hashLink);
+ if (in->objectId == number) {
+/* XXX U-BOOT XXX */
+#if 0
+#ifdef __KERNEL__
+ /* Don't tell the VFS about this one if it is defered free */
+ if (in->deferedFree)
+ return NULL;
+#endif
+#endif
+ return in;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
+ yaffs_ObjectType type)
+{
+
+ yaffs_Object *theObject;
+ yaffs_Tnode *tn;
+
+ if (number < 0) {
+ number = yaffs_CreateNewObjectNumber(dev);
+ }
+
+ theObject = yaffs_AllocateEmptyObject(dev);
+ if(!theObject)
+ return NULL;
+
+ if(type == YAFFS_OBJECT_TYPE_FILE){
+ tn = yaffs_GetTnode(dev);
+ if(!tn){
+ yaffs_FreeObject(theObject);
+ return NULL;
+ }
+ }
+
+
+
+ if (theObject) {
+ theObject->fake = 0;
+ theObject->renameAllowed = 1;
+ theObject->unlinkAllowed = 1;
+ theObject->objectId = number;
+ yaffs_HashObject(theObject);
+ theObject->variantType = type;
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_WinFileTimeNow(theObject->win_atime);
+ theObject->win_ctime[0] = theObject->win_mtime[0] =
+ theObject->win_atime[0];
+ theObject->win_ctime[1] = theObject->win_mtime[1] =
+ theObject->win_atime[1];
+
+#else
+
+ theObject->yst_atime = theObject->yst_mtime =
+ theObject->yst_ctime = Y_CURRENT_TIME;
+#endif
+ switch (type) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ theObject->variant.fileVariant.fileSize = 0;
+ theObject->variant.fileVariant.scannedFileSize = 0;
+ theObject->variant.fileVariant.shrinkSize = 0xFFFFFFFF; /* max __u32 */
+ theObject->variant.fileVariant.topLevel = 0;
+ theObject->variant.fileVariant.top = tn;
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ INIT_LIST_HEAD(&theObject->variant.directoryVariant.
+ children);
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* No action required */
+ break;
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* todo this should not happen */
+ break;
+ }
+ }
+
+ return theObject;
+}
+
+static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device * dev,
+ int number,
+ yaffs_ObjectType type)
+{
+ yaffs_Object *theObject = NULL;
+
+ if (number > 0) {
+ theObject = yaffs_FindObjectByNumber(dev, number);
+ }
+
+ if (!theObject) {
+ theObject = yaffs_CreateNewObject(dev, number, type);
+ }
+
+ return theObject;
+
+}
+
+
+static YCHAR *yaffs_CloneString(const YCHAR * str)
+{
+ YCHAR *newStr = NULL;
+
+ if (str && *str) {
+ newStr = YMALLOC((yaffs_strlen(str) + 1) * sizeof(YCHAR));
+ if(newStr)
+ yaffs_strcpy(newStr, str);
+ }
+
+ return newStr;
+
+}
+
+/*
+ * Mknod (create) a new object.
+ * equivalentObject only has meaning for a hard link;
+ * aliasString only has meaning for a sumlink.
+ * rdev only has meaning for devices (a subset of special objects)
+ */
+
+static yaffs_Object *yaffs_MknodObject(yaffs_ObjectType type,
+ yaffs_Object * parent,
+ const YCHAR * name,
+ __u32 mode,
+ __u32 uid,
+ __u32 gid,
+ yaffs_Object * equivalentObject,
+ const YCHAR * aliasString, __u32 rdev)
+{
+ yaffs_Object *in;
+ YCHAR *str;
+
+ yaffs_Device *dev = parent->myDev;
+
+ /* Check if the entry exists. If it does then fail the call since we don't want a dup.*/
+ if (yaffs_FindObjectByName(parent, name)) {
+ return NULL;
+ }
+
+ in = yaffs_CreateNewObject(dev, -1, type);
+
+ if(type == YAFFS_OBJECT_TYPE_SYMLINK){
+ str = yaffs_CloneString(aliasString);
+ if(!str){
+ yaffs_FreeObject(in);
+ return NULL;
+ }
+ }
+
+
+
+ if (in) {
+ in->chunkId = -1;
+ in->valid = 1;
+ in->variantType = type;
+
+ in->yst_mode = mode;
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_WinFileTimeNow(in->win_atime);
+ in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0];
+ in->win_ctime[1] = in->win_mtime[1] = in->win_atime[1];
+
+#else
+ in->yst_atime = in->yst_mtime = in->yst_ctime = Y_CURRENT_TIME;
+
+ in->yst_rdev = rdev;
+ in->yst_uid = uid;
+ in->yst_gid = gid;
+#endif
+ in->nDataChunks = 0;
+
+ yaffs_SetObjectName(in, name);
+ in->dirty = 1;
+
+ yaffs_AddObjectToDirectory(parent, in);
+
+ in->myDev = parent->myDev;
+
+ switch (type) {
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ in->variant.symLinkVariant.alias = str;
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ in->variant.hardLinkVariant.equivalentObject =
+ equivalentObject;
+ in->variant.hardLinkVariant.equivalentObjectId =
+ equivalentObject->objectId;
+ list_add(&in->hardLinks, &equivalentObject->hardLinks);
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* do nothing */
+ break;
+ }
+
+ if (yaffs_UpdateObjectHeader(in, name, 0, 0, 0) < 0) {
+ /* Could not create the object header, fail the creation */
+ yaffs_DestroyObject(in);
+ in = NULL;
+ }
+
+ }
+
+ return in;
+}
+
+yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
+ __u32 mode, __u32 uid, __u32 gid)
+{
+ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
+ uid, gid, NULL, NULL, 0);
+}
+
+yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
+ __u32 mode, __u32 uid, __u32 gid)
+{
+ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
+ mode, uid, gid, NULL, NULL, 0);
+}
+
+yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
+ __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
+{
+ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
+ uid, gid, NULL, NULL, rdev);
+}
+
+yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
+ __u32 mode, __u32 uid, __u32 gid,
+ const YCHAR * alias)
+{
+ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
+ uid, gid, NULL, alias, 0);
+}
+
+/* yaffs_Link returns the object id of the equivalent object.*/
+yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
+ yaffs_Object * equivalentObject)
+{
+ /* Get the real object in case we were fed a hard link as an equivalent object */
+ equivalentObject = yaffs_GetEquivalentObject(equivalentObject);
+
+ if (yaffs_MknodObject
+ (YAFFS_OBJECT_TYPE_HARDLINK, parent, name, 0, 0, 0,
+ equivalentObject, NULL, 0)) {
+ return equivalentObject;
+ } else {
+ return NULL;
+ }
+
+}
+
+static int yaffs_ChangeObjectName(yaffs_Object * obj, yaffs_Object * newDir,
+ const YCHAR * newName, int force, int shadows)
+{
+ int unlinkOp;
+ int deleteOp;
+
+ yaffs_Object *existingTarget;
+
+ if (newDir == NULL) {
+ newDir = obj->parent; /* use the old directory */
+ }
+
+ if (newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("tragendy: yaffs_ChangeObjectName: newDir is not a directory"
+ TENDSTR)));
+ YBUG();
+ }
+
+ /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
+ if (obj->myDev->isYaffs2) {
+ unlinkOp = (newDir == obj->myDev->unlinkedDir);
+ } else {
+ unlinkOp = (newDir == obj->myDev->unlinkedDir
+ && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
+ }
+
+ deleteOp = (newDir == obj->myDev->deletedDir);
+
+ existingTarget = yaffs_FindObjectByName(newDir, newName);
+
+ /* If the object is a file going into the unlinked directory,
+ * then it is OK to just stuff it in since duplicate names are allowed.
+ * else only proceed if the new name does not exist and if we're putting
+ * it into a directory.
+ */
+ if ((unlinkOp ||
+ deleteOp ||
+ force ||
+ (shadows > 0) ||
+ !existingTarget) &&
+ newDir->variantType == YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_SetObjectName(obj, newName);
+ obj->dirty = 1;
+
+ yaffs_AddObjectToDirectory(newDir, obj);
+
+ if (unlinkOp)
+ obj->unlinked = 1;
+
+ /* If it is a deletion then we mark it as a shrink for gc purposes. */
+ if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows)>= 0)
+ return YAFFS_OK;
+ }
+
+ return YAFFS_FAIL;
+}
+
+int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
+ yaffs_Object * newDir, const YCHAR * newName)
+{
+ yaffs_Object *obj;
+ yaffs_Object *existingTarget;
+ int force = 0;
+
+#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
+ /* Special case for case insemsitive systems (eg. WinCE).
+ * While look-up is case insensitive, the name isn't.
+ * Therefore we might want to change x.txt to X.txt
+ */
+ if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0) {
+ force = 1;
+ }
+#endif
+
+ obj = yaffs_FindObjectByName(oldDir, oldName);
+ /* Check new name to long. */
+ if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK &&
+ yaffs_strlen(newName) > YAFFS_MAX_ALIAS_LENGTH)
+ /* ENAMETOOLONG */
+ return YAFFS_FAIL;
+ else if (obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK &&
+ yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
+ /* ENAMETOOLONG */
+ return YAFFS_FAIL;
+
+ if (obj && obj->renameAllowed) {
+
+ /* Now do the handling for an existing target, if there is one */
+
+ existingTarget = yaffs_FindObjectByName(newDir, newName);
+ if (existingTarget &&
+ existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
+ !list_empty(&existingTarget->variant.directoryVariant.children)) {
+ /* There is a target that is a non-empty directory, so we fail */
+ return YAFFS_FAIL; /* EEXIST or ENOTEMPTY */
+ } else if (existingTarget && existingTarget != obj) {
+ /* Nuke the target first, using shadowing,
+ * but only if it isn't the same object
+ */
+ yaffs_ChangeObjectName(obj, newDir, newName, force,
+ existingTarget->objectId);
+ yaffs_UnlinkObject(existingTarget);
+ }
+
+ return yaffs_ChangeObjectName(obj, newDir, newName, 1, 0);
+ }
+ return YAFFS_FAIL;
+}
+
+/*------------------------- Block Management and Page Allocation ----------------*/
+
+static int yaffs_InitialiseBlocks(yaffs_Device * dev)
+{
+ int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
+
+ dev->blockInfo = NULL;
+ dev->chunkBits = NULL;
+
+ dev->allocationBlock = -1; /* force it to get a new one */
+
+ /* If the first allocation strategy fails, thry the alternate one */
+ dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
+ if(!dev->blockInfo){
+ dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo));
+ dev->blockInfoAlt = 1;
+ }
+ else
+ dev->blockInfoAlt = 0;
+
+ if(dev->blockInfo){
+
+ /* Set up dynamic blockinfo stuff. */
+ dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /* round up bytes */
+ dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
+ if(!dev->chunkBits){
+ dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
+ dev->chunkBitsAlt = 1;
+ }
+ else
+ dev->chunkBitsAlt = 0;
+ }
+
+ if (dev->blockInfo && dev->chunkBits) {
+ memset(dev->blockInfo, 0, nBlocks * sizeof(yaffs_BlockInfo));
+ memset(dev->chunkBits, 0, dev->chunkBitmapStride * nBlocks);
+ return YAFFS_OK;
+ }
+
+ return YAFFS_FAIL;
+
+}
+
+static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
+{
+ if(dev->blockInfoAlt && dev->blockInfo)
+ YFREE_ALT(dev->blockInfo);
+ else if(dev->blockInfo)
+ YFREE(dev->blockInfo);
+
+ dev->blockInfoAlt = 0;
+
+ dev->blockInfo = NULL;
+
+ if(dev->chunkBitsAlt && dev->chunkBits)
+ YFREE_ALT(dev->chunkBits);
+ else if(dev->chunkBits)
+ YFREE(dev->chunkBits);
+ dev->chunkBitsAlt = 0;
+ dev->chunkBits = NULL;
+}
+
+static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device * dev,
+ yaffs_BlockInfo * bi)
+{
+ int i;
+ __u32 seq;
+ yaffs_BlockInfo *b;
+
+ if (!dev->isYaffs2)
+ return 1; /* disqualification only applies to yaffs2. */
+
+ if (!bi->hasShrinkHeader)
+ return 1; /* can gc */
+
+ /* Find the oldest dirty sequence number if we don't know it and save it
+ * so we don't have to keep recomputing it.
+ */
+ if (!dev->oldestDirtySequence) {
+ seq = dev->sequenceNumber;
+
+ for (i = dev->internalStartBlock; i <= dev->internalEndBlock;
+ i++) {
+ b = yaffs_GetBlockInfo(dev, i);
+ if (b->blockState == YAFFS_BLOCK_STATE_FULL &&
+ (b->pagesInUse - b->softDeletions) <
+ dev->nChunksPerBlock && b->sequenceNumber < seq) {
+ seq = b->sequenceNumber;
+ }
+ }
+ dev->oldestDirtySequence = seq;
+ }
+
+ /* Can't do gc of this block if there are any blocks older than this one that have
+ * discarded pages.
+ */
+ return (bi->sequenceNumber <= dev->oldestDirtySequence);
+
+}
+
+/* FindDiretiestBlock is used to select the dirtiest block (or close enough)
+ * for garbage collection.
+ */
+
+static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
+ int aggressive)
+{
+
+ int b = dev->currentDirtyChecker;
+
+ int i;
+ int iterations;
+ int dirtiest = -1;
+ int pagesInUse = 0;
+ int prioritised=0;
+ yaffs_BlockInfo *bi;
+ int pendingPrioritisedExist = 0;
+
+ /* First let's see if we need to grab a prioritised block */
+ if(dev->hasPendingPrioritisedGCs){
+ for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
+
+ bi = yaffs_GetBlockInfo(dev, i);
+ //yaffs_VerifyBlock(dev,bi,i);
+
+ if(bi->gcPrioritise) {
+ pendingPrioritisedExist = 1;
+ if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
+ yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
+ pagesInUse = (bi->pagesInUse - bi->softDeletions);
+ dirtiest = i;
+ prioritised = 1;
+ aggressive = 1; /* Fool the non-aggressive skip logiv below */
+ }
+ }
+ }
+
+ if(!pendingPrioritisedExist) /* None found, so we can clear this */
+ dev->hasPendingPrioritisedGCs = 0;
+ }
+
+ /* If we're doing aggressive GC then we are happy to take a less-dirty block, and
+ * search harder.
+ * else (we're doing a leasurely gc), then we only bother to do this if the
+ * block has only a few pages in use.
+ */
+
+ dev->nonAggressiveSkip--;
+
+ if (!aggressive && (dev->nonAggressiveSkip > 0)) {
+ return -1;
+ }
+
+ if(!prioritised)
+ pagesInUse =
+ (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
+
+ if (aggressive) {
+ iterations =
+ dev->internalEndBlock - dev->internalStartBlock + 1;
+ } else {
+ iterations =
+ dev->internalEndBlock - dev->internalStartBlock + 1;
+ iterations = iterations / 16;
+ if (iterations > 200) {
+ iterations = 200;
+ }
+ }
+
+ for (i = 0; i <= iterations && pagesInUse > 0 && !prioritised; i++) {
+ b++;
+ if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
+ b = dev->internalStartBlock;
+ }
+
+ if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("**>> Block %d is not valid" TENDSTR), b));
+ YBUG();
+ }
+
+ bi = yaffs_GetBlockInfo(dev, b);
+
+#if 0
+ if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
+ dirtiest = b;
+ pagesInUse = 0;
+ }
+ else
+#endif
+
+ if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
+ (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
+ yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
+ dirtiest = b;
+ pagesInUse = (bi->pagesInUse - bi->softDeletions);
+ }
+ }
+
+ dev->currentDirtyChecker = b;
+
+ if (dirtiest > 0) {
+ T(YAFFS_TRACE_GC,
+ (TSTR("GC Selected block %d with %d free, prioritised:%d" TENDSTR), dirtiest,
+ dev->nChunksPerBlock - pagesInUse,prioritised));
+ }
+
+ dev->oldestDirtySequence = 0;
+
+ if (dirtiest > 0) {
+ dev->nonAggressiveSkip = 4;
+ }
+
+ return dirtiest;
+}
+
+static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
+{
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockNo);
+
+ int erasedOk = 0;
+
+ /* If the block is still healthy erase it and mark as clean.
+ * If the block has had a data failure, then retire it.
+ */
+
+ T(YAFFS_TRACE_GC | YAFFS_TRACE_ERASE,
+ (TSTR("yaffs_BlockBecameDirty block %d state %d %s"TENDSTR),
+ blockNo, bi->blockState, (bi->needsRetiring) ? "needs retiring" : ""));
+
+ bi->blockState = YAFFS_BLOCK_STATE_DIRTY;
+
+ if (!bi->needsRetiring) {
+ yaffs_InvalidateCheckpoint(dev);
+ erasedOk = yaffs_EraseBlockInNAND(dev, blockNo);
+ if (!erasedOk) {
+ dev->nErasureFailures++;
+ T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
+ (TSTR("**>> Erasure failed %d" TENDSTR), blockNo));
+ }
+ }
+
+ if (erasedOk &&
+ ((yaffs_traceMask & YAFFS_TRACE_ERASE) || !yaffs_SkipVerification(dev))) {
+ int i;
+ for (i = 0; i < dev->nChunksPerBlock; i++) {
+ if (!yaffs_CheckChunkErased
+ (dev, blockNo * dev->nChunksPerBlock + i)) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ (">>Block %d erasure supposedly OK, but chunk %d not erased"
+ TENDSTR), blockNo, i));
+ }
+ }
+ }
+
+ if (erasedOk) {
+ /* Clean it up... */
+ bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
+ dev->nErasedBlocks++;
+ bi->pagesInUse = 0;
+ bi->softDeletions = 0;
+ bi->hasShrinkHeader = 0;
+ bi->skipErasedCheck = 1; /* This is clean, so no need to check */
+ bi->gcPrioritise = 0;
+ yaffs_ClearChunkBits(dev, blockNo);
+
+ T(YAFFS_TRACE_ERASE,
+ (TSTR("Erased block %d" TENDSTR), blockNo));
+ } else {
+ dev->nFreeChunks -= dev->nChunksPerBlock; /* We lost a block of free space */
+
+ yaffs_RetireBlock(dev, blockNo);
+ T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
+ (TSTR("**>> Block %d retired" TENDSTR), blockNo));
+ }
+}
+
+static int yaffs_FindBlockForAllocation(yaffs_Device * dev)
+{
+ int i;
+
+ yaffs_BlockInfo *bi;
+
+ if (dev->nErasedBlocks < 1) {
+ /* Hoosterman we've got a problem.
+ * Can't get space to gc
+ */
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("yaffs tragedy: no more eraased blocks" TENDSTR)));
+
+ return -1;
+ }
+
+ /* Find an empty block. */
+
+ for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
+ dev->allocationBlockFinder++;
+ if (dev->allocationBlockFinder < dev->internalStartBlock
+ || dev->allocationBlockFinder > dev->internalEndBlock) {
+ dev->allocationBlockFinder = dev->internalStartBlock;
+ }
+
+ bi = yaffs_GetBlockInfo(dev, dev->allocationBlockFinder);
+
+ if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) {
+ bi->blockState = YAFFS_BLOCK_STATE_ALLOCATING;
+ dev->sequenceNumber++;
+ bi->sequenceNumber = dev->sequenceNumber;
+ dev->nErasedBlocks--;
+ T(YAFFS_TRACE_ALLOCATE,
+ (TSTR("Allocated block %d, seq %d, %d left" TENDSTR),
+ dev->allocationBlockFinder, dev->sequenceNumber,
+ dev->nErasedBlocks));
+ return dev->allocationBlockFinder;
+ }
+ }
+
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("yaffs tragedy: no more eraased blocks, but there should have been %d"
+ TENDSTR), dev->nErasedBlocks));
+
+ return -1;
+}
+
+
+// Check if there's space to allocate...
+// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
+static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
+{
+ int reservedChunks;
+ int reservedBlocks = dev->nReservedBlocks;
+ int checkpointBlocks;
+
+ checkpointBlocks = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
+ if(checkpointBlocks < 0)
+ checkpointBlocks = 0;
+
+ reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
+
+ return (dev->nFreeChunks > reservedChunks);
+}
+
+static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr)
+{
+ int retVal;
+ yaffs_BlockInfo *bi;
+
+ if (dev->allocationBlock < 0) {
+ /* Get next block to allocate off */
+ dev->allocationBlock = yaffs_FindBlockForAllocation(dev);
+ dev->allocationPage = 0;
+ }
+
+ if (!useReserve && !yaffs_CheckSpaceForAllocation(dev)) {
+ /* Not enough space to allocate unless we're allowed to use the reserve. */
+ return -1;
+ }
+
+ if (dev->nErasedBlocks < dev->nReservedBlocks
+ && dev->allocationPage == 0) {
+ T(YAFFS_TRACE_ALLOCATE, (TSTR("Allocating reserve" TENDSTR)));
+ }
+
+ /* Next page please.... */
+ if (dev->allocationBlock >= 0) {
+ bi = yaffs_GetBlockInfo(dev, dev->allocationBlock);
+
+ retVal = (dev->allocationBlock * dev->nChunksPerBlock) +
+ dev->allocationPage;
+ bi->pagesInUse++;
+ yaffs_SetChunkBit(dev, dev->allocationBlock,
+ dev->allocationPage);
+
+ dev->allocationPage++;
+
+ dev->nFreeChunks--;
+
+ /* If the block is full set the state to full */
+ if (dev->allocationPage >= dev->nChunksPerBlock) {
+ bi->blockState = YAFFS_BLOCK_STATE_FULL;
+ dev->allocationBlock = -1;
+ }
+
+ if(blockUsedPtr)
+ *blockUsedPtr = bi;
+
+ return retVal;
+ }
+
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
+
+ return -1;
+}
+
+static int yaffs_GetErasedChunks(yaffs_Device * dev)
+{
+ int n;
+
+ n = dev->nErasedBlocks * dev->nChunksPerBlock;
+
+ if (dev->allocationBlock > 0) {
+ n += (dev->nChunksPerBlock - dev->allocationPage);
+ }
+
+ return n;
+
+}
+
+static int yaffs_GarbageCollectBlock(yaffs_Device * dev, int block)
+{
+ int oldChunk;
+ int newChunk;
+ int chunkInBlock;
+ int markNAND;
+ int retVal = YAFFS_OK;
+ int cleanups = 0;
+ int i;
+ int isCheckpointBlock;
+ int matchingChunk;
+
+ int chunksBefore = yaffs_GetErasedChunks(dev);
+ int chunksAfter;
+
+ yaffs_ExtendedTags tags;
+
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, block);
+
+ yaffs_Object *object;
+
+ isCheckpointBlock = (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT);
+
+ bi->blockState = YAFFS_BLOCK_STATE_COLLECTING;
+
+ T(YAFFS_TRACE_TRACING,
+ (TSTR("Collecting block %d, in use %d, shrink %d, " TENDSTR), block,
+ bi->pagesInUse, bi->hasShrinkHeader));
+
+ /*yaffs_VerifyFreeChunks(dev); */
+
+ bi->hasShrinkHeader = 0; /* clear the flag so that the block can erase */
+
+ /* Take off the number of soft deleted entries because
+ * they're going to get really deleted during GC.
+ */
+ dev->nFreeChunks -= bi->softDeletions;
+
+ dev->isDoingGC = 1;
+
+ if (isCheckpointBlock ||
+ !yaffs_StillSomeChunkBits(dev, block)) {
+ T(YAFFS_TRACE_TRACING,
+ (TSTR
+ ("Collecting block %d that has no chunks in use" TENDSTR),
+ block));
+ yaffs_BlockBecameDirty(dev, block);
+ } else {
+
+ __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
+
+ yaffs_VerifyBlock(dev,bi,block);
+
+ for (chunkInBlock = 0, oldChunk = block * dev->nChunksPerBlock;
+ chunkInBlock < dev->nChunksPerBlock
+ && yaffs_StillSomeChunkBits(dev, block);
+ chunkInBlock++, oldChunk++) {
+ if (yaffs_CheckChunkBit(dev, block, chunkInBlock)) {
+
+ /* This page is in use and might need to be copied off */
+
+ markNAND = 1;
+
+ yaffs_InitialiseTags(&tags);
+
+ yaffs_ReadChunkWithTagsFromNAND(dev, oldChunk,
+ buffer, &tags);
+
+ object =
+ yaffs_FindObjectByNumber(dev,
+ tags.objectId);
+
+ T(YAFFS_TRACE_GC_DETAIL,
+ (TSTR
+ ("Collecting page %d, %d %d %d " TENDSTR),
+ chunkInBlock, tags.objectId, tags.chunkId,
+ tags.byteCount));
+
+ if(object && !yaffs_SkipVerification(dev)){
+ if(tags.chunkId == 0)
+ matchingChunk = object->chunkId;
+ else if(object->softDeleted)
+ matchingChunk = oldChunk; /* Defeat the test */
+ else
+ matchingChunk = yaffs_FindChunkInFile(object,tags.chunkId,NULL);
+
+ if(oldChunk != matchingChunk)
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("gc: page in gc mismatch: %d %d %d %d"TENDSTR),
+ oldChunk,matchingChunk,tags.objectId, tags.chunkId));
+
+ }
+
+ if (!object) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ ("page %d in gc has no object: %d %d %d "
+ TENDSTR), oldChunk,
+ tags.objectId, tags.chunkId, tags.byteCount));
+ }
+
+ if (object && object->deleted
+ && tags.chunkId != 0) {
+ /* Data chunk in a deleted file, throw it away
+ * It's a soft deleted data chunk,
+ * No need to copy this, just forget about it and
+ * fix up the object.
+ */
+
+ object->nDataChunks--;
+
+ if (object->nDataChunks <= 0) {
+ /* remeber to clean up the object */
+ dev->gcCleanupList[cleanups] =
+ tags.objectId;
+ cleanups++;
+ }
+ markNAND = 0;
+ } else if (0
+ /* Todo object && object->deleted && object->nDataChunks == 0 */
+ ) {
+ /* Deleted object header with no data chunks.
+ * Can be discarded and the file deleted.
+ */
+ object->chunkId = 0;
+ yaffs_FreeTnode(object->myDev,
+ object->variant.
+ fileVariant.top);
+ object->variant.fileVariant.top = NULL;
+ yaffs_DoGenericObjectDeletion(object);
+
+ } else if (object) {
+ /* It's either a data chunk in a live file or
+ * an ObjectHeader, so we're interested in it.
+ * NB Need to keep the ObjectHeaders of deleted files
+ * until the whole file has been deleted off
+ */
+ tags.serialNumber++;
+
+ dev->nGCCopies++;
+
+ if (tags.chunkId == 0) {
+ /* It is an object Id,
+ * We need to nuke the shrinkheader flags first
+ * We no longer want the shrinkHeader flag since its work is done
+ * and if it is left in place it will mess up scanning.
+ * Also, clear out any shadowing stuff
+ */
+
+ yaffs_ObjectHeader *oh;
+ oh = (yaffs_ObjectHeader *)buffer;
+ oh->isShrink = 0;
+ oh->shadowsObject = -1;
+ tags.extraShadows = 0;
+ tags.extraIsShrinkHeader = 0;
+
+ yaffs_VerifyObjectHeader(object,oh,&tags,1);
+ }
+
+ newChunk =
+ yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &tags, 1);
+
+ if (newChunk < 0) {
+ retVal = YAFFS_FAIL;
+ } else {
+
+ /* Ok, now fix up the Tnodes etc. */
+
+ if (tags.chunkId == 0) {
+ /* It's a header */
+ object->chunkId = newChunk;
+ object->serial = tags.serialNumber;
+ } else {
+ /* It's a data chunk */
+ yaffs_PutChunkIntoFile
+ (object,
+ tags.chunkId,
+ newChunk, 0);
+ }
+ }
+ }
+
+ yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
+
+ }
+ }
+
+ yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
+
+
+ /* Do any required cleanups */
+ for (i = 0; i < cleanups; i++) {
+ /* Time to delete the file too */
+ object =
+ yaffs_FindObjectByNumber(dev,
+ dev->gcCleanupList[i]);
+ if (object) {
+ yaffs_FreeTnode(dev,
+ object->variant.fileVariant.
+ top);
+ object->variant.fileVariant.top = NULL;
+ T(YAFFS_TRACE_GC,
+ (TSTR
+ ("yaffs: About to finally delete object %d"
+ TENDSTR), object->objectId));
+ yaffs_DoGenericObjectDeletion(object);
+ object->myDev->nDeletedFiles--;
+ }
+
+ }
+
+ }
+
+ yaffs_VerifyCollectedBlock(dev,bi,block);
+
+ if (chunksBefore >= (chunksAfter = yaffs_GetErasedChunks(dev))) {
+ T(YAFFS_TRACE_GC,
+ (TSTR
+ ("gc did not increase free chunks before %d after %d"
+ TENDSTR), chunksBefore, chunksAfter));
+ }
+
+ dev->isDoingGC = 0;
+
+ return YAFFS_OK;
+}
+
+/* New garbage collector
+ * If we're very low on erased blocks then we do aggressive garbage collection
+ * otherwise we do "leasurely" garbage collection.
+ * Aggressive gc looks further (whole array) and will accept less dirty blocks.
+ * Passive gc only inspects smaller areas and will only accept more dirty blocks.
+ *
+ * The idea is to help clear out space in a more spread-out manner.
+ * Dunno if it really does anything useful.
+ */
+static int yaffs_CheckGarbageCollection(yaffs_Device * dev)
+{
+ int block;
+ int aggressive;
+ int gcOk = YAFFS_OK;
+ int maxTries = 0;
+
+ int checkpointBlockAdjust;
+
+ if (dev->isDoingGC) {
+ /* Bail out so we don't get recursive gc */
+ return YAFFS_OK;
+ }
+
+ /* This loop should pass the first time.
+ * We'll only see looping here if the erase of the collected block fails.
+ */
+
+ do {
+ maxTries++;
+
+ checkpointBlockAdjust = (dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint);
+ if(checkpointBlockAdjust < 0)
+ checkpointBlockAdjust = 0;
+
+ if (dev->nErasedBlocks < (dev->nReservedBlocks + checkpointBlockAdjust + 2)) {
+ /* We need a block soon...*/
+ aggressive = 1;
+ } else {
+ /* We're in no hurry */
+ aggressive = 0;
+ }
+
+ block = yaffs_FindBlockForGarbageCollection(dev, aggressive);
+
+ if (block > 0) {
+ dev->garbageCollections++;
+ if (!aggressive) {
+ dev->passiveGarbageCollections++;
+ }
+
+ T(YAFFS_TRACE_GC,
+ (TSTR
+ ("yaffs: GC erasedBlocks %d aggressive %d" TENDSTR),
+ dev->nErasedBlocks, aggressive));
+
+ gcOk = yaffs_GarbageCollectBlock(dev, block);
+ }
+
+ if (dev->nErasedBlocks < (dev->nReservedBlocks) && block > 0) {
+ T(YAFFS_TRACE_GC,
+ (TSTR
+ ("yaffs: GC !!!no reclaim!!! erasedBlocks %d after try %d block %d"
+ TENDSTR), dev->nErasedBlocks, maxTries, block));
+ }
+ } while ((dev->nErasedBlocks < dev->nReservedBlocks) && (block > 0)
+ && (maxTries < 2));
+
+ return aggressive ? gcOk : YAFFS_OK;
+}
+
+/*------------------------- TAGS --------------------------------*/
+
+static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
+ int chunkInObject)
+{
+ return (tags->chunkId == chunkInObject &&
+ tags->objectId == objectId && !tags->chunkDeleted) ? 1 : 0;
+
+}
+
+
+/*-------------------- Data file manipulation -----------------*/
+
+static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
+ yaffs_ExtendedTags * tags)
+{
+ /*Get the Tnode, then get the level 0 offset chunk offset */
+ yaffs_Tnode *tn;
+ int theChunk = -1;
+ yaffs_ExtendedTags localTags;
+ int retVal = -1;
+
+ yaffs_Device *dev = in->myDev;
+
+ if (!tags) {
+ /* Passed a NULL, so use our own tags space */
+ tags = &localTags;
+ }
+
+ tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
+
+ if (tn) {
+ theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
+
+ retVal =
+ yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
+ chunkInInode);
+ }
+ return retVal;
+}
+
+static int yaffs_FindAndDeleteChunkInFile(yaffs_Object * in, int chunkInInode,
+ yaffs_ExtendedTags * tags)
+{
+ /* Get the Tnode, then get the level 0 offset chunk offset */
+ yaffs_Tnode *tn;
+ int theChunk = -1;
+ yaffs_ExtendedTags localTags;
+
+ yaffs_Device *dev = in->myDev;
+ int retVal = -1;
+
+ if (!tags) {
+ /* Passed a NULL, so use our own tags space */
+ tags = &localTags;
+ }
+
+ tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
+
+ if (tn) {
+
+ theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
+
+ retVal =
+ yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
+ chunkInInode);
+
+ /* Delete the entry in the filestructure (if found) */
+ if (retVal != -1) {
+ yaffs_PutLevel0Tnode(dev,tn,chunkInInode,0);
+ }
+ } else {
+ /*T(("No level 0 found for %d\n", chunkInInode)); */
+ }
+
+ if (retVal == -1) {
+ /* T(("Could not find %d to delete\n",chunkInInode)); */
+ }
+ return retVal;
+}
+
+#ifdef YAFFS_PARANOID
+
+static int yaffs_CheckFileSanity(yaffs_Object * in)
+{
+ int chunk;
+ int nChunks;
+ int fSize;
+ int failed = 0;
+ int objId;
+ yaffs_Tnode *tn;
+ yaffs_Tags localTags;
+ yaffs_Tags *tags = &localTags;
+ int theChunk;
+ int chunkDeleted;
+
+ if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
+ /* T(("Object not a file\n")); */
+ return YAFFS_FAIL;
+ }
+
+ objId = in->objectId;
+ fSize = in->variant.fileVariant.fileSize;
+ nChunks =
+ (fSize + in->myDev->nDataBytesPerChunk - 1) / in->myDev->nDataBytesPerChunk;
+
+ for (chunk = 1; chunk <= nChunks; chunk++) {
+ tn = yaffs_FindLevel0Tnode(in->myDev, &in->variant.fileVariant,
+ chunk);
+
+ if (tn) {
+
+ theChunk = yaffs_GetChunkGroupBase(dev,tn,chunk);
+
+ if (yaffs_CheckChunkBits
+ (dev, theChunk / dev->nChunksPerBlock,
+ theChunk % dev->nChunksPerBlock)) {
+
+ yaffs_ReadChunkTagsFromNAND(in->myDev, theChunk,
+ tags,
+ &chunkDeleted);
+ if (yaffs_TagsMatch
+ (tags, in->objectId, chunk, chunkDeleted)) {
+ /* found it; */
+
+ }
+ } else {
+
+ failed = 1;
+ }
+
+ } else {
+ /* T(("No level 0 found for %d\n", chunk)); */
+ }
+ }
+
+ return failed ? YAFFS_FAIL : YAFFS_OK;
+}
+
+#endif
+
+static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
+ int chunkInNAND, int inScan)
+{
+ /* NB inScan is zero unless scanning.
+ * For forward scanning, inScan is > 0;
+ * for backward scanning inScan is < 0
+ */
+
+ yaffs_Tnode *tn;
+ yaffs_Device *dev = in->myDev;
+ int existingChunk;
+ yaffs_ExtendedTags existingTags;
+ yaffs_ExtendedTags newTags;
+ unsigned existingSerial, newSerial;
+
+ if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
+ /* Just ignore an attempt at putting a chunk into a non-file during scanning
+ * If it is not during Scanning then something went wrong!
+ */
+ if (!inScan) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ ("yaffs tragedy:attempt to put data chunk into a non-file"
+ TENDSTR)));
+ YBUG();
+ }
+
+ yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
+ return YAFFS_OK;
+ }
+
+ tn = yaffs_AddOrFindLevel0Tnode(dev,
+ &in->variant.fileVariant,
+ chunkInInode,
+ NULL);
+ if (!tn) {
+ return YAFFS_FAIL;
+ }
+
+ existingChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
+
+ if (inScan != 0) {
+ /* If we're scanning then we need to test for duplicates
+ * NB This does not need to be efficient since it should only ever
+ * happen when the power fails during a write, then only one
+ * chunk should ever be affected.
+ *
+ * Correction for YAFFS2: This could happen quite a lot and we need to think about efficiency! TODO
+ * Update: For backward scanning we don't need to re-read tags so this is quite cheap.
+ */
+
+ if (existingChunk != 0) {
+ /* NB Right now existing chunk will not be real chunkId if the device >= 32MB
+ * thus we have to do a FindChunkInFile to get the real chunk id.
+ *
+ * We have a duplicate now we need to decide which one to use:
+ *
+ * Backwards scanning YAFFS2: The old one is what we use, dump the new one.
+ * Forward scanning YAFFS2: The new one is what we use, dump the old one.
+ * YAFFS1: Get both sets of tags and compare serial numbers.
+ */
+
+ if (inScan > 0) {
+ /* Only do this for forward scanning */
+ yaffs_ReadChunkWithTagsFromNAND(dev,
+ chunkInNAND,
+ NULL, &newTags);
+
+ /* Do a proper find */
+ existingChunk =
+ yaffs_FindChunkInFile(in, chunkInInode,
+ &existingTags);
+ }
+
+ if (existingChunk <= 0) {
+ /*Hoosterman - how did this happen? */
+
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ ("yaffs tragedy: existing chunk < 0 in scan"
+ TENDSTR)));
+
+ }
+
+ /* NB The deleted flags should be false, otherwise the chunks will
+ * not be loaded during a scan
+ */
+
+ newSerial = newTags.serialNumber;
+ existingSerial = existingTags.serialNumber;
+
+ if ((inScan > 0) &&
+ (in->myDev->isYaffs2 ||
+ existingChunk <= 0 ||
+ ((existingSerial + 1) & 3) == newSerial)) {
+ /* Forward scanning.
+ * Use new
+ * Delete the old one and drop through to update the tnode
+ */
+ yaffs_DeleteChunk(dev, existingChunk, 1,
+ __LINE__);
+ } else {
+ /* Backward scanning or we want to use the existing one
+ * Use existing.
+ * Delete the new one and return early so that the tnode isn't changed
+ */
+ yaffs_DeleteChunk(dev, chunkInNAND, 1,
+ __LINE__);
+ return YAFFS_OK;
+ }
+ }
+
+ }
+
+ if (existingChunk == 0) {
+ in->nDataChunks++;
+ }
+
+ yaffs_PutLevel0Tnode(dev,tn,chunkInInode,chunkInNAND);
+
+ return YAFFS_OK;
+}
+
+static int yaffs_ReadChunkDataFromObject(yaffs_Object * in, int chunkInInode,
+ __u8 * buffer)
+{
+ int chunkInNAND = yaffs_FindChunkInFile(in, chunkInInode, NULL);
+
+ if (chunkInNAND >= 0) {
+ return yaffs_ReadChunkWithTagsFromNAND(in->myDev, chunkInNAND,
+ buffer,NULL);
+ } else {
+ T(YAFFS_TRACE_NANDACCESS,
+ (TSTR("Chunk %d not found zero instead" TENDSTR),
+ chunkInNAND));
+ /* get sane (zero) data if you read a hole */
+ memset(buffer, 0, in->myDev->nDataBytesPerChunk);
+ return 0;
+ }
+
+}
+
+void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn)
+{
+ int block;
+ int page;
+ yaffs_ExtendedTags tags;
+ yaffs_BlockInfo *bi;
+
+ if (chunkId <= 0)
+ return;
+
+
+ dev->nDeletions++;
+ block = chunkId / dev->nChunksPerBlock;
+ page = chunkId % dev->nChunksPerBlock;
+
+
+ if(!yaffs_CheckChunkBit(dev,block,page))
+ T(YAFFS_TRACE_VERIFY,
+ (TSTR("Deleting invalid chunk %d"TENDSTR),
+ chunkId));
+
+ bi = yaffs_GetBlockInfo(dev, block);
+
+ T(YAFFS_TRACE_DELETION,
+ (TSTR("line %d delete of chunk %d" TENDSTR), lyn, chunkId));
+
+ if (markNAND &&
+ bi->blockState != YAFFS_BLOCK_STATE_COLLECTING && !dev->isYaffs2) {
+
+ yaffs_InitialiseTags(&tags);
+
+ tags.chunkDeleted = 1;
+
+ yaffs_WriteChunkWithTagsToNAND(dev, chunkId, NULL, &tags);
+ yaffs_HandleUpdateChunk(dev, chunkId, &tags);
+ } else {
+ dev->nUnmarkedDeletions++;
+ }
+
+ /* Pull out of the management area.
+ * If the whole block became dirty, this will kick off an erasure.
+ */
+ if (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING ||
+ bi->blockState == YAFFS_BLOCK_STATE_FULL ||
+ bi->blockState == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
+ bi->blockState == YAFFS_BLOCK_STATE_COLLECTING) {
+ dev->nFreeChunks++;
+
+ yaffs_ClearChunkBit(dev, block, page);
+
+ bi->pagesInUse--;
+
+ if (bi->pagesInUse == 0 &&
+ !bi->hasShrinkHeader &&
+ bi->blockState != YAFFS_BLOCK_STATE_ALLOCATING &&
+ bi->blockState != YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
+ yaffs_BlockBecameDirty(dev, block);
+ }
+
+ } else {
+ /* T(("Bad news deleting chunk %d\n",chunkId)); */
+ }
+
+}
+
+static int yaffs_WriteChunkDataToObject(yaffs_Object * in, int chunkInInode,
+ const __u8 * buffer, int nBytes,
+ int useReserve)
+{
+ /* Find old chunk Need to do this to get serial number
+ * Write new one and patch into tree.
+ * Invalidate old tags.
+ */
+
+ int prevChunkId;
+ yaffs_ExtendedTags prevTags;
+
+ int newChunkId;
+ yaffs_ExtendedTags newTags;
+
+ yaffs_Device *dev = in->myDev;
+
+ yaffs_CheckGarbageCollection(dev);
+
+ /* Get the previous chunk at this location in the file if it exists */
+ prevChunkId = yaffs_FindChunkInFile(in, chunkInInode, &prevTags);
+
+ /* Set up new tags */
+ yaffs_InitialiseTags(&newTags);
+
+ newTags.chunkId = chunkInInode;
+ newTags.objectId = in->objectId;
+ newTags.serialNumber =
+ (prevChunkId >= 0) ? prevTags.serialNumber + 1 : 1;
+ newTags.byteCount = nBytes;
+
+ newChunkId =
+ yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
+ useReserve);
+
+ if (newChunkId >= 0) {
+ yaffs_PutChunkIntoFile(in, chunkInInode, newChunkId, 0);
+
+ if (prevChunkId >= 0) {
+ yaffs_DeleteChunk(dev, prevChunkId, 1, __LINE__);
+
+ }
+
+ yaffs_CheckFileSanity(in);
+ }
+ return newChunkId;
+
+}
+
+/* UpdateObjectHeader updates the header on NAND for an object.
+ * If name is not NULL, then that new name is used.
+ */
+int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
+ int isShrink, int shadows)
+{
+
+ yaffs_BlockInfo *bi;
+
+ yaffs_Device *dev = in->myDev;
+
+ int prevChunkId;
+ int retVal = 0;
+ int result = 0;
+
+ int newChunkId;
+ yaffs_ExtendedTags newTags;
+ yaffs_ExtendedTags oldTags;
+
+ __u8 *buffer = NULL;
+ YCHAR oldName[YAFFS_MAX_NAME_LENGTH + 1];
+
+ yaffs_ObjectHeader *oh = NULL;
+
+ yaffs_strcpy(oldName,"silly old name");
+
+ if (!in->fake || force) {
+
+ yaffs_CheckGarbageCollection(dev);
+ yaffs_CheckObjectDetailsLoaded(in);
+
+ buffer = yaffs_GetTempBuffer(in->myDev, __LINE__);
+ oh = (yaffs_ObjectHeader *) buffer;
+
+ prevChunkId = in->chunkId;
+
+ if (prevChunkId >= 0) {
+ result = yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
+ buffer, &oldTags);
+
+ yaffs_VerifyObjectHeader(in,oh,&oldTags,0);
+
+ memcpy(oldName, oh->name, sizeof(oh->name));
+ }
+
+ memset(buffer, 0xFF, dev->nDataBytesPerChunk);
+
+ oh->type = in->variantType;
+ oh->yst_mode = in->yst_mode;
+ oh->shadowsObject = shadows;
+
+#ifdef CONFIG_YAFFS_WINCE
+ oh->win_atime[0] = in->win_atime[0];
+ oh->win_ctime[0] = in->win_ctime[0];
+ oh->win_mtime[0] = in->win_mtime[0];
+ oh->win_atime[1] = in->win_atime[1];
+ oh->win_ctime[1] = in->win_ctime[1];
+ oh->win_mtime[1] = in->win_mtime[1];
+#else
+ oh->yst_uid = in->yst_uid;
+ oh->yst_gid = in->yst_gid;
+ oh->yst_atime = in->yst_atime;
+ oh->yst_mtime = in->yst_mtime;
+ oh->yst_ctime = in->yst_ctime;
+ oh->yst_rdev = in->yst_rdev;
+#endif
+ if (in->parent) {
+ oh->parentObjectId = in->parent->objectId;
+ } else {
+ oh->parentObjectId = 0;
+ }
+
+ if (name && *name) {
+ memset(oh->name, 0, sizeof(oh->name));
+ yaffs_strncpy(oh->name, name, YAFFS_MAX_NAME_LENGTH);
+ } else if (prevChunkId>=0) {
+ memcpy(oh->name, oldName, sizeof(oh->name));
+ } else {
+ memset(oh->name, 0, sizeof(oh->name));
+ }
+
+ oh->isShrink = isShrink;
+
+ switch (in->variantType) {
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* Should not happen */
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+ oh->fileSize =
+ (oh->parentObjectId == YAFFS_OBJECTID_DELETED
+ || oh->parentObjectId ==
+ YAFFS_OBJECTID_UNLINKED) ? 0 : in->variant.
+ fileVariant.fileSize;
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ oh->equivalentObjectId =
+ in->variant.hardLinkVariant.equivalentObjectId;
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ yaffs_strncpy(oh->alias,
+ in->variant.symLinkVariant.alias,
+ YAFFS_MAX_ALIAS_LENGTH);
+ oh->alias[YAFFS_MAX_ALIAS_LENGTH] = 0;
+ break;
+ }
+
+ /* Tags */
+ yaffs_InitialiseTags(&newTags);
+ in->serial++;
+ newTags.chunkId = 0;
+ newTags.objectId = in->objectId;
+ newTags.serialNumber = in->serial;
+
+ /* Add extra info for file header */
+
+ newTags.extraHeaderInfoAvailable = 1;
+ newTags.extraParentObjectId = oh->parentObjectId;
+ newTags.extraFileLength = oh->fileSize;
+ newTags.extraIsShrinkHeader = oh->isShrink;
+ newTags.extraEquivalentObjectId = oh->equivalentObjectId;
+ newTags.extraShadows = (oh->shadowsObject > 0) ? 1 : 0;
+ newTags.extraObjectType = in->variantType;
+
+ yaffs_VerifyObjectHeader(in,oh,&newTags,1);
+
+ /* Create new chunk in NAND */
+ newChunkId =
+ yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
+ (prevChunkId >= 0) ? 1 : 0);
+
+ if (newChunkId >= 0) {
+
+ in->chunkId = newChunkId;
+
+ if (prevChunkId >= 0) {
+ yaffs_DeleteChunk(dev, prevChunkId, 1,
+ __LINE__);
+ }
+
+ if(!yaffs_ObjectHasCachedWriteData(in))
+ in->dirty = 0;
+
+ /* If this was a shrink, then mark the block that the chunk lives on */
+ if (isShrink) {
+ bi = yaffs_GetBlockInfo(in->myDev,
+ newChunkId /in->myDev-> nChunksPerBlock);
+ bi->hasShrinkHeader = 1;
+ }
+
+ }
+
+ retVal = newChunkId;
+
+ }
+
+ if (buffer)
+ yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
+
+ return retVal;
+}
+
+/*------------------------ Short Operations Cache ----------------------------------------
+ * In many situations where there is no high level buffering (eg WinCE) a lot of
+ * reads might be short sequential reads, and a lot of writes may be short
+ * sequential writes. eg. scanning/writing a jpeg file.
+ * In these cases, a short read/write cache can provide a huge perfomance benefit
+ * with dumb-as-a-rock code.
+ * In Linux, the page cache provides read buffering aand the short op cache provides write
+ * buffering.
+ *
+ * There are a limited number (~10) of cache chunks per device so that we don't
+ * need a very intelligent search.
+ */
+
+static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj)
+{
+ yaffs_Device *dev = obj->myDev;
+ int i;
+ yaffs_ChunkCache *cache;
+ int nCaches = obj->myDev->nShortOpCaches;
+
+ for(i = 0; i < nCaches; i++){
+ cache = &dev->srCache[i];
+ if (cache->object == obj &&
+ cache->dirty)
+ return 1;
+ }
+
+ return 0;
+}
+
+
+static void yaffs_FlushFilesChunkCache(yaffs_Object * obj)
+{
+ yaffs_Device *dev = obj->myDev;
+ int lowest = -99; /* Stop compiler whining. */
+ int i;
+ yaffs_ChunkCache *cache;
+ int chunkWritten = 0;
+ int nCaches = obj->myDev->nShortOpCaches;
+
+ if (nCaches > 0) {
+ do {
+ cache = NULL;
+
+ /* Find the dirty cache for this object with the lowest chunk id. */
+ for (i = 0; i < nCaches; i++) {
+ if (dev->srCache[i].object == obj &&
+ dev->srCache[i].dirty) {
+ if (!cache
+ || dev->srCache[i].chunkId <
+ lowest) {
+ cache = &dev->srCache[i];
+ lowest = cache->chunkId;
+ }
+ }
+ }
+
+ if (cache && !cache->locked) {
+ /* Write it out and free it up */
+
+ chunkWritten =
+ yaffs_WriteChunkDataToObject(cache->object,
+ cache->chunkId,
+ cache->data,
+ cache->nBytes,
+ 1);
+ cache->dirty = 0;
+ cache->object = NULL;
+ }
+
+ } while (cache && chunkWritten > 0);
+
+ if (cache) {
+ /* Hoosterman, disk full while writing cache out. */
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("yaffs tragedy: no space during cache write" TENDSTR)));
+
+ }
+ }
+
+}
+
+/*yaffs_FlushEntireDeviceCache(dev)
+ *
+ *
+ */
+
+void yaffs_FlushEntireDeviceCache(yaffs_Device *dev)
+{
+ yaffs_Object *obj;
+ int nCaches = dev->nShortOpCaches;
+ int i;
+
+ /* Find a dirty object in the cache and flush it...
+ * until there are no further dirty objects.
+ */
+ do {
+ obj = NULL;
+ for( i = 0; i < nCaches && !obj; i++) {
+ if (dev->srCache[i].object &&
+ dev->srCache[i].dirty)
+ obj = dev->srCache[i].object;
+
+ }
+ if(obj)
+ yaffs_FlushFilesChunkCache(obj);
+
+ } while(obj);
+
+}
+
+
+/* Grab us a cache chunk for use.
+ * First look for an empty one.
+ * Then look for the least recently used non-dirty one.
+ * Then look for the least recently used dirty one...., flush and look again.
+ */
+static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device * dev)
+{
+ int i;
+ int usage;
+ int theOne;
+
+ if (dev->nShortOpCaches > 0) {
+ for (i = 0; i < dev->nShortOpCaches; i++) {
+ if (!dev->srCache[i].object)
+ return &dev->srCache[i];
+ }
+
+ return NULL;
+
+ theOne = -1;
+ usage = 0; /* just to stop the compiler grizzling */
+
+ for (i = 0; i < dev->nShortOpCaches; i++) {
+ if (!dev->srCache[i].dirty &&
+ ((dev->srCache[i].lastUse < usage && theOne >= 0) ||
+ theOne < 0)) {
+ usage = dev->srCache[i].lastUse;
+ theOne = i;
+ }
+ }
+
+
+ return theOne >= 0 ? &dev->srCache[theOne] : NULL;
+ } else {
+ return NULL;
+ }
+
+}
+
+static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
+{
+ yaffs_ChunkCache *cache;
+ yaffs_Object *theObj;
+ int usage;
+ int i;
+ int pushout;
+
+ if (dev->nShortOpCaches > 0) {
+ /* Try find a non-dirty one... */
+
+ cache = yaffs_GrabChunkCacheWorker(dev);
+
+ if (!cache) {
+ /* They were all dirty, find the last recently used object and flush
+ * its cache, then find again.
+ * NB what's here is not very accurate, we actually flush the object
+ * the last recently used page.
+ */
+
+ /* With locking we can't assume we can use entry zero */
+
+ theObj = NULL;
+ usage = -1;
+ cache = NULL;
+ pushout = -1;
+
+ for (i = 0; i < dev->nShortOpCaches; i++) {
+ if (dev->srCache[i].object &&
+ !dev->srCache[i].locked &&
+ (dev->srCache[i].lastUse < usage || !cache))
+ {
+ usage = dev->srCache[i].lastUse;
+ theObj = dev->srCache[i].object;
+ cache = &dev->srCache[i];
+ pushout = i;
+ }
+ }
+
+ if (!cache || cache->dirty) {
+ /* Flush and try again */
+ yaffs_FlushFilesChunkCache(theObj);
+ cache = yaffs_GrabChunkCacheWorker(dev);
+ }
+
+ }
+ return cache;
+ } else
+ return NULL;
+
+}
+
+/* Find a cached chunk */
+static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object * obj,
+ int chunkId)
+{
+ yaffs_Device *dev = obj->myDev;
+ int i;
+ if (dev->nShortOpCaches > 0) {
+ for (i = 0; i < dev->nShortOpCaches; i++) {
+ if (dev->srCache[i].object == obj &&
+ dev->srCache[i].chunkId == chunkId) {
+ dev->cacheHits++;
+
+ return &dev->srCache[i];
+ }
+ }
+ }
+ return NULL;
+}
+
+/* Mark the chunk for the least recently used algorithym */
+static void yaffs_UseChunkCache(yaffs_Device * dev, yaffs_ChunkCache * cache,
+ int isAWrite)
+{
+
+ if (dev->nShortOpCaches > 0) {
+ if (dev->srLastUse < 0 || dev->srLastUse > 100000000) {
+ /* Reset the cache usages */
+ int i;
+ for (i = 1; i < dev->nShortOpCaches; i++) {
+ dev->srCache[i].lastUse = 0;
+ }
+ dev->srLastUse = 0;
+ }
+
+ dev->srLastUse++;
+
+ cache->lastUse = dev->srLastUse;
+
+ if (isAWrite) {
+ cache->dirty = 1;
+ }
+ }
+}
+
+/* Invalidate a single cache page.
+ * Do this when a whole page gets written,
+ * ie the short cache for this page is no longer valid.
+ */
+static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId)
+{
+ if (object->myDev->nShortOpCaches > 0) {
+ yaffs_ChunkCache *cache = yaffs_FindChunkCache(object, chunkId);
+
+ if (cache) {
+ cache->object = NULL;
+ }
+ }
+}
+
+/* Invalidate all the cache pages associated with this object
+ * Do this whenever ther file is deleted or resized.
+ */
+static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in)
+{
+ int i;
+ yaffs_Device *dev = in->myDev;
+
+ if (dev->nShortOpCaches > 0) {
+ /* Invalidate it. */
+ for (i = 0; i < dev->nShortOpCaches; i++) {
+ if (dev->srCache[i].object == in) {
+ dev->srCache[i].object = NULL;
+ }
+ }
+ }
+}
+
+/*--------------------- Checkpointing --------------------*/
+
+
+static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev,int head)
+{
+ yaffs_CheckpointValidity cp;
+
+ memset(&cp,0,sizeof(cp));
+
+ cp.structType = sizeof(cp);
+ cp.magic = YAFFS_MAGIC;
+ cp.version = YAFFS_CHECKPOINT_VERSION;
+ cp.head = (head) ? 1 : 0;
+
+ return (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp))?
+ 1 : 0;
+}
+
+static int yaffs_ReadCheckpointValidityMarker(yaffs_Device *dev, int head)
+{
+ yaffs_CheckpointValidity cp;
+ int ok;
+
+ ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
+
+ if(ok)
+ ok = (cp.structType == sizeof(cp)) &&
+ (cp.magic == YAFFS_MAGIC) &&
+ (cp.version == YAFFS_CHECKPOINT_VERSION) &&
+ (cp.head == ((head) ? 1 : 0));
+ return ok ? 1 : 0;
+}
+
+static void yaffs_DeviceToCheckpointDevice(yaffs_CheckpointDevice *cp,
+ yaffs_Device *dev)
+{
+ cp->nErasedBlocks = dev->nErasedBlocks;
+ cp->allocationBlock = dev->allocationBlock;
+ cp->allocationPage = dev->allocationPage;
+ cp->nFreeChunks = dev->nFreeChunks;
+
+ cp->nDeletedFiles = dev->nDeletedFiles;
+ cp->nUnlinkedFiles = dev->nUnlinkedFiles;
+ cp->nBackgroundDeletions = dev->nBackgroundDeletions;
+ cp->sequenceNumber = dev->sequenceNumber;
+ cp->oldestDirtySequence = dev->oldestDirtySequence;
+
+}
+
+static void yaffs_CheckpointDeviceToDevice(yaffs_Device *dev,
+ yaffs_CheckpointDevice *cp)
+{
+ dev->nErasedBlocks = cp->nErasedBlocks;
+ dev->allocationBlock = cp->allocationBlock;
+ dev->allocationPage = cp->allocationPage;
+ dev->nFreeChunks = cp->nFreeChunks;
+
+ dev->nDeletedFiles = cp->nDeletedFiles;
+ dev->nUnlinkedFiles = cp->nUnlinkedFiles;
+ dev->nBackgroundDeletions = cp->nBackgroundDeletions;
+ dev->sequenceNumber = cp->sequenceNumber;
+ dev->oldestDirtySequence = cp->oldestDirtySequence;
+}
+
+
+static int yaffs_WriteCheckpointDevice(yaffs_Device *dev)
+{
+ yaffs_CheckpointDevice cp;
+ __u32 nBytes;
+ __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
+
+ int ok;
+
+ /* Write device runtime values*/
+ yaffs_DeviceToCheckpointDevice(&cp,dev);
+ cp.structType = sizeof(cp);
+
+ ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
+
+ /* Write block info */
+ if(ok) {
+ nBytes = nBlocks * sizeof(yaffs_BlockInfo);
+ ok = (yaffs_CheckpointWrite(dev,dev->blockInfo,nBytes) == nBytes);
+ }
+
+ /* Write chunk bits */
+ if(ok) {
+ nBytes = nBlocks * dev->chunkBitmapStride;
+ ok = (yaffs_CheckpointWrite(dev,dev->chunkBits,nBytes) == nBytes);
+ }
+ return ok ? 1 : 0;
+
+}
+
+static int yaffs_ReadCheckpointDevice(yaffs_Device *dev)
+{
+ yaffs_CheckpointDevice cp;
+ __u32 nBytes;
+ __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
+
+ int ok;
+
+ ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
+ if(!ok)
+ return 0;
+
+ if(cp.structType != sizeof(cp))
+ return 0;
+
+
+ yaffs_CheckpointDeviceToDevice(dev,&cp);
+
+ nBytes = nBlocks * sizeof(yaffs_BlockInfo);
+
+ ok = (yaffs_CheckpointRead(dev,dev->blockInfo,nBytes) == nBytes);
+
+ if(!ok)
+ return 0;
+ nBytes = nBlocks * dev->chunkBitmapStride;
+
+ ok = (yaffs_CheckpointRead(dev,dev->chunkBits,nBytes) == nBytes);
+
+ return ok ? 1 : 0;
+}
+
+static void yaffs_ObjectToCheckpointObject(yaffs_CheckpointObject *cp,
+ yaffs_Object *obj)
+{
+
+ cp->objectId = obj->objectId;
+ cp->parentId = (obj->parent) ? obj->parent->objectId : 0;
+ cp->chunkId = obj->chunkId;
+ cp->variantType = obj->variantType;
+ cp->deleted = obj->deleted;
+ cp->softDeleted = obj->softDeleted;
+ cp->unlinked = obj->unlinked;
+ cp->fake = obj->fake;
+ cp->renameAllowed = obj->renameAllowed;
+ cp->unlinkAllowed = obj->unlinkAllowed;
+ cp->serial = obj->serial;
+ cp->nDataChunks = obj->nDataChunks;
+
+ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
+ cp->fileSizeOrEquivalentObjectId = obj->variant.fileVariant.fileSize;
+ else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
+ cp->fileSizeOrEquivalentObjectId = obj->variant.hardLinkVariant.equivalentObjectId;
+}
+
+static void yaffs_CheckpointObjectToObject( yaffs_Object *obj,yaffs_CheckpointObject *cp)
+{
+
+ yaffs_Object *parent;
+
+ obj->objectId = cp->objectId;
+
+ if(cp->parentId)
+ parent = yaffs_FindOrCreateObjectByNumber(
+ obj->myDev,
+ cp->parentId,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+ else
+ parent = NULL;
+
+ if(parent)
+ yaffs_AddObjectToDirectory(parent, obj);
+
+ obj->chunkId = cp->chunkId;
+ obj->variantType = cp->variantType;
+ obj->deleted = cp->deleted;
+ obj->softDeleted = cp->softDeleted;
+ obj->unlinked = cp->unlinked;
+ obj->fake = cp->fake;
+ obj->renameAllowed = cp->renameAllowed;
+ obj->unlinkAllowed = cp->unlinkAllowed;
+ obj->serial = cp->serial;
+ obj->nDataChunks = cp->nDataChunks;
+
+ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
+ obj->variant.fileVariant.fileSize = cp->fileSizeOrEquivalentObjectId;
+ else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
+ obj->variant.hardLinkVariant.equivalentObjectId = cp->fileSizeOrEquivalentObjectId;
+
+ if(obj->objectId >= YAFFS_NOBJECT_BUCKETS)
+ obj->lazyLoaded = 1;
+}
+
+
+
+static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
+ __u32 level, int chunkOffset)
+{
+ int i;
+ yaffs_Device *dev = in->myDev;
+ int ok = 1;
+ int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
+
+ if (tn) {
+ if (level > 0) {
+
+ for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
+ if (tn->internal[i]) {
+ ok = yaffs_CheckpointTnodeWorker(in,
+ tn->internal[i],
+ level - 1,
+ (chunkOffset<<YAFFS_TNODES_INTERNAL_BITS) + i);
+ }
+ }
+ } else if (level == 0) {
+ __u32 baseOffset = chunkOffset << YAFFS_TNODES_LEVEL0_BITS;
+ /* printf("write tnode at %d\n",baseOffset); */
+ ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
+ if(ok)
+ ok = (yaffs_CheckpointWrite(dev,tn,nTnodeBytes) == nTnodeBytes);
+ }
+ }
+
+ return ok;
+
+}
+
+static int yaffs_WriteCheckpointTnodes(yaffs_Object *obj)
+{
+ __u32 endMarker = ~0;
+ int ok = 1;
+
+ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE){
+ ok = yaffs_CheckpointTnodeWorker(obj,
+ obj->variant.fileVariant.top,
+ obj->variant.fileVariant.topLevel,
+ 0);
+ if(ok)
+ ok = (yaffs_CheckpointWrite(obj->myDev,&endMarker,sizeof(endMarker)) ==
+ sizeof(endMarker));
+ }
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs_ReadCheckpointTnodes(yaffs_Object *obj)
+{
+ __u32 baseChunk;
+ int ok = 1;
+ yaffs_Device *dev = obj->myDev;
+ yaffs_FileStructure *fileStructPtr = &obj->variant.fileVariant;
+ yaffs_Tnode *tn;
+ int nread = 0;
+
+ ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
+
+ while(ok && (~baseChunk)){
+ nread++;
+ /* Read level 0 tnode */
+
+
+ /* printf("read tnode at %d\n",baseChunk); */
+ tn = yaffs_GetTnodeRaw(dev);
+ if(tn)
+ ok = (yaffs_CheckpointRead(dev,tn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8) ==
+ (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
+ else
+ ok = 0;
+
+ if(tn && ok){
+ ok = yaffs_AddOrFindLevel0Tnode(dev,
+ fileStructPtr,
+ baseChunk,
+ tn) ? 1 : 0;
+
+ }
+
+ if(ok)
+ ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
+
+ }
+
+ T(YAFFS_TRACE_CHECKPOINT,(
+ TSTR("Checkpoint read tnodes %d records, last %d. ok %d" TENDSTR),
+ nread,baseChunk,ok));
+
+ return ok ? 1 : 0;
+}
+
+
+static int yaffs_WriteCheckpointObjects(yaffs_Device *dev)
+{
+ yaffs_Object *obj;
+ yaffs_CheckpointObject cp;
+ int i;
+ int ok = 1;
+ struct list_head *lh;
+
+
+ /* Iterate through the objects in each hash entry,
+ * dumping them to the checkpointing stream.
+ */
+
+ for(i = 0; ok && i < YAFFS_NOBJECT_BUCKETS; i++){
+ list_for_each(lh, &dev->objectBucket[i].list) {
+ if (lh) {
+ obj = list_entry(lh, yaffs_Object, hashLink);
+ if (!obj->deferedFree) {
+ yaffs_ObjectToCheckpointObject(&cp,obj);
+ cp.structType = sizeof(cp);
+
+ T(YAFFS_TRACE_CHECKPOINT,(
+ TSTR("Checkpoint write object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
+ cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
+
+ ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
+
+ if(ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE){
+ ok = yaffs_WriteCheckpointTnodes(obj);
+ }
+ }
+ }
+ }
+ }
+
+ /* Dump end of list */
+ memset(&cp,0xFF,sizeof(yaffs_CheckpointObject));
+ cp.structType = sizeof(cp);
+
+ if(ok)
+ ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs_ReadCheckpointObjects(yaffs_Device *dev)
+{
+ yaffs_Object *obj;
+ yaffs_CheckpointObject cp;
+ int ok = 1;
+ int done = 0;
+ yaffs_Object *hardList = NULL;
+
+ while(ok && !done) {
+ ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
+ if(cp.structType != sizeof(cp)) {
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("struct size %d instead of %d ok %d"TENDSTR),
+ cp.structType,sizeof(cp),ok));
+ ok = 0;
+ }
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
+ cp.objectId,cp.parentId,cp.variantType,cp.chunkId));
+
+ if(ok && cp.objectId == ~0)
+ done = 1;
+ else if(ok){
+ obj = yaffs_FindOrCreateObjectByNumber(dev,cp.objectId, cp.variantType);
+ if(obj) {
+ yaffs_CheckpointObjectToObject(obj,&cp);
+ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
+ ok = yaffs_ReadCheckpointTnodes(obj);
+ } else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
+ obj->hardLinks.next =
+ (struct list_head *)
+ hardList;
+ hardList = obj;
+ }
+
+ }
+ }
+ }
+
+ if(ok)
+ yaffs_HardlinkFixup(dev,hardList);
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs_WriteCheckpointSum(yaffs_Device *dev)
+{
+ __u32 checkpointSum;
+ int ok;
+
+ yaffs_GetCheckpointSum(dev,&checkpointSum);
+
+ ok = (yaffs_CheckpointWrite(dev,&checkpointSum,sizeof(checkpointSum)) == sizeof(checkpointSum));
+
+ if(!ok)
+ return 0;
+
+ return 1;
+}
+
+static int yaffs_ReadCheckpointSum(yaffs_Device *dev)
+{
+ __u32 checkpointSum0;
+ __u32 checkpointSum1;
+ int ok;
+
+ yaffs_GetCheckpointSum(dev,&checkpointSum0);
+
+ ok = (yaffs_CheckpointRead(dev,&checkpointSum1,sizeof(checkpointSum1)) == sizeof(checkpointSum1));
+
+ if(!ok)
+ return 0;
+
+ if(checkpointSum0 != checkpointSum1)
+ return 0;
+
+ return 1;
+}
+
+
+static int yaffs_WriteCheckpointData(yaffs_Device *dev)
+{
+
+ int ok = 1;
+
+ if(dev->skipCheckpointWrite || !dev->isYaffs2){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint write" TENDSTR)));
+ ok = 0;
+ }
+
+ if(ok)
+ ok = yaffs_CheckpointOpen(dev,1);
+
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
+ ok = yaffs_WriteCheckpointValidityMarker(dev,1);
+ }
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint device" TENDSTR)));
+ ok = yaffs_WriteCheckpointDevice(dev);
+ }
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint objects" TENDSTR)));
+ ok = yaffs_WriteCheckpointObjects(dev);
+ }
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
+ ok = yaffs_WriteCheckpointValidityMarker(dev,0);
+ }
+
+ if(ok){
+ ok = yaffs_WriteCheckpointSum(dev);
+ }
+
+
+ if(!yaffs_CheckpointClose(dev))
+ ok = 0;
+
+ if(ok)
+ dev->isCheckpointed = 1;
+ else
+ dev->isCheckpointed = 0;
+
+ return dev->isCheckpointed;
+}
+
+static int yaffs_ReadCheckpointData(yaffs_Device *dev)
+{
+ int ok = 1;
+
+ if(dev->skipCheckpointRead || !dev->isYaffs2){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint read" TENDSTR)));
+ ok = 0;
+ }
+
+ if(ok)
+ ok = yaffs_CheckpointOpen(dev,0); /* open for read */
+
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
+ ok = yaffs_ReadCheckpointValidityMarker(dev,1);
+ }
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint device" TENDSTR)));
+ ok = yaffs_ReadCheckpointDevice(dev);
+ }
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint objects" TENDSTR)));
+ ok = yaffs_ReadCheckpointObjects(dev);
+ }
+ if(ok){
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
+ ok = yaffs_ReadCheckpointValidityMarker(dev,0);
+ }
+
+ if(ok){
+ ok = yaffs_ReadCheckpointSum(dev);
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint checksum %d" TENDSTR),ok));
+ }
+
+ if(!yaffs_CheckpointClose(dev))
+ ok = 0;
+
+ if(ok)
+ dev->isCheckpointed = 1;
+ else
+ dev->isCheckpointed = 0;
+
+ return ok ? 1 : 0;
+
+}
+
+static void yaffs_InvalidateCheckpoint(yaffs_Device *dev)
+{
+ if(dev->isCheckpointed ||
+ dev->blocksInCheckpoint > 0){
+ dev->isCheckpointed = 0;
+ yaffs_CheckpointInvalidateStream(dev);
+ if(dev->superBlock && dev->markSuperBlockDirty)
+ dev->markSuperBlockDirty(dev->superBlock);
+ }
+}
+
+
+int yaffs_CheckpointSave(yaffs_Device *dev)
+{
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("save entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
+
+ yaffs_VerifyObjects(dev);
+ yaffs_VerifyBlocks(dev);
+ yaffs_VerifyFreeChunks(dev);
+
+ if(!dev->isCheckpointed) {
+ yaffs_InvalidateCheckpoint(dev);
+ yaffs_WriteCheckpointData(dev);
+ }
+
+ T(YAFFS_TRACE_ALWAYS,(TSTR("save exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
+
+ return dev->isCheckpointed;
+}
+
+int yaffs_CheckpointRestore(yaffs_Device *dev)
+{
+ int retval;
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
+
+ retval = yaffs_ReadCheckpointData(dev);
+
+ if(dev->isCheckpointed){
+ yaffs_VerifyObjects(dev);
+ yaffs_VerifyBlocks(dev);
+ yaffs_VerifyFreeChunks(dev);
+ }
+
+ T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
+
+ return retval;
+}
+
+/*--------------------- File read/write ------------------------
+ * Read and write have very similar structures.
+ * In general the read/write has three parts to it
+ * An incomplete chunk to start with (if the read/write is not chunk-aligned)
+ * Some complete chunks
+ * An incomplete chunk to end off with
+ *
+ * Curve-balls: the first chunk might also be the last chunk.
+ */
+
+int yaffs_ReadDataFromFile(yaffs_Object * in, __u8 * buffer, loff_t offset,
+ int nBytes)
+{
+
+ int chunk;
+ int start;
+ int nToCopy;
+ int n = nBytes;
+ int nDone = 0;
+ yaffs_ChunkCache *cache;
+
+ yaffs_Device *dev;
+
+ dev = in->myDev;
+
+ while (n > 0) {
+ //chunk = offset / dev->nDataBytesPerChunk + 1;
+ //start = offset % dev->nDataBytesPerChunk;
+ yaffs_AddrToChunk(dev,offset,&chunk,&start);
+ chunk++;
+
+ /* OK now check for the curveball where the start and end are in
+ * the same chunk.
+ */
+ if ((start + n) < dev->nDataBytesPerChunk) {
+ nToCopy = n;
+ } else {
+ nToCopy = dev->nDataBytesPerChunk - start;
+ }
+
+ cache = yaffs_FindChunkCache(in, chunk);
+
+ /* If the chunk is already in the cache or it is less than a whole chunk
+ * then use the cache (if there is caching)
+ * else bypass the cache.
+ */
+ if (cache || nToCopy != dev->nDataBytesPerChunk) {
+ if (dev->nShortOpCaches > 0) {
+
+ /* If we can't find the data in the cache, then load it up. */
+
+ if (!cache) {
+ cache = yaffs_GrabChunkCache(in->myDev);
+ cache->object = in;
+ cache->chunkId = chunk;
+ cache->dirty = 0;
+ cache->locked = 0;
+ yaffs_ReadChunkDataFromObject(in, chunk,
+ cache->
+ data);
+ cache->nBytes = 0;
+ }
+
+ yaffs_UseChunkCache(dev, cache, 0);
+
+ cache->locked = 1;
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_UnlockYAFFS(TRUE);
+#endif
+ memcpy(buffer, &cache->data[start], nToCopy);
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_LockYAFFS(TRUE);
+#endif
+ cache->locked = 0;
+ } else {
+ /* Read into the local buffer then copy..*/
+
+ __u8 *localBuffer =
+ yaffs_GetTempBuffer(dev, __LINE__);
+ yaffs_ReadChunkDataFromObject(in, chunk,
+ localBuffer);
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_UnlockYAFFS(TRUE);
+#endif
+ memcpy(buffer, &localBuffer[start], nToCopy);
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_LockYAFFS(TRUE);
+#endif
+ yaffs_ReleaseTempBuffer(dev, localBuffer,
+ __LINE__);
+ }
+
+ } else {
+#ifdef CONFIG_YAFFS_WINCE
+ __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
+
+ /* Under WinCE can't do direct transfer. Need to use a local buffer.
+ * This is because we otherwise screw up WinCE's memory mapper
+ */
+ yaffs_ReadChunkDataFromObject(in, chunk, localBuffer);
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_UnlockYAFFS(TRUE);
+#endif
+ memcpy(buffer, localBuffer, dev->nDataBytesPerChunk);
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_LockYAFFS(TRUE);
+ yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
+#endif
+
+#else
+ /* A full chunk. Read directly into the supplied buffer. */
+ yaffs_ReadChunkDataFromObject(in, chunk, buffer);
+#endif
+ }
+
+ n -= nToCopy;
+ offset += nToCopy;
+ buffer += nToCopy;
+ nDone += nToCopy;
+
+ }
+
+ return nDone;
+}
+
+int yaffs_WriteDataToFile(yaffs_Object * in, const __u8 * buffer, loff_t offset,
+ int nBytes, int writeThrough)
+{
+
+ int chunk;
+ int start;
+ int nToCopy;
+ int n = nBytes;
+ int nDone = 0;
+ int nToWriteBack;
+ int startOfWrite = offset;
+ int chunkWritten = 0;
+ int nBytesRead;
+
+ yaffs_Device *dev;
+
+ dev = in->myDev;
+
+ while (n > 0 && chunkWritten >= 0) {
+ //chunk = offset / dev->nDataBytesPerChunk + 1;
+ //start = offset % dev->nDataBytesPerChunk;
+ yaffs_AddrToChunk(dev,offset,&chunk,&start);
+ chunk++;
+
+ /* OK now check for the curveball where the start and end are in
+ * the same chunk.
+ */
+
+ if ((start + n) < dev->nDataBytesPerChunk) {
+ nToCopy = n;
+
+ /* Now folks, to calculate how many bytes to write back....
+ * If we're overwriting and not writing to then end of file then
+ * we need to write back as much as was there before.
+ */
+
+ nBytesRead =
+ in->variant.fileVariant.fileSize -
+ ((chunk - 1) * dev->nDataBytesPerChunk);
+
+ if (nBytesRead > dev->nDataBytesPerChunk) {
+ nBytesRead = dev->nDataBytesPerChunk;
+ }
+
+ nToWriteBack =
+ (nBytesRead >
+ (start + n)) ? nBytesRead : (start + n);
+
+ } else {
+ nToCopy = dev->nDataBytesPerChunk - start;
+ nToWriteBack = dev->nDataBytesPerChunk;
+ }
+
+ if (nToCopy != dev->nDataBytesPerChunk) {
+ /* An incomplete start or end chunk (or maybe both start and end chunk) */
+ if (dev->nShortOpCaches > 0) {
+ yaffs_ChunkCache *cache;
+ /* If we can't find the data in the cache, then load the cache */
+ cache = yaffs_FindChunkCache(in, chunk);
+
+ if (!cache
+ && yaffs_CheckSpaceForAllocation(in->
+ myDev)) {
+ cache = yaffs_GrabChunkCache(in->myDev);
+ cache->object = in;
+ cache->chunkId = chunk;
+ cache->dirty = 0;
+ cache->locked = 0;
+ yaffs_ReadChunkDataFromObject(in, chunk,
+ cache->
+ data);
+ }
+ else if(cache &&
+ !cache->dirty &&
+ !yaffs_CheckSpaceForAllocation(in->myDev)){
+ /* Drop the cache if it was a read cache item and
+ * no space check has been made for it.
+ */
+ cache = NULL;
+ }
+
+ if (cache) {
+ yaffs_UseChunkCache(dev, cache, 1);
+ cache->locked = 1;
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_UnlockYAFFS(TRUE);
+#endif
+
+ memcpy(&cache->data[start], buffer,
+ nToCopy);
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_LockYAFFS(TRUE);
+#endif
+ cache->locked = 0;
+ cache->nBytes = nToWriteBack;
+
+ if (writeThrough) {
+ chunkWritten =
+ yaffs_WriteChunkDataToObject
+ (cache->object,
+ cache->chunkId,
+ cache->data, cache->nBytes,
+ 1);
+ cache->dirty = 0;
+ }
+
+ } else {
+ chunkWritten = -1; /* fail the write */
+ }
+ } else {
+ /* An incomplete start or end chunk (or maybe both start and end chunk)
+ * Read into the local buffer then copy, then copy over and write back.
+ */
+
+ __u8 *localBuffer =
+ yaffs_GetTempBuffer(dev, __LINE__);
+
+ yaffs_ReadChunkDataFromObject(in, chunk,
+ localBuffer);
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_UnlockYAFFS(TRUE);
+#endif
+
+ memcpy(&localBuffer[start], buffer, nToCopy);
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_LockYAFFS(TRUE);
+#endif
+ chunkWritten =
+ yaffs_WriteChunkDataToObject(in, chunk,
+ localBuffer,
+ nToWriteBack,
+ 0);
+
+ yaffs_ReleaseTempBuffer(dev, localBuffer,
+ __LINE__);
+
+ }
+
+ } else {
+
+#ifdef CONFIG_YAFFS_WINCE
+ /* Under WinCE can't do direct transfer. Need to use a local buffer.
+ * This is because we otherwise screw up WinCE's memory mapper
+ */
+ __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_UnlockYAFFS(TRUE);
+#endif
+ memcpy(localBuffer, buffer, dev->nDataBytesPerChunk);
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_LockYAFFS(TRUE);
+#endif
+ chunkWritten =
+ yaffs_WriteChunkDataToObject(in, chunk, localBuffer,
+ dev->nDataBytesPerChunk,
+ 0);
+ yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
+#else
+ /* A full chunk. Write directly from the supplied buffer. */
+ chunkWritten =
+ yaffs_WriteChunkDataToObject(in, chunk, buffer,
+ dev->nDataBytesPerChunk,
+ 0);
+#endif
+ /* Since we've overwritten the cached data, we better invalidate it. */
+ yaffs_InvalidateChunkCache(in, chunk);
+ }
+
+ if (chunkWritten >= 0) {
+ n -= nToCopy;
+ offset += nToCopy;
+ buffer += nToCopy;
+ nDone += nToCopy;
+ }
+
+ }
+
+ /* Update file object */
+
+ if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize) {
+ in->variant.fileVariant.fileSize = (startOfWrite + nDone);
+ }
+
+ in->dirty = 1;
+
+ return nDone;
+}
+
+
+/* ---------------------- File resizing stuff ------------------ */
+
+static void yaffs_PruneResizedChunks(yaffs_Object * in, int newSize)
+{
+
+ yaffs_Device *dev = in->myDev;
+ int oldFileSize = in->variant.fileVariant.fileSize;
+
+ int lastDel = 1 + (oldFileSize - 1) / dev->nDataBytesPerChunk;
+
+ int startDel = 1 + (newSize + dev->nDataBytesPerChunk - 1) /
+ dev->nDataBytesPerChunk;
+ int i;
+ int chunkId;
+
+ /* Delete backwards so that we don't end up with holes if
+ * power is lost part-way through the operation.
+ */
+ for (i = lastDel; i >= startDel; i--) {
+ /* NB this could be optimised somewhat,
+ * eg. could retrieve the tags and write them without
+ * using yaffs_DeleteChunk
+ */
+
+ chunkId = yaffs_FindAndDeleteChunkInFile(in, i, NULL);
+ if (chunkId > 0) {
+ if (chunkId <
+ (dev->internalStartBlock * dev->nChunksPerBlock)
+ || chunkId >=
+ ((dev->internalEndBlock +
+ 1) * dev->nChunksPerBlock)) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("Found daft chunkId %d for %d" TENDSTR),
+ chunkId, i));
+ } else {
+ in->nDataChunks--;
+ yaffs_DeleteChunk(dev, chunkId, 1, __LINE__);
+ }
+ }
+ }
+
+}
+
+int yaffs_ResizeFile(yaffs_Object * in, loff_t newSize)
+{
+
+ int oldFileSize = in->variant.fileVariant.fileSize;
+ int newSizeOfPartialChunk;
+ int newFullChunks;
+
+ yaffs_Device *dev = in->myDev;
+
+ yaffs_AddrToChunk(dev, newSize, &newFullChunks, &newSizeOfPartialChunk);
+
+ yaffs_FlushFilesChunkCache(in);
+ yaffs_InvalidateWholeChunkCache(in);
+
+ yaffs_CheckGarbageCollection(dev);
+
+ if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
+ return yaffs_GetFileSize(in);
+ }
+
+ if (newSize == oldFileSize) {
+ return oldFileSize;
+ }
+
+ if (newSize < oldFileSize) {
+
+ yaffs_PruneResizedChunks(in, newSize);
+
+ if (newSizeOfPartialChunk != 0) {
+ int lastChunk = 1 + newFullChunks;
+
+ __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
+
+ /* Got to read and rewrite the last chunk with its new size and zero pad */
+ yaffs_ReadChunkDataFromObject(in, lastChunk,
+ localBuffer);
+
+ memset(localBuffer + newSizeOfPartialChunk, 0,
+ dev->nDataBytesPerChunk - newSizeOfPartialChunk);
+
+ yaffs_WriteChunkDataToObject(in, lastChunk, localBuffer,
+ newSizeOfPartialChunk, 1);
+
+ yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
+ }
+
+ in->variant.fileVariant.fileSize = newSize;
+
+ yaffs_PruneFileStructure(dev, &in->variant.fileVariant);
+ } else {
+ /* newsSize > oldFileSize */
+ in->variant.fileVariant.fileSize = newSize;
+ }
+
+
+
+ /* Write a new object header.
+ * show we've shrunk the file, if need be
+ * Do this only if the file is not in the deleted directories.
+ */
+ if (in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
+ in->parent->objectId != YAFFS_OBJECTID_DELETED) {
+ yaffs_UpdateObjectHeader(in, NULL, 0,
+ (newSize < oldFileSize) ? 1 : 0, 0);
+ }
+
+ return YAFFS_OK;
+}
+
+loff_t yaffs_GetFileSize(yaffs_Object * obj)
+{
+ obj = yaffs_GetEquivalentObject(obj);
+
+ switch (obj->variantType) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ return obj->variant.fileVariant.fileSize;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ return yaffs_strlen(obj->variant.symLinkVariant.alias);
+ default:
+ return 0;
+ }
+}
+
+
+
+int yaffs_FlushFile(yaffs_Object * in, int updateTime)
+{
+ int retVal;
+ if (in->dirty) {
+ yaffs_FlushFilesChunkCache(in);
+ if (updateTime) {
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_WinFileTimeNow(in->win_mtime);
+#else
+
+ in->yst_mtime = Y_CURRENT_TIME;
+
+#endif
+ }
+
+ retVal =
+ (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
+ 0) ? YAFFS_OK : YAFFS_FAIL;
+ } else {
+ retVal = YAFFS_OK;
+ }
+
+ return retVal;
+
+}
+
+static int yaffs_DoGenericObjectDeletion(yaffs_Object * in)
+{
+
+ /* First off, invalidate the file's data in the cache, without flushing. */
+ yaffs_InvalidateWholeChunkCache(in);
+
+ if (in->myDev->isYaffs2 && (in->parent != in->myDev->deletedDir)) {
+ /* Move to the unlinked directory so we have a record that it was deleted. */
+ yaffs_ChangeObjectName(in, in->myDev->deletedDir,"deleted", 0, 0);
+
+ }
+
+ yaffs_RemoveObjectFromDirectory(in);
+ yaffs_DeleteChunk(in->myDev, in->chunkId, 1, __LINE__);
+ in->chunkId = -1;
+
+ yaffs_FreeObject(in);
+ return YAFFS_OK;
+
+}
+
+/* yaffs_DeleteFile deletes the whole file data
+ * and the inode associated with the file.
+ * It does not delete the links associated with the file.
+ */
+static int yaffs_UnlinkFile(yaffs_Object * in)
+{
+
+ int retVal;
+ int immediateDeletion = 0;
+
+ if (1) {
+/* XXX U-BOOT XXX */
+#if 0
+#ifdef __KERNEL__
+ if (!in->myInode) {
+ immediateDeletion = 1;
+
+ }
+#endif
+#else
+ if (in->inUse <= 0) {
+ immediateDeletion = 1;
+
+ }
+#endif
+ if (immediateDeletion) {
+ retVal =
+ yaffs_ChangeObjectName(in, in->myDev->deletedDir,
+ "deleted", 0, 0);
+ T(YAFFS_TRACE_TRACING,
+ (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
+ in->objectId));
+ in->deleted = 1;
+ in->myDev->nDeletedFiles++;
+ if (0 && in->myDev->isYaffs2) {
+ yaffs_ResizeFile(in, 0);
+ }
+ yaffs_SoftDeleteFile(in);
+ } else {
+ retVal =
+ yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
+ "unlinked", 0, 0);
+ }
+
+ }
+ return retVal;
+}
+
+int yaffs_DeleteFile(yaffs_Object * in)
+{
+ int retVal = YAFFS_OK;
+
+ if (in->nDataChunks > 0) {
+ /* Use soft deletion if there is data in the file */
+ if (!in->unlinked) {
+ retVal = yaffs_UnlinkFile(in);
+ }
+ if (retVal == YAFFS_OK && in->unlinked && !in->deleted) {
+ in->deleted = 1;
+ in->myDev->nDeletedFiles++;
+ yaffs_SoftDeleteFile(in);
+ }
+ return in->deleted ? YAFFS_OK : YAFFS_FAIL;
+ } else {
+ /* The file has no data chunks so we toss it immediately */
+ yaffs_FreeTnode(in->myDev, in->variant.fileVariant.top);
+ in->variant.fileVariant.top = NULL;
+ yaffs_DoGenericObjectDeletion(in);
+
+ return YAFFS_OK;
+ }
+}
+
+static int yaffs_DeleteDirectory(yaffs_Object * in)
+{
+ /* First check that the directory is empty. */
+ if (list_empty(&in->variant.directoryVariant.children)) {
+ return yaffs_DoGenericObjectDeletion(in);
+ }
+
+ return YAFFS_FAIL;
+
+}
+
+static int yaffs_DeleteSymLink(yaffs_Object * in)
+{
+ YFREE(in->variant.symLinkVariant.alias);
+
+ return yaffs_DoGenericObjectDeletion(in);
+}
+
+static int yaffs_DeleteHardLink(yaffs_Object * in)
+{
+ /* remove this hardlink from the list assocaited with the equivalent
+ * object
+ */
+ list_del(&in->hardLinks);
+ return yaffs_DoGenericObjectDeletion(in);
+}
+
+static void yaffs_DestroyObject(yaffs_Object * obj)
+{
+ switch (obj->variantType) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ yaffs_DeleteFile(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ yaffs_DeleteDirectory(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ yaffs_DeleteSymLink(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ yaffs_DeleteHardLink(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ yaffs_DoGenericObjectDeletion(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ break; /* should not happen. */
+ }
+}
+
+static int yaffs_UnlinkWorker(yaffs_Object * obj)
+{
+
+ if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
+ return yaffs_DeleteHardLink(obj);
+ } else if (!list_empty(&obj->hardLinks)) {
+ /* Curve ball: We're unlinking an object that has a hardlink.
+ *
+ * This problem arises because we are not strictly following
+ * The Linux link/inode model.
+ *
+ * We can't really delete the object.
+ * Instead, we do the following:
+ * - Select a hardlink.
+ * - Unhook it from the hard links
+ * - Unhook it from its parent directory (so that the rename can work)
+ * - Rename the object to the hardlink's name.
+ * - Delete the hardlink
+ */
+
+ yaffs_Object *hl;
+ int retVal;
+ YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
+
+ hl = list_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
+
+ list_del_init(&hl->hardLinks);
+ list_del_init(&hl->siblings);
+
+ yaffs_GetObjectName(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
+
+ retVal = yaffs_ChangeObjectName(obj, hl->parent, name, 0, 0);
+
+ if (retVal == YAFFS_OK) {
+ retVal = yaffs_DoGenericObjectDeletion(hl);
+ }
+ return retVal;
+
+ } else {
+ switch (obj->variantType) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ return yaffs_UnlinkFile(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ return yaffs_DeleteDirectory(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ return yaffs_DeleteSymLink(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ return yaffs_DoGenericObjectDeletion(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ default:
+ return YAFFS_FAIL;
+ }
+ }
+}
+
+
+static int yaffs_UnlinkObject( yaffs_Object *obj)
+{
+
+ if (obj && obj->unlinkAllowed) {
+ return yaffs_UnlinkWorker(obj);
+ }
+
+ return YAFFS_FAIL;
+
+}
+int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name)
+{
+ yaffs_Object *obj;
+
+ obj = yaffs_FindObjectByName(dir, name);
+ return yaffs_UnlinkObject(obj);
+}
+
+/*----------------------- Initialisation Scanning ---------------------- */
+
+static void yaffs_HandleShadowedObject(yaffs_Device * dev, int objId,
+ int backwardScanning)
+{
+ yaffs_Object *obj;
+
+ if (!backwardScanning) {
+ /* Handle YAFFS1 forward scanning case
+ * For YAFFS1 we always do the deletion
+ */
+
+ } else {
+ /* Handle YAFFS2 case (backward scanning)
+ * If the shadowed object exists then ignore.
+ */
+ if (yaffs_FindObjectByNumber(dev, objId)) {
+ return;
+ }
+ }
+
+ /* Let's create it (if it does not exist) assuming it is a file so that it can do shrinking etc.
+ * We put it in unlinked dir to be cleaned up after the scanning
+ */
+ obj =
+ yaffs_FindOrCreateObjectByNumber(dev, objId,
+ YAFFS_OBJECT_TYPE_FILE);
+ yaffs_AddObjectToDirectory(dev->unlinkedDir, obj);
+ obj->variant.fileVariant.shrinkSize = 0;
+ obj->valid = 1; /* So that we don't read any other info for this file */
+
+}
+
+typedef struct {
+ int seq;
+ int block;
+} yaffs_BlockIndex;
+
+
+static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList)
+{
+ yaffs_Object *hl;
+ yaffs_Object *in;
+
+ while (hardList) {
+ hl = hardList;
+ hardList = (yaffs_Object *) (hardList->hardLinks.next);
+
+ in = yaffs_FindObjectByNumber(dev,
+ hl->variant.hardLinkVariant.
+ equivalentObjectId);
+
+ if (in) {
+ /* Add the hardlink pointers */
+ hl->variant.hardLinkVariant.equivalentObject = in;
+ list_add(&hl->hardLinks, &in->hardLinks);
+ } else {
+ /* Todo Need to report/handle this better.
+ * Got a problem... hardlink to a non-existant object
+ */
+ hl->variant.hardLinkVariant.equivalentObject = NULL;
+ INIT_LIST_HEAD(&hl->hardLinks);
+
+ }
+
+ }
+
+}
+
+
+
+
+
+static int ybicmp(const void *a, const void *b){
+ register int aseq = ((yaffs_BlockIndex *)a)->seq;
+ register int bseq = ((yaffs_BlockIndex *)b)->seq;
+ register int ablock = ((yaffs_BlockIndex *)a)->block;
+ register int bblock = ((yaffs_BlockIndex *)b)->block;
+ if( aseq == bseq )
+ return ablock - bblock;
+ else
+ return aseq - bseq;
+
+}
+
+static int yaffs_Scan(yaffs_Device * dev)
+{
+ yaffs_ExtendedTags tags;
+ int blk;
+ int blockIterator;
+ int startIterator;
+ int endIterator;
+ int nBlocksToScan = 0;
+ int result;
+
+ int chunk;
+ int c;
+ int deleted;
+ yaffs_BlockState state;
+ yaffs_Object *hardList = NULL;
+ yaffs_BlockInfo *bi;
+ int sequenceNumber;
+ yaffs_ObjectHeader *oh;
+ yaffs_Object *in;
+ yaffs_Object *parent;
+ int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
+
+ int alloc_failed = 0;
+
+
+ __u8 *chunkData;
+
+ yaffs_BlockIndex *blockIndex = NULL;
+
+ if (dev->isYaffs2) {
+ T(YAFFS_TRACE_SCAN,
+ (TSTR("yaffs_Scan is not for YAFFS2!" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ //TODO Throw all the yaffs2 stuuf out of yaffs_Scan since it is only for yaffs1 format.
+
+ T(YAFFS_TRACE_SCAN,
+ (TSTR("yaffs_Scan starts intstartblk %d intendblk %d..." TENDSTR),
+ dev->internalStartBlock, dev->internalEndBlock));
+
+ chunkData = yaffs_GetTempBuffer(dev, __LINE__);
+
+ dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
+
+ if (dev->isYaffs2) {
+ blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
+ if(!blockIndex)
+ return YAFFS_FAIL;
+ }
+
+ /* Scan all the blocks to determine their state */
+ for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
+ bi = yaffs_GetBlockInfo(dev, blk);
+ yaffs_ClearChunkBits(dev, blk);
+ bi->pagesInUse = 0;
+ bi->softDeletions = 0;
+
+ yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
+
+ bi->blockState = state;
+ bi->sequenceNumber = sequenceNumber;
+
+ T(YAFFS_TRACE_SCAN_DEBUG,
+ (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
+ state, sequenceNumber));
+
+ if (state == YAFFS_BLOCK_STATE_DEAD) {
+ T(YAFFS_TRACE_BAD_BLOCKS,
+ (TSTR("block %d is bad" TENDSTR), blk));
+ } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
+ T(YAFFS_TRACE_SCAN_DEBUG,
+ (TSTR("Block empty " TENDSTR)));
+ dev->nErasedBlocks++;
+ dev->nFreeChunks += dev->nChunksPerBlock;
+ } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
+
+ /* Determine the highest sequence number */
+ if (dev->isYaffs2 &&
+ sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
+ sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
+
+ blockIndex[nBlocksToScan].seq = sequenceNumber;
+ blockIndex[nBlocksToScan].block = blk;
+
+ nBlocksToScan++;
+
+ if (sequenceNumber >= dev->sequenceNumber) {
+ dev->sequenceNumber = sequenceNumber;
+ }
+ } else if (dev->isYaffs2) {
+ /* TODO: Nasty sequence number! */
+ T(YAFFS_TRACE_SCAN,
+ (TSTR
+ ("Block scanning block %d has bad sequence number %d"
+ TENDSTR), blk, sequenceNumber));
+
+ }
+ }
+ }
+
+ /* Sort the blocks
+ * Dungy old bubble sort for now...
+ */
+ if (dev->isYaffs2) {
+ yaffs_BlockIndex temp;
+ int i;
+ int j;
+
+ for (i = 0; i < nBlocksToScan; i++)
+ for (j = i + 1; j < nBlocksToScan; j++)
+ if (blockIndex[i].seq > blockIndex[j].seq) {
+ temp = blockIndex[j];
+ blockIndex[j] = blockIndex[i];
+ blockIndex[i] = temp;
+ }
+ }
+
+ /* Now scan the blocks looking at the data. */
+ if (dev->isYaffs2) {
+ startIterator = 0;
+ endIterator = nBlocksToScan - 1;
+ T(YAFFS_TRACE_SCAN_DEBUG,
+ (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
+ } else {
+ startIterator = dev->internalStartBlock;
+ endIterator = dev->internalEndBlock;
+ }
+
+ /* For each block.... */
+ for (blockIterator = startIterator; !alloc_failed && blockIterator <= endIterator;
+ blockIterator++) {
+
+ if (dev->isYaffs2) {
+ /* get the block to scan in the correct order */
+ blk = blockIndex[blockIterator].block;
+ } else {
+ blk = blockIterator;
+ }
+
+ bi = yaffs_GetBlockInfo(dev, blk);
+ state = bi->blockState;
+
+ deleted = 0;
+
+ /* For each chunk in each block that needs scanning....*/
+ for (c = 0; !alloc_failed && c < dev->nChunksPerBlock &&
+ state == YAFFS_BLOCK_STATE_NEEDS_SCANNING; c++) {
+ /* Read the tags and decide what to do */
+ chunk = blk * dev->nChunksPerBlock + c;
+
+ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
+ &tags);
+
+ /* Let's have a good look at this chunk... */
+
+ if (!dev->isYaffs2 && tags.chunkDeleted) {
+ /* YAFFS1 only...
+ * A deleted chunk
+ */
+ deleted++;
+ dev->nFreeChunks++;
+ /*T((" %d %d deleted\n",blk,c)); */
+ } else if (!tags.chunkUsed) {
+ /* An unassigned chunk in the block
+ * This means that either the block is empty or
+ * this is the one being allocated from
+ */
+
+ if (c == 0) {
+ /* We're looking at the first chunk in the block so the block is unused */
+ state = YAFFS_BLOCK_STATE_EMPTY;
+ dev->nErasedBlocks++;
+ } else {
+ /* this is the block being allocated from */
+ T(YAFFS_TRACE_SCAN,
+ (TSTR
+ (" Allocating from %d %d" TENDSTR),
+ blk, c));
+ state = YAFFS_BLOCK_STATE_ALLOCATING;
+ dev->allocationBlock = blk;
+ dev->allocationPage = c;
+ dev->allocationBlockFinder = blk;
+ /* Set it to here to encourage the allocator to go forth from here. */
+
+ /* Yaffs2 sanity check:
+ * This should be the one with the highest sequence number
+ */
+ if (dev->isYaffs2
+ && (dev->sequenceNumber !=
+ bi->sequenceNumber)) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("yaffs: Allocation block %d was not highest sequence id:"
+ " block seq = %d, dev seq = %d"
+ TENDSTR), blk,bi->sequenceNumber,dev->sequenceNumber));
+ }
+ }
+
+ dev->nFreeChunks += (dev->nChunksPerBlock - c);
+ } else if (tags.chunkId > 0) {
+ /* chunkId > 0 so it is a data chunk... */
+ unsigned int endpos;
+
+ yaffs_SetChunkBit(dev, blk, c);
+ bi->pagesInUse++;
+
+ in = yaffs_FindOrCreateObjectByNumber(dev,
+ tags.
+ objectId,
+ YAFFS_OBJECT_TYPE_FILE);
+ /* PutChunkIntoFile checks for a clash (two data chunks with
+ * the same chunkId).
+ */
+
+ if(!in)
+ alloc_failed = 1;
+
+ if(in){
+ if(!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk,1))
+ alloc_failed = 1;
+ }
+
+ endpos =
+ (tags.chunkId - 1) * dev->nDataBytesPerChunk +
+ tags.byteCount;
+ if (in &&
+ in->variantType == YAFFS_OBJECT_TYPE_FILE
+ && in->variant.fileVariant.scannedFileSize <
+ endpos) {
+ in->variant.fileVariant.
+ scannedFileSize = endpos;
+ if (!dev->useHeaderFileSize) {
+ in->variant.fileVariant.
+ fileSize =
+ in->variant.fileVariant.
+ scannedFileSize;
+ }
+
+ }
+ /* T((" %d %d data %d %d\n",blk,c,tags.objectId,tags.chunkId)); */
+ } else {
+ /* chunkId == 0, so it is an ObjectHeader.
+ * Thus, we read in the object header and make the object
+ */
+ yaffs_SetChunkBit(dev, blk, c);
+ bi->pagesInUse++;
+
+ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk,
+ chunkData,
+ NULL);
+
+ oh = (yaffs_ObjectHeader *) chunkData;
+
+ in = yaffs_FindObjectByNumber(dev,
+ tags.objectId);
+ if (in && in->variantType != oh->type) {
+ /* This should not happen, but somehow
+ * Wev'e ended up with an objectId that has been reused but not yet
+ * deleted, and worse still it has changed type. Delete the old object.
+ */
+
+ yaffs_DestroyObject(in);
+
+ in = 0;
+ }
+
+ in = yaffs_FindOrCreateObjectByNumber(dev,
+ tags.
+ objectId,
+ oh->type);
+
+ if(!in)
+ alloc_failed = 1;
+
+ if (in && oh->shadowsObject > 0) {
+ yaffs_HandleShadowedObject(dev,
+ oh->
+ shadowsObject,
+ 0);
+ }
+
+ if (in && in->valid) {
+ /* We have already filled this one. We have a duplicate and need to resolve it. */
+
+ unsigned existingSerial = in->serial;
+ unsigned newSerial = tags.serialNumber;
+
+ if (dev->isYaffs2 ||
+ ((existingSerial + 1) & 3) ==
+ newSerial) {
+ /* Use new one - destroy the exisiting one */
+ yaffs_DeleteChunk(dev,
+ in->chunkId,
+ 1, __LINE__);
+ in->valid = 0;
+ } else {
+ /* Use existing - destroy this one. */
+ yaffs_DeleteChunk(dev, chunk, 1,
+ __LINE__);
+ }
+ }
+
+ if (in && !in->valid &&
+ (tags.objectId == YAFFS_OBJECTID_ROOT ||
+ tags.objectId == YAFFS_OBJECTID_LOSTNFOUND)) {
+ /* We only load some info, don't fiddle with directory structure */
+ in->valid = 1;
+ in->variantType = oh->type;
+
+ in->yst_mode = oh->yst_mode;
+#ifdef CONFIG_YAFFS_WINCE
+ in->win_atime[0] = oh->win_atime[0];
+ in->win_ctime[0] = oh->win_ctime[0];
+ in->win_mtime[0] = oh->win_mtime[0];
+ in->win_atime[1] = oh->win_atime[1];
+ in->win_ctime[1] = oh->win_ctime[1];
+ in->win_mtime[1] = oh->win_mtime[1];
+#else
+ in->yst_uid = oh->yst_uid;
+ in->yst_gid = oh->yst_gid;
+ in->yst_atime = oh->yst_atime;
+ in->yst_mtime = oh->yst_mtime;
+ in->yst_ctime = oh->yst_ctime;
+ in->yst_rdev = oh->yst_rdev;
+#endif
+ in->chunkId = chunk;
+
+ } else if (in && !in->valid) {
+ /* we need to load this info */
+
+ in->valid = 1;
+ in->variantType = oh->type;
+
+ in->yst_mode = oh->yst_mode;
+#ifdef CONFIG_YAFFS_WINCE
+ in->win_atime[0] = oh->win_atime[0];
+ in->win_ctime[0] = oh->win_ctime[0];
+ in->win_mtime[0] = oh->win_mtime[0];
+ in->win_atime[1] = oh->win_atime[1];
+ in->win_ctime[1] = oh->win_ctime[1];
+ in->win_mtime[1] = oh->win_mtime[1];
+#else
+ in->yst_uid = oh->yst_uid;
+ in->yst_gid = oh->yst_gid;
+ in->yst_atime = oh->yst_atime;
+ in->yst_mtime = oh->yst_mtime;
+ in->yst_ctime = oh->yst_ctime;
+ in->yst_rdev = oh->yst_rdev;
+#endif
+ in->chunkId = chunk;
+
+ yaffs_SetObjectName(in, oh->name);
+ in->dirty = 0;
+
+ /* directory stuff...
+ * hook up to parent
+ */
+
+ parent =
+ yaffs_FindOrCreateObjectByNumber
+ (dev, oh->parentObjectId,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+ if (parent->variantType ==
+ YAFFS_OBJECT_TYPE_UNKNOWN) {
+ /* Set up as a directory */
+ parent->variantType =
+ YAFFS_OBJECT_TYPE_DIRECTORY;
+ INIT_LIST_HEAD(&parent->variant.
+ directoryVariant.
+ children);
+ } else if (parent->variantType !=
+ YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+ /* Hoosterman, another problem....
+ * We're trying to use a non-directory as a directory
+ */
+
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ ("yaffs tragedy: attempting to use non-directory as"
+ " a directory in scan. Put in lost+found."
+ TENDSTR)));
+ parent = dev->lostNFoundDir;
+ }
+
+ yaffs_AddObjectToDirectory(parent, in);
+
+ if (0 && (parent == dev->deletedDir ||
+ parent == dev->unlinkedDir)) {
+ in->deleted = 1; /* If it is unlinked at start up then it wants deleting */
+ dev->nDeletedFiles++;
+ }
+ /* Note re hardlinks.
+ * Since we might scan a hardlink before its equivalent object is scanned
+ * we put them all in a list.
+ * After scanning is complete, we should have all the objects, so we run through this
+ * list and fix up all the chains.
+ */
+
+ switch (in->variantType) {
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* Todo got a problem */
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+ if (dev->isYaffs2
+ && oh->isShrink) {
+ /* Prune back the shrunken chunks */
+ yaffs_PruneResizedChunks
+ (in, oh->fileSize);
+ /* Mark the block as having a shrinkHeader */
+ bi->hasShrinkHeader = 1;
+ }
+
+ if (dev->useHeaderFileSize)
+
+ in->variant.fileVariant.
+ fileSize =
+ oh->fileSize;
+
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ in->variant.hardLinkVariant.
+ equivalentObjectId =
+ oh->equivalentObjectId;
+ in->hardLinks.next =
+ (struct list_head *)
+ hardList;
+ hardList = in;
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ in->variant.symLinkVariant.alias =
+ yaffs_CloneString(oh->alias);
+ if(!in->variant.symLinkVariant.alias)
+ alloc_failed = 1;
+ break;
+ }
+
+ if (parent == dev->deletedDir) {
+ yaffs_DestroyObject(in);
+ bi->hasShrinkHeader = 1;
+ }
+ }
+ }
+ }
+
+ if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
+ /* If we got this far while scanning, then the block is fully allocated.*/
+ state = YAFFS_BLOCK_STATE_FULL;
+ }
+
+ bi->blockState = state;
+
+ /* Now let's see if it was dirty */
+ if (bi->pagesInUse == 0 &&
+ !bi->hasShrinkHeader &&
+ bi->blockState == YAFFS_BLOCK_STATE_FULL) {
+ yaffs_BlockBecameDirty(dev, blk);
+ }
+
+ }
+
+ if (blockIndex) {
+ YFREE(blockIndex);
+ }
+
+
+ /* Ok, we've done all the scanning.
+ * Fix up the hard link chains.
+ * We should now have scanned all the objects, now it's time to add these
+ * hardlinks.
+ */
+
+ yaffs_HardlinkFixup(dev,hardList);
+
+ /* Handle the unlinked files. Since they were left in an unlinked state we should
+ * just delete them.
+ */
+ {
+ struct list_head *i;
+ struct list_head *n;
+
+ yaffs_Object *l;
+ /* Soft delete all the unlinked files */
+ list_for_each_safe(i, n,
+ &dev->unlinkedDir->variant.directoryVariant.
+ children) {
+ if (i) {
+ l = list_entry(i, yaffs_Object, siblings);
+ yaffs_DestroyObject(l);
+ }
+ }
+ }
+
+ yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
+
+ if(alloc_failed){
+ return YAFFS_FAIL;
+ }
+
+ T(YAFFS_TRACE_SCAN, (TSTR("yaffs_Scan ends" TENDSTR)));
+
+
+ return YAFFS_OK;
+}
+
+static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in)
+{
+ __u8 *chunkData;
+ yaffs_ObjectHeader *oh;
+ yaffs_Device *dev = in->myDev;
+ yaffs_ExtendedTags tags;
+ int result;
+ int alloc_failed = 0;
+
+ if(!in)
+ return;
+
+#if 0
+ T(YAFFS_TRACE_SCAN,(TSTR("details for object %d %s loaded" TENDSTR),
+ in->objectId,
+ in->lazyLoaded ? "not yet" : "already"));
+#endif
+
+ if(in->lazyLoaded){
+ in->lazyLoaded = 0;
+ chunkData = yaffs_GetTempBuffer(dev, __LINE__);
+
+ result = yaffs_ReadChunkWithTagsFromNAND(dev,in->chunkId,chunkData,&tags);
+ oh = (yaffs_ObjectHeader *) chunkData;
+
+ in->yst_mode = oh->yst_mode;
+#ifdef CONFIG_YAFFS_WINCE
+ in->win_atime[0] = oh->win_atime[0];
+ in->win_ctime[0] = oh->win_ctime[0];
+ in->win_mtime[0] = oh->win_mtime[0];
+ in->win_atime[1] = oh->win_atime[1];
+ in->win_ctime[1] = oh->win_ctime[1];
+ in->win_mtime[1] = oh->win_mtime[1];
+#else
+ in->yst_uid = oh->yst_uid;
+ in->yst_gid = oh->yst_gid;
+ in->yst_atime = oh->yst_atime;
+ in->yst_mtime = oh->yst_mtime;
+ in->yst_ctime = oh->yst_ctime;
+ in->yst_rdev = oh->yst_rdev;
+
+#endif
+ yaffs_SetObjectName(in, oh->name);
+
+ if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK){
+ in->variant.symLinkVariant.alias =
+ yaffs_CloneString(oh->alias);
+ if(!in->variant.symLinkVariant.alias)
+ alloc_failed = 1; /* Not returned to caller */
+ }
+
+ yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
+ }
+}
+
+static int yaffs_ScanBackwards(yaffs_Device * dev)
+{
+ yaffs_ExtendedTags tags;
+ int blk;
+ int blockIterator;
+ int startIterator;
+ int endIterator;
+ int nBlocksToScan = 0;
+
+ int chunk;
+ int result;
+ int c;
+ int deleted;
+ yaffs_BlockState state;
+ yaffs_Object *hardList = NULL;
+ yaffs_BlockInfo *bi;
+ int sequenceNumber;
+ yaffs_ObjectHeader *oh;
+ yaffs_Object *in;
+ yaffs_Object *parent;
+ int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
+ int itsUnlinked;
+ __u8 *chunkData;
+
+ int fileSize;
+ int isShrink;
+ int foundChunksInBlock;
+ int equivalentObjectId;
+ int alloc_failed = 0;
+
+
+ yaffs_BlockIndex *blockIndex = NULL;
+ int altBlockIndex = 0;
+
+ if (!dev->isYaffs2) {
+ T(YAFFS_TRACE_SCAN,
+ (TSTR("yaffs_ScanBackwards is only for YAFFS2!" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ T(YAFFS_TRACE_SCAN,
+ (TSTR
+ ("yaffs_ScanBackwards starts intstartblk %d intendblk %d..."
+ TENDSTR), dev->internalStartBlock, dev->internalEndBlock));
+
+
+ dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
+
+ blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
+
+ if(!blockIndex) {
+ blockIndex = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockIndex));
+ altBlockIndex = 1;
+ }
+
+ if(!blockIndex) {
+ T(YAFFS_TRACE_SCAN,
+ (TSTR("yaffs_Scan() could not allocate block index!" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ dev->blocksInCheckpoint = 0;
+
+ chunkData = yaffs_GetTempBuffer(dev, __LINE__);
+
+ /* Scan all the blocks to determine their state */
+ for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
+ bi = yaffs_GetBlockInfo(dev, blk);
+ yaffs_ClearChunkBits(dev, blk);
+ bi->pagesInUse = 0;
+ bi->softDeletions = 0;
+
+ yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
+
+ bi->blockState = state;
+ bi->sequenceNumber = sequenceNumber;
+
+ if(bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
+ bi->blockState = state = YAFFS_BLOCK_STATE_CHECKPOINT;
+
+ T(YAFFS_TRACE_SCAN_DEBUG,
+ (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
+ state, sequenceNumber));
+
+
+ if(state == YAFFS_BLOCK_STATE_CHECKPOINT){
+ dev->blocksInCheckpoint++;
+
+ } else if (state == YAFFS_BLOCK_STATE_DEAD) {
+ T(YAFFS_TRACE_BAD_BLOCKS,
+ (TSTR("block %d is bad" TENDSTR), blk));
+ } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
+ T(YAFFS_TRACE_SCAN_DEBUG,
+ (TSTR("Block empty " TENDSTR)));
+ dev->nErasedBlocks++;
+ dev->nFreeChunks += dev->nChunksPerBlock;
+ } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
+
+ /* Determine the highest sequence number */
+ if (dev->isYaffs2 &&
+ sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
+ sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
+
+ blockIndex[nBlocksToScan].seq = sequenceNumber;
+ blockIndex[nBlocksToScan].block = blk;
+
+ nBlocksToScan++;
+
+ if (sequenceNumber >= dev->sequenceNumber) {
+ dev->sequenceNumber = sequenceNumber;
+ }
+ } else if (dev->isYaffs2) {
+ /* TODO: Nasty sequence number! */
+ T(YAFFS_TRACE_SCAN,
+ (TSTR
+ ("Block scanning block %d has bad sequence number %d"
+ TENDSTR), blk, sequenceNumber));
+
+ }
+ }
+ }
+
+ T(YAFFS_TRACE_SCAN,
+ (TSTR("%d blocks to be sorted..." TENDSTR), nBlocksToScan));
+
+
+
+ YYIELD();
+
+ /* Sort the blocks */
+#ifndef CONFIG_YAFFS_USE_OWN_SORT
+ {
+ /* Use qsort now. */
+ yaffs_qsort(blockIndex, nBlocksToScan, sizeof(yaffs_BlockIndex), ybicmp);
+ }
+#else
+ {
+ /* Dungy old bubble sort... */
+
+ yaffs_BlockIndex temp;
+ int i;
+ int j;
+
+ for (i = 0; i < nBlocksToScan; i++)
+ for (j = i + 1; j < nBlocksToScan; j++)
+ if (blockIndex[i].seq > blockIndex[j].seq) {
+ temp = blockIndex[j];
+ blockIndex[j] = blockIndex[i];
+ blockIndex[i] = temp;
+ }
+ }
+#endif
+
+ YYIELD();
+
+ T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
+
+ /* Now scan the blocks looking at the data. */
+ startIterator = 0;
+ endIterator = nBlocksToScan - 1;
+ T(YAFFS_TRACE_SCAN_DEBUG,
+ (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
+
+ /* For each block.... backwards */
+ for (blockIterator = endIterator; !alloc_failed && blockIterator >= startIterator;
+ blockIterator--) {
+ /* Cooperative multitasking! This loop can run for so
+ long that watchdog timers expire. */
+ YYIELD();
+
+ /* get the block to scan in the correct order */
+ blk = blockIndex[blockIterator].block;
+
+ bi = yaffs_GetBlockInfo(dev, blk);
+
+
+ state = bi->blockState;
+
+ deleted = 0;
+
+ /* For each chunk in each block that needs scanning.... */
+ foundChunksInBlock = 0;
+ for (c = dev->nChunksPerBlock - 1;
+ !alloc_failed && c >= 0 &&
+ (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
+ state == YAFFS_BLOCK_STATE_ALLOCATING); c--) {
+ /* Scan backwards...
+ * Read the tags and decide what to do
+ */
+
+ chunk = blk * dev->nChunksPerBlock + c;
+
+ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
+ &tags);
+
+ /* Let's have a good look at this chunk... */
+
+ if (!tags.chunkUsed) {
+ /* An unassigned chunk in the block.
+ * If there are used chunks after this one, then
+ * it is a chunk that was skipped due to failing the erased
+ * check. Just skip it so that it can be deleted.
+ * But, more typically, We get here when this is an unallocated
+ * chunk and his means that either the block is empty or
+ * this is the one being allocated from
+ */
+
+ if(foundChunksInBlock)
+ {
+ /* This is a chunk that was skipped due to failing the erased check */
+
+ } else if (c == 0) {
+ /* We're looking at the first chunk in the block so the block is unused */
+ state = YAFFS_BLOCK_STATE_EMPTY;
+ dev->nErasedBlocks++;
+ } else {
+ if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
+ state == YAFFS_BLOCK_STATE_ALLOCATING) {
+ if(dev->sequenceNumber == bi->sequenceNumber) {
+ /* this is the block being allocated from */
+
+ T(YAFFS_TRACE_SCAN,
+ (TSTR
+ (" Allocating from %d %d"
+ TENDSTR), blk, c));
+
+ state = YAFFS_BLOCK_STATE_ALLOCATING;
+ dev->allocationBlock = blk;
+ dev->allocationPage = c;
+ dev->allocationBlockFinder = blk;
+ }
+ else {
+ /* This is a partially written block that is not
+ * the current allocation block. This block must have
+ * had a write failure, so set up for retirement.
+ */
+
+ bi->needsRetiring = 1;
+ bi->gcPrioritise = 1;
+
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("Partially written block %d being set for retirement" TENDSTR),
+ blk));
+ }
+
+ }
+
+ }
+
+ dev->nFreeChunks++;
+
+ } else if (tags.chunkId > 0) {
+ /* chunkId > 0 so it is a data chunk... */
+ unsigned int endpos;
+ __u32 chunkBase =
+ (tags.chunkId - 1) * dev->nDataBytesPerChunk;
+
+ foundChunksInBlock = 1;
+
+
+ yaffs_SetChunkBit(dev, blk, c);
+ bi->pagesInUse++;
+
+ in = yaffs_FindOrCreateObjectByNumber(dev,
+ tags.
+ objectId,
+ YAFFS_OBJECT_TYPE_FILE);
+ if(!in){
+ /* Out of memory */
+ alloc_failed = 1;
+ }
+
+ if (in &&
+ in->variantType == YAFFS_OBJECT_TYPE_FILE
+ && chunkBase <
+ in->variant.fileVariant.shrinkSize) {
+ /* This has not been invalidated by a resize */
+ if(!yaffs_PutChunkIntoFile(in, tags.chunkId,
+ chunk, -1)){
+ alloc_failed = 1;
+ }
+
+ /* File size is calculated by looking at the data chunks if we have not
+ * seen an object header yet. Stop this practice once we find an object header.
+ */
+ endpos =
+ (tags.chunkId -
+ 1) * dev->nDataBytesPerChunk +
+ tags.byteCount;
+
+ if (!in->valid && /* have not got an object header yet */
+ in->variant.fileVariant.
+ scannedFileSize < endpos) {
+ in->variant.fileVariant.
+ scannedFileSize = endpos;
+ in->variant.fileVariant.
+ fileSize =
+ in->variant.fileVariant.
+ scannedFileSize;
+ }
+
+ } else if(in) {
+ /* This chunk has been invalidated by a resize, so delete */
+ yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
+
+ }
+ } else {
+ /* chunkId == 0, so it is an ObjectHeader.
+ * Thus, we read in the object header and make the object
+ */
+ foundChunksInBlock = 1;
+
+ yaffs_SetChunkBit(dev, blk, c);
+ bi->pagesInUse++;
+
+ oh = NULL;
+ in = NULL;
+
+ if (tags.extraHeaderInfoAvailable) {
+ in = yaffs_FindOrCreateObjectByNumber
+ (dev, tags.objectId,
+ tags.extraObjectType);
+ }
+
+ if (!in ||
+#ifdef CONFIG_YAFFS_DISABLE_LAZY_LOAD
+ !in->valid ||
+#endif
+ tags.extraShadows ||
+ (!in->valid &&
+ (tags.objectId == YAFFS_OBJECTID_ROOT ||
+ tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))
+ ) {
+
+ /* If we don't have valid info then we need to read the chunk
+ * TODO In future we can probably defer reading the chunk and
+ * living with invalid data until needed.
+ */
+
+ result = yaffs_ReadChunkWithTagsFromNAND(dev,
+ chunk,
+ chunkData,
+ NULL);
+
+ oh = (yaffs_ObjectHeader *) chunkData;
+
+ if (!in)
+ in = yaffs_FindOrCreateObjectByNumber(dev, tags.objectId, oh->type);
+
+ }
+
+ if (!in) {
+ /* TODO Hoosterman we have a problem! */
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ ("yaffs tragedy: Could not make object for object %d "
+ "at chunk %d during scan"
+ TENDSTR), tags.objectId, chunk));
+
+ }
+
+ if (in->valid) {
+ /* We have already filled this one.
+ * We have a duplicate that will be discarded, but
+ * we first have to suck out resize info if it is a file.
+ */
+
+ if ((in->variantType == YAFFS_OBJECT_TYPE_FILE) &&
+ ((oh &&
+ oh-> type == YAFFS_OBJECT_TYPE_FILE)||
+ (tags.extraHeaderInfoAvailable &&
+ tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))
+ ) {
+ __u32 thisSize =
+ (oh) ? oh->fileSize : tags.
+ extraFileLength;
+ __u32 parentObjectId =
+ (oh) ? oh->
+ parentObjectId : tags.
+ extraParentObjectId;
+ unsigned isShrink =
+ (oh) ? oh->isShrink : tags.
+ extraIsShrinkHeader;
+
+ /* If it is deleted (unlinked at start also means deleted)
+ * we treat the file size as being zeroed at this point.
+ */
+ if (parentObjectId ==
+ YAFFS_OBJECTID_DELETED
+ || parentObjectId ==
+ YAFFS_OBJECTID_UNLINKED) {
+ thisSize = 0;
+ isShrink = 1;
+ }
+
+ if (isShrink &&
+ in->variant.fileVariant.
+ shrinkSize > thisSize) {
+ in->variant.fileVariant.
+ shrinkSize =
+ thisSize;
+ }
+
+ if (isShrink) {
+ bi->hasShrinkHeader = 1;
+ }
+
+ }
+ /* Use existing - destroy this one. */
+ yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
+
+ }
+
+ if (!in->valid &&
+ (tags.objectId == YAFFS_OBJECTID_ROOT ||
+ tags.objectId ==
+ YAFFS_OBJECTID_LOSTNFOUND)) {
+ /* We only load some info, don't fiddle with directory structure */
+ in->valid = 1;
+
+ if(oh) {
+ in->variantType = oh->type;
+
+ in->yst_mode = oh->yst_mode;
+#ifdef CONFIG_YAFFS_WINCE
+ in->win_atime[0] = oh->win_atime[0];
+ in->win_ctime[0] = oh->win_ctime[0];
+ in->win_mtime[0] = oh->win_mtime[0];
+ in->win_atime[1] = oh->win_atime[1];
+ in->win_ctime[1] = oh->win_ctime[1];
+ in->win_mtime[1] = oh->win_mtime[1];
+#else
+ in->yst_uid = oh->yst_uid;
+ in->yst_gid = oh->yst_gid;
+ in->yst_atime = oh->yst_atime;
+ in->yst_mtime = oh->yst_mtime;
+ in->yst_ctime = oh->yst_ctime;
+ in->yst_rdev = oh->yst_rdev;
+
+#endif
+ } else {
+ in->variantType = tags.extraObjectType;
+ in->lazyLoaded = 1;
+ }
+
+ in->chunkId = chunk;
+
+ } else if (!in->valid) {
+ /* we need to load this info */
+
+ in->valid = 1;
+ in->chunkId = chunk;
+
+ if(oh) {
+ in->variantType = oh->type;
+
+ in->yst_mode = oh->yst_mode;
+#ifdef CONFIG_YAFFS_WINCE
+ in->win_atime[0] = oh->win_atime[0];
+ in->win_ctime[0] = oh->win_ctime[0];
+ in->win_mtime[0] = oh->win_mtime[0];
+ in->win_atime[1] = oh->win_atime[1];
+ in->win_ctime[1] = oh->win_ctime[1];
+ in->win_mtime[1] = oh->win_mtime[1];
+#else
+ in->yst_uid = oh->yst_uid;
+ in->yst_gid = oh->yst_gid;
+ in->yst_atime = oh->yst_atime;
+ in->yst_mtime = oh->yst_mtime;
+ in->yst_ctime = oh->yst_ctime;
+ in->yst_rdev = oh->yst_rdev;
+#endif
+
+ if (oh->shadowsObject > 0)
+ yaffs_HandleShadowedObject(dev,
+ oh->
+ shadowsObject,
+ 1);
+
+
+ yaffs_SetObjectName(in, oh->name);
+ parent =
+ yaffs_FindOrCreateObjectByNumber
+ (dev, oh->parentObjectId,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+
+ fileSize = oh->fileSize;
+ isShrink = oh->isShrink;
+ equivalentObjectId = oh->equivalentObjectId;
+
+ }
+ else {
+ in->variantType = tags.extraObjectType;
+ parent =
+ yaffs_FindOrCreateObjectByNumber
+ (dev, tags.extraParentObjectId,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+ fileSize = tags.extraFileLength;
+ isShrink = tags.extraIsShrinkHeader;
+ equivalentObjectId = tags.extraEquivalentObjectId;
+ in->lazyLoaded = 1;
+
+ }
+ in->dirty = 0;
+
+ /* directory stuff...
+ * hook up to parent
+ */
+
+ if (parent->variantType ==
+ YAFFS_OBJECT_TYPE_UNKNOWN) {
+ /* Set up as a directory */
+ parent->variantType =
+ YAFFS_OBJECT_TYPE_DIRECTORY;
+ INIT_LIST_HEAD(&parent->variant.
+ directoryVariant.
+ children);
+ } else if (parent->variantType !=
+ YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+ /* Hoosterman, another problem....
+ * We're trying to use a non-directory as a directory
+ */
+
+ T(YAFFS_TRACE_ERROR,
+ (TSTR
+ ("yaffs tragedy: attempting to use non-directory as"
+ " a directory in scan. Put in lost+found."
+ TENDSTR)));
+ parent = dev->lostNFoundDir;
+ }
+
+ yaffs_AddObjectToDirectory(parent, in);
+
+ itsUnlinked = (parent == dev->deletedDir) ||
+ (parent == dev->unlinkedDir);
+
+ if (isShrink) {
+ /* Mark the block as having a shrinkHeader */
+ bi->hasShrinkHeader = 1;
+ }
+
+ /* Note re hardlinks.
+ * Since we might scan a hardlink before its equivalent object is scanned
+ * we put them all in a list.
+ * After scanning is complete, we should have all the objects, so we run
+ * through this list and fix up all the chains.
+ */
+
+ switch (in->variantType) {
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* Todo got a problem */
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+
+ if (in->variant.fileVariant.
+ scannedFileSize < fileSize) {
+ /* This covers the case where the file size is greater
+ * than where the data is
+ * This will happen if the file is resized to be larger
+ * than its current data extents.
+ */
+ in->variant.fileVariant.fileSize = fileSize;
+ in->variant.fileVariant.scannedFileSize =
+ in->variant.fileVariant.fileSize;
+ }
+
+ if (isShrink &&
+ in->variant.fileVariant.shrinkSize > fileSize) {
+ in->variant.fileVariant.shrinkSize = fileSize;
+ }
+
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ if(!itsUnlinked) {
+ in->variant.hardLinkVariant.equivalentObjectId =
+ equivalentObjectId;
+ in->hardLinks.next =
+ (struct list_head *) hardList;
+ hardList = in;
+ }
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ if(oh){
+ in->variant.symLinkVariant.alias =
+ yaffs_CloneString(oh->
+ alias);
+ if(!in->variant.symLinkVariant.alias)
+ alloc_failed = 1;
+ }
+ break;
+ }
+
+ }
+
+ }
+
+ } /* End of scanning for each chunk */
+
+ if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
+ /* If we got this far while scanning, then the block is fully allocated. */
+ state = YAFFS_BLOCK_STATE_FULL;
+ }
+
+ bi->blockState = state;
+
+ /* Now let's see if it was dirty */
+ if (bi->pagesInUse == 0 &&
+ !bi->hasShrinkHeader &&
+ bi->blockState == YAFFS_BLOCK_STATE_FULL) {
+ yaffs_BlockBecameDirty(dev, blk);
+ }
+
+ }
+
+ if (altBlockIndex)
+ YFREE_ALT(blockIndex);
+ else
+ YFREE(blockIndex);
+
+ /* Ok, we've done all the scanning.
+ * Fix up the hard link chains.
+ * We should now have scanned all the objects, now it's time to add these
+ * hardlinks.
+ */
+ yaffs_HardlinkFixup(dev,hardList);
+
+
+ /*
+ * Sort out state of unlinked and deleted objects.
+ */
+ {
+ struct list_head *i;
+ struct list_head *n;
+
+ yaffs_Object *l;
+
+ /* Soft delete all the unlinked files */
+ list_for_each_safe(i, n,
+ &dev->unlinkedDir->variant.directoryVariant.
+ children) {
+ if (i) {
+ l = list_entry(i, yaffs_Object, siblings);
+ yaffs_DestroyObject(l);
+ }
+ }
+
+ /* Soft delete all the deletedDir files */
+ list_for_each_safe(i, n,
+ &dev->deletedDir->variant.directoryVariant.
+ children) {
+ if (i) {
+ l = list_entry(i, yaffs_Object, siblings);
+ yaffs_DestroyObject(l);
+
+ }
+ }
+ }
+
+ yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
+
+ if(alloc_failed){
+ return YAFFS_FAIL;
+ }
+
+ T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
+
+ return YAFFS_OK;
+}
+
+/*------------------------------ Directory Functions ----------------------------- */
+
+static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj)
+{
+ yaffs_Device *dev = obj->myDev;
+
+ if(dev && dev->removeObjectCallback)
+ dev->removeObjectCallback(obj);
+
+ list_del_init(&obj->siblings);
+ obj->parent = NULL;
+}
+
+
+static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
+ yaffs_Object * obj)
+{
+
+ if (!directory) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("tragedy: Trying to add an object to a null pointer directory"
+ TENDSTR)));
+ YBUG();
+ }
+ if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("tragedy: Trying to add an object to a non-directory"
+ TENDSTR)));
+ YBUG();
+ }
+
+ if (obj->siblings.prev == NULL) {
+ /* Not initialised */
+ INIT_LIST_HEAD(&obj->siblings);
+
+ } else if (!list_empty(&obj->siblings)) {
+ /* If it is holed up somewhere else, un hook it */
+ yaffs_RemoveObjectFromDirectory(obj);
+ }
+ /* Now add it */
+ list_add(&obj->siblings, &directory->variant.directoryVariant.children);
+ obj->parent = directory;
+
+ if (directory == obj->myDev->unlinkedDir
+ || directory == obj->myDev->deletedDir) {
+ obj->unlinked = 1;
+ obj->myDev->nUnlinkedFiles++;
+ obj->renameAllowed = 0;
+ }
+}
+
+yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory,
+ const YCHAR * name)
+{
+ int sum;
+
+ struct list_head *i;
+ YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
+
+ yaffs_Object *l;
+
+ if (!name) {
+ return NULL;
+ }
+
+ if (!directory) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("tragedy: yaffs_FindObjectByName: null pointer directory"
+ TENDSTR)));
+ YBUG();
+ }
+ if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
+ YBUG();
+ }
+
+ sum = yaffs_CalcNameSum(name);
+
+ list_for_each(i, &directory->variant.directoryVariant.children) {
+ if (i) {
+ l = list_entry(i, yaffs_Object, siblings);
+
+ yaffs_CheckObjectDetailsLoaded(l);
+
+ /* Special case for lost-n-found */
+ if (l->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
+ if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0) {
+ return l;
+ }
+ } else if (yaffs_SumCompare(l->sum, sum) || l->chunkId <= 0)
+ {
+ /* LostnFound cunk called Objxxx
+ * Do a real check
+ */
+ yaffs_GetObjectName(l, buffer,
+ YAFFS_MAX_NAME_LENGTH);
+ if (yaffs_strncmp(name, buffer,YAFFS_MAX_NAME_LENGTH) == 0) {
+ return l;
+ }
+
+ }
+ }
+ }
+
+ return NULL;
+}
+
+
+#if 0
+int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
+ int (*fn) (yaffs_Object *))
+{
+ struct list_head *i;
+ yaffs_Object *l;
+
+ if (!theDir) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("tragedy: yaffs_FindObjectByName: null pointer directory"
+ TENDSTR)));
+ YBUG();
+ }
+ if (theDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
+ YBUG();
+ }
+
+ list_for_each(i, &theDir->variant.directoryVariant.children) {
+ if (i) {
+ l = list_entry(i, yaffs_Object, siblings);
+ if (l && !fn(l)) {
+ return YAFFS_FAIL;
+ }
+ }
+ }
+
+ return YAFFS_OK;
+
+}
+#endif
+
+/* GetEquivalentObject dereferences any hard links to get to the
+ * actual object.
+ */
+
+yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj)
+{
+ if (obj && obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
+ /* We want the object id of the equivalent object, not this one */
+ obj = obj->variant.hardLinkVariant.equivalentObject;
+ yaffs_CheckObjectDetailsLoaded(obj);
+ }
+ return obj;
+
+}
+
+int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
+{
+ memset(name, 0, buffSize * sizeof(YCHAR));
+
+ yaffs_CheckObjectDetailsLoaded(obj);
+
+ if (obj->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
+ yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffSize - 1);
+ } else if (obj->chunkId <= 0) {
+ YCHAR locName[20];
+ /* make up a name */
+ yaffs_sprintf(locName, _Y("%s%d"), YAFFS_LOSTNFOUND_PREFIX,
+ obj->objectId);
+ yaffs_strncpy(name, locName, buffSize - 1);
+
+ }
+#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
+ else if (obj->shortName[0]) {
+ yaffs_strcpy(name, obj->shortName);
+ }
+#endif
+ else {
+ int result;
+ __u8 *buffer = yaffs_GetTempBuffer(obj->myDev, __LINE__);
+
+ yaffs_ObjectHeader *oh = (yaffs_ObjectHeader *) buffer;
+
+ memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
+
+ if (obj->chunkId >= 0) {
+ result = yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
+ obj->chunkId, buffer,
+ NULL);
+ }
+ yaffs_strncpy(name, oh->name, buffSize - 1);
+
+ yaffs_ReleaseTempBuffer(obj->myDev, buffer, __LINE__);
+ }
+
+ return yaffs_strlen(name);
+}
+
+int yaffs_GetObjectFileLength(yaffs_Object * obj)
+{
+
+ /* Dereference any hard linking */
+ obj = yaffs_GetEquivalentObject(obj);
+
+ if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
+ return obj->variant.fileVariant.fileSize;
+ }
+ if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
+ return yaffs_strlen(obj->variant.symLinkVariant.alias);
+ } else {
+ /* Only a directory should drop through to here */
+ return obj->myDev->nDataBytesPerChunk;
+ }
+}
+
+int yaffs_GetObjectLinkCount(yaffs_Object * obj)
+{
+ int count = 0;
+ struct list_head *i;
+
+ if (!obj->unlinked) {
+ count++; /* the object itself */
+ }
+ list_for_each(i, &obj->hardLinks) {
+ count++; /* add the hard links; */
+ }
+ return count;
+
+}
+
+int yaffs_GetObjectInode(yaffs_Object * obj)
+{
+ obj = yaffs_GetEquivalentObject(obj);
+
+ return obj->objectId;
+}
+
+unsigned yaffs_GetObjectType(yaffs_Object * obj)
+{
+ obj = yaffs_GetEquivalentObject(obj);
+
+ switch (obj->variantType) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ return DT_REG;
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ return DT_DIR;
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ return DT_LNK;
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ return DT_REG;
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ if (S_ISFIFO(obj->yst_mode))
+ return DT_FIFO;
+ if (S_ISCHR(obj->yst_mode))
+ return DT_CHR;
+ if (S_ISBLK(obj->yst_mode))
+ return DT_BLK;
+ if (S_ISSOCK(obj->yst_mode))
+ return DT_SOCK;
+ default:
+ return DT_REG;
+ break;
+ }
+}
+
+YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj)
+{
+ obj = yaffs_GetEquivalentObject(obj);
+ if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
+ return yaffs_CloneString(obj->variant.symLinkVariant.alias);
+ } else {
+ return yaffs_CloneString(_Y(""));
+ }
+}
+
+#ifndef CONFIG_YAFFS_WINCE
+
+int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr)
+{
+ unsigned int valid = attr->ia_valid;
+
+ if (valid & ATTR_MODE)
+ obj->yst_mode = attr->ia_mode;
+ if (valid & ATTR_UID)
+ obj->yst_uid = attr->ia_uid;
+ if (valid & ATTR_GID)
+ obj->yst_gid = attr->ia_gid;
+
+ if (valid & ATTR_ATIME)
+ obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime);
+ if (valid & ATTR_CTIME)
+ obj->yst_ctime = Y_TIME_CONVERT(attr->ia_ctime);
+ if (valid & ATTR_MTIME)
+ obj->yst_mtime = Y_TIME_CONVERT(attr->ia_mtime);
+
+ if (valid & ATTR_SIZE)
+ yaffs_ResizeFile(obj, attr->ia_size);
+
+ yaffs_UpdateObjectHeader(obj, NULL, 1, 0, 0);
+
+ return YAFFS_OK;
+
+}
+int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr)
+{
+ unsigned int valid = 0;
+
+ attr->ia_mode = obj->yst_mode;
+ valid |= ATTR_MODE;
+ attr->ia_uid = obj->yst_uid;
+ valid |= ATTR_UID;
+ attr->ia_gid = obj->yst_gid;
+ valid |= ATTR_GID;
+
+ Y_TIME_CONVERT(attr->ia_atime) = obj->yst_atime;
+ valid |= ATTR_ATIME;
+ Y_TIME_CONVERT(attr->ia_ctime) = obj->yst_ctime;
+ valid |= ATTR_CTIME;
+ Y_TIME_CONVERT(attr->ia_mtime) = obj->yst_mtime;
+ valid |= ATTR_MTIME;
+
+ attr->ia_size = yaffs_GetFileSize(obj);
+ valid |= ATTR_SIZE;
+
+ attr->ia_valid = valid;
+
+ return YAFFS_OK;
+
+}
+
+#endif
+
+#if 0
+int yaffs_DumpObject(yaffs_Object * obj)
+{
+ YCHAR name[257];
+
+ yaffs_GetObjectName(obj, name, 256);
+
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("Object %d, inode %d \"%s\"\n dirty %d valid %d serial %d sum %d"
+ " chunk %d type %d size %d\n"
+ TENDSTR), obj->objectId, yaffs_GetObjectInode(obj), name,
+ obj->dirty, obj->valid, obj->serial, obj->sum, obj->chunkId,
+ yaffs_GetObjectType(obj), yaffs_GetObjectFileLength(obj)));
+
+ return YAFFS_OK;
+}
+#endif
+
+/*---------------------------- Initialisation code -------------------------------------- */
+
+static int yaffs_CheckDevFunctions(const yaffs_Device * dev)
+{
+
+ /* Common functions, gotta have */
+ if (!dev->eraseBlockInNAND || !dev->initialiseNAND)
+ return 0;
+
+#ifdef CONFIG_YAFFS_YAFFS2
+
+ /* Can use the "with tags" style interface for yaffs1 or yaffs2 */
+ if (dev->writeChunkWithTagsToNAND &&
+ dev->readChunkWithTagsFromNAND &&
+ !dev->writeChunkToNAND &&
+ !dev->readChunkFromNAND &&
+ dev->markNANDBlockBad && dev->queryNANDBlock)
+ return 1;
+#endif
+
+ /* Can use the "spare" style interface for yaffs1 */
+ if (!dev->isYaffs2 &&
+ !dev->writeChunkWithTagsToNAND &&
+ !dev->readChunkWithTagsFromNAND &&
+ dev->writeChunkToNAND &&
+ dev->readChunkFromNAND &&
+ !dev->markNANDBlockBad && !dev->queryNANDBlock)
+ return 1;
+
+ return 0; /* bad */
+}
+
+
+static int yaffs_CreateInitialDirectories(yaffs_Device *dev)
+{
+ /* Initialise the unlinked, deleted, root and lost and found directories */
+
+ dev->lostNFoundDir = dev->rootDir = NULL;
+ dev->unlinkedDir = dev->deletedDir = NULL;
+
+ dev->unlinkedDir =
+ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_UNLINKED, S_IFDIR);
+
+ dev->deletedDir =
+ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_DELETED, S_IFDIR);
+
+ dev->rootDir =
+ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_ROOT,
+ YAFFS_ROOT_MODE | S_IFDIR);
+ dev->lostNFoundDir =
+ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_LOSTNFOUND,
+ YAFFS_LOSTNFOUND_MODE | S_IFDIR);
+
+ if(dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir){
+ yaffs_AddObjectToDirectory(dev->rootDir, dev->lostNFoundDir);
+ return YAFFS_OK;
+ }
+
+ return YAFFS_FAIL;
+}
+
+int yaffs_GutsInitialise(yaffs_Device * dev)
+{
+ int init_failed = 0;
+ unsigned x;
+ int bits;
+
+ T(YAFFS_TRACE_TRACING, (TSTR("yaffs: yaffs_GutsInitialise()" TENDSTR)));
+
+ /* Check stuff that must be set */
+
+ if (!dev) {
+ T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Need a device" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ dev->internalStartBlock = dev->startBlock;
+ dev->internalEndBlock = dev->endBlock;
+ dev->blockOffset = 0;
+ dev->chunkOffset = 0;
+ dev->nFreeChunks = 0;
+
+ if (dev->startBlock == 0) {
+ dev->internalStartBlock = dev->startBlock + 1;
+ dev->internalEndBlock = dev->endBlock + 1;
+ dev->blockOffset = 1;
+ dev->chunkOffset = dev->nChunksPerBlock;
+ }
+
+ /* Check geometry parameters. */
+
+ if ((dev->isYaffs2 && dev->nDataBytesPerChunk < 1024) ||
+ (!dev->isYaffs2 && dev->nDataBytesPerChunk != 512) ||
+ dev->nChunksPerBlock < 2 ||
+ dev->nReservedBlocks < 2 ||
+ dev->internalStartBlock <= 0 ||
+ dev->internalEndBlock <= 0 ||
+ dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2) // otherwise it is too small
+ ) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s "
+ TENDSTR), dev->nDataBytesPerChunk, dev->isYaffs2 ? "2" : ""));
+ return YAFFS_FAIL;
+ }
+
+ if (yaffs_InitialiseNAND(dev) != YAFFS_OK) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs: InitialiseNAND failed" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ /* Got the right mix of functions? */
+ if (!yaffs_CheckDevFunctions(dev)) {
+ /* Function missing */
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR
+ ("yaffs: device function(s) missing or wrong\n" TENDSTR)));
+
+ return YAFFS_FAIL;
+ }
+
+ /* This is really a compilation check. */
+ if (!yaffs_CheckStructures()) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs_CheckStructures failed\n" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ if (dev->isMounted) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs: device already mounted\n" TENDSTR)));
+ return YAFFS_FAIL;
+ }
+
+ /* Finished with most checks. One or two more checks happen later on too. */
+
+ dev->isMounted = 1;
+
+
+
+ /* OK now calculate a few things for the device */
+
+ /*
+ * Calculate all the chunk size manipulation numbers:
+ */
+ /* Start off assuming it is a power of 2 */
+ dev->chunkShift = ShiftDiv(dev->nDataBytesPerChunk);
+ dev->chunkMask = (1<<dev->chunkShift) - 1;
+
+ if(dev->nDataBytesPerChunk == (dev->chunkMask + 1)){
+ /* Yes it is a power of 2, disable crumbs */
+ dev->crumbMask = 0;
+ dev->crumbShift = 0;
+ dev->crumbsPerChunk = 0;
+ } else {
+ /* Not a power of 2, use crumbs instead */
+ dev->crumbShift = ShiftDiv(sizeof(yaffs_PackedTags2TagsPart));
+ dev->crumbMask = (1<<dev->crumbShift)-1;
+ dev->crumbsPerChunk = dev->nDataBytesPerChunk/(1 << dev->crumbShift);
+ dev->chunkShift = 0;
+ dev->chunkMask = 0;
+ }
+
+
+ /*
+ * Calculate chunkGroupBits.
+ * We need to find the next power of 2 > than internalEndBlock
+ */
+
+ x = dev->nChunksPerBlock * (dev->internalEndBlock + 1);
+
+ bits = ShiftsGE(x);
+
+ /* Set up tnode width if wide tnodes are enabled. */
+ if(!dev->wideTnodesDisabled){
+ /* bits must be even so that we end up with 32-bit words */
+ if(bits & 1)
+ bits++;
+ if(bits < 16)
+ dev->tnodeWidth = 16;
+ else
+ dev->tnodeWidth = bits;
+ }
+ else
+ dev->tnodeWidth = 16;
+
+ dev->tnodeMask = (1<<dev->tnodeWidth)-1;
+
+ /* Level0 Tnodes are 16 bits or wider (if wide tnodes are enabled),
+ * so if the bitwidth of the
+ * chunk range we're using is greater than 16 we need
+ * to figure out chunk shift and chunkGroupSize
+ */
+
+ if (bits <= dev->tnodeWidth)
+ dev->chunkGroupBits = 0;
+ else
+ dev->chunkGroupBits = bits - dev->tnodeWidth;
+
+
+ dev->chunkGroupSize = 1 << dev->chunkGroupBits;
+
+ if (dev->nChunksPerBlock < dev->chunkGroupSize) {
+ /* We have a problem because the soft delete won't work if
+ * the chunk group size > chunks per block.
+ * This can be remedied by using larger "virtual blocks".
+ */
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs: chunk group too large\n" TENDSTR)));
+
+ return YAFFS_FAIL;
+ }
+
+ /* OK, we've finished verifying the device, lets continue with initialisation */
+
+ /* More device initialisation */
+ dev->garbageCollections = 0;
+ dev->passiveGarbageCollections = 0;
+ dev->currentDirtyChecker = 0;
+ dev->bufferedBlock = -1;
+ dev->doingBufferedBlockRewrite = 0;
+ dev->nDeletedFiles = 0;
+ dev->nBackgroundDeletions = 0;
+ dev->nUnlinkedFiles = 0;
+ dev->eccFixed = 0;
+ dev->eccUnfixed = 0;
+ dev->tagsEccFixed = 0;
+ dev->tagsEccUnfixed = 0;
+ dev->nErasureFailures = 0;
+ dev->nErasedBlocks = 0;
+ dev->isDoingGC = 0;
+ dev->hasPendingPrioritisedGCs = 1; /* Assume the worst for now, will get fixed on first GC */
+
+ /* Initialise temporary buffers and caches. */
+ if(!yaffs_InitialiseTempBuffers(dev))
+ init_failed = 1;
+
+ dev->srCache = NULL;
+ dev->gcCleanupList = NULL;
+
+
+ if (!init_failed &&
+ dev->nShortOpCaches > 0) {
+ int i;
+ __u8 *buf;
+ int srCacheBytes = dev->nShortOpCaches * sizeof(yaffs_ChunkCache);
+
+ if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES) {
+ dev->nShortOpCaches = YAFFS_MAX_SHORT_OP_CACHES;
+ }
+
+ buf = dev->srCache = YMALLOC(srCacheBytes);
+
+ if(dev->srCache)
+ memset(dev->srCache,0,srCacheBytes);
+
+ for (i = 0; i < dev->nShortOpCaches && buf; i++) {
+ dev->srCache[i].object = NULL;
+ dev->srCache[i].lastUse = 0;
+ dev->srCache[i].dirty = 0;
+ dev->srCache[i].data = buf = YMALLOC_DMA(dev->nDataBytesPerChunk);
+ }
+ if(!buf)
+ init_failed = 1;
+
+ dev->srLastUse = 0;
+ }
+
+ dev->cacheHits = 0;
+
+ if(!init_failed){
+ dev->gcCleanupList = YMALLOC(dev->nChunksPerBlock * sizeof(__u32));
+ if(!dev->gcCleanupList)
+ init_failed = 1;
+ }
+
+ if (dev->isYaffs2) {
+ dev->useHeaderFileSize = 1;
+ }
+ if(!init_failed && !yaffs_InitialiseBlocks(dev))
+ init_failed = 1;
+
+ yaffs_InitialiseTnodes(dev);
+ yaffs_InitialiseObjects(dev);
+
+ if(!init_failed && !yaffs_CreateInitialDirectories(dev))
+ init_failed = 1;
+
+
+ if(!init_failed){
+ /* Now scan the flash. */
+ if (dev->isYaffs2) {
+ if(yaffs_CheckpointRestore(dev)) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("yaffs: restored from checkpoint" TENDSTR)));
+ } else {
+
+ /* Clean up the mess caused by an aborted checkpoint load
+ * and scan backwards.
+ */
+ yaffs_DeinitialiseBlocks(dev);
+ yaffs_DeinitialiseTnodes(dev);
+ yaffs_DeinitialiseObjects(dev);
+
+
+ dev->nErasedBlocks = 0;
+ dev->nFreeChunks = 0;
+ dev->allocationBlock = -1;
+ dev->allocationPage = -1;
+ dev->nDeletedFiles = 0;
+ dev->nUnlinkedFiles = 0;
+ dev->nBackgroundDeletions = 0;
+ dev->oldestDirtySequence = 0;
+
+ if(!init_failed && !yaffs_InitialiseBlocks(dev))
+ init_failed = 1;
+
+ yaffs_InitialiseTnodes(dev);
+ yaffs_InitialiseObjects(dev);
+
+ if(!init_failed && !yaffs_CreateInitialDirectories(dev))
+ init_failed = 1;
+
+ if(!init_failed && !yaffs_ScanBackwards(dev))
+ init_failed = 1;
+ }
+ }else
+ if(!yaffs_Scan(dev))
+ init_failed = 1;
+ }
+
+ if(init_failed){
+ /* Clean up the mess */
+ T(YAFFS_TRACE_TRACING,
+ (TSTR("yaffs: yaffs_GutsInitialise() aborted.\n" TENDSTR)));
+
+ yaffs_Deinitialise(dev);
+ return YAFFS_FAIL;
+ }
+
+ /* Zero out stats */
+ dev->nPageReads = 0;
+ dev->nPageWrites = 0;
+ dev->nBlockErasures = 0;
+ dev->nGCCopies = 0;
+ dev->nRetriedWrites = 0;
+
+ dev->nRetiredBlocks = 0;
+
+ yaffs_VerifyFreeChunks(dev);
+ yaffs_VerifyBlocks(dev);
+
+
+ T(YAFFS_TRACE_TRACING,
+ (TSTR("yaffs: yaffs_GutsInitialise() done.\n" TENDSTR)));
+ return YAFFS_OK;
+
+}
+
+void yaffs_Deinitialise(yaffs_Device * dev)
+{
+ if (dev->isMounted) {
+ int i;
+
+ yaffs_DeinitialiseBlocks(dev);
+ yaffs_DeinitialiseTnodes(dev);
+ yaffs_DeinitialiseObjects(dev);
+ if (dev->nShortOpCaches > 0 &&
+ dev->srCache) {
+
+ for (i = 0; i < dev->nShortOpCaches; i++) {
+ if(dev->srCache[i].data)
+ YFREE(dev->srCache[i].data);
+ dev->srCache[i].data = NULL;
+ }
+
+ YFREE(dev->srCache);
+ dev->srCache = NULL;
+ }
+
+ YFREE(dev->gcCleanupList);
+
+ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
+ YFREE(dev->tempBuffer[i].buffer);
+ }
+
+ dev->isMounted = 0;
+ }
+
+}
+
+static int yaffs_CountFreeChunks(yaffs_Device * dev)
+{
+ int nFree;
+ int b;
+
+ yaffs_BlockInfo *blk;
+
+ for (nFree = 0, b = dev->internalStartBlock; b <= dev->internalEndBlock;
+ b++) {
+ blk = yaffs_GetBlockInfo(dev, b);
+
+ switch (blk->blockState) {
+ case YAFFS_BLOCK_STATE_EMPTY:
+ case YAFFS_BLOCK_STATE_ALLOCATING:
+ case YAFFS_BLOCK_STATE_COLLECTING:
+ case YAFFS_BLOCK_STATE_FULL:
+ nFree +=
+ (dev->nChunksPerBlock - blk->pagesInUse +
+ blk->softDeletions);
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ return nFree;
+}
+
+int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev)
+{
+ /* This is what we report to the outside world */
+
+ int nFree;
+ int nDirtyCacheChunks;
+ int blocksForCheckpoint;
+
+#if 1
+ nFree = dev->nFreeChunks;
+#else
+ nFree = yaffs_CountFreeChunks(dev);
+#endif
+
+ nFree += dev->nDeletedFiles;
+
+ /* Now count the number of dirty chunks in the cache and subtract those */
+
+ {
+ int i;
+ for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
+ if (dev->srCache[i].dirty)
+ nDirtyCacheChunks++;
+ }
+ }
+
+ nFree -= nDirtyCacheChunks;
+
+ nFree -= ((dev->nReservedBlocks + 1) * dev->nChunksPerBlock);
+
+ /* Now we figure out how much to reserve for the checkpoint and report that... */
+ blocksForCheckpoint = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
+ if(blocksForCheckpoint < 0)
+ blocksForCheckpoint = 0;
+
+ nFree -= (blocksForCheckpoint * dev->nChunksPerBlock);
+
+ if (nFree < 0)
+ nFree = 0;
+
+ return nFree;
+
+}
+
+static int yaffs_freeVerificationFailures;
+
+static void yaffs_VerifyFreeChunks(yaffs_Device * dev)
+{
+ int counted;
+ int difference;
+
+ if(yaffs_SkipVerification(dev))
+ return;
+
+ counted = yaffs_CountFreeChunks(dev);
+
+ difference = dev->nFreeChunks - counted;
+
+ if (difference) {
+ T(YAFFS_TRACE_ALWAYS,
+ (TSTR("Freechunks verification failure %d %d %d" TENDSTR),
+ dev->nFreeChunks, counted, difference));
+ yaffs_freeVerificationFailures++;
+ }
+}
+
+/*---------------------------------------- YAFFS test code ----------------------*/
+
+#define yaffs_CheckStruct(structure,syze, name) \
+ if(sizeof(structure) != syze) \
+ { \
+ T(YAFFS_TRACE_ALWAYS,(TSTR("%s should be %d but is %d\n" TENDSTR),\
+ name,syze,sizeof(structure))); \
+ return YAFFS_FAIL; \
+ }
+
+static int yaffs_CheckStructures(void)
+{
+/* yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags") */
+/* yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion") */
+/* yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare") */
+#ifndef CONFIG_YAFFS_TNODE_LIST_DEBUG
+ yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode")
+#endif
+ yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader")
+
+ return YAFFS_OK;
+}
diff -Naur u-boot-2009.03_orig/fs/yaffs2/yaffs_mtdif.c u-boot-2009.03/fs/yaffs2/yaffs_mtdif.c
--- u-boot-2009.03_orig/fs/yaffs2/yaffs_mtdif.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/yaffs_mtdif.c 2009-03-31 14:56:33.095297600 -0700
@@ -1,246 +1,246 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-const char *yaffs_mtdif_c_version =
- "$Id: yaffs_mtdif.c,v 1.19 2007/02/14 01:09:06 wookey Exp $";
-
-#include "yportenv.h"
-
-
-#include "yaffs_mtdif.h"
-
-#include "linux/mtd/mtd.h"
-#include "linux/types.h"
-#include "linux/time.h"
-#include "linux/mtd/nand.h"
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
-static struct nand_oobinfo yaffs_oobinfo = {
- .useecc = 1,
- .eccbytes = 6,
- .eccpos = {8, 9, 10, 13, 14, 15}
-};
-
-static struct nand_oobinfo yaffs_noeccinfo = {
- .useecc = 0,
-};
-#endif
-
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
-{
- oob[0] = spare->tagByte0;
- oob[1] = spare->tagByte1;
- oob[2] = spare->tagByte2;
- oob[3] = spare->tagByte3;
- oob[4] = spare->tagByte4;
- oob[5] = spare->tagByte5 & 0x3f;
- oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
- oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
- oob[6] = spare->tagByte6;
- oob[7] = spare->tagByte7;
-}
-
-static inline void translate_oob2spare(yaffs_Spare *spare, __u8 *oob)
-{
- struct yaffs_NANDSpare *nspare = (struct yaffs_NANDSpare *)spare;
- spare->tagByte0 = oob[0];
- spare->tagByte1 = oob[1];
- spare->tagByte2 = oob[2];
- spare->tagByte3 = oob[3];
- spare->tagByte4 = oob[4];
- spare->tagByte5 = oob[5] == 0xff ? 0xff : oob[5] & 0x3f;
- spare->blockStatus = oob[5] & 0x80 ? 0xff : 'Y';
- spare->pageStatus = oob[5] & 0x40 ? 0xff : 0;
- spare->ecc1[0] = spare->ecc1[1] = spare->ecc1[2] = 0xff;
- spare->tagByte6 = oob[6];
- spare->tagByte7 = oob[7];
- spare->ecc2[0] = spare->ecc2[1] = spare->ecc2[2] = 0xff;
-
- nspare->eccres1 = nspare->eccres2 = 0; /* FIXME */
-}
-#endif
-
-int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data, const yaffs_Spare * spare)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- struct mtd_oob_ops ops;
-#endif
- size_t dummy;
- int retval = 0;
-
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- __u8 spareAsBytes[8]; /* OOB */
-
- if (data && !spare)
- retval = mtd->write(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data);
- else if (spare) {
- if (dev->useNANDECC) {
- translate_spare2oob(spare, spareAsBytes);
- ops.mode = MTD_OOB_AUTO;
- ops.ooblen = 8; /* temp hack */
- } else {
- ops.mode = MTD_OOB_RAW;
- ops.ooblen = YAFFS_BYTES_PER_SPARE;
- }
- ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
- ops.datbuf = (u8 *)data;
- ops.ooboffs = 0;
- ops.oobbuf = spareAsBytes;
- retval = mtd->write_oob(mtd, addr, &ops);
- }
-#else
- __u8 *spareAsBytes = (__u8 *) spare;
-
- if (data && spare) {
- if (dev->useNANDECC)
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_oobinfo);
- else
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_noeccinfo);
- } else {
- if (data)
- retval =
- mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (spare)
- retval =
- mtd->write_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
- &dummy, spareAsBytes);
- }
-#endif
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
-
-int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
- yaffs_Spare * spare)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- struct mtd_oob_ops ops;
-#endif
- size_t dummy;
- int retval = 0;
-
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- __u8 spareAsBytes[8]; /* OOB */
-
- if (data && !spare)
- retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data);
- else if (spare) {
- if (dev->useNANDECC) {
- ops.mode = MTD_OOB_AUTO;
- ops.ooblen = 8; /* temp hack */
- } else {
- ops.mode = MTD_OOB_RAW;
- ops.ooblen = YAFFS_BYTES_PER_SPARE;
- }
- ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
- ops.datbuf = data;
- ops.ooboffs = 0;
- ops.oobbuf = spareAsBytes;
- retval = mtd->read_oob(mtd, addr, &ops);
- if (dev->useNANDECC)
- translate_oob2spare(spare, spareAsBytes);
- }
-#else
- __u8 *spareAsBytes = (__u8 *) spare;
-
- if (data && spare) {
- if (dev->useNANDECC) {
- /* Careful, this call adds 2 ints */
- /* to the end of the spare data. Calling function */
- /* should allocate enough memory for spare, */
- /* i.e. [YAFFS_BYTES_PER_SPARE+2*sizeof(int)]. */
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_oobinfo);
- } else {
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_noeccinfo);
- }
- } else {
- if (data)
- retval =
- mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (spare)
- retval =
- mtd->read_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
- &dummy, spareAsBytes);
- }
-#endif
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
-
-int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
- __u32 addr =
- ((loff_t) blockNumber) * dev->nDataBytesPerChunk
- * dev->nChunksPerBlock;
- struct erase_info ei;
- int retval = 0;
-
- ei.mtd = mtd;
- ei.addr = addr;
- ei.len = dev->nDataBytesPerChunk * dev->nChunksPerBlock;
- ei.time = 1000;
- ei.retries = 2;
- ei.callback = NULL;
- ei.priv = (u_long) dev;
-
- /* Todo finish off the ei if required */
-
-/* XXX U-BOOT XXX */
-#if 0
- sema_init(&dev->sem, 0);
-#endif
-
- retval = mtd->erase(mtd, &ei);
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
-
-int nandmtd_InitialiseNAND(yaffs_Device * dev)
-{
- return YAFFS_OK;
-}
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/* XXX U-BOOT XXX */
+#include <common.h>
+
+const char *yaffs_mtdif_c_version =
+ "$Id: yaffs_mtdif.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $";
+
+#include "yportenv.h"
+
+
+#include "yaffs_mtdif.h"
+
+#include "linux/mtd/mtd.h"
+#include "linux/types.h"
+#include "linux/time.h"
+#include "linux/mtd/nand.h"
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
+static struct nand_oobinfo yaffs_oobinfo = {
+ .useecc = 1,
+ .eccbytes = 6,
+ .eccpos = {8, 9, 10, 13, 14, 15}
+};
+
+static struct nand_oobinfo yaffs_noeccinfo = {
+ .useecc = 0,
+};
+#endif
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
+{
+ oob[0] = spare->tagByte0;
+ oob[1] = spare->tagByte1;
+ oob[2] = spare->tagByte2;
+ oob[3] = spare->tagByte3;
+ oob[4] = spare->tagByte4;
+ oob[5] = spare->tagByte5 & 0x3f;
+ oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
+ oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
+ oob[6] = spare->tagByte6;
+ oob[7] = spare->tagByte7;
+}
+
+static inline void translate_oob2spare(yaffs_Spare *spare, __u8 *oob)
+{
+ struct yaffs_NANDSpare *nspare = (struct yaffs_NANDSpare *)spare;
+ spare->tagByte0 = oob[0];
+ spare->tagByte1 = oob[1];
+ spare->tagByte2 = oob[2];
+ spare->tagByte3 = oob[3];
+ spare->tagByte4 = oob[4];
+ spare->tagByte5 = oob[5] == 0xff ? 0xff : oob[5] & 0x3f;
+ spare->blockStatus = oob[5] & 0x80 ? 0xff : 'Y';
+ spare->pageStatus = oob[5] & 0x40 ? 0xff : 0;
+ spare->ecc1[0] = spare->ecc1[1] = spare->ecc1[2] = 0xff;
+ spare->tagByte6 = oob[6];
+ spare->tagByte7 = oob[7];
+ spare->ecc2[0] = spare->ecc2[1] = spare->ecc2[2] = 0xff;
+
+ nspare->eccres1 = nspare->eccres2 = 0; /* FIXME */
+}
+#endif
+
+int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
+ const __u8 * data, const yaffs_Spare * spare)
+{
+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ struct mtd_oob_ops ops;
+#endif
+ size_t dummy;
+ int retval = 0;
+
+ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ __u8 spareAsBytes[8]; /* OOB */
+
+ if (data && !spare)
+ retval = mtd->write(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data);
+ else if (spare) {
+ if (dev->useNANDECC) {
+ translate_spare2oob(spare, spareAsBytes);
+ ops.mode = MTD_OOB_AUTO;
+ ops.ooblen = 8; /* temp hack */
+ } else {
+ ops.mode = MTD_OOB_RAW;
+ ops.ooblen = YAFFS_BYTES_PER_SPARE;
+ }
+ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
+ ops.datbuf = (u8 *)data;
+ ops.ooboffs = 0;
+ ops.oobbuf = spareAsBytes;
+ retval = mtd->write_oob(mtd, addr, &ops);
+ }
+#else
+ __u8 *spareAsBytes = (__u8 *) spare;
+
+ if (data && spare) {
+ if (dev->useNANDECC)
+ retval =
+ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, spareAsBytes,
+ &yaffs_oobinfo);
+ else
+ retval =
+ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, spareAsBytes,
+ &yaffs_noeccinfo);
+ } else {
+ if (data)
+ retval =
+ mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
+ data);
+ if (spare)
+ retval =
+ mtd->write_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
+ &dummy, spareAsBytes);
+ }
+#endif
+
+ if (retval == 0)
+ return YAFFS_OK;
+ else
+ return YAFFS_FAIL;
+}
+
+int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
+ yaffs_Spare * spare)
+{
+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ struct mtd_oob_ops ops;
+#endif
+ size_t dummy;
+ int retval = 0;
+
+ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ __u8 spareAsBytes[8]; /* OOB */
+
+ if (data && !spare)
+ retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data);
+ else if (spare) {
+ if (dev->useNANDECC) {
+ ops.mode = MTD_OOB_AUTO;
+ ops.ooblen = 8; /* temp hack */
+ } else {
+ ops.mode = MTD_OOB_RAW;
+ ops.ooblen = YAFFS_BYTES_PER_SPARE;
+ }
+ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
+ ops.datbuf = data;
+ ops.ooboffs = 0;
+ ops.oobbuf = spareAsBytes;
+ retval = mtd->read_oob(mtd, addr, &ops);
+ if (dev->useNANDECC)
+ translate_oob2spare(spare, spareAsBytes);
+ }
+#else
+ __u8 *spareAsBytes = (__u8 *) spare;
+
+ if (data && spare) {
+ if (dev->useNANDECC) {
+ /* Careful, this call adds 2 ints */
+ /* to the end of the spare data. Calling function */
+ /* should allocate enough memory for spare, */
+ /* i.e. [YAFFS_BYTES_PER_SPARE+2*sizeof(int)]. */
+ retval =
+ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, spareAsBytes,
+ &yaffs_oobinfo);
+ } else {
+ retval =
+ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, spareAsBytes,
+ &yaffs_noeccinfo);
+ }
+ } else {
+ if (data)
+ retval =
+ mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
+ data);
+ if (spare)
+ retval =
+ mtd->read_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
+ &dummy, spareAsBytes);
+ }
+#endif
+
+ if (retval == 0)
+ return YAFFS_OK;
+ else
+ return YAFFS_FAIL;
+}
+
+int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
+{
+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+ __u32 addr =
+ ((loff_t) blockNumber) * dev->nDataBytesPerChunk
+ * dev->nChunksPerBlock;
+ struct erase_info ei;
+ int retval = 0;
+
+ ei.mtd = mtd;
+ ei.addr = addr;
+ ei.len = dev->nDataBytesPerChunk * dev->nChunksPerBlock;
+ ei.time = 1000;
+ ei.retries = 2;
+ ei.callback = NULL;
+ ei.priv = (u_long) dev;
+
+ /* Todo finish off the ei if required */
+
+/* XXX U-BOOT XXX */
+#if 0
+ sema_init(&dev->sem, 0);
+#endif
+
+ retval = mtd->erase(mtd, &ei);
+
+ if (retval == 0)
+ return YAFFS_OK;
+ else
+ return YAFFS_FAIL;
+}
+
+int nandmtd_InitialiseNAND(yaffs_Device * dev)
+{
+ return YAFFS_OK;
+}
diff -Naur u-boot-2009.03_orig/fs/yaffs2/yaffs_mtdif2.c u-boot-2009.03/fs/yaffs2/yaffs_mtdif2.c
--- u-boot-2009.03_orig/fs/yaffs2/yaffs_mtdif2.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/yaffs_mtdif2.c 2009-03-31 14:56:33.142172000 -0700
@@ -1,235 +1,235 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/* mtd interface for YAFFS2 */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-#include "asm/errno.h"
-
-const char *yaffs_mtdif2_c_version =
- "$Id: yaffs_mtdif2.c,v 1.17 2007/02/14 01:09:06 wookey Exp $";
-
-#include "yportenv.h"
-
-
-#include "yaffs_mtdif2.h"
-
-#include "linux/mtd/mtd.h"
-#include "linux/types.h"
-#include "linux/time.h"
-
-#include "yaffs_packedtags2.h"
-
-int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags * tags)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- struct mtd_oob_ops ops;
-#else
- size_t dummy;
-#endif
- int retval = 0;
-
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-
- yaffs_PackedTags2 pt;
-
- T(YAFFS_TRACE_MTD,
- (TSTR
- ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
- TENDSTR), chunkInNAND, data, tags));
-
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- if (tags)
- yaffs_PackTags2(&pt, tags);
- else
- BUG(); /* both tags and data should always be present */
-
- if (data) {
- ops.mode = MTD_OOB_AUTO;
- ops.ooblen = sizeof(pt);
- ops.len = dev->nDataBytesPerChunk;
- ops.ooboffs = 0;
- ops.datbuf = (__u8 *)data;
- ops.oobbuf = (void *)&pt;
- retval = mtd->write_oob(mtd, addr, &ops);
- } else
- BUG(); /* both tags and data should always be present */
-#else
- if (tags) {
- yaffs_PackTags2(&pt, tags);
- }
-
- if (data && tags) {
- if (dev->useNANDECC)
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, (__u8 *) & pt, NULL);
- else
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, (__u8 *) & pt, NULL);
- } else {
- if (data)
- retval =
- mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (tags)
- retval =
- mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
- (__u8 *) & pt);
-
- }
-#endif
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
-
-int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
- __u8 * data, yaffs_ExtendedTags * tags)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- struct mtd_oob_ops ops;
-#endif
- size_t dummy;
- int retval = 0;
-
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-
- yaffs_PackedTags2 pt;
-
- T(YAFFS_TRACE_MTD,
- (TSTR
- ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
- TENDSTR), chunkInNAND, data, tags));
-
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- if (data && !tags)
- retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data);
- else if (tags) {
- ops.mode = MTD_OOB_AUTO;
- ops.ooblen = sizeof(pt);
- ops.len = data ? dev->nDataBytesPerChunk : sizeof(pt);
- ops.ooboffs = 0;
- ops.datbuf = data;
- ops.oobbuf = dev->spareBuffer;
- retval = mtd->read_oob(mtd, addr, &ops);
- }
-#else
- if (data && tags) {
- if (dev->useNANDECC) {
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, dev->spareBuffer,
- NULL);
- } else {
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, dev->spareBuffer,
- NULL);
- }
- } else {
- if (data)
- retval =
- mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (tags)
- retval =
- mtd->read_oob(mtd, addr, mtd->oobsize, &dummy,
- dev->spareBuffer);
- }
-#endif
-
- memcpy(&pt, dev->spareBuffer, sizeof(pt));
-
- if (tags)
- yaffs_UnpackTags2(tags, &pt);
-
- if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
- tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
-
-int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
- int retval;
- T(YAFFS_TRACE_MTD,
- (TSTR("nandmtd2_MarkNANDBlockBad %d" TENDSTR), blockNo));
-
- retval =
- mtd->block_markbad(mtd,
- blockNo * dev->nChunksPerBlock *
- dev->nDataBytesPerChunk);
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-
-}
-
-int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
- yaffs_BlockState * state, int *sequenceNumber)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
- int retval;
-
- T(YAFFS_TRACE_MTD,
- (TSTR("nandmtd2_QueryNANDBlock %d" TENDSTR), blockNo));
- retval =
- mtd->block_isbad(mtd,
- blockNo * dev->nChunksPerBlock *
- dev->nDataBytesPerChunk);
-
- if (retval) {
- T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR)));
-
- *state = YAFFS_BLOCK_STATE_DEAD;
- *sequenceNumber = 0;
- } else {
- yaffs_ExtendedTags t;
- nandmtd2_ReadChunkWithTagsFromNAND(dev,
- blockNo *
- dev->nChunksPerBlock, NULL,
- &t);
-
- if (t.chunkUsed) {
- *sequenceNumber = t.sequenceNumber;
- *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
- } else {
- *sequenceNumber = 0;
- *state = YAFFS_BLOCK_STATE_EMPTY;
- }
- }
- T(YAFFS_TRACE_MTD,
- (TSTR("block is bad seq %d state %d" TENDSTR), *sequenceNumber,
- *state));
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/* mtd interface for YAFFS2 */
+
+/* XXX U-BOOT XXX */
+#include <common.h>
+#include "asm/errno.h"
+
+const char *yaffs_mtdif2_c_version =
+ "$Id: yaffs_mtdif2.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $";
+
+#include "yportenv.h"
+
+
+#include "yaffs_mtdif2.h"
+
+#include "linux/mtd/mtd.h"
+#include "linux/types.h"
+#include "linux/time.h"
+
+#include "yaffs_packedtags2.h"
+
+int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
+ const __u8 * data,
+ const yaffs_ExtendedTags * tags)
+{
+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ struct mtd_oob_ops ops;
+#else
+ size_t dummy;
+#endif
+ int retval = 0;
+
+ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
+
+ yaffs_PackedTags2 pt;
+
+ T(YAFFS_TRACE_MTD,
+ (TSTR
+ ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
+ TENDSTR), chunkInNAND, data, tags));
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ if (tags)
+ yaffs_PackTags2(&pt, tags);
+ else
+ BUG(); /* both tags and data should always be present */
+
+ if (data) {
+ ops.mode = MTD_OOB_AUTO;
+ ops.ooblen = sizeof(pt);
+ ops.len = dev->nDataBytesPerChunk;
+ ops.ooboffs = 0;
+ ops.datbuf = (__u8 *)data;
+ ops.oobbuf = (void *)&pt;
+ retval = mtd->write_oob(mtd, addr, &ops);
+ } else
+ BUG(); /* both tags and data should always be present */
+#else
+ if (tags) {
+ yaffs_PackTags2(&pt, tags);
+ }
+
+ if (data && tags) {
+ if (dev->useNANDECC)
+ retval =
+ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, (__u8 *) & pt, NULL);
+ else
+ retval =
+ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, (__u8 *) & pt, NULL);
+ } else {
+ if (data)
+ retval =
+ mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
+ data);
+ if (tags)
+ retval =
+ mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
+ (__u8 *) & pt);
+
+ }
+#endif
+
+ if (retval == 0)
+ return YAFFS_OK;
+ else
+ return YAFFS_FAIL;
+}
+
+int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
+ __u8 * data, yaffs_ExtendedTags * tags)
+{
+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ struct mtd_oob_ops ops;
+#endif
+ size_t dummy;
+ int retval = 0;
+
+ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
+
+ yaffs_PackedTags2 pt;
+
+ T(YAFFS_TRACE_MTD,
+ (TSTR
+ ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
+ TENDSTR), chunkInNAND, data, tags));
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ if (data && !tags)
+ retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data);
+ else if (tags) {
+ ops.mode = MTD_OOB_AUTO;
+ ops.ooblen = sizeof(pt);
+ ops.len = data ? dev->nDataBytesPerChunk : sizeof(pt);
+ ops.ooboffs = 0;
+ ops.datbuf = data;
+ ops.oobbuf = dev->spareBuffer;
+ retval = mtd->read_oob(mtd, addr, &ops);
+ }
+#else
+ if (data && tags) {
+ if (dev->useNANDECC) {
+ retval =
+ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, dev->spareBuffer,
+ NULL);
+ } else {
+ retval =
+ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
+ &dummy, data, dev->spareBuffer,
+ NULL);
+ }
+ } else {
+ if (data)
+ retval =
+ mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
+ data);
+ if (tags)
+ retval =
+ mtd->read_oob(mtd, addr, mtd->oobsize, &dummy,
+ dev->spareBuffer);
+ }
+#endif
+
+ memcpy(&pt, dev->spareBuffer, sizeof(pt));
+
+ if (tags)
+ yaffs_UnpackTags2(tags, &pt);
+
+ if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
+ tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
+
+ if (retval == 0)
+ return YAFFS_OK;
+ else
+ return YAFFS_FAIL;
+}
+
+int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
+{
+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+ int retval;
+ T(YAFFS_TRACE_MTD,
+ (TSTR("nandmtd2_MarkNANDBlockBad %d" TENDSTR), blockNo));
+
+ retval =
+ mtd->block_markbad(mtd,
+ blockNo * dev->nChunksPerBlock *
+ dev->nDataBytesPerChunk);
+
+ if (retval == 0)
+ return YAFFS_OK;
+ else
+ return YAFFS_FAIL;
+
+}
+
+int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
+ yaffs_BlockState * state, int *sequenceNumber)
+{
+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+ int retval;
+
+ T(YAFFS_TRACE_MTD,
+ (TSTR("nandmtd2_QueryNANDBlock %d" TENDSTR), blockNo));
+ retval =
+ mtd->block_isbad(mtd,
+ blockNo * dev->nChunksPerBlock *
+ dev->nDataBytesPerChunk);
+
+ if (retval) {
+ T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR)));
+
+ *state = YAFFS_BLOCK_STATE_DEAD;
+ *sequenceNumber = 0;
+ } else {
+ yaffs_ExtendedTags t;
+ nandmtd2_ReadChunkWithTagsFromNAND(dev,
+ blockNo *
+ dev->nChunksPerBlock, NULL,
+ &t);
+
+ if (t.chunkUsed) {
+ *sequenceNumber = t.sequenceNumber;
+ *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
+ } else {
+ *sequenceNumber = 0;
+ *state = YAFFS_BLOCK_STATE_EMPTY;
+ }
+ }
+ T(YAFFS_TRACE_MTD,
+ (TSTR("block is bad seq %d state %d" TENDSTR), *sequenceNumber,
+ *state));
+
+ if (retval == 0)
+ return YAFFS_OK;
+ else
+ return YAFFS_FAIL;
+}
diff -Naur u-boot-2009.03_orig/fs/yaffs2/yaffs_nand.c u-boot-2009.03/fs/yaffs2/yaffs_nand.c
--- u-boot-2009.03_orig/fs/yaffs2/yaffs_nand.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/yaffs_nand.c 2009-03-31 14:56:33.157796800 -0700
@@ -1,134 +1,134 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-const char *yaffs_nand_c_version =
- "$Id: yaffs_nand.c,v 1.7 2007/02/14 01:09:06 wookey Exp $";
-
-#include "yaffs_nand.h"
-#include "yaffs_tagscompat.h"
-#include "yaffs_tagsvalidity.h"
-
-
-int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
- __u8 * buffer,
- yaffs_ExtendedTags * tags)
-{
- int result;
- yaffs_ExtendedTags localTags;
-
- int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
-
- /* If there are no tags provided, use local tags to get prioritised gc working */
- if(!tags)
- tags = &localTags;
-
- if (dev->readChunkWithTagsFromNAND)
- result = dev->readChunkWithTagsFromNAND(dev, realignedChunkInNAND, buffer,
- tags);
- else
- result = yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(dev,
- realignedChunkInNAND,
- buffer,
- tags);
- if(tags &&
- tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
-
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
- yaffs_HandleChunkError(dev,bi);
- }
-
- return result;
-}
-
-int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
- int chunkInNAND,
- const __u8 * buffer,
- yaffs_ExtendedTags * tags)
-{
- chunkInNAND -= dev->chunkOffset;
-
-
- if (tags) {
- tags->sequenceNumber = dev->sequenceNumber;
- tags->chunkUsed = 1;
- if (!yaffs_ValidateTags(tags)) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("Writing uninitialised tags" TENDSTR)));
- YBUG();
- }
- T(YAFFS_TRACE_WRITE,
- (TSTR("Writing chunk %d tags %d %d" TENDSTR), chunkInNAND,
- tags->objectId, tags->chunkId));
- } else {
- T(YAFFS_TRACE_ERROR, (TSTR("Writing with no tags" TENDSTR)));
- YBUG();
- }
-
- if (dev->writeChunkWithTagsToNAND)
- return dev->writeChunkWithTagsToNAND(dev, chunkInNAND, buffer,
- tags);
- else
- return yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(dev,
- chunkInNAND,
- buffer,
- tags);
-}
-
-int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo)
-{
- blockNo -= dev->blockOffset;
-
-;
- if (dev->markNANDBlockBad)
- return dev->markNANDBlockBad(dev, blockNo);
- else
- return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo);
-}
-
-int yaffs_QueryInitialBlockState(yaffs_Device * dev,
- int blockNo,
- yaffs_BlockState * state,
- unsigned *sequenceNumber)
-{
- blockNo -= dev->blockOffset;
-
- if (dev->queryNANDBlock)
- return dev->queryNANDBlock(dev, blockNo, state, sequenceNumber);
- else
- return yaffs_TagsCompatabilityQueryNANDBlock(dev, blockNo,
- state,
- sequenceNumber);
-}
-
-
-int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
- int blockInNAND)
-{
- int result;
-
- blockInNAND -= dev->blockOffset;
-
-
- dev->nBlockErasures++;
- result = dev->eraseBlockInNAND(dev, blockInNAND);
-
- return result;
-}
-
-int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev)
-{
- return dev->initialiseNAND(dev);
-}
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/* XXX U-BOOT XXX */
+#include <common.h>
+
+const char *yaffs_nand_c_version =
+ "$Id: yaffs_nand.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $";
+
+#include "yaffs_nand.h"
+#include "yaffs_tagscompat.h"
+#include "yaffs_tagsvalidity.h"
+
+
+int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
+ __u8 * buffer,
+ yaffs_ExtendedTags * tags)
+{
+ int result;
+ yaffs_ExtendedTags localTags;
+
+ int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
+
+ /* If there are no tags provided, use local tags to get prioritised gc working */
+ if(!tags)
+ tags = &localTags;
+
+ if (dev->readChunkWithTagsFromNAND)
+ result = dev->readChunkWithTagsFromNAND(dev, realignedChunkInNAND, buffer,
+ tags);
+ else
+ result = yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(dev,
+ realignedChunkInNAND,
+ buffer,
+ tags);
+ if(tags &&
+ tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
+
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
+ yaffs_HandleChunkError(dev,bi);
+ }
+
+ return result;
+}
+
+int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
+ int chunkInNAND,
+ const __u8 * buffer,
+ yaffs_ExtendedTags * tags)
+{
+ chunkInNAND -= dev->chunkOffset;
+
+
+ if (tags) {
+ tags->sequenceNumber = dev->sequenceNumber;
+ tags->chunkUsed = 1;
+ if (!yaffs_ValidateTags(tags)) {
+ T(YAFFS_TRACE_ERROR,
+ (TSTR("Writing uninitialised tags" TENDSTR)));
+ YBUG();
+ }
+ T(YAFFS_TRACE_WRITE,
+ (TSTR("Writing chunk %d tags %d %d" TENDSTR), chunkInNAND,
+ tags->objectId, tags->chunkId));
+ } else {
+ T(YAFFS_TRACE_ERROR, (TSTR("Writing with no tags" TENDSTR)));
+ YBUG();
+ }
+
+ if (dev->writeChunkWithTagsToNAND)
+ return dev->writeChunkWithTagsToNAND(dev, chunkInNAND, buffer,
+ tags);
+ else
+ return yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(dev,
+ chunkInNAND,
+ buffer,
+ tags);
+}
+
+int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo)
+{
+ blockNo -= dev->blockOffset;
+
+;
+ if (dev->markNANDBlockBad)
+ return dev->markNANDBlockBad(dev, blockNo);
+ else
+ return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo);
+}
+
+int yaffs_QueryInitialBlockState(yaffs_Device * dev,
+ int blockNo,
+ yaffs_BlockState * state,
+ unsigned *sequenceNumber)
+{
+ blockNo -= dev->blockOffset;
+
+ if (dev->queryNANDBlock)
+ return dev->queryNANDBlock(dev, blockNo, state, sequenceNumber);
+ else
+ return yaffs_TagsCompatabilityQueryNANDBlock(dev, blockNo,
+ state,
+ sequenceNumber);
+}
+
+
+int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
+ int blockInNAND)
+{
+ int result;
+
+ blockInNAND -= dev->blockOffset;
+
+
+ dev->nBlockErasures++;
+ result = dev->eraseBlockInNAND(dev, blockInNAND);
+
+ return result;
+}
+
+int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev)
+{
+ return dev->initialiseNAND(dev);
+}
diff -Naur u-boot-2009.03_orig/fs/yaffs2/yaffsfs.c u-boot-2009.03/fs/yaffs2/yaffsfs.c
--- u-boot-2009.03_orig/fs/yaffs2/yaffsfs.c 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/fs/yaffs2/yaffsfs.c 2009-03-31 14:56:33.204671200 -0700
@@ -1,1510 +1,1510 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-#include <malloc.h>
-
-#include "yaffsfs.h"
-#include "yaffs_guts.h"
-#include "yaffscfg.h"
-#include "yportenv.h"
-
-/* XXX U-BOOT XXX */
-#if 0
-#include <string.h> // for memset
-#endif
-
-#define YAFFSFS_MAX_SYMLINK_DEREFERENCES 5
-
-#ifndef NULL
-#define NULL ((void *)0)
-#endif
-
-
-const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.18 2007/07/18 19:40:38 charles Exp $";
-
-// configurationList is the list of devices that are supported
-static yaffsfs_DeviceConfiguration *yaffsfs_configurationList;
-
-
-/* Some forward references */
-static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const char *path, int symDepth);
-static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj);
-
-
-// Handle management.
-//
-
-
-unsigned int yaffs_wr_attempts;
-
-typedef struct
-{
- __u8 inUse:1; // this handle is in use
- __u8 readOnly:1; // this handle is read only
- __u8 append:1; // append only
- __u8 exclusive:1; // exclusive
- __u32 position; // current position in file
- yaffs_Object *obj; // the object
-}yaffsfs_Handle;
-
-
-static yaffsfs_Handle yaffsfs_handle[YAFFSFS_N_HANDLES];
-
-// yaffsfs_InitHandle
-/// Inilitalise handles on start-up.
-//
-static int yaffsfs_InitHandles(void)
-{
- int i;
- for(i = 0; i < YAFFSFS_N_HANDLES; i++)
- {
- yaffsfs_handle[i].inUse = 0;
- yaffsfs_handle[i].obj = NULL;
- }
- return 0;
-}
-
-yaffsfs_Handle *yaffsfs_GetHandlePointer(int h)
-{
- if(h < 0 || h >= YAFFSFS_N_HANDLES)
- {
- return NULL;
- }
-
- return &yaffsfs_handle[h];
-}
-
-yaffs_Object *yaffsfs_GetHandleObject(int handle)
-{
- yaffsfs_Handle *h = yaffsfs_GetHandlePointer(handle);
-
- if(h && h->inUse)
- {
- return h->obj;
- }
-
- return NULL;
-}
-
-
-//yaffsfs_GetHandle
-// Grab a handle (when opening a file)
-//
-
-static int yaffsfs_GetHandle(void)
-{
- int i;
- yaffsfs_Handle *h;
-
- for(i = 0; i < YAFFSFS_N_HANDLES; i++)
- {
- h = yaffsfs_GetHandlePointer(i);
- if(!h)
- {
- // todo bug: should never happen
- }
- if(!h->inUse)
- {
- memset(h,0,sizeof(yaffsfs_Handle));
- h->inUse=1;
- return i;
- }
- }
- return -1;
-}
-
-// yaffs_PutHandle
-// Let go of a handle (when closing a file)
-//
-static int yaffsfs_PutHandle(int handle)
-{
- yaffsfs_Handle *h = yaffsfs_GetHandlePointer(handle);
-
- if(h)
- {
- h->inUse = 0;
- h->obj = NULL;
- }
- return 0;
-}
-
-
-
-// Stuff to search for a directory from a path
-
-
-int yaffsfs_Match(char a, char b)
-{
- // case sensitive
- return (a == b);
-}
-
-// yaffsfs_FindDevice
-// yaffsfs_FindRoot
-// Scan the configuration list to find the root.
-// Curveballs: Should match paths that end in '/' too
-// Curveball2 Might have "/x/ and "/x/y". Need to return the longest match
-static yaffs_Device *yaffsfs_FindDevice(const char *path, char **restOfPath)
-{
- yaffsfs_DeviceConfiguration *cfg = yaffsfs_configurationList;
- const char *leftOver;
- const char *p;
- yaffs_Device *retval = NULL;
- int thisMatchLength;
- int longestMatch = -1;
-
- // Check all configs, choose the one that:
- // 1) Actually matches a prefix (ie /a amd /abc will not match
- // 2) Matches the longest.
- while(cfg && cfg->prefix && cfg->dev)
- {
- leftOver = path;
- p = cfg->prefix;
- thisMatchLength = 0;
-
- while(*p && //unmatched part of prefix
- strcmp(p,"/") && // the rest of the prefix is not / (to catch / at end)
- *leftOver &&
- yaffsfs_Match(*p,*leftOver))
- {
- p++;
- leftOver++;
- thisMatchLength++;
- }
- if((!*p || strcmp(p,"/") == 0) && // end of prefix
- (!*leftOver || *leftOver == '/') && // no more in this path name part
- (thisMatchLength > longestMatch))
- {
- // Matched prefix
- *restOfPath = (char *)leftOver;
- retval = cfg->dev;
- longestMatch = thisMatchLength;
- }
- cfg++;
- }
- return retval;
-}
-
-static yaffs_Object *yaffsfs_FindRoot(const char *path, char **restOfPath)
-{
-
- yaffs_Device *dev;
-
- dev= yaffsfs_FindDevice(path,restOfPath);
- if(dev && dev->isMounted)
- {
- return dev->rootDir;
- }
- return NULL;
-}
-
-static yaffs_Object *yaffsfs_FollowLink(yaffs_Object *obj,int symDepth)
-{
-
- while(obj && obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
- char *alias = obj->variant.symLinkVariant.alias;
-
- if(*alias == '/')
- {
- // Starts with a /, need to scan from root up
- obj = yaffsfs_FindObject(NULL,alias,symDepth++);
- }
- else
- {
- // Relative to here, so use the parent of the symlink as a start
- obj = yaffsfs_FindObject(obj->parent,alias,symDepth++);
- }
- }
- return obj;
-}
-
-
-// yaffsfs_FindDirectory
-// Parse a path to determine the directory and the name within the directory.
-//
-// eg. "/data/xx/ff" --> puts name="ff" and returns the directory "/data/xx"
-static yaffs_Object *yaffsfs_DoFindDirectory(yaffs_Object *startDir,const char *path,char **name,int symDepth)
-{
- yaffs_Object *dir;
- char *restOfPath;
- char str[YAFFS_MAX_NAME_LENGTH+1];
- int i;
-
- if(symDepth > YAFFSFS_MAX_SYMLINK_DEREFERENCES)
- {
- return NULL;
- }
-
- if(startDir)
- {
- dir = startDir;
- restOfPath = (char *)path;
- }
- else
- {
- dir = yaffsfs_FindRoot(path,&restOfPath);
- }
-
- while(dir)
- {
- // parse off /.
- // curve ball: also throw away surplus '/'
- // eg. "/ram/x////ff" gets treated the same as "/ram/x/ff"
- while(*restOfPath == '/')
- {
- restOfPath++; // get rid of '/'
- }
-
- *name = restOfPath;
- i = 0;
-
- while(*restOfPath && *restOfPath != '/')
- {
- if (i < YAFFS_MAX_NAME_LENGTH)
- {
- str[i] = *restOfPath;
- str[i+1] = '\0';
- i++;
- }
- restOfPath++;
- }
-
- if(!*restOfPath)
- {
- // got to the end of the string
- return dir;
- }
- else
- {
- if(strcmp(str,".") == 0)
- {
- // Do nothing
- }
- else if(strcmp(str,"..") == 0)
- {
- dir = dir->parent;
- }
- else
- {
- dir = yaffs_FindObjectByName(dir,str);
-
- while(dir && dir->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
-
- dir = yaffsfs_FollowLink(dir,symDepth);
-
- }
-
- if(dir && dir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- dir = NULL;
- }
- }
- }
- }
- // directory did not exist.
- return NULL;
-}
-
-static yaffs_Object *yaffsfs_FindDirectory(yaffs_Object *relativeDirectory,const char *path,char **name,int symDepth)
-{
- return yaffsfs_DoFindDirectory(relativeDirectory,path,name,symDepth);
-}
-
-// yaffsfs_FindObject turns a path for an existing object into the object
-//
-static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const char *path,int symDepth)
-{
- yaffs_Object *dir;
- char *name;
-
- dir = yaffsfs_FindDirectory(relativeDirectory,path,&name,symDepth);
-
- if(dir && *name)
- {
- return yaffs_FindObjectByName(dir,name);
- }
-
- return dir;
-}
-
-
-
-int yaffs_open(const char *path, int oflag, int mode)
-{
- yaffs_Object *obj = NULL;
- yaffs_Object *dir = NULL;
- char *name;
- int handle = -1;
- yaffsfs_Handle *h = NULL;
- int alreadyOpen = 0;
- int alreadyExclusive = 0;
- int openDenied = 0;
- int symDepth = 0;
- int errorReported = 0;
-
- int i;
-
-
- // todo sanity check oflag (eg. can't have O_TRUNC without WRONLY or RDWR
-
-
- yaffsfs_Lock();
-
- handle = yaffsfs_GetHandle();
-
- if(handle >= 0)
- {
-
- h = yaffsfs_GetHandlePointer(handle);
-
-
- // try to find the exisiting object
- obj = yaffsfs_FindObject(NULL,path,0);
-
- if(obj && obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
-
- obj = yaffsfs_FollowLink(obj,symDepth++);
- }
-
- if(obj)
- {
- // Check if the object is already in use
- alreadyOpen = alreadyExclusive = 0;
-
- for(i = 0; i <= YAFFSFS_N_HANDLES; i++)
- {
-
- if(i != handle &&
- yaffsfs_handle[i].inUse &&
- obj == yaffsfs_handle[i].obj)
- {
- alreadyOpen = 1;
- if(yaffsfs_handle[i].exclusive)
- {
- alreadyExclusive = 1;
- }
- }
- }
-
- if(((oflag & O_EXCL) && alreadyOpen) || alreadyExclusive)
- {
- openDenied = 1;
- }
-
- // Open should fail if O_CREAT and O_EXCL are specified
- if((oflag & O_EXCL) && (oflag & O_CREAT))
- {
- openDenied = 1;
- yaffsfs_SetError(-EEXIST);
- errorReported = 1;
- }
-
- // Check file permissions
- if( (oflag & (O_RDWR | O_WRONLY)) == 0 && // ie O_RDONLY
- !(obj->yst_mode & S_IREAD))
- {
- openDenied = 1;
- }
-
- if( (oflag & O_RDWR) &&
- !(obj->yst_mode & S_IREAD))
- {
- openDenied = 1;
- }
-
- if( (oflag & (O_RDWR | O_WRONLY)) &&
- !(obj->yst_mode & S_IWRITE))
- {
- openDenied = 1;
- }
-
- }
-
- else if((oflag & O_CREAT))
- {
- // Let's see if we can create this file
- dir = yaffsfs_FindDirectory(NULL,path,&name,0);
- if(dir)
- {
- obj = yaffs_MknodFile(dir,name,mode,0,0);
- }
- else
- {
- yaffsfs_SetError(-ENOTDIR);
- }
- }
-
- if(obj && !openDenied)
- {
- h->obj = obj;
- h->inUse = 1;
- h->readOnly = (oflag & (O_WRONLY | O_RDWR)) ? 0 : 1;
- h->append = (oflag & O_APPEND) ? 1 : 0;
- h->exclusive = (oflag & O_EXCL) ? 1 : 0;
- h->position = 0;
-
- obj->inUse++;
- if((oflag & O_TRUNC) && !h->readOnly)
- {
- //todo truncate
- yaffs_ResizeFile(obj,0);
- }
-
- }
- else
- {
- yaffsfs_PutHandle(handle);
- if(!errorReported)
- {
- yaffsfs_SetError(-EACCESS);
- errorReported = 1;
- }
- handle = -1;
- }
-
- }
-
- yaffsfs_Unlock();
-
- return handle;
-}
-
-int yaffs_close(int fd)
-{
- yaffsfs_Handle *h = NULL;
- int retVal = 0;
-
- yaffsfs_Lock();
-
- h = yaffsfs_GetHandlePointer(fd);
-
- if(h && h->inUse)
- {
- // clean up
- yaffs_FlushFile(h->obj,1);
- h->obj->inUse--;
- if(h->obj->inUse <= 0 && h->obj->unlinked)
- {
- yaffs_DeleteFile(h->obj);
- }
- yaffsfs_PutHandle(fd);
- retVal = 0;
- }
- else
- {
- // bad handle
- yaffsfs_SetError(-EBADF);
- retVal = -1;
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-}
-
-int yaffs_read(int fd, void *buf, unsigned int nbyte)
-{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
- int pos = 0;
- int nRead = -1;
- int maxRead;
-
- yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
-
- if(!h || !obj)
- {
- // bad handle
- yaffsfs_SetError(-EBADF);
- }
- else if( h && obj)
- {
- pos= h->position;
- if(yaffs_GetObjectFileLength(obj) > pos)
- {
- maxRead = yaffs_GetObjectFileLength(obj) - pos;
- }
- else
- {
- maxRead = 0;
- }
-
- if(nbyte > maxRead)
- {
- nbyte = maxRead;
- }
-
-
- if(nbyte > 0)
- {
- nRead = yaffs_ReadDataFromFile(obj,buf,pos,nbyte);
- if(nRead >= 0)
- {
- h->position = pos + nRead;
- }
- else
- {
- //todo error
- }
- }
- else
- {
- nRead = 0;
- }
-
- }
-
- yaffsfs_Unlock();
-
-
- return (nRead >= 0) ? nRead : -1;
-
-}
-
-int yaffs_write(int fd, const void *buf, unsigned int nbyte)
-{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
- int pos = 0;
- int nWritten = -1;
- int writeThrough = 0;
-
- yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
-
- if(!h || !obj)
- {
- // bad handle
- yaffsfs_SetError(-EBADF);
- }
- else if( h && obj && h->readOnly)
- {
- // todo error
- }
- else if( h && obj)
- {
- if(h->append)
- {
- pos = yaffs_GetObjectFileLength(obj);
- }
- else
- {
- pos = h->position;
- }
-
- nWritten = yaffs_WriteDataToFile(obj,buf,pos,nbyte,writeThrough);
-
- if(nWritten >= 0)
- {
- h->position = pos + nWritten;
- }
- else
- {
- //todo error
- }
-
- }
-
- yaffsfs_Unlock();
-
-
- return (nWritten >= 0) ? nWritten : -1;
-
-}
-
-int yaffs_truncate(int fd, off_t newSize)
-{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
- int result = 0;
-
- yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
-
- if(!h || !obj)
- {
- // bad handle
- yaffsfs_SetError(-EBADF);
- }
- else
- {
- // resize the file
- result = yaffs_ResizeFile(obj,newSize);
- }
- yaffsfs_Unlock();
-
-
- return (result) ? 0 : -1;
-
-}
-
-off_t yaffs_lseek(int fd, off_t offset, int whence)
-{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
- int pos = -1;
- int fSize = -1;
-
- yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
-
- if(!h || !obj)
- {
- // bad handle
- yaffsfs_SetError(-EBADF);
- }
- else if(whence == SEEK_SET)
- {
- if(offset >= 0)
- {
- pos = offset;
- }
- }
- else if(whence == SEEK_CUR)
- {
- if( (h->position + offset) >= 0)
- {
- pos = (h->position + offset);
- }
- }
- else if(whence == SEEK_END)
- {
- fSize = yaffs_GetObjectFileLength(obj);
- if(fSize >= 0 && (fSize + offset) >= 0)
- {
- pos = fSize + offset;
- }
- }
-
- if(pos >= 0)
- {
- h->position = pos;
- }
- else
- {
- // todo error
- }
-
-
- yaffsfs_Unlock();
-
- return pos;
-}
-
-
-int yaffsfs_DoUnlink(const char *path,int isDirectory)
-{
- yaffs_Object *dir = NULL;
- yaffs_Object *obj = NULL;
- char *name;
- int result = YAFFS_FAIL;
-
- yaffsfs_Lock();
-
- obj = yaffsfs_FindObject(NULL,path,0);
- dir = yaffsfs_FindDirectory(NULL,path,&name,0);
- if(!dir)
- {
- yaffsfs_SetError(-ENOTDIR);
- }
- else if(!obj)
- {
- yaffsfs_SetError(-ENOENT);
- }
- else if(!isDirectory && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- yaffsfs_SetError(-EISDIR);
- }
- else if(isDirectory && obj->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- yaffsfs_SetError(-ENOTDIR);
- }
- else
- {
- result = yaffs_Unlink(dir,name);
-
- if(result == YAFFS_FAIL && isDirectory)
- {
- yaffsfs_SetError(-ENOTEMPTY);
- }
- }
-
- yaffsfs_Unlock();
-
- // todo error
-
- return (result == YAFFS_FAIL) ? -1 : 0;
-}
-int yaffs_rmdir(const char *path)
-{
- return yaffsfs_DoUnlink(path,1);
-}
-
-int yaffs_unlink(const char *path)
-{
- return yaffsfs_DoUnlink(path,0);
-}
-
-int yaffs_rename(const char *oldPath, const char *newPath)
-{
- yaffs_Object *olddir = NULL;
- yaffs_Object *newdir = NULL;
- yaffs_Object *obj = NULL;
- char *oldname;
- char *newname;
- int result= YAFFS_FAIL;
- int renameAllowed = 1;
-
- yaffsfs_Lock();
-
- olddir = yaffsfs_FindDirectory(NULL,oldPath,&oldname,0);
- newdir = yaffsfs_FindDirectory(NULL,newPath,&newname,0);
- obj = yaffsfs_FindObject(NULL,oldPath,0);
-
- if(!olddir || !newdir || !obj)
- {
- // bad file
- yaffsfs_SetError(-EBADF);
- renameAllowed = 0;
- }
- else if(olddir->myDev != newdir->myDev)
- {
- // oops must be on same device
- // todo error
- yaffsfs_SetError(-EXDEV);
- renameAllowed = 0;
- }
- else if(obj && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- // It is a directory, check that it is not being renamed to
- // being its own decendent.
- // Do this by tracing from the new directory back to the root, checking for obj
-
- yaffs_Object *xx = newdir;
-
- while( renameAllowed && xx)
- {
- if(xx == obj)
- {
- renameAllowed = 0;
- }
- xx = xx->parent;
- }
- if(!renameAllowed) yaffsfs_SetError(-EACCESS);
- }
-
- if(renameAllowed)
- {
- result = yaffs_RenameObject(olddir,oldname,newdir,newname);
- }
-
- yaffsfs_Unlock();
-
- return (result == YAFFS_FAIL) ? -1 : 0;
-}
-
-
-static int yaffsfs_DoStat(yaffs_Object *obj,struct yaffs_stat *buf)
-{
- int retVal = -1;
-
- if(obj)
- {
- obj = yaffs_GetEquivalentObject(obj);
- }
-
- if(obj && buf)
- {
- buf->st_dev = (int)obj->myDev->genericDevice;
- buf->st_ino = obj->objectId;
- buf->st_mode = obj->yst_mode & ~S_IFMT; // clear out file type bits
-
- if(obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- buf->st_mode |= S_IFDIR;
- }
- else if(obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
- buf->st_mode |= S_IFLNK;
- }
- else if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
- {
- buf->st_mode |= S_IFREG;
- }
-
- buf->st_nlink = yaffs_GetObjectLinkCount(obj);
- buf->st_uid = 0;
- buf->st_gid = 0;;
- buf->st_rdev = obj->yst_rdev;
- buf->st_size = yaffs_GetObjectFileLength(obj);
- buf->st_blksize = obj->myDev->nDataBytesPerChunk;
- buf->st_blocks = (buf->st_size + buf->st_blksize -1)/buf->st_blksize;
- buf->yst_atime = obj->yst_atime;
- buf->yst_ctime = obj->yst_ctime;
- buf->yst_mtime = obj->yst_mtime;
- retVal = 0;
- }
- return retVal;
-}
-
-static int yaffsfs_DoStatOrLStat(const char *path, struct yaffs_stat *buf,int doLStat)
-{
- yaffs_Object *obj;
-
- int retVal = -1;
-
- yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,path,0);
-
- if(!doLStat && obj)
- {
- obj = yaffsfs_FollowLink(obj,0);
- }
-
- if(obj)
- {
- retVal = yaffsfs_DoStat(obj,buf);
- }
- else
- {
- // todo error not found
- yaffsfs_SetError(-ENOENT);
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-
-}
-
-int yaffs_stat(const char *path, struct yaffs_stat *buf)
-{
- return yaffsfs_DoStatOrLStat(path,buf,0);
-}
-
-int yaffs_lstat(const char *path, struct yaffs_stat *buf)
-{
- return yaffsfs_DoStatOrLStat(path,buf,1);
-}
-
-int yaffs_fstat(int fd, struct yaffs_stat *buf)
-{
- yaffs_Object *obj;
-
- int retVal = -1;
-
- yaffsfs_Lock();
- obj = yaffsfs_GetHandleObject(fd);
-
- if(obj)
- {
- retVal = yaffsfs_DoStat(obj,buf);
- }
- else
- {
- // bad handle
- yaffsfs_SetError(-EBADF);
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-}
-
-static int yaffsfs_DoChMod(yaffs_Object *obj,mode_t mode)
-{
- int result = YAFFS_FAIL;
-
- if(obj)
- {
- obj = yaffs_GetEquivalentObject(obj);
- }
-
- if(obj)
- {
- obj->yst_mode = mode;
- obj->dirty = 1;
- result = yaffs_FlushFile(obj,0);
- }
-
- return result == YAFFS_OK ? 0 : -1;
-}
-
-
-int yaffs_chmod(const char *path, mode_t mode)
-{
- yaffs_Object *obj;
-
- int retVal = -1;
-
- yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,path,0);
-
- if(obj)
- {
- retVal = yaffsfs_DoChMod(obj,mode);
- }
- else
- {
- // todo error not found
- yaffsfs_SetError(-ENOENT);
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-
-}
-
-
-int yaffs_fchmod(int fd, mode_t mode)
-{
- yaffs_Object *obj;
-
- int retVal = -1;
-
- yaffsfs_Lock();
- obj = yaffsfs_GetHandleObject(fd);
-
- if(obj)
- {
- retVal = yaffsfs_DoChMod(obj,mode);
- }
- else
- {
- // bad handle
- yaffsfs_SetError(-EBADF);
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-}
-
-
-int yaffs_mkdir(const char *path, mode_t mode)
-{
- yaffs_Object *parent = NULL;
- yaffs_Object *dir = NULL;
- char *name;
- int retVal= -1;
-
- yaffsfs_Lock();
- parent = yaffsfs_FindDirectory(NULL,path,&name,0);
- if(parent)
- dir = yaffs_MknodDirectory(parent,name,mode,0,0);
- if(dir)
- {
- retVal = 0;
- }
- else
- {
- yaffsfs_SetError(-ENOSPC); // just assume no space for now
- retVal = -1;
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-}
-
-int yaffs_mount(const char *path)
-{
- int retVal=-1;
- int result=YAFFS_FAIL;
- yaffs_Device *dev=NULL;
- char *dummy;
-
- T(YAFFS_TRACE_ALWAYS,("yaffs: Mounting %s\n",path));
-
- yaffsfs_Lock();
- dev = yaffsfs_FindDevice(path,&dummy);
- if(dev)
- {
- if(!dev->isMounted)
- {
- result = yaffs_GutsInitialise(dev);
- if(result == YAFFS_FAIL)
- {
- // todo error - mount failed
- yaffsfs_SetError(-ENOMEM);
- }
- retVal = result ? 0 : -1;
-
- }
- else
- {
- //todo error - already mounted.
- yaffsfs_SetError(-EBUSY);
- }
- }
- else
- {
- // todo error - no device
- yaffsfs_SetError(-ENODEV);
- }
- yaffsfs_Unlock();
- return retVal;
-
-}
-
-int yaffs_unmount(const char *path)
-{
- int retVal=-1;
- yaffs_Device *dev=NULL;
- char *dummy;
-
- yaffsfs_Lock();
- dev = yaffsfs_FindDevice(path,&dummy);
- if(dev)
- {
- if(dev->isMounted)
- {
- int i;
- int inUse;
-
- yaffs_FlushEntireDeviceCache(dev);
- yaffs_CheckpointSave(dev);
-
- for(i = inUse = 0; i < YAFFSFS_N_HANDLES && !inUse; i++)
- {
- if(yaffsfs_handle[i].inUse && yaffsfs_handle[i].obj->myDev == dev)
- {
- inUse = 1; // the device is in use, can't unmount
- }
- }
-
- if(!inUse)
- {
- yaffs_Deinitialise(dev);
-
- retVal = 0;
- }
- else
- {
- // todo error can't unmount as files are open
- yaffsfs_SetError(-EBUSY);
- }
-
- }
- else
- {
- //todo error - not mounted.
- yaffsfs_SetError(-EINVAL);
-
- }
- }
- else
- {
- // todo error - no device
- yaffsfs_SetError(-ENODEV);
- }
- yaffsfs_Unlock();
- return retVal;
-
-}
-
-loff_t yaffs_freespace(const char *path)
-{
- loff_t retVal=-1;
- yaffs_Device *dev=NULL;
- char *dummy;
-
- yaffsfs_Lock();
- dev = yaffsfs_FindDevice(path,&dummy);
- if(dev && dev->isMounted)
- {
- retVal = yaffs_GetNumberOfFreeChunks(dev);
- retVal *= dev->nDataBytesPerChunk;
-
- }
- else
- {
- yaffsfs_SetError(-EINVAL);
- }
-
- yaffsfs_Unlock();
- return retVal;
-}
-
-
-
-void yaffs_initialise(yaffsfs_DeviceConfiguration *cfgList)
-{
-
- yaffsfs_DeviceConfiguration *cfg;
-
- yaffsfs_configurationList = cfgList;
-
- yaffsfs_InitHandles();
-
- cfg = yaffsfs_configurationList;
-
- while(cfg && cfg->prefix && cfg->dev)
- {
- cfg->dev->isMounted = 0;
- cfg->dev->removeObjectCallback = yaffsfs_RemoveObjectCallback;
- cfg++;
- }
-}
-
-
-//
-// Directory search stuff.
-
-//
-// Directory search context
-//
-// NB this is an opaque structure.
-
-
-typedef struct
-{
- __u32 magic;
- yaffs_dirent de; /* directory entry being used by this dsc */
- char name[NAME_MAX+1]; /* name of directory being searched */
- yaffs_Object *dirObj; /* ptr to directory being searched */
- yaffs_Object *nextReturn; /* obj to be returned by next readddir */
- int offset;
- struct list_head others;
-} yaffsfs_DirectorySearchContext;
-
-
-
-static struct list_head search_contexts;
-
-
-static void yaffsfs_SetDirRewound(yaffsfs_DirectorySearchContext *dsc)
-{
- if(dsc &&
- dsc->dirObj &&
- dsc->dirObj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY){
-
- dsc->offset = 0;
-
- if( list_empty(&dsc->dirObj->variant.directoryVariant.children)){
- dsc->nextReturn = NULL;
- } else {
- dsc->nextReturn = list_entry(dsc->dirObj->variant.directoryVariant.children.next,
- yaffs_Object,siblings);
- }
- } else {
- /* Hey someone isn't playing nice! */
- }
-}
-
-static void yaffsfs_DirAdvance(yaffsfs_DirectorySearchContext *dsc)
-{
- if(dsc &&
- dsc->dirObj &&
- dsc->dirObj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY){
-
- if( dsc->nextReturn == NULL ||
- list_empty(&dsc->dirObj->variant.directoryVariant.children)){
- dsc->nextReturn = NULL;
- } else {
- struct list_head *next = dsc->nextReturn->siblings.next;
-
- if( next == &dsc->dirObj->variant.directoryVariant.children)
- dsc->nextReturn = NULL; /* end of list */
- else
- dsc->nextReturn = list_entry(next,yaffs_Object,siblings);
- }
- } else {
- /* Hey someone isn't playing nice! */
- }
-}
-
-static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj)
-{
-
- struct list_head *i;
- yaffsfs_DirectorySearchContext *dsc;
-
- /* if search contexts not initilised then skip */
- if(!search_contexts.next)
- return;
-
- /* Iteratethrough the directory search contexts.
- * If any are the one being removed, then advance the dsc to
- * the next one to prevent a hanging ptr.
- */
- list_for_each(i, &search_contexts) {
- if (i) {
- dsc = list_entry(i, yaffsfs_DirectorySearchContext,others);
- if(dsc->nextReturn == obj)
- yaffsfs_DirAdvance(dsc);
- }
- }
-
-}
-
-yaffs_DIR *yaffs_opendir(const char *dirname)
-{
- yaffs_DIR *dir = NULL;
- yaffs_Object *obj = NULL;
- yaffsfs_DirectorySearchContext *dsc = NULL;
-
- yaffsfs_Lock();
-
- obj = yaffsfs_FindObject(NULL,dirname,0);
-
- if(obj && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
-
- dsc = YMALLOC(sizeof(yaffsfs_DirectorySearchContext));
- dir = (yaffs_DIR *)dsc;
- if(dsc)
- {
- memset(dsc,0,sizeof(yaffsfs_DirectorySearchContext));
- dsc->magic = YAFFS_MAGIC;
- dsc->dirObj = obj;
- strncpy(dsc->name,dirname,NAME_MAX);
- INIT_LIST_HEAD(&dsc->others);
-
- if(!search_contexts.next)
- INIT_LIST_HEAD(&search_contexts);
-
- list_add(&dsc->others,&search_contexts);
- yaffsfs_SetDirRewound(dsc); }
-
- }
-
- yaffsfs_Unlock();
-
- return dir;
-}
-
-struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp)
-{
- yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
- struct yaffs_dirent *retVal = NULL;
-
- yaffsfs_Lock();
-
- if(dsc && dsc->magic == YAFFS_MAGIC){
- yaffsfs_SetError(0);
- if(dsc->nextReturn){
- dsc->de.d_ino = yaffs_GetEquivalentObject(dsc->nextReturn)->objectId;
- dsc->de.d_dont_use = (unsigned)dsc->nextReturn;
- dsc->de.d_off = dsc->offset++;
- yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX);
- if(strlen(dsc->de.d_name) == 0)
- {
- // this should not happen!
- strcpy(dsc->de.d_name,"zz");
- }
- dsc->de.d_reclen = sizeof(struct yaffs_dirent);
- retVal = &dsc->de;
- yaffsfs_DirAdvance(dsc);
- } else
- retVal = NULL;
- }
- else
- {
- yaffsfs_SetError(-EBADF);
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-
-}
-
-
-void yaffs_rewinddir(yaffs_DIR *dirp)
-{
- yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
-
- yaffsfs_Lock();
-
- yaffsfs_SetDirRewound(dsc);
-
- yaffsfs_Unlock();
-}
-
-
-int yaffs_closedir(yaffs_DIR *dirp)
-{
- yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
-
- yaffsfs_Lock();
- dsc->magic = 0;
- list_del(&dsc->others); /* unhook from list */
- YFREE(dsc);
- yaffsfs_Unlock();
- return 0;
-}
-
-// end of directory stuff
-
-
-int yaffs_symlink(const char *oldpath, const char *newpath)
-{
- yaffs_Object *parent = NULL;
- yaffs_Object *obj;
- char *name;
- int retVal= -1;
- int mode = 0; // ignore for now
-
- yaffsfs_Lock();
- parent = yaffsfs_FindDirectory(NULL,newpath,&name,0);
- obj = yaffs_MknodSymLink(parent,name,mode,0,0,oldpath);
- if(obj)
- {
- retVal = 0;
- }
- else
- {
- yaffsfs_SetError(-ENOSPC); // just assume no space for now
- retVal = -1;
- }
-
- yaffsfs_Unlock();
-
- return retVal;
-
-}
-
-int yaffs_readlink(const char *path, char *buf, int bufsiz)
-{
- yaffs_Object *obj = NULL;
- int retVal;
-
-
- yaffsfs_Lock();
-
- obj = yaffsfs_FindObject(NULL,path,0);
-
- if(!obj)
- {
- yaffsfs_SetError(-ENOENT);
- retVal = -1;
- }
- else if(obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK)
- {
- yaffsfs_SetError(-EINVAL);
- retVal = -1;
- }
- else
- {
- char *alias = obj->variant.symLinkVariant.alias;
- memset(buf,0,bufsiz);
- strncpy(buf,alias,bufsiz - 1);
- retVal = 0;
- }
- yaffsfs_Unlock();
- return retVal;
-}
-
-int yaffs_link(const char *oldpath, const char *newpath)
-{
- // Creates a link called newpath to existing oldpath
- yaffs_Object *obj = NULL;
- yaffs_Object *target = NULL;
- int retVal = 0;
-
-
- yaffsfs_Lock();
-
- obj = yaffsfs_FindObject(NULL,oldpath,0);
- target = yaffsfs_FindObject(NULL,newpath,0);
-
- if(!obj)
- {
- yaffsfs_SetError(-ENOENT);
- retVal = -1;
- }
- else if(target)
- {
- yaffsfs_SetError(-EEXIST);
- retVal = -1;
- }
- else
- {
- yaffs_Object *newdir = NULL;
- yaffs_Object *link = NULL;
-
- char *newname;
-
- newdir = yaffsfs_FindDirectory(NULL,newpath,&newname,0);
-
- if(!newdir)
- {
- yaffsfs_SetError(-ENOTDIR);
- retVal = -1;
- }
- else if(newdir->myDev != obj->myDev)
- {
- yaffsfs_SetError(-EXDEV);
- retVal = -1;
- }
- if(newdir && strlen(newname) > 0)
- {
- link = yaffs_Link(newdir,newname,obj);
- if(link)
- retVal = 0;
- else
- {
- yaffsfs_SetError(-ENOSPC);
- retVal = -1;
- }
-
- }
- }
- yaffsfs_Unlock();
-
- return retVal;
-}
-
-int yaffs_mknod(const char *pathname, mode_t mode, dev_t dev);
-
-int yaffs_DumpDevStruct(const char *path)
-{
- char *rest;
-
- yaffs_Object *obj = yaffsfs_FindRoot(path,&rest);
-
- if(obj)
- {
- yaffs_Device *dev = obj->myDev;
-
- printf("\n"
- "nPageWrites.......... %d\n"
- "nPageReads........... %d\n"
- "nBlockErasures....... %d\n"
- "nGCCopies............ %d\n"
- "garbageCollections... %d\n"
- "passiveGarbageColl'ns %d\n"
- "\n",
- dev->nPageWrites,
- dev->nPageReads,
- dev->nBlockErasures,
- dev->nGCCopies,
- dev->garbageCollections,
- dev->passiveGarbageCollections
- );
-
- }
- return 0;
-}
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/* XXX U-BOOT XXX */
+#include <common.h>
+#include <malloc.h>
+
+#include "yaffsfs.h"
+#include "yaffs_guts.h"
+#include "yaffscfg.h"
+#include "yportenv.h"
+
+/* XXX U-BOOT XXX */
+#if 0
+#include <string.h> // for memset
+#endif
+
+#define YAFFSFS_MAX_SYMLINK_DEREFERENCES 5
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+
+const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.1.1.1 2009/03/25 22:22:12 kenagy Exp $";
+
+// configurationList is the list of devices that are supported
+static yaffsfs_DeviceConfiguration *yaffsfs_configurationList;
+
+
+/* Some forward references */
+static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const char *path, int symDepth);
+static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj);
+
+
+// Handle management.
+//
+
+
+unsigned int yaffs_wr_attempts;
+
+typedef struct
+{
+ __u8 inUse:1; // this handle is in use
+ __u8 readOnly:1; // this handle is read only
+ __u8 append:1; // append only
+ __u8 exclusive:1; // exclusive
+ __u32 position; // current position in file
+ yaffs_Object *obj; // the object
+}yaffsfs_Handle;
+
+
+static yaffsfs_Handle yaffsfs_handle[YAFFSFS_N_HANDLES];
+
+// yaffsfs_InitHandle
+/// Inilitalise handles on start-up.
+//
+static int yaffsfs_InitHandles(void)
+{
+ int i;
+ for(i = 0; i < YAFFSFS_N_HANDLES; i++)
+ {
+ yaffsfs_handle[i].inUse = 0;
+ yaffsfs_handle[i].obj = NULL;
+ }
+ return 0;
+}
+
+yaffsfs_Handle *yaffsfs_GetHandlePointer(int h)
+{
+ if(h < 0 || h >= YAFFSFS_N_HANDLES)
+ {
+ return NULL;
+ }
+
+ return &yaffsfs_handle[h];
+}
+
+yaffs_Object *yaffsfs_GetHandleObject(int handle)
+{
+ yaffsfs_Handle *h = yaffsfs_GetHandlePointer(handle);
+
+ if(h && h->inUse)
+ {
+ return h->obj;
+ }
+
+ return NULL;
+}
+
+
+//yaffsfs_GetHandle
+// Grab a handle (when opening a file)
+//
+
+static int yaffsfs_GetHandle(void)
+{
+ int i;
+ yaffsfs_Handle *h;
+
+ for(i = 0; i < YAFFSFS_N_HANDLES; i++)
+ {
+ h = yaffsfs_GetHandlePointer(i);
+ if(!h)
+ {
+ // todo bug: should never happen
+ }
+ if(!h->inUse)
+ {
+ memset(h,0,sizeof(yaffsfs_Handle));
+ h->inUse=1;
+ return i;
+ }
+ }
+ return -1;
+}
+
+// yaffs_PutHandle
+// Let go of a handle (when closing a file)
+//
+static int yaffsfs_PutHandle(int handle)
+{
+ yaffsfs_Handle *h = yaffsfs_GetHandlePointer(handle);
+
+ if(h)
+ {
+ h->inUse = 0;
+ h->obj = NULL;
+ }
+ return 0;
+}
+
+
+
+// Stuff to search for a directory from a path
+
+
+int yaffsfs_Match(char a, char b)
+{
+ // case sensitive
+ return (a == b);
+}
+
+// yaffsfs_FindDevice
+// yaffsfs_FindRoot
+// Scan the configuration list to find the root.
+// Curveballs: Should match paths that end in '/' too
+// Curveball2 Might have "/x/ and "/x/y". Need to return the longest match
+static yaffs_Device *yaffsfs_FindDevice(const char *path, char **restOfPath)
+{
+ yaffsfs_DeviceConfiguration *cfg = yaffsfs_configurationList;
+ const char *leftOver;
+ const char *p;
+ yaffs_Device *retval = NULL;
+ int thisMatchLength;
+ int longestMatch = -1;
+
+ // Check all configs, choose the one that:
+ // 1) Actually matches a prefix (ie /a amd /abc will not match
+ // 2) Matches the longest.
+ while(cfg && cfg->prefix && cfg->dev)
+ {
+ leftOver = path;
+ p = cfg->prefix;
+ thisMatchLength = 0;
+
+ while(*p && //unmatched part of prefix
+ strcmp(p,"/") && // the rest of the prefix is not / (to catch / at end)
+ *leftOver &&
+ yaffsfs_Match(*p,*leftOver))
+ {
+ p++;
+ leftOver++;
+ thisMatchLength++;
+ }
+ if((!*p || strcmp(p,"/") == 0) && // end of prefix
+ (!*leftOver || *leftOver == '/') && // no more in this path name part
+ (thisMatchLength > longestMatch))
+ {
+ // Matched prefix
+ *restOfPath = (char *)leftOver;
+ retval = cfg->dev;
+ longestMatch = thisMatchLength;
+ }
+ cfg++;
+ }
+ return retval;
+}
+
+static yaffs_Object *yaffsfs_FindRoot(const char *path, char **restOfPath)
+{
+
+ yaffs_Device *dev;
+
+ dev= yaffsfs_FindDevice(path,restOfPath);
+ if(dev && dev->isMounted)
+ {
+ return dev->rootDir;
+ }
+ return NULL;
+}
+
+static yaffs_Object *yaffsfs_FollowLink(yaffs_Object *obj,int symDepth)
+{
+
+ while(obj && obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
+ {
+ char *alias = obj->variant.symLinkVariant.alias;
+
+ if(*alias == '/')
+ {
+ // Starts with a /, need to scan from root up
+ obj = yaffsfs_FindObject(NULL,alias,symDepth++);
+ }
+ else
+ {
+ // Relative to here, so use the parent of the symlink as a start
+ obj = yaffsfs_FindObject(obj->parent,alias,symDepth++);
+ }
+ }
+ return obj;
+}
+
+
+// yaffsfs_FindDirectory
+// Parse a path to determine the directory and the name within the directory.
+//
+// eg. "/data/xx/ff" --> puts name="ff" and returns the directory "/data/xx"
+static yaffs_Object *yaffsfs_DoFindDirectory(yaffs_Object *startDir,const char *path,char **name,int symDepth)
+{
+ yaffs_Object *dir;
+ char *restOfPath;
+ char str[YAFFS_MAX_NAME_LENGTH+1];
+ int i;
+
+ if(symDepth > YAFFSFS_MAX_SYMLINK_DEREFERENCES)
+ {
+ return NULL;
+ }
+
+ if(startDir)
+ {
+ dir = startDir;
+ restOfPath = (char *)path;
+ }
+ else
+ {
+ dir = yaffsfs_FindRoot(path,&restOfPath);
+ }
+
+ while(dir)
+ {
+ // parse off /.
+ // curve ball: also throw away surplus '/'
+ // eg. "/ram/x////ff" gets treated the same as "/ram/x/ff"
+ while(*restOfPath == '/')
+ {
+ restOfPath++; // get rid of '/'
+ }
+
+ *name = restOfPath;
+ i = 0;
+
+ while(*restOfPath && *restOfPath != '/')
+ {
+ if (i < YAFFS_MAX_NAME_LENGTH)
+ {
+ str[i] = *restOfPath;
+ str[i+1] = '\0';
+ i++;
+ }
+ restOfPath++;
+ }
+
+ if(!*restOfPath)
+ {
+ // got to the end of the string
+ return dir;
+ }
+ else
+ {
+ if(strcmp(str,".") == 0)
+ {
+ // Do nothing
+ }
+ else if(strcmp(str,"..") == 0)
+ {
+ dir = dir->parent;
+ }
+ else
+ {
+ dir = yaffs_FindObjectByName(dir,str);
+
+ while(dir && dir->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
+ {
+
+ dir = yaffsfs_FollowLink(dir,symDepth);
+
+ }
+
+ if(dir && dir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+ dir = NULL;
+ }
+ }
+ }
+ }
+ // directory did not exist.
+ return NULL;
+}
+
+static yaffs_Object *yaffsfs_FindDirectory(yaffs_Object *relativeDirectory,const char *path,char **name,int symDepth)
+{
+ return yaffsfs_DoFindDirectory(relativeDirectory,path,name,symDepth);
+}
+
+// yaffsfs_FindObject turns a path for an existing object into the object
+//
+static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const char *path,int symDepth)
+{
+ yaffs_Object *dir;
+ char *name;
+
+ dir = yaffsfs_FindDirectory(relativeDirectory,path,&name,symDepth);
+
+ if(dir && *name)
+ {
+ return yaffs_FindObjectByName(dir,name);
+ }
+
+ return dir;
+}
+
+
+
+int yaffs_open(const char *path, int oflag, int mode)
+{
+ yaffs_Object *obj = NULL;
+ yaffs_Object *dir = NULL;
+ char *name;
+ int handle = -1;
+ yaffsfs_Handle *h = NULL;
+ int alreadyOpen = 0;
+ int alreadyExclusive = 0;
+ int openDenied = 0;
+ int symDepth = 0;
+ int errorReported = 0;
+
+ int i;
+
+
+ // todo sanity check oflag (eg. can't have O_TRUNC without WRONLY or RDWR
+
+
+ yaffsfs_Lock();
+
+ handle = yaffsfs_GetHandle();
+
+ if(handle >= 0)
+ {
+
+ h = yaffsfs_GetHandlePointer(handle);
+
+
+ // try to find the exisiting object
+ obj = yaffsfs_FindObject(NULL,path,0);
+
+ if(obj && obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
+ {
+
+ obj = yaffsfs_FollowLink(obj,symDepth++);
+ }
+
+ if(obj)
+ {
+ // Check if the object is already in use
+ alreadyOpen = alreadyExclusive = 0;
+
+ for(i = 0; i <= YAFFSFS_N_HANDLES; i++)
+ {
+
+ if(i != handle &&
+ yaffsfs_handle[i].inUse &&
+ obj == yaffsfs_handle[i].obj)
+ {
+ alreadyOpen = 1;
+ if(yaffsfs_handle[i].exclusive)
+ {
+ alreadyExclusive = 1;
+ }
+ }
+ }
+
+ if(((oflag & O_EXCL) && alreadyOpen) || alreadyExclusive)
+ {
+ openDenied = 1;
+ }
+
+ // Open should fail if O_CREAT and O_EXCL are specified
+ if((oflag & O_EXCL) && (oflag & O_CREAT))
+ {
+ openDenied = 1;
+ yaffsfs_SetError(-EEXIST);
+ errorReported = 1;
+ }
+
+ // Check file permissions
+ if( (oflag & (O_RDWR | O_WRONLY)) == 0 && // ie O_RDONLY
+ !(obj->yst_mode & S_IREAD))
+ {
+ openDenied = 1;
+ }
+
+ if( (oflag & O_RDWR) &&
+ !(obj->yst_mode & S_IREAD))
+ {
+ openDenied = 1;
+ }
+
+ if( (oflag & (O_RDWR | O_WRONLY)) &&
+ !(obj->yst_mode & S_IWRITE))
+ {
+ openDenied = 1;
+ }
+
+ }
+
+ else if((oflag & O_CREAT))
+ {
+ // Let's see if we can create this file
+ dir = yaffsfs_FindDirectory(NULL,path,&name,0);
+ if(dir)
+ {
+ obj = yaffs_MknodFile(dir,name,mode,0,0);
+ }
+ else
+ {
+ yaffsfs_SetError(-ENOTDIR);
+ }
+ }
+
+ if(obj && !openDenied)
+ {
+ h->obj = obj;
+ h->inUse = 1;
+ h->readOnly = (oflag & (O_WRONLY | O_RDWR)) ? 0 : 1;
+ h->append = (oflag & O_APPEND) ? 1 : 0;
+ h->exclusive = (oflag & O_EXCL) ? 1 : 0;
+ h->position = 0;
+
+ obj->inUse++;
+ if((oflag & O_TRUNC) && !h->readOnly)
+ {
+ //todo truncate
+ yaffs_ResizeFile(obj,0);
+ }
+
+ }
+ else
+ {
+ yaffsfs_PutHandle(handle);
+ if(!errorReported)
+ {
+ yaffsfs_SetError(-EACCESS);
+ errorReported = 1;
+ }
+ handle = -1;
+ }
+
+ }
+
+ yaffsfs_Unlock();
+
+ return handle;
+}
+
+int yaffs_close(int fd)
+{
+ yaffsfs_Handle *h = NULL;
+ int retVal = 0;
+
+ yaffsfs_Lock();
+
+ h = yaffsfs_GetHandlePointer(fd);
+
+ if(h && h->inUse)
+ {
+ // clean up
+ yaffs_FlushFile(h->obj,1);
+ h->obj->inUse--;
+ if(h->obj->inUse <= 0 && h->obj->unlinked)
+ {
+ yaffs_DeleteFile(h->obj);
+ }
+ yaffsfs_PutHandle(fd);
+ retVal = 0;
+ }
+ else
+ {
+ // bad handle
+ yaffsfs_SetError(-EBADF);
+ retVal = -1;
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+int yaffs_read(int fd, void *buf, unsigned int nbyte)
+{
+ yaffsfs_Handle *h = NULL;
+ yaffs_Object *obj = NULL;
+ int pos = 0;
+ int nRead = -1;
+ int maxRead;
+
+ yaffsfs_Lock();
+ h = yaffsfs_GetHandlePointer(fd);
+ obj = yaffsfs_GetHandleObject(fd);
+
+ if(!h || !obj)
+ {
+ // bad handle
+ yaffsfs_SetError(-EBADF);
+ }
+ else if( h && obj)
+ {
+ pos= h->position;
+ if(yaffs_GetObjectFileLength(obj) > pos)
+ {
+ maxRead = yaffs_GetObjectFileLength(obj) - pos;
+ }
+ else
+ {
+ maxRead = 0;
+ }
+
+ if(nbyte > maxRead)
+ {
+ nbyte = maxRead;
+ }
+
+
+ if(nbyte > 0)
+ {
+ nRead = yaffs_ReadDataFromFile(obj,buf,pos,nbyte);
+ if(nRead >= 0)
+ {
+ h->position = pos + nRead;
+ }
+ else
+ {
+ //todo error
+ }
+ }
+ else
+ {
+ nRead = 0;
+ }
+
+ }
+
+ yaffsfs_Unlock();
+
+
+ return (nRead >= 0) ? nRead : -1;
+
+}
+
+int yaffs_write(int fd, const void *buf, unsigned int nbyte)
+{
+ yaffsfs_Handle *h = NULL;
+ yaffs_Object *obj = NULL;
+ int pos = 0;
+ int nWritten = -1;
+ int writeThrough = 0;
+
+ yaffsfs_Lock();
+ h = yaffsfs_GetHandlePointer(fd);
+ obj = yaffsfs_GetHandleObject(fd);
+
+ if(!h || !obj)
+ {
+ // bad handle
+ yaffsfs_SetError(-EBADF);
+ }
+ else if( h && obj && h->readOnly)
+ {
+ // todo error
+ }
+ else if( h && obj)
+ {
+ if(h->append)
+ {
+ pos = yaffs_GetObjectFileLength(obj);
+ }
+ else
+ {
+ pos = h->position;
+ }
+
+ nWritten = yaffs_WriteDataToFile(obj,buf,pos,nbyte,writeThrough);
+
+ if(nWritten >= 0)
+ {
+ h->position = pos + nWritten;
+ }
+ else
+ {
+ //todo error
+ }
+
+ }
+
+ yaffsfs_Unlock();
+
+
+ return (nWritten >= 0) ? nWritten : -1;
+
+}
+
+int yaffs_truncate(int fd, off_t newSize)
+{
+ yaffsfs_Handle *h = NULL;
+ yaffs_Object *obj = NULL;
+ int result = 0;
+
+ yaffsfs_Lock();
+ h = yaffsfs_GetHandlePointer(fd);
+ obj = yaffsfs_GetHandleObject(fd);
+
+ if(!h || !obj)
+ {
+ // bad handle
+ yaffsfs_SetError(-EBADF);
+ }
+ else
+ {
+ // resize the file
+ result = yaffs_ResizeFile(obj,newSize);
+ }
+ yaffsfs_Unlock();
+
+
+ return (result) ? 0 : -1;
+
+}
+
+off_t yaffs_lseek(int fd, off_t offset, int whence)
+{
+ yaffsfs_Handle *h = NULL;
+ yaffs_Object *obj = NULL;
+ int pos = -1;
+ int fSize = -1;
+
+ yaffsfs_Lock();
+ h = yaffsfs_GetHandlePointer(fd);
+ obj = yaffsfs_GetHandleObject(fd);
+
+ if(!h || !obj)
+ {
+ // bad handle
+ yaffsfs_SetError(-EBADF);
+ }
+ else if(whence == SEEK_SET)
+ {
+ if(offset >= 0)
+ {
+ pos = offset;
+ }
+ }
+ else if(whence == SEEK_CUR)
+ {
+ if( (h->position + offset) >= 0)
+ {
+ pos = (h->position + offset);
+ }
+ }
+ else if(whence == SEEK_END)
+ {
+ fSize = yaffs_GetObjectFileLength(obj);
+ if(fSize >= 0 && (fSize + offset) >= 0)
+ {
+ pos = fSize + offset;
+ }
+ }
+
+ if(pos >= 0)
+ {
+ h->position = pos;
+ }
+ else
+ {
+ // todo error
+ }
+
+
+ yaffsfs_Unlock();
+
+ return pos;
+}
+
+
+int yaffsfs_DoUnlink(const char *path,int isDirectory)
+{
+ yaffs_Object *dir = NULL;
+ yaffs_Object *obj = NULL;
+ char *name;
+ int result = YAFFS_FAIL;
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL,path,0);
+ dir = yaffsfs_FindDirectory(NULL,path,&name,0);
+ if(!dir)
+ {
+ yaffsfs_SetError(-ENOTDIR);
+ }
+ else if(!obj)
+ {
+ yaffsfs_SetError(-ENOENT);
+ }
+ else if(!isDirectory && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+ yaffsfs_SetError(-EISDIR);
+ }
+ else if(isDirectory && obj->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+ yaffsfs_SetError(-ENOTDIR);
+ }
+ else
+ {
+ result = yaffs_Unlink(dir,name);
+
+ if(result == YAFFS_FAIL && isDirectory)
+ {
+ yaffsfs_SetError(-ENOTEMPTY);
+ }
+ }
+
+ yaffsfs_Unlock();
+
+ // todo error
+
+ return (result == YAFFS_FAIL) ? -1 : 0;
+}
+int yaffs_rmdir(const char *path)
+{
+ return yaffsfs_DoUnlink(path,1);
+}
+
+int yaffs_unlink(const char *path)
+{
+ return yaffsfs_DoUnlink(path,0);
+}
+
+int yaffs_rename(const char *oldPath, const char *newPath)
+{
+ yaffs_Object *olddir = NULL;
+ yaffs_Object *newdir = NULL;
+ yaffs_Object *obj = NULL;
+ char *oldname;
+ char *newname;
+ int result= YAFFS_FAIL;
+ int renameAllowed = 1;
+
+ yaffsfs_Lock();
+
+ olddir = yaffsfs_FindDirectory(NULL,oldPath,&oldname,0);
+ newdir = yaffsfs_FindDirectory(NULL,newPath,&newname,0);
+ obj = yaffsfs_FindObject(NULL,oldPath,0);
+
+ if(!olddir || !newdir || !obj)
+ {
+ // bad file
+ yaffsfs_SetError(-EBADF);
+ renameAllowed = 0;
+ }
+ else if(olddir->myDev != newdir->myDev)
+ {
+ // oops must be on same device
+ // todo error
+ yaffsfs_SetError(-EXDEV);
+ renameAllowed = 0;
+ }
+ else if(obj && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+ // It is a directory, check that it is not being renamed to
+ // being its own decendent.
+ // Do this by tracing from the new directory back to the root, checking for obj
+
+ yaffs_Object *xx = newdir;
+
+ while( renameAllowed && xx)
+ {
+ if(xx == obj)
+ {
+ renameAllowed = 0;
+ }
+ xx = xx->parent;
+ }
+ if(!renameAllowed) yaffsfs_SetError(-EACCESS);
+ }
+
+ if(renameAllowed)
+ {
+ result = yaffs_RenameObject(olddir,oldname,newdir,newname);
+ }
+
+ yaffsfs_Unlock();
+
+ return (result == YAFFS_FAIL) ? -1 : 0;
+}
+
+
+static int yaffsfs_DoStat(yaffs_Object *obj,struct yaffs_stat *buf)
+{
+ int retVal = -1;
+
+ if(obj)
+ {
+ obj = yaffs_GetEquivalentObject(obj);
+ }
+
+ if(obj && buf)
+ {
+ buf->st_dev = (int)obj->myDev->genericDevice;
+ buf->st_ino = obj->objectId;
+ buf->st_mode = obj->yst_mode & ~S_IFMT; // clear out file type bits
+
+ if(obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+ buf->st_mode |= S_IFDIR;
+ }
+ else if(obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
+ {
+ buf->st_mode |= S_IFLNK;
+ }
+ else if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
+ {
+ buf->st_mode |= S_IFREG;
+ }
+
+ buf->st_nlink = yaffs_GetObjectLinkCount(obj);
+ buf->st_uid = 0;
+ buf->st_gid = 0;;
+ buf->st_rdev = obj->yst_rdev;
+ buf->st_size = yaffs_GetObjectFileLength(obj);
+ buf->st_blksize = obj->myDev->nDataBytesPerChunk;
+ buf->st_blocks = (buf->st_size + buf->st_blksize -1)/buf->st_blksize;
+ buf->yst_atime = obj->yst_atime;
+ buf->yst_ctime = obj->yst_ctime;
+ buf->yst_mtime = obj->yst_mtime;
+ retVal = 0;
+ }
+ return retVal;
+}
+
+static int yaffsfs_DoStatOrLStat(const char *path, struct yaffs_stat *buf,int doLStat)
+{
+ yaffs_Object *obj;
+
+ int retVal = -1;
+
+ yaffsfs_Lock();
+ obj = yaffsfs_FindObject(NULL,path,0);
+
+ if(!doLStat && obj)
+ {
+ obj = yaffsfs_FollowLink(obj,0);
+ }
+
+ if(obj)
+ {
+ retVal = yaffsfs_DoStat(obj,buf);
+ }
+ else
+ {
+ // todo error not found
+ yaffsfs_SetError(-ENOENT);
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+int yaffs_stat(const char *path, struct yaffs_stat *buf)
+{
+ return yaffsfs_DoStatOrLStat(path,buf,0);
+}
+
+int yaffs_lstat(const char *path, struct yaffs_stat *buf)
+{
+ return yaffsfs_DoStatOrLStat(path,buf,1);
+}
+
+int yaffs_fstat(int fd, struct yaffs_stat *buf)
+{
+ yaffs_Object *obj;
+
+ int retVal = -1;
+
+ yaffsfs_Lock();
+ obj = yaffsfs_GetHandleObject(fd);
+
+ if(obj)
+ {
+ retVal = yaffsfs_DoStat(obj,buf);
+ }
+ else
+ {
+ // bad handle
+ yaffsfs_SetError(-EBADF);
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+static int yaffsfs_DoChMod(yaffs_Object *obj,mode_t mode)
+{
+ int result = YAFFS_FAIL;
+
+ if(obj)
+ {
+ obj = yaffs_GetEquivalentObject(obj);
+ }
+
+ if(obj)
+ {
+ obj->yst_mode = mode;
+ obj->dirty = 1;
+ result = yaffs_FlushFile(obj,0);
+ }
+
+ return result == YAFFS_OK ? 0 : -1;
+}
+
+
+int yaffs_chmod(const char *path, mode_t mode)
+{
+ yaffs_Object *obj;
+
+ int retVal = -1;
+
+ yaffsfs_Lock();
+ obj = yaffsfs_FindObject(NULL,path,0);
+
+ if(obj)
+ {
+ retVal = yaffsfs_DoChMod(obj,mode);
+ }
+ else
+ {
+ // todo error not found
+ yaffsfs_SetError(-ENOENT);
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+
+int yaffs_fchmod(int fd, mode_t mode)
+{
+ yaffs_Object *obj;
+
+ int retVal = -1;
+
+ yaffsfs_Lock();
+ obj = yaffsfs_GetHandleObject(fd);
+
+ if(obj)
+ {
+ retVal = yaffsfs_DoChMod(obj,mode);
+ }
+ else
+ {
+ // bad handle
+ yaffsfs_SetError(-EBADF);
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+
+int yaffs_mkdir(const char *path, mode_t mode)
+{
+ yaffs_Object *parent = NULL;
+ yaffs_Object *dir = NULL;
+ char *name;
+ int retVal= -1;
+
+ yaffsfs_Lock();
+ parent = yaffsfs_FindDirectory(NULL,path,&name,0);
+ if(parent)
+ dir = yaffs_MknodDirectory(parent,name,mode,0,0);
+ if(dir)
+ {
+ retVal = 0;
+ }
+ else
+ {
+ yaffsfs_SetError(-ENOSPC); // just assume no space for now
+ retVal = -1;
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+int yaffs_mount(const char *path)
+{
+ int retVal=-1;
+ int result=YAFFS_FAIL;
+ yaffs_Device *dev=NULL;
+ char *dummy;
+
+ T(YAFFS_TRACE_ALWAYS,("yaffs: Mounting %s\n",path));
+
+ yaffsfs_Lock();
+ dev = yaffsfs_FindDevice(path,&dummy);
+ if(dev)
+ {
+ if(!dev->isMounted)
+ {
+ result = yaffs_GutsInitialise(dev);
+ if(result == YAFFS_FAIL)
+ {
+ // todo error - mount failed
+ yaffsfs_SetError(-ENOMEM);
+ }
+ retVal = result ? 0 : -1;
+
+ }
+ else
+ {
+ //todo error - already mounted.
+ yaffsfs_SetError(-EBUSY);
+ }
+ }
+ else
+ {
+ // todo error - no device
+ yaffsfs_SetError(-ENODEV);
+ }
+ yaffsfs_Unlock();
+ return retVal;
+
+}
+
+int yaffs_unmount(const char *path)
+{
+ int retVal=-1;
+ yaffs_Device *dev=NULL;
+ char *dummy;
+
+ yaffsfs_Lock();
+ dev = yaffsfs_FindDevice(path,&dummy);
+ if(dev)
+ {
+ if(dev->isMounted)
+ {
+ int i;
+ int inUse;
+
+ yaffs_FlushEntireDeviceCache(dev);
+ yaffs_CheckpointSave(dev);
+
+ for(i = inUse = 0; i < YAFFSFS_N_HANDLES && !inUse; i++)
+ {
+ if(yaffsfs_handle[i].inUse && yaffsfs_handle[i].obj->myDev == dev)
+ {
+ inUse = 1; // the device is in use, can't unmount
+ }
+ }
+
+ if(!inUse)
+ {
+ yaffs_Deinitialise(dev);
+
+ retVal = 0;
+ }
+ else
+ {
+ // todo error can't unmount as files are open
+ yaffsfs_SetError(-EBUSY);
+ }
+
+ }
+ else
+ {
+ //todo error - not mounted.
+ yaffsfs_SetError(-EINVAL);
+
+ }
+ }
+ else
+ {
+ // todo error - no device
+ yaffsfs_SetError(-ENODEV);
+ }
+ yaffsfs_Unlock();
+ return retVal;
+
+}
+
+loff_t yaffs_freespace(const char *path)
+{
+ loff_t retVal=-1;
+ yaffs_Device *dev=NULL;
+ char *dummy;
+
+ yaffsfs_Lock();
+ dev = yaffsfs_FindDevice(path,&dummy);
+ if(dev && dev->isMounted)
+ {
+ retVal = yaffs_GetNumberOfFreeChunks(dev);
+ retVal *= dev->nDataBytesPerChunk;
+
+ }
+ else
+ {
+ yaffsfs_SetError(-EINVAL);
+ }
+
+ yaffsfs_Unlock();
+ return retVal;
+}
+
+
+
+void yaffs_initialise(yaffsfs_DeviceConfiguration *cfgList)
+{
+
+ yaffsfs_DeviceConfiguration *cfg;
+
+ yaffsfs_configurationList = cfgList;
+
+ yaffsfs_InitHandles();
+
+ cfg = yaffsfs_configurationList;
+
+ while(cfg && cfg->prefix && cfg->dev)
+ {
+ cfg->dev->isMounted = 0;
+ cfg->dev->removeObjectCallback = yaffsfs_RemoveObjectCallback;
+ cfg++;
+ }
+}
+
+
+//
+// Directory search stuff.
+
+//
+// Directory search context
+//
+// NB this is an opaque structure.
+
+
+typedef struct
+{
+ __u32 magic;
+ yaffs_dirent de; /* directory entry being used by this dsc */
+ char name[NAME_MAX+1]; /* name of directory being searched */
+ yaffs_Object *dirObj; /* ptr to directory being searched */
+ yaffs_Object *nextReturn; /* obj to be returned by next readddir */
+ int offset;
+ struct list_head others;
+} yaffsfs_DirectorySearchContext;
+
+
+
+static struct list_head search_contexts;
+
+
+static void yaffsfs_SetDirRewound(yaffsfs_DirectorySearchContext *dsc)
+{
+ if(dsc &&
+ dsc->dirObj &&
+ dsc->dirObj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY){
+
+ dsc->offset = 0;
+
+ if( list_empty(&dsc->dirObj->variant.directoryVariant.children)){
+ dsc->nextReturn = NULL;
+ } else {
+ dsc->nextReturn = list_entry(dsc->dirObj->variant.directoryVariant.children.next,
+ yaffs_Object,siblings);
+ }
+ } else {
+ /* Hey someone isn't playing nice! */
+ }
+}
+
+static void yaffsfs_DirAdvance(yaffsfs_DirectorySearchContext *dsc)
+{
+ if(dsc &&
+ dsc->dirObj &&
+ dsc->dirObj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY){
+
+ if( dsc->nextReturn == NULL ||
+ list_empty(&dsc->dirObj->variant.directoryVariant.children)){
+ dsc->nextReturn = NULL;
+ } else {
+ struct list_head *next = dsc->nextReturn->siblings.next;
+
+ if( next == &dsc->dirObj->variant.directoryVariant.children)
+ dsc->nextReturn = NULL; /* end of list */
+ else
+ dsc->nextReturn = list_entry(next,yaffs_Object,siblings);
+ }
+ } else {
+ /* Hey someone isn't playing nice! */
+ }
+}
+
+static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj)
+{
+
+ struct list_head *i;
+ yaffsfs_DirectorySearchContext *dsc;
+
+ /* if search contexts not initilised then skip */
+ if(!search_contexts.next)
+ return;
+
+ /* Iteratethrough the directory search contexts.
+ * If any are the one being removed, then advance the dsc to
+ * the next one to prevent a hanging ptr.
+ */
+ list_for_each(i, &search_contexts) {
+ if (i) {
+ dsc = list_entry(i, yaffsfs_DirectorySearchContext,others);
+ if(dsc->nextReturn == obj)
+ yaffsfs_DirAdvance(dsc);
+ }
+ }
+
+}
+
+yaffs_DIR *yaffs_opendir(const char *dirname)
+{
+ yaffs_DIR *dir = NULL;
+ yaffs_Object *obj = NULL;
+ yaffsfs_DirectorySearchContext *dsc = NULL;
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL,dirname,0);
+
+ if(obj && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
+ {
+
+ dsc = YMALLOC(sizeof(yaffsfs_DirectorySearchContext));
+ dir = (yaffs_DIR *)dsc;
+ if(dsc)
+ {
+ memset(dsc,0,sizeof(yaffsfs_DirectorySearchContext));
+ dsc->magic = YAFFS_MAGIC;
+ dsc->dirObj = obj;
+ strncpy(dsc->name,dirname,NAME_MAX);
+ INIT_LIST_HEAD(&dsc->others);
+
+ if(!search_contexts.next)
+ INIT_LIST_HEAD(&search_contexts);
+
+ list_add(&dsc->others,&search_contexts);
+ yaffsfs_SetDirRewound(dsc); }
+
+ }
+
+ yaffsfs_Unlock();
+
+ return dir;
+}
+
+struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp)
+{
+ yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
+ struct yaffs_dirent *retVal = NULL;
+
+ yaffsfs_Lock();
+
+ if(dsc && dsc->magic == YAFFS_MAGIC){
+ yaffsfs_SetError(0);
+ if(dsc->nextReturn){
+ dsc->de.d_ino = yaffs_GetEquivalentObject(dsc->nextReturn)->objectId;
+ dsc->de.d_dont_use = (unsigned)dsc->nextReturn;
+ dsc->de.d_off = dsc->offset++;
+ yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX);
+ if(strlen(dsc->de.d_name) == 0)
+ {
+ // this should not happen!
+ strcpy(dsc->de.d_name,"zz");
+ }
+ dsc->de.d_reclen = sizeof(struct yaffs_dirent);
+ retVal = &dsc->de;
+ yaffsfs_DirAdvance(dsc);
+ } else
+ retVal = NULL;
+ }
+ else
+ {
+ yaffsfs_SetError(-EBADF);
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+
+void yaffs_rewinddir(yaffs_DIR *dirp)
+{
+ yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
+
+ yaffsfs_Lock();
+
+ yaffsfs_SetDirRewound(dsc);
+
+ yaffsfs_Unlock();
+}
+
+
+int yaffs_closedir(yaffs_DIR *dirp)
+{
+ yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
+
+ yaffsfs_Lock();
+ dsc->magic = 0;
+ list_del(&dsc->others); /* unhook from list */
+ YFREE(dsc);
+ yaffsfs_Unlock();
+ return 0;
+}
+
+// end of directory stuff
+
+
+int yaffs_symlink(const char *oldpath, const char *newpath)
+{
+ yaffs_Object *parent = NULL;
+ yaffs_Object *obj;
+ char *name;
+ int retVal= -1;
+ int mode = 0; // ignore for now
+
+ yaffsfs_Lock();
+ parent = yaffsfs_FindDirectory(NULL,newpath,&name,0);
+ obj = yaffs_MknodSymLink(parent,name,mode,0,0,oldpath);
+ if(obj)
+ {
+ retVal = 0;
+ }
+ else
+ {
+ yaffsfs_SetError(-ENOSPC); // just assume no space for now
+ retVal = -1;
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+int yaffs_readlink(const char *path, char *buf, int bufsiz)
+{
+ yaffs_Object *obj = NULL;
+ int retVal;
+
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL,path,0);
+
+ if(!obj)
+ {
+ yaffsfs_SetError(-ENOENT);
+ retVal = -1;
+ }
+ else if(obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK)
+ {
+ yaffsfs_SetError(-EINVAL);
+ retVal = -1;
+ }
+ else
+ {
+ char *alias = obj->variant.symLinkVariant.alias;
+ memset(buf,0,bufsiz);
+ strncpy(buf,alias,bufsiz - 1);
+ retVal = 0;
+ }
+ yaffsfs_Unlock();
+ return retVal;
+}
+
+int yaffs_link(const char *oldpath, const char *newpath)
+{
+ // Creates a link called newpath to existing oldpath
+ yaffs_Object *obj = NULL;
+ yaffs_Object *target = NULL;
+ int retVal = 0;
+
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL,oldpath,0);
+ target = yaffsfs_FindObject(NULL,newpath,0);
+
+ if(!obj)
+ {
+ yaffsfs_SetError(-ENOENT);
+ retVal = -1;
+ }
+ else if(target)
+ {
+ yaffsfs_SetError(-EEXIST);
+ retVal = -1;
+ }
+ else
+ {
+ yaffs_Object *newdir = NULL;
+ yaffs_Object *link = NULL;
+
+ char *newname;
+
+ newdir = yaffsfs_FindDirectory(NULL,newpath,&newname,0);
+
+ if(!newdir)
+ {
+ yaffsfs_SetError(-ENOTDIR);
+ retVal = -1;
+ }
+ else if(newdir->myDev != obj->myDev)
+ {
+ yaffsfs_SetError(-EXDEV);
+ retVal = -1;
+ }
+ if(newdir && strlen(newname) > 0)
+ {
+ link = yaffs_Link(newdir,newname,obj);
+ if(link)
+ retVal = 0;
+ else
+ {
+ yaffsfs_SetError(-ENOSPC);
+ retVal = -1;
+ }
+
+ }
+ }
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+int yaffs_mknod(const char *pathname, mode_t mode, dev_t dev);
+
+int yaffs_DumpDevStruct(const char *path)
+{
+ char *rest;
+
+ yaffs_Object *obj = yaffsfs_FindRoot(path,&rest);
+
+ if(obj)
+ {
+ yaffs_Device *dev = obj->myDev;
+
+ printf("\n"
+ "nPageWrites.......... %d\n"
+ "nPageReads........... %d\n"
+ "nBlockErasures....... %d\n"
+ "nGCCopies............ %d\n"
+ "garbageCollections... %d\n"
+ "passiveGarbageColl'ns %d\n"
+ "\n",
+ dev->nPageWrites,
+ dev->nPageReads,
+ dev->nBlockErasures,
+ dev->nGCCopies,
+ dev->garbageCollections,
+ dev->passiveGarbageCollections
+ );
+
+ }
+ return 0;
+}
diff -Naur u-boot-2009.03_orig/include/CVS/Entries u-boot-2009.03/include/CVS/Entries
--- u-boot-2009.03_orig/include/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/CVS/Entries 2009-03-31 14:58:26.125100800 -0700
@@ -0,0 +1,220 @@
+D/asm-arm////
+D/asm-avr32////
+D/asm-blackfin////
+D/asm-i386////
+D/asm-m68k////
+D/asm-microblaze////
+D/asm-mips////
+D/asm-nios////
+D/asm-nios2////
+D/asm-ppc////
+D/asm-sh////
+D/asm-sparc////
+D/bedbug////
+D/configs////
+D/cramfs////
+D/galileo////
+D/jffs2////
+D/linux////
+D/lzma////
+D/mtd////
+D/pcmcia////
+D/u-boot////
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/405_dimm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/405_mal.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/74xx_7xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ACEX1K.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_dma.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_progCheck.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_tasksInit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SA-1100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_exports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/addr_map.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ahci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/altera.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ambapp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api_public.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm920t.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm925t.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm926ejs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm946es.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/armcoremodule.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at45.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91rm9200_i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91rm9200_net.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_lcdc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm5221.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bmp_layout.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/circbuf.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clps7111.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/command.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/commproc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config_cmd_all.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config_cmd_default.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/console.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/da9030.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dataflash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr_spd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/devices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/div64.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dm9161.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dp83848.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds4510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dtt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/e500.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/elf.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/environment.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ext2fs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_support.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fis.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_esdhc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hush.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i8042.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ide.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iomux.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ioports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/keyboard.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcdvideo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lh7a400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lh7a404.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lh7a40x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libfdt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libfdt_env.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lmb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logbuff.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a400_cpld.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lynxkdi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/malloc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mb862xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mii_phy.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/miiphy.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mk48t59.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc106.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc512x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx_sdma.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8220.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc824x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8260_irq.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc83xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc85xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc86xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xx_irq.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/net.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netdev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios-io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2-epcs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2-io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nomadik.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns87308.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_uboot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pc_keyb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pca953x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_ids.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx_enet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_asm.tmpl/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ps2mult.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/radeon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reiserfs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c2400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c2410.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c24x0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c6400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c64x0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s6e63d6.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s_record.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sa1100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scsi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sed13806.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sed156x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sha1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sha256.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sm501.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smiLynxEM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spartan2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spartan3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spd_sdram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi_flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/status_led.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stratixII.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sym53c8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timestamp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsi108.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubi_uboot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/universe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_cdc_acm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_ep0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_mpc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_omap1510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdescriptors.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/version.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vfd_logo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_ad7176.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_ad7177.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_ad7179.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_easylogo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_fb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_font.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_logo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/virtex2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vsc7385.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vxworks.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/w83c553f.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xyzModem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zlib.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D/asm-or1200////
+/image.h/1.2/Wed Mar 25 23:04:34 2009//
+/linux_logo.h/1.1.1.1/Tue Mar 31 21:57:41 2009//T1.1.1.1
+/lxt971a.h/1.1.1.1/Tue Mar 31 21:57:41 2009//T1.1.1.1
+/ns7520_eth.h/1.1.1.1/Tue Mar 31 21:58:01 2009//T1.1.1.1
+/ns9750_bbus.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_eth.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_mem.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_ser.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_sys.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/systemace.h/1.1.1.1/Tue Mar 31 21:58:25 2009//T1.1.1.1
diff -Naur u-boot-2009.03_orig/include/CVS/Entries.Extra u-boot-2009.03/include/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/CVS/Entries.Extra 2009-03-31 14:58:26.125100800 -0700
@@ -0,0 +1,220 @@
+D/asm-arm////
+D/asm-avr32////
+D/asm-blackfin////
+D/asm-i386////
+D/asm-m68k////
+D/asm-microblaze////
+D/asm-mips////
+D/asm-nios////
+D/asm-nios2////
+D/asm-ppc////
+D/asm-sh////
+D/asm-sparc////
+D/bedbug////
+D/configs////
+D/cramfs////
+D/galileo////
+D/jffs2////
+D/linux////
+D/lzma////
+D/mtd////
+D/pcmcia////
+D/u-boot////
+/.gitignore///1238019733/
+/405_dimm.h///1238019733/
+/405_mal.h///1238019733/
+/4xx_i2c.h///1238019733/
+/74xx_7xx.h///1238019733/
+/ACEX1K.h///1238019733/
+/MCD_dma.h///1238019733/
+/MCD_progCheck.h///1238019733/
+/MCD_tasksInit.h///1238019733/
+/SA-1100.h///1238019734/
+/_exports.h///1238019734/
+/addr_map.h///1238019733/
+/ahci.h///1238019733/
+/altera.h///1238019733/
+/ambapp.h///1238019733/
+/api_public.h///1238019733/
+/arm920t.h///1238019733/
+/arm925t.h///1238019733/
+/arm926ejs.h///1238019733/
+/arm946es.h///1238019733/
+/armcoremodule.h///1238019733/
+/at45.h///1238019733/
+/at91rm9200_i2c.h///1238019733/
+/at91rm9200_net.h///1238019733/
+/ata.h///1238019733/
+/atmel_lcdc.h///1238019733/
+/bcd.h///1238019733/
+/bcm5221.h///1238019733/
+/bmp_layout.h///1238019733/
+/bzlib.h///1238019733/
+/circbuf.h///1238019733/
+/clps7111.h///1238019733/
+/command.h///1238019733/
+/common.h///1238019733/
+/commproc.h///1238019733/
+/config_cmd_all.h///1238019733/
+/config_cmd_default.h///1238019733/
+/console.h///1238019733/
+/crc.h///1238019733/
+/da9030.h///1238019733/
+/dataflash.h///1238019733/
+/ddr_spd.h///1238019733/
+/devices.h///1238019733/
+/div64.h///1238019733/
+/dm9161.h///1238019733/
+/dp83848.h///1238019733/
+/ds4510.h///1238019733/
+/dtt.h///1238019733/
+/e500.h///1238019733/
+/elf.h///1238019733/
+/environment.h///1238019733/
+/exports.h///1238019733/
+/ext2fs.h///1238019733/
+/fat.h///1238019733/
+/fdc.h///1238019733/
+/fdt.h///1238019733/
+/fdt_support.h///1238019733/
+/fis.h///1238019733/
+/flash.h///1238019733/
+/fpga.h///1238019733/
+/fsl_esdhc.h///1238019733/
+/hush.h///1238019733/
+/i2c.h///1238019733/
+/i8042.h///1238019733/
+/ide.h///1238019733/
+/iomux.h///1238019733/
+/ioports.h///1238019733/
+/keyboard.h///1238019733/
+/kgdb.h///1238019733/
+/lcd.h///1238019733/
+/lcdvideo.h///1238019733/
+/lh7a400.h///1238019733/
+/lh7a404.h///1238019733/
+/lh7a40x.h///1238019733/
+/libata.h///1238019733/
+/libfdt.h///1238019733/
+/libfdt_env.h///1238019733/
+/lmb.h///1238019733/
+/logbuff.h///1238019733/
+/lpd7a400_cpld.h///1238019733/
+/lynxkdi.h///1238019733/
+/malloc.h///1238019733/
+/mb862xx.h///1238019733/
+/mii_phy.h///1238019733/
+/miiphy.h///1238019733/
+/mk48t59.h///1238019733/
+/mmc.h///1238019733/
+/mpc106.h///1238019733/
+/mpc512x.h///1238019733/
+/mpc5xx.h///1238019733/
+/mpc5xxx.h///1238019733/
+/mpc5xxx_sdma.h///1238019733/
+/mpc8220.h///1238019733/
+/mpc824x.h///1238019733/
+/mpc8260.h///1238019733/
+/mpc8260_irq.h///1238019733/
+/mpc83xx.h///1238019733/
+/mpc85xx.h///1238019733/
+/mpc86xx.h///1238019733/
+/mpc8xx.h///1238019733/
+/mpc8xx_irq.h///1238019733/
+/nand.h///1238019733/
+/net.h///1238019733/
+/netdev.h///1238019733/
+/nios-io.h///1238019733/
+/nios.h///1238019733/
+/nios2-epcs.h///1238019733/
+/nios2-io.h///1238019733/
+/nios2.h///1238019733/
+/nomadik.h///1238019733/
+/ns16550.h///1238019733/
+/ns87308.h///1238019733/
+/onenand_uboot.h///1238019733/
+/part.h///1238019733/
+/pc_keyb.h///1238019734/
+/pca953x.h///1238019734/
+/pci.h///1238019734/
+/pci_ids.h///1238019734/
+/pcmcia.h///1238019734/
+/post.h///1238019734/
+/ppc405.h///1238019734/
+/ppc440.h///1238019734/
+/ppc4xx.h///1238019734/
+/ppc4xx_enet.h///1238019734/
+/ppc_asm.tmpl///1238019734/
+/ppc_defs.h///1238019734/
+/ps2mult.h///1238019734/
+/radeon.h///1238019734/
+/reiserfs.h///1238019734/
+/rtc.h///1238019734/
+/s3c2400.h///1238019734/
+/s3c2410.h///1238019734/
+/s3c24x0.h///1238019734/
+/s3c6400.h///1238019734/
+/s3c64x0.h///1238019734/
+/s6e63d6.h///1238019734/
+/s_record.h///1238019734/
+/sa1100.h///1238019734/
+/sata.h///1238019734/
+/scsi.h///1238019734/
+/sed13806.h///1238019734/
+/sed156x.h///1238019734/
+/serial.h///1238019734/
+/sha1.h///1238019734/
+/sha256.h///1238019734/
+/sm501.h///1238019734/
+/smiLynxEM.h///1238019734/
+/spartan2.h///1238019734/
+/spartan3.h///1238019734/
+/spd.h///1238019734/
+/spd_sdram.h///1238019734/
+/spi.h///1238019734/
+/spi_flash.h///1238019734/
+/status_led.h///1238019734/
+/stratixII.h///1238019734/
+/sym53c8xx.h///1238019734/
+/timestamp.h///1238019734/
+/tsec.h///1238019734/
+/tsi108.h///1238019734/
+/ubi_uboot.h///1238019734/
+/universe.h///1238019734/
+/usb.h///1238019734/
+/usb_cdc_acm.h///1238019734/
+/usb_defs.h///1238019734/
+/usbdcore.h///1238019734/
+/usbdcore_ep0.h///1238019734/
+/usbdcore_mpc8xx.h///1238019734/
+/usbdcore_omap1510.h///1238019734/
+/usbdescriptors.h///1238019734/
+/version.h///1238019734/
+/vfd_logo.h///1238019734/
+/video.h///1238019734/
+/video_ad7176.h///1238019734/
+/video_ad7177.h///1238019734/
+/video_ad7179.h///1238019734/
+/video_easylogo.h///1238019734/
+/video_fb.h///1238019734/
+/video_font.h///1238019734/
+/video_logo.h///1238019734/
+/virtex2.h///1238019734/
+/vsc7385.h///1238019734/
+/vxworks.h///1238019734/
+/w83c553f.h///1238019734/
+/watchdog.h///1238019734/
+/xilinx.h///1238019734/
+/xyzModem.h///1238019734/
+/zlib.h///1238019734/
+D/asm-or1200////
+/image.h///1238028708/
+/linux_logo.h///1238019733/
+/lxt971a.h///1238019733/
+/ns7520_eth.h///1238019733/
+/ns9750_bbus.h///1238019733/
+/ns9750_eth.h///1238019733/
+/ns9750_mem.h///1238019733/
+/ns9750_ser.h///1238019733/
+/ns9750_sys.h///1238019733/
+/systemace.h///1238019734/
diff -Naur u-boot-2009.03_orig/include/CVS/Entries.Extra.Old u-boot-2009.03/include/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/CVS/Entries.Extra.Old 2009-03-31 14:58:02.000000000 -0700
@@ -0,0 +1,220 @@
+D/asm-arm////
+D/asm-avr32////
+D/asm-blackfin////
+D/asm-i386////
+D/asm-m68k////
+D/asm-microblaze////
+D/asm-mips////
+D/asm-nios////
+D/asm-nios2////
+D/asm-ppc////
+D/asm-sh////
+D/asm-sparc////
+D/bedbug////
+D/configs////
+D/cramfs////
+D/galileo////
+D/jffs2////
+D/linux////
+D/lzma////
+D/mtd////
+D/pcmcia////
+D/u-boot////
+/.gitignore///1238019733/
+/405_dimm.h///1238019733/
+/405_mal.h///1238019733/
+/4xx_i2c.h///1238019733/
+/74xx_7xx.h///1238019733/
+/ACEX1K.h///1238019733/
+/MCD_dma.h///1238019733/
+/MCD_progCheck.h///1238019733/
+/MCD_tasksInit.h///1238019733/
+/SA-1100.h///1238019734/
+/_exports.h///1238019734/
+/addr_map.h///1238019733/
+/ahci.h///1238019733/
+/altera.h///1238019733/
+/ambapp.h///1238019733/
+/api_public.h///1238019733/
+/arm920t.h///1238019733/
+/arm925t.h///1238019733/
+/arm926ejs.h///1238019733/
+/arm946es.h///1238019733/
+/armcoremodule.h///1238019733/
+/at45.h///1238019733/
+/at91rm9200_i2c.h///1238019733/
+/at91rm9200_net.h///1238019733/
+/ata.h///1238019733/
+/atmel_lcdc.h///1238019733/
+/bcd.h///1238019733/
+/bcm5221.h///1238019733/
+/bmp_layout.h///1238019733/
+/bzlib.h///1238019733/
+/circbuf.h///1238019733/
+/clps7111.h///1238019733/
+/command.h///1238019733/
+/common.h///1238019733/
+/commproc.h///1238019733/
+/config_cmd_all.h///1238019733/
+/config_cmd_default.h///1238019733/
+/console.h///1238019733/
+/crc.h///1238019733/
+/da9030.h///1238019733/
+/dataflash.h///1238019733/
+/ddr_spd.h///1238019733/
+/devices.h///1238019733/
+/div64.h///1238019733/
+/dm9161.h///1238019733/
+/dp83848.h///1238019733/
+/ds4510.h///1238019733/
+/dtt.h///1238019733/
+/e500.h///1238019733/
+/elf.h///1238019733/
+/environment.h///1238019733/
+/exports.h///1238019733/
+/ext2fs.h///1238019733/
+/fat.h///1238019733/
+/fdc.h///1238019733/
+/fdt.h///1238019733/
+/fdt_support.h///1238019733/
+/fis.h///1238019733/
+/flash.h///1238019733/
+/fpga.h///1238019733/
+/fsl_esdhc.h///1238019733/
+/hush.h///1238019733/
+/i2c.h///1238019733/
+/i8042.h///1238019733/
+/ide.h///1238019733/
+/iomux.h///1238019733/
+/ioports.h///1238019733/
+/keyboard.h///1238019733/
+/kgdb.h///1238019733/
+/lcd.h///1238019733/
+/lcdvideo.h///1238019733/
+/lh7a400.h///1238019733/
+/lh7a404.h///1238019733/
+/lh7a40x.h///1238019733/
+/libata.h///1238019733/
+/libfdt.h///1238019733/
+/libfdt_env.h///1238019733/
+/lmb.h///1238019733/
+/logbuff.h///1238019733/
+/lpd7a400_cpld.h///1238019733/
+/lynxkdi.h///1238019733/
+/malloc.h///1238019733/
+/mb862xx.h///1238019733/
+/mii_phy.h///1238019733/
+/miiphy.h///1238019733/
+/mk48t59.h///1238019733/
+/mmc.h///1238019733/
+/mpc106.h///1238019733/
+/mpc512x.h///1238019733/
+/mpc5xx.h///1238019733/
+/mpc5xxx.h///1238019733/
+/mpc5xxx_sdma.h///1238019733/
+/mpc8220.h///1238019733/
+/mpc824x.h///1238019733/
+/mpc8260.h///1238019733/
+/mpc8260_irq.h///1238019733/
+/mpc83xx.h///1238019733/
+/mpc85xx.h///1238019733/
+/mpc86xx.h///1238019733/
+/mpc8xx.h///1238019733/
+/mpc8xx_irq.h///1238019733/
+/nand.h///1238019733/
+/net.h///1238019733/
+/netdev.h///1238019733/
+/nios-io.h///1238019733/
+/nios.h///1238019733/
+/nios2-epcs.h///1238019733/
+/nios2-io.h///1238019733/
+/nios2.h///1238019733/
+/nomadik.h///1238019733/
+/ns16550.h///1238019733/
+/ns87308.h///1238019733/
+/onenand_uboot.h///1238019733/
+/part.h///1238019733/
+/pc_keyb.h///1238019734/
+/pca953x.h///1238019734/
+/pci.h///1238019734/
+/pci_ids.h///1238019734/
+/pcmcia.h///1238019734/
+/post.h///1238019734/
+/ppc405.h///1238019734/
+/ppc440.h///1238019734/
+/ppc4xx.h///1238019734/
+/ppc4xx_enet.h///1238019734/
+/ppc_asm.tmpl///1238019734/
+/ppc_defs.h///1238019734/
+/ps2mult.h///1238019734/
+/radeon.h///1238019734/
+/reiserfs.h///1238019734/
+/rtc.h///1238019734/
+/s3c2400.h///1238019734/
+/s3c2410.h///1238019734/
+/s3c24x0.h///1238019734/
+/s3c6400.h///1238019734/
+/s3c64x0.h///1238019734/
+/s6e63d6.h///1238019734/
+/s_record.h///1238019734/
+/sa1100.h///1238019734/
+/sata.h///1238019734/
+/scsi.h///1238019734/
+/sed13806.h///1238019734/
+/sed156x.h///1238019734/
+/serial.h///1238019734/
+/sha1.h///1238019734/
+/sha256.h///1238019734/
+/sm501.h///1238019734/
+/smiLynxEM.h///1238019734/
+/spartan2.h///1238019734/
+/spartan3.h///1238019734/
+/spd.h///1238019734/
+/spd_sdram.h///1238019734/
+/spi.h///1238019734/
+/spi_flash.h///1238019734/
+/status_led.h///1238019734/
+/stratixII.h///1238019734/
+/sym53c8xx.h///1238019734/
+/timestamp.h///1238019734/
+/tsec.h///1238019734/
+/tsi108.h///1238019734/
+/ubi_uboot.h///1238019734/
+/universe.h///1238019734/
+/usb.h///1238019734/
+/usb_cdc_acm.h///1238019734/
+/usb_defs.h///1238019734/
+/usbdcore.h///1238019734/
+/usbdcore_ep0.h///1238019734/
+/usbdcore_mpc8xx.h///1238019734/
+/usbdcore_omap1510.h///1238019734/
+/usbdescriptors.h///1238019734/
+/version.h///1238019734/
+/vfd_logo.h///1238019734/
+/video.h///1238019734/
+/video_ad7176.h///1238019734/
+/video_ad7177.h///1238019734/
+/video_ad7179.h///1238019734/
+/video_easylogo.h///1238019734/
+/video_fb.h///1238019734/
+/video_font.h///1238019734/
+/video_logo.h///1238019734/
+/virtex2.h///1238019734/
+/vsc7385.h///1238019734/
+/vxworks.h///1238019734/
+/w83c553f.h///1238019734/
+/watchdog.h///1238019734/
+/xilinx.h///1238019734/
+/xyzModem.h///1238019734/
+/zlib.h///1238019734/
+D/asm-or1200////
+/image.h///1238028708/
+/systemace.h///1238028709/
+/linux_logo.h///1238019733/
+/lxt971a.h///1238019733/
+/ns7520_eth.h///1238019733/
+/ns9750_bbus.h///1238019733/
+/ns9750_eth.h///1238019733/
+/ns9750_mem.h///1238019733/
+/ns9750_ser.h///1238019733/
+/ns9750_sys.h///1238019733/
diff -Naur u-boot-2009.03_orig/include/CVS/Entries.Old u-boot-2009.03/include/CVS/Entries.Old
--- u-boot-2009.03_orig/include/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/CVS/Entries.Old 2009-03-31 14:58:02.000000000 -0700
@@ -0,0 +1,220 @@
+D/asm-arm////
+D/asm-avr32////
+D/asm-blackfin////
+D/asm-i386////
+D/asm-m68k////
+D/asm-microblaze////
+D/asm-mips////
+D/asm-nios////
+D/asm-nios2////
+D/asm-ppc////
+D/asm-sh////
+D/asm-sparc////
+D/bedbug////
+D/configs////
+D/cramfs////
+D/galileo////
+D/jffs2////
+D/linux////
+D/lzma////
+D/mtd////
+D/pcmcia////
+D/u-boot////
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/405_dimm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/405_mal.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/74xx_7xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ACEX1K.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_dma.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_progCheck.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MCD_tasksInit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SA-1100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_exports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/addr_map.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ahci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/altera.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ambapp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/api_public.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm920t.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm925t.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm926ejs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/arm946es.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/armcoremodule.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at45.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91rm9200_i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91rm9200_net.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atmel_lcdc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bcm5221.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bmp_layout.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/circbuf.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clps7111.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/command.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/commproc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config_cmd_all.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config_cmd_default.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/console.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/da9030.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dataflash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr_spd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/devices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/div64.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dm9161.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dp83848.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ds4510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dtt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/e500.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/elf.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/environment.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/exports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ext2fs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_support.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fis.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_esdhc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hush.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i8042.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ide.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iomux.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ioports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/keyboard.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcdvideo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lh7a400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lh7a404.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lh7a40x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libfdt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libfdt_env.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lmb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logbuff.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a400_cpld.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lynxkdi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/malloc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mb862xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mii_phy.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/miiphy.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mk48t59.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc106.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc512x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc5xxx_sdma.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8220.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc824x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8260_irq.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc83xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc85xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc86xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xx_irq.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/net.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netdev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios-io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2-epcs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2-io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nios2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nomadik.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns16550.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns87308.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_uboot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/part.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pc_keyb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pca953x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_ids.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcmcia.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx_enet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_asm.tmpl/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ps2mult.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/radeon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reiserfs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c2400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c2410.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c24x0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c6400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c64x0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s6e63d6.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s_record.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sa1100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scsi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sed13806.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sed156x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/serial.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sha1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sha256.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sm501.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smiLynxEM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spartan2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spartan3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spd_sdram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi_flash.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/status_led.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stratixII.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sym53c8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timestamp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tsi108.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubi_uboot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/universe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_cdc_acm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_ep0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_mpc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdcore_omap1510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usbdescriptors.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/version.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vfd_logo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_ad7176.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_ad7177.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_ad7179.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_easylogo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_fb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_font.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_logo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/virtex2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vsc7385.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vxworks.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/w83c553f.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xyzModem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zlib.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D/asm-or1200////
+/image.h/1.2/Wed Mar 25 23:04:34 2009//
+/systemace.h/1.2/Thu Mar 26 00:51:49 2009//
+/linux_logo.h/1.1.1.1/Tue Mar 31 21:57:41 2009//T1.1.1.1
+/lxt971a.h/1.1.1.1/Tue Mar 31 21:57:41 2009//T1.1.1.1
+/ns7520_eth.h/1.1.1.1/Tue Mar 31 21:58:01 2009//T1.1.1.1
+/ns9750_bbus.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_eth.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_mem.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_ser.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
+/ns9750_sys.h/1.1.1.1/Tue Mar 31 21:58:02 2009//T1.1.1.1
diff -Naur u-boot-2009.03_orig/include/CVS/Repository u-boot-2009.03/include/CVS/Repository
--- u-boot-2009.03_orig/include/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/CVS/Repository 2009-03-25 15:25:35.899838500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include
diff -Naur u-boot-2009.03_orig/include/CVS/Root u-boot-2009.03/include/CVS/Root
--- u-boot-2009.03_orig/include/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/CVS/Root 2009-03-25 15:25:35.899838500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/CVS/Entries u-boot-2009.03/include/asm-arm/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/CVS/Entries 2009-03-25 15:58:07.949845300 -0700
@@ -0,0 +1,40 @@
+D/arch-arm720t////
+D/arch-arm925t////
+D/arch-arm926ejs////
+D/arch-at91////
+D/arch-at91rm9200////
+D/arch-davinci////
+D/arch-imx////
+D/arch-ixp////
+D/arch-ks8695////
+D/arch-lpc2292////
+D/arch-mx31////
+D/arch-omap////
+D/arch-omap24xx////
+D/arch-omap3////
+D/arch-pxa////
+D/arch-s3c24x0////
+D/arch-s3c44b0////
+D/arch-s3c64xx////
+D/arch-sa1100////
+D/proc-armv////
+/atomic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dma-mapping.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mach-types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/setup.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sizes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-arm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/asm-arm/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/CVS/Entries.Extra 2009-03-25 15:58:07.949845300 -0700
@@ -0,0 +1,40 @@
+D/arch-arm720t////
+D/arch-arm925t////
+D/arch-arm926ejs////
+D/arch-at91////
+D/arch-at91rm9200////
+D/arch-davinci////
+D/arch-imx////
+D/arch-ixp////
+D/arch-ks8695////
+D/arch-lpc2292////
+D/arch-mx31////
+D/arch-omap////
+D/arch-omap24xx////
+D/arch-omap3////
+D/arch-pxa////
+D/arch-s3c24x0////
+D/arch-s3c44b0////
+D/arch-s3c64xx////
+D/arch-sa1100////
+D/proc-armv////
+/atomic.h///1238019734/
+/bitops.h///1238019734/
+/byteorder.h///1238019734/
+/config.h///1238019734/
+/dma-mapping.h///1238019734/
+/errno.h///1238019734/
+/global_data.h///1238019734/
+/hardware.h///1238019734/
+/io.h///1238019734/
+/mach-types.h///1238019734/
+/memory.h///1238019735/
+/posix_types.h///1238019735/
+/processor.h///1238019735/
+/ptrace.h///1238019735/
+/setup.h///1238019735/
+/sizes.h///1238019735/
+/string.h///1238019735/
+/types.h///1238019735/
+/u-boot-arm.h///1238019735/
+/u-boot.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/CVS/Entries.Extra.Old 2009-03-25 15:25:41.000000000 -0700
@@ -0,0 +1,40 @@
+/atomic.h///1238019734/
+/bitops.h///1238019734/
+/byteorder.h///1238019734/
+/config.h///1238019734/
+/dma-mapping.h///1238019734/
+/errno.h///1238019734/
+/global_data.h///1238019734/
+/hardware.h///1238019734/
+/io.h///1238019734/
+/mach-types.h///1238019734/
+/memory.h///1238019735/
+/posix_types.h///1238019735/
+/processor.h///1238019735/
+/ptrace.h///1238019735/
+/setup.h///1238019735/
+/sizes.h///1238019735/
+/string.h///1238019735/
+/types.h///1238019735/
+/u-boot-arm.h///1238019735/
+/u-boot.h///1238019735/
+D/arch-arm720t////
+D/arch-arm925t////
+D/arch-arm926ejs////
+D/arch-at91////
+D/arch-at91rm9200////
+D/arch-davinci////
+D/arch-imx////
+D/arch-ixp////
+D/arch-ks8695////
+D/arch-lpc2292////
+D/arch-mx31////
+D/arch-omap////
+D/arch-omap24xx////
+D/arch-omap3////
+D/arch-pxa////
+D/arch-s3c24x0////
+D/arch-s3c44b0////
+D/arch-s3c64xx////
+D/arch-sa1100////
+D/proc-armv////
diff -Naur u-boot-2009.03_orig/include/asm-arm/CVS/Entries.Old u-boot-2009.03/include/asm-arm/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/CVS/Entries.Old 2009-03-25 15:25:41.000000000 -0700
@@ -0,0 +1,40 @@
+/atomic.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/dma-mapping.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/errno.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/mach-types.h/1.1.1.1/Wed Mar 25 22:22:14 2009//
+/memory.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/setup.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/sizes.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/u-boot-arm.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D/arch-arm720t////
+D/arch-arm925t////
+D/arch-arm926ejs////
+D/arch-at91////
+D/arch-at91rm9200////
+D/arch-davinci////
+D/arch-imx////
+D/arch-ixp////
+D/arch-ks8695////
+D/arch-lpc2292////
+D/arch-mx31////
+D/arch-omap////
+D/arch-omap24xx////
+D/arch-omap3////
+D/arch-pxa////
+D/arch-s3c24x0////
+D/arch-s3c44b0////
+D/arch-s3c64xx////
+D/arch-sa1100////
+D/proc-armv////
diff -Naur u-boot-2009.03_orig/include/asm-arm/CVS/Repository u-boot-2009.03/include/asm-arm/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/CVS/Repository 2009-03-25 15:25:37.852951000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm
diff -Naur u-boot-2009.03_orig/include/asm-arm/CVS/Root u-boot-2009.03/include/asm-arm/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/CVS/Root 2009-03-25 15:25:37.852951000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries 2009-03-25 15:58:06.481104700 -0700
@@ -0,0 +1,10 @@
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_dma_module.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_eni_module.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_eth_module.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_gen_module.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_mem_module.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_registers.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netarm_ser_module.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/s3c4510b.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries.Extra 2009-03-25 15:58:06.496729600 -0700
@@ -0,0 +1,9 @@
+/hardware.h///1238019735/
+/netarm_dma_module.h///1238019735/
+/netarm_eni_module.h///1238019735/
+/netarm_eth_module.h///1238019735/
+/netarm_gen_module.h///1238019735/
+/netarm_mem_module.h///1238019735/
+/netarm_registers.h///1238019735/
+/netarm_ser_module.h///1238019735/
+/s3c4510b.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries.Extra.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1,9 @@
+/hardware.h///1238019735/
+/netarm_dma_module.h///1238019735/
+/netarm_eni_module.h///1238019735/
+/netarm_eth_module.h///1238019735/
+/netarm_gen_module.h///1238019735/
+/netarm_mem_module.h///1238019735/
+/netarm_registers.h///1238019735/
+/netarm_ser_module.h///1238019735/
+/s3c4510b.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Entries.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1,10 @@
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/netarm_dma_module.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/netarm_eni_module.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/netarm_eth_module.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/netarm_gen_module.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/netarm_mem_module.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/netarm_registers.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/netarm_ser_module.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/s3c4510b.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Repository u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Repository 2009-03-25 15:25:38.071699600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-arm720t
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Root u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-arm720t/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm720t/CVS/Root 2009-03-25 15:25:38.071699600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries 2009-03-25 15:58:06.559229200 -0700
@@ -0,0 +1,2 @@
+/sizes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries.Extra 2009-03-25 15:58:06.574854100 -0700
@@ -0,0 +1 @@
+/sizes.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries.Extra.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1 @@
+/sizes.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Entries.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1,2 @@
+/sizes.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Repository u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Repository 2009-03-25 15:25:38.462322100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-arm925t
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Root u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-arm925t/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm925t/CVS/Root 2009-03-25 15:25:38.368572700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries 2009-03-25 15:58:06.621728800 -0700
@@ -0,0 +1,2 @@
+/sizes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra 2009-03-25 15:58:06.637353700 -0700
@@ -0,0 +1 @@
+/sizes.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries.Extra.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1 @@
+/sizes.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Entries.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1,2 @@
+/sizes.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Repository u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Repository 2009-03-25 15:25:38.696695600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-arm926ejs
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Root u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-arm926ejs/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-arm926ejs/CVS/Root 2009-03-25 15:25:38.696695600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries 2009-03-25 15:58:06.762352900 -0700
@@ -0,0 +1,22 @@
+/at91_pio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91_pit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91_pmc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91_rstc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91_spi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91cap9.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91cap9_matrix.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9260_matrix.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9261.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9261_matrix.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9263.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9263_matrix.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9_smc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9rl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9rl_matrix.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gpio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory-map.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries.Extra 2009-03-25 15:58:06.762352900 -0700
@@ -0,0 +1,21 @@
+/at91_pio.h///1238019735/
+/at91_pit.h///1238019735/
+/at91_pmc.h///1238019735/
+/at91_rstc.h///1238019735/
+/at91_spi.h///1238019735/
+/at91cap9.h///1238019735/
+/at91cap9_matrix.h///1238019735/
+/at91sam9260.h///1238019735/
+/at91sam9260_matrix.h///1238019735/
+/at91sam9261.h///1238019735/
+/at91sam9261_matrix.h///1238019735/
+/at91sam9263.h///1238019735/
+/at91sam9263_matrix.h///1238019735/
+/at91sam9_smc.h///1238019735/
+/at91sam9rl.h///1238019735/
+/at91sam9rl_matrix.h///1238019735/
+/clk.h///1238019735/
+/gpio.h///1238019735/
+/hardware.h///1238019735/
+/io.h///1238019735/
+/memory-map.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries.Extra.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1,21 @@
+/at91_pio.h///1238019735/
+/at91_pit.h///1238019735/
+/at91_pmc.h///1238019735/
+/at91_rstc.h///1238019735/
+/at91_spi.h///1238019735/
+/at91cap9.h///1238019735/
+/at91cap9_matrix.h///1238019735/
+/at91sam9260.h///1238019735/
+/at91sam9260_matrix.h///1238019735/
+/at91sam9261.h///1238019735/
+/at91sam9261_matrix.h///1238019735/
+/at91sam9263.h///1238019735/
+/at91sam9263_matrix.h///1238019735/
+/at91sam9_smc.h///1238019735/
+/at91sam9rl.h///1238019735/
+/at91sam9rl_matrix.h///1238019735/
+/clk.h///1238019735/
+/gpio.h///1238019735/
+/hardware.h///1238019735/
+/io.h///1238019735/
+/memory-map.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91/CVS/Entries.Old 2009-03-25 15:25:38.000000000 -0700
@@ -0,0 +1,22 @@
+/at91_pio.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91_pit.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91_pmc.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91_rstc.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91_spi.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91cap9.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91cap9_matrix.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9260.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9260_matrix.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9261.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9261_matrix.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9263.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9263_matrix.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9_smc.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9rl.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/at91sam9rl_matrix.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/clk.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/gpio.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/memory-map.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Repository u-boot-2009.03/include/asm-arm/arch-at91/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91/CVS/Repository 2009-03-25 15:25:38.774820100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-at91
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Root u-boot-2009.03/include/asm-arm/arch-at91/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-at91/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91/CVS/Root 2009-03-25 15:25:38.774820100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries 2009-03-25 15:58:06.840477400 -0700
@@ -0,0 +1,3 @@
+/AT91RM9200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra 2009-03-25 15:58:06.840477400 -0700
@@ -0,0 +1,2 @@
+/AT91RM9200.h///1238019735/
+/hardware.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries.Extra.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,2 @@
+/AT91RM9200.h///1238019735/
+/hardware.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Entries.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,3 @@
+/AT91RM9200.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Repository u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Repository 2009-03-25 15:25:39.024818500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-at91rm9200
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Root u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-at91rm9200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-at91rm9200/CVS/Root 2009-03-25 15:25:39.024818500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries 2009-03-25 15:58:06.902977000 -0700
@@ -0,0 +1,6 @@
+/emac_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/emif_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_defs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries.Extra 2009-03-25 15:58:06.902977000 -0700
@@ -0,0 +1,5 @@
+/emac_defs.h///1238019735/
+/emif_defs.h///1238019735/
+/hardware.h///1238019735/
+/i2c_defs.h///1238019735/
+/nand_defs.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries.Extra.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,5 @@
+/emac_defs.h///1238019735/
+/emif_defs.h///1238019735/
+/hardware.h///1238019735/
+/i2c_defs.h///1238019735/
+/nand_defs.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Entries.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,6 @@
+/emac_defs.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/emif_defs.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/i2c_defs.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/nand_defs.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Repository u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Repository 2009-03-25 15:25:39.102943000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-davinci
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Root u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-davinci/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-davinci/CVS/Root 2009-03-25 15:25:39.102943000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries 2009-03-25 15:58:06.965476600 -0700
@@ -0,0 +1,2 @@
+/imx-regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries.Extra 2009-03-25 15:58:06.965476600 -0700
@@ -0,0 +1 @@
+/imx-regs.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries.Extra.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1 @@
+/imx-regs.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-imx/CVS/Entries.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,2 @@
+/imx-regs.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Repository u-boot-2009.03/include/asm-arm/arch-imx/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-imx/CVS/Repository 2009-03-25 15:25:39.243567100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-imx
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Root u-boot-2009.03/include/asm-arm/arch-imx/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-imx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-imx/CVS/Root 2009-03-25 15:25:39.227942200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries 2009-03-25 15:58:07.027976200 -0700
@@ -0,0 +1,3 @@
+/ixp425.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ixp425pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries.Extra 2009-03-25 15:58:07.027976200 -0700
@@ -0,0 +1,2 @@
+/ixp425.h///1238019735/
+/ixp425pci.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries.Extra.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,2 @@
+/ixp425.h///1238019735/
+/ixp425pci.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Entries.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,3 @@
+/ixp425.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/ixp425pci.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Repository u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Repository 2009-03-25 15:25:39.306066700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-ixp
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Root u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-ixp/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ixp/CVS/Root 2009-03-25 15:25:39.306066700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries 2009-03-25 15:58:07.168600300 -0700
@@ -0,0 +1,2 @@
+/platform.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries.Extra 2009-03-25 15:58:07.168600300 -0700
@@ -0,0 +1 @@
+/platform.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries.Extra.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1 @@
+/platform.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Entries.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,2 @@
+/platform.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Repository u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Repository 2009-03-25 15:25:39.618564700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-ks8695
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Root u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-ks8695/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-ks8695/CVS/Root 2009-03-25 15:25:39.618564700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries 2009-03-25 15:58:07.231099900 -0700
@@ -0,0 +1,4 @@
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpc2292_registers.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries.Extra 2009-03-25 15:58:07.231099900 -0700
@@ -0,0 +1,3 @@
+/hardware.h///1238019735/
+/lpc2292_registers.h///1238019735/
+/spi.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries.Extra.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,3 @@
+/hardware.h///1238019735/
+/lpc2292_registers.h///1238019735/
+/spi.h///1238019735/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Entries.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,4 @@
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/lpc2292_registers.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+/spi.h/1.1.1.1/Wed Mar 25 22:22:15 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Repository u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Repository 2009-03-25 15:25:39.806063500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-lpc2292
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Root u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-lpc2292/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-lpc2292/CVS/Root 2009-03-25 15:25:39.806063500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries 2009-03-25 15:58:07.277974600 -0700
@@ -0,0 +1,3 @@
+/mx31-regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx31.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries.Extra 2009-03-25 15:58:07.293599500 -0700
@@ -0,0 +1,2 @@
+/mx31-regs.h///1238019736/
+/mx31.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries.Extra.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,2 @@
+/mx31-regs.h///1238019736/
+/mx31.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Entries.Old 2009-03-25 15:25:39.000000000 -0700
@@ -0,0 +1,3 @@
+/mx31-regs.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/mx31.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Repository u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Repository 2009-03-25 15:25:39.915437800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-mx31
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Root u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-mx31/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-mx31/CVS/Root 2009-03-25 15:25:39.899812900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries 2009-03-25 15:58:07.340474200 -0700
@@ -0,0 +1,2 @@
+/sizes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries.Extra 2009-03-25 15:58:07.340474200 -0700
@@ -0,0 +1 @@
+/sizes.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1 @@
+/sizes.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,2 @@
+/sizes.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Repository u-boot-2009.03/include/asm-arm/arch-omap/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap/CVS/Repository 2009-03-25 15:25:39.993562300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-omap
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Root u-boot-2009.03/include/asm-arm/arch-omap/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-omap/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap/CVS/Root 2009-03-25 15:25:39.993562300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries 2009-03-25 15:58:07.418598700 -0700
@@ -0,0 +1,10 @@
+/bits.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clocks.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mux.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap2420.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sizes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys_info.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys_proto.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries.Extra 2009-03-25 15:58:07.418598700 -0700
@@ -0,0 +1,9 @@
+/bits.h///1238019736/
+/clocks.h///1238019736/
+/i2c.h///1238019736/
+/mem.h///1238019736/
+/mux.h///1238019736/
+/omap2420.h///1238019736/
+/sizes.h///1238019736/
+/sys_info.h///1238019736/
+/sys_proto.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,9 @@
+/bits.h///1238019736/
+/clocks.h///1238019736/
+/i2c.h///1238019736/
+/mem.h///1238019736/
+/mux.h///1238019736/
+/omap2420.h///1238019736/
+/sizes.h///1238019736/
+/sys_info.h///1238019736/
+/sys_proto.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,10 @@
+/bits.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/clocks.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/i2c.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/mem.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/mux.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/omap2420.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/sizes.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/sys_info.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/sys_proto.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Repository u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Repository 2009-03-25 15:25:40.056061900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-omap24xx
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Root u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-omap24xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap24xx/CVS/Root 2009-03-25 15:25:40.056061900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries 2009-03-25 15:58:07.512348100 -0700
@@ -0,0 +1,12 @@
+/clocks.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clocks_omap3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mem.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc_host_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mux.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap_gpmc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sys_proto.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries.Extra 2009-03-25 15:58:07.512348100 -0700
@@ -0,0 +1,11 @@
+/clocks.h///1238019736/
+/clocks_omap3.h///1238019736/
+/cpu.h///1238019736/
+/i2c.h///1238019736/
+/mem.h///1238019736/
+/mmc.h///1238019736/
+/mmc_host_def.h///1238019736/
+/mux.h///1238019736/
+/omap3.h///1238019736/
+/omap_gpmc.h///1238019736/
+/sys_proto.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,11 @@
+/clocks.h///1238019736/
+/clocks_omap3.h///1238019736/
+/cpu.h///1238019736/
+/i2c.h///1238019736/
+/mem.h///1238019736/
+/mmc.h///1238019736/
+/mmc_host_def.h///1238019736/
+/mux.h///1238019736/
+/omap3.h///1238019736/
+/omap_gpmc.h///1238019736/
+/sys_proto.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,12 @@
+/clocks.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/clocks_omap3.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/cpu.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/i2c.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/mem.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/mmc.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/mmc_host_def.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/mux.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/omap3.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/omap_gpmc.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/sys_proto.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Repository u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Repository 2009-03-25 15:25:40.212310900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-omap3
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Root u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-omap3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-omap3/CVS/Root 2009-03-25 15:25:40.212310900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries 2009-03-25 15:58:07.590472600 -0700
@@ -0,0 +1,4 @@
+/bitfield.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa-regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries.Extra 2009-03-25 15:58:07.590472600 -0700
@@ -0,0 +1,3 @@
+/bitfield.h///1238019736/
+/hardware.h///1238019736/
+/pxa-regs.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,3 @@
+/bitfield.h///1238019736/
+/hardware.h///1238019736/
+/pxa-regs.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,4 @@
+/bitfield.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/pxa-regs.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Repository u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Repository 2009-03-25 15:25:40.602933400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-pxa
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Root u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-pxa/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-pxa/CVS/Root 2009-03-25 15:25:40.571683600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries 2009-03-25 15:58:07.652972200 -0700
@@ -0,0 +1,2 @@
+/memory.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra 2009-03-25 15:58:07.652972200 -0700
@@ -0,0 +1 @@
+/memory.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1 @@
+/memory.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,2 @@
+/memory.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Repository u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Repository 2009-03-25 15:25:40.712307700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-s3c24x0
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Root u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c24x0/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c24x0/CVS/Root 2009-03-25 15:25:40.712307700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries 2009-03-25 15:58:07.715471800 -0700
@@ -0,0 +1,2 @@
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra 2009-03-25 15:58:07.715471800 -0700
@@ -0,0 +1 @@
+/hardware.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1 @@
+/hardware.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,2 @@
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Repository u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Repository 2009-03-25 15:25:40.806057100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-s3c44b0
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Root u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c44b0/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c44b0/CVS/Root 2009-03-25 15:25:40.806057100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries 2009-03-25 15:58:07.777971400 -0700
@@ -0,0 +1,2 @@
+/hardware.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra 2009-03-25 15:58:07.777971400 -0700
@@ -0,0 +1 @@
+/hardware.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1 @@
+/hardware.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,2 @@
+/hardware.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Repository u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Repository 2009-03-25 15:25:40.884181600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-s3c64xx
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Root u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-s3c64xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-s3c64xx/CVS/Root 2009-03-25 15:25:40.884181600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries 2009-03-25 15:58:07.840471000 -0700
@@ -0,0 +1,2 @@
+/bitfield.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries.Extra 2009-03-25 15:58:07.840471000 -0700
@@ -0,0 +1 @@
+/bitfield.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries.Extra.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1 @@
+/bitfield.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries.Old u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Entries.Old 2009-03-25 15:25:40.000000000 -0700
@@ -0,0 +1,2 @@
+/bitfield.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Repository u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Repository 2009-03-25 15:25:40.946681200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/arch-sa1100
diff -Naur u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Root u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/arch-sa1100/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/arch-sa1100/CVS/Root 2009-03-25 15:25:40.946681200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries
--- u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries 2009-03-25 15:58:07.902970600 -0700
@@ -0,0 +1,5 @@
+/domain.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries.Extra u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries.Extra 2009-03-25 15:58:07.918595500 -0700
@@ -0,0 +1,4 @@
+/domain.h///1238019736/
+/processor.h///1238019736/
+/ptrace.h///1238019736/
+/system.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries.Extra.Old 2009-03-25 15:25:41.000000000 -0700
@@ -0,0 +1,4 @@
+/domain.h///1238019736/
+/processor.h///1238019736/
+/ptrace.h///1238019736/
+/system.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries.Old u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/proc-armv/CVS/Entries.Old 2009-03-25 15:25:41.000000000 -0700
@@ -0,0 +1,5 @@
+/domain.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/system.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Repository u-boot-2009.03/include/asm-arm/proc-armv/CVS/Repository
--- u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/proc-armv/CVS/Repository 2009-03-25 15:25:41.040430600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-arm/proc-armv
diff -Naur u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Root u-boot-2009.03/include/asm-arm/proc-armv/CVS/Root
--- u-boot-2009.03_orig/include/asm-arm/proc-armv/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-arm/proc-armv/CVS/Root 2009-03-25 15:25:41.040430600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-avr32/CVS/Entries u-boot-2009.03/include/asm-avr32/CVS/Entries
--- u-boot-2009.03_orig/include/asm-avr32/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/CVS/Entries 2009-03-25 15:58:08.152969000 -0700
@@ -0,0 +1,22 @@
+D/arch-at32ap700x////
+/addrspace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cacheflush.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dma-mapping.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hmatrix-common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/initcalls.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sections.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/setup.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sysreg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/asm-avr32/CVS/Entries.Extra u-boot-2009.03/include/asm-avr32/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-avr32/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/CVS/Entries.Extra 2009-03-25 15:58:08.152969000 -0700
@@ -0,0 +1,22 @@
+D/arch-at32ap700x////
+/addrspace.h///1238019736/
+/bitops.h///1238019736/
+/byteorder.h///1238019736/
+/cacheflush.h///1238019736/
+/config.h///1238019736/
+/dma-mapping.h///1238019736/
+/errno.h///1238019736/
+/global_data.h///1238019736/
+/hmatrix-common.h///1238019736/
+/initcalls.h///1238019736/
+/io.h///1238019736/
+/posix_types.h///1238019736/
+/processor.h///1238019736/
+/ptrace.h///1238019736/
+/sdram.h///1238019736/
+/sections.h///1238019736/
+/setup.h///1238019736/
+/string.h///1238019736/
+/sysreg.h///1238019736/
+/types.h///1238019736/
+/u-boot.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-avr32/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-avr32/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-avr32/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/CVS/Entries.Extra.Old 2009-03-25 15:25:42.000000000 -0700
@@ -0,0 +1,22 @@
+/addrspace.h///1238019736/
+/bitops.h///1238019736/
+/byteorder.h///1238019736/
+/cacheflush.h///1238019736/
+/config.h///1238019736/
+/dma-mapping.h///1238019736/
+/errno.h///1238019736/
+/global_data.h///1238019736/
+/hmatrix-common.h///1238019736/
+/initcalls.h///1238019736/
+/io.h///1238019736/
+/posix_types.h///1238019736/
+/processor.h///1238019736/
+/ptrace.h///1238019736/
+/sdram.h///1238019736/
+/sections.h///1238019736/
+/setup.h///1238019736/
+/string.h///1238019736/
+/sysreg.h///1238019736/
+/types.h///1238019736/
+/u-boot.h///1238019736/
+D/arch-at32ap700x////
diff -Naur u-boot-2009.03_orig/include/asm-avr32/CVS/Entries.Old u-boot-2009.03/include/asm-avr32/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-avr32/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/CVS/Entries.Old 2009-03-25 15:25:42.000000000 -0700
@@ -0,0 +1,22 @@
+/addrspace.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/cacheflush.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/dma-mapping.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/errno.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/hmatrix-common.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/initcalls.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/sdram.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/sections.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/setup.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/sysreg.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D/arch-at32ap700x////
diff -Naur u-boot-2009.03_orig/include/asm-avr32/CVS/Repository u-boot-2009.03/include/asm-avr32/CVS/Repository
--- u-boot-2009.03_orig/include/asm-avr32/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/CVS/Repository 2009-03-25 15:25:41.196679600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-avr32
diff -Naur u-boot-2009.03_orig/include/asm-avr32/CVS/Root u-boot-2009.03/include/asm-avr32/CVS/Root
--- u-boot-2009.03_orig/include/asm-avr32/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/CVS/Root 2009-03-25 15:25:41.196679600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries
--- u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries 2009-03-25 15:58:08.106094300 -0700
@@ -0,0 +1,6 @@
+/chip-features.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gpio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hmatrix.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory-map.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra 2009-03-25 15:58:08.106094300 -0700
@@ -0,0 +1,5 @@
+/chip-features.h///1238019736/
+/clk.h///1238019736/
+/gpio.h///1238019736/
+/hmatrix.h///1238019736/
+/memory-map.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries.Extra.Old 2009-03-25 15:25:42.000000000 -0700
@@ -0,0 +1,5 @@
+/chip-features.h///1238019736/
+/clk.h///1238019736/
+/gpio.h///1238019736/
+/hmatrix.h///1238019736/
+/memory-map.h///1238019736/
diff -Naur u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries.Old u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Entries.Old 2009-03-25 15:25:42.000000000 -0700
@@ -0,0 +1,6 @@
+/chip-features.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/clk.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/gpio.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/hmatrix.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/memory-map.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Repository u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Repository
--- u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Repository 2009-03-25 15:25:41.446678000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-avr32/arch-at32ap700x
diff -Naur u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Root u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Root
--- u-boot-2009.03_orig/include/asm-avr32/arch-at32ap700x/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-avr32/arch-at32ap700x/CVS/Root 2009-03-25 15:25:41.399803300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries u-boot-2009.03/include/asm-blackfin/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/CVS/Entries 2009-03-25 15:58:09.293586700 -0700
@@ -0,0 +1,33 @@
+D/mach-bf527////
+D/mach-bf533////
+D/mach-bf537////
+D/mach-bf548////
+D/mach-bf561////
+D/mach-common////
+/bfin_logo_230x230.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin-config-post.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin-config-pre.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blackfin_local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cplb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/delay.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/entry.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/linkage.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/shared_resources.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/CVS/Entries.Extra 2009-03-25 15:58:09.293586700 -0700
@@ -0,0 +1,33 @@
+D/mach-bf527////
+D/mach-bf533////
+D/mach-bf537////
+D/mach-bf548////
+D/mach-bf561////
+D/mach-common////
+/bfin_logo_230x230.h///1238019736/
+/bitops.h///1238019736/
+/blackfin-config-post.h///1238019736/
+/blackfin-config-pre.h///1238019736/
+/blackfin.h///1238019736/
+/blackfin_cdef.h///1238019736/
+/blackfin_def.h///1238019736/
+/blackfin_local.h///1238019736/
+/byteorder.h///1238019736/
+/config.h///1238019736/
+/cplb.h///1238019736/
+/delay.h///1238019736/
+/entry.h///1238019736/
+/errno.h///1238019736/
+/global_data.h///1238019736/
+/io.h///1238019736/
+/linkage.h///1238019737/
+/mmc.h///1238019737/
+/posix_types.h///1238019737/
+/processor.h///1238019737/
+/ptrace.h///1238019737/
+/shared_resources.h///1238019737/
+/string.h///1238019737/
+/system.h///1238019737/
+/traps.h///1238019737/
+/types.h///1238019737/
+/u-boot.h///1238019737/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/CVS/Entries.Extra.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,33 @@
+/bfin_logo_230x230.h///1238019736/
+/bitops.h///1238019736/
+/blackfin-config-post.h///1238019736/
+/blackfin-config-pre.h///1238019736/
+/blackfin.h///1238019736/
+/blackfin_cdef.h///1238019736/
+/blackfin_def.h///1238019736/
+/blackfin_local.h///1238019736/
+/byteorder.h///1238019736/
+/config.h///1238019736/
+/cplb.h///1238019736/
+/delay.h///1238019736/
+/entry.h///1238019736/
+/errno.h///1238019736/
+/global_data.h///1238019736/
+/io.h///1238019736/
+/linkage.h///1238019737/
+/mmc.h///1238019737/
+/posix_types.h///1238019737/
+/processor.h///1238019737/
+/ptrace.h///1238019737/
+/shared_resources.h///1238019737/
+/string.h///1238019737/
+/system.h///1238019737/
+/traps.h///1238019737/
+/types.h///1238019737/
+/u-boot.h///1238019737/
+D/mach-bf527////
+D/mach-bf533////
+D/mach-bf537////
+D/mach-bf548////
+D/mach-bf561////
+D/mach-common////
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/CVS/Entries.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,33 @@
+/bfin_logo_230x230.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/blackfin-config-post.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/blackfin-config-pre.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/blackfin.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/blackfin_cdef.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/blackfin_def.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/blackfin_local.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/cplb.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/delay.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/entry.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/errno.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:16 2009//
+/linkage.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/mmc.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/shared_resources.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/system.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/traps.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+D/mach-bf527////
+D/mach-bf533////
+D/mach-bf537////
+D/mach-bf548////
+D/mach-bf561////
+D/mach-common////
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/CVS/Repository u-boot-2009.03/include/asm-blackfin/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/CVS/Repository 2009-03-25 15:25:42.790419400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/CVS/Root u-boot-2009.03/include/asm-blackfin/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/CVS/Root 2009-03-25 15:25:42.790419400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries 2009-03-25 15:58:08.371717600 -0700
@@ -0,0 +1,18 @@
+/ADSP-EDN-BF52x-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF52x-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF522_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF522_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF523_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF523_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF524_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF524_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF525_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF525_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF526_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF526_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF527_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF527_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/anomaly.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/def_local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries.Extra 2009-03-25 15:58:08.371717600 -0700
@@ -0,0 +1,17 @@
+/ADSP-EDN-BF52x-extended_cdef.h///1238019737/
+/ADSP-EDN-BF52x-extended_def.h///1238019737/
+/BF522_cdef.h///1238019737/
+/BF522_def.h///1238019737/
+/BF523_cdef.h///1238019737/
+/BF523_def.h///1238019737/
+/BF524_cdef.h///1238019737/
+/BF524_def.h///1238019737/
+/BF525_cdef.h///1238019737/
+/BF525_def.h///1238019737/
+/BF526_cdef.h///1238019737/
+/BF526_def.h///1238019737/
+/BF527_cdef.h///1238019737/
+/BF527_def.h///1238019737/
+/anomaly.h///1238019737/
+/def_local.h///1238019737/
+/ports.h///1238019737/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries.Extra.Old 2009-03-25 15:25:43.000000000 -0700
@@ -0,0 +1,17 @@
+/ADSP-EDN-BF52x-extended_cdef.h///1238019737/
+/ADSP-EDN-BF52x-extended_def.h///1238019737/
+/BF522_cdef.h///1238019737/
+/BF522_def.h///1238019737/
+/BF523_cdef.h///1238019737/
+/BF523_def.h///1238019737/
+/BF524_cdef.h///1238019737/
+/BF524_def.h///1238019737/
+/BF525_cdef.h///1238019737/
+/BF525_def.h///1238019737/
+/BF526_cdef.h///1238019737/
+/BF526_def.h///1238019737/
+/BF527_cdef.h///1238019737/
+/BF527_def.h///1238019737/
+/anomaly.h///1238019737/
+/def_local.h///1238019737/
+/ports.h///1238019737/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Entries.Old 2009-03-25 15:25:43.000000000 -0700
@@ -0,0 +1,18 @@
+/ADSP-EDN-BF52x-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF52x-extended_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF522_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF522_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF523_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF523_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF524_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF524_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF525_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF525_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF526_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF526_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF527_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF527_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/anomaly.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/def_local.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ports.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Repository u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Repository 2009-03-25 15:25:43.056042700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin/mach-bf527
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Root u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf527/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf527/CVS/Root 2009-03-25 15:25:43.040417800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries 2009-03-25 15:58:08.465467000 -0700
@@ -0,0 +1,10 @@
+/BF531_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF531_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF532_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF532_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF533_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF533_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/anomaly.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/def_local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries.Extra 2009-03-25 15:58:08.465467000 -0700
@@ -0,0 +1,9 @@
+/BF531_cdef.h///1238019737/
+/BF531_def.h///1238019737/
+/BF532_cdef.h///1238019737/
+/BF532_def.h///1238019737/
+/BF533_cdef.h///1238019737/
+/BF533_def.h///1238019737/
+/anomaly.h///1238019737/
+/def_local.h///1238019737/
+/ports.h///1238019737/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries.Extra.Old 2009-03-25 15:25:43.000000000 -0700
@@ -0,0 +1,9 @@
+/BF531_cdef.h///1238019737/
+/BF531_def.h///1238019737/
+/BF532_cdef.h///1238019737/
+/BF532_def.h///1238019737/
+/BF533_cdef.h///1238019737/
+/BF533_def.h///1238019737/
+/anomaly.h///1238019737/
+/def_local.h///1238019737/
+/ports.h///1238019737/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Entries.Old 2009-03-25 15:25:43.000000000 -0700
@@ -0,0 +1,10 @@
+/BF531_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF531_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF532_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF532_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF533_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF533_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/anomaly.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/def_local.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ports.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Repository u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Repository 2009-03-25 15:25:43.431040300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin/mach-bf533
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Root u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf533/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf533/CVS/Root 2009-03-25 15:25:43.431040300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries 2009-03-25 15:58:08.574841300 -0700
@@ -0,0 +1,12 @@
+/ADSP-EDN-BF534-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF534-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF534_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF534_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF536_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF536_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF537_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF537_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/anomaly.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/def_local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries.Extra 2009-03-25 15:58:08.574841300 -0700
@@ -0,0 +1,11 @@
+/ADSP-EDN-BF534-extended_cdef.h///1238019737/
+/ADSP-EDN-BF534-extended_def.h///1238019737/
+/BF534_cdef.h///1238019737/
+/BF534_def.h///1238019737/
+/BF536_cdef.h///1238019737/
+/BF536_def.h///1238019737/
+/BF537_cdef.h///1238019737/
+/BF537_def.h///1238019737/
+/anomaly.h///1238019737/
+/def_local.h///1238019737/
+/ports.h///1238019737/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries.Extra.Old 2009-03-25 15:25:43.000000000 -0700
@@ -0,0 +1,11 @@
+/ADSP-EDN-BF534-extended_cdef.h///1238019737/
+/ADSP-EDN-BF534-extended_def.h///1238019737/
+/BF534_cdef.h///1238019737/
+/BF534_def.h///1238019737/
+/BF536_cdef.h///1238019737/
+/BF536_def.h///1238019737/
+/BF537_cdef.h///1238019737/
+/BF537_def.h///1238019737/
+/anomaly.h///1238019737/
+/def_local.h///1238019737/
+/ports.h///1238019737/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Entries.Old 2009-03-25 15:25:43.000000000 -0700
@@ -0,0 +1,12 @@
+/ADSP-EDN-BF534-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF534-extended_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF534_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF534_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF536_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF536_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF537_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/BF537_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/anomaly.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/def_local.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ports.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Repository u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Repository 2009-03-25 15:25:43.649788900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin/mach-bf537
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Root u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf537/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf537/CVS/Root 2009-03-25 15:25:43.634164000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries 2009-03-25 15:58:08.809214800 -0700
@@ -0,0 +1,26 @@
+/ADSP-EDN-BF542-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF542-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF544-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF544-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF547-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF547-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF548-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF548-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF549-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-BF549-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF541_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF541_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF542_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF542_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF544_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF544_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF547_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF547_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF548_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF548_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF549_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF549_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/anomaly.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/def_local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ports.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries.Extra 2009-03-25 15:58:08.809214800 -0700
@@ -0,0 +1,25 @@
+/ADSP-EDN-BF542-extended_cdef.h///1238019737/
+/ADSP-EDN-BF542-extended_def.h///1238019737/
+/ADSP-EDN-BF544-extended_cdef.h///1238019737/
+/ADSP-EDN-BF544-extended_def.h///1238019737/
+/ADSP-EDN-BF547-extended_cdef.h///1238019737/
+/ADSP-EDN-BF547-extended_def.h///1238019737/
+/ADSP-EDN-BF548-extended_cdef.h///1238019737/
+/ADSP-EDN-BF548-extended_def.h///1238019738/
+/ADSP-EDN-BF549-extended_cdef.h///1238019738/
+/ADSP-EDN-BF549-extended_def.h///1238019738/
+/BF541_cdef.h///1238019738/
+/BF541_def.h///1238019738/
+/BF542_cdef.h///1238019738/
+/BF542_def.h///1238019738/
+/BF544_cdef.h///1238019738/
+/BF544_def.h///1238019738/
+/BF547_cdef.h///1238019738/
+/BF547_def.h///1238019738/
+/BF548_cdef.h///1238019738/
+/BF548_def.h///1238019738/
+/BF549_cdef.h///1238019738/
+/BF549_def.h///1238019738/
+/anomaly.h///1238019738/
+/def_local.h///1238019738/
+/ports.h///1238019738/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries.Extra.Old 2009-03-25 15:25:44.000000000 -0700
@@ -0,0 +1,25 @@
+/ADSP-EDN-BF542-extended_cdef.h///1238019737/
+/ADSP-EDN-BF542-extended_def.h///1238019737/
+/ADSP-EDN-BF544-extended_cdef.h///1238019737/
+/ADSP-EDN-BF544-extended_def.h///1238019737/
+/ADSP-EDN-BF547-extended_cdef.h///1238019737/
+/ADSP-EDN-BF547-extended_def.h///1238019737/
+/ADSP-EDN-BF548-extended_cdef.h///1238019737/
+/ADSP-EDN-BF548-extended_def.h///1238019738/
+/ADSP-EDN-BF549-extended_cdef.h///1238019738/
+/ADSP-EDN-BF549-extended_def.h///1238019738/
+/BF541_cdef.h///1238019738/
+/BF541_def.h///1238019738/
+/BF542_cdef.h///1238019738/
+/BF542_def.h///1238019738/
+/BF544_cdef.h///1238019738/
+/BF544_def.h///1238019738/
+/BF547_cdef.h///1238019738/
+/BF547_def.h///1238019738/
+/BF548_cdef.h///1238019738/
+/BF548_def.h///1238019738/
+/BF549_cdef.h///1238019738/
+/BF549_def.h///1238019738/
+/anomaly.h///1238019738/
+/def_local.h///1238019738/
+/ports.h///1238019738/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Entries.Old 2009-03-25 15:25:44.000000000 -0700
@@ -0,0 +1,26 @@
+/ADSP-EDN-BF542-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF542-extended_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF544-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF544-extended_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF547-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF547-extended_def.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF548-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:17 2009//
+/ADSP-EDN-BF548-extended_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ADSP-EDN-BF549-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ADSP-EDN-BF549-extended_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF541_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF541_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF542_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF542_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF544_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF544_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF547_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF547_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF548_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF548_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF549_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF549_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/anomaly.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/def_local.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ports.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Repository u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Repository 2009-03-25 15:25:43.993536700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin/mach-bf548
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Root u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf548/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf548/CVS/Root 2009-03-25 15:25:43.993536700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries 2009-03-25 15:58:08.887339300 -0700
@@ -0,0 +1,5 @@
+/BF561_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BF561_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/anomaly.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/def_local.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries.Extra 2009-03-25 15:58:08.887339300 -0700
@@ -0,0 +1,4 @@
+/BF561_cdef.h///1238019738/
+/BF561_def.h///1238019738/
+/anomaly.h///1238019738/
+/def_local.h///1238019738/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries.Extra.Old 2009-03-25 15:25:44.000000000 -0700
@@ -0,0 +1,4 @@
+/BF561_cdef.h///1238019738/
+/BF561_def.h///1238019738/
+/anomaly.h///1238019738/
+/def_local.h///1238019738/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Entries.Old 2009-03-25 15:25:44.000000000 -0700
@@ -0,0 +1,5 @@
+/BF561_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/BF561_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/anomaly.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/def_local.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Repository u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Repository 2009-03-25 15:25:44.415409000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin/mach-bf561
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Root u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/mach-bf561/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-bf561/CVS/Root 2009-03-25 15:25:44.415409000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries 2009-03-25 15:58:09.215462200 -0700
@@ -0,0 +1,7 @@
+D/bits////
+/ADSP-EDN-DUAL-CORE-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-DUAL-CORE-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-core_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-core_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-extended_cdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADSP-EDN-extended_def.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries.Extra 2009-03-25 15:58:09.215462200 -0700
@@ -0,0 +1,7 @@
+D/bits////
+/ADSP-EDN-DUAL-CORE-extended_cdef.h///1238019738/
+/ADSP-EDN-DUAL-CORE-extended_def.h///1238019738/
+/ADSP-EDN-core_cdef.h///1238019738/
+/ADSP-EDN-core_def.h///1238019738/
+/ADSP-EDN-extended_cdef.h///1238019738/
+/ADSP-EDN-extended_def.h///1238019738/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries.Extra.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,7 @@
+/ADSP-EDN-DUAL-CORE-extended_cdef.h///1238019738/
+/ADSP-EDN-DUAL-CORE-extended_def.h///1238019738/
+/ADSP-EDN-core_cdef.h///1238019738/
+/ADSP-EDN-core_def.h///1238019738/
+/ADSP-EDN-extended_cdef.h///1238019738/
+/ADSP-EDN-extended_def.h///1238019738/
+D/bits////
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Entries.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,7 @@
+/ADSP-EDN-DUAL-CORE-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ADSP-EDN-DUAL-CORE-extended_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ADSP-EDN-core_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ADSP-EDN-core_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ADSP-EDN-extended_cdef.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ADSP-EDN-extended_def.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+D/bits////
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Repository u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Repository 2009-03-25 15:25:44.524783300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin/mach-common
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Root u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/CVS/Root 2009-03-25 15:25:44.524783300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries 2009-03-25 15:58:09.059213200 -0700
@@ -0,0 +1,22 @@
+/bootrom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/core.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dma.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebiu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/emac.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eppi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lockbox.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/otp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pll.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdh.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sport.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/trace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/twi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra 2009-03-25 15:58:09.059213200 -0700
@@ -0,0 +1,21 @@
+/bootrom.h///1238019738/
+/core.h///1238019738/
+/dma.h///1238019738/
+/ebiu.h///1238019738/
+/emac.h///1238019738/
+/eppi.h///1238019738/
+/lockbox.h///1238019738/
+/mpu.h///1238019738/
+/otp.h///1238019738/
+/pata.h///1238019738/
+/pll.h///1238019738/
+/ppi.h///1238019738/
+/rtc.h///1238019738/
+/sdh.h///1238019738/
+/spi.h///1238019739/
+/sport.h///1238019739/
+/timer.h///1238019739/
+/trace.h///1238019739/
+/twi.h///1238019739/
+/uart.h///1238019739/
+/watchdog.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries.Extra.Old 2009-03-25 15:25:44.000000000 -0700
@@ -0,0 +1,21 @@
+/bootrom.h///1238019738/
+/core.h///1238019738/
+/dma.h///1238019738/
+/ebiu.h///1238019738/
+/emac.h///1238019738/
+/eppi.h///1238019738/
+/lockbox.h///1238019738/
+/mpu.h///1238019738/
+/otp.h///1238019738/
+/pata.h///1238019738/
+/pll.h///1238019738/
+/ppi.h///1238019738/
+/rtc.h///1238019738/
+/sdh.h///1238019738/
+/spi.h///1238019739/
+/sport.h///1238019739/
+/timer.h///1238019739/
+/trace.h///1238019739/
+/twi.h///1238019739/
+/uart.h///1238019739/
+/watchdog.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries.Old u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Entries.Old 2009-03-25 15:25:44.000000000 -0700
@@ -0,0 +1,22 @@
+/bootrom.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/core.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/dma.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ebiu.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/emac.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/eppi.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/lockbox.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/mpu.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/otp.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/pata.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/pll.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/ppi.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/rtc.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/sdh.h/1.1.1.1/Wed Mar 25 22:22:18 2009//
+/spi.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/sport.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/timer.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/trace.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/twi.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/uart.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/watchdog.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Repository u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Repository
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Repository 2009-03-25 15:25:44.618532700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-blackfin/mach-common/bits
diff -Naur u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Root u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Root
--- u-boot-2009.03_orig/include/asm-blackfin/mach-common/bits/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-blackfin/mach-common/bits/CVS/Root 2009-03-25 15:25:44.618532700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-i386/CVS/Entries u-boot-2009.03/include/asm-i386/CVS/Entries
--- u-boot-2009.03_orig/include/asm-i386/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/CVS/Entries 2009-03-25 15:58:09.481085500 -0700
@@ -0,0 +1,20 @@
+D/ic////
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i8254.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i8259.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ibmpc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/realmode.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot-i386.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zimage.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/asm-i386/CVS/Entries.Extra u-boot-2009.03/include/asm-i386/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-i386/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/CVS/Entries.Extra 2009-03-25 15:58:09.481085500 -0700
@@ -0,0 +1,20 @@
+D/ic////
+/bitops.h///1238019739/
+/byteorder.h///1238019739/
+/config.h///1238019739/
+/global_data.h///1238019739/
+/i8254.h///1238019739/
+/i8259.h///1238019739/
+/ibmpc.h///1238019739/
+/interrupt.h///1238019739/
+/io.h///1238019739/
+/pci.h///1238019739/
+/posix_types.h///1238019739/
+/processor.h///1238019739/
+/ptrace.h///1238019739/
+/realmode.h///1238019739/
+/string.h///1238019739/
+/types.h///1238019739/
+/u-boot-i386.h///1238019739/
+/u-boot.h///1238019739/
+/zimage.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-i386/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-i386/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-i386/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/CVS/Entries.Extra.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,20 @@
+/bitops.h///1238019739/
+/byteorder.h///1238019739/
+/config.h///1238019739/
+/global_data.h///1238019739/
+/i8254.h///1238019739/
+/i8259.h///1238019739/
+/ibmpc.h///1238019739/
+/interrupt.h///1238019739/
+/io.h///1238019739/
+/pci.h///1238019739/
+/posix_types.h///1238019739/
+/processor.h///1238019739/
+/ptrace.h///1238019739/
+/realmode.h///1238019739/
+/string.h///1238019739/
+/types.h///1238019739/
+/u-boot-i386.h///1238019739/
+/u-boot.h///1238019739/
+/zimage.h///1238019739/
+D/ic////
diff -Naur u-boot-2009.03_orig/include/asm-i386/CVS/Entries.Old u-boot-2009.03/include/asm-i386/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-i386/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/CVS/Entries.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,20 @@
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/i8254.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/i8259.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/ibmpc.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/interrupt.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/pci.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/realmode.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/u-boot-i386.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/zimage.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+D/ic////
diff -Naur u-boot-2009.03_orig/include/asm-i386/CVS/Repository u-boot-2009.03/include/asm-i386/CVS/Repository
--- u-boot-2009.03_orig/include/asm-i386/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/CVS/Repository 2009-03-25 15:25:45.102904600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-i386
diff -Naur u-boot-2009.03_orig/include/asm-i386/CVS/Root u-boot-2009.03/include/asm-i386/CVS/Root
--- u-boot-2009.03_orig/include/asm-i386/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/CVS/Root 2009-03-25 15:25:45.102904600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries u-boot-2009.03/include/asm-i386/ic/CVS/Entries
--- u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/ic/CVS/Entries 2009-03-25 15:58:09.434210800 -0700
@@ -0,0 +1,5 @@
+/ali512x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ssi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries.Extra u-boot-2009.03/include/asm-i386/ic/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/ic/CVS/Entries.Extra 2009-03-25 15:58:09.434210800 -0700
@@ -0,0 +1,4 @@
+/ali512x.h///1238019739/
+/pci.h///1238019739/
+/sc520.h///1238019739/
+/ssi.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-i386/ic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/ic/CVS/Entries.Extra.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,4 @@
+/ali512x.h///1238019739/
+/pci.h///1238019739/
+/sc520.h///1238019739/
+/ssi.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries.Old u-boot-2009.03/include/asm-i386/ic/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-i386/ic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/ic/CVS/Entries.Old 2009-03-25 15:25:45.000000000 -0700
@@ -0,0 +1,5 @@
+/ali512x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/pci.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/sc520.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/ssi.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-i386/ic/CVS/Repository u-boot-2009.03/include/asm-i386/ic/CVS/Repository
--- u-boot-2009.03_orig/include/asm-i386/ic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/ic/CVS/Repository 2009-03-25 15:25:45.274778500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-i386/ic
diff -Naur u-boot-2009.03_orig/include/asm-i386/ic/CVS/Root u-boot-2009.03/include/asm-i386/ic/CVS/Root
--- u-boot-2009.03_orig/include/asm-i386/ic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-i386/ic/CVS/Root 2009-03-25 15:25:45.274778500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-m68k/CVS/Entries u-boot-2009.03/include/asm-m68k/CVS/Entries
--- u-boot-2009.03_orig/include/asm-m68k/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/CVS/Entries 2009-03-25 15:58:09.856083100 -0700
@@ -0,0 +1,44 @@
+D/coldfire////
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_mcdmafec.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5227x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5235.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5249.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5253.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5271.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5275.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5282.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5301x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5329.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_5445x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_547x_8x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5227x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5235.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5249.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5253.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5271.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5275.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5282.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5301x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5329.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m5445x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m547x_8x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/timer.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/asm-m68k/CVS/Entries.Extra u-boot-2009.03/include/asm-m68k/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-m68k/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/CVS/Entries.Extra 2009-03-25 15:58:09.856083100 -0700
@@ -0,0 +1,44 @@
+D/coldfire////
+/bitops.h///1238019739/
+/byteorder.h///1238019739/
+/config.h///1238019739/
+/errno.h///1238019739/
+/fec.h///1238019739/
+/fsl_i2c.h///1238019739/
+/fsl_mcdmafec.h///1238019739/
+/global_data.h///1238019739/
+/immap.h///1238019739/
+/immap_5227x.h///1238019739/
+/immap_5235.h///1238019739/
+/immap_5249.h///1238019739/
+/immap_5253.h///1238019739/
+/immap_5271.h///1238019739/
+/immap_5272.h///1238019739/
+/immap_5275.h///1238019739/
+/immap_5282.h///1238019739/
+/immap_5301x.h///1238019739/
+/immap_5329.h///1238019739/
+/immap_5445x.h///1238019739/
+/immap_547x_8x.h///1238019739/
+/io.h///1238019739/
+/m5227x.h///1238019739/
+/m5235.h///1238019739/
+/m5249.h///1238019739/
+/m5253.h///1238019739/
+/m5271.h///1238019739/
+/m5272.h///1238019739/
+/m5275.h///1238019739/
+/m5282.h///1238019739/
+/m5301x.h///1238019739/
+/m5329.h///1238019739/
+/m5445x.h///1238019739/
+/m547x_8x.h///1238019739/
+/posix_types.h///1238019739/
+/processor.h///1238019739/
+/ptrace.h///1238019739/
+/rtc.h///1238019739/
+/string.h///1238019739/
+/timer.h///1238019739/
+/types.h///1238019739/
+/u-boot.h///1238019739/
+/uart.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-m68k/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-m68k/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-m68k/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/CVS/Entries.Extra.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,44 @@
+/bitops.h///1238019739/
+/byteorder.h///1238019739/
+/config.h///1238019739/
+/errno.h///1238019739/
+/fec.h///1238019739/
+/fsl_i2c.h///1238019739/
+/fsl_mcdmafec.h///1238019739/
+/global_data.h///1238019739/
+/immap.h///1238019739/
+/immap_5227x.h///1238019739/
+/immap_5235.h///1238019739/
+/immap_5249.h///1238019739/
+/immap_5253.h///1238019739/
+/immap_5271.h///1238019739/
+/immap_5272.h///1238019739/
+/immap_5275.h///1238019739/
+/immap_5282.h///1238019739/
+/immap_5301x.h///1238019739/
+/immap_5329.h///1238019739/
+/immap_5445x.h///1238019739/
+/immap_547x_8x.h///1238019739/
+/io.h///1238019739/
+/m5227x.h///1238019739/
+/m5235.h///1238019739/
+/m5249.h///1238019739/
+/m5253.h///1238019739/
+/m5271.h///1238019739/
+/m5272.h///1238019739/
+/m5275.h///1238019739/
+/m5282.h///1238019739/
+/m5301x.h///1238019739/
+/m5329.h///1238019739/
+/m5445x.h///1238019739/
+/m547x_8x.h///1238019739/
+/posix_types.h///1238019739/
+/processor.h///1238019739/
+/ptrace.h///1238019739/
+/rtc.h///1238019739/
+/string.h///1238019739/
+/timer.h///1238019739/
+/types.h///1238019739/
+/u-boot.h///1238019739/
+/uart.h///1238019739/
+D/coldfire////
diff -Naur u-boot-2009.03_orig/include/asm-m68k/CVS/Entries.Old u-boot-2009.03/include/asm-m68k/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-m68k/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/CVS/Entries.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,44 @@
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/errno.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/fec.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/fsl_i2c.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/fsl_mcdmafec.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5227x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5235.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5249.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5253.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5271.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5272.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5275.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5282.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5301x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5329.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_5445x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/immap_547x_8x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5227x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5235.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5249.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5253.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5271.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5272.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5275.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5282.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5301x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5329.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m5445x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/m547x_8x.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/rtc.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/timer.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/uart.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+D/coldfire////
diff -Naur u-boot-2009.03_orig/include/asm-m68k/CVS/Repository u-boot-2009.03/include/asm-m68k/CVS/Repository
--- u-boot-2009.03_orig/include/asm-m68k/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/CVS/Repository 2009-03-25 15:25:45.431027500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-m68k
diff -Naur u-boot-2009.03_orig/include/asm-m68k/CVS/Root u-boot-2009.03/include/asm-m68k/CVS/Root
--- u-boot-2009.03_orig/include/asm-m68k/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/CVS/Root 2009-03-25 15:25:45.431027500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries
--- u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries 2009-03-25 15:58:09.793583500 -0700
@@ -0,0 +1,16 @@
+/ata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crossbar.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dspi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/edma.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eport.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flexbus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/flexcan.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/intctrl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lcd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mdha.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pwm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qspi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rng.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/skha.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ssi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries.Extra u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries.Extra 2009-03-25 15:58:09.793583500 -0700
@@ -0,0 +1,15 @@
+/ata.h///1238019739/
+/crossbar.h///1238019739/
+/dspi.h///1238019739/
+/edma.h///1238019739/
+/eport.h///1238019739/
+/flexbus.h///1238019739/
+/flexcan.h///1238019739/
+/intctrl.h///1238019739/
+/lcd.h///1238019739/
+/mdha.h///1238019739/
+/pwm.h///1238019739/
+/qspi.h///1238019739/
+/rng.h///1238019739/
+/skha.h///1238019739/
+/ssi.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries.Extra.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,15 @@
+/ata.h///1238019739/
+/crossbar.h///1238019739/
+/dspi.h///1238019739/
+/edma.h///1238019739/
+/eport.h///1238019739/
+/flexbus.h///1238019739/
+/flexcan.h///1238019739/
+/intctrl.h///1238019739/
+/lcd.h///1238019739/
+/mdha.h///1238019739/
+/pwm.h///1238019739/
+/qspi.h///1238019739/
+/rng.h///1238019739/
+/skha.h///1238019739/
+/ssi.h///1238019739/
diff -Naur u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries.Old u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/coldfire/CVS/Entries.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,16 @@
+/ata.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/crossbar.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/dspi.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/edma.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/eport.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/flexbus.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/flexcan.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/intctrl.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/lcd.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/mdha.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/pwm.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/qspi.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/rng.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/skha.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/ssi.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Repository u-boot-2009.03/include/asm-m68k/coldfire/CVS/Repository
--- u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/coldfire/CVS/Repository 2009-03-25 15:25:45.915399400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-m68k/coldfire
diff -Naur u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Root u-boot-2009.03/include/asm-m68k/coldfire/CVS/Root
--- u-boot-2009.03_orig/include/asm-m68k/coldfire/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-m68k/coldfire/CVS/Root 2009-03-25 15:25:45.915399400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries u-boot-2009.03/include/asm-microblaze/CVS/Entries
--- u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-microblaze/CVS/Entries 2009-03-25 15:58:09.965457400 -0700
@@ -0,0 +1,16 @@
+/asm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/microblaze_intc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/microblaze_timer.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries.Extra u-boot-2009.03/include/asm-microblaze/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-microblaze/CVS/Entries.Extra 2009-03-25 15:58:09.965457400 -0700
@@ -0,0 +1,15 @@
+/asm.h///1238019739/
+/bitops.h///1238019739/
+/byteorder.h///1238019739/
+/config.h///1238019740/
+/global_data.h///1238019740/
+/io.h///1238019740/
+/microblaze_intc.h///1238019740/
+/microblaze_timer.h///1238019740/
+/posix_types.h///1238019740/
+/processor.h///1238019740/
+/ptrace.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
diff -Naur u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-microblaze/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-microblaze/CVS/Entries.Extra.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,15 @@
+/asm.h///1238019739/
+/bitops.h///1238019739/
+/byteorder.h///1238019739/
+/config.h///1238019740/
+/global_data.h///1238019740/
+/io.h///1238019740/
+/microblaze_intc.h///1238019740/
+/microblaze_timer.h///1238019740/
+/posix_types.h///1238019740/
+/processor.h///1238019740/
+/ptrace.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
diff -Naur u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries.Old u-boot-2009.03/include/asm-microblaze/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-microblaze/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-microblaze/CVS/Entries.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,16 @@
+/asm.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:19 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/microblaze_intc.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/microblaze_timer.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/system.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-microblaze/CVS/Repository u-boot-2009.03/include/asm-microblaze/CVS/Repository
--- u-boot-2009.03_orig/include/asm-microblaze/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-microblaze/CVS/Repository 2009-03-25 15:25:46.181022700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-microblaze
diff -Naur u-boot-2009.03_orig/include/asm-microblaze/CVS/Root u-boot-2009.03/include/asm-microblaze/CVS/Root
--- u-boot-2009.03_orig/include/asm-microblaze/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-microblaze/CVS/Root 2009-03-25 15:25:46.181022700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-mips/CVS/Entries u-boot-2009.03/include/asm-mips/CVS/Entries
--- u-boot-2009.03_orig/include/asm-mips/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-mips/CVS/Entries 2009-03-31 14:58:46.843585600 -0700
@@ -0,0 +1,26 @@
+/addrspace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/au1x00.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cachectl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cacheops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inca-ip.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/isadep.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mipsregs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reboot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/regdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sgidefs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Tue Mar 31 21:58:46 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/include/asm-mips/CVS/Entries.Extra u-boot-2009.03/include/asm-mips/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-mips/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-mips/CVS/Entries.Extra 2009-03-31 14:58:46.843585600 -0700
@@ -0,0 +1,25 @@
+/addrspace.h///1238019740/
+/asm.h///1238019740/
+/au1x00.h///1238019740/
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cachectl.h///1238019740/
+/cacheops.h///1238019740/
+/config.h///1238019740/
+/errno.h///1238019740/
+/global_data.h///1238019740/
+/inca-ip.h///1238019740/
+/io.h///1238019740/
+/isadep.h///1238019740/
+/mipsregs.h///1238019740/
+/processor.h///1238019740/
+/ptrace.h///1238019740/
+/reboot.h///1238019740/
+/reg.h///1238019740/
+/regdef.h///1238019740/
+/sgidefs.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
+/posix_types.h///1238019740/
diff -Naur u-boot-2009.03_orig/include/asm-mips/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-mips/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-mips/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-mips/CVS/Entries.Extra.Old 2009-03-25 17:51:49.000000000 -0700
@@ -0,0 +1,25 @@
+/addrspace.h///1238019740/
+/asm.h///1238019740/
+/au1x00.h///1238019740/
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cachectl.h///1238019740/
+/cacheops.h///1238019740/
+/config.h///1238019740/
+/errno.h///1238019740/
+/global_data.h///1238019740/
+/inca-ip.h///1238019740/
+/io.h///1238019740/
+/isadep.h///1238019740/
+/mipsregs.h///1238019740/
+/processor.h///1238019740/
+/ptrace.h///1238019740/
+/reboot.h///1238019740/
+/reg.h///1238019740/
+/regdef.h///1238019740/
+/sgidefs.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
+/posix_types.h///1238028709/
diff -Naur u-boot-2009.03_orig/include/asm-mips/CVS/Entries.Old u-boot-2009.03/include/asm-mips/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-mips/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-mips/CVS/Entries.Old 2009-03-25 17:51:49.000000000 -0700
@@ -0,0 +1,26 @@
+/addrspace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/au1x00.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cachectl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cacheops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inca-ip.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/isadep.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mipsregs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reboot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/reg.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/regdef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sgidefs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.2/Thu Mar 26 00:51:49 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-mips/CVS/Repository u-boot-2009.03/include/asm-mips/CVS/Repository
--- u-boot-2009.03_orig/include/asm-mips/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-mips/CVS/Repository 2009-03-25 15:25:46.384146400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-mips
diff -Naur u-boot-2009.03_orig/include/asm-mips/CVS/Root u-boot-2009.03/include/asm-mips/CVS/Root
--- u-boot-2009.03_orig/include/asm-mips/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-mips/CVS/Root 2009-03-25 15:25:46.384146400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-mips/posix_types.h u-boot-2009.03/include/asm-mips/posix_types.h
--- u-boot-2009.03_orig/include/asm-mips/posix_types.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/asm-mips/posix_types.h 2009-03-31 14:58:46.687337600 -0700
@@ -1,123 +1,123 @@
-/* $Id: posix_types.h,v 1.6 2000/02/04 23:32:54 ralf Exp $
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1996, 1997, 1998, 2000 by Ralf Baechle
- */
-#ifndef _ASM_POSIX_TYPES_H
-#define _ASM_POSIX_TYPES_H
-
-/*
- * This file is generally used by user-level software, so you need to
- * be a little careful about namespace pollution etc. Also, we cannot
- * assume GCC is being used.
- */
-
-typedef unsigned int __kernel_dev_t;
-typedef unsigned long __kernel_ino_t;
-typedef unsigned int __kernel_mode_t;
-typedef int __kernel_nlink_t;
-typedef long __kernel_off_t;
-typedef int __kernel_pid_t;
-typedef int __kernel_ipc_pid_t;
-typedef int __kernel_uid_t;
-typedef int __kernel_gid_t;
-typedef unsigned int __kernel_size_t;
-typedef int __kernel_ssize_t;
-typedef int __kernel_ptrdiff_t;
-typedef long __kernel_time_t;
-typedef long __kernel_suseconds_t;
-typedef long __kernel_clock_t;
-typedef long __kernel_daddr_t;
-typedef char * __kernel_caddr_t;
-
-typedef unsigned short __kernel_uid16_t;
-typedef unsigned short __kernel_gid16_t;
-typedef int __kernel_uid32_t;
-typedef int __kernel_gid32_t;
-typedef __kernel_uid_t __kernel_old_uid_t;
-typedef __kernel_gid_t __kernel_old_gid_t;
-
-#ifdef __GNUC__
-typedef long long __kernel_loff_t;
-#endif
-
-typedef struct {
- long val[2];
-} __kernel_fsid_t;
-
-#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
-
-#undef __FD_SET
-static __inline__ void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp)
-{
- unsigned long __tmp = __fd / __NFDBITS;
- unsigned long __rem = __fd % __NFDBITS;
- __fdsetp->fds_bits[__tmp] |= (1UL<<__rem);
-}
-
-#undef __FD_CLR
-static __inline__ void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp)
-{
- unsigned long __tmp = __fd / __NFDBITS;
- unsigned long __rem = __fd % __NFDBITS;
- __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem);
-}
-
-#undef __FD_ISSET
-static __inline__ int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p)
-{
- unsigned long __tmp = __fd / __NFDBITS;
- unsigned long __rem = __fd % __NFDBITS;
- return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0;
-}
-
-/*
- * This will unroll the loop for the normal constant case (8 ints,
- * for a 256-bit fd_set)
- */
-#undef __FD_ZERO
-static __inline__ void __FD_ZERO(__kernel_fd_set *__p)
-{
- unsigned long *__tmp = __p->fds_bits;
- int __i;
-
- if (__builtin_constant_p(__FDSET_LONGS)) {
- switch (__FDSET_LONGS) {
- case 16:
- __tmp[ 0] = 0; __tmp[ 1] = 0;
- __tmp[ 2] = 0; __tmp[ 3] = 0;
- __tmp[ 4] = 0; __tmp[ 5] = 0;
- __tmp[ 6] = 0; __tmp[ 7] = 0;
- __tmp[ 8] = 0; __tmp[ 9] = 0;
- __tmp[10] = 0; __tmp[11] = 0;
- __tmp[12] = 0; __tmp[13] = 0;
- __tmp[14] = 0; __tmp[15] = 0;
- return;
-
- case 8:
- __tmp[ 0] = 0; __tmp[ 1] = 0;
- __tmp[ 2] = 0; __tmp[ 3] = 0;
- __tmp[ 4] = 0; __tmp[ 5] = 0;
- __tmp[ 6] = 0; __tmp[ 7] = 0;
- return;
-
- case 4:
- __tmp[ 0] = 0; __tmp[ 1] = 0;
- __tmp[ 2] = 0; __tmp[ 3] = 0;
- return;
- }
- }
- __i = __FDSET_LONGS;
- while (__i) {
- __i--;
- *__tmp = 0;
- __tmp++;
- }
-}
-
-#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
-
-#endif /* _ASM_POSIX_TYPES_H */
+/* $Id: posix_types.h,v 1.1.1.1 2009/03/25 22:22:20 kenagy Exp $
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1996, 1997, 1998, 2000 by Ralf Baechle
+ */
+#ifndef _ASM_POSIX_TYPES_H
+#define _ASM_POSIX_TYPES_H
+
+/*
+ * This file is generally used by user-level software, so you need to
+ * be a little careful about namespace pollution etc. Also, we cannot
+ * assume GCC is being used.
+ */
+
+typedef unsigned int __kernel_dev_t;
+typedef unsigned long __kernel_ino_t;
+typedef unsigned int __kernel_mode_t;
+typedef int __kernel_nlink_t;
+typedef long __kernel_off_t;
+typedef int __kernel_pid_t;
+typedef int __kernel_ipc_pid_t;
+typedef int __kernel_uid_t;
+typedef int __kernel_gid_t;
+typedef unsigned int __kernel_size_t;
+typedef int __kernel_ssize_t;
+typedef int __kernel_ptrdiff_t;
+typedef long __kernel_time_t;
+typedef long __kernel_suseconds_t;
+typedef long __kernel_clock_t;
+typedef long __kernel_daddr_t;
+typedef char * __kernel_caddr_t;
+
+typedef unsigned short __kernel_uid16_t;
+typedef unsigned short __kernel_gid16_t;
+typedef int __kernel_uid32_t;
+typedef int __kernel_gid32_t;
+typedef __kernel_uid_t __kernel_old_uid_t;
+typedef __kernel_gid_t __kernel_old_gid_t;
+
+#ifdef __GNUC__
+typedef long long __kernel_loff_t;
+#endif
+
+typedef struct {
+ long val[2];
+} __kernel_fsid_t;
+
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
+#undef __FD_SET
+static __inline__ void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp)
+{
+ unsigned long __tmp = __fd / __NFDBITS;
+ unsigned long __rem = __fd % __NFDBITS;
+ __fdsetp->fds_bits[__tmp] |= (1UL<<__rem);
+}
+
+#undef __FD_CLR
+static __inline__ void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp)
+{
+ unsigned long __tmp = __fd / __NFDBITS;
+ unsigned long __rem = __fd % __NFDBITS;
+ __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem);
+}
+
+#undef __FD_ISSET
+static __inline__ int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p)
+{
+ unsigned long __tmp = __fd / __NFDBITS;
+ unsigned long __rem = __fd % __NFDBITS;
+ return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0;
+}
+
+/*
+ * This will unroll the loop for the normal constant case (8 ints,
+ * for a 256-bit fd_set)
+ */
+#undef __FD_ZERO
+static __inline__ void __FD_ZERO(__kernel_fd_set *__p)
+{
+ unsigned long *__tmp = __p->fds_bits;
+ int __i;
+
+ if (__builtin_constant_p(__FDSET_LONGS)) {
+ switch (__FDSET_LONGS) {
+ case 16:
+ __tmp[ 0] = 0; __tmp[ 1] = 0;
+ __tmp[ 2] = 0; __tmp[ 3] = 0;
+ __tmp[ 4] = 0; __tmp[ 5] = 0;
+ __tmp[ 6] = 0; __tmp[ 7] = 0;
+ __tmp[ 8] = 0; __tmp[ 9] = 0;
+ __tmp[10] = 0; __tmp[11] = 0;
+ __tmp[12] = 0; __tmp[13] = 0;
+ __tmp[14] = 0; __tmp[15] = 0;
+ return;
+
+ case 8:
+ __tmp[ 0] = 0; __tmp[ 1] = 0;
+ __tmp[ 2] = 0; __tmp[ 3] = 0;
+ __tmp[ 4] = 0; __tmp[ 5] = 0;
+ __tmp[ 6] = 0; __tmp[ 7] = 0;
+ return;
+
+ case 4:
+ __tmp[ 0] = 0; __tmp[ 1] = 0;
+ __tmp[ 2] = 0; __tmp[ 3] = 0;
+ return;
+ }
+ }
+ __i = __FDSET_LONGS;
+ while (__i) {
+ __i--;
+ *__tmp = 0;
+ __tmp++;
+ }
+}
+
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
+
+#endif /* _ASM_POSIX_TYPES_H */
diff -Naur u-boot-2009.03_orig/include/asm-nios/CVS/Entries u-boot-2009.03/include/asm-nios/CVS/Entries
--- u-boot-2009.03_orig/include/asm-nios/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios/CVS/Entries 2009-03-25 15:58:10.262330500 -0700
@@ -0,0 +1,16 @@
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/psr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/status_led.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-nios/CVS/Entries.Extra u-boot-2009.03/include/asm-nios/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-nios/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios/CVS/Entries.Extra 2009-03-25 15:58:10.262330500 -0700
@@ -0,0 +1,15 @@
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cache.h///1238019740/
+/config.h///1238019740/
+/global_data.h///1238019740/
+/io.h///1238019740/
+/posix_types.h///1238019740/
+/processor.h///1238019740/
+/psr.h///1238019740/
+/ptrace.h///1238019740/
+/status_led.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
diff -Naur u-boot-2009.03_orig/include/asm-nios/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-nios/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-nios/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios/CVS/Entries.Extra.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,15 @@
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cache.h///1238019740/
+/config.h///1238019740/
+/global_data.h///1238019740/
+/io.h///1238019740/
+/posix_types.h///1238019740/
+/processor.h///1238019740/
+/psr.h///1238019740/
+/ptrace.h///1238019740/
+/status_led.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
diff -Naur u-boot-2009.03_orig/include/asm-nios/CVS/Entries.Old u-boot-2009.03/include/asm-nios/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-nios/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios/CVS/Entries.Old 2009-03-25 15:25:46.000000000 -0700
@@ -0,0 +1,16 @@
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/cache.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/psr.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/status_led.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/system.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-nios/CVS/Repository u-boot-2009.03/include/asm-nios/CVS/Repository
--- u-boot-2009.03_orig/include/asm-nios/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios/CVS/Repository 2009-03-25 15:25:46.821643600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-nios
diff -Naur u-boot-2009.03_orig/include/asm-nios/CVS/Root u-boot-2009.03/include/asm-nios/CVS/Root
--- u-boot-2009.03_orig/include/asm-nios/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios/CVS/Root 2009-03-25 15:25:46.821643600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-nios2/CVS/Entries u-boot-2009.03/include/asm-nios2/CVS/Entries
--- u-boot-2009.03_orig/include/asm-nios2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios2/CVS/Entries 2009-03-25 15:58:10.371704800 -0700
@@ -0,0 +1,17 @@
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/opcodes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/psr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/status_led.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-nios2/CVS/Entries.Extra u-boot-2009.03/include/asm-nios2/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-nios2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios2/CVS/Entries.Extra 2009-03-25 15:58:10.371704800 -0700
@@ -0,0 +1,16 @@
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cache.h///1238019740/
+/config.h///1238019740/
+/global_data.h///1238019740/
+/io.h///1238019740/
+/opcodes.h///1238019740/
+/posix_types.h///1238019740/
+/processor.h///1238019740/
+/psr.h///1238019740/
+/ptrace.h///1238019740/
+/status_led.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
diff -Naur u-boot-2009.03_orig/include/asm-nios2/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-nios2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-nios2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios2/CVS/Entries.Extra.Old 2009-03-25 15:25:47.000000000 -0700
@@ -0,0 +1,16 @@
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cache.h///1238019740/
+/config.h///1238019740/
+/global_data.h///1238019740/
+/io.h///1238019740/
+/opcodes.h///1238019740/
+/posix_types.h///1238019740/
+/processor.h///1238019740/
+/psr.h///1238019740/
+/ptrace.h///1238019740/
+/status_led.h///1238019740/
+/string.h///1238019740/
+/system.h///1238019740/
+/types.h///1238019740/
+/u-boot.h///1238019740/
diff -Naur u-boot-2009.03_orig/include/asm-nios2/CVS/Entries.Old u-boot-2009.03/include/asm-nios2/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-nios2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios2/CVS/Entries.Old 2009-03-25 15:25:47.000000000 -0700
@@ -0,0 +1,17 @@
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/cache.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/opcodes.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/psr.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/status_led.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/system.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-nios2/CVS/Repository u-boot-2009.03/include/asm-nios2/CVS/Repository
--- u-boot-2009.03_orig/include/asm-nios2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios2/CVS/Repository 2009-03-25 15:25:47.024767300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-nios2
diff -Naur u-boot-2009.03_orig/include/asm-nios2/CVS/Root u-boot-2009.03/include/asm-nios2/CVS/Root
--- u-boot-2009.03_orig/include/asm-nios2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-nios2/CVS/Root 2009-03-25 15:25:47.024767300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-or1200/CVS/Entries u-boot-2009.03/include/asm-or1200/CVS/Entries
--- u-boot-2009.03_orig/include/asm-or1200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/CVS/Entries 2009-03-25 17:51:50.873273200 -0700
@@ -0,0 +1,15 @@
+/bitops.h/1.1/Wed Aug 27 01:13:42 2008//
+/byteorder.h/1.1/Wed Jul 2 16:36:01 2008//
+/config.h/1.1/Wed Mar 25 22:52:40 2009//
+/global_data.h/1.1/Fri Sep 5 16:56:50 2008//
+/io.h/1.1/Wed Jul 2 16:36:02 2008//
+/page.h/1.1/Wed Jul 2 16:36:02 2008//
+/posix_types.h/1.1/Wed Aug 27 01:22:31 2008//
+/processor.h/1.1/Wed Jul 2 16:36:02 2008//
+/ptrace.h/1.1/Wed Jul 2 16:36:02 2008//
+/spr_defs.h/1.1/Wed Jul 2 16:36:02 2008//
+/string.h/1.1/Wed Jul 2 16:36:02 2008//
+/system.h/1.1/Wed Jul 2 16:36:02 2008//
+/types.h/1.1/Wed Aug 27 01:29:36 2008//
+/u-boot.h/1.1/Fri Sep 5 16:57:00 2008//
+D
diff -Naur u-boot-2009.03_orig/include/asm-or1200/CVS/Entries.Extra u-boot-2009.03/include/asm-or1200/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-or1200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/CVS/Entries.Extra 2009-03-25 17:51:50.873273200 -0700
@@ -0,0 +1,14 @@
+/bitops.h///1238028709/
+/byteorder.h///1238028710/
+/config.h///1238028710/
+/global_data.h///1238028710/
+/io.h///1238028710/
+/page.h///1238028710/
+/posix_types.h///1238028710/
+/processor.h///1238028710/
+/ptrace.h///1238028710/
+/spr_defs.h///1238028710/
+/string.h///1238028710/
+/system.h///1238028710/
+/types.h///1238028710/
+/u-boot.h///1238028710/
diff -Naur u-boot-2009.03_orig/include/asm-or1200/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-or1200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-or1200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/CVS/Entries.Extra.Old 2009-03-25 17:51:32.000000000 -0700
@@ -0,0 +1,14 @@
+/bitops.h////
+/byteorder.h////
+/config.h////
+/global_data.h////
+/io.h////
+/page.h////
+/posix_types.h////
+/processor.h////
+/ptrace.h////
+/spr_defs.h////
+/string.h////
+/system.h////
+/types.h////
+/u-boot.h////
diff -Naur u-boot-2009.03_orig/include/asm-or1200/CVS/Entries.Old u-boot-2009.03/include/asm-or1200/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-or1200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/CVS/Entries.Old 2009-03-25 17:51:32.000000000 -0700
@@ -0,0 +1,15 @@
+/bitops.h/0/Initial bitops.h//
+/byteorder.h/0/Initial byteorder.h//
+/config.h/0/Initial config.h//
+/global_data.h/0/Initial global_data.h//
+/io.h/0/Initial io.h//
+/page.h/0/Initial page.h//
+/posix_types.h/0/Initial posix_types.h//
+/processor.h/0/Initial processor.h//
+/ptrace.h/0/Initial ptrace.h//
+/spr_defs.h/0/Initial spr_defs.h//
+/string.h/0/Initial string.h//
+/system.h/0/Initial system.h//
+/types.h/0/Initial types.h//
+/u-boot.h/0/Initial u-boot.h//
+D
diff -Naur u-boot-2009.03_orig/include/asm-or1200/CVS/Repository u-boot-2009.03/include/asm-or1200/CVS/Repository
--- u-boot-2009.03_orig/include/asm-or1200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/CVS/Repository 2009-03-25 17:50:12.327028900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-or1200
diff -Naur u-boot-2009.03_orig/include/asm-or1200/CVS/Root u-boot-2009.03/include/asm-or1200/CVS/Root
--- u-boot-2009.03_orig/include/asm-or1200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/CVS/Root 2009-03-25 17:50:12.327028900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-or1200/bitops.h u-boot-2009.03/include/asm-or1200/bitops.h
--- u-boot-2009.03_orig/include/asm-or1200/bitops.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/bitops.h 2008-08-26 18:13:42.783673400 -0700
@@ -0,0 +1,554 @@
+/* asm/bitops.h for Linux/or32
+ *
+ * __PHX__ TODO: asm versions
+ *
+ */
+
+#ifdef __KERNEL__
+#ifndef _OR32_BITOPS_H
+#define _OR32_BITOPS_H
+
+#include <asm/system.h>
+#include <asm/byteorder.h>
+// #include <linux/compiler.h>
+
+
+static __inline__ int set_bit(int nr, volatile void * a)
+{
+ int * addr = (void *)a;
+ int mask, retval;
+ unsigned long flags;
+
+ addr += nr >> 5;
+ mask = 1 << (nr & 0x1f);
+ local_irq_save(flags);
+ retval = (mask & *addr) != 0;
+ *addr |= mask;
+ local_irq_restore(flags);
+ return retval;
+}
+
+/*
+ * non-atomic version
+ */
+static __inline__ void __set_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = 1 << (nr & 0x1f);
+ unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
+
+ *p |= mask;
+}
+
+static __inline__ int clear_bit(int nr, volatile void * a)
+{
+ int * addr = (void *)a;
+ int mask, retval;
+ unsigned long flags;
+
+ addr += nr >> 5;
+ mask = 1 << (nr & 0x1f);
+ local_irq_save(flags);
+ retval = (mask & *addr) != 0;
+ *addr &= ~mask;
+ local_irq_restore(flags);
+ return retval;
+}
+
+/*
+ * non-atomic version
+ */
+static __inline__ void __clear_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = 1 << (nr & 0x1f);
+ unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
+
+ *p &= ~mask;
+}
+
+static __inline__ unsigned long change_bit(unsigned long nr, void *addr)
+{
+ int mask;
+ unsigned long flags;
+ unsigned long *ADDR = (unsigned long *) addr;
+ unsigned long oldbit;
+
+ ADDR += nr >> 5;
+ mask = 1 << (nr & 31);
+ local_irq_save(flags);
+ oldbit = (mask & *ADDR);
+ *ADDR ^= mask;
+ local_irq_restore(flags);
+ return oldbit != 0;
+}
+
+/*
+ * non-atomic version
+ */
+static __inline__ void __change_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = 1 << (nr & 0x1f);
+ unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
+
+ *p ^= mask;
+}
+
+static __inline__ int test_bit(int nr, const void *a)
+{
+ unsigned int mask;
+ unsigned int *adr = (unsigned int *)a;
+
+ adr += nr >> 5;
+ mask = 1 << (nr & 0x1f);
+ return ((mask & *adr) != 0);
+}
+
+static __inline__ int test_and_set_bit(int nr, void *addr)
+{
+ unsigned int mask, retval;
+ unsigned long flags;
+ unsigned int *adr = (unsigned int *)addr;
+
+ adr += nr >> 5;
+ mask = 1 << (nr & 0x1f);
+ local_irq_save(flags);
+ retval = (mask & *adr) != 0;
+ *adr |= mask;
+ local_irq_restore(flags);
+ return retval;
+}
+
+/*
+ * non-atomic version
+ */
+static __inline__ int __test_and_set_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = 1 << (nr & 0x1f);
+ unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
+ unsigned long old = *p;
+
+ *p = old | mask;
+ return (old & mask) != 0;
+}
+
+
+static __inline__ int test_and_clear_bit(int nr, void *addr)
+{
+ unsigned int mask, retval;
+ unsigned long flags;
+ unsigned int *adr = (unsigned int *)addr;
+
+ adr += nr >> 5;
+ mask = 1 << (nr & 0x1f);
+ local_irq_save(flags);
+ retval = (mask & *adr) != 0;
+ *adr &= ~mask;
+ local_irq_restore(flags);
+ return retval;
+}
+
+/*
+ * non-atomic version
+ */
+static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = 1 << (nr & 0x1f);
+ unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
+ unsigned long old = *p;
+
+ *p = old & ~mask;
+ return (old & mask) != 0;
+}
+
+static __inline__ int test_and_change_bit(int nr, void *addr)
+{
+ unsigned int mask, retval;
+ unsigned long flags;
+ unsigned int *adr = (unsigned int *)addr;
+ adr += nr >> 5;
+ mask = 1 << (nr & 0x1f);
+ local_irq_save(flags);
+ retval = (mask & *adr) != 0;
+ *adr ^= mask;
+ local_irq_restore(flags);
+ return retval;
+}
+
+/*
+ * non-atomic version
+ */
+static __inline__ int __test_and_change_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = 1 << (nr & 0x1f);
+ unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
+ unsigned long old = *p;
+
+ *p = old ^ mask;
+ return (old & mask) != 0;
+}
+
+#define __change_bit(nr, addr) (void)__test_and_change_bit(nr, addr)
+
+/*
+ * Find-bit routines..
+ */
+
+/*
+ * fls: find last bit set.
+ */
+
+#define fls(x) generic_fls(x)
+
+/* The easy/cheese version for now. */
+static __inline__ unsigned long ffz(unsigned long word)
+{
+ unsigned long result = 0;
+
+ while(word & 1) {
+ result++;
+ word >>= 1;
+ }
+ return result;
+}
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+#define ffs(x) generic_ffs(x)
+
+/*
+ * hweightN - returns the hamming weight of a N-bit word
+ * @x: the word to weigh
+ *
+ * The Hamming Weight of a number is the total number of bits set in it.
+ */
+#if 0 /*RGD*/
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+#endif
+/**
+ * __ffs - find first bit in word.
+ * @word: The word to search
+ *
+ * Undefined if no bit exists, so code should check against 0 first.
+ */
+static __inline__ int __ffs(unsigned long word)
+{
+ int num = 0;
+
+ if ((word & 0xffff) == 0) {
+ num += 16;
+ word >>= 16;
+ }
+ if ((word & 0xff) == 0) {
+ num += 8;
+ word >>= 8;
+ }
+ if ((word & 0xf) == 0) {
+ num += 4;
+ word >>= 4;
+ }
+ if ((word & 0x3) == 0) {
+ num += 2;
+ word >>= 2;
+ }
+ if ((word & 0x1) == 0)
+ num += 1;
+ return num;
+}
+
+// /*
+// * Every architecture must define this function. It's the fastest
+// * way of searching a 140-bit bitmap where the first 100 bits are
+// * unlikely to be set. It's guaranteed that at least one of the 140
+// * bits is cleared.
+// */
+// static __inline__ int sched_find_first_bit(unsigned long *b)
+// {
+
+// if (unlikely(b[0]))
+// return __ffs(b[0]);
+// if (unlikely(b[1]))
+// return __ffs(b[1]) + 32;
+// if (unlikely(b[2]))
+// return __ffs(b[2]) + 64;
+// if (b[3])
+// return __ffs(b[3]) + 96;
+// return __ffs(b[4]) + 128;
+// }
+
+/**
+ * * find_next_bit - find the next set bit in a memory region
+ * * @addr: The address to base the search on
+ * * @offset: The bitnumber to start searching at
+ * * @size: The maximum size to search
+ * */
+static __inline__ unsigned long find_next_bit(const unsigned long *addr,
+ unsigned long size, unsigned long offset)
+{
+ unsigned int *p = ((unsigned int *) addr) + (offset >> 5);
+ unsigned int result = offset & ~31UL;
+ unsigned int tmp;
+
+ if (offset >= size)
+ return size;
+ size -= result;
+ offset &= 31UL;
+ if (offset) {
+ tmp = *p++;
+ tmp &= ~0UL << offset;
+ if (size < 32)
+ goto found_first;
+ if (tmp)
+ goto found_middle;
+ size -= 32;
+ result += 32;
+ }
+ while (size >= 32) {
+ if ((tmp = *p++) != 0)
+ goto found_middle;
+ result += 32;
+ size -= 32;
+ }
+ if (!size)
+ return result;
+ tmp = *p;
+
+ found_first:
+ tmp &= ~0UL >> (32 - size);
+ if (tmp == 0UL) /* Are any bits set? */
+ return result + size; /* Nope. */
+ found_middle:
+ return result + __ffs(tmp);
+}
+
+
+/* find_next_zero_bit() finds the first zero bit in a bit string of length
+ * 'size' bits, starting the search at bit 'offset'. This is largely based
+ * on Linus's ALPHA routines, which are pretty portable BTW.
+ */
+
+static __inline__ unsigned long find_next_zero_bit(const unsigned long *addr,
+ unsigned long size,
+ unsigned long offset)
+{
+ unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
+ unsigned long result = offset & ~31UL;
+ unsigned long tmp;
+
+ if (offset >= size)
+ return size;
+ size -= result;
+ offset &= 31UL;
+ if (offset) {
+ tmp = *(p++);
+ tmp |= ~0UL >> (32-offset);
+ if (size < 32)
+ goto found_first;
+ if (~tmp)
+ goto found_middle;
+ size -= 32;
+ result += 32;
+ }
+ while (size & ~31UL) {
+ if (~(tmp = *(p++)))
+ goto found_middle;
+ result += 32;
+ size -= 32;
+ }
+ if (!size)
+ return result;
+ tmp = *p;
+
+found_first:
+ tmp |= ~0UL >> size;
+found_middle:
+ return result + ffz(tmp);
+}
+
+/**
+ * find_first_bit - find the first set bit in a memory region
+ * @addr: The address to start the search at
+ * @size: The maximum size to search
+ *
+ * Returns the bit-number of the first set bit, not the number of the byte
+ * containing a bit.
+ */
+#define find_first_bit(addr, size) \
+ find_next_bit((addr), (size), 0)
+
+
+/* Linus sez that gcc can optimize the following correctly, we'll see if this
+ * holds on the Sparc as it does for the ALPHA.
+ */
+
+#define find_first_zero_bit(addr, size) \
+ find_next_zero_bit((addr), (size), 0)
+
+/* Now for the ext2 filesystem bit operations and helper routines. */
+
+static __inline__ int ext2_set_bit(int nr,void * addr)
+{
+ int mask, retval;
+ unsigned long flags;
+ unsigned char *ADDR = (unsigned char *) addr;
+
+ ADDR += nr >> 3;
+ mask = 1 << (nr & 0x07);
+ local_irq_save(flags);
+ retval = (mask & *ADDR) != 0;
+ *ADDR |= mask;
+ local_irq_restore(flags);
+ return retval;
+}
+
+static __inline__ int ext2_clear_bit(int nr, void * addr)
+{
+ int mask, retval;
+ unsigned long flags;
+ unsigned char *ADDR = (unsigned char *) addr;
+
+ ADDR += nr >> 3;
+ mask = 1 << (nr & 0x07);
+ local_irq_save(flags);
+ retval = (mask & *ADDR) != 0;
+ *ADDR &= ~mask;
+ local_irq_restore(flags);
+ return retval;
+}
+
+static __inline__ int ext2_test_bit(int nr, const void * addr)
+{
+ int mask;
+ const unsigned char *ADDR = (const unsigned char *) addr;
+
+ ADDR += nr >> 3;
+ mask = 1 << (nr & 0x07);
+ return ((mask & *ADDR) != 0);
+}
+
+#define ext2_find_first_zero_bit(addr, size) \
+ ext2_find_next_zero_bit((addr), (size), 0)
+
+static __inline__ unsigned long ext2_find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
+{
+ unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
+ unsigned long result = offset & ~31UL;
+ unsigned long tmp;
+
+ if (offset >= size)
+ return size;
+ size -= result;
+ offset &= 31UL;
+ if(offset) {
+ tmp = *(p++);
+ tmp |= ~0UL << (32-offset);
+ if(size < 32)
+ goto found_first;
+ if(~tmp)
+ goto found_middle;
+ size -= 32;
+ result += 32;
+ }
+ while(size & ~31UL) {
+ if(~(tmp = *(p++)))
+ goto found_middle;
+ result += 32;
+ size -= 32;
+ }
+ if(!size)
+ return result;
+ tmp = *p;
+
+found_first:
+ tmp |= ~0UL << size;
+found_middle:
+ tmp = ((tmp>>24) | ((tmp>>8)&0xff00) | ((tmp<<8)&0xff0000) | (tmp<<24));
+ return result + ffz(tmp);
+}
+
+#define __ext2_set_bit ext2_set_bit
+#define __ext2_clear_bit ext2_clear_bit
+
+static __inline__ int __ext2_test_bit(int nr, __const__ void * addr)
+{
+ int mask;
+ __const__ unsigned char *ADDR = (__const__ unsigned char *) addr;
+
+ ADDR += nr >> 3;
+ mask = 1 << (nr & 0x07);
+ return ((mask & *ADDR) != 0);
+}
+
+#define __ext2_find_first_zero_bit(addr, size) \
+ __ext2_find_next_zero_bit((addr), (size), 0)
+
+static __inline__ unsigned long __ext2_find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
+{
+ unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
+ unsigned long result = offset & ~31UL;
+ unsigned long tmp;
+
+ if (offset >= size)
+ return size;
+ size -= result;
+ offset &= 31UL;
+ if(offset) {
+ tmp = *(p++);
+ tmp |= __swab32(~0UL >> (32-offset));
+ if(size < 32)
+ goto found_first;
+ if(~tmp)
+ goto found_middle;
+ size -= 32;
+ result += 32;
+ }
+ while(size & ~31UL) {
+ if(~(tmp = *(p++)))
+ goto found_middle;
+ result += 32;
+ size -= 32;
+ }
+ if(!size)
+ return result;
+ tmp = *p;
+
+found_first:
+ return result + ffz(__swab32(tmp) | (~0UL << size));
+found_middle:
+ return result + ffz(__swab32(tmp));
+}
+
+#define ext2_set_bit_atomic(lock, nr, addr) \
+ ({ \
+ int ret; \
+ spin_lock(lock); \
+ ret = ext2_set_bit((nr), (unsigned long *)(addr)); \
+ spin_unlock(lock); \
+ ret; \
+ })
+
+#define ext2_clear_bit_atomic(lock, nr, addr) \
+ ({ \
+ int ret; \
+ spin_lock(lock); \
+ ret = ext2_clear_bit((nr), (unsigned long *)(addr)); \
+ spin_unlock(lock); \
+ ret; \
+ })
+
+/*
+ * clear_bit() doesn't provide any barrier for the compiler.
+ */
+
+#define smp_mb__before_clear_bit() barrier()
+#define smp_mb__after_clear_bit() barrier()
+// #include <asm-generic/bitops/ffs.h>
+// #include <asm-generic/bitops/fls.h>
+// #include <asm-generic/bitops/hweight.h>
+// #include <asm-generic/bitops/fls64.h>
+#endif /* _OR32_BITOPS_H */
+#endif /* __KERNEL__ */
diff -Naur u-boot-2009.03_orig/include/asm-or1200/byteorder.h u-boot-2009.03/include/asm-or1200/byteorder.h
--- u-boot-2009.03_orig/include/asm-or1200/byteorder.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/byteorder.h 2008-07-02 09:36:01.937500000 -0700
@@ -0,0 +1,13 @@
+#ifndef _OR32_BYTEORDER_H
+#define _OR32_BYTEORDER_H
+
+#include <asm/types.h>
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
+# define __BYTEORDER_HAS_U64__
+# define __SWAB_64_THRU_32__
+#endif
+
+#include <linux/byteorder/big_endian.h>
+
+#endif /* _OR32_BYTEORDER_H */
diff -Naur u-boot-2009.03_orig/include/asm-or1200/config.h u-boot-2009.03/include/asm-or1200/config.h
--- u-boot-2009.03_orig/include/asm-or1200/config.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/config.h 2009-03-25 15:52:40.248817600 -0700
@@ -0,0 +1,5 @@
+/*
+
+*/
+
+
diff -Naur u-boot-2009.03_orig/include/asm-or1200/global_data.h u-boot-2009.03/include/asm-or1200/global_data.h
--- u-boot-2009.03_orig/include/asm-or1200/global_data.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/global_data.h 2008-09-05 09:56:50.625000000 -0700
@@ -0,0 +1,58 @@
+/*
+ * (C) Copyright 2004 Atmark Techno, Inc.
+ *
+ * Yasushi SHOJI <yashi@atmark-techno.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#ifndef __ASM_GBL_DATA_H
+#define __ASM_GBL_DATA_H
+/*
+ * The following data structure is placed in some memory wich is
+ * available very early after boot (like DPRAM on MPC8xx/MPC82xx, or
+ * some locked parts of the data cache) to allow for a minimum set of
+ * global variables during system initialization (until we have set
+ * up the memory controller so that we can use RAM).
+ *
+ * Keep it *SMALL* and remember to set CFG_GBL_DATA_SIZE > sizeof(gd_t)
+ */
+
+typedef struct global_data {
+ bd_t *bd;
+ unsigned long flags;
+ unsigned long baudrate;
+ unsigned long have_console; /* serial_init() was called */
+ unsigned long reloc_off; /* Relocation Offset */
+ unsigned long env_addr; /* Address of Environment struct */
+ unsigned long env_valid; /* Checksum of Environment valid? */
+ unsigned long fb_base; /* base address of frame buffer */
+ void **jt; /* jump table */
+} gd_t;
+
+/*
+ * Global Data Flags
+ */
+#define GD_FLG_RELOC 0x00001 /* Code was relocated to RAM */
+#define GD_FLG_DEVINIT 0x00002 /* Devices have been initialized */
+#define GD_FLG_SILENT 0x00004 /* Silent mode */
+
+#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r30")
+
+#endif /* __ASM_GBL_DATA_H */
diff -Naur u-boot-2009.03_orig/include/asm-or1200/io.h u-boot-2009.03/include/asm-or1200/io.h
--- u-boot-2009.03_orig/include/asm-or1200/io.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/io.h 2008-07-02 09:36:02.031250000 -0700
@@ -0,0 +1,90 @@
+#ifndef _OR32_IO_H
+#define _OR32_IO_H
+
+#include <asm/page.h> /* for __va, __pa */
+
+
+/*
+ * Change virtual addresses to physical addresses and vv.
+ */
+
+static inline unsigned long virt_to_phys(volatile void * address)
+{
+ return __pa(address);
+}
+
+static inline void * phys_to_virt(unsigned long address)
+{
+ return __va(address);
+}
+
+extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
+
+extern inline void * ioremap(unsigned long offset, unsigned long size)
+{
+ return __ioremap(offset, size, 0);
+}
+
+/* #define _PAGE_CI 0x002 */
+extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
+{
+ return __ioremap(offset, size, 0x002);
+}
+
+extern void iounmap(void *addr);
+
+#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
+
+/*
+ * IO bus memory addresses are also 1:1 with the physical address
+ */
+#define virt_to_bus virt_to_phys
+#define bus_to_virt phys_to_virt
+
+/*
+ * readX/writeX() are used to access memory mapped devices. On some
+ * architectures the memory mapped IO stuff needs to be accessed
+ * differently. On the or32 architecture, we just read/write the
+ * memory location directly.
+ */
+#define readb(addr) (*(volatile unsigned char *) (addr))
+#define readw(addr) (*(volatile unsigned short *) (addr))
+#define readl(addr) (*(volatile unsigned int *) (addr))
+
+#define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b))
+#define writew(b,addr) ((*(volatile unsigned short *) (addr)) = (b))
+#define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b))
+#define __raw_writel writel /*RGD*/
+
+#define memset_io(a,b,c) memset((void *)(a),(b),(c))
+#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c))
+#define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c))
+
+/*
+ * Again, or32 does not require mem IO specific function.
+ */
+
+#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d))
+
+#define IO_BASE 0x0
+#define IO_SPACE_LIMIT 0xffffffff
+
+#define inb(port) (*(volatile unsigned char *) (port+IO_BASE))
+#define outb(value,port) ((*(volatile unsigned char *) (port+IO_BASE)) = (value))
+
+#define inb_p(port) inb((port))
+#define outb_p(val, port) outb((val), (port))
+
+/*
+ * Convert a physical pointer to a virtual kernel pointer for /dev/mem
+ * access
+ */
+#define xlate_dev_mem_ptr(p) __va(p)
+
+/*
+ * Convert a virtual cached pointer to an uncached pointer
+ */
+#define xlate_dev_kmem_ptr(p) p
+
+
+#endif
diff -Naur u-boot-2009.03_orig/include/asm-or1200/page.h u-boot-2009.03/include/asm-or1200/page.h
--- u-boot-2009.03_orig/include/asm-or1200/page.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/page.h 2008-07-02 09:36:02.140625000 -0700
@@ -0,0 +1,107 @@
+#ifndef _OR32_PAGE_H
+#define _OR32_PAGE_H
+
+
+/* PAGE_SHIFT determines the page size */
+#define PAGE_SHIFT 13
+#define PAGE_SIZE (1UL << PAGE_SHIFT)
+#define PAGE_MASK (~(PAGE_SIZE-1))
+#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
+
+#define PAGE_OFFSET 0xc0000000
+#define KERNELBASE PAGE_OFFSET
+
+#ifdef __KERNEL__
+
+#ifndef __ASSEMBLY__
+#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
+#define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE)
+
+#define clear_user_page(page, vaddr, pg) clear_page(page)
+#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
+
+#define STRICT_MM_TYPECHECKS
+#ifdef STRICT_MM_TYPECHECKS
+/*
+ * These are used to make use of C type-checking..
+ */
+typedef struct { unsigned long pte; } pte_t;
+typedef struct { unsigned long pmd; } pmd_t;
+typedef struct { unsigned long pgd; } pgd_t;
+typedef struct { unsigned long pgprot; } pgprot_t;
+
+#define pte_val(x) ((x).pte)
+#define pmd_val(x) ((x).pmd)
+#define pgd_val(x) ((x).pgd)
+#define pgprot_val(x) ((x).pgprot)
+
+#define __pte(x) ((pte_t) { (x) } )
+#define __pmd(x) ((pmd_t) { (x) } )
+#define __pgd(x) ((pgd_t) { (x) } )
+#define __pgprot(x) ((pgprot_t) { (x) } )
+
+#else /* STRICT_MM_TYPECHECKS */
+/*
+ * .. while these make it easier on the compiler
+ */
+typedef unsigned long pte_t;
+typedef unsigned long pmd_t;
+typedef unsigned long pgd_t;
+typedef unsigned long pgprot_t;
+
+#define pte_val(x) (x)
+#define pmd_val(x) (x)
+#define pgd_val(x) (x)
+#define pgprot_val(x) (x)
+
+#define __pte(x) (x)
+#define __pmd(x) (x)
+#define __pgd(x) (x)
+#define __pgprot(x) (x)
+
+#endif /* STRICT_MM_TYPECHECKS */
+
+
+/* Pure 2^n version of get_order */
+static __inline__ int get_order(unsigned long size)
+{
+ int order;
+
+ size = (size-1) >> (PAGE_SHIFT-1);
+ order = -1;
+ do {
+ size >>= 1;
+ order++;
+ } while (size);
+ return order;
+}
+
+
+/* macros to convert between really physical and virtual addresses
+ */
+
+#define __pa(x) ((unsigned long)(x) - PAGE_OFFSET)
+#define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET))
+
+#define pfn_to_page(pfn) (mem_map + (pfn))
+#define page_to_pfn(page) ((unsigned long)((page) - mem_map))
+
+#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
+#define page_to_virt(page) __va(page_to_pfn(page) << PAGE_SHIFT)
+
+#define pfn_valid(pfn) ((pfn) < max_mapnr)
+#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
+
+/* from linker script */
+
+extern unsigned long dram_start, dram_end;
+
+#endif /* __ASSEMBLY__ */
+
+#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
+ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+
+#endif /* __KERNEL__ */
+
+#endif /* _OR32_PAGE_H */
+
diff -Naur u-boot-2009.03_orig/include/asm-or1200/posix_types.h u-boot-2009.03/include/asm-or1200/posix_types.h
--- u-boot-2009.03_orig/include/asm-or1200/posix_types.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/posix_types.h 2008-08-26 18:22:31.441162400 -0700
@@ -0,0 +1,142 @@
+#ifndef _OR32_POSIX_TYPES_H
+#define _OR32_POSIX_TYPES_H
+
+/*
+ * This file is generally used by user-level software, so you need to
+ * be a little careful about namespace pollution etc. Also, we cannot
+ * assume GCC is being used.
+ */
+
+typedef unsigned int __kernel_dev_t;
+
+typedef unsigned int __kernel_ino_t;
+typedef unsigned int __kernel_mode_t;
+typedef unsigned short __kernel_nlink_t;
+typedef long __kernel_off_t;
+typedef int __kernel_pid_t;
+typedef unsigned int __kernel_uid_t;
+typedef unsigned int __kernel_gid_t;
+typedef unsigned int __kernel_size_t;
+typedef int __kernel_ssize_t;
+typedef long __kernel_ptrdiff_t;
+typedef long __kernel_time_t;
+typedef long __kernel_suseconds_t;
+typedef long __kernel_clock_t;
+typedef int __kernel_timer_t;
+typedef int __kernel_clockid_t;
+typedef int __kernel_daddr_t;
+typedef char * __kernel_caddr_t;
+typedef short __kernel_ipc_pid_t;
+typedef unsigned short __kernel_uid16_t;
+typedef unsigned short __kernel_gid16_t;
+typedef unsigned int __kernel_uid32_t;
+typedef unsigned int __kernel_gid32_t;
+
+typedef unsigned int __kernel_old_uid_t;
+typedef unsigned int __kernel_old_gid_t;
+typedef unsigned short __kernel_old_dev_t;
+
+/* i386, cris version
+typedef unsigned long __kernel_ino_t;
+typedef unsigned short __kernel_mode_t;
+typedef unsigned short __kernel_nlink_t;
+typedef long __kernel_off_t;
+typedef int __kernel_pid_t;
+typedef unsigned short __kernel_ipc_pid_t;
+typedef unsigned short __kernel_uid_t;
+typedef unsigned short __kernel_gid_t;
+typedef unsigned int __kernel_size_t;
+typedef long __kernel_ssize_t;
+typedef int __kernel_ptrdiff_t;
+typedef long __kernel_time_t;
+typedef long __kernel_suseconds_t;
+typedef long __kernel_clock_t;
+typedef int __kernel_timer_t;
+typedef int __kernel_clockid_t;
+typedef int __kernel_daddr_t;
+typedef char * __kernel_caddr_t;
+typedef unsigned short __kernel_uid16_t;
+typedef unsigned short __kernel_gid16_t;
+typedef unsigned int __kernel_uid32_t;
+typedef unsigned int __kernel_gid32_t;
+
+typedef unsigned short __kernel_old_uid_t;
+typedef unsigned short __kernel_old_gid_t;
+typedef unsigned short __kernel_old_dev_t;
+*/
+
+#ifdef __GNUC__
+typedef long long __kernel_loff_t;
+#endif
+
+typedef struct {
+ int val[2];
+} __kernel_fsid_t;
+
+#ifndef __GNUC__
+
+#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
+#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
+#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
+#define __FD_ZERO(set) \
+ ((void) memset ((__ptr_t) (set), 0, sizeof (__kernel_fd_set)))
+
+#else /* __GNUC__ */
+
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) \
+ || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 0)
+/* With GNU C, use inline functions instead so args are evaluated only once: */
+
+#undef __FD_SET
+static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp)
+{
+ unsigned long _tmp = fd / __NFDBITS;
+ unsigned long _rem = fd % __NFDBITS;
+ fdsetp->fds_bits[_tmp] |= (1UL<<_rem);
+}
+
+#undef __FD_CLR
+static __inline__ void __FD_CLR(unsigned long fd, __kernel_fd_set *fdsetp)
+{
+ unsigned long _tmp = fd / __NFDBITS;
+ unsigned long _rem = fd % __NFDBITS;
+ fdsetp->fds_bits[_tmp] &= ~(1UL<<_rem);
+}
+
+#undef __FD_ISSET
+static __inline__ int __FD_ISSET(unsigned long fd, __kernel_fd_set *p)
+{
+ unsigned long _tmp = fd / __NFDBITS;
+ unsigned long _rem = fd % __NFDBITS;
+ return (p->fds_bits[_tmp] & (1UL<<_rem)) != 0;
+}
+
+/*
+ * This will unroll the loop for the normal constant case (8 ints,
+ * for a 256-bit fd_set)
+ */
+#undef __FD_ZERO
+static __inline__ void __FD_ZERO(__kernel_fd_set *p)
+{
+ unsigned int *tmp = (unsigned int *)p->fds_bits;
+ int i;
+
+ if (__builtin_constant_p(__FDSET_LONGS)) {
+ switch (__FDSET_LONGS) {
+ case 8:
+ tmp[0] = 0; tmp[1] = 0; tmp[2] = 0; tmp[3] = 0;
+ tmp[4] = 0; tmp[5] = 0; tmp[6] = 0; tmp[7] = 0;
+ return;
+ }
+ }
+ i = __FDSET_LONGS;
+ while (i) {
+ i--;
+ *tmp = 0;
+ tmp++;
+ }
+}
+
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
+#endif /* __GNUC__ */
+#endif /* _OR32_POSIX_TYPES_H */
diff -Naur u-boot-2009.03_orig/include/asm-or1200/processor.h u-boot-2009.03/include/asm-or1200/processor.h
--- u-boot-2009.03_orig/include/asm-or1200/processor.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/processor.h 2008-07-02 09:36:02.187500000 -0700
@@ -0,0 +1,119 @@
+/*
+ * include/asm-or32/processor.h
+ *
+ * Based on:
+ * include/asm-cris/processor.h
+ * Copyright (C) 2000, 2001, 2002 Axis Communications AB
+ *
+ */
+
+#ifndef _OR32_PROCESSOR_H
+#define _OR32_PROCESSOR_H
+
+#include <asm/spr_defs.h>
+#include <asm/page.h>
+#include <asm/ptrace.h>
+
+/* Kernel and user SR register setting */
+#define KERNEL_SR (SPR_SR_DME | SPR_SR_IME | SPR_SR_ICE | SPR_SR_DCE | SPR_SR_SM)
+#define USER_SR (SPR_SR_DME | SPR_SR_IME | SPR_SR_ICE | SPR_SR_DCE | SPR_SR_IEE | SPR_SR_TEE)
+/*
+ * Default implementation of macro that returns current
+ * instruction pointer ("program counter").
+ */
+#define current_text_addr() ({ __label__ _l; _l: &&_l;})
+
+/* or32has no problems with write protection */
+
+#define wp_works_ok 1
+
+/*
+ * User space process size. This is hardcoded into a few places,
+ * so don't change it unless you know what you are doing.
+ */
+
+#define TASK_SIZE (0x80000000UL)
+
+/* This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)
+
+/* THREAD_SIZE is the size of the task_struct/kernel_stack combo.
+ * normally, the stack is found by doing something like p + THREAD_SIZE
+ * in or32, a page is 8192 bytes, which seems like a sane size
+ */
+
+#define THREAD_SIZE PAGE_SIZE
+
+#ifndef __ASSEMBLY__
+
+struct task_struct;
+
+typedef struct {
+ unsigned long seg;
+} mm_segment_t;
+
+struct thread_struct {
+ unsigned long usp; /* user space pointer */
+ unsigned long ksp; /* kernel stack pointer */
+ struct pt_regs *regs; /* pointer to saved register state */
+ mm_segment_t fs; /* for get_fs() validation */
+ signed long last_syscall;
+};
+
+/*
+ * At user->kernel entry, the pt_regs struct is stacked on the top of the kernel-stack.
+ * This macro allows us to find those regs for a task.
+ * Notice that subsequent pt_regs stackings, like recursive interrupts occuring while
+ * we're in the kernel, won't affect this - only the first user->kernel transition
+ * registers are reached by this.
+ */
+#define user_regs(thread_info) (((struct pt_regs *)((unsigned long)(thread_info) + THREAD_SIZE)) - 1)
+
+/*
+ * Dito but for the currently running task
+ */
+
+#define current_regs() user_regs(current->thread_info)
+
+extern inline void prepare_to_copy(struct task_struct *tsk)
+{
+}
+
+#define INIT_SP (sizeof(init_stack) + (unsigned long) &init_stack)
+
+#define INIT_THREAD { \
+ 0, INIT_SP, NULL, KERNEL_DS, 0 }
+
+
+#define KSTK_EIP(tsk) ((tsk)->thread.regs? (tsk)->thread.regs->pc: 0)
+#define KSTK_ESP(tsk) ((tsk)->thread.regs? (tsk)->thread.regs->sp: 0)
+
+
+extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp);
+void release_thread(struct task_struct *);
+unsigned long get_wchan(struct task_struct *p);
+
+/*
+ * Free current thread data structures etc..
+ */
+
+extern inline void exit_thread(void)
+{
+ /* Nothing needs to be done. */
+}
+
+/*
+ * Return saved PC of a blocked thread. For now, this is the "user" PC
+ */
+extern unsigned long thread_saved_pc(struct task_struct *t);
+
+#define init_stack (init_thread_union.stack)
+
+#define cpu_relax() do { } while (0)
+
+#endif /* __ASSEMBLY__ */
+#endif /* _OR32_PROCESSOR_H */
diff -Naur u-boot-2009.03_orig/include/asm-or1200/ptrace.h u-boot-2009.03/include/asm-or1200/ptrace.h
--- u-boot-2009.03_orig/include/asm-or1200/ptrace.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/ptrace.h 2008-07-02 09:36:02.187500000 -0700
@@ -0,0 +1,86 @@
+#ifndef _OR32_PTRACE_H
+#define _OR32_PTRACE_H
+
+#include <asm/spr_defs.h>
+/*
+ * This struct defines the way the registers are stored on the
+ * kernel stack during a system call or other kernel entry.
+ *
+ * this should only contain volatile regs
+ * since we can keep non-volatile in the thread_struct
+ * should set this up when only volatiles are saved
+ * by intr code.
+ *
+ * Since this is going on the stack, *CARE MUST BE TAKEN* to insure
+ * that the overall structure is a multiple of 16 bytes in length.
+ *
+ * Note that the offsets of the fields in this struct correspond with
+ * the values below.
+ */
+
+#ifndef __ASSEMBLY__
+
+struct pt_regs {
+ long pc;
+ long sr;
+ long sp;
+ long gprs[30];
+ long orig_gpr3; /* Used for restarting system calls */
+ long result; /* Result of a system call */
+ long syscallno; /* Syscall no. (used by strace) */
+};
+#endif /* __ASSEMBLY__ */
+
+#ifdef __KERNEL__
+#define STACK_FRAME_OVERHEAD 0 /* size of minimum stack frame */
+
+/* Size of stack frame allocated when calling signal handler. */
+#define __SIGNAL_FRAMESIZE 64
+
+#define instruction_pointer(regs) ((regs)->pc)
+#define user_mode(regs) (((regs)->sr & SPR_SR_SM) == 0)
+#define profile_pc(regs) instruction_pointer(regs)
+
+#endif /* __KERNEL__ */
+
+/*
+ * Offsets used by 'ptrace' system call interface.
+ */
+#define PC 0
+#define SR 4
+#define SP 8
+#define GPR2 12
+#define GPR3 16
+#define GPR4 20
+#define GPR5 24
+#define GPR6 28
+#define GPR7 32
+#define GPR8 36
+#define GPR9 40
+#define GPR10 44
+#define GPR11 48
+#define GPR12 52
+#define GPR13 56
+#define GPR14 60
+#define GPR15 64
+#define GPR16 68
+#define GPR17 72
+#define GPR18 76
+#define GPR19 80
+#define GPR20 84
+#define GPR21 88
+#define GPR22 92
+#define GPR23 96
+#define GPR24 100
+#define GPR25 104
+#define GPR26 108
+#define GPR27 112
+#define GPR28 116
+#define GPR29 120
+#define GPR30 124
+#define GPR31 128
+#define ORIG_GPR3 132
+#define RESULT 136
+#define SYSCALLNO 140
+
+#endif /* _OR32_PTRACE_H */
diff -Naur u-boot-2009.03_orig/include/asm-or1200/spr_defs.h u-boot-2009.03/include/asm-or1200/spr_defs.h
--- u-boot-2009.03_orig/include/asm-or1200/spr_defs.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/spr_defs.h 2008-07-02 09:36:02.296875000 -0700
@@ -0,0 +1,438 @@
+/* spr_defs.h -- Defines OR1K architecture specific special-purpose registers
+ Copyright (C) 1999 Damjan Lampret, lampret@opencores.org
+
+ For more information about OpenRISC processors, licensing and
+ design services you may contact Beyond Semiconductor at
+ sales@bsemi.com or visit website http://www.bsemi.com.
+
+This file is part of OpenRISC 1000 Architectural Simulator.
+
+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., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* This file is also used by microkernel test bench. Among
+others it is also used in assembly file(s). */
+
+/* Definition of special-purpose registers (SPRs) */
+
+#ifndef _SPR_DEFS_H
+#define _SPR_DEFS_H
+
+#define MAX_GRPS (32)
+#define MAX_SPRS_PER_GRP_BITS (11)
+#define MAX_SPRS_PER_GRP (1 << MAX_SPRS_PER_GRP_BITS)
+#define MAX_SPRS (0x10000)
+
+/* Base addresses for the groups */
+#define SPRGROUP_SYS (0<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_DMMU (1<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_IMMU (2<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_DC (3<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_IC (4<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_MAC (5<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_D (6<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_PC (7<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_PM (8<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_PIC (9<< MAX_SPRS_PER_GRP_BITS)
+#define SPRGROUP_TT (10<< MAX_SPRS_PER_GRP_BITS)
+
+/* System control and status group */
+#define SPR_VR (SPRGROUP_SYS + 0)
+#define SPR_UPR (SPRGROUP_SYS + 1)
+#define SPR_PC (SPRGROUP_SYS + 16) /* CZ 21/06/01 */
+#define SPR_SR (SPRGROUP_SYS + 17) /* CZ 21/06/01 */
+#define SPR_EPCR_BASE (SPRGROUP_SYS + 32) /* CZ 21/06/01 */
+#define SPR_EPCR_LAST (SPRGROUP_SYS + 47) /* CZ 21/06/01 */
+#define SPR_EEAR_BASE (SPRGROUP_SYS + 48)
+#define SPR_EEAR_LAST (SPRGROUP_SYS + 63)
+#define SPR_ESR_BASE (SPRGROUP_SYS + 64)
+#define SPR_ESR_LAST (SPRGROUP_SYS + 79)
+
+#if 0
+/* Data MMU group */
+#define SPR_DMMUCR (SPRGROUP_DMMU + 0)
+#define SPR_DTLBMR_BASE(WAY) (SPRGROUP_DMMU + 0x200 + (WAY) * 0x200)
+#define SPR_DTLBMR_LAST(WAY) (SPRGROUP_DMMU + 0x2ff + (WAY) * 0x200)
+#define SPR_DTLBTR_BASE(WAY) (SPRGROUP_DMMU + 0x300 + (WAY) * 0x200)
+#define SPR_DTLBTR_LAST(WAY) (SPRGROUP_DMMU + 0x3ff + (WAY) * 0x200)
+
+/* Instruction MMU group */
+#define SPR_IMMUCR (SPRGROUP_IMMU + 0)
+#define SPR_ITLBMR_BASE(WAY) (SPRGROUP_IMMU + 0x200 + (WAY) * 0x200)
+#define SPR_ITLBMR_LAST(WAY) (SPRGROUP_IMMU + 0x2ff + (WAY) * 0x200)
+#define SPR_ITLBTR_BASE(WAY) (SPRGROUP_IMMU + 0x300 + (WAY) * 0x200)
+#define SPR_ITLBTR_LAST(WAY) (SPRGROUP_IMMU + 0x3ff + (WAY) * 0x200)
+#else
+/* Data MMU group */
+#define SPR_DMMUCR (SPRGROUP_DMMU + 0)
+#define SPR_DTLBMR_BASE(WAY) (SPRGROUP_DMMU + 0x200 + (WAY) * 0x100)
+#define SPR_DTLBMR_LAST(WAY) (SPRGROUP_DMMU + 0x27f + (WAY) * 0x100)
+#define SPR_DTLBTR_BASE(WAY) (SPRGROUP_DMMU + 0x280 + (WAY) * 0x100)
+#define SPR_DTLBTR_LAST(WAY) (SPRGROUP_DMMU + 0x2ff + (WAY) * 0x100)
+
+/* Instruction MMU group */
+#define SPR_IMMUCR (SPRGROUP_IMMU + 0)
+#define SPR_ITLBMR_BASE(WAY) (SPRGROUP_IMMU + 0x200 + (WAY) * 0x100)
+#define SPR_ITLBMR_LAST(WAY) (SPRGROUP_IMMU + 0x27f + (WAY) * 0x100)
+#define SPR_ITLBTR_BASE(WAY) (SPRGROUP_IMMU + 0x280 + (WAY) * 0x100)
+#define SPR_ITLBTR_LAST(WAY) (SPRGROUP_IMMU + 0x2ff + (WAY) * 0x100)
+#endif
+
+/* Data cache group */
+#define SPR_DCCR (SPRGROUP_DC + 0)
+#define SPR_DCBPR (SPRGROUP_DC + 1)
+#define SPR_DCBFR (SPRGROUP_DC + 2)
+#define SPR_DCBIR (SPRGROUP_DC + 3)
+#define SPR_DCBWR (SPRGROUP_DC + 4)
+#define SPR_DCBLR (SPRGROUP_DC + 5)
+#define SPR_DCR_BASE(WAY) (SPRGROUP_DC + 0x200 + (WAY) * 0x200)
+#define SPR_DCR_LAST(WAY) (SPRGROUP_DC + 0x3ff + (WAY) * 0x200)
+
+/* Instruction cache group */
+#define SPR_ICCR (SPRGROUP_IC + 0)
+#define SPR_ICBPR (SPRGROUP_IC + 1)
+#define SPR_ICBIR (SPRGROUP_IC + 2)
+#define SPR_ICBLR (SPRGROUP_IC + 3)
+#define SPR_ICR_BASE(WAY) (SPRGROUP_IC + 0x200 + (WAY) * 0x200)
+#define SPR_ICR_LAST(WAY) (SPRGROUP_IC + 0x3ff + (WAY) * 0x200)
+
+/* MAC group */
+#define SPR_MACLO (SPRGROUP_MAC + 1)
+#define SPR_MACHI (SPRGROUP_MAC + 2)
+
+/* Debug group */
+#define SPR_DVR(N) (SPRGROUP_D + (N))
+#define SPR_DCR(N) (SPRGROUP_D + 8 + (N))
+#define SPR_DMR1 (SPRGROUP_D + 16)
+#define SPR_DMR2 (SPRGROUP_D + 17)
+#define SPR_DWCR0 (SPRGROUP_D + 18)
+#define SPR_DWCR1 (SPRGROUP_D + 19)
+#define SPR_DSR (SPRGROUP_D + 20)
+#define SPR_DRR (SPRGROUP_D + 21)
+#define SPR_DIR (SPRGROUP_D + 22)
+
+/* Performance counters group */
+#define SPR_PCCR(N) (SPRGROUP_PC + (N))
+#define SPR_PCMR(N) (SPRGROUP_PC + 8 + (N))
+
+/* Power management group */
+#define SPR_PMR (SPRGROUP_PM + 0)
+
+/* PIC group */
+#define SPR_PICMR (SPRGROUP_PIC + 0)
+#define SPR_PICPR (SPRGROUP_PIC + 1)
+#define SPR_PICSR (SPRGROUP_PIC + 2)
+
+/* Tick Timer group */
+#define SPR_TTMR (SPRGROUP_TT + 0)
+#define SPR_TTCR (SPRGROUP_TT + 1)
+
+/*
+ * Bit definitions for the Version Register
+ *
+ */
+#define SPR_VR_VER 0xffff0000 /* Processor version */
+#define SPR_VR_REV 0x0000003f /* Processor revision */
+
+/*
+ * Bit definitions for the Unit Present Register
+ *
+ */
+#define SPR_UPR_UP 0x00000001 /* UPR present */
+#define SPR_UPR_DCP 0x00000002 /* Data cache present */
+#define SPR_UPR_ICP 0x00000004 /* Instruction cache present */
+#define SPR_UPR_DMP 0x00000008 /* Data MMU present */
+#define SPR_UPR_IMP 0x00000010 /* Instruction MMU present */
+#define SPR_UPR_OB32P 0x00000020 /* ORBIS32 present */
+#define SPR_UPR_OB64P 0x00000040 /* ORBIS64 present */
+#define SPR_UPR_OF32P 0x00000080 /* ORFPX32 present */
+#define SPR_UPR_OF64P 0x00000100 /* ORFPX64 present */
+#define SPR_UPR_OV32P 0x00000200 /* ORVDX32 present */
+#define SPR_UPR_OV64P 0x00000400 /* ORVDX64 present */
+#define SPR_UPR_DUP 0x00000800 /* Debug unit present */
+#define SPR_UPR_PCUP 0x00001000 /* Performance counters unit present */
+#define SPR_UPR_PMP 0x00002000 /* Power management present */
+#define SPR_UPR_PICP 0x00004000 /* PIC present */
+#define SPR_UPR_TTP 0x00008000 /* Tick timer present */
+#define SPR_UPR_SRP 0x00010000 /* Shadow registers present */
+#define SPR_UPR_RES 0x00fe0000 /* ORVDX32 present */
+#define SPR_UPR_CUST 0xff000000 /* Custom units */
+
+/*
+ * Bit definitions for the Supervision Register
+ *
+ */
+#define SPR_SR_CID 0xf0000000 /* Context ID */
+#define SPR_SR_FO 0x00008000 /* Fixed one */
+#define SPR_SR_EPH 0x00004000 /* Exception Prefixi High */
+#define SPR_SR_DSX 0x00002000 /* Delay Slot Exception */
+#define SPR_SR_OVE 0x00001000 /* Overflow flag Exception */
+#define SPR_SR_OV 0x00000800 /* Overflow flag */
+#define SPR_SR_CY 0x00000400 /* Carry flag */
+#define SPR_SR_F 0x00000200 /* Condition Flag */
+#define SPR_SR_CE 0x00000100 /* CID Enable */
+#define SPR_SR_LEE 0x00000080 /* Little Endian Enable */
+#define SPR_SR_IME 0x00000040 /* Instruction MMU Enable */
+#define SPR_SR_DME 0x00000020 /* Data MMU Enable */
+#define SPR_SR_ICE 0x00000010 /* Instruction Cache Enable */
+#define SPR_SR_DCE 0x00000008 /* Data Cache Enable */
+#define SPR_SR_IEE 0x00000004 /* Interrupt Exception Enable */
+#define SPR_SR_TEE 0x00000002 /* Tick timer Exception Enable */
+#define SPR_SR_SM 0x00000001 /* Supervisor Mode */
+#define SPR_SR_FO_BIT 15
+#define SPR_SR_EPH_BIT 14
+#define SPR_SR_DSX_BIT 13
+#define SPR_SR_OVE_BIT 12
+#define SPR_SR_OV_BIT 11
+#define SPR_SR_CY_BIT 10
+#define SPR_SR_F_BIT 9
+#define SPR_SR_CE_BIT 8
+#define SPR_SR_LEE_BIT 7
+#define SPR_SR_IME_BIT 6
+#define SPR_SR_DME_BIT 5
+#define SPR_SR_ICE_BIT 4
+#define SPR_SR_DCE_BIT 3
+#define SPR_SR_IEE_BIT 2
+#define SPR_SR_TEE_BIT 1
+#define SPR_SR_SM_BIT 0
+
+
+/*
+ * Bit definitions for the Data MMU Control Register
+ *
+ */
+#define SPR_DMMUCR_P2S 0x0000003e /* Level 2 Page Size */
+#define SPR_DMMUCR_P1S 0x000007c0 /* Level 1 Page Size */
+#define SPR_DMMUCR_VADDR_WIDTH 0x0000f800 /* Virtual ADDR Width */
+#define SPR_DMMUCR_PADDR_WIDTH 0x000f0000 /* Physical ADDR Width */
+
+/*
+ * Bit definitions for the Instruction MMU Control Register
+ *
+ */
+#define SPR_IMMUCR_P2S 0x0000003e /* Level 2 Page Size */
+#define SPR_IMMUCR_P1S 0x000007c0 /* Level 1 Page Size */
+#define SPR_IMMUCR_VADDR_WIDTH 0x0000f800 /* Virtual ADDR Width */
+#define SPR_IMMUCR_PADDR_WIDTH 0x000f0000 /* Physical ADDR Width */
+
+/*
+ * Bit definitions for the Data TLB Match Register
+ *
+ */
+#define SPR_DTLBMR_V 0x00000001 /* Valid */
+#define SPR_DTLBMR_PL1 0x00000002 /* Page Level 1 (if 0 then PL2) */
+#define SPR_DTLBMR_CID 0x0000003c /* Context ID */
+#define SPR_DTLBMR_LRU 0x000000c0 /* Least Recently Used */
+#define SPR_DTLBMR_VPN 0xfffff000 /* Virtual Page Number */
+
+/*
+ * Bit definitions for the Data TLB Translate Register
+ *
+ */
+#define SPR_DTLBTR_CC 0x00000001 /* Cache Coherency */
+#define SPR_DTLBTR_CI 0x00000002 /* Cache Inhibit */
+#define SPR_DTLBTR_WBC 0x00000004 /* Write-Back Cache */
+#define SPR_DTLBTR_WOM 0x00000008 /* Weakly-Ordered Memory */
+#define SPR_DTLBTR_A 0x00000010 /* Accessed */
+#define SPR_DTLBTR_D 0x00000020 /* Dirty */
+#define SPR_DTLBTR_URE 0x00000040 /* User Read Enable */
+#define SPR_DTLBTR_UWE 0x00000080 /* User Write Enable */
+#define SPR_DTLBTR_SRE 0x00000100 /* Supervisor Read Enable */
+#define SPR_DTLBTR_SWE 0x00000200 /* Supervisor Write Enable */
+#define SPR_DTLBTR_PPN 0xfffff000 /* Physical Page Number */
+#define DTLBTR_NO_LIMIT ( SPR_DTLBTR_URE | \
+ SPR_DTLBTR_UWE | \
+ SPR_DTLBTR_SRE | \
+ SPR_DTLBTR_SWE )
+
+/*
+ * Bit definitions for the Instruction TLB Match Register
+ *
+ */
+#define SPR_ITLBMR_V 0x00000001 /* Valid */
+#define SPR_ITLBMR_PL1 0x00000002 /* Page Level 1 (if 0 then PL2) */
+#define SPR_ITLBMR_CID 0x0000003c /* Context ID */
+#define SPR_ITLBMR_LRU 0x000000c0 /* Least Recently Used */
+#define SPR_ITLBMR_VPN 0xfffff000 /* Virtual Page Number */
+
+/*
+ * Bit definitions for the Instruction TLB Translate Register
+ *
+ */
+#define SPR_ITLBTR_CC 0x00000001 /* Cache Coherency */
+#define SPR_ITLBTR_CI 0x00000002 /* Cache Inhibit */
+#define SPR_ITLBTR_WBC 0x00000004 /* Write-Back Cache */
+#define SPR_ITLBTR_WOM 0x00000008 /* Weakly-Ordered Memory */
+#define SPR_ITLBTR_A 0x00000010 /* Accessed */
+#define SPR_ITLBTR_D 0x00000020 /* Dirty */
+#define SPR_ITLBTR_SXE 0x00000040 /* User Read Enable */
+#define SPR_ITLBTR_UXE 0x00000080 /* User Write Enable */
+#define SPR_ITLBTR_PPN 0xfffff000 /* Physical Page Number */
+#define ITLBTR_NO_LIMIT (SPR_ITLBTR_SXE | SPR_ITLBTR_UXE)
+
+/*
+ * Bit definitions for Data Cache Control register
+ *
+ */
+#define SPR_DCCR_EW 0x000000ff /* Enable ways */
+
+/*
+ * Bit definitions for Insn Cache Control register
+ *
+ */
+#define SPR_ICCR_EW 0x000000ff /* Enable ways */
+
+/*
+ * Bit definitions for Debug Control registers
+ *
+ */
+#define SPR_DCR_DP 0x00000001 /* DVR/DCR present */
+#define SPR_DCR_CC 0x0000000e /* Compare condition */
+#define SPR_DCR_SC 0x00000010 /* Signed compare */
+#define SPR_DCR_CT 0x000000e0 /* Compare to */
+
+/*
+ * Bit definitions for Debug Mode 1 register
+ *
+ */
+#define SPR_DMR1_CW0 0x00000003 /* Chain watchpoint 0 */
+#define SPR_DMR1_CW1 0x0000000c /* Chain watchpoint 1 */
+#define SPR_DMR1_CW2 0x00000030 /* Chain watchpoint 2 */
+#define SPR_DMR1_CW3 0x000000c0 /* Chain watchpoint 3 */
+#define SPR_DMR1_CW4 0x00000300 /* Chain watchpoint 4 */
+#define SPR_DMR1_CW5 0x00000c00 /* Chain watchpoint 5 */
+#define SPR_DMR1_CW6 0x00003000 /* Chain watchpoint 6 */
+#define SPR_DMR1_CW7 0x0000c000 /* Chain watchpoint 7 */
+#define SPR_DMR1_CW8 0x00030000 /* Chain watchpoint 8 */
+#define SPR_DMR1_CW9 0x000c0000 /* Chain watchpoint 9 */
+#define SPR_DMR1_CW10 0x00300000 /* Chain watchpoint 10 */
+#define SPR_DMR1_ST 0x00400000 /* Single-step trace*/
+#define SPR_DMR1_BT 0x00800000 /* Branch trace */
+#define SPR_DMR1_DXFW 0x01000000 /* Disable external force watchpoint */
+
+/*
+ * Bit definitions for Debug Mode 2 register
+ *
+ */
+#define SPR_DMR2_WCE0 0x00000001 /* Watchpoint counter 0 enable */
+#define SPR_DMR2_WCE1 0x00000002 /* Watchpoint counter 0 enable */
+#define SPR_DMR2_AWTC 0x00001ffc /* Assign watchpoints to counters */
+#define SPR_DMR2_WGB 0x00ffe000 /* Watchpoints generating breakpoint */
+
+/*
+ * Bit definitions for Debug watchpoint counter registers
+ *
+ */
+#define SPR_DWCR_COUNT 0x0000ffff /* Count */
+#define SPR_DWCR_MATCH 0xffff0000 /* Match */
+
+/*
+ * Bit definitions for Debug stop register
+ *
+ */
+#define SPR_DSR_RSTE 0x00000001 /* Reset exception */
+#define SPR_DSR_BUSEE 0x00000002 /* Bus error exception */
+#define SPR_DSR_DPFE 0x00000004 /* Data Page Fault exception */
+#define SPR_DSR_IPFE 0x00000008 /* Insn Page Fault exception */
+#define SPR_DSR_LPINTE 0x00000010 /* Low priority interrupt exception */
+#define SPR_DSR_AE 0x00000020 /* Alignment exception */
+#define SPR_DSR_IIE 0x00000040 /* Illegal Instruction exception */
+#define SPR_DSR_HPINTE 0x00000080 /* High priority interrupt exception */
+#define SPR_DSR_DME 0x00000100 /* DTLB miss exception */
+#define SPR_DSR_IME 0x00000200 /* ITLB miss exception */
+#define SPR_DSR_RE 0x00000400 /* Range exception */
+#define SPR_DSR_SCE 0x00000800 /* System call exception */
+#define SPR_DSR_BE 0x00001000 /* Breakpoint exception */
+
+/*
+ * Bit definitions for Debug reason register
+ *
+ */
+#define SPR_DRR_RSTE 0x00000001 /* Reset exception */
+#define SPR_DRR_BUSEE 0x00000002 /* Bus error exception */
+#define SPR_DRR_DPFE 0x00000004 /* Data Page Fault exception */
+#define SPR_DRR_IPFE 0x00000008 /* Insn Page Fault exception */
+#define SPR_DRR_LPINTE 0x00000010 /* Low priority interrupt exception */
+#define SPR_DRR_AE 0x00000020 /* Alignment exception */
+#define SPR_DRR_IIE 0x00000040 /* Illegal Instruction exception */
+#define SPR_DRR_HPINTE 0x00000080 /* High priority interrupt exception */
+#define SPR_DRR_DME 0x00000100 /* DTLB miss exception */
+#define SPR_DRR_IME 0x00000200 /* ITLB miss exception */
+#define SPR_DRR_RE 0x00000400 /* Range exception */
+#define SPR_DRR_SCE 0x00000800 /* System call exception */
+#define SPR_DRR_BE 0x00001000 /* Breakpoint exception */
+
+/*
+ * Bit definitions for Performance counters mode registers
+ *
+ */
+#define SPR_PCMR_CP 0x00000001 /* Counter present */
+#define SPR_PCMR_UMRA 0x00000002 /* User mode read access */
+#define SPR_PCMR_CISM 0x00000004 /* Count in supervisor mode */
+#define SPR_PCMR_CIUM 0x00000008 /* Count in user mode */
+#define SPR_PCMR_LA 0x00000010 /* Load access event */
+#define SPR_PCMR_SA 0x00000020 /* Store access event */
+#define SPR_PCMR_IF 0x00000040 /* Instruction fetch event*/
+#define SPR_PCMR_DCM 0x00000080 /* Data cache miss event */
+#define SPR_PCMR_ICM 0x00000100 /* Insn cache miss event */
+#define SPR_PCMR_IFS 0x00000200 /* Insn fetch stall event */
+#define SPR_PCMR_LSUS 0x00000400 /* LSU stall event */
+#define SPR_PCMR_BS 0x00000800 /* Branch stall event */
+#define SPR_PCMR_DTLBM 0x00001000 /* DTLB miss event */
+#define SPR_PCMR_ITLBM 0x00002000 /* ITLB miss event */
+#define SPR_PCMR_DDS 0x00004000 /* Data dependency stall event */
+#define SPR_PCMR_WPE 0x03ff8000 /* Watchpoint events */
+
+/*
+ * Bit definitions for the Power management register
+ *
+ */
+#define SPR_PMR_SDF 0x00000001 /* Slow down factor */
+#define SPR_PMR_DME 0x00000002 /* Doze mode enable */
+#define SPR_PMR_SME 0x00000004 /* Sleep mode enable */
+#define SPR_PMR_DCGE 0x00000008 /* Dynamic clock gating enable */
+#define SPR_PMR_SUME 0x00000010 /* Suspend mode enable */
+
+/*
+ * Bit definitions for PICMR
+ *
+ */
+#define SPR_PICMR_IUM 0xfffffffc /* Interrupt unmask */
+
+/*
+ * Bit definitions for PICPR
+ *
+ */
+#define SPR_PICPR_IPRIO 0xfffffffc /* Interrupt priority */
+
+/*
+ * Bit definitions for PICSR
+ *
+ */
+#define SPR_PICSR_IS 0xffffffff /* Interrupt status */
+
+/*
+ * Bit definitions for Tick Timer Control Register
+ *
+ */
+#define SPR_TTCR_PERIOD 0x0fffffff /* Time Period */
+#define SPR_TTMR_PERIOD SPR_TTCR_PERIOD
+#define SPR_TTMR_IP 0x10000000 /* Interrupt Pending */
+#define SPR_TTMR_IE 0x20000000 /* Interrupt Enable */
+#define SPR_TTMR_RT 0x40000000 /* Restart tick */
+#define SPR_TTMR_SR 0x80000000 /* Single run */
+#define SPR_TTMR_CR 0xc0000000 /* Continuous run */
+#define SPR_TTMR_M 0xc0000000 /* Tick mode */
+
+#endif
diff -Naur u-boot-2009.03_orig/include/asm-or1200/string.h u-boot-2009.03/include/asm-or1200/string.h
--- u-boot-2009.03_orig/include/asm-or1200/string.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/string.h 2008-07-02 09:36:02.312500000 -0700
@@ -0,0 +1,18 @@
+#ifndef _OR32_STRING_H
+#define _OR32_STRING_H
+
+
+/* __PHX_TODO__: these are optimizations, will do later */
+#if 0
+
+#define __HAVE_ARCH_MEMCPY
+extern void *memcpy(void *, const void *, size_t);
+
+/* New and improved. In arch/cris/lib/memset.c */
+
+#define __HAVE_ARCH_MEMSET
+extern void *memset(void *, int, size_t);
+
+#endif
+
+#endif
diff -Naur u-boot-2009.03_orig/include/asm-or1200/system.h u-boot-2009.03/include/asm-or1200/system.h
--- u-boot-2009.03_orig/include/asm-or1200/system.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/system.h 2008-07-02 09:36:02.312500000 -0700
@@ -0,0 +1,124 @@
+/*
+ * Based on:
+ * include/asm-ppc/system.h
+ * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
+ */
+#ifndef __OR32_SYSTEM_H
+#define __OR32_SYSTEM_H
+
+#include <asm/processor.h>
+
+/* Memory bariers */
+#define barrier() __asm__ __volatile__("": : :"memory")
+#define mb() barrier()
+#define rmb() mb()
+#define wmb() mb()
+#define read_barrier_depends() do { } while(0)
+#define set_mb(var, value) do { var = value; mb(); } while (0)
+#define set_wmb(var, value) do { var = value; wmb(); } while (0)
+
+#ifdef CONFIG_SMP
+#define smp_mb() mb()
+#define smp_rmb() rmb()
+#define smp_wmb() wmb()
+#define smp_read_barrier_depends() read_barrier_depends()
+#else
+#define smp_mb() barrier()
+#define smp_rmb() barrier()
+#define smp_wmb() barrier()
+#define smp_read_barrier_depends() do { } while(0)
+#endif
+
+#define nop() __asm__ __volatile__ ("l.nop"::)
+
+#ifdef __KERNEL__
+
+struct task_struct;
+extern unsigned int rtas_data;
+struct pt_regs;
+
+extern void show_regs(struct pt_regs * regs);
+
+extern void __save_flags(unsigned long *flags);
+extern void __restore_flags(unsigned long flags);
+extern void __save_and_cli(unsigned long *flags);
+extern void __sti(void);
+extern void __cli(void);
+
+
+#define local_irq_disable() __cli()
+#define local_irq_enable() __sti()
+#define local_irq_save(flags) __save_and_cli(&(flags))
+#define local_irq_restore(flags) __restore_flags(flags)
+#define local_save_flags(flags) __save_flags(&(flags))
+
+#define prepare_to_switch() do { } while(0)
+#define switch_to(prev,next,last) _switch_to((prev),(next),&(last))
+
+extern void _switch_to(struct task_struct *, struct task_struct *,
+ struct task_struct **);
+
+struct __xchg_dummy { unsigned long a[100]; };
+#define __xg(x) ((volatile struct __xchg_dummy *)(x))
+#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
+#define tas(ptr) (xchg((ptr),1))
+
+static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
+{
+ unsigned long tmp, flags;
+
+ local_irq_save(flags);
+
+ switch (size) {
+ case 1:
+ __asm__ __volatile__
+ ("l.lbz %0,%2\n\t"
+ "l.sb %2,%1"
+ : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
+ break;
+ case 2:
+ __asm__ __volatile__
+ ("l.lhz %0,%2\n\t"
+ "l.sh %2,%1"
+ : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
+ break;
+ case 4:
+ __asm__ __volatile__
+ ("l.lwz %0,%2\n\t"
+ "l.sw %2,%1"
+ : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
+ break;
+ }
+
+ local_irq_restore(flags);
+ return tmp;
+}
+
+extern inline void * xchg_ptr(void * m, void * val)
+{
+ return (void *) __xchg((unsigned long)m, val, sizeof(unsigned long));
+}
+
+static inline void mtspr(unsigned long add, unsigned long val)
+{
+ __asm__ __volatile__ ("l.mtspr %0,%1,0" :: "r" (add), "r" (val));
+}
+
+static inline unsigned long mfspr(unsigned long add)
+{
+ unsigned long ret;
+ __asm__ __volatile__ ("l.mfspr %0,%1,0" : "=r" (ret) : "r" (add));
+ return ret;
+}
+
+#define irqs_disabled() ((mfspr(SPR_SR) & (SPR_SR_IEE | SPR_SR_TEE)) == 0)
+
+#define arch_align_stack(x) (x)
+
+/*
+ * debugging aid
+ */
+extern void __print(const char *fmt, ...);
+
+#endif /* __KERNEL__ */
+#endif /* __OR32_SYSTEM_H */
diff -Naur u-boot-2009.03_orig/include/asm-or1200/types.h u-boot-2009.03/include/asm-or1200/types.h
--- u-boot-2009.03_orig/include/asm-or1200/types.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/types.h 2008-08-26 18:29:36.849449500 -0700
@@ -0,0 +1,62 @@
+#ifndef _ETRAX_TYPES_H
+#define _ETRAX_TYPES_H
+
+#ifndef __ASSEMBLY__
+
+typedef unsigned short umode_t;
+
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+/*typedef unsigned atomic_long_t;RGD I don't get this now using generic*/
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+/*
+ * These aren't exported outside the kernel to avoid name space clashes
+ */
+#ifdef __KERNEL__
+
+#define BITS_PER_LONG 32
+
+#ifndef __ASSEMBLY__
+
+typedef signed char s8;
+typedef unsigned char u8;
+
+typedef signed short s16;
+typedef unsigned short u16;
+
+typedef signed int s32;
+typedef unsigned int u32;
+
+typedef signed long long s64;
+typedef unsigned long long u64;
+
+/* Dma addresses are 32-bits wide, just like our other addresses. */
+
+typedef u32 dma_addr_t;
+typedef u32 dma64_addr_t;
+
+typedef unsigned long phys_addr_t;
+typedef unsigned long phys_size_t;
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __KERNEL__ */
+
+#endif
diff -Naur u-boot-2009.03_orig/include/asm-or1200/u-boot.h u-boot-2009.03/include/asm-or1200/u-boot.h
--- u-boot-2009.03_orig/include/asm-or1200/u-boot.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-or1200/u-boot.h 2008-09-05 09:57:00.265625000 -0700
@@ -0,0 +1,53 @@
+/*
+ * (C) Copyright 2004 Atmark Techno, Inc.
+ *
+ * Yasushi SHOJI <yashi@atmark-techno.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
+ */
+
+#ifndef _U_BOOT_H_
+#define _U_BOOT_H_
+
+typedef struct bd_info {
+ unsigned long bi_boot_params; /* start of DRAM memory */
+ unsigned long bi_memstart; /* start of DRAM memory */
+ unsigned long bi_memsize; /* size of DRAM memory in bytes */
+ unsigned long bi_flashstart; /* start of FLASH memory */
+ unsigned long bi_flashsize; /* size of FLASH memory */
+ unsigned long bi_flashoffset; /* reserved area for startup monitor */
+ unsigned long bi_sramstart; /* start of SRAM memory */
+ unsigned long bi_sramsize; /* size of SRAM memory */
+ unsigned long bi_ip_addr; /* IP Address */
+ unsigned char bi_enetaddr[6]; /* Ethernet adress */
+ unsigned long bi_baudrate; /* Console Baudrate */
+ unsigned long post_code;
+} bd_t;
+
+
+#endif /* _U_BOOT_H_ */
+
+
diff -Naur u-boot-2009.03_orig/include/asm-ppc/CVS/Entries u-boot-2009.03/include/asm-ppc/CVS/Entries
--- u-boot-2009.03_orig/include/asm-ppc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-ppc/CVS/Entries 2009-03-25 15:58:10.637328100 -0700
@@ -0,0 +1,57 @@
+/4xx_pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/4xx_pcie.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/5xx_immap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/8xx_immap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atomic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpm_8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpm_85xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/e300.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_ddr_dimm_params.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_ddr_sdram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_i2c.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_law.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_lbc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_serdes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gpio.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_512x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_8220.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_83xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_85xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_86xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_fsl_pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/immap_qe.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iopin_8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iopin_85xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/iopin_8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m8260_pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mc146818rtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mmu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8349_pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc8xxx_spi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pnp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx-ebc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx-isram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx-sdram.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppc4xx-uic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/residual.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sigcontext.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/signal.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/status_led.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx_irq.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-ppc/CVS/Entries.Extra u-boot-2009.03/include/asm-ppc/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-ppc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-ppc/CVS/Entries.Extra 2009-03-25 15:58:10.637328100 -0700
@@ -0,0 +1,56 @@
+/4xx_pci.h///1238019740/
+/4xx_pcie.h///1238019740/
+/5xx_immap.h///1238019740/
+/8xx_immap.h///1238019740/
+/atomic.h///1238019740/
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cache.h///1238019740/
+/config.h///1238019740/
+/cpm_8260.h///1238019740/
+/cpm_85xx.h///1238019740/
+/e300.h///1238019740/
+/errno.h///1238019740/
+/fsl_ddr_dimm_params.h///1238019740/
+/fsl_ddr_sdram.h///1238019740/
+/fsl_i2c.h///1238019740/
+/fsl_law.h///1238019740/
+/fsl_lbc.h///1238019740/
+/fsl_serdes.h///1238019740/
+/global_data.h///1238019740/
+/gpio.h///1238019740/
+/immap_512x.h///1238019740/
+/immap_8220.h///1238019740/
+/immap_8260.h///1238019740/
+/immap_83xx.h///1238019740/
+/immap_85xx.h///1238019740/
+/immap_86xx.h///1238019740/
+/immap_fsl_pci.h///1238019740/
+/immap_qe.h///1238019740/
+/interrupt.h///1238019740/
+/io.h///1238019740/
+/iopin_8260.h///1238019740/
+/iopin_85xx.h///1238019740/
+/iopin_8xx.h///1238019740/
+/m8260_pci.h///1238019740/
+/mc146818rtc.h///1238019740/
+/mmu.h///1238019740/
+/mpc8349_pci.h///1238019740/
+/mpc8xxx_spi.h///1238019740/
+/pci_io.h///1238019740/
+/pnp.h///1238019740/
+/posix_types.h///1238019740/
+/ppc4xx-ebc.h///1238019740/
+/ppc4xx-isram.h///1238019740/
+/ppc4xx-sdram.h///1238019740/
+/ppc4xx-uic.h///1238019740/
+/processor.h///1238019740/
+/ptrace.h///1238019740/
+/residual.h///1238019741/
+/sigcontext.h///1238019741/
+/signal.h///1238019741/
+/status_led.h///1238019741/
+/string.h///1238019741/
+/types.h///1238019741/
+/u-boot.h///1238019741/
+/xilinx_irq.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-ppc/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-ppc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-ppc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-ppc/CVS/Entries.Extra.Old 2009-03-25 15:25:47.000000000 -0700
@@ -0,0 +1,56 @@
+/4xx_pci.h///1238019740/
+/4xx_pcie.h///1238019740/
+/5xx_immap.h///1238019740/
+/8xx_immap.h///1238019740/
+/atomic.h///1238019740/
+/bitops.h///1238019740/
+/byteorder.h///1238019740/
+/cache.h///1238019740/
+/config.h///1238019740/
+/cpm_8260.h///1238019740/
+/cpm_85xx.h///1238019740/
+/e300.h///1238019740/
+/errno.h///1238019740/
+/fsl_ddr_dimm_params.h///1238019740/
+/fsl_ddr_sdram.h///1238019740/
+/fsl_i2c.h///1238019740/
+/fsl_law.h///1238019740/
+/fsl_lbc.h///1238019740/
+/fsl_serdes.h///1238019740/
+/global_data.h///1238019740/
+/gpio.h///1238019740/
+/immap_512x.h///1238019740/
+/immap_8220.h///1238019740/
+/immap_8260.h///1238019740/
+/immap_83xx.h///1238019740/
+/immap_85xx.h///1238019740/
+/immap_86xx.h///1238019740/
+/immap_fsl_pci.h///1238019740/
+/immap_qe.h///1238019740/
+/interrupt.h///1238019740/
+/io.h///1238019740/
+/iopin_8260.h///1238019740/
+/iopin_85xx.h///1238019740/
+/iopin_8xx.h///1238019740/
+/m8260_pci.h///1238019740/
+/mc146818rtc.h///1238019740/
+/mmu.h///1238019740/
+/mpc8349_pci.h///1238019740/
+/mpc8xxx_spi.h///1238019740/
+/pci_io.h///1238019740/
+/pnp.h///1238019740/
+/posix_types.h///1238019740/
+/ppc4xx-ebc.h///1238019740/
+/ppc4xx-isram.h///1238019740/
+/ppc4xx-sdram.h///1238019740/
+/ppc4xx-uic.h///1238019740/
+/processor.h///1238019740/
+/ptrace.h///1238019740/
+/residual.h///1238019741/
+/sigcontext.h///1238019741/
+/signal.h///1238019741/
+/status_led.h///1238019741/
+/string.h///1238019741/
+/types.h///1238019741/
+/u-boot.h///1238019741/
+/xilinx_irq.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-ppc/CVS/Entries.Old u-boot-2009.03/include/asm-ppc/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-ppc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-ppc/CVS/Entries.Old 2009-03-25 15:25:47.000000000 -0700
@@ -0,0 +1,57 @@
+/4xx_pci.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/4xx_pcie.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/5xx_immap.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/8xx_immap.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/atomic.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/cache.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/cpm_8260.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/cpm_85xx.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/e300.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/errno.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/fsl_ddr_dimm_params.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/fsl_ddr_sdram.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/fsl_i2c.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/fsl_law.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/fsl_lbc.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/fsl_serdes.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/gpio.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_512x.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_8220.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_8260.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_83xx.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_85xx.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_86xx.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_fsl_pci.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/immap_qe.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/interrupt.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/iopin_8260.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/iopin_85xx.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/iopin_8xx.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/m8260_pci.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/mc146818rtc.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/mmu.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/mpc8349_pci.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/mpc8xxx_spi.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/pci_io.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/pnp.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ppc4xx-ebc.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ppc4xx-isram.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ppc4xx-sdram.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ppc4xx-uic.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:20 2009//
+/residual.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/sigcontext.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/signal.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/status_led.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/xilinx_irq.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-ppc/CVS/Repository u-boot-2009.03/include/asm-ppc/CVS/Repository
--- u-boot-2009.03_orig/include/asm-ppc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-ppc/CVS/Repository 2009-03-25 15:25:47.212266100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-ppc
diff -Naur u-boot-2009.03_orig/include/asm-ppc/CVS/Root u-boot-2009.03/include/asm-ppc/CVS/Root
--- u-boot-2009.03_orig/include/asm-ppc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-ppc/CVS/Root 2009-03-25 15:25:47.212266100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-sh/CVS/Entries u-boot-2009.03/include/asm-sh/CVS/Entries
--- u-boot-2009.03_orig/include/asm-sh/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sh/CVS/Entries 2009-03-25 15:58:10.809202000 -0700
@@ -0,0 +1,30 @@
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7203.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7710.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7720.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7722.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7723.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7750.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7763.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7780.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_sh7785.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/irqflags.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/macro.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/system.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-sh/CVS/Entries.Extra u-boot-2009.03/include/asm-sh/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-sh/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sh/CVS/Entries.Extra 2009-03-25 15:58:10.809202000 -0700
@@ -0,0 +1,29 @@
+/bitops.h///1238019741/
+/byteorder.h///1238019741/
+/cache.h///1238019741/
+/config.h///1238019741/
+/cpu_sh2.h///1238019741/
+/cpu_sh3.h///1238019741/
+/cpu_sh4.h///1238019741/
+/cpu_sh7203.h///1238019741/
+/cpu_sh7710.h///1238019741/
+/cpu_sh7720.h///1238019741/
+/cpu_sh7722.h///1238019741/
+/cpu_sh7723.h///1238019741/
+/cpu_sh7750.h///1238019741/
+/cpu_sh7763.h///1238019741/
+/cpu_sh7780.h///1238019741/
+/cpu_sh7785.h///1238019741/
+/errno.h///1238019741/
+/global_data.h///1238019741/
+/io.h///1238019741/
+/irqflags.h///1238019741/
+/macro.h///1238019741/
+/pci.h///1238019741/
+/posix_types.h///1238019741/
+/processor.h///1238019741/
+/ptrace.h///1238019741/
+/string.h///1238019741/
+/system.h///1238019741/
+/types.h///1238019741/
+/u-boot.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-sh/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-sh/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-sh/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sh/CVS/Entries.Extra.Old 2009-03-25 15:25:48.000000000 -0700
@@ -0,0 +1,29 @@
+/bitops.h///1238019741/
+/byteorder.h///1238019741/
+/cache.h///1238019741/
+/config.h///1238019741/
+/cpu_sh2.h///1238019741/
+/cpu_sh3.h///1238019741/
+/cpu_sh4.h///1238019741/
+/cpu_sh7203.h///1238019741/
+/cpu_sh7710.h///1238019741/
+/cpu_sh7720.h///1238019741/
+/cpu_sh7722.h///1238019741/
+/cpu_sh7723.h///1238019741/
+/cpu_sh7750.h///1238019741/
+/cpu_sh7763.h///1238019741/
+/cpu_sh7780.h///1238019741/
+/cpu_sh7785.h///1238019741/
+/errno.h///1238019741/
+/global_data.h///1238019741/
+/io.h///1238019741/
+/irqflags.h///1238019741/
+/macro.h///1238019741/
+/pci.h///1238019741/
+/posix_types.h///1238019741/
+/processor.h///1238019741/
+/ptrace.h///1238019741/
+/string.h///1238019741/
+/system.h///1238019741/
+/types.h///1238019741/
+/u-boot.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-sh/CVS/Entries.Old u-boot-2009.03/include/asm-sh/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-sh/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sh/CVS/Entries.Old 2009-03-25 15:25:48.000000000 -0700
@@ -0,0 +1,30 @@
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cache.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh2.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh3.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh4.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7203.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7710.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7720.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7722.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7723.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7750.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7763.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7780.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cpu_sh7785.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/errno.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/irqflags.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/macro.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/pci.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/system.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-sh/CVS/Repository u-boot-2009.03/include/asm-sh/CVS/Repository
--- u-boot-2009.03_orig/include/asm-sh/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sh/CVS/Repository 2009-03-25 15:25:48.196634800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-sh
diff -Naur u-boot-2009.03_orig/include/asm-sh/CVS/Root u-boot-2009.03/include/asm-sh/CVS/Root
--- u-boot-2009.03_orig/include/asm-sh/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sh/CVS/Root 2009-03-25 15:25:48.181009900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-sparc/CVS/Entries u-boot-2009.03/include/asm-sparc/CVS/Entries
--- u-boot-2009.03_orig/include/asm-sparc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/CVS/Entries 2009-03-25 15:58:11.215449400 -0700
@@ -0,0 +1,29 @@
+D/arch-leon2////
+D/arch-leon3////
+/asi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asmmacro.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atomic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/byteorder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/errno.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/global_data.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/io.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/irq.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/leon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/leon2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/leon3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/machines.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/page.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/processor.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/prom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/psr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ptrace.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/srmmu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stack.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/winmacro.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/asm-sparc/CVS/Entries.Extra u-boot-2009.03/include/asm-sparc/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-sparc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/CVS/Entries.Extra 2009-03-25 15:58:11.215449400 -0700
@@ -0,0 +1,29 @@
+D/arch-leon2////
+D/arch-leon3////
+/asi.h///1238019741/
+/asmmacro.h///1238019741/
+/atomic.h///1238019741/
+/bitops.h///1238019741/
+/byteorder.h///1238019741/
+/cache.h///1238019741/
+/config.h///1238019741/
+/errno.h///1238019741/
+/global_data.h///1238019741/
+/io.h///1238019741/
+/irq.h///1238019741/
+/leon.h///1238019741/
+/leon2.h///1238019741/
+/leon3.h///1238019741/
+/machines.h///1238019741/
+/page.h///1238019741/
+/posix_types.h///1238019741/
+/processor.h///1238019741/
+/prom.h///1238019741/
+/psr.h///1238019741/
+/ptrace.h///1238019741/
+/srmmu.h///1238019741/
+/stack.h///1238019741/
+/string.h///1238019741/
+/types.h///1238019741/
+/u-boot.h///1238019741/
+/winmacro.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-sparc/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-sparc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-sparc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/CVS/Entries.Extra.Old 2009-03-25 15:25:49.000000000 -0700
@@ -0,0 +1,29 @@
+/asi.h///1238019741/
+/asmmacro.h///1238019741/
+/atomic.h///1238019741/
+/bitops.h///1238019741/
+/byteorder.h///1238019741/
+/cache.h///1238019741/
+/config.h///1238019741/
+/errno.h///1238019741/
+/global_data.h///1238019741/
+/io.h///1238019741/
+/irq.h///1238019741/
+/leon.h///1238019741/
+/leon2.h///1238019741/
+/leon3.h///1238019741/
+/machines.h///1238019741/
+/page.h///1238019741/
+/posix_types.h///1238019741/
+/processor.h///1238019741/
+/prom.h///1238019741/
+/psr.h///1238019741/
+/ptrace.h///1238019741/
+/srmmu.h///1238019741/
+/stack.h///1238019741/
+/string.h///1238019741/
+/types.h///1238019741/
+/u-boot.h///1238019741/
+/winmacro.h///1238019741/
+D/arch-leon2////
+D/arch-leon3////
diff -Naur u-boot-2009.03_orig/include/asm-sparc/CVS/Entries.Old u-boot-2009.03/include/asm-sparc/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-sparc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/CVS/Entries.Old 2009-03-25 15:25:49.000000000 -0700
@@ -0,0 +1,29 @@
+/asi.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/asmmacro.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/atomic.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/byteorder.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/cache.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/errno.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/global_data.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/io.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/irq.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/leon.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/leon2.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/leon3.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/machines.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/page.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/processor.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/prom.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/psr.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/ptrace.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/srmmu.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/stack.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/u-boot.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+/winmacro.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+D/arch-leon2////
+D/arch-leon3////
diff -Naur u-boot-2009.03_orig/include/asm-sparc/CVS/Repository u-boot-2009.03/include/asm-sparc/CVS/Repository
--- u-boot-2009.03_orig/include/asm-sparc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/CVS/Repository 2009-03-25 15:25:48.618507100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-sparc
diff -Naur u-boot-2009.03_orig/include/asm-sparc/CVS/Root u-boot-2009.03/include/asm-sparc/CVS/Root
--- u-boot-2009.03_orig/include/asm-sparc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/CVS/Root 2009-03-25 15:25:48.618507100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries 2009-03-25 15:58:10.981075900 -0700
@@ -0,0 +1,2 @@
+/asi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries.Extra u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries.Extra 2009-03-25 15:58:10.981075900 -0700
@@ -0,0 +1 @@
+/asi.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries.Extra.Old 2009-03-25 15:25:49.000000000 -0700
@@ -0,0 +1 @@
+/asi.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries.Old u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Entries.Old 2009-03-25 15:25:49.000000000 -0700
@@ -0,0 +1,2 @@
+/asi.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Repository u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Repository
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Repository 2009-03-25 15:25:48.977879800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-sparc/arch-leon2
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Root u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Root
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon2/CVS/Root 2009-03-25 15:25:48.977879800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries 2009-03-25 15:58:11.027950600 -0700
@@ -0,0 +1,2 @@
+/asi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries.Extra u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries.Extra 2009-03-25 15:58:11.027950600 -0700
@@ -0,0 +1 @@
+/asi.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries.Extra.Old u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries.Extra.Old 2009-03-25 15:25:49.000000000 -0700
@@ -0,0 +1 @@
+/asi.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries.Old u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries.Old
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Entries.Old 2009-03-25 15:25:49.000000000 -0700
@@ -0,0 +1,2 @@
+/asi.h/1.1.1.1/Wed Mar 25 22:22:21 2009//
+D
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Repository u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Repository
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Repository 2009-03-25 15:25:49.056004300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/asm-sparc/arch-leon3
diff -Naur u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Root u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Root
--- u-boot-2009.03_orig/include/asm-sparc/arch-leon3/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/asm-sparc/arch-leon3/CVS/Root 2009-03-25 15:25:49.056004300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/bedbug/CVS/Entries u-boot-2009.03/include/bedbug/CVS/Entries
--- u-boot-2009.03_orig/include/bedbug/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/bedbug/CVS/Entries 2009-03-31 15:00:04.748838400 -0700
@@ -0,0 +1,6 @@
+/type.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bedbug.h/1.1.1.1/Tue Mar 31 22:00:04 2009//T1.1.1.1
+/ppc.h/1.1.1.1/Tue Mar 31 22:00:04 2009//T1.1.1.1
+/regs.h/1.1.1.1/Tue Mar 31 22:00:04 2009//T1.1.1.1
+/tables.h/1.1.1.1/Tue Mar 31 22:00:04 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/include/bedbug/CVS/Entries.Extra u-boot-2009.03/include/bedbug/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/bedbug/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/bedbug/CVS/Entries.Extra 2009-03-31 15:00:04.748838400 -0700
@@ -0,0 +1,5 @@
+/type.h///1238019741/
+/bedbug.h///1238019741/
+/ppc.h///1238019741/
+/regs.h///1238019741/
+/tables.h///1238019741/
diff -Naur u-boot-2009.03_orig/include/bedbug/CVS/Entries.Extra.Old u-boot-2009.03/include/bedbug/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/bedbug/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/bedbug/CVS/Entries.Extra.Old 2009-03-25 17:51:51.000000000 -0700
@@ -0,0 +1,5 @@
+/type.h///1238019741/
+/bedbug.h///1238028711/
+/ppc.h///1238028711/
+/regs.h///1238028711/
+/tables.h///1238028711/
diff -Naur u-boot-2009.03_orig/include/bedbug/CVS/Entries.Old u-boot-2009.03/include/bedbug/CVS/Entries.Old
--- u-boot-2009.03_orig/include/bedbug/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/bedbug/CVS/Entries.Old 2009-03-25 17:51:51.000000000 -0700
@@ -0,0 +1,6 @@
+/type.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bedbug.h/1.2/Thu Mar 26 00:51:51 2009//
+/ppc.h/1.2/Thu Mar 26 00:51:51 2009//
+/regs.h/1.2/Thu Mar 26 00:51:51 2009//
+/tables.h/1.2/Thu Mar 26 00:51:51 2009//
+D
diff -Naur u-boot-2009.03_orig/include/bedbug/CVS/Repository u-boot-2009.03/include/bedbug/CVS/Repository
--- u-boot-2009.03_orig/include/bedbug/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/bedbug/CVS/Repository 2009-03-25 15:25:49.196628400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/bedbug
diff -Naur u-boot-2009.03_orig/include/bedbug/CVS/Root u-boot-2009.03/include/bedbug/CVS/Root
--- u-boot-2009.03_orig/include/bedbug/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/bedbug/CVS/Root 2009-03-25 15:25:49.181003500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/bedbug/bedbug.h u-boot-2009.03/include/bedbug/bedbug.h
--- u-boot-2009.03_orig/include/bedbug/bedbug.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/bedbug/bedbug.h 2009-03-31 15:00:04.498841600 -0700
@@ -1,42 +1,42 @@
-/* $Id$ */
-
-#ifndef _BEDBUG_H
-#define _BEDBUG_H
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#define _USE_PROTOTYPES
-
-#ifndef isblank
-#define isblank(c) isspace((int)(c))
-#endif
-
-#ifndef __P
-#if defined(_USE_PROTOTYPES) && (defined(__STDC__) || defined(__cplusplus))
-#define __P(protos) protos /* full-blown ANSI C */
-#else
-#define __P(protos) () /* traditional C preprocessor */
-#endif
-#endif
-
-#define assert( condition ) if( (condition) ) _exit(0)
-
-#endif /* _BEDBUG_H */
-
-
-/*
- * Copyright (c) 2001 William L. Pitts
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are freely
- * permitted provided that the above copyright notice and this
- * paragraph and the following disclaimer are duplicated in all
- * such forms.
- *
- * This software is provided "AS IS" and without any express or
- * implied warranties, including, without limitation, the implied
- * warranties of merchantability and fitness for a particular
- * purpose.
- */
+/* $Id: bedbug.h,v 1.1.1.1 2009/03/25 22:22:21 kenagy Exp $ */
+
+#ifndef _BEDBUG_H
+#define _BEDBUG_H
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#define _USE_PROTOTYPES
+
+#ifndef isblank
+#define isblank(c) isspace((int)(c))
+#endif
+
+#ifndef __P
+#if defined(_USE_PROTOTYPES) && (defined(__STDC__) || defined(__cplusplus))
+#define __P(protos) protos /* full-blown ANSI C */
+#else
+#define __P(protos) () /* traditional C preprocessor */
+#endif
+#endif
+
+#define assert( condition ) if( (condition) ) _exit(0)
+
+#endif /* _BEDBUG_H */
+
+
+/*
+ * Copyright (c) 2001 William L. Pitts
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are freely
+ * permitted provided that the above copyright notice and this
+ * paragraph and the following disclaimer are duplicated in all
+ * such forms.
+ *
+ * This software is provided "AS IS" and without any express or
+ * implied warranties, including, without limitation, the implied
+ * warranties of merchantability and fitness for a particular
+ * purpose.
+ */
diff -Naur u-boot-2009.03_orig/include/bedbug/ppc.h u-boot-2009.03/include/bedbug/ppc.h
--- u-boot-2009.03_orig/include/bedbug/ppc.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/bedbug/ppc.h 2009-03-31 15:00:04.655089600 -0700
@@ -1,413 +1,413 @@
-/* $Id$ */
-
-#ifndef _PPC_H
-#define _PPC_H
-
-/*======================================================================
- *
- * OPERANDS
- *
- *======================================================================*/
-
-enum OP_FIELD {
- O_AA = 1, O_BD, O_BI, O_BO, O_crbD, O_crbA, O_crbB, O_CRM, O_d, O_frC, O_frD,
- O_frS, O_IMM, O_LI, O_LK, O_MB, O_ME, O_NB, O_OE, O_rA, O_rB, O_Rc, O_rD,
- O_rS, O_SH, O_SIMM, O_SR, O_TO, O_UIMM, O_crfD, O_crfS, O_L, O_spr, O_tbr,
- O_cr2 };
-
-struct operand {
- enum OP_FIELD field; /* The operand identifier from the
- enum above */
-
- char * name; /* Symbolic name of this operand */
-
- unsigned int bits; /* The number of bits used by this
- operand */
-
- unsigned int shift; /* How far to the right the operand
- should be shifted so that it is
- aligned at the beginning of the
- word */
-
- unsigned int hint; /* A bitwise-inclusive-OR of the
- values shown below. These are used
- tell the disassembler how to print
- this operand */
-};
-
-/* Values for operand hint */
-#define OH_SILENT 0x01 /* dont print this operand */
-#define OH_ADDR 0x02 /* this operand is an address */
-#define OH_REG 0x04 /* this operand is a register */
-#define OH_SPR 0x08 /* this operand is an SPR */
-#define OH_TBR 0x10 /* this operand is a TBR */
-#define OH_OFFSET 0x20 /* this operand is an offset */
-#define OH_LITERAL 0x40 /* a literal string */
-
-
-/*======================================================================
- *
- * OPCODES
- *
- *======================================================================*/
-
-/* From the MPCxxx instruction set documentation, all instructions are
- * 32 bits long and word aligned. Bits 0-5 always specify the primary
- * opcode. Many instructions also have an extended opcode.
- */
-
-#define GET_OPCD(i) (((unsigned long)(i) >> 26) & 0x3f)
-#define MAKE_OPCODE(i) ((((unsigned long)(i)) & 0x3f) << 26)
-
-/* The MPC860 User's Manual, Appendix D.4 contains the definitions of the
- * instruction forms
- */
-
-
-/*-------------------------------------------------
- * I-Form Instructions:
- * bX
- *-------------------------------------------------
- * OPCD | LI |AA|LK
- *-------------------------------------------------*/
-
-#define I_OPCODE(i,aa,lk) (MAKE_OPCODE(i) | (((aa) & 0x1) << 1) | ((lk) & 0x1))
-#define I_MASK I_OPCODE(0x3f,0x1,0x1)
-
-
-/*-------------------------------------------------
- * B-Form Instructions:
- * bcX
- *-------------------------------------------------
- * OPCD | BO | BI | BD |AA|LK
- *-------------------------------------------------*/
-
-#define B_OPCODE(i,aa,lk) (MAKE_OPCODE(i) | (((aa) & 0x1) << 1) | ((lk) & 0x1))
-#define B_MASK B_OPCODE(0x3f,0x1,0x1)
-
-
-/*-------------------------------------------------
- * SC-Form Instructions:
- * sc
- *-------------------------------------------------
- * OPCD | 00000 | 00000 | 00000000000000 |1|0
- *-------------------------------------------------*/
-
-#define SC_OPCODE(i) (MAKE_OPCODE(i) | 0x2)
-#define SC_MASK SC_OPCODE(0x3f)
-
-
-/*-------------------------------------------------
- * D-Form Instructions:
- * addi addic addic. addis andi. andis. cmpi cmpli
- * lbz lbzu lha lhau lhz lhzu lmw lwz lwzu mulli
- * ori oris stb stbu sth sthu stmw stw stwu subfic
- * twi xori xoris
- *-------------------------------------------------
- * OPCD | D | A | d
- * OPCD | D | A | SIMM
- * OPCD | S | A | d
- * OPCD | S | A | UIMM
- * OPCD |crfD|0|L| A | SIMM
- * OPCD |crfD|0|L| A | UIMM
- * OPCD | TO | A | SIMM
- *-------------------------------------------------*/
-
-#define D_OPCODE(i) MAKE_OPCODE(i)
-#define D_MASK MAKE_OPCODE(0x3f)
-
-
-/*-------------------------------------------------
- * DS-Form Instructions:
- * (none supported by MPC860)
- *-------------------------------------------------
- * OPCD | D | A | ds |XO
- * OPCD | S | A | ds |XO
- *-------------------------------------------------*/
-
-#define DS_OPCODE(i,xo) (MAKE_OPCODE(i) | ((xo) & 0x3))
-#define DS_MASK DS_OPCODE(0x3f,0x1)
-
-
-/*---------------------------------------------------
- * X-Form Instructions:
- * andX andcX cmp cmpl cntlzwX dcbf dcbi dcbst dcbt
- * dcbtst dcbz eciwx ecowx eieio eqvX extsbX extshX
- * icbi lbzux lbxz lhaux lhax lhbrx lhzux lhxz lswi
- * lswx lwarx lwbrx lwzux lwxz mcrfs mcrxr mfcr
- * mfmsr mfsr mfsrin mtmsr mtsr mtsrin nandX norX
- * orX orcX slwX srawX srawiX srwX stbux stbx
- * sthbrx sthuxsthx stswi stswx stwbrx stwcx. stwux
- * stwx sync tlbie tlbld tlbli tlbsync tw xorX
- *---------------------------------------------------
- * OPCD | D | A | B | XO |0
- * OPCD | D | A | NB | XO |0
- * OPCD | D | 00000 | B | XO |0
- * OPCD | D | 00000 | 00000 | XO |0
- * OPCD | D |0| SR | 00000 | XO |0
- * OPCD | S | A | B | XO |Rc
- * OPCD | S | A | B | XO |1
- * OPCD | S | A | B | XO |0
- * OPCD | S | A | NB | XO |0
- * OPCD | S | A | 00000 | XO |Rc
- * OPCD | S | 00000 | B | XO |0
- * OPCD | S | 00000 | 00000 | XO |0
- * OPCD | S |0| SR | 00000 | XO |0
- * OPCD | S | A | SH | XO |Rc
- * OPCD |crfD|0|L| A | SH | XO |0
- * OPCD |crfD |00| A | B | XO |0
- * OPCD |crfD |00|crfS |00| 00000 | XO |0
- * OPCD |crfD |00| 00000 | 00000 | XO |0
- * OPCD |crfD |00| 00000 | IMM |0| XO |Rc
- * OPCD | TO | A | B | XO |0
- * OPCD | D | 00000 | B | XO |Rc
- * OPCD | D | 00000 | 00000 | XO |Rc
- * OPCD | crbD | 00000 | 00000 | XO |Rc
- * OPCD | 00000 | A | B | XO |0
- * OPCD | 00000 | 00000 | B | XO |0
- * OPCD | 00000 | 00000 | 00000 | XO |0
- *---------------------------------------------------*/
-
-#define X_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
- ((rc) & 0x1))
-#define X_MASK X_OPCODE(0x3f,0x3ff,0x1)
-
-
-/*---------------------------------------------------
- * XL-Form Instructions:
- * bcctrX bclrX crand crandc creqv crnand crnor cror
- * croc crxorisync mcrf rfi
- *---------------------------------------------------
- * OPCD | BO | BI | 00000 | XO |LK
- * OPCD | crbD | crbA | crbB | XO |0
- * OPCD |crfD |00|crfS |00| 00000 | XO |0
- * OPCD | 00000 | 00000 | 00000 | XO |0
- *---------------------------------------------------*/
-
-#define XL_OPCODE(i,xo,lk) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
- ((lk) & 0x1))
-#define XL_MASK XL_OPCODE(0x3f,0x3ff,0x1)
-
-
-/*---------------------------------------------------
- * XFX-Form Instructions:
- * mfspr mftb mtcrf mtspr
- *---------------------------------------------------
- * OPCD | D | spr | XO |0
- * OPCD | D |0| CRM |0| XO |0
- * OPCD | S | spr | XO |0
- * OPCD | D | tbr | XO |0
- *---------------------------------------------------*/
-
-#define XFX_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
- ((rc) & 0x1))
-#define XFX_MASK XFX_OPCODE(0x3f,0x3ff,0x1)
-
-
-/*---------------------------------------------------
- * XFL-Form Instructions:
- * (none supported by MPC860)
- *---------------------------------------------------
- * OPCD |0| FM |0| B | XO |0
- *---------------------------------------------------*/
-
-#define XFL_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
- ((rc) & 0x1))
-#define XFL_MASK XFL_OPCODE(0x3f,0x3ff,0x1)
-
-
-/*---------------------------------------------------
- * XS-Form Instructions:
- * (none supported by MPC860)
- *---------------------------------------------------
- * OPCD | S | A | sh | XO |sh|LK
- *---------------------------------------------------*/
-
-#define XS_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x1ff) << 2) | \
- ((rc) & 0x1))
-#define XS_MASK XS_OPCODE(0x3f,0x1ff,0x1)
-
-
-/*---------------------------------------------------
- * XO-Form Instructions:
- * addX addcXaddeX addmeX addzeX divwX divwuX mulhwX
- * mulhwuX mullwX negX subfX subfcX subfeX subfmeX
- * subfzeX
- *---------------------------------------------------
- * OPCD | D | A | B |OE| XO |Rc
- * OPCD | D | A | B |0 | XO |Rc
- * OPCD | D | A | 00000 |OE| XO |Rc
- *---------------------------------------------------*/
-
-#define XO_OPCODE(i,xo,oe,rc) (MAKE_OPCODE(i) | (((oe) & 0x1) << 10) | \
- (((xo) & 0x1ff) << 1) | ((rc) & 0x1))
-#define XO_MASK XO_OPCODE(0x3f,0x1ff,0x1,0x1)
-
-
-/*---------------------------------------------------
- * A-Form Instructions:
- * (none supported by MPC860)
- *---------------------------------------------------
- * OPCD | D | A | B |00000| XO |Rc
- * OPCD | D | A | B | C | XO |Rc
- * OPCD | D | A | 00000 | C | XO |Rc
- * OPCD | D | 00000 | B |00000| XO |Rc
- *---------------------------------------------------*/
-
-#define A_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x1f) << 1) | \
- ((rc) & 0x1))
-#define A_MASK A_OPCODE(0x3f,0x1f,0x1)
-
-
-/*---------------------------------------------------
- * M-Form Instructions:
- * rlwimiX rlwinmX rlwnmX
- *---------------------------------------------------
- * OPCD | S | A | SH | MB | ME |Rc
- * OPCD | S | A | B | MB | ME |Rc
- *---------------------------------------------------*/
-
-#define M_OPCODE(i,rc) (MAKE_OPCODE(i) | ((rc) & 0x1))
-#define M_MASK M_OPCODE(0x3f,0x1)
-
-
-/*---------------------------------------------------
- * MD-Form Instructions:
- * (none supported by MPC860)
- *---------------------------------------------------
- * OPCD | S | A | sh | mb | XO |sh|Rc
- * OPCD | S | A | sh | me | XO |sh|Rc
- *---------------------------------------------------*/
-
-#define MD_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x7) << 2) | \
- ((rc) & 0x1))
-#define MD_MASK MD_OPCODE(0x3f,0x7,0x1)
-
-
-/*---------------------------------------------------
- * MDS-Form Instructions:
- * (none supported by MPC860)
- *---------------------------------------------------
- * OPCD | S | A | B | mb | XO |Rc
- * OPCD | S | A | B | me | XO |Rc
- *---------------------------------------------------*/
-
-#define MDS_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0xf) << 1) | \
- ((rc) & 0x1))
-#define MDS_MASK MDS_OPCODE(0x3f,0xf,0x1)
-
-#ifndef FALSE
-#define FALSE 0
-#define TRUE (!FALSE)
-#endif
-
-#define INSTRUCTION( memaddr ) ntohl(*(unsigned long *)(memaddr))
-
-#define MAX_OPERANDS 8
-
-struct ppc_ctx;
-
-struct opcode {
- unsigned long opcode; /* The complete opcode as produced by
- one of the XXX_OPCODE macros above */
-
- unsigned long mask; /* The mask to use on an instruction
- before comparing with the opcode
- field to see if it matches */
-
- enum OP_FIELD fields[MAX_OPERANDS];
- /* An array defining the operands for
- this opcode. The values of the
- array are the operand identifiers */
-
- int (*hfunc)(struct ppc_ctx *);
- /* Address of a function to handle the given
- mnemonic */
-
- char * name; /* The symbolic name of this opcode */
-
- unsigned int hint; /* A bitwise-inclusive-OR of the
- values shown below. These are used
- tell the disassembler how to print
- some operands for this opcode */
-};
-
-/* values for opcode hints */
-#define H_RELATIVE 0x1 /* The address operand is relative */
-#define H_IMM_HIGH 0x2 /* [U|S]IMM field shifted high */
-#define H_RA0_IS_0 0x4 /* If rA = 0 then treat as literal 0 */
-
-struct ppc_ctx {
- struct opcode * op;
- unsigned long instr;
- unsigned int flags;
- int datalen;
- char data[ 256 ];
- char radix_fmt[ 8 ];
- unsigned char * virtual;
-};
-
-
-/*======================================================================
- *
- * FUNCTIONS
- *
- *======================================================================*/
-
-/* Values for flags as passed to various ppc routines */
-#define F_RADOCTAL 0x1 /* output radix = unsigned octal */
-#define F_RADUDECIMAL 0x2 /* output radix = unsigned decimal */
-#define F_RADSDECIMAL 0x4 /* output radix = signed decimal */
-#define F_RADHEX 0x8 /* output radix = unsigned hex */
-#define F_SIMPLE 0x10 /* use simplified mnemonics */
-#define F_SYMBOL 0x20 /* use symbol lookups for addresses */
-#define F_INSTR 0x40 /* output the raw instruction */
-#define F_LOCALMEM 0x80 /* retrieve opcodes from local memory
- rather than from the HMI */
-#define F_LINENO 0x100 /* show line number info if available */
-#define F_VALIDONLY 0x200 /* cache: valid entries only */
-
-/* Values for assembler error codes */
-#define E_ASM_BAD_OPCODE 1
-#define E_ASM_NUM_OPERANDS 2
-#define E_ASM_BAD_REGISTER 3
-#define E_ASM_BAD_SPR 4
-#define E_ASM_BAD_TBR 5
-
-extern int disppc __P((unsigned char *,unsigned char *,int,
- int (*)(const char *), unsigned long));
-extern int print_source_line __P((char *,char *,int,
- int (*pfunc)(const char *)));
-extern int find_next_address __P((unsigned char *,int,struct pt_regs *));
-extern int handle_bc __P((struct ppc_ctx *));
-extern unsigned long asmppc __P((unsigned long,char*,int*));
-extern char *asm_error_str __P((int));
-
-/*======================================================================
- *
- * GLOBAL VARIABLES
- *
- *======================================================================*/
-
-extern struct operand operands[];
-extern const unsigned int n_operands;
-extern struct opcode opcodes[];
-extern const unsigned int n_opcodes;
-
-#endif /* _PPC_H */
-
-
-/*
- * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are freely
- * permitted provided that the above copyright notice and this
- * paragraph and the following disclaimer are duplicated in all
- * such forms.
- *
- * This software is provided "AS IS" and without any express or
- * implied warranties, including, without limitation, the implied
- * warranties of merchantability and fitness for a particular
- * purpose.
- */
+/* $Id: ppc.h,v 1.1.1.1 2009/03/25 22:22:21 kenagy Exp $ */
+
+#ifndef _PPC_H
+#define _PPC_H
+
+/*======================================================================
+ *
+ * OPERANDS
+ *
+ *======================================================================*/
+
+enum OP_FIELD {
+ O_AA = 1, O_BD, O_BI, O_BO, O_crbD, O_crbA, O_crbB, O_CRM, O_d, O_frC, O_frD,
+ O_frS, O_IMM, O_LI, O_LK, O_MB, O_ME, O_NB, O_OE, O_rA, O_rB, O_Rc, O_rD,
+ O_rS, O_SH, O_SIMM, O_SR, O_TO, O_UIMM, O_crfD, O_crfS, O_L, O_spr, O_tbr,
+ O_cr2 };
+
+struct operand {
+ enum OP_FIELD field; /* The operand identifier from the
+ enum above */
+
+ char * name; /* Symbolic name of this operand */
+
+ unsigned int bits; /* The number of bits used by this
+ operand */
+
+ unsigned int shift; /* How far to the right the operand
+ should be shifted so that it is
+ aligned at the beginning of the
+ word */
+
+ unsigned int hint; /* A bitwise-inclusive-OR of the
+ values shown below. These are used
+ tell the disassembler how to print
+ this operand */
+};
+
+/* Values for operand hint */
+#define OH_SILENT 0x01 /* dont print this operand */
+#define OH_ADDR 0x02 /* this operand is an address */
+#define OH_REG 0x04 /* this operand is a register */
+#define OH_SPR 0x08 /* this operand is an SPR */
+#define OH_TBR 0x10 /* this operand is a TBR */
+#define OH_OFFSET 0x20 /* this operand is an offset */
+#define OH_LITERAL 0x40 /* a literal string */
+
+
+/*======================================================================
+ *
+ * OPCODES
+ *
+ *======================================================================*/
+
+/* From the MPCxxx instruction set documentation, all instructions are
+ * 32 bits long and word aligned. Bits 0-5 always specify the primary
+ * opcode. Many instructions also have an extended opcode.
+ */
+
+#define GET_OPCD(i) (((unsigned long)(i) >> 26) & 0x3f)
+#define MAKE_OPCODE(i) ((((unsigned long)(i)) & 0x3f) << 26)
+
+/* The MPC860 User's Manual, Appendix D.4 contains the definitions of the
+ * instruction forms
+ */
+
+
+/*-------------------------------------------------
+ * I-Form Instructions:
+ * bX
+ *-------------------------------------------------
+ * OPCD | LI |AA|LK
+ *-------------------------------------------------*/
+
+#define I_OPCODE(i,aa,lk) (MAKE_OPCODE(i) | (((aa) & 0x1) << 1) | ((lk) & 0x1))
+#define I_MASK I_OPCODE(0x3f,0x1,0x1)
+
+
+/*-------------------------------------------------
+ * B-Form Instructions:
+ * bcX
+ *-------------------------------------------------
+ * OPCD | BO | BI | BD |AA|LK
+ *-------------------------------------------------*/
+
+#define B_OPCODE(i,aa,lk) (MAKE_OPCODE(i) | (((aa) & 0x1) << 1) | ((lk) & 0x1))
+#define B_MASK B_OPCODE(0x3f,0x1,0x1)
+
+
+/*-------------------------------------------------
+ * SC-Form Instructions:
+ * sc
+ *-------------------------------------------------
+ * OPCD | 00000 | 00000 | 00000000000000 |1|0
+ *-------------------------------------------------*/
+
+#define SC_OPCODE(i) (MAKE_OPCODE(i) | 0x2)
+#define SC_MASK SC_OPCODE(0x3f)
+
+
+/*-------------------------------------------------
+ * D-Form Instructions:
+ * addi addic addic. addis andi. andis. cmpi cmpli
+ * lbz lbzu lha lhau lhz lhzu lmw lwz lwzu mulli
+ * ori oris stb stbu sth sthu stmw stw stwu subfic
+ * twi xori xoris
+ *-------------------------------------------------
+ * OPCD | D | A | d
+ * OPCD | D | A | SIMM
+ * OPCD | S | A | d
+ * OPCD | S | A | UIMM
+ * OPCD |crfD|0|L| A | SIMM
+ * OPCD |crfD|0|L| A | UIMM
+ * OPCD | TO | A | SIMM
+ *-------------------------------------------------*/
+
+#define D_OPCODE(i) MAKE_OPCODE(i)
+#define D_MASK MAKE_OPCODE(0x3f)
+
+
+/*-------------------------------------------------
+ * DS-Form Instructions:
+ * (none supported by MPC860)
+ *-------------------------------------------------
+ * OPCD | D | A | ds |XO
+ * OPCD | S | A | ds |XO
+ *-------------------------------------------------*/
+
+#define DS_OPCODE(i,xo) (MAKE_OPCODE(i) | ((xo) & 0x3))
+#define DS_MASK DS_OPCODE(0x3f,0x1)
+
+
+/*---------------------------------------------------
+ * X-Form Instructions:
+ * andX andcX cmp cmpl cntlzwX dcbf dcbi dcbst dcbt
+ * dcbtst dcbz eciwx ecowx eieio eqvX extsbX extshX
+ * icbi lbzux lbxz lhaux lhax lhbrx lhzux lhxz lswi
+ * lswx lwarx lwbrx lwzux lwxz mcrfs mcrxr mfcr
+ * mfmsr mfsr mfsrin mtmsr mtsr mtsrin nandX norX
+ * orX orcX slwX srawX srawiX srwX stbux stbx
+ * sthbrx sthuxsthx stswi stswx stwbrx stwcx. stwux
+ * stwx sync tlbie tlbld tlbli tlbsync tw xorX
+ *---------------------------------------------------
+ * OPCD | D | A | B | XO |0
+ * OPCD | D | A | NB | XO |0
+ * OPCD | D | 00000 | B | XO |0
+ * OPCD | D | 00000 | 00000 | XO |0
+ * OPCD | D |0| SR | 00000 | XO |0
+ * OPCD | S | A | B | XO |Rc
+ * OPCD | S | A | B | XO |1
+ * OPCD | S | A | B | XO |0
+ * OPCD | S | A | NB | XO |0
+ * OPCD | S | A | 00000 | XO |Rc
+ * OPCD | S | 00000 | B | XO |0
+ * OPCD | S | 00000 | 00000 | XO |0
+ * OPCD | S |0| SR | 00000 | XO |0
+ * OPCD | S | A | SH | XO |Rc
+ * OPCD |crfD|0|L| A | SH | XO |0
+ * OPCD |crfD |00| A | B | XO |0
+ * OPCD |crfD |00|crfS |00| 00000 | XO |0
+ * OPCD |crfD |00| 00000 | 00000 | XO |0
+ * OPCD |crfD |00| 00000 | IMM |0| XO |Rc
+ * OPCD | TO | A | B | XO |0
+ * OPCD | D | 00000 | B | XO |Rc
+ * OPCD | D | 00000 | 00000 | XO |Rc
+ * OPCD | crbD | 00000 | 00000 | XO |Rc
+ * OPCD | 00000 | A | B | XO |0
+ * OPCD | 00000 | 00000 | B | XO |0
+ * OPCD | 00000 | 00000 | 00000 | XO |0
+ *---------------------------------------------------*/
+
+#define X_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
+ ((rc) & 0x1))
+#define X_MASK X_OPCODE(0x3f,0x3ff,0x1)
+
+
+/*---------------------------------------------------
+ * XL-Form Instructions:
+ * bcctrX bclrX crand crandc creqv crnand crnor cror
+ * croc crxorisync mcrf rfi
+ *---------------------------------------------------
+ * OPCD | BO | BI | 00000 | XO |LK
+ * OPCD | crbD | crbA | crbB | XO |0
+ * OPCD |crfD |00|crfS |00| 00000 | XO |0
+ * OPCD | 00000 | 00000 | 00000 | XO |0
+ *---------------------------------------------------*/
+
+#define XL_OPCODE(i,xo,lk) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
+ ((lk) & 0x1))
+#define XL_MASK XL_OPCODE(0x3f,0x3ff,0x1)
+
+
+/*---------------------------------------------------
+ * XFX-Form Instructions:
+ * mfspr mftb mtcrf mtspr
+ *---------------------------------------------------
+ * OPCD | D | spr | XO |0
+ * OPCD | D |0| CRM |0| XO |0
+ * OPCD | S | spr | XO |0
+ * OPCD | D | tbr | XO |0
+ *---------------------------------------------------*/
+
+#define XFX_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
+ ((rc) & 0x1))
+#define XFX_MASK XFX_OPCODE(0x3f,0x3ff,0x1)
+
+
+/*---------------------------------------------------
+ * XFL-Form Instructions:
+ * (none supported by MPC860)
+ *---------------------------------------------------
+ * OPCD |0| FM |0| B | XO |0
+ *---------------------------------------------------*/
+
+#define XFL_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \
+ ((rc) & 0x1))
+#define XFL_MASK XFL_OPCODE(0x3f,0x3ff,0x1)
+
+
+/*---------------------------------------------------
+ * XS-Form Instructions:
+ * (none supported by MPC860)
+ *---------------------------------------------------
+ * OPCD | S | A | sh | XO |sh|LK
+ *---------------------------------------------------*/
+
+#define XS_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x1ff) << 2) | \
+ ((rc) & 0x1))
+#define XS_MASK XS_OPCODE(0x3f,0x1ff,0x1)
+
+
+/*---------------------------------------------------
+ * XO-Form Instructions:
+ * addX addcXaddeX addmeX addzeX divwX divwuX mulhwX
+ * mulhwuX mullwX negX subfX subfcX subfeX subfmeX
+ * subfzeX
+ *---------------------------------------------------
+ * OPCD | D | A | B |OE| XO |Rc
+ * OPCD | D | A | B |0 | XO |Rc
+ * OPCD | D | A | 00000 |OE| XO |Rc
+ *---------------------------------------------------*/
+
+#define XO_OPCODE(i,xo,oe,rc) (MAKE_OPCODE(i) | (((oe) & 0x1) << 10) | \
+ (((xo) & 0x1ff) << 1) | ((rc) & 0x1))
+#define XO_MASK XO_OPCODE(0x3f,0x1ff,0x1,0x1)
+
+
+/*---------------------------------------------------
+ * A-Form Instructions:
+ * (none supported by MPC860)
+ *---------------------------------------------------
+ * OPCD | D | A | B |00000| XO |Rc
+ * OPCD | D | A | B | C | XO |Rc
+ * OPCD | D | A | 00000 | C | XO |Rc
+ * OPCD | D | 00000 | B |00000| XO |Rc
+ *---------------------------------------------------*/
+
+#define A_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x1f) << 1) | \
+ ((rc) & 0x1))
+#define A_MASK A_OPCODE(0x3f,0x1f,0x1)
+
+
+/*---------------------------------------------------
+ * M-Form Instructions:
+ * rlwimiX rlwinmX rlwnmX
+ *---------------------------------------------------
+ * OPCD | S | A | SH | MB | ME |Rc
+ * OPCD | S | A | B | MB | ME |Rc
+ *---------------------------------------------------*/
+
+#define M_OPCODE(i,rc) (MAKE_OPCODE(i) | ((rc) & 0x1))
+#define M_MASK M_OPCODE(0x3f,0x1)
+
+
+/*---------------------------------------------------
+ * MD-Form Instructions:
+ * (none supported by MPC860)
+ *---------------------------------------------------
+ * OPCD | S | A | sh | mb | XO |sh|Rc
+ * OPCD | S | A | sh | me | XO |sh|Rc
+ *---------------------------------------------------*/
+
+#define MD_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x7) << 2) | \
+ ((rc) & 0x1))
+#define MD_MASK MD_OPCODE(0x3f,0x7,0x1)
+
+
+/*---------------------------------------------------
+ * MDS-Form Instructions:
+ * (none supported by MPC860)
+ *---------------------------------------------------
+ * OPCD | S | A | B | mb | XO |Rc
+ * OPCD | S | A | B | me | XO |Rc
+ *---------------------------------------------------*/
+
+#define MDS_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0xf) << 1) | \
+ ((rc) & 0x1))
+#define MDS_MASK MDS_OPCODE(0x3f,0xf,0x1)
+
+#ifndef FALSE
+#define FALSE 0
+#define TRUE (!FALSE)
+#endif
+
+#define INSTRUCTION( memaddr ) ntohl(*(unsigned long *)(memaddr))
+
+#define MAX_OPERANDS 8
+
+struct ppc_ctx;
+
+struct opcode {
+ unsigned long opcode; /* The complete opcode as produced by
+ one of the XXX_OPCODE macros above */
+
+ unsigned long mask; /* The mask to use on an instruction
+ before comparing with the opcode
+ field to see if it matches */
+
+ enum OP_FIELD fields[MAX_OPERANDS];
+ /* An array defining the operands for
+ this opcode. The values of the
+ array are the operand identifiers */
+
+ int (*hfunc)(struct ppc_ctx *);
+ /* Address of a function to handle the given
+ mnemonic */
+
+ char * name; /* The symbolic name of this opcode */
+
+ unsigned int hint; /* A bitwise-inclusive-OR of the
+ values shown below. These are used
+ tell the disassembler how to print
+ some operands for this opcode */
+};
+
+/* values for opcode hints */
+#define H_RELATIVE 0x1 /* The address operand is relative */
+#define H_IMM_HIGH 0x2 /* [U|S]IMM field shifted high */
+#define H_RA0_IS_0 0x4 /* If rA = 0 then treat as literal 0 */
+
+struct ppc_ctx {
+ struct opcode * op;
+ unsigned long instr;
+ unsigned int flags;
+ int datalen;
+ char data[ 256 ];
+ char radix_fmt[ 8 ];
+ unsigned char * virtual;
+};
+
+
+/*======================================================================
+ *
+ * FUNCTIONS
+ *
+ *======================================================================*/
+
+/* Values for flags as passed to various ppc routines */
+#define F_RADOCTAL 0x1 /* output radix = unsigned octal */
+#define F_RADUDECIMAL 0x2 /* output radix = unsigned decimal */
+#define F_RADSDECIMAL 0x4 /* output radix = signed decimal */
+#define F_RADHEX 0x8 /* output radix = unsigned hex */
+#define F_SIMPLE 0x10 /* use simplified mnemonics */
+#define F_SYMBOL 0x20 /* use symbol lookups for addresses */
+#define F_INSTR 0x40 /* output the raw instruction */
+#define F_LOCALMEM 0x80 /* retrieve opcodes from local memory
+ rather than from the HMI */
+#define F_LINENO 0x100 /* show line number info if available */
+#define F_VALIDONLY 0x200 /* cache: valid entries only */
+
+/* Values for assembler error codes */
+#define E_ASM_BAD_OPCODE 1
+#define E_ASM_NUM_OPERANDS 2
+#define E_ASM_BAD_REGISTER 3
+#define E_ASM_BAD_SPR 4
+#define E_ASM_BAD_TBR 5
+
+extern int disppc __P((unsigned char *,unsigned char *,int,
+ int (*)(const char *), unsigned long));
+extern int print_source_line __P((char *,char *,int,
+ int (*pfunc)(const char *)));
+extern int find_next_address __P((unsigned char *,int,struct pt_regs *));
+extern int handle_bc __P((struct ppc_ctx *));
+extern unsigned long asmppc __P((unsigned long,char*,int*));
+extern char *asm_error_str __P((int));
+
+/*======================================================================
+ *
+ * GLOBAL VARIABLES
+ *
+ *======================================================================*/
+
+extern struct operand operands[];
+extern const unsigned int n_operands;
+extern struct opcode opcodes[];
+extern const unsigned int n_opcodes;
+
+#endif /* _PPC_H */
+
+
+/*
+ * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are freely
+ * permitted provided that the above copyright notice and this
+ * paragraph and the following disclaimer are duplicated in all
+ * such forms.
+ *
+ * This software is provided "AS IS" and without any express or
+ * implied warranties, including, without limitation, the implied
+ * warranties of merchantability and fitness for a particular
+ * purpose.
+ */
diff -Naur u-boot-2009.03_orig/include/bedbug/regs.h u-boot-2009.03/include/bedbug/regs.h
--- u-boot-2009.03_orig/include/bedbug/regs.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/bedbug/regs.h 2009-03-31 15:00:04.701964000 -0700
@@ -1,403 +1,403 @@
-/* $Id$ */
-
-#ifndef _REGS_H
-#define _REGS_H
-
-/* Special Purpose Registers */
-
-#define SPR_CR -1
-#define SPR_MSR -2
-
-#define SPR_XER 1
-#define SPR_LR 8
-#define SPR_CTR 9
-#define SPR_DSISR 18
-#define SPR_DAR 19
-#define SPR_DEC 22
-#define SPR_SRR0 26
-#define SPR_SRR1 27
-#define SPR_EIE 80
-#define SPR_EID 81
-#define SPR_CMPA 144
-#define SPR_CMPB 145
-#define SPR_CMPC 146
-#define SPR_CMPD 147
-#define SPR_ICR 148
-#define SPR_DER 149
-#define SPR_COUNTA 150
-#define SPR_COUNTB 151
-#define SPR_CMPE 152
-#define SPR_CMPF 153
-#define SPR_CMPG 154
-#define SPR_CMPH 155
-#define SPR_LCTRL1 156
-#define SPR_LCTRL2 157
-#define SPR_ICTRL 158
-#define SPR_BAR 159
-#define SPR_USPRG0 256
-#define SPR_SPRG4_RO 260
-#define SPR_SPRG5_RO 261
-#define SPR_SPRG6_RO 262
-#define SPR_SPRG7_RO 263
-#define SPR_SPRG0 272
-#define SPR_SPRG1 273
-#define SPR_SPRG2 274
-#define SPR_SPRG3 275
-#define SPR_SPRG4 276
-#define SPR_SPRG5 277
-#define SPR_SPRG6 278
-#define SPR_SPRG7 279
-#define SPR_EAR 282 /* MPC603e core */
-#define SPR_TBL 284
-#define SPR_TBU 285
-#define SPR_PVR 287
-#define SPR_IC_CST 560
-#define SPR_IC_ADR 561
-#define SPR_IC_DAT 562
-#define SPR_DC_CST 568
-#define SPR_DC_ADR 569
-#define SPR_DC_DAT 570
-#define SPR_DPDR 630
-#define SPR_IMMR 638
-#define SPR_MI_CTR 784
-#define SPR_MI_AP 786
-#define SPR_MI_EPN 787
-#define SPR_MI_TWC 789
-#define SPR_MI_RPN 790
-#define SPR_MD_CTR 792
-#define SPR_M_CASID 793
-#define SPR_MD_AP 794
-#define SPR_MD_EPN 795
-#define SPR_M_TWB 796
-#define SPR_MD_TWC 797
-#define SPR_MD_RPN 798
-#define SPR_M_TW 799
-#define SPR_MI_DBCAM 816
-#define SPR_MI_DBRAM0 817
-#define SPR_MI_DBRAM1 818
-#define SPR_MD_DBCAM 824
-#define SPR_MD_DBRAM0 825
-#define SPR_MD_DBRAM1 826
-#define SPR_ZPR 944
-#define SPR_PID 945
-#define SPR_CCR0 947
-#define SPR_IAC3 948
-#define SPR_IAC4 949
-#define SPR_DVC1 950
-#define SPR_DVC2 951
-#define SPR_SGR 953
-#define SPR_DCWR 954
-#define SPR_SLER 955
-#define SPR_SU0R 956
-#define SPR_DBCR1 957
-#define SPR_ICDBDR 979
-#define SPR_ESR 980
-#define SPR_DEAR 981
-#define SPR_EVPR 982
-#define SPR_TSR 984
-#define SPR_TCR 986
-#define SPR_PIT 987
-#define SPR_SRR2 990
-#define SPR_SRR3 991
-#define SPR_DBSR 1008
-#define SPR_DBCR0 1010
-#define SPR_IABR 1010 /* MPC603e core */
-#define SPR_IAC1 1012
-#define SPR_IAC2 1013
-#define SPR_DAC1 1014
-#define SPR_DAC2 1015
-#define SPR_DCCR 1018
-#define SPR_ICCR 1019
-
-/* Bits for the DBCR0 register */
-#define DBCR0_EDM 0x80000000
-#define DBCR0_IDM 0x40000000
-#define DBCR0_RST 0x30000000
-#define DBCR0_IC 0x08000000
-#define DBCR0_BT 0x04000000
-#define DBCR0_EDE 0x02000000
-#define DBCR0_TDE 0x01000000
-#define DBCR0_IA1 0x00800000
-#define DBCR0_IA2 0x00400000
-#define DBCR0_IA12 0x00200000
-#define DBCR0_IA12X 0x00100000
-#define DBCR0_IA3 0x00080000
-#define DBCR0_IA4 0x00040000
-#define DBCR0_IA34 0x00020000
-#define DBCR0_IA34X 0x00010000
-#define DBCR0_IA12T 0x00008000
-#define DBCR0_IA34T 0x00004000
-#define DBCR0_FT 0x00000001
-
-/* Bits for the DBCR1 register */
-#define DBCR1_D1R 0x80000000
-#define DBCR1_D2R 0x40000000
-#define DBCR1_D1W 0x20000000
-#define DBCR1_D2W 0x10000000
-#define DBCR1_D1S 0x0C000000
-#define DBCR1_D2S 0x03000000
-#define DBCR1_DA12 0x00800000
-#define DBCR1_DA12X 0x00400000
-#define DBCR1_DV1M 0x000C0000
-#define DBCR1_DV2M 0x00030000
-#define DBCR1_DV1BE 0x0000F000
-#define DBCR1_DV2BE 0x00000F00
-
-/* Bits for the DBSR register */
-#define DBSR_IC 0x80000000
-#define DBSR_BT 0x40000000
-#define DBSR_EDE 0x20000000
-#define DBSR_TIE 0x10000000
-#define DBSR_UDE 0x08000000
-#define DBSR_IA1 0x04000000
-#define DBSR_IA2 0x02000000
-#define DBSR_DR1 0x01000000
-#define DBSR_DW1 0x00800000
-#define DBSR_DR2 0x00400000
-#define DBSR_DW2 0x00200000
-#define DBSR_IDE 0x00100000
-#define DBSR_IA3 0x00080000
-#define DBSR_IA4 0x00040000
-#define DBSR_MRR 0x00000300
-
-struct spr_info {
- int spr_val;
- char spr_name[ 10 ];
-};
-
-extern struct spr_info spr_map[];
-extern const unsigned int n_sprs;
-
-
-#define SET_REGISTER( str, val ) \
-({ unsigned long __value = (val); \
- asm volatile( str : : "r" (__value)); \
- __value; })
-
-#define GET_REGISTER( str ) \
-({ unsigned long __value; \
- asm volatile( str : "=r" (__value) : ); \
- __value; })
-
-#define GET_CR() GET_REGISTER( "mfcr %0" )
-#define SET_CR(val) SET_REGISTER( "mtcr %0", val )
-#define GET_MSR() GET_REGISTER( "mfmsr %0" )
-#define SET_MSR(val) SET_REGISTER( "mtmsr %0", val )
-#define GET_XER() GET_REGISTER( "mfspr %0,1" )
-#define SET_XER(val) SET_REGISTER( "mtspr 1,%0", val )
-#define GET_LR() GET_REGISTER( "mfspr %0,8" )
-#define SET_LR(val) SET_REGISTER( "mtspr 8,%0", val )
-#define GET_CTR() GET_REGISTER( "mfspr %0,9" )
-#define SET_CTR(val) SET_REGISTER( "mtspr 9,%0", val )
-#define GET_DSISR() GET_REGISTER( "mfspr %0,18" )
-#define SET_DSISR(val) SET_REGISTER( "mtspr 18,%0", val )
-#define GET_DAR() GET_REGISTER( "mfspr %0,19" )
-#define SET_DAR(val) SET_REGISTER( "mtspr 19,%0", val )
-#define GET_DEC() GET_REGISTER( "mfspr %0,22" )
-#define SET_DEC(val) SET_REGISTER( "mtspr 22,%0", val )
-#define GET_SRR0() GET_REGISTER( "mfspr %0,26" )
-#define SET_SRR0(val) SET_REGISTER( "mtspr 26,%0", val )
-#define GET_SRR1() GET_REGISTER( "mfspr %0,27" )
-#define SET_SRR1(val) SET_REGISTER( "mtspr 27,%0", val )
-#define GET_EIE() GET_REGISTER( "mfspr %0,80" )
-#define SET_EIE(val) SET_REGISTER( "mtspr 80,%0", val )
-#define GET_EID() GET_REGISTER( "mfspr %0,81" )
-#define SET_EID(val) SET_REGISTER( "mtspr 81,%0", val )
-#define GET_CMPA() GET_REGISTER( "mfspr %0,144" )
-#define SET_CMPA(val) SET_REGISTER( "mtspr 144,%0", val )
-#define GET_CMPB() GET_REGISTER( "mfspr %0,145" )
-#define SET_CMPB(val) SET_REGISTER( "mtspr 145,%0", val )
-#define GET_CMPC() GET_REGISTER( "mfspr %0,146" )
-#define SET_CMPC(val) SET_REGISTER( "mtspr 146,%0", val )
-#define GET_CMPD() GET_REGISTER( "mfspr %0,147" )
-#define SET_CMPD(val) SET_REGISTER( "mtspr 147,%0", val )
-#define GET_ICR() GET_REGISTER( "mfspr %0,148" )
-#define SET_ICR(val) SET_REGISTER( "mtspr 148,%0", val )
-#define GET_DER() GET_REGISTER( "mfspr %0,149" )
-#define SET_DER(val) SET_REGISTER( "mtspr 149,%0", val )
-#define GET_COUNTA() GET_REGISTER( "mfspr %0,150" )
-#define SET_COUNTA(val) SET_REGISTER( "mtspr 150,%0", val )
-#define GET_COUNTB() GET_REGISTER( "mfspr %0,151" )
-#define SET_COUNTB(val) SET_REGISTER( "mtspr 151,%0", val )
-#define GET_CMPE() GET_REGISTER( "mfspr %0,152" )
-#define SET_CMPE(val) SET_REGISTER( "mtspr 152,%0", val )
-#define GET_CMPF() GET_REGISTER( "mfspr %0,153" )
-#define SET_CMPF(val) SET_REGISTER( "mtspr 153,%0", val )
-#define GET_CMPG() GET_REGISTER( "mfspr %0,154" )
-#define SET_CMPG(val) SET_REGISTER( "mtspr 154,%0", val )
-#define GET_CMPH() GET_REGISTER( "mfspr %0,155" )
-#define SET_CMPH(val) SET_REGISTER( "mtspr 155,%0", val )
-#define GET_LCTRL1() GET_REGISTER( "mfspr %0,156" )
-#define SET_LCTRL1(val) SET_REGISTER( "mtspr 156,%0", val )
-#define GET_LCTRL2() GET_REGISTER( "mfspr %0,157" )
-#define SET_LCTRL2(val) SET_REGISTER( "mtspr 157,%0", val )
-#define GET_ICTRL() GET_REGISTER( "mfspr %0,158" )
-#define SET_ICTRL(val) SET_REGISTER( "mtspr 158,%0", val )
-#define GET_BAR() GET_REGISTER( "mfspr %0,159" )
-#define SET_BAR(val) SET_REGISTER( "mtspr 159,%0", val )
-#define GET_USPRG0() GET_REGISTER( "mfspr %0,256" )
-#define SET_USPRG0(val) SET_REGISTER( "mtspr 256,%0", val )
-#define GET_SPRG4_RO() GET_REGISTER( "mfspr %0,260" )
-#define SET_SPRG4_RO(val) SET_REGISTER( "mtspr 260,%0", val )
-#define GET_SPRG5_RO() GET_REGISTER( "mfspr %0,261" )
-#define SET_SPRG5_RO(val) SET_REGISTER( "mtspr 261,%0", val )
-#define GET_SPRG6_RO() GET_REGISTER( "mfspr %0,262" )
-#define SET_SPRG6_RO(val) SET_REGISTER( "mtspr 262,%0", val )
-#define GET_SPRG7_RO() GET_REGISTER( "mfspr %0,263" )
-#define SET_SPRG7_RO(val) SET_REGISTER( "mtspr 263,%0", val )
-#define GET_SPRG0() GET_REGISTER( "mfspr %0,272" )
-#define SET_SPRG0(val) SET_REGISTER( "mtspr 272,%0", val )
-#define GET_SPRG1() GET_REGISTER( "mfspr %0,273" )
-#define SET_SPRG1(val) SET_REGISTER( "mtspr 273,%0", val )
-#define GET_SPRG2() GET_REGISTER( "mfspr %0,274" )
-#define SET_SPRG2(val) SET_REGISTER( "mtspr 274,%0", val )
-#define GET_SPRG3() GET_REGISTER( "mfspr %0,275" )
-#define SET_SPRG3(val) SET_REGISTER( "mtspr 275,%0", val )
-#define GET_SPRG4() GET_REGISTER( "mfspr %0,276" )
-#define SET_SPRG4(val) SET_REGISTER( "mtspr 276,%0", val )
-#define GET_SPRG5() GET_REGISTER( "mfspr %0,277" )
-#define SET_SPRG5(val) SET_REGISTER( "mtspr 277,%0", val )
-#define GET_SPRG6() GET_REGISTER( "mfspr %0,278" )
-#define SET_SPRG6(val) SET_REGISTER( "mtspr 278,%0", val )
-#define GET_SPRG7() GET_REGISTER( "mfspr %0,279" )
-#define SET_SPRG7(val) SET_REGISTER( "mtspr 279,%0", val )
-#define GET_EAR() GET_REGISTER( "mfspr %0,282" )
-#define SET_EAR(val) SET_REGISTER( "mtspr 282,%0", val )
-#define GET_TBL() GET_REGISTER( "mfspr %0,284" )
-#define SET_TBL(val) SET_REGISTER( "mtspr 284,%0", val )
-#define GET_TBU() GET_REGISTER( "mfspr %0,285" )
-#define SET_TBU(val) SET_REGISTER( "mtspr 285,%0", val )
-#define GET_PVR() GET_REGISTER( "mfspr %0,287" )
-#define SET_PVR(val) SET_REGISTER( "mtspr 287,%0", val )
-#define GET_IC_CST() GET_REGISTER( "mfspr %0,560" )
-#define SET_IC_CST(val) SET_REGISTER( "mtspr 560,%0", val )
-#define GET_IC_ADR() GET_REGISTER( "mfspr %0,561" )
-#define SET_IC_ADR(val) SET_REGISTER( "mtspr 561,%0", val )
-#define GET_IC_DAT() GET_REGISTER( "mfspr %0,562" )
-#define SET_IC_DAT(val) SET_REGISTER( "mtspr 562,%0", val )
-#define GET_DC_CST() GET_REGISTER( "mfspr %0,568" )
-#define SET_DC_CST(val) SET_REGISTER( "mtspr 568,%0", val )
-#define GET_DC_ADR() GET_REGISTER( "mfspr %0,569" )
-#define SET_DC_ADR(val) SET_REGISTER( "mtspr 569,%0", val )
-#define GET_DC_DAT() GET_REGISTER( "mfspr %0,570" )
-#define SET_DC_DAT(val) SET_REGISTER( "mtspr 570,%0", val )
-#define GET_DPDR() GET_REGISTER( "mfspr %0,630" )
-#define SET_DPDR(val) SET_REGISTER( "mtspr 630,%0", val )
-#define GET_IMMR() GET_REGISTER( "mfspr %0,638" )
-#define SET_IMMR(val) SET_REGISTER( "mtspr 638,%0", val )
-#define GET_MI_CTR() GET_REGISTER( "mfspr %0,784" )
-#define SET_MI_CTR(val) SET_REGISTER( "mtspr 784,%0", val )
-#define GET_MI_AP() GET_REGISTER( "mfspr %0,786" )
-#define SET_MI_AP(val) SET_REGISTER( "mtspr 786,%0", val )
-#define GET_MI_EPN() GET_REGISTER( "mfspr %0,787" )
-#define SET_MI_EPN(val) SET_REGISTER( "mtspr 787,%0", val )
-#define GET_MI_TWC() GET_REGISTER( "mfspr %0,789" )
-#define SET_MI_TWC(val) SET_REGISTER( "mtspr 789,%0", val )
-#define GET_MI_RPN() GET_REGISTER( "mfspr %0,790" )
-#define SET_MI_RPN(val) SET_REGISTER( "mtspr 790,%0", val )
-#define GET_MD_CTR() GET_REGISTER( "mfspr %0,792" )
-#define SET_MD_CTR(val) SET_REGISTER( "mtspr 792,%0", val )
-#define GET_M_CASID() GET_REGISTER( "mfspr %0,793" )
-#define SET_M_CASID(val) SET_REGISTER( "mtspr 793,%0", val )
-#define GET_MD_AP() GET_REGISTER( "mfspr %0,794" )
-#define SET_MD_AP(val) SET_REGISTER( "mtspr ,794%0", val )
-#define GET_MD_EPN() GET_REGISTER( "mfspr %0,795" )
-#define SET_MD_EPN(val) SET_REGISTER( "mtspr 795,%0", val )
-#define GET_M_TWB() GET_REGISTER( "mfspr %0,796" )
-#define SET_M_TWB(val) SET_REGISTER( "mtspr 796,%0", val )
-#define GET_MD_TWC() GET_REGISTER( "mfspr %0,797" )
-#define SET_MD_TWC(val) SET_REGISTER( "mtspr 797,%0", val )
-#define GET_MD_RPN() GET_REGISTER( "mfspr %0,798" )
-#define SET_MD_RPN(val) SET_REGISTER( "mtspr 798,%0", val )
-#define GET_M_TW() GET_REGISTER( "mfspr %0,799" )
-#define SET_M_TW(val) SET_REGISTER( "mtspr 799,%0", val )
-#define GET_MI_DBCAM() GET_REGISTER( "mfspr %0,816" )
-#define SET_MI_DBCAM(val) SET_REGISTER( "mtspr 816,%0", val )
-#define GET_MI_DBRAM0() GET_REGISTER( "mfspr %0,817" )
-#define SET_MI_DBRAM0(val) SET_REGISTER( "mtspr 817,%0", val )
-#define GET_MI_DBRAM1() GET_REGISTER( "mfspr %0,818" )
-#define SET_MI_DBRAM1(val) SET_REGISTER( "mtspr 818,%0", val )
-#define GET_MD_DBCAM() GET_REGISTER( "mfspr %0,824" )
-#define SET_MD_DBCA(val) SET_REGISTER( "mtspr 824,%0", val )
-#define GET_MD_DBRAM0() GET_REGISTER( "mfspr %0,825" )
-#define SET_MD_DBRAM0(val) SET_REGISTER( "mtspr 825,%0", val )
-#define GET_MD_DBRAM1() GET_REGISTER( "mfspr %0,826" )
-#define SET_MD_DBRAM1(val) SET_REGISTER( "mtspr 826,%0", val )
-#define GET_ZPR() GET_REGISTER( "mfspr %0,944" )
-#define SET_ZPR(val) SET_REGISTER( "mtspr 944,%0", val )
-#define GET_PID() GET_REGISTER( "mfspr %0,945" )
-#define SET_PID(val) SET_REGISTER( "mtspr 945,%0", val )
-#define GET_CCR0() GET_REGISTER( "mfspr %0,947" )
-#define SET_CCR0(val) SET_REGISTER( "mtspr 947,%0", val )
-#define GET_IAC3() GET_REGISTER( "mfspr %0,948" )
-#define SET_IAC3(val) SET_REGISTER( "mtspr 948,%0", val )
-#define GET_IAC4() GET_REGISTER( "mfspr %0,949" )
-#define SET_IAC4(val) SET_REGISTER( "mtspr 949,%0", val )
-#define GET_DVC1() GET_REGISTER( "mfspr %0,950" )
-#define SET_DVC1(val) SET_REGISTER( "mtspr 950,%0", val )
-#define GET_DVC2() GET_REGISTER( "mfspr %0,951" )
-#define SET_DVC2(val) SET_REGISTER( "mtspr 951,%0", val )
-#define GET_SGR() GET_REGISTER( "mfspr %0,953" )
-#define SET_SGR(val) SET_REGISTER( "mtspr 953,%0", val )
-#define GET_DCWR() GET_REGISTER( "mfspr %0,954" )
-#define SET_DCWR(val) SET_REGISTER( "mtspr 954,%0", val )
-#define GET_SLER() GET_REGISTER( "mfspr %0,955" )
-#define SET_SLER(val) SET_REGISTER( "mtspr 955,%0", val )
-#define GET_SU0R() GET_REGISTER( "mfspr %0,956" )
-#define SET_SU0R(val) SET_REGISTER( "mtspr 956,%0", val )
-#define GET_DBCR1() GET_REGISTER( "mfspr %0,957" )
-#define SET_DBCR1(val) SET_REGISTER( "mtspr 957,%0", val )
-#define GET_ICDBDR() GET_REGISTER( "mfspr %0,979" )
-#define SET_ICDBDR(val) SET_REGISTER( "mtspr 979,%0", val )
-#define GET_ESR() GET_REGISTER( "mfspr %0,980" )
-#define SET_ESR(val) SET_REGISTER( "mtspr 980,%0", val )
-#define GET_DEAR() GET_REGISTER( "mfspr %0,981" )
-#define SET_DEAR(val) SET_REGISTER( "mtspr 981,%0", val )
-#define GET_EVPR() GET_REGISTER( "mfspr %0,982" )
-#define SET_EVPR(val) SET_REGISTER( "mtspr 982,%0", val )
-#define GET_TSR() GET_REGISTER( "mfspr %0,984" )
-#define SET_TSR(val) SET_REGISTER( "mtspr 984,%0", val )
-#define GET_TCR() GET_REGISTER( "mfspr %0,986" )
-#define SET_TCR(val) SET_REGISTER( "mtspr 986,%0", val )
-#define GET_PIT() GET_REGISTER( "mfspr %0,987" )
-#define SET_PIT(val) SET_REGISTER( "mtspr 987,%0", val )
-#define GET_SRR2() GET_REGISTER( "mfspr %0,990" )
-#define SET_SRR2(val) SET_REGISTER( "mtspr 990,%0", val )
-#define GET_SRR3() GET_REGISTER( "mfspr %0,991" )
-#define SET_SRR3(val) SET_REGISTER( "mtspr 991,%0", val )
-#define GET_DBSR() GET_REGISTER( "mfspr %0,1008" )
-#define SET_DBSR(val) SET_REGISTER( "mtspr 1008,%0", val )
-#define GET_DBCR0() GET_REGISTER( "mfspr %0,1010" )
-#define SET_DBCR0(val) SET_REGISTER( "mtspr 1010,%0", val )
-#define GET_IABR() GET_REGISTER( "mfspr %0,1010" )
-#define SET_IABR(val) SET_REGISTER( "mtspr 1010,%0", val )
-#define GET_IAC1() GET_REGISTER( "mfspr %0,1012" )
-#define SET_IAC1(val) SET_REGISTER( "mtspr 1012,%0", val )
-#define GET_IAC2() GET_REGISTER( "mfspr %0,1013" )
-#define SET_IAC2(val) SET_REGISTER( "mtspr 1013,%0", val )
-#define GET_DAC1() GET_REGISTER( "mfspr %0,1014" )
-#define SET_DAC1(val) SET_REGISTER( "mtspr 1014,%0", val )
-#define GET_DAC2() GET_REGISTER( "mfspr %0,1015" )
-#define SET_DAC2(val) SET_REGISTER( "mtspr 1015,%0", val )
-#define GET_DCCR() GET_REGISTER( "mfspr %0,1018" )
-#define SET_DCCR(val) SET_REGISTER( "mtspr 1018,%0", val )
-#define GET_ICCR() GET_REGISTER( "mfspr %0,1019" )
-#define SET_ICCR(val) SET_REGISTER( "mtspr 1019,%0", val )
-
-#endif /* _REGS_H */
-
-
-/*
- * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are freely
- * permitted provided that the above copyright notice and this
- * paragraph and the following disclaimer are duplicated in all
- * such forms.
- *
- * This software is provided "AS IS" and without any express or
- * implied warranties, including, without limitation, the implied
- * warranties of merchantability and fitness for a particular
- * purpose.
- */
+/* $Id: regs.h,v 1.1.1.1 2009/03/25 22:22:21 kenagy Exp $ */
+
+#ifndef _REGS_H
+#define _REGS_H
+
+/* Special Purpose Registers */
+
+#define SPR_CR -1
+#define SPR_MSR -2
+
+#define SPR_XER 1
+#define SPR_LR 8
+#define SPR_CTR 9
+#define SPR_DSISR 18
+#define SPR_DAR 19
+#define SPR_DEC 22
+#define SPR_SRR0 26
+#define SPR_SRR1 27
+#define SPR_EIE 80
+#define SPR_EID 81
+#define SPR_CMPA 144
+#define SPR_CMPB 145
+#define SPR_CMPC 146
+#define SPR_CMPD 147
+#define SPR_ICR 148
+#define SPR_DER 149
+#define SPR_COUNTA 150
+#define SPR_COUNTB 151
+#define SPR_CMPE 152
+#define SPR_CMPF 153
+#define SPR_CMPG 154
+#define SPR_CMPH 155
+#define SPR_LCTRL1 156
+#define SPR_LCTRL2 157
+#define SPR_ICTRL 158
+#define SPR_BAR 159
+#define SPR_USPRG0 256
+#define SPR_SPRG4_RO 260
+#define SPR_SPRG5_RO 261
+#define SPR_SPRG6_RO 262
+#define SPR_SPRG7_RO 263
+#define SPR_SPRG0 272
+#define SPR_SPRG1 273
+#define SPR_SPRG2 274
+#define SPR_SPRG3 275
+#define SPR_SPRG4 276
+#define SPR_SPRG5 277
+#define SPR_SPRG6 278
+#define SPR_SPRG7 279
+#define SPR_EAR 282 /* MPC603e core */
+#define SPR_TBL 284
+#define SPR_TBU 285
+#define SPR_PVR 287
+#define SPR_IC_CST 560
+#define SPR_IC_ADR 561
+#define SPR_IC_DAT 562
+#define SPR_DC_CST 568
+#define SPR_DC_ADR 569
+#define SPR_DC_DAT 570
+#define SPR_DPDR 630
+#define SPR_IMMR 638
+#define SPR_MI_CTR 784
+#define SPR_MI_AP 786
+#define SPR_MI_EPN 787
+#define SPR_MI_TWC 789
+#define SPR_MI_RPN 790
+#define SPR_MD_CTR 792
+#define SPR_M_CASID 793
+#define SPR_MD_AP 794
+#define SPR_MD_EPN 795
+#define SPR_M_TWB 796
+#define SPR_MD_TWC 797
+#define SPR_MD_RPN 798
+#define SPR_M_TW 799
+#define SPR_MI_DBCAM 816
+#define SPR_MI_DBRAM0 817
+#define SPR_MI_DBRAM1 818
+#define SPR_MD_DBCAM 824
+#define SPR_MD_DBRAM0 825
+#define SPR_MD_DBRAM1 826
+#define SPR_ZPR 944
+#define SPR_PID 945
+#define SPR_CCR0 947
+#define SPR_IAC3 948
+#define SPR_IAC4 949
+#define SPR_DVC1 950
+#define SPR_DVC2 951
+#define SPR_SGR 953
+#define SPR_DCWR 954
+#define SPR_SLER 955
+#define SPR_SU0R 956
+#define SPR_DBCR1 957
+#define SPR_ICDBDR 979
+#define SPR_ESR 980
+#define SPR_DEAR 981
+#define SPR_EVPR 982
+#define SPR_TSR 984
+#define SPR_TCR 986
+#define SPR_PIT 987
+#define SPR_SRR2 990
+#define SPR_SRR3 991
+#define SPR_DBSR 1008
+#define SPR_DBCR0 1010
+#define SPR_IABR 1010 /* MPC603e core */
+#define SPR_IAC1 1012
+#define SPR_IAC2 1013
+#define SPR_DAC1 1014
+#define SPR_DAC2 1015
+#define SPR_DCCR 1018
+#define SPR_ICCR 1019
+
+/* Bits for the DBCR0 register */
+#define DBCR0_EDM 0x80000000
+#define DBCR0_IDM 0x40000000
+#define DBCR0_RST 0x30000000
+#define DBCR0_IC 0x08000000
+#define DBCR0_BT 0x04000000
+#define DBCR0_EDE 0x02000000
+#define DBCR0_TDE 0x01000000
+#define DBCR0_IA1 0x00800000
+#define DBCR0_IA2 0x00400000
+#define DBCR0_IA12 0x00200000
+#define DBCR0_IA12X 0x00100000
+#define DBCR0_IA3 0x00080000
+#define DBCR0_IA4 0x00040000
+#define DBCR0_IA34 0x00020000
+#define DBCR0_IA34X 0x00010000
+#define DBCR0_IA12T 0x00008000
+#define DBCR0_IA34T 0x00004000
+#define DBCR0_FT 0x00000001
+
+/* Bits for the DBCR1 register */
+#define DBCR1_D1R 0x80000000
+#define DBCR1_D2R 0x40000000
+#define DBCR1_D1W 0x20000000
+#define DBCR1_D2W 0x10000000
+#define DBCR1_D1S 0x0C000000
+#define DBCR1_D2S 0x03000000
+#define DBCR1_DA12 0x00800000
+#define DBCR1_DA12X 0x00400000
+#define DBCR1_DV1M 0x000C0000
+#define DBCR1_DV2M 0x00030000
+#define DBCR1_DV1BE 0x0000F000
+#define DBCR1_DV2BE 0x00000F00
+
+/* Bits for the DBSR register */
+#define DBSR_IC 0x80000000
+#define DBSR_BT 0x40000000
+#define DBSR_EDE 0x20000000
+#define DBSR_TIE 0x10000000
+#define DBSR_UDE 0x08000000
+#define DBSR_IA1 0x04000000
+#define DBSR_IA2 0x02000000
+#define DBSR_DR1 0x01000000
+#define DBSR_DW1 0x00800000
+#define DBSR_DR2 0x00400000
+#define DBSR_DW2 0x00200000
+#define DBSR_IDE 0x00100000
+#define DBSR_IA3 0x00080000
+#define DBSR_IA4 0x00040000
+#define DBSR_MRR 0x00000300
+
+struct spr_info {
+ int spr_val;
+ char spr_name[ 10 ];
+};
+
+extern struct spr_info spr_map[];
+extern const unsigned int n_sprs;
+
+
+#define SET_REGISTER( str, val ) \
+({ unsigned long __value = (val); \
+ asm volatile( str : : "r" (__value)); \
+ __value; })
+
+#define GET_REGISTER( str ) \
+({ unsigned long __value; \
+ asm volatile( str : "=r" (__value) : ); \
+ __value; })
+
+#define GET_CR() GET_REGISTER( "mfcr %0" )
+#define SET_CR(val) SET_REGISTER( "mtcr %0", val )
+#define GET_MSR() GET_REGISTER( "mfmsr %0" )
+#define SET_MSR(val) SET_REGISTER( "mtmsr %0", val )
+#define GET_XER() GET_REGISTER( "mfspr %0,1" )
+#define SET_XER(val) SET_REGISTER( "mtspr 1,%0", val )
+#define GET_LR() GET_REGISTER( "mfspr %0,8" )
+#define SET_LR(val) SET_REGISTER( "mtspr 8,%0", val )
+#define GET_CTR() GET_REGISTER( "mfspr %0,9" )
+#define SET_CTR(val) SET_REGISTER( "mtspr 9,%0", val )
+#define GET_DSISR() GET_REGISTER( "mfspr %0,18" )
+#define SET_DSISR(val) SET_REGISTER( "mtspr 18,%0", val )
+#define GET_DAR() GET_REGISTER( "mfspr %0,19" )
+#define SET_DAR(val) SET_REGISTER( "mtspr 19,%0", val )
+#define GET_DEC() GET_REGISTER( "mfspr %0,22" )
+#define SET_DEC(val) SET_REGISTER( "mtspr 22,%0", val )
+#define GET_SRR0() GET_REGISTER( "mfspr %0,26" )
+#define SET_SRR0(val) SET_REGISTER( "mtspr 26,%0", val )
+#define GET_SRR1() GET_REGISTER( "mfspr %0,27" )
+#define SET_SRR1(val) SET_REGISTER( "mtspr 27,%0", val )
+#define GET_EIE() GET_REGISTER( "mfspr %0,80" )
+#define SET_EIE(val) SET_REGISTER( "mtspr 80,%0", val )
+#define GET_EID() GET_REGISTER( "mfspr %0,81" )
+#define SET_EID(val) SET_REGISTER( "mtspr 81,%0", val )
+#define GET_CMPA() GET_REGISTER( "mfspr %0,144" )
+#define SET_CMPA(val) SET_REGISTER( "mtspr 144,%0", val )
+#define GET_CMPB() GET_REGISTER( "mfspr %0,145" )
+#define SET_CMPB(val) SET_REGISTER( "mtspr 145,%0", val )
+#define GET_CMPC() GET_REGISTER( "mfspr %0,146" )
+#define SET_CMPC(val) SET_REGISTER( "mtspr 146,%0", val )
+#define GET_CMPD() GET_REGISTER( "mfspr %0,147" )
+#define SET_CMPD(val) SET_REGISTER( "mtspr 147,%0", val )
+#define GET_ICR() GET_REGISTER( "mfspr %0,148" )
+#define SET_ICR(val) SET_REGISTER( "mtspr 148,%0", val )
+#define GET_DER() GET_REGISTER( "mfspr %0,149" )
+#define SET_DER(val) SET_REGISTER( "mtspr 149,%0", val )
+#define GET_COUNTA() GET_REGISTER( "mfspr %0,150" )
+#define SET_COUNTA(val) SET_REGISTER( "mtspr 150,%0", val )
+#define GET_COUNTB() GET_REGISTER( "mfspr %0,151" )
+#define SET_COUNTB(val) SET_REGISTER( "mtspr 151,%0", val )
+#define GET_CMPE() GET_REGISTER( "mfspr %0,152" )
+#define SET_CMPE(val) SET_REGISTER( "mtspr 152,%0", val )
+#define GET_CMPF() GET_REGISTER( "mfspr %0,153" )
+#define SET_CMPF(val) SET_REGISTER( "mtspr 153,%0", val )
+#define GET_CMPG() GET_REGISTER( "mfspr %0,154" )
+#define SET_CMPG(val) SET_REGISTER( "mtspr 154,%0", val )
+#define GET_CMPH() GET_REGISTER( "mfspr %0,155" )
+#define SET_CMPH(val) SET_REGISTER( "mtspr 155,%0", val )
+#define GET_LCTRL1() GET_REGISTER( "mfspr %0,156" )
+#define SET_LCTRL1(val) SET_REGISTER( "mtspr 156,%0", val )
+#define GET_LCTRL2() GET_REGISTER( "mfspr %0,157" )
+#define SET_LCTRL2(val) SET_REGISTER( "mtspr 157,%0", val )
+#define GET_ICTRL() GET_REGISTER( "mfspr %0,158" )
+#define SET_ICTRL(val) SET_REGISTER( "mtspr 158,%0", val )
+#define GET_BAR() GET_REGISTER( "mfspr %0,159" )
+#define SET_BAR(val) SET_REGISTER( "mtspr 159,%0", val )
+#define GET_USPRG0() GET_REGISTER( "mfspr %0,256" )
+#define SET_USPRG0(val) SET_REGISTER( "mtspr 256,%0", val )
+#define GET_SPRG4_RO() GET_REGISTER( "mfspr %0,260" )
+#define SET_SPRG4_RO(val) SET_REGISTER( "mtspr 260,%0", val )
+#define GET_SPRG5_RO() GET_REGISTER( "mfspr %0,261" )
+#define SET_SPRG5_RO(val) SET_REGISTER( "mtspr 261,%0", val )
+#define GET_SPRG6_RO() GET_REGISTER( "mfspr %0,262" )
+#define SET_SPRG6_RO(val) SET_REGISTER( "mtspr 262,%0", val )
+#define GET_SPRG7_RO() GET_REGISTER( "mfspr %0,263" )
+#define SET_SPRG7_RO(val) SET_REGISTER( "mtspr 263,%0", val )
+#define GET_SPRG0() GET_REGISTER( "mfspr %0,272" )
+#define SET_SPRG0(val) SET_REGISTER( "mtspr 272,%0", val )
+#define GET_SPRG1() GET_REGISTER( "mfspr %0,273" )
+#define SET_SPRG1(val) SET_REGISTER( "mtspr 273,%0", val )
+#define GET_SPRG2() GET_REGISTER( "mfspr %0,274" )
+#define SET_SPRG2(val) SET_REGISTER( "mtspr 274,%0", val )
+#define GET_SPRG3() GET_REGISTER( "mfspr %0,275" )
+#define SET_SPRG3(val) SET_REGISTER( "mtspr 275,%0", val )
+#define GET_SPRG4() GET_REGISTER( "mfspr %0,276" )
+#define SET_SPRG4(val) SET_REGISTER( "mtspr 276,%0", val )
+#define GET_SPRG5() GET_REGISTER( "mfspr %0,277" )
+#define SET_SPRG5(val) SET_REGISTER( "mtspr 277,%0", val )
+#define GET_SPRG6() GET_REGISTER( "mfspr %0,278" )
+#define SET_SPRG6(val) SET_REGISTER( "mtspr 278,%0", val )
+#define GET_SPRG7() GET_REGISTER( "mfspr %0,279" )
+#define SET_SPRG7(val) SET_REGISTER( "mtspr 279,%0", val )
+#define GET_EAR() GET_REGISTER( "mfspr %0,282" )
+#define SET_EAR(val) SET_REGISTER( "mtspr 282,%0", val )
+#define GET_TBL() GET_REGISTER( "mfspr %0,284" )
+#define SET_TBL(val) SET_REGISTER( "mtspr 284,%0", val )
+#define GET_TBU() GET_REGISTER( "mfspr %0,285" )
+#define SET_TBU(val) SET_REGISTER( "mtspr 285,%0", val )
+#define GET_PVR() GET_REGISTER( "mfspr %0,287" )
+#define SET_PVR(val) SET_REGISTER( "mtspr 287,%0", val )
+#define GET_IC_CST() GET_REGISTER( "mfspr %0,560" )
+#define SET_IC_CST(val) SET_REGISTER( "mtspr 560,%0", val )
+#define GET_IC_ADR() GET_REGISTER( "mfspr %0,561" )
+#define SET_IC_ADR(val) SET_REGISTER( "mtspr 561,%0", val )
+#define GET_IC_DAT() GET_REGISTER( "mfspr %0,562" )
+#define SET_IC_DAT(val) SET_REGISTER( "mtspr 562,%0", val )
+#define GET_DC_CST() GET_REGISTER( "mfspr %0,568" )
+#define SET_DC_CST(val) SET_REGISTER( "mtspr 568,%0", val )
+#define GET_DC_ADR() GET_REGISTER( "mfspr %0,569" )
+#define SET_DC_ADR(val) SET_REGISTER( "mtspr 569,%0", val )
+#define GET_DC_DAT() GET_REGISTER( "mfspr %0,570" )
+#define SET_DC_DAT(val) SET_REGISTER( "mtspr 570,%0", val )
+#define GET_DPDR() GET_REGISTER( "mfspr %0,630" )
+#define SET_DPDR(val) SET_REGISTER( "mtspr 630,%0", val )
+#define GET_IMMR() GET_REGISTER( "mfspr %0,638" )
+#define SET_IMMR(val) SET_REGISTER( "mtspr 638,%0", val )
+#define GET_MI_CTR() GET_REGISTER( "mfspr %0,784" )
+#define SET_MI_CTR(val) SET_REGISTER( "mtspr 784,%0", val )
+#define GET_MI_AP() GET_REGISTER( "mfspr %0,786" )
+#define SET_MI_AP(val) SET_REGISTER( "mtspr 786,%0", val )
+#define GET_MI_EPN() GET_REGISTER( "mfspr %0,787" )
+#define SET_MI_EPN(val) SET_REGISTER( "mtspr 787,%0", val )
+#define GET_MI_TWC() GET_REGISTER( "mfspr %0,789" )
+#define SET_MI_TWC(val) SET_REGISTER( "mtspr 789,%0", val )
+#define GET_MI_RPN() GET_REGISTER( "mfspr %0,790" )
+#define SET_MI_RPN(val) SET_REGISTER( "mtspr 790,%0", val )
+#define GET_MD_CTR() GET_REGISTER( "mfspr %0,792" )
+#define SET_MD_CTR(val) SET_REGISTER( "mtspr 792,%0", val )
+#define GET_M_CASID() GET_REGISTER( "mfspr %0,793" )
+#define SET_M_CASID(val) SET_REGISTER( "mtspr 793,%0", val )
+#define GET_MD_AP() GET_REGISTER( "mfspr %0,794" )
+#define SET_MD_AP(val) SET_REGISTER( "mtspr ,794%0", val )
+#define GET_MD_EPN() GET_REGISTER( "mfspr %0,795" )
+#define SET_MD_EPN(val) SET_REGISTER( "mtspr 795,%0", val )
+#define GET_M_TWB() GET_REGISTER( "mfspr %0,796" )
+#define SET_M_TWB(val) SET_REGISTER( "mtspr 796,%0", val )
+#define GET_MD_TWC() GET_REGISTER( "mfspr %0,797" )
+#define SET_MD_TWC(val) SET_REGISTER( "mtspr 797,%0", val )
+#define GET_MD_RPN() GET_REGISTER( "mfspr %0,798" )
+#define SET_MD_RPN(val) SET_REGISTER( "mtspr 798,%0", val )
+#define GET_M_TW() GET_REGISTER( "mfspr %0,799" )
+#define SET_M_TW(val) SET_REGISTER( "mtspr 799,%0", val )
+#define GET_MI_DBCAM() GET_REGISTER( "mfspr %0,816" )
+#define SET_MI_DBCAM(val) SET_REGISTER( "mtspr 816,%0", val )
+#define GET_MI_DBRAM0() GET_REGISTER( "mfspr %0,817" )
+#define SET_MI_DBRAM0(val) SET_REGISTER( "mtspr 817,%0", val )
+#define GET_MI_DBRAM1() GET_REGISTER( "mfspr %0,818" )
+#define SET_MI_DBRAM1(val) SET_REGISTER( "mtspr 818,%0", val )
+#define GET_MD_DBCAM() GET_REGISTER( "mfspr %0,824" )
+#define SET_MD_DBCA(val) SET_REGISTER( "mtspr 824,%0", val )
+#define GET_MD_DBRAM0() GET_REGISTER( "mfspr %0,825" )
+#define SET_MD_DBRAM0(val) SET_REGISTER( "mtspr 825,%0", val )
+#define GET_MD_DBRAM1() GET_REGISTER( "mfspr %0,826" )
+#define SET_MD_DBRAM1(val) SET_REGISTER( "mtspr 826,%0", val )
+#define GET_ZPR() GET_REGISTER( "mfspr %0,944" )
+#define SET_ZPR(val) SET_REGISTER( "mtspr 944,%0", val )
+#define GET_PID() GET_REGISTER( "mfspr %0,945" )
+#define SET_PID(val) SET_REGISTER( "mtspr 945,%0", val )
+#define GET_CCR0() GET_REGISTER( "mfspr %0,947" )
+#define SET_CCR0(val) SET_REGISTER( "mtspr 947,%0", val )
+#define GET_IAC3() GET_REGISTER( "mfspr %0,948" )
+#define SET_IAC3(val) SET_REGISTER( "mtspr 948,%0", val )
+#define GET_IAC4() GET_REGISTER( "mfspr %0,949" )
+#define SET_IAC4(val) SET_REGISTER( "mtspr 949,%0", val )
+#define GET_DVC1() GET_REGISTER( "mfspr %0,950" )
+#define SET_DVC1(val) SET_REGISTER( "mtspr 950,%0", val )
+#define GET_DVC2() GET_REGISTER( "mfspr %0,951" )
+#define SET_DVC2(val) SET_REGISTER( "mtspr 951,%0", val )
+#define GET_SGR() GET_REGISTER( "mfspr %0,953" )
+#define SET_SGR(val) SET_REGISTER( "mtspr 953,%0", val )
+#define GET_DCWR() GET_REGISTER( "mfspr %0,954" )
+#define SET_DCWR(val) SET_REGISTER( "mtspr 954,%0", val )
+#define GET_SLER() GET_REGISTER( "mfspr %0,955" )
+#define SET_SLER(val) SET_REGISTER( "mtspr 955,%0", val )
+#define GET_SU0R() GET_REGISTER( "mfspr %0,956" )
+#define SET_SU0R(val) SET_REGISTER( "mtspr 956,%0", val )
+#define GET_DBCR1() GET_REGISTER( "mfspr %0,957" )
+#define SET_DBCR1(val) SET_REGISTER( "mtspr 957,%0", val )
+#define GET_ICDBDR() GET_REGISTER( "mfspr %0,979" )
+#define SET_ICDBDR(val) SET_REGISTER( "mtspr 979,%0", val )
+#define GET_ESR() GET_REGISTER( "mfspr %0,980" )
+#define SET_ESR(val) SET_REGISTER( "mtspr 980,%0", val )
+#define GET_DEAR() GET_REGISTER( "mfspr %0,981" )
+#define SET_DEAR(val) SET_REGISTER( "mtspr 981,%0", val )
+#define GET_EVPR() GET_REGISTER( "mfspr %0,982" )
+#define SET_EVPR(val) SET_REGISTER( "mtspr 982,%0", val )
+#define GET_TSR() GET_REGISTER( "mfspr %0,984" )
+#define SET_TSR(val) SET_REGISTER( "mtspr 984,%0", val )
+#define GET_TCR() GET_REGISTER( "mfspr %0,986" )
+#define SET_TCR(val) SET_REGISTER( "mtspr 986,%0", val )
+#define GET_PIT() GET_REGISTER( "mfspr %0,987" )
+#define SET_PIT(val) SET_REGISTER( "mtspr 987,%0", val )
+#define GET_SRR2() GET_REGISTER( "mfspr %0,990" )
+#define SET_SRR2(val) SET_REGISTER( "mtspr 990,%0", val )
+#define GET_SRR3() GET_REGISTER( "mfspr %0,991" )
+#define SET_SRR3(val) SET_REGISTER( "mtspr 991,%0", val )
+#define GET_DBSR() GET_REGISTER( "mfspr %0,1008" )
+#define SET_DBSR(val) SET_REGISTER( "mtspr 1008,%0", val )
+#define GET_DBCR0() GET_REGISTER( "mfspr %0,1010" )
+#define SET_DBCR0(val) SET_REGISTER( "mtspr 1010,%0", val )
+#define GET_IABR() GET_REGISTER( "mfspr %0,1010" )
+#define SET_IABR(val) SET_REGISTER( "mtspr 1010,%0", val )
+#define GET_IAC1() GET_REGISTER( "mfspr %0,1012" )
+#define SET_IAC1(val) SET_REGISTER( "mtspr 1012,%0", val )
+#define GET_IAC2() GET_REGISTER( "mfspr %0,1013" )
+#define SET_IAC2(val) SET_REGISTER( "mtspr 1013,%0", val )
+#define GET_DAC1() GET_REGISTER( "mfspr %0,1014" )
+#define SET_DAC1(val) SET_REGISTER( "mtspr 1014,%0", val )
+#define GET_DAC2() GET_REGISTER( "mfspr %0,1015" )
+#define SET_DAC2(val) SET_REGISTER( "mtspr 1015,%0", val )
+#define GET_DCCR() GET_REGISTER( "mfspr %0,1018" )
+#define SET_DCCR(val) SET_REGISTER( "mtspr 1018,%0", val )
+#define GET_ICCR() GET_REGISTER( "mfspr %0,1019" )
+#define SET_ICCR(val) SET_REGISTER( "mtspr 1019,%0", val )
+
+#endif /* _REGS_H */
+
+
+/*
+ * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are freely
+ * permitted provided that the above copyright notice and this
+ * paragraph and the following disclaimer are duplicated in all
+ * such forms.
+ *
+ * This software is provided "AS IS" and without any express or
+ * implied warranties, including, without limitation, the implied
+ * warranties of merchantability and fitness for a particular
+ * purpose.
+ */
diff -Naur u-boot-2009.03_orig/include/bedbug/tables.h u-boot-2009.03/include/bedbug/tables.h
--- u-boot-2009.03_orig/include/bedbug/tables.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/bedbug/tables.h 2009-03-31 15:00:04.733213600 -0700
@@ -1,601 +1,601 @@
-/* $Id$ */
-
-#ifndef TABLES_H
-#define TABLES_H
-
-/* This is only included by common/bedbug.c, and depends on the following
- * files to already be included
- * common.h
- * bedbug/bedbug.h
- * bedbug/ppc.h
- * bedbug/regs.h
- */
-
-struct operand operands[] = {
- /*Field Name Bits Shift Hint Position */
- /*----- ------ ----- ----- ---- ------------ */
- { O_AA, "O_AA", 1, 1, OH_SILENT }, /* 30 */
- { O_BD, "O_BD", 14, 2, OH_ADDR }, /* 16-29 */
- { O_BI, "O_BI", 5, 16, 0 }, /* 11-15 */
- { O_BO, "O_BO", 5, 21, 0 }, /* 6-10 */
- { O_crbD, "O_crbD", 5, 21, 0 }, /* 6-10 */
- { O_crbA, "O_crbA", 5, 16, 0 }, /* 11-15 */
- { O_crbB, "O_crbB", 5, 11, 0 }, /* 16-20 */
- { O_CRM, "O_CRM", 8, 12, 0 }, /* 12-19 */
- { O_d, "O_d", 15, 0, OH_OFFSET }, /* 16-31 */
- { O_frC, "O_frC", 5, 6, 0 }, /* 21-25 */
- { O_frD, "O_frD", 5, 21, 0 }, /* 6-10 */
- { O_frS, "O_frS", 5, 21, 0 }, /* 6-10 */
- { O_IMM, "O_IMM", 4, 12, 0 }, /* 16-19 */
- { O_LI, "O_LI", 24, 2, OH_ADDR }, /* 6-29 */
- { O_LK, "O_LK", 1, 0, OH_SILENT }, /* 31 */
- { O_MB, "O_MB", 5, 6, 0 }, /* 21-25 */
- { O_ME, "O_ME", 5, 1, 0 }, /* 26-30 */
- { O_NB, "O_NB", 5, 11, 0 }, /* 16-20 */
- { O_OE, "O_OE", 1, 10, OH_SILENT }, /* 21 */
- { O_rA, "O_rA", 5, 16, OH_REG }, /* 11-15 */
- { O_rB, "O_rB", 5, 11, OH_REG }, /* 16-20 */
- { O_Rc, "O_Rc", 1, 0, OH_SILENT }, /* 31 */
- { O_rD, "O_rD", 5, 21, OH_REG }, /* 6-10 */
- { O_rS, "O_rS", 5, 21, OH_REG }, /* 6-10 */
- { O_SH, "O_SH", 5, 11, 0 }, /* 16-20 */
- { O_SIMM, "O_SIMM", 16, 0, 0 }, /* 16-31 */
- { O_SR, "O_SR", 4, 16, 0 }, /* 12-15 */
- { O_TO, "O_TO", 5, 21, 0 }, /* 6-10 */
- { O_UIMM, "O_UIMM", 16, 0, 0 }, /* 16-31 */
- { O_crfD, "O_crfD", 3, 23, 0 }, /* 6- 8 */
- { O_crfS, "O_crfS", 3, 18, 0 }, /* 11-13 */
- { O_L, "O_L", 1, 21, 0 }, /* 10 */
- { O_spr, "O_spr", 10, 11, OH_SPR }, /* 11-20 */
- { O_tbr, "O_tbr", 10, 11, OH_TBR }, /* 11-20 */
- { O_cr2, "O_cr2", 0, 0, OH_LITERAL }, /* "cr2" */
-};
-
-const unsigned int n_operands = sizeof(operands) / sizeof(operands[0]);
-
-/* A note about the fields array in the opcodes structure:
- The operands are listed in the order they appear in the output.
-
- This table is arranged in numeric order of the opcode. Note that some
- opcodes have defined bits in odd places so not all forms of a command
- will be in the same place. This is done so that a binary search can be
- done to find the opcodes. Note that table D.2 in the MPC860 User's
- Manual "Instructions Sorted by Opcode" does not account for these
- bit locations */
-
-struct opcode opcodes[] = {
- { D_OPCODE(3), D_MASK, {O_TO, O_rA, O_SIMM, 0},
- 0, "twi", 0 },
- { D_OPCODE(7), D_MASK, {O_rD, O_rA, O_SIMM, 0},
- 0, "mulli", 0 },
- { D_OPCODE(8), D_MASK, {O_rD, O_rA, O_SIMM, 0},
- 0, "subfic", 0 },
- { D_OPCODE(10), D_MASK, {O_crfD, O_L, O_rA, O_UIMM, 0},
- 0, "cmpli", 0 },
- { D_OPCODE(11), D_MASK, {O_crfD, O_L, O_rA, O_SIMM, 0},
- 0, "cmpi", 0 },
- { D_OPCODE(12), D_MASK, {O_rD, O_rA, O_SIMM, 0},
- 0, "addic", 0 },
- { D_OPCODE(13), D_MASK, {O_rD, O_rA, O_SIMM, 0},
- 0, "addic.", 0 },
- { D_OPCODE(14), D_MASK, {O_rD, O_rA, O_SIMM, 0},
- 0, "addi", H_RA0_IS_0 },
- { D_OPCODE(15), D_MASK, {O_rD, O_rA, O_SIMM, 0},
- 0, "addis", H_RA0_IS_0|H_IMM_HIGH },
- { B_OPCODE(16,0,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
- handle_bc, "bc", H_RELATIVE },
- { B_OPCODE(16,0,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
- 0, "bcl", H_RELATIVE },
- { B_OPCODE(16,1,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
- 0, "bca", 0 },
- { B_OPCODE(16,1,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
- 0, "bcla", 0 },
- { SC_OPCODE(17), SC_MASK, {0},
- 0, "sc", 0 },
- { I_OPCODE(18,0,0), I_MASK, {O_LI, O_AA, O_LK, 0},
- 0, "b", H_RELATIVE },
- { I_OPCODE(18,0,1), I_MASK, {O_LI, O_AA, O_LK, 0},
- 0, "bl", H_RELATIVE },
- { I_OPCODE(18,1,0), I_MASK, {O_LI, O_AA, O_LK, 0},
- 0, "ba", 0 },
- { I_OPCODE(18,1,1), I_MASK, {O_LI, O_AA, O_LK, 0},
- 0, "bla", 0 },
- { XL_OPCODE(19,0,0), XL_MASK, {O_crfD, O_crfS},
- 0, "mcrf", 0 },
- { XL_OPCODE(19,16,0), XL_MASK, {O_BO, O_BI, O_LK, 0},
- 0, "bclr", 0 },
- { XL_OPCODE(19,16,1), XL_MASK, {O_BO, O_BI, O_LK, 0},
- 0, "bclrl", 0 },
- { XL_OPCODE(19,33,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "crnor", 0 },
- { XL_OPCODE(19,50,0), XL_MASK, {0},
- 0, "rfi", 0 },
- { XL_OPCODE(19,129,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "crandc", 0 },
- { XL_OPCODE(19,150,0), XL_MASK, {0},
- 0, "isync", 0 },
- { XL_OPCODE(19,193,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "crxor", 0 },
- { XL_OPCODE(19,225,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "crnand", 0 },
- { XL_OPCODE(19,257,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "crand", 0 },
- { XL_OPCODE(19,289,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "creqv", 0 },
- { XL_OPCODE(19,417,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "crorc", 0 },
- { XL_OPCODE(19,449,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
- 0, "cror", 0 },
- { XL_OPCODE(19,528,0), XL_MASK, {O_BO, O_BI, O_LK, 0},
- 0, "bcctr", 0 },
- { XL_OPCODE(19,528,1), XL_MASK, {O_BO, O_BI, O_LK, 0},
- 0, "bcctrl", 0 },
- { M_OPCODE(20,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
- 0, "rlwimi", 0 },
- { M_OPCODE(20,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
- 0, "rlwimi.", 0 },
- { M_OPCODE(21,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
- 0, "rlwinm", 0 },
- { M_OPCODE(21,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
- 0, "rlwinm.", 0 },
- { M_OPCODE(23,0), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0},
- 0, "rlwnm", 0 },
- { M_OPCODE(23,1), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0},
- 0, "rlwnm.", 0 },
- { D_OPCODE(24), D_MASK, {O_rA, O_rS, O_UIMM, 0},
- 0, "ori", 0 },
- { D_OPCODE(25), D_MASK, {O_rA, O_rS, O_UIMM, 0},
- 0, "oris", H_IMM_HIGH },
- { D_OPCODE(26), D_MASK, {O_rA, O_rS, O_UIMM, 0},
- 0, "xori", 0 },
- { D_OPCODE(27), D_MASK, {O_rA, O_rS, O_UIMM, 0},
- 0, "xoris", H_IMM_HIGH },
- { D_OPCODE(28), D_MASK, {O_rA, O_rS, O_UIMM, 0},
- 0, "andi.", 0 },
- { D_OPCODE(29), D_MASK, {O_rA, O_rS, O_UIMM, 0},
- 0, "andis.", H_IMM_HIGH },
- { X_OPCODE(31,0,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0},
- 0, "cmp", 0 },
- { X_OPCODE(31,4,0), X_MASK, {O_TO, O_rA, O_rB, 0},
- 0, "tw", 0 },
- { XO_OPCODE(31,8,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfc", 0 },
- { XO_OPCODE(31,8,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfc.", 0 },
- { XO_OPCODE(31,10,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addc", 0 },
- { XO_OPCODE(31,10,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addc.", 0 },
- { XO_OPCODE(31,11,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
- 0, "mulhwu", 0 },
- { XO_OPCODE(31,11,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
- 0, "mulhwu.", 0 },
- { X_OPCODE(31,19,0), X_MASK, {O_rD, 0},
- 0, "mfcr", 0 },
- { X_OPCODE(31,20,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lwarx", H_RA0_IS_0 },
- { X_OPCODE(31,23,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lwzx", H_RA0_IS_0 },
- { X_OPCODE(31,24,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "slw", 0 },
- { X_OPCODE(31,24,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "slw.", 0 },
- { X_OPCODE(31,26,0), X_MASK, {O_rA, O_rS, O_Rc, 0 },
- 0, "cntlzw", 0 },
- { X_OPCODE(31,26,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
- 0, "cntlzw.", 0 },
- { X_OPCODE(31,28,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "and", 0 },
- { X_OPCODE(31,28,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "and.", 0 },
- { X_OPCODE(31,32,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0},
- 0, "cmpl", 0 },
- { XO_OPCODE(31,40,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subf", 0 },
- { XO_OPCODE(31,40,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subf.", 0 },
- { X_OPCODE(31,54,0), X_MASK, {O_rA, O_rB, 0},
- 0, "dcbst", H_RA0_IS_0 },
- { X_OPCODE(31,55,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lwzux", 0 },
- { X_OPCODE(31,60,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "andc", 0 },
- { X_OPCODE(31,60,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "andc.", 0 },
- { XO_OPCODE(31,75,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
- 0, "mulhw", 0 },
- { XO_OPCODE(31,75,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
- 0, "mulhw.", 0 },
- { X_OPCODE(31,83,0), X_MASK, {O_rD, 0},
- 0, "mfmsr", 0 },
- { X_OPCODE(31,86,0), X_MASK, {O_rA, O_rB, 0},
- 0, "dcbf", H_RA0_IS_0 },
- { X_OPCODE(31,87,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lbzx", H_RA0_IS_0 },
- { XO_OPCODE(31,104,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "neg", 0 },
- { XO_OPCODE(31,104,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "neg.", 0 },
- { X_OPCODE(31,119,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lbzux", 0 },
- { X_OPCODE(31,124,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "nor", 0 },
- { X_OPCODE(31,124,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "nor.", 0 },
- { XO_OPCODE(31,136,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfe", 0 },
- { XO_OPCODE(31,136,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfe.", 0 },
- { XO_OPCODE(31,138,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "adde", 0 },
- { XO_OPCODE(31,138,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "adde.", 0 },
- { XFX_OPCODE(31,144,0), XFX_MASK, {O_CRM, O_rS, 0},
- 0, "mtcrf", 0 },
- { X_OPCODE(31,146,0), X_MASK, {O_rS, 0},
- 0, "mtmsr", 0 },
- { X_OPCODE(31,150,1), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "stwcx.", 0 },
- { X_OPCODE(31,151,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "stwx", 0 },
- { X_OPCODE(31,183,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "stwux", 0 },
- { XO_OPCODE(31,200,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfze", 0 },
- { XO_OPCODE(31,200,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfze.", 0 },
- { XO_OPCODE(31,202,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addze", 0 },
- { XO_OPCODE(31,202,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addze.", 0 },
- { X_OPCODE(31,210,0), X_MASK, {O_SR, O_rS, 0},
- 0, "mtsr", 0 },
- { X_OPCODE(31,215,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "stbx", H_RA0_IS_0 },
- { XO_OPCODE(31,232,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfme", 0 },
- { XO_OPCODE(31,232,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfme.", 0 },
- { XO_OPCODE(31,234,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addme", 0 },
- { XO_OPCODE(31,234,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addme.", 0 },
- { XO_OPCODE(31,235,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "mullw", 0 },
- { XO_OPCODE(31,235,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "mullw.", 0 },
- { X_OPCODE(31,242,0), X_MASK, {O_rS, O_rB, 0},
- 0, "mtsrin", 0 },
- { X_OPCODE(31,246,0), X_MASK, {O_rA, O_rB, 0},
- 0, "dcbtst", H_RA0_IS_0 },
- { X_OPCODE(31,247,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "stbux", 0 },
- { XO_OPCODE(31,266,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "add", 0 },
- { XO_OPCODE(31,266,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "add.", 0 },
- { X_OPCODE(31,278,0), X_MASK, {O_rA, O_rB, 0},
- 0, "dcbt", H_RA0_IS_0 },
- { X_OPCODE(31,279,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lhzx", H_RA0_IS_0 },
- { X_OPCODE(31,284,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "eqv", 0 },
- { X_OPCODE(31,284,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "eqv.", 0 },
- { X_OPCODE(31,306,0), X_MASK, {O_rB, 0},
- 0, "tlbie", 0 },
- { X_OPCODE(31,310,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "eciwx", H_RA0_IS_0 },
- { X_OPCODE(31,311,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lhzux", 0 },
- { X_OPCODE(31,316,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "xor", 0 },
- { X_OPCODE(31,316,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "xor.", 0 },
- { XFX_OPCODE(31,339,0), XFX_MASK, {O_rD, O_spr, 0},
- 0, "mfspr", 0 },
- { X_OPCODE(31,343,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lhax", H_RA0_IS_0 },
- { X_OPCODE(31,370,0), X_MASK, {0},
- 0, "tlbia", 0 },
- { XFX_OPCODE(31,371,0), XFX_MASK, {O_rD, O_tbr, 0},
- 0, "mftb", 0 },
- { X_OPCODE(31,375,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lhaux", 0 },
- { X_OPCODE(31,407,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "sthx", H_RA0_IS_0 },
- { X_OPCODE(31,412,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "orc", 0 },
- { X_OPCODE(31,412,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "orc.", 0 },
- { X_OPCODE(31,438,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "ecowx", H_RA0_IS_0 },
- { X_OPCODE(31,439,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "sthux", 0 },
- { X_OPCODE(31,444,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "or", 0 },
- { X_OPCODE(31,444,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "or.", 0 },
- { XO_OPCODE(31,459,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divwu", 0 },
- { XO_OPCODE(31,459,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divwu.", 0 },
- { XFX_OPCODE(31,467,0), XFX_MASK, {O_spr, O_rS, 0},
- 0, "mtspr", 0 },
- { X_OPCODE(31,470,0), X_MASK, {O_rA, O_rB, 0},
- 0, "dcbi", H_RA0_IS_0 },
- { X_OPCODE(31,476,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "nand", 0 },
- { X_OPCODE(31,476,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc,0},
- 0, "nand.", 0 },
- { XO_OPCODE(31,491,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divw", 0 },
- { XO_OPCODE(31,491,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divw.", 0 },
- { X_OPCODE(31,512,0), X_MASK, {O_crfD, 0},
- 0, "mcrxr", 0 },
- { XO_OPCODE(31,8,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfco", 0 },
- { XO_OPCODE(31,8,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfco.", 0 },
- { XO_OPCODE(31,10,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addco", 0 },
- { XO_OPCODE(31,10,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addco.", 0 },
- { X_OPCODE(31,533,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lswx", H_RA0_IS_0 },
- { X_OPCODE(31,534,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lwbrx", H_RA0_IS_0 },
- { X_OPCODE(31,536,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "srw", 0 },
- { X_OPCODE(31,536,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "srw.", 0 },
- { XO_OPCODE(31,40,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfo", 0 },
- { XO_OPCODE(31,40,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfo.", 0 },
- { X_OPCODE(31,566,0), X_MASK, {0},
- 0, "tlbsync", 0 },
- { X_OPCODE(31,595,0), X_MASK, {O_rD, O_SR, 0},
- 0, "mfsr", 0 },
- { X_OPCODE(31,597,0), X_MASK, {O_rD, O_rA, O_NB, 0},
- 0, "lswi", H_RA0_IS_0 },
- { X_OPCODE(31,598,0), X_MASK, {0},
- 0, "sync", 0 },
- { XO_OPCODE(31,104,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "nego", 0 },
- { XO_OPCODE(31,104,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "nego.", 0 },
- { XO_OPCODE(31,136,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfeo", 0 },
- { XO_OPCODE(31,136,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "subfeo.", 0 },
- { XO_OPCODE(31,138,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addeo", 0 },
- { XO_OPCODE(31,138,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addeo.", 0 },
- { X_OPCODE(31,659,0), X_MASK, {O_rD, O_rB, 0},
- 0, "mfsrin", 0 },
- { X_OPCODE(31,661,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "stswx", H_RA0_IS_0 },
- { X_OPCODE(31,662,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "stwbrx", H_RA0_IS_0 },
- { XO_OPCODE(31,200,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfzeo", 0 },
- { XO_OPCODE(31,200,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfzeo.", 0 },
- { XO_OPCODE(31,202,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addzeo", 0 },
- { XO_OPCODE(31,202,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addzeo.", 0 },
- { X_OPCODE(31,725,0), X_MASK, {O_rS, O_rA, O_NB, 0},
- 0, "stswi", H_RA0_IS_0 },
- { XO_OPCODE(31,232,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfmeo", 0 },
- { XO_OPCODE(31,232,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "subfmeo.", 0 },
- { XO_OPCODE(31,234,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addmeo", 0 },
- { XO_OPCODE(31,234,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
- 0, "addmeo.", 0 },
- { XO_OPCODE(31,235,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "mullwo", 0 },
- { XO_OPCODE(31,235,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "mullwo.", 0 },
- { XO_OPCODE(31,266,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addo", 0 },
- { XO_OPCODE(31,266,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "addo.", 0 },
- { X_OPCODE(31,790,0), X_MASK, {O_rD, O_rA, O_rB, 0},
- 0, "lhbrx", H_RA0_IS_0 },
- { X_OPCODE(31,792,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "sraw", 0 },
- { X_OPCODE(31,792,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
- 0, "sraw.", 0 },
- { X_OPCODE(31,824,0), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0},
- 0, "srawi", 0 },
- { X_OPCODE(31,824,1), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0},
- 0, "srawi.", 0 },
- { X_OPCODE(31,854,0), X_MASK, {0},
- 0, "eieio", 0 },
- { X_OPCODE(31,918,0), X_MASK, {O_rS, O_rA, O_rB, 0},
- 0, "sthbrx", H_RA0_IS_0 },
- { X_OPCODE(31,922,0), X_MASK, {O_rA, O_rS, O_Rc, 0},
- 0, "extsh", 0 },
- { X_OPCODE(31,922,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
- 0, "extsh.", 0 },
- { X_OPCODE(31,954,0), X_MASK, {O_rA, O_rS, O_Rc, 0},
- 0, "extsb", 0 },
- { X_OPCODE(31,954,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
- 0, "extsb.", 0 },
- { XO_OPCODE(31,459,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divwuo", 0 },
- { XO_OPCODE(31,459,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divwuo.", 0 },
- { X_OPCODE(31,978,0), X_MASK, {O_rB, 0},
- 0, "tlbld", 0 },
- { X_OPCODE(31,982,0), X_MASK, {O_rA, O_rB, 0},
- 0, "icbi", H_RA0_IS_0 },
- { XO_OPCODE(31,491,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divwo", 0 },
- { XO_OPCODE(31,491,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
- 0, "divwo.", 0 },
- { X_OPCODE(31,1010,0), X_MASK, {O_rB, 0},
- 0, "tlbli", 0 },
- { X_OPCODE(31,1014,0), X_MASK, {O_rA, O_rB, 0},
- 0, "dcbz", H_RA0_IS_0 },
- { D_OPCODE(32), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lwz", H_RA0_IS_0 },
- { D_OPCODE(33), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lwzu", 0 },
- { D_OPCODE(34), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lbz", H_RA0_IS_0 },
- { D_OPCODE(35), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lbzu", 0 },
- { D_OPCODE(36), D_MASK, {O_rS, O_d, O_rA, 0},
- 0, "stw", H_RA0_IS_0 },
- { D_OPCODE(37), D_MASK, {O_rS, O_d, O_rA, 0},
- 0, "stwu", 0 },
- { D_OPCODE(38), D_MASK, {O_rS, O_d, O_rA, 0},
- 0, "stb", H_RA0_IS_0 },
- { D_OPCODE(39), D_MASK, {O_rS, O_d, O_rA, 0},
- 0, "stbu", 0 },
- { D_OPCODE(40), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lhz", H_RA0_IS_0 },
- { D_OPCODE(41), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lhzu", 0 },
- { D_OPCODE(42), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lha", H_RA0_IS_0 },
- { D_OPCODE(43), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lhau", 0 },
- { D_OPCODE(44), D_MASK, {O_rS, O_d, O_rA, 0},
- 0, "sth", H_RA0_IS_0 },
- { D_OPCODE(45), D_MASK, {O_rS, O_d, O_rA, 0},
- 0, "sthu", 0 },
- { D_OPCODE(46), D_MASK, {O_rD, O_d, O_rA, 0},
- 0, "lmw", H_RA0_IS_0 },
- { D_OPCODE(47), D_MASK, {O_rS, O_d, O_rA, 0},
- 0, "stmw", H_RA0_IS_0 },
-};
-
-const unsigned int n_opcodes = sizeof(opcodes) / sizeof(opcodes[0]);
-
-struct spr_info spr_map[] = {
- { SPR_XER, "XER" },
- { SPR_LR, "LR" },
- { SPR_CTR, "CTR" },
- { SPR_DSISR, "DSISR" },
- { SPR_DAR, "DAR" },
- { SPR_DEC, "DEC" },
- { SPR_SRR0, "SRR0" },
- { SPR_SRR1, "SRR1" },
- { SPR_EIE, "EIE" },
- { SPR_EID, "EID" },
- { SPR_CMPA, "CMPA" },
- { SPR_CMPB, "CMPB" },
- { SPR_CMPC, "CMPC" },
- { SPR_CMPD, "CMPD" },
- { SPR_ICR, "ICR" },
- { SPR_DER, "DER" },
- { SPR_COUNTA, "COUNTA" },
- { SPR_COUNTB, "COUNTB" },
- { SPR_CMPE, "CMPE" },
- { SPR_CMPF, "CMPF" },
- { SPR_CMPG, "CMPG" },
- { SPR_CMPH, "CMPH" },
- { SPR_LCTRL1, "LCTRL1" },
- { SPR_LCTRL2, "LCTRL2" },
- { SPR_ICTRL, "ICTRL" },
- { SPR_BAR, "BAR" },
- { SPR_USPRG0, "USPRG0" },
- { SPR_SPRG4_RO, "SPRG4_RO" },
- { SPR_SPRG5_RO, "SPRG5_RO" },
- { SPR_SPRG6_RO, "SPRG6_RO" },
- { SPR_SPRG7_RO, "SPRG7_RO" },
- { SPR_SPRG0, "SPRG0" },
- { SPR_SPRG1, "SPRG1" },
- { SPR_SPRG2, "SPRG2" },
- { SPR_SPRG3, "SPRG3" },
- { SPR_SPRG4, "SPRG4" },
- { SPR_SPRG5, "SPRG5" },
- { SPR_SPRG6, "SPRG6" },
- { SPR_SPRG7, "SPRG7" },
- { SPR_EAR, "EAR" },
- { SPR_TBL, "TBL" },
- { SPR_TBU, "TBU" },
- { SPR_IC_CST, "IC_CST" },
- { SPR_IC_ADR, "IC_ADR" },
- { SPR_IC_DAT, "IC_DAT" },
- { SPR_DC_CST, "DC_CST" },
- { SPR_DC_ADR, "DC_ADR" },
- { SPR_DC_DAT, "DC_DAT" },
- { SPR_DPDR, "DPDR" },
- { SPR_IMMR, "IMMR" },
- { SPR_MI_CTR, "MI_CTR" },
- { SPR_MI_AP, "MI_AP" },
- { SPR_MI_EPN, "MI_EPN" },
- { SPR_MI_TWC, "MI_TWC" },
- { SPR_MI_RPN, "MI_RPN" },
- { SPR_MD_CTR, "MD_CTR" },
- { SPR_M_CASID, "M_CASID" },
- { SPR_MD_AP, "MD_AP" },
- { SPR_MD_EPN, "MD_EPN" },
- { SPR_M_TWB, "M_TWB" },
- { SPR_MD_TWC, "MD_TWC" },
- { SPR_MD_RPN, "MD_RPN" },
- { SPR_M_TW, "M_TW" },
- { SPR_MI_DBCAM, "MI_DBCAM" },
- { SPR_MI_DBRAM0, "MI_DBRAM0" },
- { SPR_MI_DBRAM1, "MI_DBRAM1" },
- { SPR_MD_DBCAM, "MD_DBCAM" },
- { SPR_MD_DBRAM0, "MD_DBRAM0" },
- { SPR_MD_DBRAM1, "MD_DBRAM1" },
- { SPR_ZPR, "ZPR" },
- { SPR_PID, "PID" },
- { SPR_CCR0, "CCR0" },
- { SPR_IAC3, "IAC3" },
- { SPR_IAC4, "IAC4" },
- { SPR_DVC1, "DVC1" },
- { SPR_DVC2, "DVC2" },
- { SPR_SGR, "SGR" },
- { SPR_DCWR, "DCWR" },
- { SPR_SLER, "SLER" },
- { SPR_SU0R, "SU0R" },
- { SPR_DBCR1, "DBCR1" },
- { SPR_ICDBDR, "ICDBDR" },
- { SPR_ESR, "ESR" },
- { SPR_DEAR, "DEAR" },
- { SPR_EVPR, "EVPR" },
- { SPR_TSR, "TSR" },
- { SPR_TCR, "TCR" },
- { SPR_PIT, "PIT" },
- { SPR_SRR2, "SRR2" },
- { SPR_SRR3, "SRR3" },
- { SPR_DBSR, "DBSR" },
- { SPR_DBCR0, "DBCR0" },
- { SPR_IAC1, "IAC1" },
- { SPR_IAC2, "IAC2" },
- { SPR_DAC1, "DAC1" },
- { SPR_DAC2, "DAC2" },
- { SPR_DCCR, "DCCR" },
- { SPR_ICCR, "ICCR" },
-};
-
-const unsigned int n_sprs = sizeof(spr_map) / sizeof(spr_map[0]);
-
-#endif
-
-/*
- * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are freely
- * permitted provided that the above copyright notice and this
- * paragraph and the following disclaimer are duplicated in all
- * such forms.
- *
- * This software is provided "AS IS" and without any express or
- * implied warranties, including, without limitation, the implied
- * warranties of merchantability and fitness for a particular
- * purpose.
- */
+/* $Id: tables.h,v 1.1.1.1 2009/03/25 22:22:21 kenagy Exp $ */
+
+#ifndef TABLES_H
+#define TABLES_H
+
+/* This is only included by common/bedbug.c, and depends on the following
+ * files to already be included
+ * common.h
+ * bedbug/bedbug.h
+ * bedbug/ppc.h
+ * bedbug/regs.h
+ */
+
+struct operand operands[] = {
+ /*Field Name Bits Shift Hint Position */
+ /*----- ------ ----- ----- ---- ------------ */
+ { O_AA, "O_AA", 1, 1, OH_SILENT }, /* 30 */
+ { O_BD, "O_BD", 14, 2, OH_ADDR }, /* 16-29 */
+ { O_BI, "O_BI", 5, 16, 0 }, /* 11-15 */
+ { O_BO, "O_BO", 5, 21, 0 }, /* 6-10 */
+ { O_crbD, "O_crbD", 5, 21, 0 }, /* 6-10 */
+ { O_crbA, "O_crbA", 5, 16, 0 }, /* 11-15 */
+ { O_crbB, "O_crbB", 5, 11, 0 }, /* 16-20 */
+ { O_CRM, "O_CRM", 8, 12, 0 }, /* 12-19 */
+ { O_d, "O_d", 15, 0, OH_OFFSET }, /* 16-31 */
+ { O_frC, "O_frC", 5, 6, 0 }, /* 21-25 */
+ { O_frD, "O_frD", 5, 21, 0 }, /* 6-10 */
+ { O_frS, "O_frS", 5, 21, 0 }, /* 6-10 */
+ { O_IMM, "O_IMM", 4, 12, 0 }, /* 16-19 */
+ { O_LI, "O_LI", 24, 2, OH_ADDR }, /* 6-29 */
+ { O_LK, "O_LK", 1, 0, OH_SILENT }, /* 31 */
+ { O_MB, "O_MB", 5, 6, 0 }, /* 21-25 */
+ { O_ME, "O_ME", 5, 1, 0 }, /* 26-30 */
+ { O_NB, "O_NB", 5, 11, 0 }, /* 16-20 */
+ { O_OE, "O_OE", 1, 10, OH_SILENT }, /* 21 */
+ { O_rA, "O_rA", 5, 16, OH_REG }, /* 11-15 */
+ { O_rB, "O_rB", 5, 11, OH_REG }, /* 16-20 */
+ { O_Rc, "O_Rc", 1, 0, OH_SILENT }, /* 31 */
+ { O_rD, "O_rD", 5, 21, OH_REG }, /* 6-10 */
+ { O_rS, "O_rS", 5, 21, OH_REG }, /* 6-10 */
+ { O_SH, "O_SH", 5, 11, 0 }, /* 16-20 */
+ { O_SIMM, "O_SIMM", 16, 0, 0 }, /* 16-31 */
+ { O_SR, "O_SR", 4, 16, 0 }, /* 12-15 */
+ { O_TO, "O_TO", 5, 21, 0 }, /* 6-10 */
+ { O_UIMM, "O_UIMM", 16, 0, 0 }, /* 16-31 */
+ { O_crfD, "O_crfD", 3, 23, 0 }, /* 6- 8 */
+ { O_crfS, "O_crfS", 3, 18, 0 }, /* 11-13 */
+ { O_L, "O_L", 1, 21, 0 }, /* 10 */
+ { O_spr, "O_spr", 10, 11, OH_SPR }, /* 11-20 */
+ { O_tbr, "O_tbr", 10, 11, OH_TBR }, /* 11-20 */
+ { O_cr2, "O_cr2", 0, 0, OH_LITERAL }, /* "cr2" */
+};
+
+const unsigned int n_operands = sizeof(operands) / sizeof(operands[0]);
+
+/* A note about the fields array in the opcodes structure:
+ The operands are listed in the order they appear in the output.
+
+ This table is arranged in numeric order of the opcode. Note that some
+ opcodes have defined bits in odd places so not all forms of a command
+ will be in the same place. This is done so that a binary search can be
+ done to find the opcodes. Note that table D.2 in the MPC860 User's
+ Manual "Instructions Sorted by Opcode" does not account for these
+ bit locations */
+
+struct opcode opcodes[] = {
+ { D_OPCODE(3), D_MASK, {O_TO, O_rA, O_SIMM, 0},
+ 0, "twi", 0 },
+ { D_OPCODE(7), D_MASK, {O_rD, O_rA, O_SIMM, 0},
+ 0, "mulli", 0 },
+ { D_OPCODE(8), D_MASK, {O_rD, O_rA, O_SIMM, 0},
+ 0, "subfic", 0 },
+ { D_OPCODE(10), D_MASK, {O_crfD, O_L, O_rA, O_UIMM, 0},
+ 0, "cmpli", 0 },
+ { D_OPCODE(11), D_MASK, {O_crfD, O_L, O_rA, O_SIMM, 0},
+ 0, "cmpi", 0 },
+ { D_OPCODE(12), D_MASK, {O_rD, O_rA, O_SIMM, 0},
+ 0, "addic", 0 },
+ { D_OPCODE(13), D_MASK, {O_rD, O_rA, O_SIMM, 0},
+ 0, "addic.", 0 },
+ { D_OPCODE(14), D_MASK, {O_rD, O_rA, O_SIMM, 0},
+ 0, "addi", H_RA0_IS_0 },
+ { D_OPCODE(15), D_MASK, {O_rD, O_rA, O_SIMM, 0},
+ 0, "addis", H_RA0_IS_0|H_IMM_HIGH },
+ { B_OPCODE(16,0,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
+ handle_bc, "bc", H_RELATIVE },
+ { B_OPCODE(16,0,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
+ 0, "bcl", H_RELATIVE },
+ { B_OPCODE(16,1,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
+ 0, "bca", 0 },
+ { B_OPCODE(16,1,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
+ 0, "bcla", 0 },
+ { SC_OPCODE(17), SC_MASK, {0},
+ 0, "sc", 0 },
+ { I_OPCODE(18,0,0), I_MASK, {O_LI, O_AA, O_LK, 0},
+ 0, "b", H_RELATIVE },
+ { I_OPCODE(18,0,1), I_MASK, {O_LI, O_AA, O_LK, 0},
+ 0, "bl", H_RELATIVE },
+ { I_OPCODE(18,1,0), I_MASK, {O_LI, O_AA, O_LK, 0},
+ 0, "ba", 0 },
+ { I_OPCODE(18,1,1), I_MASK, {O_LI, O_AA, O_LK, 0},
+ 0, "bla", 0 },
+ { XL_OPCODE(19,0,0), XL_MASK, {O_crfD, O_crfS},
+ 0, "mcrf", 0 },
+ { XL_OPCODE(19,16,0), XL_MASK, {O_BO, O_BI, O_LK, 0},
+ 0, "bclr", 0 },
+ { XL_OPCODE(19,16,1), XL_MASK, {O_BO, O_BI, O_LK, 0},
+ 0, "bclrl", 0 },
+ { XL_OPCODE(19,33,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "crnor", 0 },
+ { XL_OPCODE(19,50,0), XL_MASK, {0},
+ 0, "rfi", 0 },
+ { XL_OPCODE(19,129,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "crandc", 0 },
+ { XL_OPCODE(19,150,0), XL_MASK, {0},
+ 0, "isync", 0 },
+ { XL_OPCODE(19,193,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "crxor", 0 },
+ { XL_OPCODE(19,225,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "crnand", 0 },
+ { XL_OPCODE(19,257,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "crand", 0 },
+ { XL_OPCODE(19,289,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "creqv", 0 },
+ { XL_OPCODE(19,417,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "crorc", 0 },
+ { XL_OPCODE(19,449,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
+ 0, "cror", 0 },
+ { XL_OPCODE(19,528,0), XL_MASK, {O_BO, O_BI, O_LK, 0},
+ 0, "bcctr", 0 },
+ { XL_OPCODE(19,528,1), XL_MASK, {O_BO, O_BI, O_LK, 0},
+ 0, "bcctrl", 0 },
+ { M_OPCODE(20,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
+ 0, "rlwimi", 0 },
+ { M_OPCODE(20,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
+ 0, "rlwimi.", 0 },
+ { M_OPCODE(21,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
+ 0, "rlwinm", 0 },
+ { M_OPCODE(21,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
+ 0, "rlwinm.", 0 },
+ { M_OPCODE(23,0), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0},
+ 0, "rlwnm", 0 },
+ { M_OPCODE(23,1), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0},
+ 0, "rlwnm.", 0 },
+ { D_OPCODE(24), D_MASK, {O_rA, O_rS, O_UIMM, 0},
+ 0, "ori", 0 },
+ { D_OPCODE(25), D_MASK, {O_rA, O_rS, O_UIMM, 0},
+ 0, "oris", H_IMM_HIGH },
+ { D_OPCODE(26), D_MASK, {O_rA, O_rS, O_UIMM, 0},
+ 0, "xori", 0 },
+ { D_OPCODE(27), D_MASK, {O_rA, O_rS, O_UIMM, 0},
+ 0, "xoris", H_IMM_HIGH },
+ { D_OPCODE(28), D_MASK, {O_rA, O_rS, O_UIMM, 0},
+ 0, "andi.", 0 },
+ { D_OPCODE(29), D_MASK, {O_rA, O_rS, O_UIMM, 0},
+ 0, "andis.", H_IMM_HIGH },
+ { X_OPCODE(31,0,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0},
+ 0, "cmp", 0 },
+ { X_OPCODE(31,4,0), X_MASK, {O_TO, O_rA, O_rB, 0},
+ 0, "tw", 0 },
+ { XO_OPCODE(31,8,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfc", 0 },
+ { XO_OPCODE(31,8,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfc.", 0 },
+ { XO_OPCODE(31,10,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addc", 0 },
+ { XO_OPCODE(31,10,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addc.", 0 },
+ { XO_OPCODE(31,11,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
+ 0, "mulhwu", 0 },
+ { XO_OPCODE(31,11,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
+ 0, "mulhwu.", 0 },
+ { X_OPCODE(31,19,0), X_MASK, {O_rD, 0},
+ 0, "mfcr", 0 },
+ { X_OPCODE(31,20,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lwarx", H_RA0_IS_0 },
+ { X_OPCODE(31,23,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lwzx", H_RA0_IS_0 },
+ { X_OPCODE(31,24,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "slw", 0 },
+ { X_OPCODE(31,24,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "slw.", 0 },
+ { X_OPCODE(31,26,0), X_MASK, {O_rA, O_rS, O_Rc, 0 },
+ 0, "cntlzw", 0 },
+ { X_OPCODE(31,26,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
+ 0, "cntlzw.", 0 },
+ { X_OPCODE(31,28,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "and", 0 },
+ { X_OPCODE(31,28,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "and.", 0 },
+ { X_OPCODE(31,32,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0},
+ 0, "cmpl", 0 },
+ { XO_OPCODE(31,40,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subf", 0 },
+ { XO_OPCODE(31,40,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subf.", 0 },
+ { X_OPCODE(31,54,0), X_MASK, {O_rA, O_rB, 0},
+ 0, "dcbst", H_RA0_IS_0 },
+ { X_OPCODE(31,55,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lwzux", 0 },
+ { X_OPCODE(31,60,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "andc", 0 },
+ { X_OPCODE(31,60,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "andc.", 0 },
+ { XO_OPCODE(31,75,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
+ 0, "mulhw", 0 },
+ { XO_OPCODE(31,75,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
+ 0, "mulhw.", 0 },
+ { X_OPCODE(31,83,0), X_MASK, {O_rD, 0},
+ 0, "mfmsr", 0 },
+ { X_OPCODE(31,86,0), X_MASK, {O_rA, O_rB, 0},
+ 0, "dcbf", H_RA0_IS_0 },
+ { X_OPCODE(31,87,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lbzx", H_RA0_IS_0 },
+ { XO_OPCODE(31,104,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "neg", 0 },
+ { XO_OPCODE(31,104,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "neg.", 0 },
+ { X_OPCODE(31,119,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lbzux", 0 },
+ { X_OPCODE(31,124,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "nor", 0 },
+ { X_OPCODE(31,124,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "nor.", 0 },
+ { XO_OPCODE(31,136,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfe", 0 },
+ { XO_OPCODE(31,136,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfe.", 0 },
+ { XO_OPCODE(31,138,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "adde", 0 },
+ { XO_OPCODE(31,138,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "adde.", 0 },
+ { XFX_OPCODE(31,144,0), XFX_MASK, {O_CRM, O_rS, 0},
+ 0, "mtcrf", 0 },
+ { X_OPCODE(31,146,0), X_MASK, {O_rS, 0},
+ 0, "mtmsr", 0 },
+ { X_OPCODE(31,150,1), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "stwcx.", 0 },
+ { X_OPCODE(31,151,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "stwx", 0 },
+ { X_OPCODE(31,183,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "stwux", 0 },
+ { XO_OPCODE(31,200,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfze", 0 },
+ { XO_OPCODE(31,200,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfze.", 0 },
+ { XO_OPCODE(31,202,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addze", 0 },
+ { XO_OPCODE(31,202,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addze.", 0 },
+ { X_OPCODE(31,210,0), X_MASK, {O_SR, O_rS, 0},
+ 0, "mtsr", 0 },
+ { X_OPCODE(31,215,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "stbx", H_RA0_IS_0 },
+ { XO_OPCODE(31,232,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfme", 0 },
+ { XO_OPCODE(31,232,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfme.", 0 },
+ { XO_OPCODE(31,234,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addme", 0 },
+ { XO_OPCODE(31,234,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addme.", 0 },
+ { XO_OPCODE(31,235,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "mullw", 0 },
+ { XO_OPCODE(31,235,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "mullw.", 0 },
+ { X_OPCODE(31,242,0), X_MASK, {O_rS, O_rB, 0},
+ 0, "mtsrin", 0 },
+ { X_OPCODE(31,246,0), X_MASK, {O_rA, O_rB, 0},
+ 0, "dcbtst", H_RA0_IS_0 },
+ { X_OPCODE(31,247,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "stbux", 0 },
+ { XO_OPCODE(31,266,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "add", 0 },
+ { XO_OPCODE(31,266,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "add.", 0 },
+ { X_OPCODE(31,278,0), X_MASK, {O_rA, O_rB, 0},
+ 0, "dcbt", H_RA0_IS_0 },
+ { X_OPCODE(31,279,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lhzx", H_RA0_IS_0 },
+ { X_OPCODE(31,284,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "eqv", 0 },
+ { X_OPCODE(31,284,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "eqv.", 0 },
+ { X_OPCODE(31,306,0), X_MASK, {O_rB, 0},
+ 0, "tlbie", 0 },
+ { X_OPCODE(31,310,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "eciwx", H_RA0_IS_0 },
+ { X_OPCODE(31,311,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lhzux", 0 },
+ { X_OPCODE(31,316,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "xor", 0 },
+ { X_OPCODE(31,316,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "xor.", 0 },
+ { XFX_OPCODE(31,339,0), XFX_MASK, {O_rD, O_spr, 0},
+ 0, "mfspr", 0 },
+ { X_OPCODE(31,343,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lhax", H_RA0_IS_0 },
+ { X_OPCODE(31,370,0), X_MASK, {0},
+ 0, "tlbia", 0 },
+ { XFX_OPCODE(31,371,0), XFX_MASK, {O_rD, O_tbr, 0},
+ 0, "mftb", 0 },
+ { X_OPCODE(31,375,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lhaux", 0 },
+ { X_OPCODE(31,407,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "sthx", H_RA0_IS_0 },
+ { X_OPCODE(31,412,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "orc", 0 },
+ { X_OPCODE(31,412,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "orc.", 0 },
+ { X_OPCODE(31,438,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "ecowx", H_RA0_IS_0 },
+ { X_OPCODE(31,439,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "sthux", 0 },
+ { X_OPCODE(31,444,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "or", 0 },
+ { X_OPCODE(31,444,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "or.", 0 },
+ { XO_OPCODE(31,459,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divwu", 0 },
+ { XO_OPCODE(31,459,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divwu.", 0 },
+ { XFX_OPCODE(31,467,0), XFX_MASK, {O_spr, O_rS, 0},
+ 0, "mtspr", 0 },
+ { X_OPCODE(31,470,0), X_MASK, {O_rA, O_rB, 0},
+ 0, "dcbi", H_RA0_IS_0 },
+ { X_OPCODE(31,476,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "nand", 0 },
+ { X_OPCODE(31,476,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc,0},
+ 0, "nand.", 0 },
+ { XO_OPCODE(31,491,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divw", 0 },
+ { XO_OPCODE(31,491,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divw.", 0 },
+ { X_OPCODE(31,512,0), X_MASK, {O_crfD, 0},
+ 0, "mcrxr", 0 },
+ { XO_OPCODE(31,8,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfco", 0 },
+ { XO_OPCODE(31,8,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfco.", 0 },
+ { XO_OPCODE(31,10,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addco", 0 },
+ { XO_OPCODE(31,10,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addco.", 0 },
+ { X_OPCODE(31,533,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lswx", H_RA0_IS_0 },
+ { X_OPCODE(31,534,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lwbrx", H_RA0_IS_0 },
+ { X_OPCODE(31,536,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "srw", 0 },
+ { X_OPCODE(31,536,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "srw.", 0 },
+ { XO_OPCODE(31,40,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfo", 0 },
+ { XO_OPCODE(31,40,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfo.", 0 },
+ { X_OPCODE(31,566,0), X_MASK, {0},
+ 0, "tlbsync", 0 },
+ { X_OPCODE(31,595,0), X_MASK, {O_rD, O_SR, 0},
+ 0, "mfsr", 0 },
+ { X_OPCODE(31,597,0), X_MASK, {O_rD, O_rA, O_NB, 0},
+ 0, "lswi", H_RA0_IS_0 },
+ { X_OPCODE(31,598,0), X_MASK, {0},
+ 0, "sync", 0 },
+ { XO_OPCODE(31,104,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "nego", 0 },
+ { XO_OPCODE(31,104,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "nego.", 0 },
+ { XO_OPCODE(31,136,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfeo", 0 },
+ { XO_OPCODE(31,136,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "subfeo.", 0 },
+ { XO_OPCODE(31,138,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addeo", 0 },
+ { XO_OPCODE(31,138,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addeo.", 0 },
+ { X_OPCODE(31,659,0), X_MASK, {O_rD, O_rB, 0},
+ 0, "mfsrin", 0 },
+ { X_OPCODE(31,661,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "stswx", H_RA0_IS_0 },
+ { X_OPCODE(31,662,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "stwbrx", H_RA0_IS_0 },
+ { XO_OPCODE(31,200,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfzeo", 0 },
+ { XO_OPCODE(31,200,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfzeo.", 0 },
+ { XO_OPCODE(31,202,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addzeo", 0 },
+ { XO_OPCODE(31,202,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addzeo.", 0 },
+ { X_OPCODE(31,725,0), X_MASK, {O_rS, O_rA, O_NB, 0},
+ 0, "stswi", H_RA0_IS_0 },
+ { XO_OPCODE(31,232,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfmeo", 0 },
+ { XO_OPCODE(31,232,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "subfmeo.", 0 },
+ { XO_OPCODE(31,234,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addmeo", 0 },
+ { XO_OPCODE(31,234,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
+ 0, "addmeo.", 0 },
+ { XO_OPCODE(31,235,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "mullwo", 0 },
+ { XO_OPCODE(31,235,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "mullwo.", 0 },
+ { XO_OPCODE(31,266,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addo", 0 },
+ { XO_OPCODE(31,266,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "addo.", 0 },
+ { X_OPCODE(31,790,0), X_MASK, {O_rD, O_rA, O_rB, 0},
+ 0, "lhbrx", H_RA0_IS_0 },
+ { X_OPCODE(31,792,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "sraw", 0 },
+ { X_OPCODE(31,792,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
+ 0, "sraw.", 0 },
+ { X_OPCODE(31,824,0), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0},
+ 0, "srawi", 0 },
+ { X_OPCODE(31,824,1), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0},
+ 0, "srawi.", 0 },
+ { X_OPCODE(31,854,0), X_MASK, {0},
+ 0, "eieio", 0 },
+ { X_OPCODE(31,918,0), X_MASK, {O_rS, O_rA, O_rB, 0},
+ 0, "sthbrx", H_RA0_IS_0 },
+ { X_OPCODE(31,922,0), X_MASK, {O_rA, O_rS, O_Rc, 0},
+ 0, "extsh", 0 },
+ { X_OPCODE(31,922,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
+ 0, "extsh.", 0 },
+ { X_OPCODE(31,954,0), X_MASK, {O_rA, O_rS, O_Rc, 0},
+ 0, "extsb", 0 },
+ { X_OPCODE(31,954,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
+ 0, "extsb.", 0 },
+ { XO_OPCODE(31,459,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divwuo", 0 },
+ { XO_OPCODE(31,459,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divwuo.", 0 },
+ { X_OPCODE(31,978,0), X_MASK, {O_rB, 0},
+ 0, "tlbld", 0 },
+ { X_OPCODE(31,982,0), X_MASK, {O_rA, O_rB, 0},
+ 0, "icbi", H_RA0_IS_0 },
+ { XO_OPCODE(31,491,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divwo", 0 },
+ { XO_OPCODE(31,491,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
+ 0, "divwo.", 0 },
+ { X_OPCODE(31,1010,0), X_MASK, {O_rB, 0},
+ 0, "tlbli", 0 },
+ { X_OPCODE(31,1014,0), X_MASK, {O_rA, O_rB, 0},
+ 0, "dcbz", H_RA0_IS_0 },
+ { D_OPCODE(32), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lwz", H_RA0_IS_0 },
+ { D_OPCODE(33), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lwzu", 0 },
+ { D_OPCODE(34), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lbz", H_RA0_IS_0 },
+ { D_OPCODE(35), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lbzu", 0 },
+ { D_OPCODE(36), D_MASK, {O_rS, O_d, O_rA, 0},
+ 0, "stw", H_RA0_IS_0 },
+ { D_OPCODE(37), D_MASK, {O_rS, O_d, O_rA, 0},
+ 0, "stwu", 0 },
+ { D_OPCODE(38), D_MASK, {O_rS, O_d, O_rA, 0},
+ 0, "stb", H_RA0_IS_0 },
+ { D_OPCODE(39), D_MASK, {O_rS, O_d, O_rA, 0},
+ 0, "stbu", 0 },
+ { D_OPCODE(40), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lhz", H_RA0_IS_0 },
+ { D_OPCODE(41), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lhzu", 0 },
+ { D_OPCODE(42), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lha", H_RA0_IS_0 },
+ { D_OPCODE(43), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lhau", 0 },
+ { D_OPCODE(44), D_MASK, {O_rS, O_d, O_rA, 0},
+ 0, "sth", H_RA0_IS_0 },
+ { D_OPCODE(45), D_MASK, {O_rS, O_d, O_rA, 0},
+ 0, "sthu", 0 },
+ { D_OPCODE(46), D_MASK, {O_rD, O_d, O_rA, 0},
+ 0, "lmw", H_RA0_IS_0 },
+ { D_OPCODE(47), D_MASK, {O_rS, O_d, O_rA, 0},
+ 0, "stmw", H_RA0_IS_0 },
+};
+
+const unsigned int n_opcodes = sizeof(opcodes) / sizeof(opcodes[0]);
+
+struct spr_info spr_map[] = {
+ { SPR_XER, "XER" },
+ { SPR_LR, "LR" },
+ { SPR_CTR, "CTR" },
+ { SPR_DSISR, "DSISR" },
+ { SPR_DAR, "DAR" },
+ { SPR_DEC, "DEC" },
+ { SPR_SRR0, "SRR0" },
+ { SPR_SRR1, "SRR1" },
+ { SPR_EIE, "EIE" },
+ { SPR_EID, "EID" },
+ { SPR_CMPA, "CMPA" },
+ { SPR_CMPB, "CMPB" },
+ { SPR_CMPC, "CMPC" },
+ { SPR_CMPD, "CMPD" },
+ { SPR_ICR, "ICR" },
+ { SPR_DER, "DER" },
+ { SPR_COUNTA, "COUNTA" },
+ { SPR_COUNTB, "COUNTB" },
+ { SPR_CMPE, "CMPE" },
+ { SPR_CMPF, "CMPF" },
+ { SPR_CMPG, "CMPG" },
+ { SPR_CMPH, "CMPH" },
+ { SPR_LCTRL1, "LCTRL1" },
+ { SPR_LCTRL2, "LCTRL2" },
+ { SPR_ICTRL, "ICTRL" },
+ { SPR_BAR, "BAR" },
+ { SPR_USPRG0, "USPRG0" },
+ { SPR_SPRG4_RO, "SPRG4_RO" },
+ { SPR_SPRG5_RO, "SPRG5_RO" },
+ { SPR_SPRG6_RO, "SPRG6_RO" },
+ { SPR_SPRG7_RO, "SPRG7_RO" },
+ { SPR_SPRG0, "SPRG0" },
+ { SPR_SPRG1, "SPRG1" },
+ { SPR_SPRG2, "SPRG2" },
+ { SPR_SPRG3, "SPRG3" },
+ { SPR_SPRG4, "SPRG4" },
+ { SPR_SPRG5, "SPRG5" },
+ { SPR_SPRG6, "SPRG6" },
+ { SPR_SPRG7, "SPRG7" },
+ { SPR_EAR, "EAR" },
+ { SPR_TBL, "TBL" },
+ { SPR_TBU, "TBU" },
+ { SPR_IC_CST, "IC_CST" },
+ { SPR_IC_ADR, "IC_ADR" },
+ { SPR_IC_DAT, "IC_DAT" },
+ { SPR_DC_CST, "DC_CST" },
+ { SPR_DC_ADR, "DC_ADR" },
+ { SPR_DC_DAT, "DC_DAT" },
+ { SPR_DPDR, "DPDR" },
+ { SPR_IMMR, "IMMR" },
+ { SPR_MI_CTR, "MI_CTR" },
+ { SPR_MI_AP, "MI_AP" },
+ { SPR_MI_EPN, "MI_EPN" },
+ { SPR_MI_TWC, "MI_TWC" },
+ { SPR_MI_RPN, "MI_RPN" },
+ { SPR_MD_CTR, "MD_CTR" },
+ { SPR_M_CASID, "M_CASID" },
+ { SPR_MD_AP, "MD_AP" },
+ { SPR_MD_EPN, "MD_EPN" },
+ { SPR_M_TWB, "M_TWB" },
+ { SPR_MD_TWC, "MD_TWC" },
+ { SPR_MD_RPN, "MD_RPN" },
+ { SPR_M_TW, "M_TW" },
+ { SPR_MI_DBCAM, "MI_DBCAM" },
+ { SPR_MI_DBRAM0, "MI_DBRAM0" },
+ { SPR_MI_DBRAM1, "MI_DBRAM1" },
+ { SPR_MD_DBCAM, "MD_DBCAM" },
+ { SPR_MD_DBRAM0, "MD_DBRAM0" },
+ { SPR_MD_DBRAM1, "MD_DBRAM1" },
+ { SPR_ZPR, "ZPR" },
+ { SPR_PID, "PID" },
+ { SPR_CCR0, "CCR0" },
+ { SPR_IAC3, "IAC3" },
+ { SPR_IAC4, "IAC4" },
+ { SPR_DVC1, "DVC1" },
+ { SPR_DVC2, "DVC2" },
+ { SPR_SGR, "SGR" },
+ { SPR_DCWR, "DCWR" },
+ { SPR_SLER, "SLER" },
+ { SPR_SU0R, "SU0R" },
+ { SPR_DBCR1, "DBCR1" },
+ { SPR_ICDBDR, "ICDBDR" },
+ { SPR_ESR, "ESR" },
+ { SPR_DEAR, "DEAR" },
+ { SPR_EVPR, "EVPR" },
+ { SPR_TSR, "TSR" },
+ { SPR_TCR, "TCR" },
+ { SPR_PIT, "PIT" },
+ { SPR_SRR2, "SRR2" },
+ { SPR_SRR3, "SRR3" },
+ { SPR_DBSR, "DBSR" },
+ { SPR_DBCR0, "DBCR0" },
+ { SPR_IAC1, "IAC1" },
+ { SPR_IAC2, "IAC2" },
+ { SPR_DAC1, "DAC1" },
+ { SPR_DAC2, "DAC2" },
+ { SPR_DCCR, "DCCR" },
+ { SPR_ICCR, "ICCR" },
+};
+
+const unsigned int n_sprs = sizeof(spr_map) / sizeof(spr_map[0]);
+
+#endif
+
+/*
+ * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are freely
+ * permitted provided that the above copyright notice and this
+ * paragraph and the following disclaimer are duplicated in all
+ * such forms.
+ *
+ * This software is provided "AS IS" and without any express or
+ * implied warranties, including, without limitation, the implied
+ * warranties of merchantability and fitness for a particular
+ * purpose.
+ */
diff -Naur u-boot-2009.03_orig/include/configs/CVS/Entries u-boot-2009.03/include/configs/CVS/Entries
--- u-boot-2009.03_orig/include/configs/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/configs/CVS/Entries 2009-03-31 15:00:55.623187200 -0700
@@ -0,0 +1,477 @@
+/A3000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADCIOP.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADNPESC1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADNPESC1_base_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADS860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AMX860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AP1000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/APC405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AR405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ASH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ATUM8548.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Adder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AdderUSB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Alaska8220.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AmigaOneG3SE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/B2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BAB7xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BC3450.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BMW.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CANBT.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CATcenter.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CCM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CMS700.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPC45.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI2DP.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI4052.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI405AB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI405DT.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI750.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCIISER4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPU86.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPU87.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CRAYL1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CU824.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DASA_SIM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DB64460.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1C20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1C20_safe_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1C20_standard_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10_mtx_ldk_20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10_safe_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10_standard_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DP405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DU405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DU440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EB+MCF-EV123.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ELPPC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ELPT860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP1C20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP1S10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP1S40.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP88x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ERIC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ESTEEM192E.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ETX094.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EVB64260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EXBITGEN.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FADS823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FADS850SAR.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FADS860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FLAGADM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FPS850L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FPS860L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/G2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/GEN860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/GENIETV.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/GTH.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HIDDEN_DRAGON.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HMI10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HUB405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IAD210.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ICU862.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IDS8247.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IP860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IPHASE4539.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ISPAN.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IVML24.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IVMS8.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IceCube.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/JSE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/KUP4K.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/KUP4X.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LANTEC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M52277EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5235EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5249EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5253DEMO.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5253EVBE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5271EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5272C3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5275EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5282EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M53017EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5329EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5373EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M54451EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M54455EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5475EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5485EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MBX.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MBX860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MHPC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MIP405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ML2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MOUSSE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8260ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8266ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8313ERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8315ERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8323ERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC832XEMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8349EMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8349ITX.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8360EMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8360ERDK.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC837XEMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC837XERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8536DS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8540ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8540EVAL.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8541CDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8544DS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8548CDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8555CDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8560ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8568MDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8572DS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8610HPCD.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8641HPCN.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC86xADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC885ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MUSENKI.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVBC_P.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVBLM7.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVBLUE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVS1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MigoR.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NC650.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETPHONE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETTA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETTA2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETVIA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NSCU.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NX823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/OCRTC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ORSG.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/OXC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/P3G4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PATI.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCI405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCI5441.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCIPPC2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCIPPC6.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PIP405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PK1C20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PLU405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM520.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM826.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM828.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM854.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM856.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PMC405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PMC440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PN62.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PPChameleonEVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/QS823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/QS850.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/QS860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/R360MPI.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RBC823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXClassic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXlite.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXlite_DW.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXsuper.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RRvision.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Rattler.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SBC8540.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SCM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SIMPC8313.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SL8245.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SM850.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SMN42.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SPD823TS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SX1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SXNI855T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Sandpoint8240.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Sandpoint8245.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TASREG.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TB5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TK885D.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TOP5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TOP860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM823L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM823M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM8272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM834x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM850L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM850M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM855L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM855M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM85xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM860L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM860M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM862L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM862M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM866M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM885D.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Total5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VCMA9.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VOH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VOM405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VoVPN-GW.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/W7OLMC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/W7OLMG.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/WUH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/XPEDITE1K.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/XPEDITE5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/XPEDITE5370.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Yukon8220.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ZPC1900.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ZUMA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/acadia.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ads5121.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/aev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/afeb9260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/alpr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/amcc-common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ap325rxa.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/apollon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/armadillo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/assabet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91cap9adk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91rm9200dk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9260ek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9261ek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9263ek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9rlek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atngw100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1002.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1003.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1004.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1006.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bamboo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf533-ezkit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf533-stamp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf537-stamp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf561-ezkit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bubinga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/c2mon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canmb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canyonlands.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cerf250.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm4008.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm41xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmc_pu2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmi_mpc5xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cobra5272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cogent_common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cogent_mpc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cogent_mpc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpci5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cradle.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb226.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb472.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb637.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_dvevm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_schmoogie.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_sffsdr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_sonata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dbau1x00.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/debris.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/delta.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dnp1110.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eNET.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eXalion.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebony.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep7312.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep8248.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep82xxm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/evb4510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/favr-32-ezkit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fx12mm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gcplus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gdppc440etx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_cpci_ax2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_ep2s60.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_xc3s_1500.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/grsim.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/grsim_leon2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gth2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gw8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/h2_p2_dbg_board.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hammerhead.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hcu4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hcu5.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hermes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hmi1001.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hymod.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/idmr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/impa7.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/imx31_litekit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/imx31_phycore.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/incaip.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inka4x0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/innokom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/integratorap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/integratorcp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ixdp425.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ixdpg425.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jupiter.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/katmai.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kb9202.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/keymile-common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kilauea.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/km8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kmeter1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kmsupx4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/korat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kvme080.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/linkstation.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logodl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpc2292sodimm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a400-10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a404-10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a404.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/luan.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lubbock.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lwmon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lwmon5.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m501sk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/makalu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcc200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcu25.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mecp5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mgcoge.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mgsuvd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/microblaze-generic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mimc200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ml300.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ml507.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/modnet50.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/motionpro.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mp2usb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc7448hpc2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpr2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7720se.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7722se.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7750se.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/muas3001.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mucmc52.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/munices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx1ads.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx1fs2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx31ads.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/neo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netstal-common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netstar.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nmdk8815.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns9750dev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/o2dnt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ocotea.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1510inn.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1610h2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1610inn.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap2420h4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_beagle.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_evm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_overo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_pandora.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_zoom1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap5912osk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap730.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap730p2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3mx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3p440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pb1x00.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcs440ep.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcu_e.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pdnb3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pf5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pleb2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppmc7xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppmc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/purple.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa255_idp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qemu-mips.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qong.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/quad100hd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/quantum.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r2dplus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r7780mp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/redwood.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rmu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rsdproto.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rsk7203.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sacsng.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc2410x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8240.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8349.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8548.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8560.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8641d.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_cdp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_spunk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_spunk_rel.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scb9328.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sequoia.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh7763rdp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh7785lcr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/shannon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk2400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk2410.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk6400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smmaco4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/socrates.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sorcery.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spc1920.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spieval.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxgp3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxssa.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxxtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/suzaku.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/svm_sc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/taihu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/taishan.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tb0229.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/trab.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/trizepsiv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uc100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uc101.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/utx8245.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v37.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v38b.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v5fx30teval.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vct.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/versatile.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/virtlab2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/voiceblue.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/walnut.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/wepep250.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xaeniax.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc405-generic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc440-generic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xm250.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xsengine.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yosemite.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yucca.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zeus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zylonite.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/barco.h/1.1.1.1/Thu Mar 26 00:37:22 2009//
+/DB64360.h/1.1.1.1/Thu Mar 26 00:37:43 2009//
+/de1_or1k.h/1.2/Thu Mar 26 00:39:02 2009//
+/KAREF.h/1.1.1.1/Tue Mar 31 22:00:45 2009//T1.1.1.1
+/METROBOX.h/1.1.1.1/Tue Mar 31 22:00:55 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/include/configs/CVS/Entries.Extra u-boot-2009.03/include/configs/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/configs/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/configs/CVS/Entries.Extra 2009-03-31 15:00:55.623187200 -0700
@@ -0,0 +1,476 @@
+/A3000.h///1238019741/
+/ADCIOP.h///1238019741/
+/ADNPESC1.h///1238019741/
+/ADNPESC1_base_32.h///1238019741/
+/ADS860.h///1238019741/
+/AMX860.h///1238019741/
+/AP1000.h///1238019741/
+/APC405.h///1238019741/
+/AR405.h///1238019741/
+/ASH405.h///1238019741/
+/ATUM8548.h///1238019741/
+/Adder.h///1238019741/
+/AdderUSB.h///1238019741/
+/Alaska8220.h///1238019741/
+/AmigaOneG3SE.h///1238019741/
+/B2.h///1238019741/
+/BAB7xx.h///1238019741/
+/BC3450.h///1238019742/
+/BMW.h///1238019742/
+/CANBT.h///1238019742/
+/CATcenter.h///1238019742/
+/CCM.h///1238019742/
+/CMS700.h///1238019742/
+/CPC45.h///1238019742/
+/CPCI2DP.h///1238019742/
+/CPCI405.h///1238019742/
+/CPCI4052.h///1238019742/
+/CPCI405AB.h///1238019742/
+/CPCI405DT.h///1238019742/
+/CPCI750.h///1238019744/
+/CPCIISER4.h///1238019744/
+/CPU86.h///1238019744/
+/CPU87.h///1238019744/
+/CRAYL1.h///1238019744/
+/CU824.h///1238019744/
+/DASA_SIM.h///1238019744/
+/DB64460.h///1238019744/
+/DK1C20.h///1238019744/
+/DK1C20_safe_32.h///1238019744/
+/DK1C20_standard_32.h///1238019744/
+/DK1S10.h///1238019744/
+/DK1S10_mtx_ldk_20.h///1238019744/
+/DK1S10_safe_32.h///1238019744/
+/DK1S10_standard_32.h///1238019744/
+/DP405.h///1238019744/
+/DU405.h///1238019744/
+/DU440.h///1238019744/
+/EB+MCF-EV123.h///1238019744/
+/ELPPC.h///1238019744/
+/ELPT860.h///1238019744/
+/EP1C20.h///1238019744/
+/EP1S10.h///1238019744/
+/EP1S40.h///1238019744/
+/EP88x.h///1238019744/
+/ERIC.h///1238019744/
+/ESTEEM192E.h///1238019744/
+/ETX094.h///1238019744/
+/EVB64260.h///1238019744/
+/EXBITGEN.h///1238019744/
+/FADS823.h///1238019744/
+/FADS850SAR.h///1238019744/
+/FADS860T.h///1238019744/
+/FLAGADM.h///1238019744/
+/FPS850L.h///1238019744/
+/FPS860L.h///1238019744/
+/G2000.h///1238019744/
+/GEN860T.h///1238019744/
+/GENIETV.h///1238019744/
+/GTH.h///1238019744/
+/HH405.h///1238019744/
+/HIDDEN_DRAGON.h///1238019744/
+/HMI10.h///1238019744/
+/HUB405.h///1238019744/
+/IAD210.h///1238019744/
+/ICU862.h///1238019744/
+/IDS8247.h///1238019745/
+/IP860.h///1238019745/
+/IPHASE4539.h///1238019745/
+/ISPAN.h///1238019745/
+/IVML24.h///1238019745/
+/IVMS8.h///1238019745/
+/IceCube.h///1238019744/
+/JSE.h///1238019745/
+/KUP4K.h///1238019745/
+/KUP4X.h///1238019745/
+/LANTEC.h///1238019745/
+/M52277EVB.h///1238019745/
+/M5235EVB.h///1238019745/
+/M5249EVB.h///1238019745/
+/M5253DEMO.h///1238019745/
+/M5253EVBE.h///1238019745/
+/M5271EVB.h///1238019745/
+/M5272C3.h///1238019745/
+/M5275EVB.h///1238019745/
+/M5282EVB.h///1238019745/
+/M53017EVB.h///1238019745/
+/M5329EVB.h///1238019745/
+/M5373EVB.h///1238019745/
+/M54451EVB.h///1238019745/
+/M54455EVB.h///1238019745/
+/M5475EVB.h///1238019745/
+/M5485EVB.h///1238019745/
+/MBX.h///1238019745/
+/MBX860T.h///1238019745/
+/MHPC.h///1238019745/
+/MIP405.h///1238019745/
+/ML2.h///1238019745/
+/MOUSSE.h///1238019745/
+/MPC8260ADS.h///1238019745/
+/MPC8266ADS.h///1238019745/
+/MPC8313ERDB.h///1238019745/
+/MPC8315ERDB.h///1238019745/
+/MPC8323ERDB.h///1238019745/
+/MPC832XEMDS.h///1238019745/
+/MPC8349EMDS.h///1238019745/
+/MPC8349ITX.h///1238019745/
+/MPC8360EMDS.h///1238019745/
+/MPC8360ERDK.h///1238019745/
+/MPC837XEMDS.h///1238019745/
+/MPC837XERDB.h///1238019745/
+/MPC8536DS.h///1238019745/
+/MPC8540ADS.h///1238019745/
+/MPC8540EVAL.h///1238019745/
+/MPC8541CDS.h///1238019745/
+/MPC8544DS.h///1238019745/
+/MPC8548CDS.h///1238019746/
+/MPC8555CDS.h///1238019746/
+/MPC8560ADS.h///1238019746/
+/MPC8568MDS.h///1238019746/
+/MPC8572DS.h///1238019746/
+/MPC8610HPCD.h///1238019746/
+/MPC8641HPCN.h///1238019746/
+/MPC86xADS.h///1238019746/
+/MPC885ADS.h///1238019746/
+/MUSENKI.h///1238019746/
+/MVBC_P.h///1238019746/
+/MVBLM7.h///1238019746/
+/MVBLUE.h///1238019746/
+/MVS1.h///1238019746/
+/MigoR.h///1238019745/
+/NC650.h///1238019746/
+/NETPHONE.h///1238019746/
+/NETTA.h///1238019746/
+/NETTA2.h///1238019746/
+/NETVIA.h///1238019746/
+/NSCU.h///1238019746/
+/NX823.h///1238019746/
+/OCRTC.h///1238019746/
+/ORSG.h///1238019746/
+/OXC.h///1238019746/
+/P3G4.h///1238019746/
+/PATI.h///1238019746/
+/PCI405.h///1238019747/
+/PCI5441.h///1238019747/
+/PCIPPC2.h///1238019747/
+/PCIPPC6.h///1238019747/
+/PIP405.h///1238019747/
+/PK1C20.h///1238019747/
+/PLU405.h///1238019747/
+/PM520.h///1238019747/
+/PM826.h///1238019747/
+/PM828.h///1238019747/
+/PM854.h///1238019747/
+/PM856.h///1238019747/
+/PMC405.h///1238019747/
+/PMC440.h///1238019747/
+/PN62.h///1238019747/
+/PPChameleonEVB.h///1238019747/
+/QS823.h///1238019747/
+/QS850.h///1238019747/
+/QS860T.h///1238019747/
+/R360MPI.h///1238019747/
+/RBC823.h///1238019747/
+/RPXClassic.h///1238019747/
+/RPXlite.h///1238019747/
+/RPXlite_DW.h///1238019747/
+/RPXsuper.h///1238019747/
+/RRvision.h///1238019747/
+/Rattler.h///1238019747/
+/SBC8540.h///1238019747/
+/SCM.h///1238019747/
+/SIMPC8313.h///1238019747/
+/SL8245.h///1238019747/
+/SM850.h///1238019747/
+/SMN42.h///1238019747/
+/SPD823TS.h///1238019747/
+/SX1.h///1238019748/
+/SXNI855T.h///1238019748/
+/Sandpoint8240.h///1238019747/
+/Sandpoint8245.h///1238019747/
+/TASREG.h///1238019748/
+/TB5200.h///1238019748/
+/TK885D.h///1238019748/
+/TOP5200.h///1238019748/
+/TOP860.h///1238019748/
+/TQM5200.h///1238019748/
+/TQM823L.h///1238019748/
+/TQM823M.h///1238019748/
+/TQM8260.h///1238019748/
+/TQM8272.h///1238019748/
+/TQM834x.h///1238019748/
+/TQM850L.h///1238019748/
+/TQM850M.h///1238019748/
+/TQM855L.h///1238019748/
+/TQM855M.h///1238019748/
+/TQM85xx.h///1238019748/
+/TQM860L.h///1238019748/
+/TQM860M.h///1238019748/
+/TQM862L.h///1238019748/
+/TQM862M.h///1238019748/
+/TQM866M.h///1238019748/
+/TQM885D.h///1238019748/
+/Total5200.h///1238019748/
+/VCMA9.h///1238019748/
+/VOH405.h///1238019748/
+/VOM405.h///1238019748/
+/VoVPN-GW.h///1238019748/
+/W7OLMC.h///1238019748/
+/W7OLMG.h///1238019748/
+/WUH405.h///1238019748/
+/XPEDITE1K.h///1238019748/
+/XPEDITE5200.h///1238019748/
+/XPEDITE5370.h///1238019748/
+/Yukon8220.h///1238019748/
+/ZPC1900.h///1238019748/
+/ZUMA.h///1238019748/
+/acadia.h///1238019741/
+/actux1.h///1238019741/
+/actux2.h///1238019741/
+/actux3.h///1238019741/
+/actux4.h///1238019741/
+/ads5121.h///1238019741/
+/aev.h///1238019741/
+/afeb9260.h///1238019741/
+/alpr.h///1238019741/
+/amcc-common.h///1238019741/
+/ap325rxa.h///1238019741/
+/apollon.h///1238019741/
+/armadillo.h///1238019741/
+/assabet.h///1238019741/
+/at91cap9adk.h///1238019741/
+/at91rm9200dk.h///1238019741/
+/at91sam9260ek.h///1238019741/
+/at91sam9261ek.h///1238019741/
+/at91sam9263ek.h///1238019741/
+/at91sam9rlek.h///1238019741/
+/atc.h///1238019741/
+/atngw100.h///1238019741/
+/atstk1002.h///1238019741/
+/atstk1003.h///1238019741/
+/atstk1004.h///1238019741/
+/atstk1006.h///1238019741/
+/bamboo.h///1238019741/
+/bf533-ezkit.h///1238019742/
+/bf533-stamp.h///1238019742/
+/bf537-stamp.h///1238019742/
+/bf561-ezkit.h///1238019742/
+/bubinga.h///1238019742/
+/c2mon.h///1238019742/
+/canmb.h///1238019742/
+/canyonlands.h///1238019742/
+/cerf250.h///1238019742/
+/cm4008.h///1238019742/
+/cm41xx.h///1238019742/
+/cm5200.h///1238019742/
+/cmc_pu2.h///1238019742/
+/cmi_mpc5xx.h///1238019742/
+/cobra5272.h///1238019742/
+/cogent_common.h///1238019742/
+/cogent_mpc8260.h///1238019742/
+/cogent_mpc8xx.h///1238019742/
+/cpci5200.h///1238019742/
+/cradle.h///1238019744/
+/csb226.h///1238019744/
+/csb272.h///1238019744/
+/csb472.h///1238019744/
+/csb637.h///1238019744/
+/davinci_dvevm.h///1238019744/
+/davinci_schmoogie.h///1238019744/
+/davinci_sffsdr.h///1238019744/
+/davinci_sonata.h///1238019744/
+/dbau1x00.h///1238019744/
+/debris.h///1238019744/
+/delta.h///1238019744/
+/dnp1110.h///1238019744/
+/eNET.h///1238019744/
+/eXalion.h///1238019744/
+/ebony.h///1238019744/
+/ep7312.h///1238019744/
+/ep8248.h///1238019744/
+/ep8260.h///1238019744/
+/ep82xxm.h///1238019744/
+/evb4510.h///1238019744/
+/favr-32-ezkit.h///1238019744/
+/fx12mm.h///1238019744/
+/gcplus.h///1238019744/
+/gdppc440etx.h///1238019744/
+/gr_cpci_ax2000.h///1238019744/
+/gr_ep2s60.h///1238019744/
+/gr_xc3s_1500.h///1238019744/
+/grsim.h///1238019744/
+/grsim_leon2.h///1238019744/
+/gth2.h///1238019744/
+/gw8260.h///1238019744/
+/h2_p2_dbg_board.h///1238019744/
+/hammerhead.h///1238019744/
+/hcu4.h///1238019744/
+/hcu5.h///1238019744/
+/hermes.h///1238019744/
+/hmi1001.h///1238019744/
+/hymod.h///1238019744/
+/idmr.h///1238019745/
+/impa7.h///1238019745/
+/imx31_litekit.h///1238019745/
+/imx31_phycore.h///1238019745/
+/incaip.h///1238019745/
+/inka4x0.h///1238019745/
+/innokom.h///1238019745/
+/integratorap.h///1238019745/
+/integratorcp.h///1238019745/
+/ixdp425.h///1238019745/
+/ixdpg425.h///1238019745/
+/jupiter.h///1238019745/
+/katmai.h///1238019745/
+/kb9202.h///1238019745/
+/keymile-common.h///1238019745/
+/kilauea.h///1238019745/
+/km8xx.h///1238019745/
+/kmeter1.h///1238019745/
+/kmsupx4.h///1238019745/
+/korat.h///1238019745/
+/kvme080.h///1238019745/
+/lart.h///1238019745/
+/linkstation.h///1238019745/
+/logodl.h///1238019745/
+/lpc2292sodimm.h///1238019745/
+/lpd7a400-10.h///1238019745/
+/lpd7a400.h///1238019745/
+/lpd7a404-10.h///1238019745/
+/lpd7a404.h///1238019745/
+/luan.h///1238019745/
+/lubbock.h///1238019745/
+/lwmon.h///1238019745/
+/lwmon5.h///1238019745/
+/m501sk.h///1238019745/
+/makalu.h///1238019745/
+/mcc200.h///1238019745/
+/mcu25.h///1238019745/
+/mecp5200.h///1238019745/
+/mgcoge.h///1238019745/
+/mgsuvd.h///1238019745/
+/microblaze-generic.h///1238019745/
+/mimc200.h///1238019745/
+/ml300.h///1238019745/
+/ml507.h///1238019745/
+/modnet50.h///1238019745/
+/motionpro.h///1238019745/
+/mp2usb.h///1238019745/
+/mpc7448hpc2.h///1238019745/
+/mpr2.h///1238019746/
+/ms7720se.h///1238019746/
+/ms7722se.h///1238019746/
+/ms7750se.h///1238019746/
+/muas3001.h///1238019746/
+/mucmc52.h///1238019746/
+/munices.h///1238019746/
+/mx1ads.h///1238019746/
+/mx1fs2.h///1238019746/
+/mx31ads.h///1238019746/
+/neo.h///1238019746/
+/netstal-common.h///1238019746/
+/netstar.h///1238019746/
+/nmdk8815.h///1238019746/
+/ns9750dev.h///1238019746/
+/o2dnt.h///1238019746/
+/ocotea.h///1238019746/
+/omap1510.h///1238019746/
+/omap1510inn.h///1238019746/
+/omap1610h2.h///1238019746/
+/omap1610inn.h///1238019746/
+/omap2420h4.h///1238019746/
+/omap3_beagle.h///1238019746/
+/omap3_evm.h///1238019746/
+/omap3_overo.h///1238019746/
+/omap3_pandora.h///1238019746/
+/omap3_zoom1.h///1238019746/
+/omap5912osk.h///1238019746/
+/omap730.h///1238019746/
+/omap730p2.h///1238019746/
+/p3mx.h///1238019746/
+/p3p440.h///1238019746/
+/pb1x00.h///1238019747/
+/pcs440ep.h///1238019747/
+/pcu_e.h///1238019747/
+/pdnb3.h///1238019747/
+/pf5200.h///1238019747/
+/pleb2.h///1238019747/
+/ppmc7xx.h///1238019747/
+/ppmc8260.h///1238019747/
+/purple.h///1238019747/
+/pxa255_idp.h///1238019747/
+/qemu-mips.h///1238019747/
+/qong.h///1238019747/
+/quad100hd.h///1238019747/
+/quantum.h///1238019747/
+/r2dplus.h///1238019747/
+/r7780mp.h///1238019747/
+/redwood.h///1238019747/
+/rmu.h///1238019747/
+/rsdproto.h///1238019747/
+/rsk7203.h///1238019747/
+/sacsng.h///1238019747/
+/sbc2410x.h///1238019747/
+/sbc405.h///1238019747/
+/sbc8240.h///1238019747/
+/sbc8260.h///1238019747/
+/sbc8349.h///1238019747/
+/sbc8548.h///1238019747/
+/sbc8560.h///1238019747/
+/sbc8641d.h///1238019747/
+/sc3.h///1238019747/
+/sc520_cdp.h///1238019747/
+/sc520_spunk.h///1238019747/
+/sc520_spunk_rel.h///1238019747/
+/scb9328.h///1238019747/
+/sequoia.h///1238019747/
+/sh7763rdp.h///1238019747/
+/sh7785lcr.h///1238019747/
+/shannon.h///1238019747/
+/smdk2400.h///1238019747/
+/smdk2410.h///1238019747/
+/smdk6400.h///1238019747/
+/smmaco4.h///1238019747/
+/socrates.h///1238019747/
+/sorcery.h///1238019747/
+/spc1920.h///1238019747/
+/spieval.h///1238019747/
+/stxgp3.h///1238019747/
+/stxssa.h///1238019747/
+/stxxtc.h///1238019747/
+/suzaku.h///1238019747/
+/svm_sc8xx.h///1238019747/
+/taihu.h///1238019748/
+/taishan.h///1238019748/
+/tb0229.h///1238019748/
+/trab.h///1238019748/
+/trizepsiv.h///1238019748/
+/uc100.h///1238019748/
+/uc101.h///1238019748/
+/utx8245.h///1238019748/
+/v37.h///1238019748/
+/v38b.h///1238019748/
+/v5fx30teval.h///1238019748/
+/vct.h///1238019748/
+/versatile.h///1238019748/
+/virtlab2.h///1238019748/
+/voiceblue.h///1238019748/
+/walnut.h///1238019748/
+/wepep250.h///1238019748/
+/xaeniax.h///1238019748/
+/xilinx-ppc.h///1238019748/
+/xilinx-ppc405-generic.h///1238019748/
+/xilinx-ppc405.h///1238019748/
+/xilinx-ppc440-generic.h///1238019748/
+/xilinx-ppc440.h///1238019748/
+/xm250.h///1238019748/
+/xsengine.h///1238019748/
+/yosemite.h///1238019748/
+/yucca.h///1238019748/
+/zeus.h///1238019748/
+/zylonite.h///1238019748/
+/barco.h///1238019742/
+/DB64360.h///1238019744/
+/de1_or1k.h///1238028711/
+/KAREF.h///1238019745/
+/METROBOX.h///1238019745/
diff -Naur u-boot-2009.03_orig/include/configs/CVS/Entries.Extra.Old u-boot-2009.03/include/configs/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/configs/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/configs/CVS/Entries.Extra.Old 2009-03-31 15:00:45.000000000 -0700
@@ -0,0 +1,476 @@
+/A3000.h///1238019741/
+/ADCIOP.h///1238019741/
+/ADNPESC1.h///1238019741/
+/ADNPESC1_base_32.h///1238019741/
+/ADS860.h///1238019741/
+/AMX860.h///1238019741/
+/AP1000.h///1238019741/
+/APC405.h///1238019741/
+/AR405.h///1238019741/
+/ASH405.h///1238019741/
+/ATUM8548.h///1238019741/
+/Adder.h///1238019741/
+/AdderUSB.h///1238019741/
+/Alaska8220.h///1238019741/
+/AmigaOneG3SE.h///1238019741/
+/B2.h///1238019741/
+/BAB7xx.h///1238019741/
+/BC3450.h///1238019742/
+/BMW.h///1238019742/
+/CANBT.h///1238019742/
+/CATcenter.h///1238019742/
+/CCM.h///1238019742/
+/CMS700.h///1238019742/
+/CPC45.h///1238019742/
+/CPCI2DP.h///1238019742/
+/CPCI405.h///1238019742/
+/CPCI4052.h///1238019742/
+/CPCI405AB.h///1238019742/
+/CPCI405DT.h///1238019742/
+/CPCI750.h///1238019744/
+/CPCIISER4.h///1238019744/
+/CPU86.h///1238019744/
+/CPU87.h///1238019744/
+/CRAYL1.h///1238019744/
+/CU824.h///1238019744/
+/DASA_SIM.h///1238019744/
+/DB64460.h///1238019744/
+/DK1C20.h///1238019744/
+/DK1C20_safe_32.h///1238019744/
+/DK1C20_standard_32.h///1238019744/
+/DK1S10.h///1238019744/
+/DK1S10_mtx_ldk_20.h///1238019744/
+/DK1S10_safe_32.h///1238019744/
+/DK1S10_standard_32.h///1238019744/
+/DP405.h///1238019744/
+/DU405.h///1238019744/
+/DU440.h///1238019744/
+/EB+MCF-EV123.h///1238019744/
+/ELPPC.h///1238019744/
+/ELPT860.h///1238019744/
+/EP1C20.h///1238019744/
+/EP1S10.h///1238019744/
+/EP1S40.h///1238019744/
+/EP88x.h///1238019744/
+/ERIC.h///1238019744/
+/ESTEEM192E.h///1238019744/
+/ETX094.h///1238019744/
+/EVB64260.h///1238019744/
+/EXBITGEN.h///1238019744/
+/FADS823.h///1238019744/
+/FADS850SAR.h///1238019744/
+/FADS860T.h///1238019744/
+/FLAGADM.h///1238019744/
+/FPS850L.h///1238019744/
+/FPS860L.h///1238019744/
+/G2000.h///1238019744/
+/GEN860T.h///1238019744/
+/GENIETV.h///1238019744/
+/GTH.h///1238019744/
+/HH405.h///1238019744/
+/HIDDEN_DRAGON.h///1238019744/
+/HMI10.h///1238019744/
+/HUB405.h///1238019744/
+/IAD210.h///1238019744/
+/ICU862.h///1238019744/
+/IDS8247.h///1238019745/
+/IP860.h///1238019745/
+/IPHASE4539.h///1238019745/
+/ISPAN.h///1238019745/
+/IVML24.h///1238019745/
+/IVMS8.h///1238019745/
+/IceCube.h///1238019744/
+/JSE.h///1238019745/
+/KUP4K.h///1238019745/
+/KUP4X.h///1238019745/
+/LANTEC.h///1238019745/
+/M52277EVB.h///1238019745/
+/M5235EVB.h///1238019745/
+/M5249EVB.h///1238019745/
+/M5253DEMO.h///1238019745/
+/M5253EVBE.h///1238019745/
+/M5271EVB.h///1238019745/
+/M5272C3.h///1238019745/
+/M5275EVB.h///1238019745/
+/M5282EVB.h///1238019745/
+/M53017EVB.h///1238019745/
+/M5329EVB.h///1238019745/
+/M5373EVB.h///1238019745/
+/M54451EVB.h///1238019745/
+/M54455EVB.h///1238019745/
+/M5475EVB.h///1238019745/
+/M5485EVB.h///1238019745/
+/MBX.h///1238019745/
+/MBX860T.h///1238019745/
+/MHPC.h///1238019745/
+/MIP405.h///1238019745/
+/ML2.h///1238019745/
+/MOUSSE.h///1238019745/
+/MPC8260ADS.h///1238019745/
+/MPC8266ADS.h///1238019745/
+/MPC8313ERDB.h///1238019745/
+/MPC8315ERDB.h///1238019745/
+/MPC8323ERDB.h///1238019745/
+/MPC832XEMDS.h///1238019745/
+/MPC8349EMDS.h///1238019745/
+/MPC8349ITX.h///1238019745/
+/MPC8360EMDS.h///1238019745/
+/MPC8360ERDK.h///1238019745/
+/MPC837XEMDS.h///1238019745/
+/MPC837XERDB.h///1238019745/
+/MPC8536DS.h///1238019745/
+/MPC8540ADS.h///1238019745/
+/MPC8540EVAL.h///1238019745/
+/MPC8541CDS.h///1238019745/
+/MPC8544DS.h///1238019745/
+/MPC8548CDS.h///1238019746/
+/MPC8555CDS.h///1238019746/
+/MPC8560ADS.h///1238019746/
+/MPC8568MDS.h///1238019746/
+/MPC8572DS.h///1238019746/
+/MPC8610HPCD.h///1238019746/
+/MPC8641HPCN.h///1238019746/
+/MPC86xADS.h///1238019746/
+/MPC885ADS.h///1238019746/
+/MUSENKI.h///1238019746/
+/MVBC_P.h///1238019746/
+/MVBLM7.h///1238019746/
+/MVBLUE.h///1238019746/
+/MVS1.h///1238019746/
+/MigoR.h///1238019745/
+/NC650.h///1238019746/
+/NETPHONE.h///1238019746/
+/NETTA.h///1238019746/
+/NETTA2.h///1238019746/
+/NETVIA.h///1238019746/
+/NSCU.h///1238019746/
+/NX823.h///1238019746/
+/OCRTC.h///1238019746/
+/ORSG.h///1238019746/
+/OXC.h///1238019746/
+/P3G4.h///1238019746/
+/PATI.h///1238019746/
+/PCI405.h///1238019747/
+/PCI5441.h///1238019747/
+/PCIPPC2.h///1238019747/
+/PCIPPC6.h///1238019747/
+/PIP405.h///1238019747/
+/PK1C20.h///1238019747/
+/PLU405.h///1238019747/
+/PM520.h///1238019747/
+/PM826.h///1238019747/
+/PM828.h///1238019747/
+/PM854.h///1238019747/
+/PM856.h///1238019747/
+/PMC405.h///1238019747/
+/PMC440.h///1238019747/
+/PN62.h///1238019747/
+/PPChameleonEVB.h///1238019747/
+/QS823.h///1238019747/
+/QS850.h///1238019747/
+/QS860T.h///1238019747/
+/R360MPI.h///1238019747/
+/RBC823.h///1238019747/
+/RPXClassic.h///1238019747/
+/RPXlite.h///1238019747/
+/RPXlite_DW.h///1238019747/
+/RPXsuper.h///1238019747/
+/RRvision.h///1238019747/
+/Rattler.h///1238019747/
+/SBC8540.h///1238019747/
+/SCM.h///1238019747/
+/SIMPC8313.h///1238019747/
+/SL8245.h///1238019747/
+/SM850.h///1238019747/
+/SMN42.h///1238019747/
+/SPD823TS.h///1238019747/
+/SX1.h///1238019748/
+/SXNI855T.h///1238019748/
+/Sandpoint8240.h///1238019747/
+/Sandpoint8245.h///1238019747/
+/TASREG.h///1238019748/
+/TB5200.h///1238019748/
+/TK885D.h///1238019748/
+/TOP5200.h///1238019748/
+/TOP860.h///1238019748/
+/TQM5200.h///1238019748/
+/TQM823L.h///1238019748/
+/TQM823M.h///1238019748/
+/TQM8260.h///1238019748/
+/TQM8272.h///1238019748/
+/TQM834x.h///1238019748/
+/TQM850L.h///1238019748/
+/TQM850M.h///1238019748/
+/TQM855L.h///1238019748/
+/TQM855M.h///1238019748/
+/TQM85xx.h///1238019748/
+/TQM860L.h///1238019748/
+/TQM860M.h///1238019748/
+/TQM862L.h///1238019748/
+/TQM862M.h///1238019748/
+/TQM866M.h///1238019748/
+/TQM885D.h///1238019748/
+/Total5200.h///1238019748/
+/VCMA9.h///1238019748/
+/VOH405.h///1238019748/
+/VOM405.h///1238019748/
+/VoVPN-GW.h///1238019748/
+/W7OLMC.h///1238019748/
+/W7OLMG.h///1238019748/
+/WUH405.h///1238019748/
+/XPEDITE1K.h///1238019748/
+/XPEDITE5200.h///1238019748/
+/XPEDITE5370.h///1238019748/
+/Yukon8220.h///1238019748/
+/ZPC1900.h///1238019748/
+/ZUMA.h///1238019748/
+/acadia.h///1238019741/
+/actux1.h///1238019741/
+/actux2.h///1238019741/
+/actux3.h///1238019741/
+/actux4.h///1238019741/
+/ads5121.h///1238019741/
+/aev.h///1238019741/
+/afeb9260.h///1238019741/
+/alpr.h///1238019741/
+/amcc-common.h///1238019741/
+/ap325rxa.h///1238019741/
+/apollon.h///1238019741/
+/armadillo.h///1238019741/
+/assabet.h///1238019741/
+/at91cap9adk.h///1238019741/
+/at91rm9200dk.h///1238019741/
+/at91sam9260ek.h///1238019741/
+/at91sam9261ek.h///1238019741/
+/at91sam9263ek.h///1238019741/
+/at91sam9rlek.h///1238019741/
+/atc.h///1238019741/
+/atngw100.h///1238019741/
+/atstk1002.h///1238019741/
+/atstk1003.h///1238019741/
+/atstk1004.h///1238019741/
+/atstk1006.h///1238019741/
+/bamboo.h///1238019741/
+/bf533-ezkit.h///1238019742/
+/bf533-stamp.h///1238019742/
+/bf537-stamp.h///1238019742/
+/bf561-ezkit.h///1238019742/
+/bubinga.h///1238019742/
+/c2mon.h///1238019742/
+/canmb.h///1238019742/
+/canyonlands.h///1238019742/
+/cerf250.h///1238019742/
+/cm4008.h///1238019742/
+/cm41xx.h///1238019742/
+/cm5200.h///1238019742/
+/cmc_pu2.h///1238019742/
+/cmi_mpc5xx.h///1238019742/
+/cobra5272.h///1238019742/
+/cogent_common.h///1238019742/
+/cogent_mpc8260.h///1238019742/
+/cogent_mpc8xx.h///1238019742/
+/cpci5200.h///1238019742/
+/cradle.h///1238019744/
+/csb226.h///1238019744/
+/csb272.h///1238019744/
+/csb472.h///1238019744/
+/csb637.h///1238019744/
+/davinci_dvevm.h///1238019744/
+/davinci_schmoogie.h///1238019744/
+/davinci_sffsdr.h///1238019744/
+/davinci_sonata.h///1238019744/
+/dbau1x00.h///1238019744/
+/debris.h///1238019744/
+/delta.h///1238019744/
+/dnp1110.h///1238019744/
+/eNET.h///1238019744/
+/eXalion.h///1238019744/
+/ebony.h///1238019744/
+/ep7312.h///1238019744/
+/ep8248.h///1238019744/
+/ep8260.h///1238019744/
+/ep82xxm.h///1238019744/
+/evb4510.h///1238019744/
+/favr-32-ezkit.h///1238019744/
+/fx12mm.h///1238019744/
+/gcplus.h///1238019744/
+/gdppc440etx.h///1238019744/
+/gr_cpci_ax2000.h///1238019744/
+/gr_ep2s60.h///1238019744/
+/gr_xc3s_1500.h///1238019744/
+/grsim.h///1238019744/
+/grsim_leon2.h///1238019744/
+/gth2.h///1238019744/
+/gw8260.h///1238019744/
+/h2_p2_dbg_board.h///1238019744/
+/hammerhead.h///1238019744/
+/hcu4.h///1238019744/
+/hcu5.h///1238019744/
+/hermes.h///1238019744/
+/hmi1001.h///1238019744/
+/hymod.h///1238019744/
+/idmr.h///1238019745/
+/impa7.h///1238019745/
+/imx31_litekit.h///1238019745/
+/imx31_phycore.h///1238019745/
+/incaip.h///1238019745/
+/inka4x0.h///1238019745/
+/innokom.h///1238019745/
+/integratorap.h///1238019745/
+/integratorcp.h///1238019745/
+/ixdp425.h///1238019745/
+/ixdpg425.h///1238019745/
+/jupiter.h///1238019745/
+/katmai.h///1238019745/
+/kb9202.h///1238019745/
+/keymile-common.h///1238019745/
+/kilauea.h///1238019745/
+/km8xx.h///1238019745/
+/kmeter1.h///1238019745/
+/kmsupx4.h///1238019745/
+/korat.h///1238019745/
+/kvme080.h///1238019745/
+/lart.h///1238019745/
+/linkstation.h///1238019745/
+/logodl.h///1238019745/
+/lpc2292sodimm.h///1238019745/
+/lpd7a400-10.h///1238019745/
+/lpd7a400.h///1238019745/
+/lpd7a404-10.h///1238019745/
+/lpd7a404.h///1238019745/
+/luan.h///1238019745/
+/lubbock.h///1238019745/
+/lwmon.h///1238019745/
+/lwmon5.h///1238019745/
+/m501sk.h///1238019745/
+/makalu.h///1238019745/
+/mcc200.h///1238019745/
+/mcu25.h///1238019745/
+/mecp5200.h///1238019745/
+/mgcoge.h///1238019745/
+/mgsuvd.h///1238019745/
+/microblaze-generic.h///1238019745/
+/mimc200.h///1238019745/
+/ml300.h///1238019745/
+/ml507.h///1238019745/
+/modnet50.h///1238019745/
+/motionpro.h///1238019745/
+/mp2usb.h///1238019745/
+/mpc7448hpc2.h///1238019745/
+/mpr2.h///1238019746/
+/ms7720se.h///1238019746/
+/ms7722se.h///1238019746/
+/ms7750se.h///1238019746/
+/muas3001.h///1238019746/
+/mucmc52.h///1238019746/
+/munices.h///1238019746/
+/mx1ads.h///1238019746/
+/mx1fs2.h///1238019746/
+/mx31ads.h///1238019746/
+/neo.h///1238019746/
+/netstal-common.h///1238019746/
+/netstar.h///1238019746/
+/nmdk8815.h///1238019746/
+/ns9750dev.h///1238019746/
+/o2dnt.h///1238019746/
+/ocotea.h///1238019746/
+/omap1510.h///1238019746/
+/omap1510inn.h///1238019746/
+/omap1610h2.h///1238019746/
+/omap1610inn.h///1238019746/
+/omap2420h4.h///1238019746/
+/omap3_beagle.h///1238019746/
+/omap3_evm.h///1238019746/
+/omap3_overo.h///1238019746/
+/omap3_pandora.h///1238019746/
+/omap3_zoom1.h///1238019746/
+/omap5912osk.h///1238019746/
+/omap730.h///1238019746/
+/omap730p2.h///1238019746/
+/p3mx.h///1238019746/
+/p3p440.h///1238019746/
+/pb1x00.h///1238019747/
+/pcs440ep.h///1238019747/
+/pcu_e.h///1238019747/
+/pdnb3.h///1238019747/
+/pf5200.h///1238019747/
+/pleb2.h///1238019747/
+/ppmc7xx.h///1238019747/
+/ppmc8260.h///1238019747/
+/purple.h///1238019747/
+/pxa255_idp.h///1238019747/
+/qemu-mips.h///1238019747/
+/qong.h///1238019747/
+/quad100hd.h///1238019747/
+/quantum.h///1238019747/
+/r2dplus.h///1238019747/
+/r7780mp.h///1238019747/
+/redwood.h///1238019747/
+/rmu.h///1238019747/
+/rsdproto.h///1238019747/
+/rsk7203.h///1238019747/
+/sacsng.h///1238019747/
+/sbc2410x.h///1238019747/
+/sbc405.h///1238019747/
+/sbc8240.h///1238019747/
+/sbc8260.h///1238019747/
+/sbc8349.h///1238019747/
+/sbc8548.h///1238019747/
+/sbc8560.h///1238019747/
+/sbc8641d.h///1238019747/
+/sc3.h///1238019747/
+/sc520_cdp.h///1238019747/
+/sc520_spunk.h///1238019747/
+/sc520_spunk_rel.h///1238019747/
+/scb9328.h///1238019747/
+/sequoia.h///1238019747/
+/sh7763rdp.h///1238019747/
+/sh7785lcr.h///1238019747/
+/shannon.h///1238019747/
+/smdk2400.h///1238019747/
+/smdk2410.h///1238019747/
+/smdk6400.h///1238019747/
+/smmaco4.h///1238019747/
+/socrates.h///1238019747/
+/sorcery.h///1238019747/
+/spc1920.h///1238019747/
+/spieval.h///1238019747/
+/stxgp3.h///1238019747/
+/stxssa.h///1238019747/
+/stxxtc.h///1238019747/
+/suzaku.h///1238019747/
+/svm_sc8xx.h///1238019747/
+/taihu.h///1238019748/
+/taishan.h///1238019748/
+/tb0229.h///1238019748/
+/trab.h///1238019748/
+/trizepsiv.h///1238019748/
+/uc100.h///1238019748/
+/uc101.h///1238019748/
+/utx8245.h///1238019748/
+/v37.h///1238019748/
+/v38b.h///1238019748/
+/v5fx30teval.h///1238019748/
+/vct.h///1238019748/
+/versatile.h///1238019748/
+/virtlab2.h///1238019748/
+/voiceblue.h///1238019748/
+/walnut.h///1238019748/
+/wepep250.h///1238019748/
+/xaeniax.h///1238019748/
+/xilinx-ppc.h///1238019748/
+/xilinx-ppc405-generic.h///1238019748/
+/xilinx-ppc405.h///1238019748/
+/xilinx-ppc440-generic.h///1238019748/
+/xilinx-ppc440.h///1238019748/
+/xm250.h///1238019748/
+/xsengine.h///1238019748/
+/yosemite.h///1238019748/
+/yucca.h///1238019748/
+/zeus.h///1238019748/
+/zylonite.h///1238019748/
+/barco.h///1238019742/
+/DB64360.h///1238019744/
+/METROBOX.h///1238028711/
+/de1_or1k.h///1238028711/
+/KAREF.h///1238019745/
diff -Naur u-boot-2009.03_orig/include/configs/CVS/Entries.Old u-boot-2009.03/include/configs/CVS/Entries.Old
--- u-boot-2009.03_orig/include/configs/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/configs/CVS/Entries.Old 2009-03-31 15:00:45.000000000 -0700
@@ -0,0 +1,477 @@
+/A3000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADCIOP.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADNPESC1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADNPESC1_base_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ADS860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AMX860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AP1000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/APC405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AR405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ASH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ATUM8548.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Adder.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AdderUSB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Alaska8220.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/AmigaOneG3SE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/B2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BAB7xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BC3450.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/BMW.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CANBT.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CATcenter.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CCM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CMS700.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPC45.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI2DP.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI4052.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI405AB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI405DT.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCI750.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPCIISER4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPU86.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CPU87.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CRAYL1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/CU824.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DASA_SIM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DB64460.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1C20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1C20_safe_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1C20_standard_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10_mtx_ldk_20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10_safe_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DK1S10_standard_32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DP405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DU405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/DU440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EB+MCF-EV123.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ELPPC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ELPT860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP1C20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP1S10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP1S40.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EP88x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ERIC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ESTEEM192E.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ETX094.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EVB64260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/EXBITGEN.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FADS823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FADS850SAR.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FADS860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FLAGADM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FPS850L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/FPS860L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/G2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/GEN860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/GENIETV.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/GTH.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HIDDEN_DRAGON.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HMI10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/HUB405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IAD210.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ICU862.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IDS8247.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IP860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IPHASE4539.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ISPAN.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IVML24.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IVMS8.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/IceCube.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/JSE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/KUP4K.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/KUP4X.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LANTEC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M52277EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5235EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5249EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5253DEMO.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5253EVBE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5271EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5272C3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5275EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5282EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M53017EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5329EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5373EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M54451EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M54455EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5475EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/M5485EVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MBX.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MBX860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MHPC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MIP405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ML2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MOUSSE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8260ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8266ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8313ERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8315ERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8323ERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC832XEMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8349EMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8349ITX.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8360EMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8360ERDK.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC837XEMDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC837XERDB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8536DS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8540ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8540EVAL.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8541CDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8544DS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8548CDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8555CDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8560ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8568MDS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8572DS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8610HPCD.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC8641HPCN.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC86xADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MPC885ADS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MUSENKI.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVBC_P.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVBLM7.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVBLUE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MVS1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/MigoR.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NC650.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETPHONE.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETTA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETTA2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NETVIA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NSCU.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/NX823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/OCRTC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ORSG.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/OXC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/P3G4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PATI.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCI405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCI5441.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCIPPC2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PCIPPC6.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PIP405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PK1C20.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PLU405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM520.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM826.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM828.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM854.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PM856.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PMC405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PMC440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PN62.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/PPChameleonEVB.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/QS823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/QS850.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/QS860T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/R360MPI.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RBC823.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXClassic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXlite.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXlite_DW.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RPXsuper.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/RRvision.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Rattler.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SBC8540.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SCM.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SIMPC8313.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SL8245.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SM850.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SMN42.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SPD823TS.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SX1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/SXNI855T.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Sandpoint8240.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Sandpoint8245.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TASREG.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TB5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TK885D.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TOP5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TOP860.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM823L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM823M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM8272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM834x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM850L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM850M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM855L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM855M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM85xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM860L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM860M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM862L.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM862M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM866M.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/TQM885D.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Total5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VCMA9.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VOH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VOM405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/VoVPN-GW.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/W7OLMC.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/W7OLMG.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/WUH405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/XPEDITE1K.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/XPEDITE5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/XPEDITE5370.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Yukon8220.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ZPC1900.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ZUMA.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/acadia.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/actux4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ads5121.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/aev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/afeb9260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/alpr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/amcc-common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ap325rxa.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/apollon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/armadillo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/assabet.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91cap9adk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91rm9200dk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9260ek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9261ek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9263ek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/at91sam9rlek.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atngw100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1002.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1003.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1004.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/atstk1006.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bamboo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf533-ezkit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf533-stamp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf537-stamp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bf561-ezkit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bubinga.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/c2mon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canmb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/canyonlands.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cerf250.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm4008.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm41xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cm5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmc_pu2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmi_mpc5xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cobra5272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cogent_common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cogent_mpc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cogent_mpc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpci5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cradle.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb226.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb272.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb472.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/csb637.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_dvevm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_schmoogie.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_sffsdr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/davinci_sonata.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dbau1x00.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/debris.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/delta.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dnp1110.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eNET.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eXalion.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ebony.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep7312.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep8248.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ep82xxm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/evb4510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/favr-32-ezkit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fx12mm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gcplus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gdppc440etx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_cpci_ax2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_ep2s60.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gr_xc3s_1500.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/grsim.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/grsim_leon2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gth2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gw8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/h2_p2_dbg_board.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hammerhead.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hcu4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hcu5.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hermes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hmi1001.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/hymod.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/idmr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/impa7.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/imx31_litekit.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/imx31_phycore.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/incaip.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inka4x0.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/innokom.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/integratorap.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/integratorcp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ixdp425.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ixdpg425.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/jupiter.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/katmai.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kb9202.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/keymile-common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kilauea.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/km8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kmeter1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kmsupx4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/korat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kvme080.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lart.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/linkstation.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/logodl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpc2292sodimm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a400-10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a404-10.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lpd7a404.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/luan.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lubbock.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lwmon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lwmon5.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/m501sk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/makalu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcc200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mcu25.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mecp5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mgcoge.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mgsuvd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/microblaze-generic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mimc200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ml300.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ml507.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/modnet50.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/motionpro.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mp2usb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc7448hpc2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpr2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7720se.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7722se.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ms7750se.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/muas3001.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mucmc52.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/munices.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx1ads.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx1fs2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mx31ads.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/neo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netstal-common.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netstar.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nmdk8815.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ns9750dev.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/o2dnt.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ocotea.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1510.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1510inn.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1610h2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap1610inn.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap2420h4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_beagle.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_evm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_overo.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_pandora.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap3_zoom1.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap5912osk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap730.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/omap730p2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3mx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/p3p440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pb1x00.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcs440ep.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pcu_e.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pdnb3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pf5200.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pleb2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppmc7xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppmc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/purple.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pxa255_idp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qemu-mips.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/qong.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/quad100hd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/quantum.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r2dplus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/r7780mp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/redwood.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rmu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rsdproto.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rsk7203.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sacsng.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc2410x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8240.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8260.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8349.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8548.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8560.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sbc8641d.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_cdp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_spunk.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sc520_spunk_rel.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/scb9328.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sequoia.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh7763rdp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sh7785lcr.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/shannon.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk2400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk2410.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smdk6400.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/smmaco4.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/socrates.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sorcery.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spc1920.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spieval.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxgp3.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxssa.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stxxtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/suzaku.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/svm_sc8xx.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/taihu.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/taishan.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tb0229.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/trab.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/trizepsiv.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uc100.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uc101.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/utx8245.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v37.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v38b.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/v5fx30teval.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vct.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/versatile.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/virtlab2.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/voiceblue.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/walnut.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/wepep250.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xaeniax.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc405-generic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc405.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc440-generic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xilinx-ppc440.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xm250.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/xsengine.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yosemite.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yucca.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zeus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zylonite.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/barco.h/1.1.1.1/Thu Mar 26 00:37:22 2009//
+/DB64360.h/1.1.1.1/Thu Mar 26 00:37:43 2009//
+/METROBOX.h/1.2/Thu Mar 26 00:51:51 2009//
+/de1_or1k.h/1.2/Thu Mar 26 00:39:02 2009//
+/KAREF.h/1.1.1.1/Tue Mar 31 22:00:45 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/include/configs/CVS/Repository u-boot-2009.03/include/configs/CVS/Repository
--- u-boot-2009.03_orig/include/configs/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/configs/CVS/Repository 2009-03-25 15:25:49.321627600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/configs
diff -Naur u-boot-2009.03_orig/include/configs/CVS/Root u-boot-2009.03/include/configs/CVS/Root
--- u-boot-2009.03_orig/include/configs/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/configs/CVS/Root 2009-03-25 15:25:49.306002700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/configs/DB64360.h u-boot-2009.03/include/configs/DB64360.h
--- u-boot-2009.03_orig/include/configs/DB64360.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/configs/DB64360.h 2009-03-25 17:37:43.255222400 -0700
@@ -1,607 +1,610 @@
-/*
- * (C) Copyright 2001
- * Josh Huber <huber@mclx.com>, Mission Critical Linux, Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- */
-
-/*
- * board/config.h - configuration options, board specific
- */
-
-/*************************************************************************
- * (c) 2002 Datentechnik AG - Project: Dino
- *
- *
- * $Id: DB64360.h,v 1.3 2003/04/26 04:58:13 brad Exp $
- *
- ************************************************************************/
-
-/*************************************************************************
- *
- * History:
- *
- * $Log: DB64360.h,v $
- * Revision 1.3 2003/04/26 04:58:13 brad
- * Cosmetic changes and compiler warning cleanups
- *
- * Revision 1.2 2003/04/23 15:48:15 ingo
- * mem. map output added
- *
- * Revision 1.1 2003/04/17 09:31:42 ias
- * keymile changes 17_04_2003
- *
- * Revision 1.10 2003/03/06 12:25:04 ias
- * 750 FX CPU HID settings updated
- *
- * Revision 1.9 2003/03/03 16:14:36 ias
- * cleanup compiler warnings of printf fuctions
- *
- * Revision 1.8 2003/03/03 15:11:44 ias
- * Marvell MPSC-UART is working
- *
- * Revision 1.7 2003/02/26 12:15:45 ssu
- * adapted default parameters to new board flash address
- *
- * Revision 1.6 2003/02/25 14:55:42 ssu
- * changed default environment parameters
- *
- * Revision 1.5 2003/02/21 17:14:23 ias
- * added extended SPD handling
- *
- * Revision 1.4 2003/01/14 09:16:08 ias
- * PPCBoot for Marvel Beta 0.9
- *
- * Revision 1.3 2002/12/03 13:56:26 ias
- * Environment in flash support added
- *
- * Revision 1.2 2002/11/29 16:53:29 ias
- * Flash support for STM added
- *
- * Revision 1.1 2002/11/29 13:36:31 ias
- * Revision 0.1 of PPCBOOT (1.1.5) for Marvell DB64360 IBM750FX Board
- * - working DDRRAM (only 32MByte of 128MB Modul)
- * - working I2C Driver for SPD EEPROM read
- * - working DUART 16650 for Serial Console
- * - working "console"
- *
- *
- *
- ************************************************************************/
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/* This define must be before the core.h include */
-#define CONFIG_DB64360 1 /* this is an DB64360 board */
-
-#ifndef __ASSEMBLY__
-#include "../board/Marvell/include/core.h"
-#endif
-
-/*-----------------------------------------------------*/
-/* #include "../board/db64360/local.h" */
-#ifndef __LOCAL_H
-#define __LOCAL_H
-
-/* first ethernet */
-#define CONFIG_ETHADDR 64:36:00:00:00:01
- /* next two ethernet hwaddrs */
-#define CONFIG_HAS_ETH1
-#define CONFIG_ETH1ADDR 64:36:00:00:00:02
-/* in the atlantis 64360 we have only 2 ETH port on the board,
-if we use PCI it has its own MAC addr */
-
-#define CONFIG_ENV_OVERWRITE
-#endif /* __CONFIG_H */
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-
-#define CONFIG_74xx /* we have a 750FX (override local.h) */
-
-#define CONFIG_DB64360 1 /* this is an DB64360 board */
-
-#define CONFIG_BAUDRATE 115200 /* console baudrate = 115000 */
-/*ronen - we don't use the global CONFIG_ECC, since in the global ecc we initialize the
- DRAM for ECC in the phase we are relocating to it, which isn't so sufficient.
- so we will define our ECC CONFIG and initilize the DRAM for ECC in the DRAM initialization phase,
- see sdram_init.c */
-#undef CONFIG_ECC /* enable ECC support */
-#define CONFIG_MV64360_ECC
-
-/* which initialization functions to call for this board */
-#define CONFIG_MISC_INIT_R /* initialize the icache L1 */
-#define CONFIG_BOARD_EARLY_INIT_F
-
-#define CONFIG_SYS_BOARD_NAME "DB64360"
-#define CONFIG_IDENT_STRING "Marvell DB64360 (1.1)"
-
-/*#define CONFIG_SYS_HUSH_PARSER */
-#undef CONFIG_SYS_HUSH_PARSER
-
-#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
-
-/*
- * The following defines let you select what serial you want to use
- * for your console driver.
- *
- * what to do:
- * to use the DUART, undef CONFIG_MPSC. If you have hacked a serial
- * cable onto the second DUART channel, change the CONFIG_SYS_DUART port from 1
- * to 0 below.
- *
- * to use the MPSC, #define CONFIG_MPSC. If you have wired up another
- * mpsc channel, change CONFIG_MPSC_PORT to the desired value.
- */
-
-#define CONFIG_MPSC_PORT 0
-
-/* to change the default ethernet port, use this define (options: 0, 1, 2) */
-#define CONFIG_NET_MULTI
-#define MV_ETH_DEVS 2
-
-/* #undef CONFIG_ETHER_PORT_MII */
-#if 0
-#define CONFIG_BOOTDELAY -1 /* autoboot disabled */
-#else
-#define CONFIG_BOOTDELAY 3 /* autoboot after 5 seconds */
-#endif
-#define CONFIG_ZERO_BOOTDELAY_CHECK
-
-
-#undef CONFIG_BOOTARGS
-/*#define CONFIG_PREBOOT "echo;echo Type \\\"run flash_nfs\\\" to mount root filesystem over NFS;echo" */
-
-/* ronen - autoboot using tftp */
-#if (CONFIG_BOOTDELAY >= 0)
-#define CONFIG_BOOTCOMMAND "tftpboot 0x400000 uImage;\
- setenv bootargs ${bootargs} ${bootargs_root} nfsroot=${serverip}:${rootpath} \
- ip=${ipaddr}:${serverip}${bootargs_end}; bootm 0x400000; "
-
-#define CONFIG_BOOTARGS "console=ttyS0,115200"
-
-#endif
-
-/* ronen - the u-boot.bin should be ~0x30000 bytes */
-#define CONFIG_EXTRA_ENV_SETTINGS \
- "burn_uboot_sep= tftp 100000 u-boot.bin;protect off all;era FFF00000 FFF4ffff; \
-cp.b 100000 FFF00000 0x40000;protect on 1:0-4;\0" \
- "burn_uboot_dep= tftp 100000 u-boot.bin;protect off all;era FFF00000 FFF7ffff; \
-cp.b 100000 FFF00000 0x40000;protect on 1:0-7;\0" \
- "bootargs_root=root=/dev/nfs rw\0" \
- "bootargs_end=:::DB64360:eth0:none \0"\
- "ethprime=mv_enet0\0"\
- "standalone=fsload 0x400000 uImage;setenv bootargs ${bootargs} root=/dev/mtdblock/0 rw \
-ip=${ipaddr}:${serverip}${bootargs_end}; bootm 0x400000;\0"
-
-/* --------------------------------------------------------------------------------------------------------------- */
-/* New bootcommands for Marvell DB64360 c 2002 Ingo Assmus */
-
-#define CONFIG_IPADDR 10.2.40.90
-
-#define CONFIG_SERIAL "No. 1"
-#define CONFIG_SERVERIP 10.2.1.126
-#define CONFIG_ROOTPATH /mnt/yellow_dog_mini
-
-
-#define CONFIG_TESTDRAMDATA y
-#define CONFIG_TESTDRAMADDRESS n
-#define CONFIG_TESETDRAMWALK n
-
-/* --------------------------------------------------------------------------------------------------------------- */
-
-#define CONFIG_LOADS_ECHO 0 /* echo off for serial download */
-#define CONFIG_SYS_LOADS_BAUD_CHANGE /* allow baudrate changes */
-
-#undef CONFIG_WATCHDOG /* watchdog disabled */
-#undef CONFIG_ALTIVEC /* undef to disable */
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_SUBNETMASK
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_BOOTFILESIZE
-
-
-/*
- * JFFS2 partitions
- *
- */
-/* No command line, one static partition, whole device */
-#undef CONFIG_JFFS2_CMDLINE
-#define CONFIG_JFFS2_DEV "nor1"
-#define CONFIG_JFFS2_PART_SIZE 0xFFFFFFFF
-#define CONFIG_JFFS2_PART_OFFSET 0x00000000
-
-/* mtdparts command line support */
-
-/* Use first bank for JFFS2, second bank contains U-Boot.
- *
- * Note: fake mtd_id's used, no linux mtd map file.
- */
-/*
-#define CONFIG_JFFS2_CMDLINE
-#define MTDIDS_DEFAULT "nor1=db64360-1"
-#define MTDPARTS_DEFAULT "mtdparts=db64360-1:-(jffs2)"
-*/
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_ASKENV
-#define CONFIG_CMD_I2C
-#define CONFIG_CMD_EEPROM
-#define CONFIG_CMD_CACHE
-#define CONFIG_CMD_JFFS2
-#define CONFIG_CMD_PCI
-#define CONFIG_CMD_NET
-
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
-#define CONFIG_SYS_I2C_MULTI_EEPROMS
-#define CONFIG_SYS_I2C_SPEED 40000 /* I2C speed default */
-
-/* #define CONFIG_SYS_GT_DUAL_CPU also for JTAG even with one cpu */
-#define CONFIG_SYS_LONGHELP /* undef to save memory */
-#define CONFIG_SYS_PROMPT "=> " /* Monitor Command Prompt */
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
-#else
-#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
-#endif
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
-#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
-
-/*#define CONFIG_SYS_MEMTEST_START 0x00400000 memtest works on */
-/*#define CONFIG_SYS_MEMTEST_END 0x00C00000 4 ... 12 MB in DRAM */
-/*#define CONFIG_SYS_MEMTEST_END 0x07c00000 4 ... 124 MB in DRAM */
-
-/*
-#define CONFIG_SYS_DRAM_TEST
- * DRAM tests
- * CONFIG_SYS_DRAM_TEST - enables the following tests.
- *
- * CONFIG_SYS_DRAM_TEST_DATA - Enables test for shorted or open data lines
- * Environment variable 'test_dram_data' must be
- * set to 'y'.
- * CONFIG_SYS_DRAM_TEST_DATA - Enables test to verify that each word is uniquely
- * addressable. Environment variable
- * 'test_dram_address' must be set to 'y'.
- * CONFIG_SYS_DRAM_TEST_WALK - Enables test a 64-bit walking ones pattern test.
- * This test takes about 6 minutes to test 64 MB.
- * Environment variable 'test_dram_walk' must be
- * set to 'y'.
- */
-#define CONFIG_SYS_DRAM_TEST
-#if defined(CONFIG_SYS_DRAM_TEST)
-#define CONFIG_SYS_MEMTEST_START 0x00400000 /* memtest works on */
-/* #define CONFIG_SYS_MEMTEST_END 0x00C00000 4 ... 12 MB in DRAM */
-#define CONFIG_SYS_MEMTEST_END 0x07c00000 /* 4 ... 124 MB in DRAM */
-#define CONFIG_SYS_DRAM_TEST_DATA
-#define CONFIG_SYS_DRAM_TEST_ADDRESS
-#define CONFIG_SYS_DRAM_TEST_WALK
-#endif /* CONFIG_SYS_DRAM_TEST */
-
-#undef CONFIG_DISPLAY_MEMMAP /* at the end of the bootprocess show the memory map */
-#undef CONFIG_SYS_DISPLAY_DIMM_SPD_CONTENT /* show SPD content during boot */
-
-#define CONFIG_SYS_LOAD_ADDR 0x00400000 /* default load address */
-
-#define CONFIG_SYS_HZ 1000 /* decr freq: 1ms ticks */
-/*ronen - this the Sys clock (cpu bus,internal dram and SDRAM) */
-#define CONFIG_SYS_BUS_HZ 133000000 /* 133 MHz (CPU = 5*Bus = 666MHz) */
-#define CONFIG_SYS_BUS_CLK CONFIG_SYS_BUS_HZ
-
-#define CONFIG_SYS_DDR_SDRAM_CYCLE_COUNT_LOP 7 /* define the SDRAM cycle count */
-#define CONFIG_SYS_DDR_SDRAM_CYCLE_COUNT_ROP 50 /* for 400MHZ -> 5.0 ns, for 133MHZ -> 7.50 ns */
-
-/*ronen - this is the Tclk (MV64360 core) */
-#define CONFIG_SYS_TCLK 133000000
-
-
-#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, 230400 }
-
-#define CONFIG_SYS_750FX_HID0 0x8000c084
-#define CONFIG_SYS_750FX_HID1 0x54800000
-#define CONFIG_SYS_750FX_HID2 0x00000000
-
-/*
- * Low Level Configuration Settings
- * (address mappings, register initial values, etc.)
- * You should know what you are doing if you make changes here.
- */
-
-/*-----------------------------------------------------------------------
- * Definitions for initial stack pointer and data area
- */
-
-/*
- * When locking data in cache you should point the CONFIG_SYS_INIT_RAM_ADDRESS
- * To an unused memory region. The stack will remain in cache until RAM
- * is initialized
-*/
-#define CONFIG_SYS_INIT_RAM_LOCK
-#define CONFIG_SYS_INIT_RAM_ADDR 0x40000000 /* unused memory region */
-#define CONFIG_SYS_INIT_RAM_END 0x1000
-#define CONFIG_SYS_GBL_DATA_SIZE 128 /* size in bytes reserved for init data */
-#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
-
-#define RELOCATE_INTERNAL_RAM_ADDR
-#ifdef RELOCATE_INTERNAL_RAM_ADDR
- #define CONFIG_SYS_INTERNAL_RAM_ADDR 0xf8000000
-#endif
-
-/*-----------------------------------------------------------------------
- * Start addresses for the final memory configuration
- * (Set up by the startup code)
- * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0
- */
-#define CONFIG_SYS_SDRAM_BASE 0x00000000
-/* Dummies for BAT 4-7 */
-#define CONFIG_SYS_SDRAM1_BASE 0x10000000 /* each 256 MByte */
-#define CONFIG_SYS_SDRAM2_BASE 0x20000000
-#define CONFIG_SYS_SDRAM3_BASE 0x30000000
-#define CONFIG_SYS_SDRAM4_BASE 0x40000000
-#define CONFIG_SYS_FLASH_BASE 0xfff00000
-
-#define CONFIG_SYS_DFL_BOOTCS_BASE 0xff800000
-#define CONFIG_VERY_BIG_RAM /* we will use up to 256M memory for cause we are short of BATS*/
-
-#define BRIDGE_REG_BASE_BOOTM 0xfbe00000 /* this paramaters are used when booting the linux kernel */
-#define UART_BASE_BOOTM 0xfbb00000 /* in order to be sync with the kernel parameters. */
-#define PCI0_IO_BASE_BOOTM 0xfd000000
-
-#define CONFIG_SYS_RESET_ADDRESS 0xfff00100
-#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 256 kB for Monitor */
-#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
-#define CONFIG_SYS_MALLOC_LEN (256 << 10) /* Reserve 256 kB for malloc */
-
-/* areas to map different things with the GT in physical space */
-#define CONFIG_SYS_DRAM_BANKS 4
-
-/* What to put in the bats. */
-#define CONFIG_SYS_MISC_REGION_BASE 0xf0000000
-
-/* Peripheral Device section */
-
-/*******************************************************/
-/* We have on the db64360 Board : */
-/* GT-Chipset Register Area */
-/* GT-Chipset internal SRAM 256k */
-/* SRAM on external device module */
-/* Real time clock on external device module */
-/* dobble UART on external device module */
-/* Data flash on external device module */
-/* Boot flash on external device module */
-/*******************************************************/
-#define CONFIG_SYS_DFL_GT_REGS 0x14000000 /* boot time GT_REGS */
-#define CONFIG_SYS_DB64360_RESET_ADDR 0x14000000 /* After power on Reset the DB64360 is here */
-
-/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
-#define CONFIG_SYS_GT_REGS 0xf1000000 /* GT Registers will be mapped here */
-#define CONFIG_SYS_DEV_BASE 0xfc000000 /* GT Devices CS start here */
-
-#define CONFIG_SYS_DEV0_SPACE CONFIG_SYS_DEV_BASE /* DEV_CS0 device modul sram */
-#define CONFIG_SYS_DEV1_SPACE (CONFIG_SYS_DEV0_SPACE + CONFIG_SYS_DEV0_SIZE) /* DEV_CS1 device modul real time clock (rtc) */
-#define CONFIG_SYS_DEV2_SPACE (CONFIG_SYS_DEV1_SPACE + CONFIG_SYS_DEV1_SIZE) /* DEV_CS2 device modul doubel uart (duart) */
-#define CONFIG_SYS_DEV3_SPACE (CONFIG_SYS_DEV2_SPACE + CONFIG_SYS_DEV2_SIZE) /* DEV_CS3 device modul large flash */
-
-#define CONFIG_SYS_DEV0_SIZE _8M /* db64360 sram @ 0xfc00.0000 */
-#define CONFIG_SYS_DEV1_SIZE _8M /* db64360 rtc @ 0xfc80.0000 */
-#define CONFIG_SYS_DEV2_SIZE _16M /* db64360 duart @ 0xfd00.0000 */
-#define CONFIG_SYS_DEV3_SIZE _16M /* db64360 flash @ 0xfe00.0000 */
-/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
-
-/* Reset values for Port behavior (8bit/ 32bit, etc.) only corrected by device width */
-#define CONFIG_SYS_DEV0_PAR 0x8FEFFFFF /* 32Bit sram */
-#define CONFIG_SYS_DEV1_PAR 0x8FCFFFFF /* 8Bit rtc */
-#define CONFIG_SYS_DEV2_PAR 0x8FCFFFFF /* 8Bit duart */
-#define CONFIG_SYS_8BIT_BOOT_PAR 0x8FCFFFFF /* 8Bit flash */
-#define CONFIG_SYS_32BIT_BOOT_PAR 0x8FEFFFFF /* 32Bit flash */
-
- /* c 4 a 8 2 4 1 c */
- /* 33 22|2222|22 22|111 1|11 11|1 1 | | */
- /* 10 98|7654|32 10|987 6|54 32|1 098|7 654|3 210 */
- /* 11|00|0100|10 10|100|0 00|10 0|100 0|001 1|100 */
- /* 3| 0|.... ..| 2| 4 | 0 | 4 | 8 | 3 | 4 */
-
-
-/* ronen - update MPP Control MV64360*/
-#define CONFIG_SYS_MPP_CONTROL_0 0x02222222
-#define CONFIG_SYS_MPP_CONTROL_1 0x11333011
-#define CONFIG_SYS_MPP_CONTROL_2 0x40431111
-#define CONFIG_SYS_MPP_CONTROL_3 0x00000044
-
-/*# define CONFIG_SYS_SERIAL_PORT_MUX 0x00000102 0=hiZ 1=MPSC0 2=ETH 0 and 2 RMII */
-
-
-# define CONFIG_SYS_GPP_LEVEL_CONTROL 0x2c600000 /* 1111 1001 0000 1111 1100 0000 0000 0000*/
- /* gpp[31] gpp[30] gpp[29] gpp[28] */
- /* gpp[27] gpp[24]*/
- /* gpp[19:14] */
-
-/* setup new config_value for MV64360 DDR-RAM !! */
-# define CONFIG_SYS_SDRAM_CONFIG 0x58200400 /* 0x1400 copied from Dink32 bzw. VxWorks*/
-
-#define CONFIG_SYS_DUART_IO CONFIG_SYS_DEV2_SPACE
-#define CONFIG_SYS_DUART_CHAN 1 /* channel to use for console */
-#define CONFIG_SYS_INIT_CHAN1
-#define CONFIG_SYS_INIT_CHAN2
-
-#define SRAM_BASE CONFIG_SYS_DEV0_SPACE
-#define SRAM_SIZE 0x00100000 /* 1 MB of sram */
-
-
-/*-----------------------------------------------------------------------
- * PCI stuff
- *-----------------------------------------------------------------------
- */
-
-#define PCI_HOST_ADAPTER 0 /* configure ar pci adapter */
-#define PCI_HOST_FORCE 1 /* configure as pci host */
-#define PCI_HOST_AUTO 2 /* detected via arbiter enable */
-
-#define CONFIG_PCI /* include pci support */
-#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */
-#define CONFIG_PCI_PNP /* do pci plug-and-play */
-#define CONFIG_EEPRO100 /* ronen - Support for Intel 82557/82559/82559ER chips */
-
-/* PCI MEMORY MAP section */
-#define CONFIG_SYS_PCI0_MEM_BASE 0x80000000
-#define CONFIG_SYS_PCI0_MEM_SIZE _128M
-#define CONFIG_SYS_PCI1_MEM_BASE 0x88000000
-#define CONFIG_SYS_PCI1_MEM_SIZE _128M
-
-#define CONFIG_SYS_PCI0_0_MEM_SPACE (CONFIG_SYS_PCI0_MEM_BASE)
-#define CONFIG_SYS_PCI1_0_MEM_SPACE (CONFIG_SYS_PCI1_MEM_BASE)
-
-/* PCI I/O MAP section */
-#define CONFIG_SYS_PCI0_IO_BASE 0xfa000000
-#define CONFIG_SYS_PCI0_IO_SIZE _16M
-#define CONFIG_SYS_PCI1_IO_BASE 0xfb000000
-#define CONFIG_SYS_PCI1_IO_SIZE _16M
-
-#define CONFIG_SYS_PCI0_IO_SPACE (CONFIG_SYS_PCI0_IO_BASE)
-#define CONFIG_SYS_PCI0_IO_SPACE_PCI (CONFIG_SYS_PCI0_IO_BASE) /* ronen we want phy=bus 0x00000000 */
-#define CONFIG_SYS_PCI1_IO_SPACE (CONFIG_SYS_PCI1_IO_BASE)
-#define CONFIG_SYS_PCI1_IO_SPACE_PCI (CONFIG_SYS_PCI1_IO_BASE) /* ronen we want phy=bus 0x00000000 */
-
-#if defined (CONFIG_750CX)
-#define CONFIG_SYS_PCI_IDSEL 0x0
-#else
-#define CONFIG_SYS_PCI_IDSEL 0x30
-#endif
-/*----------------------------------------------------------------------
- * Initial BAT mappings
- */
-
-/* NOTES:
- * 1) GUARDED and WRITE_THRU not allowed in IBATS
- * 2) CACHEINHIBIT and WRITETHROUGH not allowed together in same BAT
- */
-
-/* SDRAM */
-#define CONFIG_SYS_IBAT0L (CONFIG_SYS_SDRAM_BASE | BATL_PP_RW | BATL_CACHEINHIBIT)
-#define CONFIG_SYS_IBAT0U (CONFIG_SYS_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
-#define CONFIG_SYS_DBAT0L (CONFIG_SYS_SDRAM_BASE | BATL_PP_RW | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
-#define CONFIG_SYS_DBAT0U CONFIG_SYS_IBAT0U
-
-/* init ram */
-#define CONFIG_SYS_IBAT1L (CONFIG_SYS_INIT_RAM_ADDR | BATL_PP_RW | BATL_MEMCOHERENCE)
-#define CONFIG_SYS_IBAT1U (CONFIG_SYS_INIT_RAM_ADDR | BATU_BL_256K | BATU_VS | BATU_VP)
-#define CONFIG_SYS_DBAT1L CONFIG_SYS_IBAT1L
-#define CONFIG_SYS_DBAT1U CONFIG_SYS_IBAT1U
-
-/* PCI0, PCI1 in one BAT */
-#define CONFIG_SYS_IBAT2L BATL_NO_ACCESS
-#define CONFIG_SYS_IBAT2U CONFIG_SYS_DBAT2U
-#define CONFIG_SYS_DBAT2L (CONFIG_SYS_PCI0_MEM_BASE | BATL_CACHEINHIBIT | BATL_PP_RW | BATL_GUARDEDSTORAGE)
-#define CONFIG_SYS_DBAT2U (CONFIG_SYS_PCI0_MEM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
-
-/* GT regs, bootrom, all the devices, PCI I/O */
-#define CONFIG_SYS_IBAT3L (CONFIG_SYS_MISC_REGION_BASE | BATL_CACHEINHIBIT | BATL_PP_RW)
-#define CONFIG_SYS_IBAT3U (CONFIG_SYS_MISC_REGION_BASE | BATU_VS | BATU_VP | BATU_BL_256M)
-#define CONFIG_SYS_DBAT3L (CONFIG_SYS_MISC_REGION_BASE | BATL_CACHEINHIBIT | BATL_PP_RW | BATL_GUARDEDSTORAGE)
-#define CONFIG_SYS_DBAT3U CONFIG_SYS_IBAT3U
-
-/* I2C addresses for the two DIMM SPD chips */
-#define DIMM0_I2C_ADDR 0x56
-#define DIMM1_I2C_ADDR 0x54
-
-/*
- * For booting Linux, the board info and command line data
- * have to be in the first 8 MB of memory, since this is
- * the maximum mapped by the Linux kernel during initialization.
- */
-#define CONFIG_SYS_BOOTMAPSZ (8<<20) /* Initial Memory map for Linux */
-
-/*-----------------------------------------------------------------------
- * FLASH organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of memory banks */
-#define CONFIG_SYS_MAX_FLASH_SECT 67 /* max number of sectors on one chip */
-
-#define CONFIG_SYS_EXTRA_FLASH_DEVICE DEVICE3 /* extra flash at device 3 */
-#define CONFIG_SYS_EXTRA_FLASH_WIDTH 4 /* 32 bit */
-#define CONFIG_SYS_BOOT_FLASH_WIDTH 1 /* 8 bit */
-
-#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */
-#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */
-#define CONFIG_SYS_FLASH_LOCK_TOUT 500 /* Timeout for Flash Lock (in ms) */
-#define CONFIG_SYS_FLASH_CFI 1
-
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_SIZE 0x1000 /* Total Size of Environment Sector */
-#define CONFIG_ENV_SECT_SIZE 0x10000
-#define CONFIG_ENV_ADDR 0xFFF78000 /* Marvell 8-Bit Bootflash last sector */
-/* #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE+CONFIG_SYS_MONITOR_LEN-CONFIG_ENV_SECT_SIZE) */
-
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CONFIG_SYS_CACHELINE_SIZE 32 /* For all MPC74xx CPUs */
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_SYS_CACHELINE_SHIFT 5 /* log base 2 of the above value */
-#endif
-
-/*-----------------------------------------------------------------------
- * L2CR setup -- make sure this is right for your board!
- * look in include/mpc74xx.h for the defines used here
- */
-
-#define CONFIG_SYS_L2
-
-
-#if defined (CONFIG_750CX) || defined (CONFIG_750FX)
-#define L2_INIT 0
-#else
-
-#define L2_INIT 0
-/*
-#define L2_INIT (L2CR_L2SIZ_2M | L2CR_L2CLK_3 | L2CR_L2RAM_BURST | \
- L2CR_L2OH_5 | L2CR_L2CTL | L2CR_L2WT)
-*/
-#endif
-
-#define L2_ENABLE (L2_INIT | L2CR_L2E)
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
-#define BOOTFLAG_WARM 0x02 /* Software reboot */
-
-#define CONFIG_SYS_BOARD_ASM_INIT 1
-
-#endif /* __CONFIG_H */
+/*
+ * (C) Copyright 2001
+ * Josh Huber <huber@mclx.com>, Mission Critical Linux, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+/*************************************************************************
+ * (c) 2002 Datentechnik AG - Project: Dino
+ *
+ *
+ * $Id: DB64360.h,v 1.1.1.1 2009/03/25 22:22:24 kenagy Exp $
+ *
+ ************************************************************************/
+
+/*************************************************************************
+ *
+ * History:
+ *
+ * $Log: DB64360.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:24 kenagy
+ * no message
+ *
+ * Revision 1.3 2003/04/26 04:58:13 brad
+ * Cosmetic changes and compiler warning cleanups
+ *
+ * Revision 1.2 2003/04/23 15:48:15 ingo
+ * mem. map output added
+ *
+ * Revision 1.1 2003/04/17 09:31:42 ias
+ * keymile changes 17_04_2003
+ *
+ * Revision 1.10 2003/03/06 12:25:04 ias
+ * 750 FX CPU HID settings updated
+ *
+ * Revision 1.9 2003/03/03 16:14:36 ias
+ * cleanup compiler warnings of printf fuctions
+ *
+ * Revision 1.8 2003/03/03 15:11:44 ias
+ * Marvell MPSC-UART is working
+ *
+ * Revision 1.7 2003/02/26 12:15:45 ssu
+ * adapted default parameters to new board flash address
+ *
+ * Revision 1.6 2003/02/25 14:55:42 ssu
+ * changed default environment parameters
+ *
+ * Revision 1.5 2003/02/21 17:14:23 ias
+ * added extended SPD handling
+ *
+ * Revision 1.4 2003/01/14 09:16:08 ias
+ * PPCBoot for Marvel Beta 0.9
+ *
+ * Revision 1.3 2002/12/03 13:56:26 ias
+ * Environment in flash support added
+ *
+ * Revision 1.2 2002/11/29 16:53:29 ias
+ * Flash support for STM added
+ *
+ * Revision 1.1 2002/11/29 13:36:31 ias
+ * Revision 0.1 of PPCBOOT (1.1.5) for Marvell DB64360 IBM750FX Board
+ * - working DDRRAM (only 32MByte of 128MB Modul)
+ * - working I2C Driver for SPD EEPROM read
+ * - working DUART 16650 for Serial Console
+ * - working "console"
+ *
+ *
+ *
+ ************************************************************************/
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* This define must be before the core.h include */
+#define CONFIG_DB64360 1 /* this is an DB64360 board */
+
+#ifndef __ASSEMBLY__
+#include "../board/Marvell/include/core.h"
+#endif
+
+/*-----------------------------------------------------*/
+/* #include "../board/db64360/local.h" */
+#ifndef __LOCAL_H
+#define __LOCAL_H
+
+/* first ethernet */
+#define CONFIG_ETHADDR 64:36:00:00:00:01
+ /* next two ethernet hwaddrs */
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR 64:36:00:00:00:02
+/* in the atlantis 64360 we have only 2 ETH port on the board,
+if we use PCI it has its own MAC addr */
+
+#define CONFIG_ENV_OVERWRITE
+#endif /* __CONFIG_H */
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_74xx /* we have a 750FX (override local.h) */
+
+#define CONFIG_DB64360 1 /* this is an DB64360 board */
+
+#define CONFIG_BAUDRATE 115200 /* console baudrate = 115000 */
+/*ronen - we don't use the global CONFIG_ECC, since in the global ecc we initialize the
+ DRAM for ECC in the phase we are relocating to it, which isn't so sufficient.
+ so we will define our ECC CONFIG and initilize the DRAM for ECC in the DRAM initialization phase,
+ see sdram_init.c */
+#undef CONFIG_ECC /* enable ECC support */
+#define CONFIG_MV64360_ECC
+
+/* which initialization functions to call for this board */
+#define CONFIG_MISC_INIT_R /* initialize the icache L1 */
+#define CONFIG_BOARD_EARLY_INIT_F
+
+#define CONFIG_SYS_BOARD_NAME "DB64360"
+#define CONFIG_IDENT_STRING "Marvell DB64360 (1.1)"
+
+/*#define CONFIG_SYS_HUSH_PARSER */
+#undef CONFIG_SYS_HUSH_PARSER
+
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+
+/*
+ * The following defines let you select what serial you want to use
+ * for your console driver.
+ *
+ * what to do:
+ * to use the DUART, undef CONFIG_MPSC. If you have hacked a serial
+ * cable onto the second DUART channel, change the CONFIG_SYS_DUART port from 1
+ * to 0 below.
+ *
+ * to use the MPSC, #define CONFIG_MPSC. If you have wired up another
+ * mpsc channel, change CONFIG_MPSC_PORT to the desired value.
+ */
+
+#define CONFIG_MPSC_PORT 0
+
+/* to change the default ethernet port, use this define (options: 0, 1, 2) */
+#define CONFIG_NET_MULTI
+#define MV_ETH_DEVS 2
+
+/* #undef CONFIG_ETHER_PORT_MII */
+#if 0
+#define CONFIG_BOOTDELAY -1 /* autoboot disabled */
+#else
+#define CONFIG_BOOTDELAY 3 /* autoboot after 5 seconds */
+#endif
+#define CONFIG_ZERO_BOOTDELAY_CHECK
+
+
+#undef CONFIG_BOOTARGS
+/*#define CONFIG_PREBOOT "echo;echo Type \\\"run flash_nfs\\\" to mount root filesystem over NFS;echo" */
+
+/* ronen - autoboot using tftp */
+#if (CONFIG_BOOTDELAY >= 0)
+#define CONFIG_BOOTCOMMAND "tftpboot 0x400000 uImage;\
+ setenv bootargs ${bootargs} ${bootargs_root} nfsroot=${serverip}:${rootpath} \
+ ip=${ipaddr}:${serverip}${bootargs_end}; bootm 0x400000; "
+
+#define CONFIG_BOOTARGS "console=ttyS0,115200"
+
+#endif
+
+/* ronen - the u-boot.bin should be ~0x30000 bytes */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "burn_uboot_sep= tftp 100000 u-boot.bin;protect off all;era FFF00000 FFF4ffff; \
+cp.b 100000 FFF00000 0x40000;protect on 1:0-4;\0" \
+ "burn_uboot_dep= tftp 100000 u-boot.bin;protect off all;era FFF00000 FFF7ffff; \
+cp.b 100000 FFF00000 0x40000;protect on 1:0-7;\0" \
+ "bootargs_root=root=/dev/nfs rw\0" \
+ "bootargs_end=:::DB64360:eth0:none \0"\
+ "ethprime=mv_enet0\0"\
+ "standalone=fsload 0x400000 uImage;setenv bootargs ${bootargs} root=/dev/mtdblock/0 rw \
+ip=${ipaddr}:${serverip}${bootargs_end}; bootm 0x400000;\0"
+
+/* --------------------------------------------------------------------------------------------------------------- */
+/* New bootcommands for Marvell DB64360 c 2002 Ingo Assmus */
+
+#define CONFIG_IPADDR 10.2.40.90
+
+#define CONFIG_SERIAL "No. 1"
+#define CONFIG_SERVERIP 10.2.1.126
+#define CONFIG_ROOTPATH /mnt/yellow_dog_mini
+
+
+#define CONFIG_TESTDRAMDATA y
+#define CONFIG_TESTDRAMADDRESS n
+#define CONFIG_TESETDRAMWALK n
+
+/* --------------------------------------------------------------------------------------------------------------- */
+
+#define CONFIG_LOADS_ECHO 0 /* echo off for serial download */
+#define CONFIG_SYS_LOADS_BAUD_CHANGE /* allow baudrate changes */
+
+#undef CONFIG_WATCHDOG /* watchdog disabled */
+#undef CONFIG_ALTIVEC /* undef to disable */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_BOOTFILESIZE
+
+
+/*
+ * JFFS2 partitions
+ *
+ */
+/* No command line, one static partition, whole device */
+#undef CONFIG_JFFS2_CMDLINE
+#define CONFIG_JFFS2_DEV "nor1"
+#define CONFIG_JFFS2_PART_SIZE 0xFFFFFFFF
+#define CONFIG_JFFS2_PART_OFFSET 0x00000000
+
+/* mtdparts command line support */
+
+/* Use first bank for JFFS2, second bank contains U-Boot.
+ *
+ * Note: fake mtd_id's used, no linux mtd map file.
+ */
+/*
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT "nor1=db64360-1"
+#define MTDPARTS_DEFAULT "mtdparts=db64360-1:-(jffs2)"
+*/
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_NET
+
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
+#define CONFIG_SYS_I2C_MULTI_EEPROMS
+#define CONFIG_SYS_I2C_SPEED 40000 /* I2C speed default */
+
+/* #define CONFIG_SYS_GT_DUAL_CPU also for JTAG even with one cpu */
+#define CONFIG_SYS_LONGHELP /* undef to save memory */
+#define CONFIG_SYS_PROMPT "=> " /* Monitor Command Prompt */
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
+#else
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+#endif
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
+
+/*#define CONFIG_SYS_MEMTEST_START 0x00400000 memtest works on */
+/*#define CONFIG_SYS_MEMTEST_END 0x00C00000 4 ... 12 MB in DRAM */
+/*#define CONFIG_SYS_MEMTEST_END 0x07c00000 4 ... 124 MB in DRAM */
+
+/*
+#define CONFIG_SYS_DRAM_TEST
+ * DRAM tests
+ * CONFIG_SYS_DRAM_TEST - enables the following tests.
+ *
+ * CONFIG_SYS_DRAM_TEST_DATA - Enables test for shorted or open data lines
+ * Environment variable 'test_dram_data' must be
+ * set to 'y'.
+ * CONFIG_SYS_DRAM_TEST_DATA - Enables test to verify that each word is uniquely
+ * addressable. Environment variable
+ * 'test_dram_address' must be set to 'y'.
+ * CONFIG_SYS_DRAM_TEST_WALK - Enables test a 64-bit walking ones pattern test.
+ * This test takes about 6 minutes to test 64 MB.
+ * Environment variable 'test_dram_walk' must be
+ * set to 'y'.
+ */
+#define CONFIG_SYS_DRAM_TEST
+#if defined(CONFIG_SYS_DRAM_TEST)
+#define CONFIG_SYS_MEMTEST_START 0x00400000 /* memtest works on */
+/* #define CONFIG_SYS_MEMTEST_END 0x00C00000 4 ... 12 MB in DRAM */
+#define CONFIG_SYS_MEMTEST_END 0x07c00000 /* 4 ... 124 MB in DRAM */
+#define CONFIG_SYS_DRAM_TEST_DATA
+#define CONFIG_SYS_DRAM_TEST_ADDRESS
+#define CONFIG_SYS_DRAM_TEST_WALK
+#endif /* CONFIG_SYS_DRAM_TEST */
+
+#undef CONFIG_DISPLAY_MEMMAP /* at the end of the bootprocess show the memory map */
+#undef CONFIG_SYS_DISPLAY_DIMM_SPD_CONTENT /* show SPD content during boot */
+
+#define CONFIG_SYS_LOAD_ADDR 0x00400000 /* default load address */
+
+#define CONFIG_SYS_HZ 1000 /* decr freq: 1ms ticks */
+/*ronen - this the Sys clock (cpu bus,internal dram and SDRAM) */
+#define CONFIG_SYS_BUS_HZ 133000000 /* 133 MHz (CPU = 5*Bus = 666MHz) */
+#define CONFIG_SYS_BUS_CLK CONFIG_SYS_BUS_HZ
+
+#define CONFIG_SYS_DDR_SDRAM_CYCLE_COUNT_LOP 7 /* define the SDRAM cycle count */
+#define CONFIG_SYS_DDR_SDRAM_CYCLE_COUNT_ROP 50 /* for 400MHZ -> 5.0 ns, for 133MHZ -> 7.50 ns */
+
+/*ronen - this is the Tclk (MV64360 core) */
+#define CONFIG_SYS_TCLK 133000000
+
+
+#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, 230400 }
+
+#define CONFIG_SYS_750FX_HID0 0x8000c084
+#define CONFIG_SYS_750FX_HID1 0x54800000
+#define CONFIG_SYS_750FX_HID2 0x00000000
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area
+ */
+
+/*
+ * When locking data in cache you should point the CONFIG_SYS_INIT_RAM_ADDRESS
+ * To an unused memory region. The stack will remain in cache until RAM
+ * is initialized
+*/
+#define CONFIG_SYS_INIT_RAM_LOCK
+#define CONFIG_SYS_INIT_RAM_ADDR 0x40000000 /* unused memory region */
+#define CONFIG_SYS_INIT_RAM_END 0x1000
+#define CONFIG_SYS_GBL_DATA_SIZE 128 /* size in bytes reserved for init data */
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+
+#define RELOCATE_INTERNAL_RAM_ADDR
+#ifdef RELOCATE_INTERNAL_RAM_ADDR
+ #define CONFIG_SYS_INTERNAL_RAM_ADDR 0xf8000000
+#endif
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0
+ */
+#define CONFIG_SYS_SDRAM_BASE 0x00000000
+/* Dummies for BAT 4-7 */
+#define CONFIG_SYS_SDRAM1_BASE 0x10000000 /* each 256 MByte */
+#define CONFIG_SYS_SDRAM2_BASE 0x20000000
+#define CONFIG_SYS_SDRAM3_BASE 0x30000000
+#define CONFIG_SYS_SDRAM4_BASE 0x40000000
+#define CONFIG_SYS_FLASH_BASE 0xfff00000
+
+#define CONFIG_SYS_DFL_BOOTCS_BASE 0xff800000
+#define CONFIG_VERY_BIG_RAM /* we will use up to 256M memory for cause we are short of BATS*/
+
+#define BRIDGE_REG_BASE_BOOTM 0xfbe00000 /* this paramaters are used when booting the linux kernel */
+#define UART_BASE_BOOTM 0xfbb00000 /* in order to be sync with the kernel parameters. */
+#define PCI0_IO_BASE_BOOTM 0xfd000000
+
+#define CONFIG_SYS_RESET_ADDRESS 0xfff00100
+#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 256 kB for Monitor */
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+#define CONFIG_SYS_MALLOC_LEN (256 << 10) /* Reserve 256 kB for malloc */
+
+/* areas to map different things with the GT in physical space */
+#define CONFIG_SYS_DRAM_BANKS 4
+
+/* What to put in the bats. */
+#define CONFIG_SYS_MISC_REGION_BASE 0xf0000000
+
+/* Peripheral Device section */
+
+/*******************************************************/
+/* We have on the db64360 Board : */
+/* GT-Chipset Register Area */
+/* GT-Chipset internal SRAM 256k */
+/* SRAM on external device module */
+/* Real time clock on external device module */
+/* dobble UART on external device module */
+/* Data flash on external device module */
+/* Boot flash on external device module */
+/*******************************************************/
+#define CONFIG_SYS_DFL_GT_REGS 0x14000000 /* boot time GT_REGS */
+#define CONFIG_SYS_DB64360_RESET_ADDR 0x14000000 /* After power on Reset the DB64360 is here */
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#define CONFIG_SYS_GT_REGS 0xf1000000 /* GT Registers will be mapped here */
+#define CONFIG_SYS_DEV_BASE 0xfc000000 /* GT Devices CS start here */
+
+#define CONFIG_SYS_DEV0_SPACE CONFIG_SYS_DEV_BASE /* DEV_CS0 device modul sram */
+#define CONFIG_SYS_DEV1_SPACE (CONFIG_SYS_DEV0_SPACE + CONFIG_SYS_DEV0_SIZE) /* DEV_CS1 device modul real time clock (rtc) */
+#define CONFIG_SYS_DEV2_SPACE (CONFIG_SYS_DEV1_SPACE + CONFIG_SYS_DEV1_SIZE) /* DEV_CS2 device modul doubel uart (duart) */
+#define CONFIG_SYS_DEV3_SPACE (CONFIG_SYS_DEV2_SPACE + CONFIG_SYS_DEV2_SIZE) /* DEV_CS3 device modul large flash */
+
+#define CONFIG_SYS_DEV0_SIZE _8M /* db64360 sram @ 0xfc00.0000 */
+#define CONFIG_SYS_DEV1_SIZE _8M /* db64360 rtc @ 0xfc80.0000 */
+#define CONFIG_SYS_DEV2_SIZE _16M /* db64360 duart @ 0xfd00.0000 */
+#define CONFIG_SYS_DEV3_SIZE _16M /* db64360 flash @ 0xfe00.0000 */
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+/* Reset values for Port behavior (8bit/ 32bit, etc.) only corrected by device width */
+#define CONFIG_SYS_DEV0_PAR 0x8FEFFFFF /* 32Bit sram */
+#define CONFIG_SYS_DEV1_PAR 0x8FCFFFFF /* 8Bit rtc */
+#define CONFIG_SYS_DEV2_PAR 0x8FCFFFFF /* 8Bit duart */
+#define CONFIG_SYS_8BIT_BOOT_PAR 0x8FCFFFFF /* 8Bit flash */
+#define CONFIG_SYS_32BIT_BOOT_PAR 0x8FEFFFFF /* 32Bit flash */
+
+ /* c 4 a 8 2 4 1 c */
+ /* 33 22|2222|22 22|111 1|11 11|1 1 | | */
+ /* 10 98|7654|32 10|987 6|54 32|1 098|7 654|3 210 */
+ /* 11|00|0100|10 10|100|0 00|10 0|100 0|001 1|100 */
+ /* 3| 0|.... ..| 2| 4 | 0 | 4 | 8 | 3 | 4 */
+
+
+/* ronen - update MPP Control MV64360*/
+#define CONFIG_SYS_MPP_CONTROL_0 0x02222222
+#define CONFIG_SYS_MPP_CONTROL_1 0x11333011
+#define CONFIG_SYS_MPP_CONTROL_2 0x40431111
+#define CONFIG_SYS_MPP_CONTROL_3 0x00000044
+
+/*# define CONFIG_SYS_SERIAL_PORT_MUX 0x00000102 0=hiZ 1=MPSC0 2=ETH 0 and 2 RMII */
+
+
+# define CONFIG_SYS_GPP_LEVEL_CONTROL 0x2c600000 /* 1111 1001 0000 1111 1100 0000 0000 0000*/
+ /* gpp[31] gpp[30] gpp[29] gpp[28] */
+ /* gpp[27] gpp[24]*/
+ /* gpp[19:14] */
+
+/* setup new config_value for MV64360 DDR-RAM !! */
+# define CONFIG_SYS_SDRAM_CONFIG 0x58200400 /* 0x1400 copied from Dink32 bzw. VxWorks*/
+
+#define CONFIG_SYS_DUART_IO CONFIG_SYS_DEV2_SPACE
+#define CONFIG_SYS_DUART_CHAN 1 /* channel to use for console */
+#define CONFIG_SYS_INIT_CHAN1
+#define CONFIG_SYS_INIT_CHAN2
+
+#define SRAM_BASE CONFIG_SYS_DEV0_SPACE
+#define SRAM_SIZE 0x00100000 /* 1 MB of sram */
+
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *-----------------------------------------------------------------------
+ */
+
+#define PCI_HOST_ADAPTER 0 /* configure ar pci adapter */
+#define PCI_HOST_FORCE 1 /* configure as pci host */
+#define PCI_HOST_AUTO 2 /* detected via arbiter enable */
+
+#define CONFIG_PCI /* include pci support */
+#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */
+#define CONFIG_PCI_PNP /* do pci plug-and-play */
+#define CONFIG_EEPRO100 /* ronen - Support for Intel 82557/82559/82559ER chips */
+
+/* PCI MEMORY MAP section */
+#define CONFIG_SYS_PCI0_MEM_BASE 0x80000000
+#define CONFIG_SYS_PCI0_MEM_SIZE _128M
+#define CONFIG_SYS_PCI1_MEM_BASE 0x88000000
+#define CONFIG_SYS_PCI1_MEM_SIZE _128M
+
+#define CONFIG_SYS_PCI0_0_MEM_SPACE (CONFIG_SYS_PCI0_MEM_BASE)
+#define CONFIG_SYS_PCI1_0_MEM_SPACE (CONFIG_SYS_PCI1_MEM_BASE)
+
+/* PCI I/O MAP section */
+#define CONFIG_SYS_PCI0_IO_BASE 0xfa000000
+#define CONFIG_SYS_PCI0_IO_SIZE _16M
+#define CONFIG_SYS_PCI1_IO_BASE 0xfb000000
+#define CONFIG_SYS_PCI1_IO_SIZE _16M
+
+#define CONFIG_SYS_PCI0_IO_SPACE (CONFIG_SYS_PCI0_IO_BASE)
+#define CONFIG_SYS_PCI0_IO_SPACE_PCI (CONFIG_SYS_PCI0_IO_BASE) /* ronen we want phy=bus 0x00000000 */
+#define CONFIG_SYS_PCI1_IO_SPACE (CONFIG_SYS_PCI1_IO_BASE)
+#define CONFIG_SYS_PCI1_IO_SPACE_PCI (CONFIG_SYS_PCI1_IO_BASE) /* ronen we want phy=bus 0x00000000 */
+
+#if defined (CONFIG_750CX)
+#define CONFIG_SYS_PCI_IDSEL 0x0
+#else
+#define CONFIG_SYS_PCI_IDSEL 0x30
+#endif
+/*----------------------------------------------------------------------
+ * Initial BAT mappings
+ */
+
+/* NOTES:
+ * 1) GUARDED and WRITE_THRU not allowed in IBATS
+ * 2) CACHEINHIBIT and WRITETHROUGH not allowed together in same BAT
+ */
+
+/* SDRAM */
+#define CONFIG_SYS_IBAT0L (CONFIG_SYS_SDRAM_BASE | BATL_PP_RW | BATL_CACHEINHIBIT)
+#define CONFIG_SYS_IBAT0U (CONFIG_SYS_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CONFIG_SYS_DBAT0L (CONFIG_SYS_SDRAM_BASE | BATL_PP_RW | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CONFIG_SYS_DBAT0U CONFIG_SYS_IBAT0U
+
+/* init ram */
+#define CONFIG_SYS_IBAT1L (CONFIG_SYS_INIT_RAM_ADDR | BATL_PP_RW | BATL_MEMCOHERENCE)
+#define CONFIG_SYS_IBAT1U (CONFIG_SYS_INIT_RAM_ADDR | BATU_BL_256K | BATU_VS | BATU_VP)
+#define CONFIG_SYS_DBAT1L CONFIG_SYS_IBAT1L
+#define CONFIG_SYS_DBAT1U CONFIG_SYS_IBAT1U
+
+/* PCI0, PCI1 in one BAT */
+#define CONFIG_SYS_IBAT2L BATL_NO_ACCESS
+#define CONFIG_SYS_IBAT2U CONFIG_SYS_DBAT2U
+#define CONFIG_SYS_DBAT2L (CONFIG_SYS_PCI0_MEM_BASE | BATL_CACHEINHIBIT | BATL_PP_RW | BATL_GUARDEDSTORAGE)
+#define CONFIG_SYS_DBAT2U (CONFIG_SYS_PCI0_MEM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* GT regs, bootrom, all the devices, PCI I/O */
+#define CONFIG_SYS_IBAT3L (CONFIG_SYS_MISC_REGION_BASE | BATL_CACHEINHIBIT | BATL_PP_RW)
+#define CONFIG_SYS_IBAT3U (CONFIG_SYS_MISC_REGION_BASE | BATU_VS | BATU_VP | BATU_BL_256M)
+#define CONFIG_SYS_DBAT3L (CONFIG_SYS_MISC_REGION_BASE | BATL_CACHEINHIBIT | BATL_PP_RW | BATL_GUARDEDSTORAGE)
+#define CONFIG_SYS_DBAT3U CONFIG_SYS_IBAT3U
+
+/* I2C addresses for the two DIMM SPD chips */
+#define DIMM0_I2C_ADDR 0x56
+#define DIMM1_I2C_ADDR 0x54
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CONFIG_SYS_BOOTMAPSZ (8<<20) /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of memory banks */
+#define CONFIG_SYS_MAX_FLASH_SECT 67 /* max number of sectors on one chip */
+
+#define CONFIG_SYS_EXTRA_FLASH_DEVICE DEVICE3 /* extra flash at device 3 */
+#define CONFIG_SYS_EXTRA_FLASH_WIDTH 4 /* 32 bit */
+#define CONFIG_SYS_BOOT_FLASH_WIDTH 1 /* 8 bit */
+
+#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */
+#define CONFIG_SYS_FLASH_LOCK_TOUT 500 /* Timeout for Flash Lock (in ms) */
+#define CONFIG_SYS_FLASH_CFI 1
+
+#define CONFIG_ENV_IS_IN_FLASH 1
+#define CONFIG_ENV_SIZE 0x1000 /* Total Size of Environment Sector */
+#define CONFIG_ENV_SECT_SIZE 0x10000
+#define CONFIG_ENV_ADDR 0xFFF78000 /* Marvell 8-Bit Bootflash last sector */
+/* #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE+CONFIG_SYS_MONITOR_LEN-CONFIG_ENV_SECT_SIZE) */
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CONFIG_SYS_CACHELINE_SIZE 32 /* For all MPC74xx CPUs */
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_SYS_CACHELINE_SHIFT 5 /* log base 2 of the above value */
+#endif
+
+/*-----------------------------------------------------------------------
+ * L2CR setup -- make sure this is right for your board!
+ * look in include/mpc74xx.h for the defines used here
+ */
+
+#define CONFIG_SYS_L2
+
+
+#if defined (CONFIG_750CX) || defined (CONFIG_750FX)
+#define L2_INIT 0
+#else
+
+#define L2_INIT 0
+/*
+#define L2_INIT (L2CR_L2SIZ_2M | L2CR_L2CLK_3 | L2CR_L2RAM_BURST | \
+ L2CR_L2OH_5 | L2CR_L2CTL | L2CR_L2WT)
+*/
+#endif
+
+#define L2_ENABLE (L2_INIT | L2CR_L2E)
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+#define CONFIG_SYS_BOARD_ASM_INIT 1
+
+#endif /* __CONFIG_H */
diff -Naur u-boot-2009.03_orig/include/configs/KAREF.h u-boot-2009.03/include/configs/KAREF.h
--- u-boot-2009.03_orig/include/configs/KAREF.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/configs/KAREF.h 2009-03-31 15:00:45.123321600 -0700
@@ -1,309 +1,309 @@
-/*
- * (C) Copyright 2004 Sandburst Corporation
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- */
-
-/************************************************************************
- * KAMINOREFDES.h - configuration for the Sandburst Kamino Reference
- * design.
- ***********************************************************************/
-
-/*
- * $Id: KAREF.h,v 1.6 2005/06/03 15:05:25 tsawyer Exp $
- *
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*-----------------------------------------------------------------------
- * High Level Configuration Options
- *----------------------------------------------------------------------*/
-#define CONFIG_KAREF 1 /* Board is Kamino Ref Variant */
-#define CONFIG_440GX 1 /* Specifc GX support */
-#define CONFIG_440 1 /* ... PPC440 family */
-#define CONFIG_4xx 1 /* ... PPC4xx family */
-#define CONFIG_BOARD_EARLY_INIT_F 1 /* Call board_pre_init */
-#define CONFIG_MISC_INIT_F 1 /* Call board misc_init_f */
-#define CONFIG_MISC_INIT_R 1 /* Call board misc_init_r */
-#undef CONFIG_SYS_DRAM_TEST /* Disable-takes long time!*/
-#define CONFIG_SYS_CLK_FREQ 66666666 /* external freq to pll */
-
-#define CONFIG_VERY_BIG_RAM 1
-#define CONFIG_VERSION_VARIABLE
-
-#define CONFIG_IDENT_STRING " Sandburst Kamino Reference Design"
-
-/*-----------------------------------------------------------------------
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_SDRAM_BASE 0x00000000 /* _must_ be 0 */
-#define CONFIG_SYS_FLASH_BASE 0xfff80000 /* start of FLASH */
-#define CONFIG_SYS_MONITOR_BASE 0xfff80000 /* start of monitor */
-#define CONFIG_SYS_PCI_MEMBASE 0x80000000 /* mapped pci memory */
-#define CONFIG_SYS_PERIPHERAL_BASE 0xe0000000 /* internal peripherals */
-#define CONFIG_SYS_ISRAM_BASE 0xc0000000 /* internal SRAM */
-#define CONFIG_SYS_PCI_BASE 0xd0000000 /* internal PCI regs */
-
-#define CONFIG_SYS_NVRAM_BASE_ADDR (CONFIG_SYS_PERIPHERAL_BASE + 0x08000000)
-#define CONFIG_SYS_KAREF_FPGA_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08200000)
-#define CONFIG_SYS_OFEM_FPGA_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08400000)
-#define CONFIG_SYS_BME32_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08500000)
-#define CONFIG_SYS_GPIO_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x00000700)
-
-/* Here for completeness */
-#define CONFIG_SYS_OFEMAC_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08600000)
-
-/*-----------------------------------------------------------------------
- * Initial RAM & stack pointer (placed in internal SRAM)
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_TEMP_STACK_OCM 1
-#define CONFIG_SYS_OCM_DATA_ADDR CONFIG_SYS_ISRAM_BASE
-#define CONFIG_SYS_INIT_RAM_ADDR CONFIG_SYS_ISRAM_BASE /* Initial RAM address */
-#define CONFIG_SYS_INIT_RAM_END 0x2000 /* End of used area in RAM */
-#define CONFIG_SYS_GBL_DATA_SIZE 128 /* num bytes initial data */
-
-#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
-#define CONFIG_SYS_POST_WORD_ADDR (CONFIG_SYS_GBL_DATA_OFFSET - 0x4)
-#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_POST_WORD_ADDR
-
-#define CONFIG_SYS_MONITOR_LEN (256 * 1024) /* Rsrv 256kB for Mon */
-#define CONFIG_SYS_MALLOC_LEN (128 * 1024) /* Rsrv 128kB for malloc */
-
-/*-----------------------------------------------------------------------
- * Serial Port
- *----------------------------------------------------------------------*/
-#undef CONFIG_SERIAL_SOFTWARE_FIFO
-#define CONFIG_SERIAL_MULTI 1
-#define CONFIG_BAUDRATE 9600
-
-#define CONFIG_SYS_BAUDRATE_TABLE \
- {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
-
-/*-----------------------------------------------------------------------
- * NVRAM/RTC
- *
- * NOTE: Upper 8 bytes of NVRAM is where the RTC registers are located.
- * The DS1743 code assumes this condition (i.e. -- it assumes the base
- * address for the RTC registers is:
- *
- * CONFIG_SYS_NVRAM_BASE_ADDR + CONFIG_SYS_NVRAM_SIZE
- *
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_NVRAM_SIZE (0x2000 - 8) /* NVRAM size(8k)- RTC regs*/
-#define CONFIG_RTC_DS174x 1 /* DS1743 RTC */
-
-/*-----------------------------------------------------------------------
- * FLASH related
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* number of banks */
-#define CONFIG_SYS_MAX_FLASH_SECT 8 /* sectors per device */
-
-#undef CONFIG_SYS_FLASH_CHECKSUM
-#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Flash Erase TO (in ms) */
-#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Flash Write TO(in ms) */
-
-/*-----------------------------------------------------------------------
- * DDR SDRAM
- *----------------------------------------------------------------------*/
-#define CONFIG_SPD_EEPROM 1 /* Use SPD EEPROM for setup*/
-#define SPD_EEPROM_ADDRESS {0x53} /* SPD i2c spd addresses */
-
-/*-----------------------------------------------------------------------
- * I2C
- *----------------------------------------------------------------------*/
-#define CONFIG_HARD_I2C 1 /* I2C hardware support */
-#undef CONFIG_SOFT_I2C /* I2C !bit-banged */
-#define CONFIG_SYS_I2C_SPEED 400000 /* I2C speed 400kHz */
-#define CONFIG_SYS_I2C_SLAVE 0x7F /* I2C slave address */
-#define CONFIG_SYS_I2C_NOPROBES {0x69} /* Don't probe these addrs */
-#define CONFIG_I2C_BUS1 1 /* Include i2c bus 1 supp */
-
-
-/*-----------------------------------------------------------------------
- * Environment
- *----------------------------------------------------------------------*/
-#define CONFIG_ENV_IS_IN_NVRAM 1 /* Environment uses NVRAM */
-#undef CONFIG_ENV_IS_IN_FLASH /* ... not in flash */
-#undef CONFIG_ENV_IS_IN_EEPROM /* ... not in EEPROM */
-#define CONFIG_ENV_OVERWRITE 1 /* allow env overwrite */
-
-#define CONFIG_ENV_SIZE 0x1000 /* Size of Env vars */
-#define CONFIG_ENV_ADDR (CONFIG_SYS_NVRAM_BASE_ADDR)
-
-#define CONFIG_BOOTDELAY 5 /* 5 second autoboot */
-
-#define CONFIG_LOADS_ECHO 1 /* echo on for serial dnld */
-#define CONFIG_SYS_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
-
-/*-----------------------------------------------------------------------
- * Networking
- *----------------------------------------------------------------------*/
-#define CONFIG_PPC4xx_EMAC
-#define CONFIG_MII 1 /* MII PHY management */
-#define CONFIG_NET_MULTI 1
-#define CONFIG_PHY_ADDR 0xff /* no phy on EMAC0 */
-#define CONFIG_PHY1_ADDR 0xff /* no phy on EMAC1 */
-#define CONFIG_PHY2_ADDR 0x08 /* PHY addr, MGMT, EMAC2 */
-#define CONFIG_PHY3_ADDR 0x18 /* PHY addr, LCL, EMAC3 */
-#define CONFIG_HAS_ETH0
-#define CONFIG_HAS_ETH1
-#define CONFIG_HAS_ETH2
-#define CONFIG_HAS_ETH3
-#define CONFIG_PHY_RESET 1 /* reset phy upon startup */
-#define CONFIG_CIS8201_PHY 1 /* RGMII mode for Cicada */
-#define CONFIG_CIS8201_SHORT_ETCH 1 /* Use short etch mode */
-#define CONFIG_PHY_GIGE 1 /* GbE speed/duplex detect */
-#define CONFIG_PHY_RESET_DELAY 1000
-#define CONFIG_NETMASK 255.255.0.0
-#define CONFIG_ETHADDR 00:00:00:00:00:00 /* No EMAC 0 support */
-#define CONFIG_ETH1ADDR 00:00:00:00:00:00 /* No EMAC 1 support */
-#define CONFIG_SYS_RX_ETH_BUFFER 32 /* #eth rx buff & descrs */
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_PCI
-#define CONFIG_CMD_IRQ
-#define CONFIG_CMD_I2C
-#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_DATE
-#define CONFIG_CMD_BEDBUG
-#define CONFIG_CMD_PING
-#define CONFIG_CMD_DIAG
-#define CONFIG_CMD_MII
-#define CONFIG_CMD_NET
-#define CONFIG_CMD_ELF
-#define CONFIG_CMD_IDE
-#define CONFIG_CMD_FAT
-
-
-/* Include NetConsole support */
-#define CONFIG_NETCONSOLE
-
-/* Include auto complete with tabs */
-#define CONFIG_AUTO_COMPLETE 1
-#define CONFIG_SYS_ALT_MEMTEST 1 /* use real memory test */
-
-#define CONFIG_SYS_LONGHELP /* undef to save memory */
-#define CONFIG_SYS_PROMPT "KaRefDes=> " /* Monitor Command Prompt */
-
-#define CONFIG_SYS_HUSH_PARSER 1 /* HUSH for ext'd cli */
-#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
-
-
-/*-----------------------------------------------------------------------
- * Console Buffer
- *----------------------------------------------------------------------*/
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
-#else
-#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
-#endif
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
- /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS 16 /* max number of cmd args */
-#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Arg Buffer Size */
-
-/*-----------------------------------------------------------------------
- * Memory Test
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_MEMTEST_START 0x0400000 /* memtest works on */
-#define CONFIG_SYS_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */
-
-/*-----------------------------------------------------------------------
- * Compact Flash (in true IDE mode)
- *----------------------------------------------------------------------*/
-#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */
-#undef CONFIG_IDE_LED /* no led for ide supported */
-
-#define CONFIG_IDE_RESET /* reset for ide supported */
-#define CONFIG_SYS_IDE_MAXBUS 1 /* max. 1 IDE busses */
-#define CONFIG_SYS_IDE_MAXDEVICE (CONFIG_SYS_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */
-
-#define CONFIG_SYS_ATA_BASE_ADDR 0xF0000000
-#define CONFIG_SYS_ATA_IDE0_OFFSET 0x0000
-#define CONFIG_SYS_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */
-#define CONFIG_SYS_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses*/
-#define CONFIG_SYS_ATA_ALT_OFFSET 0x100000 /* Offset for alternate registers */
-
-#define CONFIG_SYS_ATA_STRIDE 2 /* Directly connected CF, needs a stride
- to get to the correct offset */
-#define CONFIG_DOS_PARTITION 1 /* Include dos partition */
-
-/*-----------------------------------------------------------------------
- * PCI
- *----------------------------------------------------------------------*/
-/* General PCI */
-#define CONFIG_PCI /* include pci support */
-#define CONFIG_PCI_PNP /* do pci plug-and-play */
-#define CONFIG_PCI_SCAN_SHOW /* show pci devices */
-#define CONFIG_SYS_PCI_TARGBASE (CONFIG_SYS_PCI_MEMBASE)
-
-/* Board-specific PCI */
-#define CONFIG_SYS_PCI_TARGET_INIT /* let board init pci target*/
-
-#define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x17BA /* Sandburst */
-#define CONFIG_SYS_PCI_SUBSYS_DEVICEID 0xcafe /* Whatever */
-
-/*
- * For booting Linux, the board info and command line data
- * have to be in the first 8 MB of memory, since this is
- * the maximum mapped by the Linux kernel during initialization.
- */
-#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD 0x01 /* Normal PowerOn: Boot from FLASH */
-#define BOOTFLAG_WARM 0x02 /* Software reboot */
-
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE 230400 /* kgdb serial port baud */
-#define CONFIG_KGDB_SER_INDEX 2 /* kgdb serial port */
-#endif
-
-/*-----------------------------------------------------------------------
- * Miscellaneous configurable options
- *----------------------------------------------------------------------*/
-#undef CONFIG_WATCHDOG /* watchdog disabled */
-#define CONFIG_SYS_LOAD_ADDR 0x8000000 /* default load address */
-#define CONFIG_SYS_EXTBDINFO 1 /* use extended board_info */
-
-#define CONFIG_SYS_HZ 100 /* decr freq: 1 ms ticks */
-
-
-#endif /* __CONFIG_H */
+/*
+ * (C) Copyright 2004 Sandburst Corporation
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+/************************************************************************
+ * KAMINOREFDES.h - configuration for the Sandburst Kamino Reference
+ * design.
+ ***********************************************************************/
+
+/*
+ * $Id: KAREF.h,v 1.1.1.1 2009/03/25 22:22:25 kenagy Exp $
+ *
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_KAREF 1 /* Board is Kamino Ref Variant */
+#define CONFIG_440GX 1 /* Specifc GX support */
+#define CONFIG_440 1 /* ... PPC440 family */
+#define CONFIG_4xx 1 /* ... PPC4xx family */
+#define CONFIG_BOARD_EARLY_INIT_F 1 /* Call board_pre_init */
+#define CONFIG_MISC_INIT_F 1 /* Call board misc_init_f */
+#define CONFIG_MISC_INIT_R 1 /* Call board misc_init_r */
+#undef CONFIG_SYS_DRAM_TEST /* Disable-takes long time!*/
+#define CONFIG_SYS_CLK_FREQ 66666666 /* external freq to pll */
+
+#define CONFIG_VERY_BIG_RAM 1
+#define CONFIG_VERSION_VARIABLE
+
+#define CONFIG_IDENT_STRING " Sandburst Kamino Reference Design"
+
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_SDRAM_BASE 0x00000000 /* _must_ be 0 */
+#define CONFIG_SYS_FLASH_BASE 0xfff80000 /* start of FLASH */
+#define CONFIG_SYS_MONITOR_BASE 0xfff80000 /* start of monitor */
+#define CONFIG_SYS_PCI_MEMBASE 0x80000000 /* mapped pci memory */
+#define CONFIG_SYS_PERIPHERAL_BASE 0xe0000000 /* internal peripherals */
+#define CONFIG_SYS_ISRAM_BASE 0xc0000000 /* internal SRAM */
+#define CONFIG_SYS_PCI_BASE 0xd0000000 /* internal PCI regs */
+
+#define CONFIG_SYS_NVRAM_BASE_ADDR (CONFIG_SYS_PERIPHERAL_BASE + 0x08000000)
+#define CONFIG_SYS_KAREF_FPGA_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08200000)
+#define CONFIG_SYS_OFEM_FPGA_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08400000)
+#define CONFIG_SYS_BME32_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08500000)
+#define CONFIG_SYS_GPIO_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x00000700)
+
+/* Here for completeness */
+#define CONFIG_SYS_OFEMAC_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08600000)
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & stack pointer (placed in internal SRAM)
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_TEMP_STACK_OCM 1
+#define CONFIG_SYS_OCM_DATA_ADDR CONFIG_SYS_ISRAM_BASE
+#define CONFIG_SYS_INIT_RAM_ADDR CONFIG_SYS_ISRAM_BASE /* Initial RAM address */
+#define CONFIG_SYS_INIT_RAM_END 0x2000 /* End of used area in RAM */
+#define CONFIG_SYS_GBL_DATA_SIZE 128 /* num bytes initial data */
+
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+#define CONFIG_SYS_POST_WORD_ADDR (CONFIG_SYS_GBL_DATA_OFFSET - 0x4)
+#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_POST_WORD_ADDR
+
+#define CONFIG_SYS_MONITOR_LEN (256 * 1024) /* Rsrv 256kB for Mon */
+#define CONFIG_SYS_MALLOC_LEN (128 * 1024) /* Rsrv 128kB for malloc */
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CONFIG_SERIAL_MULTI 1
+#define CONFIG_BAUDRATE 9600
+
+#define CONFIG_SYS_BAUDRATE_TABLE \
+ {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*-----------------------------------------------------------------------
+ * NVRAM/RTC
+ *
+ * NOTE: Upper 8 bytes of NVRAM is where the RTC registers are located.
+ * The DS1743 code assumes this condition (i.e. -- it assumes the base
+ * address for the RTC registers is:
+ *
+ * CONFIG_SYS_NVRAM_BASE_ADDR + CONFIG_SYS_NVRAM_SIZE
+ *
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_NVRAM_SIZE (0x2000 - 8) /* NVRAM size(8k)- RTC regs*/
+#define CONFIG_RTC_DS174x 1 /* DS1743 RTC */
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* number of banks */
+#define CONFIG_SYS_MAX_FLASH_SECT 8 /* sectors per device */
+
+#undef CONFIG_SYS_FLASH_CHECKSUM
+#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Flash Erase TO (in ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Flash Write TO(in ms) */
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CONFIG_SPD_EEPROM 1 /* Use SPD EEPROM for setup*/
+#define SPD_EEPROM_ADDRESS {0x53} /* SPD i2c spd addresses */
+
+/*-----------------------------------------------------------------------
+ * I2C
+ *----------------------------------------------------------------------*/
+#define CONFIG_HARD_I2C 1 /* I2C hardware support */
+#undef CONFIG_SOFT_I2C /* I2C !bit-banged */
+#define CONFIG_SYS_I2C_SPEED 400000 /* I2C speed 400kHz */
+#define CONFIG_SYS_I2C_SLAVE 0x7F /* I2C slave address */
+#define CONFIG_SYS_I2C_NOPROBES {0x69} /* Don't probe these addrs */
+#define CONFIG_I2C_BUS1 1 /* Include i2c bus 1 supp */
+
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+#define CONFIG_ENV_IS_IN_NVRAM 1 /* Environment uses NVRAM */
+#undef CONFIG_ENV_IS_IN_FLASH /* ... not in flash */
+#undef CONFIG_ENV_IS_IN_EEPROM /* ... not in EEPROM */
+#define CONFIG_ENV_OVERWRITE 1 /* allow env overwrite */
+
+#define CONFIG_ENV_SIZE 0x1000 /* Size of Env vars */
+#define CONFIG_ENV_ADDR (CONFIG_SYS_NVRAM_BASE_ADDR)
+
+#define CONFIG_BOOTDELAY 5 /* 5 second autoboot */
+
+#define CONFIG_LOADS_ECHO 1 /* echo on for serial dnld */
+#define CONFIG_SYS_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
+
+/*-----------------------------------------------------------------------
+ * Networking
+ *----------------------------------------------------------------------*/
+#define CONFIG_PPC4xx_EMAC
+#define CONFIG_MII 1 /* MII PHY management */
+#define CONFIG_NET_MULTI 1
+#define CONFIG_PHY_ADDR 0xff /* no phy on EMAC0 */
+#define CONFIG_PHY1_ADDR 0xff /* no phy on EMAC1 */
+#define CONFIG_PHY2_ADDR 0x08 /* PHY addr, MGMT, EMAC2 */
+#define CONFIG_PHY3_ADDR 0x18 /* PHY addr, LCL, EMAC3 */
+#define CONFIG_HAS_ETH0
+#define CONFIG_HAS_ETH1
+#define CONFIG_HAS_ETH2
+#define CONFIG_HAS_ETH3
+#define CONFIG_PHY_RESET 1 /* reset phy upon startup */
+#define CONFIG_CIS8201_PHY 1 /* RGMII mode for Cicada */
+#define CONFIG_CIS8201_SHORT_ETCH 1 /* Use short etch mode */
+#define CONFIG_PHY_GIGE 1 /* GbE speed/duplex detect */
+#define CONFIG_PHY_RESET_DELAY 1000
+#define CONFIG_NETMASK 255.255.0.0
+#define CONFIG_ETHADDR 00:00:00:00:00:00 /* No EMAC 0 support */
+#define CONFIG_ETH1ADDR 00:00:00:00:00:00 /* No EMAC 1 support */
+#define CONFIG_SYS_RX_ETH_BUFFER 32 /* #eth rx buff & descrs */
+
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_BEDBUG
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_IDE
+#define CONFIG_CMD_FAT
+
+
+/* Include NetConsole support */
+#define CONFIG_NETCONSOLE
+
+/* Include auto complete with tabs */
+#define CONFIG_AUTO_COMPLETE 1
+#define CONFIG_SYS_ALT_MEMTEST 1 /* use real memory test */
+
+#define CONFIG_SYS_LONGHELP /* undef to save memory */
+#define CONFIG_SYS_PROMPT "KaRefDes=> " /* Monitor Command Prompt */
+
+#define CONFIG_SYS_HUSH_PARSER 1 /* HUSH for ext'd cli */
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+
+
+/*-----------------------------------------------------------------------
+ * Console Buffer
+ *----------------------------------------------------------------------*/
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
+#else
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+#endif
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
+ /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS 16 /* max number of cmd args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Arg Buffer Size */
+
+/*-----------------------------------------------------------------------
+ * Memory Test
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_MEMTEST_START 0x0400000 /* memtest works on */
+#define CONFIG_SYS_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */
+
+/*-----------------------------------------------------------------------
+ * Compact Flash (in true IDE mode)
+ *----------------------------------------------------------------------*/
+#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */
+#undef CONFIG_IDE_LED /* no led for ide supported */
+
+#define CONFIG_IDE_RESET /* reset for ide supported */
+#define CONFIG_SYS_IDE_MAXBUS 1 /* max. 1 IDE busses */
+#define CONFIG_SYS_IDE_MAXDEVICE (CONFIG_SYS_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */
+
+#define CONFIG_SYS_ATA_BASE_ADDR 0xF0000000
+#define CONFIG_SYS_ATA_IDE0_OFFSET 0x0000
+#define CONFIG_SYS_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */
+#define CONFIG_SYS_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses*/
+#define CONFIG_SYS_ATA_ALT_OFFSET 0x100000 /* Offset for alternate registers */
+
+#define CONFIG_SYS_ATA_STRIDE 2 /* Directly connected CF, needs a stride
+ to get to the correct offset */
+#define CONFIG_DOS_PARTITION 1 /* Include dos partition */
+
+/*-----------------------------------------------------------------------
+ * PCI
+ *----------------------------------------------------------------------*/
+/* General PCI */
+#define CONFIG_PCI /* include pci support */
+#define CONFIG_PCI_PNP /* do pci plug-and-play */
+#define CONFIG_PCI_SCAN_SHOW /* show pci devices */
+#define CONFIG_SYS_PCI_TARGBASE (CONFIG_SYS_PCI_MEMBASE)
+
+/* Board-specific PCI */
+#define CONFIG_SYS_PCI_TARGET_INIT /* let board init pci target*/
+
+#define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x17BA /* Sandburst */
+#define CONFIG_SYS_PCI_SUBSYS_DEVICEID 0xcafe /* Whatever */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal PowerOn: Boot from FLASH */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE 230400 /* kgdb serial port baud */
+#define CONFIG_KGDB_SER_INDEX 2 /* kgdb serial port */
+#endif
+
+/*-----------------------------------------------------------------------
+ * Miscellaneous configurable options
+ *----------------------------------------------------------------------*/
+#undef CONFIG_WATCHDOG /* watchdog disabled */
+#define CONFIG_SYS_LOAD_ADDR 0x8000000 /* default load address */
+#define CONFIG_SYS_EXTBDINFO 1 /* use extended board_info */
+
+#define CONFIG_SYS_HZ 100 /* decr freq: 1 ms ticks */
+
+
+#endif /* __CONFIG_H */
diff -Naur u-boot-2009.03_orig/include/configs/METROBOX.h u-boot-2009.03/include/configs/METROBOX.h
--- u-boot-2009.03_orig/include/configs/METROBOX.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/configs/METROBOX.h 2009-03-31 15:00:55.482564000 -0700
@@ -1,374 +1,377 @@
-/*
- * (C) Copyright 2004 Sandburst Corporation
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- */
-
-/************************************************************************
- * METROBOX.h - configuration Sandburst MetroBox
- ***********************************************************************/
-
-/*
- * $Id: METROBOX.h,v 1.21 2005/06/03 15:05:25 tsawyer Exp $
- *
- *
- * $Log: METROBOX.h,v $
- * Revision 1.21 2005/06/03 15:05:25 tsawyer
- * MB rev 2.0.3 KA rev 0.0.7. Add CONFIG_VERSION_VARIABLE, Add fakeled to MB
- *
- * Revision 1.20 2005/04/11 20:51:11 tsawyer
- * fix ethernet
- *
- * Revision 1.19 2005/04/06 15:13:36 tsawyer
- * Update appropriate files to coincide with u-boot 1.1.3
- *
- * Revision 1.18 2005/03/10 14:16:02 tsawyer
- * add def'n for cis8201 short etch option.
- *
- * Revision 1.17 2005/03/09 19:49:51 tsawyer
- * Remove KGDB to allow use of 2nd serial port
- *
- * Revision 1.16 2004/12/02 19:00:23 tsawyer
- * Add misc_init_f to turn on i2c-1 and all four fans before sdram init
- *
- * Revision 1.15 2004/09/15 18:04:12 tsawyer
- * add multiple serial port support
- *
- * Revision 1.14 2004/09/03 15:27:51 tsawyer
- * All metrobox boards are at 66.66 sys clock
- *
- * Revision 1.13 2004/08/05 20:27:46 tsawyer
- * Remove system ace definitions, add net console support
- *
- * Revision 1.12 2004/07/29 20:00:13 tsawyer
- * Add i2c bus 1
- *
- * Revision 1.11 2004/07/21 13:44:18 tsawyer
- * SystemACE is out, CF direct to local bus is in
- *
- * Revision 1.10 2004/06/29 19:08:55 tsawyer
- * Add CONFIG_MISC_INIT_R
- *
- * Revision 1.9 2004/06/28 21:30:53 tsawyer
- * Fix default BOOTARGS
- *
- * Revision 1.8 2004/06/17 15:51:08 tsawyer
- * auto complete
- *
- * Revision 1.7 2004/06/17 15:08:49 tsawyer
- * Add autocomplete
- *
- * Revision 1.6 2004/06/15 12:33:57 tsawyer
- * debugging checkpoint
- *
- * Revision 1.5 2004/06/12 19:48:28 tsawyer
- * Debugging checkpoint
- *
- * Revision 1.4 2004/06/02 13:03:06 tsawyer
- * Fix eth addrs
- *
- * Revision 1.3 2004/05/18 19:56:10 tsawyer
- * Change default bootcommand to pImage.metrobox
- *
- * Revision 1.2 2004/05/18 14:13:44 tsawyer
- * Add bringup values for bootargs and bootcommand.
- * Remove definition of ipaddress and serverip addresses.
- *
- * Revision 1.1 2004/04/16 15:08:54 tsawyer
- * Initial Revision
- *
- *
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*-----------------------------------------------------------------------
- * High Level Configuration Options
- *----------------------------------------------------------------------*/
-#define CONFIG_METROBOX 1 /* Board is Metrobox */
-#define CONFIG_440GX 1 /* Specifc GX support */
-#define CONFIG_440 1 /* ... PPC440 family */
-#define CONFIG_4xx 1 /* ... PPC4xx family */
-#define CONFIG_BOARD_EARLY_INIT_F 1 /* Call board_pre_init */
-#define CONFIG_MISC_INIT_F 1 /* Call board misc_init_f */
-#define CONFIG_MISC_INIT_R 1 /* Call board misc_init_r */
-#undef CONFIG_SYS_DRAM_TEST /* Disable-takes long time!*/
-#define CONFIG_SYS_CLK_FREQ 66666666 /* external freq to pll */
-
-#define CONFIG_VERY_BIG_RAM 1
-#define CONFIG_VERSION_VARIABLE
-
-#define CONFIG_IDENT_STRING " Sandburst Metrobox"
-
-/*-----------------------------------------------------------------------
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_SDRAM_BASE 0x00000000 /* _must_ be 0 */
-#define CONFIG_SYS_FLASH_BASE 0xfff80000 /* start of FLASH */
-#define CONFIG_SYS_MONITOR_BASE 0xfff80000 /* start of monitor */
-#define CONFIG_SYS_PCI_MEMBASE 0x80000000 /* mapped pci memory */
-#define CONFIG_SYS_PERIPHERAL_BASE 0xe0000000 /* internal peripherals */
-#define CONFIG_SYS_ISRAM_BASE 0xc0000000 /* internal SRAM */
-#define CONFIG_SYS_PCI_BASE 0xd0000000 /* internal PCI regs */
-
-#define CONFIG_SYS_NVRAM_BASE_ADDR (CONFIG_SYS_PERIPHERAL_BASE + 0x08000000)
-#define CONFIG_SYS_FPGA_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08200000)
-#define CONFIG_SYS_BME32_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08500000)
-#define CONFIG_SYS_GPIO_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x00000700)
-
-/*-----------------------------------------------------------------------
- * Initial RAM & stack pointer (placed in internal SRAM)
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_TEMP_STACK_OCM 1
-#define CONFIG_SYS_OCM_DATA_ADDR CONFIG_SYS_ISRAM_BASE
-#define CONFIG_SYS_INIT_RAM_ADDR CONFIG_SYS_ISRAM_BASE /* Initial RAM address */
-#define CONFIG_SYS_INIT_RAM_END 0x2000 /* End of used area in RAM */
-#define CONFIG_SYS_GBL_DATA_SIZE 128 /* num bytes initial data */
-
-#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
-#define CONFIG_SYS_POST_WORD_ADDR (CONFIG_SYS_GBL_DATA_OFFSET - 0x4)
-#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_POST_WORD_ADDR
-
-#define CONFIG_SYS_MONITOR_LEN (256 * 1024) /* Rsrv 256kB for Mon */
-#define CONFIG_SYS_MALLOC_LEN (128 * 1024) /* Rsrv 128kB for malloc */
-
-/*-----------------------------------------------------------------------
- * Serial Port
- *----------------------------------------------------------------------*/
-#undef CONFIG_SERIAL_SOFTWARE_FIFO
-#define CONFIG_SERIAL_MULTI 1
-#define CONFIG_BAUDRATE 9600
-
-#define CONFIG_SYS_BAUDRATE_TABLE \
- {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
-
-/*-----------------------------------------------------------------------
- * NVRAM/RTC
- *
- * NOTE: Upper 8 bytes of NVRAM is where the RTC registers are located.
- * The DS1743 code assumes this condition (i.e. -- it assumes the base
- * address for the RTC registers is:
- *
- * CONFIG_SYS_NVRAM_BASE_ADDR + CONFIG_SYS_NVRAM_SIZE
- *
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_NVRAM_SIZE (0x2000 - 8) /* NVRAM size(8k)- RTC regs*/
-#define CONFIG_RTC_DS174x 1 /* DS1743 RTC */
-
-/*-----------------------------------------------------------------------
- * FLASH related
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* number of banks */
-#define CONFIG_SYS_MAX_FLASH_SECT 8 /* sectors per device */
-
-#undef CONFIG_SYS_FLASH_CHECKSUM
-#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Flash Erase TO (in ms) */
-#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Flash Write TO(in ms) */
-
-/*-----------------------------------------------------------------------
- * DDR SDRAM
- *----------------------------------------------------------------------*/
-#define CONFIG_SPD_EEPROM 1 /* Use SPD EEPROM for setup*/
-#define SPD_EEPROM_ADDRESS {0x53} /* SPD i2c spd addresses */
-
-/*-----------------------------------------------------------------------
- * I2C
- *----------------------------------------------------------------------*/
-#define CONFIG_HARD_I2C 1 /* I2C hardware support */
-#undef CONFIG_SOFT_I2C /* I2C !bit-banged */
-#define CONFIG_SYS_I2C_SPEED 400000 /* I2C speed 400kHz */
-#define CONFIG_SYS_I2C_SLAVE 0x7F /* I2C slave address */
-#define CONFIG_SYS_I2C_NOPROBES {0x69} /* Don't probe these addrs */
-#define CONFIG_I2C_BUS1 1 /* Include i2c bus 1 supp */
-
-
-/*-----------------------------------------------------------------------
- * Environment
- *----------------------------------------------------------------------*/
-#define CONFIG_ENV_IS_IN_NVRAM 1 /* Environment uses NVRAM */
-#undef CONFIG_ENV_IS_IN_FLASH /* ... not in flash */
-#undef CONFIG_ENV_IS_IN_EEPROM /* ... not in EEPROM */
-#define CONFIG_ENV_OVERWRITE 1 /* allow env overwrite */
-
-#define CONFIG_ENV_SIZE 0x1000 /* Size of Env vars */
-#define CONFIG_ENV_ADDR (CONFIG_SYS_NVRAM_BASE_ADDR)
-
-#define CONFIG_BOOTARGS "console=ttyS0,9600 root=/dev/nfs rw nfsroot=$serverip:/home/metrobox0 nfsaddrs=$ipaddr:::::eth0:none "
-#define CONFIG_BOOTCOMMAND "tftp 8000000 pImage.metrobox;bootm 8000000"
-#define CONFIG_BOOTDELAY 5 /* disable autoboot */
-
-#define CONFIG_LOADS_ECHO 1 /* echo on for serial dnld */
-#define CONFIG_SYS_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
-
-/*-----------------------------------------------------------------------
- * Networking
- *----------------------------------------------------------------------*/
-#define CONFIG_PPC4xx_EMAC
-#define CONFIG_MII 1 /* MII PHY management */
-#define CONFIG_NET_MULTI 1
-#define CONFIG_PHY_ADDR 0xff /* no phy on EMAC0 */
-#define CONFIG_PHY1_ADDR 0xff /* no phy on EMAC1 */
-#define CONFIG_PHY2_ADDR 0x08 /* PHY addr, MGMT, EMAC2 */
-#define CONFIG_PHY3_ADDR 0x18 /* PHY addr, LCL, EMAC3 */
-#define CONFIG_HAS_ETH0
-#define CONFIG_HAS_ETH1
-#define CONFIG_HAS_ETH2
-#define CONFIG_HAS_ETH3
-#define CONFIG_PHY_RESET 1 /* reset phy upon startup */
-#define CONFIG_CIS8201_PHY 1 /* RGMII mode for Cicada */
-#define CONFIG_CIS8201_SHORT_ETCH 1 /* Use short etch mode */
-#define CONFIG_PHY_GIGE 1 /* GbE speed/duplex detect */
-#define CONFIG_PHY_RESET_DELAY 1000
-#define CONFIG_NETMASK 255.255.0.0
-#define CONFIG_ETHADDR 00:00:00:00:00:00 /* No EMAC 0 support */
-#define CONFIG_ETH1ADDR 00:00:00:00:00:00 /* No EMAC 1 support */
-#define CONFIG_SYS_RX_ETH_BUFFER 32 /* #eth rx buff & descrs */
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_PCI
-#define CONFIG_CMD_IRQ
-#define CONFIG_CMD_I2C
-#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_DATE
-#define CONFIG_CMD_BEDBUG
-#define CONFIG_CMD_PING
-#define CONFIG_CMD_DIAG
-#define CONFIG_CMD_MII
-#define CONFIG_CMD_NET
-#define CONFIG_CMD_ELF
-#define CONFIG_CMD_IDE
-#define CONFIG_CMD_FAT
-
-
-/* Include NetConsole support */
-#define CONFIG_NETCONSOLE
-
-/* Include auto complete with tabs */
-#define CONFIG_AUTO_COMPLETE 1
-#define CONFIG_AUTO_COMPLETE 1
-#define CONFIG_SYS_ALT_MEMTEST 1 /* use real memory test */
-
-#define CONFIG_SYS_LONGHELP /* undef to save memory */
-#define CONFIG_SYS_PROMPT "MetroBox=> " /* Monitor Command Prompt */
-
-#define CONFIG_SYS_HUSH_PARSER 1 /* HUSH for ext'd cli */
-#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
-
-
-/*-----------------------------------------------------------------------
- * Console Buffer
- *----------------------------------------------------------------------*/
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
-#else
-#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
-#endif
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
- /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS 16 /* max number of cmd args */
-#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Arg Buffer Size */
-
-/*-----------------------------------------------------------------------
- * Memory Test
- *----------------------------------------------------------------------*/
-#define CONFIG_SYS_MEMTEST_START 0x0400000 /* memtest works on */
-#define CONFIG_SYS_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */
-
-/*-----------------------------------------------------------------------
- * Compact Flash (in true IDE mode)
- *----------------------------------------------------------------------*/
-#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */
-#undef CONFIG_IDE_LED /* no led for ide supported */
-
-#define CONFIG_IDE_RESET /* reset for ide supported */
-#define CONFIG_SYS_IDE_MAXBUS 1 /* max. 1 IDE busses */
-#define CONFIG_SYS_IDE_MAXDEVICE (CONFIG_SYS_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */
-
-#define CONFIG_SYS_ATA_BASE_ADDR 0xF0000000
-#define CONFIG_SYS_ATA_IDE0_OFFSET 0x0000
-#define CONFIG_SYS_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */
-#define CONFIG_SYS_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses*/
-#define CONFIG_SYS_ATA_ALT_OFFSET 0x100000 /* Offset for alternate registers */
-
-#define CONFIG_SYS_ATA_STRIDE 2 /* Directly connected CF, needs a stride
- to get to the correct offset */
-#define CONFIG_DOS_PARTITION 1 /* Include dos partition */
-
-/*-----------------------------------------------------------------------
- * PCI
- *----------------------------------------------------------------------*/
-/* General PCI */
-#define CONFIG_PCI /* include pci support */
-#define CONFIG_PCI_PNP /* do pci plug-and-play */
-#define CONFIG_PCI_SCAN_SHOW /* show pci devices */
-#define CONFIG_SYS_PCI_TARGBASE (CONFIG_SYS_PCI_MEMBASE)
-
-/* Board-specific PCI */
-#define CONFIG_SYS_PCI_TARGET_INIT /* let board init pci target*/
-
-#define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x17BA /* Sandburst */
-#define CONFIG_SYS_PCI_SUBSYS_DEVICEID 0xcafe /* Whatever */
-
-/*
- * For booting Linux, the board info and command line data
- * have to be in the first 8 MB of memory, since this is
- * the maximum mapped by the Linux kernel during initialization.
- */
-#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD 0x01 /* Normal PowerOn: Boot from FLASH */
-#define BOOTFLAG_WARM 0x02 /* Software reboot */
-
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE 230400 /* kgdb serial port baud */
-#define CONFIG_KGDB_SER_INDEX 2 /* kgdb serial port */
-#endif
-
-/*-----------------------------------------------------------------------
- * Miscellaneous configurable options
- *----------------------------------------------------------------------*/
-#undef CONFIG_WATCHDOG /* watchdog disabled */
-#define CONFIG_SYS_LOAD_ADDR 0x8000000 /* default load address */
-#define CONFIG_SYS_EXTBDINFO 1 /* use extended board_info */
-
-#define CONFIG_SYS_HZ 100 /* decr freq: 1 ms ticks */
-
-
-#endif /* __CONFIG_H */
+/*
+ * (C) Copyright 2004 Sandburst Corporation
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+/************************************************************************
+ * METROBOX.h - configuration Sandburst MetroBox
+ ***********************************************************************/
+
+/*
+ * $Id: METROBOX.h,v 1.1.1.1 2009/03/25 22:22:25 kenagy Exp $
+ *
+ *
+ * $Log: METROBOX.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:25 kenagy
+ * no message
+ *
+ * Revision 1.21 2005/06/03 15:05:25 tsawyer
+ * MB rev 2.0.3 KA rev 0.0.7. Add CONFIG_VERSION_VARIABLE, Add fakeled to MB
+ *
+ * Revision 1.20 2005/04/11 20:51:11 tsawyer
+ * fix ethernet
+ *
+ * Revision 1.19 2005/04/06 15:13:36 tsawyer
+ * Update appropriate files to coincide with u-boot 1.1.3
+ *
+ * Revision 1.18 2005/03/10 14:16:02 tsawyer
+ * add def'n for cis8201 short etch option.
+ *
+ * Revision 1.17 2005/03/09 19:49:51 tsawyer
+ * Remove KGDB to allow use of 2nd serial port
+ *
+ * Revision 1.16 2004/12/02 19:00:23 tsawyer
+ * Add misc_init_f to turn on i2c-1 and all four fans before sdram init
+ *
+ * Revision 1.15 2004/09/15 18:04:12 tsawyer
+ * add multiple serial port support
+ *
+ * Revision 1.14 2004/09/03 15:27:51 tsawyer
+ * All metrobox boards are at 66.66 sys clock
+ *
+ * Revision 1.13 2004/08/05 20:27:46 tsawyer
+ * Remove system ace definitions, add net console support
+ *
+ * Revision 1.12 2004/07/29 20:00:13 tsawyer
+ * Add i2c bus 1
+ *
+ * Revision 1.11 2004/07/21 13:44:18 tsawyer
+ * SystemACE is out, CF direct to local bus is in
+ *
+ * Revision 1.10 2004/06/29 19:08:55 tsawyer
+ * Add CONFIG_MISC_INIT_R
+ *
+ * Revision 1.9 2004/06/28 21:30:53 tsawyer
+ * Fix default BOOTARGS
+ *
+ * Revision 1.8 2004/06/17 15:51:08 tsawyer
+ * auto complete
+ *
+ * Revision 1.7 2004/06/17 15:08:49 tsawyer
+ * Add autocomplete
+ *
+ * Revision 1.6 2004/06/15 12:33:57 tsawyer
+ * debugging checkpoint
+ *
+ * Revision 1.5 2004/06/12 19:48:28 tsawyer
+ * Debugging checkpoint
+ *
+ * Revision 1.4 2004/06/02 13:03:06 tsawyer
+ * Fix eth addrs
+ *
+ * Revision 1.3 2004/05/18 19:56:10 tsawyer
+ * Change default bootcommand to pImage.metrobox
+ *
+ * Revision 1.2 2004/05/18 14:13:44 tsawyer
+ * Add bringup values for bootargs and bootcommand.
+ * Remove definition of ipaddress and serverip addresses.
+ *
+ * Revision 1.1 2004/04/16 15:08:54 tsawyer
+ * Initial Revision
+ *
+ *
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_METROBOX 1 /* Board is Metrobox */
+#define CONFIG_440GX 1 /* Specifc GX support */
+#define CONFIG_440 1 /* ... PPC440 family */
+#define CONFIG_4xx 1 /* ... PPC4xx family */
+#define CONFIG_BOARD_EARLY_INIT_F 1 /* Call board_pre_init */
+#define CONFIG_MISC_INIT_F 1 /* Call board misc_init_f */
+#define CONFIG_MISC_INIT_R 1 /* Call board misc_init_r */
+#undef CONFIG_SYS_DRAM_TEST /* Disable-takes long time!*/
+#define CONFIG_SYS_CLK_FREQ 66666666 /* external freq to pll */
+
+#define CONFIG_VERY_BIG_RAM 1
+#define CONFIG_VERSION_VARIABLE
+
+#define CONFIG_IDENT_STRING " Sandburst Metrobox"
+
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_SDRAM_BASE 0x00000000 /* _must_ be 0 */
+#define CONFIG_SYS_FLASH_BASE 0xfff80000 /* start of FLASH */
+#define CONFIG_SYS_MONITOR_BASE 0xfff80000 /* start of monitor */
+#define CONFIG_SYS_PCI_MEMBASE 0x80000000 /* mapped pci memory */
+#define CONFIG_SYS_PERIPHERAL_BASE 0xe0000000 /* internal peripherals */
+#define CONFIG_SYS_ISRAM_BASE 0xc0000000 /* internal SRAM */
+#define CONFIG_SYS_PCI_BASE 0xd0000000 /* internal PCI regs */
+
+#define CONFIG_SYS_NVRAM_BASE_ADDR (CONFIG_SYS_PERIPHERAL_BASE + 0x08000000)
+#define CONFIG_SYS_FPGA_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08200000)
+#define CONFIG_SYS_BME32_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x08500000)
+#define CONFIG_SYS_GPIO_BASE (CONFIG_SYS_PERIPHERAL_BASE + 0x00000700)
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & stack pointer (placed in internal SRAM)
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_TEMP_STACK_OCM 1
+#define CONFIG_SYS_OCM_DATA_ADDR CONFIG_SYS_ISRAM_BASE
+#define CONFIG_SYS_INIT_RAM_ADDR CONFIG_SYS_ISRAM_BASE /* Initial RAM address */
+#define CONFIG_SYS_INIT_RAM_END 0x2000 /* End of used area in RAM */
+#define CONFIG_SYS_GBL_DATA_SIZE 128 /* num bytes initial data */
+
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+#define CONFIG_SYS_POST_WORD_ADDR (CONFIG_SYS_GBL_DATA_OFFSET - 0x4)
+#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_POST_WORD_ADDR
+
+#define CONFIG_SYS_MONITOR_LEN (256 * 1024) /* Rsrv 256kB for Mon */
+#define CONFIG_SYS_MALLOC_LEN (128 * 1024) /* Rsrv 128kB for malloc */
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CONFIG_SERIAL_MULTI 1
+#define CONFIG_BAUDRATE 9600
+
+#define CONFIG_SYS_BAUDRATE_TABLE \
+ {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*-----------------------------------------------------------------------
+ * NVRAM/RTC
+ *
+ * NOTE: Upper 8 bytes of NVRAM is where the RTC registers are located.
+ * The DS1743 code assumes this condition (i.e. -- it assumes the base
+ * address for the RTC registers is:
+ *
+ * CONFIG_SYS_NVRAM_BASE_ADDR + CONFIG_SYS_NVRAM_SIZE
+ *
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_NVRAM_SIZE (0x2000 - 8) /* NVRAM size(8k)- RTC regs*/
+#define CONFIG_RTC_DS174x 1 /* DS1743 RTC */
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* number of banks */
+#define CONFIG_SYS_MAX_FLASH_SECT 8 /* sectors per device */
+
+#undef CONFIG_SYS_FLASH_CHECKSUM
+#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Flash Erase TO (in ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Flash Write TO(in ms) */
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CONFIG_SPD_EEPROM 1 /* Use SPD EEPROM for setup*/
+#define SPD_EEPROM_ADDRESS {0x53} /* SPD i2c spd addresses */
+
+/*-----------------------------------------------------------------------
+ * I2C
+ *----------------------------------------------------------------------*/
+#define CONFIG_HARD_I2C 1 /* I2C hardware support */
+#undef CONFIG_SOFT_I2C /* I2C !bit-banged */
+#define CONFIG_SYS_I2C_SPEED 400000 /* I2C speed 400kHz */
+#define CONFIG_SYS_I2C_SLAVE 0x7F /* I2C slave address */
+#define CONFIG_SYS_I2C_NOPROBES {0x69} /* Don't probe these addrs */
+#define CONFIG_I2C_BUS1 1 /* Include i2c bus 1 supp */
+
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+#define CONFIG_ENV_IS_IN_NVRAM 1 /* Environment uses NVRAM */
+#undef CONFIG_ENV_IS_IN_FLASH /* ... not in flash */
+#undef CONFIG_ENV_IS_IN_EEPROM /* ... not in EEPROM */
+#define CONFIG_ENV_OVERWRITE 1 /* allow env overwrite */
+
+#define CONFIG_ENV_SIZE 0x1000 /* Size of Env vars */
+#define CONFIG_ENV_ADDR (CONFIG_SYS_NVRAM_BASE_ADDR)
+
+#define CONFIG_BOOTARGS "console=ttyS0,9600 root=/dev/nfs rw nfsroot=$serverip:/home/metrobox0 nfsaddrs=$ipaddr:::::eth0:none "
+#define CONFIG_BOOTCOMMAND "tftp 8000000 pImage.metrobox;bootm 8000000"
+#define CONFIG_BOOTDELAY 5 /* disable autoboot */
+
+#define CONFIG_LOADS_ECHO 1 /* echo on for serial dnld */
+#define CONFIG_SYS_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
+
+/*-----------------------------------------------------------------------
+ * Networking
+ *----------------------------------------------------------------------*/
+#define CONFIG_PPC4xx_EMAC
+#define CONFIG_MII 1 /* MII PHY management */
+#define CONFIG_NET_MULTI 1
+#define CONFIG_PHY_ADDR 0xff /* no phy on EMAC0 */
+#define CONFIG_PHY1_ADDR 0xff /* no phy on EMAC1 */
+#define CONFIG_PHY2_ADDR 0x08 /* PHY addr, MGMT, EMAC2 */
+#define CONFIG_PHY3_ADDR 0x18 /* PHY addr, LCL, EMAC3 */
+#define CONFIG_HAS_ETH0
+#define CONFIG_HAS_ETH1
+#define CONFIG_HAS_ETH2
+#define CONFIG_HAS_ETH3
+#define CONFIG_PHY_RESET 1 /* reset phy upon startup */
+#define CONFIG_CIS8201_PHY 1 /* RGMII mode for Cicada */
+#define CONFIG_CIS8201_SHORT_ETCH 1 /* Use short etch mode */
+#define CONFIG_PHY_GIGE 1 /* GbE speed/duplex detect */
+#define CONFIG_PHY_RESET_DELAY 1000
+#define CONFIG_NETMASK 255.255.0.0
+#define CONFIG_ETHADDR 00:00:00:00:00:00 /* No EMAC 0 support */
+#define CONFIG_ETH1ADDR 00:00:00:00:00:00 /* No EMAC 1 support */
+#define CONFIG_SYS_RX_ETH_BUFFER 32 /* #eth rx buff & descrs */
+
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_BEDBUG
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_IDE
+#define CONFIG_CMD_FAT
+
+
+/* Include NetConsole support */
+#define CONFIG_NETCONSOLE
+
+/* Include auto complete with tabs */
+#define CONFIG_AUTO_COMPLETE 1
+#define CONFIG_AUTO_COMPLETE 1
+#define CONFIG_SYS_ALT_MEMTEST 1 /* use real memory test */
+
+#define CONFIG_SYS_LONGHELP /* undef to save memory */
+#define CONFIG_SYS_PROMPT "MetroBox=> " /* Monitor Command Prompt */
+
+#define CONFIG_SYS_HUSH_PARSER 1 /* HUSH for ext'd cli */
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+
+
+/*-----------------------------------------------------------------------
+ * Console Buffer
+ *----------------------------------------------------------------------*/
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
+#else
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+#endif
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
+ /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS 16 /* max number of cmd args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Arg Buffer Size */
+
+/*-----------------------------------------------------------------------
+ * Memory Test
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_MEMTEST_START 0x0400000 /* memtest works on */
+#define CONFIG_SYS_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */
+
+/*-----------------------------------------------------------------------
+ * Compact Flash (in true IDE mode)
+ *----------------------------------------------------------------------*/
+#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */
+#undef CONFIG_IDE_LED /* no led for ide supported */
+
+#define CONFIG_IDE_RESET /* reset for ide supported */
+#define CONFIG_SYS_IDE_MAXBUS 1 /* max. 1 IDE busses */
+#define CONFIG_SYS_IDE_MAXDEVICE (CONFIG_SYS_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */
+
+#define CONFIG_SYS_ATA_BASE_ADDR 0xF0000000
+#define CONFIG_SYS_ATA_IDE0_OFFSET 0x0000
+#define CONFIG_SYS_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */
+#define CONFIG_SYS_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses*/
+#define CONFIG_SYS_ATA_ALT_OFFSET 0x100000 /* Offset for alternate registers */
+
+#define CONFIG_SYS_ATA_STRIDE 2 /* Directly connected CF, needs a stride
+ to get to the correct offset */
+#define CONFIG_DOS_PARTITION 1 /* Include dos partition */
+
+/*-----------------------------------------------------------------------
+ * PCI
+ *----------------------------------------------------------------------*/
+/* General PCI */
+#define CONFIG_PCI /* include pci support */
+#define CONFIG_PCI_PNP /* do pci plug-and-play */
+#define CONFIG_PCI_SCAN_SHOW /* show pci devices */
+#define CONFIG_SYS_PCI_TARGBASE (CONFIG_SYS_PCI_MEMBASE)
+
+/* Board-specific PCI */
+#define CONFIG_SYS_PCI_TARGET_INIT /* let board init pci target*/
+
+#define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x17BA /* Sandburst */
+#define CONFIG_SYS_PCI_SUBSYS_DEVICEID 0xcafe /* Whatever */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal PowerOn: Boot from FLASH */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE 230400 /* kgdb serial port baud */
+#define CONFIG_KGDB_SER_INDEX 2 /* kgdb serial port */
+#endif
+
+/*-----------------------------------------------------------------------
+ * Miscellaneous configurable options
+ *----------------------------------------------------------------------*/
+#undef CONFIG_WATCHDOG /* watchdog disabled */
+#define CONFIG_SYS_LOAD_ADDR 0x8000000 /* default load address */
+#define CONFIG_SYS_EXTBDINFO 1 /* use extended board_info */
+
+#define CONFIG_SYS_HZ 100 /* decr freq: 1 ms ticks */
+
+
+#endif /* __CONFIG_H */
diff -Naur u-boot-2009.03_orig/include/configs/barco.h u-boot-2009.03/include/configs/barco.h
--- u-boot-2009.03_orig/include/configs/barco.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/configs/barco.h 2009-03-25 17:37:22.739860000 -0700
@@ -1,371 +1,374 @@
-/********************************************************************
- *
- * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
- *
- * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/include/configs/barco.h,v $
- * $Revision: 1.2 $
- * $Author: mleeman $
- * $Date: 2005/02/21 12:48:58 $
- *
- * Last ChangeLog Entry
- * $Log: barco.h,v $
- * Revision 1.2 2005/02/21 12:48:58 mleeman
- * update of copyright years (feedback wd)
- *
- * Revision 1.1 2005/02/14 09:29:25 mleeman
- * moved barcohydra.h to barco.h
- *
- * Revision 1.4 2005/02/09 12:56:23 mleeman
- * add generic header to track changes in sources
- *
- *
- *******************************************************************/
-
-/*
- * (C) Copyright 2001, 2002
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
- */
-
-/* ------------------------------------------------------------------------- */
-
-/*
- * board/config.h - configuration options, board specific
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-
-#define CONFIG_MPC824X 1
-#define CONFIG_MPC8245 1
-#define CONFIG_BARCOBCD_STREAMING 1
-
-#undef USE_DINK32
-
-#define CONFIG_CONS_INDEX 3 /* set to '3' for on-chip DUART */
-#define CONFIG_BAUDRATE 9600
-#define CONFIG_DRAM_SPEED 100 /* MHz */
-
-#define CONFIG_BOOTARGS "mem=32M"
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_SUBNETMASK
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_DNS
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_ELF
-#define CONFIG_CMD_I2C
-#define CONFIG_CMD_EEPROM
-#define CONFIG_CMD_PCI
-
-#undef CONFIG_CMD_NET
-
-
-#define CONFIG_HUSH_PARSER 1 /* use "hush" command parser */
-#define CONFIG_BOOTDELAY 1
-#define CONFIG_BOOTCOMMAND "boot_default"
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_LONGHELP 1 /* undef to save memory */
-#define CONFIG_SYS_PROMPT "=> " /* Monitor Command Prompt */
-#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
-#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
-#define CONFIG_SYS_LOAD_ADDR 0x00100000 /* default load address */
-#define CONFIG_SYS_HZ 1000 /* decrementer freq: 1 ms ticks */
-
-
-/*-----------------------------------------------------------------------
- * PCI stuff
- *-----------------------------------------------------------------------
- */
-#define CONFIG_PCI /* include pci support */
-#undef CONFIG_PCI_PNP
-
-#define PCI_ENET0_IOADDR 0x80000000
-#define PCI_ENET0_MEMADDR 0x80000000
-#define PCI_ENET1_IOADDR 0x81000000
-#define PCI_ENET1_MEMADDR 0x81000000
-
-
-/*-----------------------------------------------------------------------
- * Start addresses for the final memory configuration
- * (Set up by the startup code)
- * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0
- */
-#define CONFIG_SYS_SDRAM_BASE 0x00000000
-#define CONFIG_SYS_MAX_RAM_SIZE 0x02000000
-
-#define CONFIG_LOGBUFFER
-#ifdef CONFIG_LOGBUFFER
-#define CONFIG_SYS_STDOUT_ADDR 0x1FFC000
-#else
-#define CONFIG_SYS_STDOUT_ADDR 0x2B9000
-#endif
-
-#define CONFIG_SYS_RESET_ADDRESS 0xFFF00100
-
-#if defined (USE_DINK32)
-#define CONFIG_SYS_MONITOR_LEN 0x00030000
-#define CONFIG_SYS_MONITOR_BASE 0x00090000
-#define CONFIG_SYS_RAMBOOT 1
-#define CONFIG_SYS_INIT_RAM_ADDR (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
-#define CONFIG_SYS_INIT_RAM_END 0x10000
-#define CONFIG_SYS_GBL_DATA_SIZE 256 /* size in bytes reserved for initial data */
-#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
-#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_GBL_DATA_OFFSET
-#else
-#undef CONFIG_SYS_RAMBOOT
-#define CONFIG_SYS_MONITOR_LEN 0x00030000
-#define CONFIG_SYS_MONITOR_BASE TEXT_BASE
-
-#define CONFIG_SYS_GBL_DATA_SIZE 128
-
-#define CONFIG_SYS_INIT_RAM_ADDR 0x40000000
-#define CONFIG_SYS_INIT_RAM_END 0x1000
-#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
-
-#endif
-
-#define CONFIG_SYS_FLASH_BASE 0xFFF00000
-#define CONFIG_SYS_FLASH_SIZE (8 * 1024 * 1024) /* Unity has onboard 1MByte flash */
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_OFFSET 0x000047A4 /* Offset of Environment Sector */
-#define CONFIG_ENV_SIZE 0x00002000 /* Total Size of Environment Sector */
-/* #define ENV_CRC 0x8BF6F24B XXX - FIXME: gets defined automatically */
-
-#define CONFIG_SYS_MALLOC_LEN (512 << 10) /* Reserve 512 kB for malloc() */
-
-#define CONFIG_SYS_MEMTEST_START 0x00000000 /* memtest works on */
-#define CONFIG_SYS_MEMTEST_END 0x04000000 /* 0 ... 32 MB in DRAM */
-
-#define CONFIG_SYS_EUMB_ADDR 0xFDF00000
-
-#define CONFIG_SYS_FLASH_RANGE_BASE 0xFFC00000 /* flash memory address range */
-#define CONFIG_SYS_FLASH_RANGE_SIZE 0x00400000
-#define FLASH_BASE0_PRELIM 0xFFF00000 /* sandpoint flash */
-#define FLASH_BASE1_PRELIM 0xFF000000 /* PMC onboard flash */
-
-/*
- * select i2c support configuration
- *
- * Supported configurations are {none, software, hardware} drivers.
- * If the software driver is chosen, there are some additional
- * configuration items that the driver uses to drive the port pins.
- */
-#define CONFIG_HARD_I2C 1 /* To enable I2C support */
-#undef CONFIG_SOFT_I2C /* I2C bit-banged */
-#define CONFIG_SYS_I2C_SPEED 400000 /* I2C speed and slave address */
-#define CONFIG_SYS_I2C_SLAVE 0x7F
-
-#ifdef CONFIG_SOFT_I2C
-#error "Soft I2C is not configured properly. Please review!"
-#define I2C_PORT 3 /* Port A=0, B=1, C=2, D=3 */
-#define I2C_ACTIVE (iop->pdir |= 0x00010000)
-#define I2C_TRISTATE (iop->pdir &= ~0x00010000)
-#define I2C_READ ((iop->pdat & 0x00010000) != 0)
-#define I2C_SDA(bit) if(bit) iop->pdat |= 0x00010000; \
- else iop->pdat &= ~0x00010000
-#define I2C_SCL(bit) if(bit) iop->pdat |= 0x00020000; \
- else iop->pdat &= ~0x00020000
-#define I2C_DELAY udelay(5) /* 1/4 I2C clock duration */
-#endif /* CONFIG_SOFT_I2C */
-
-#define CONFIG_SYS_I2C_EEPROM_ADDR 0x57 /* EEPROM IS24C02 */
-#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1 /* Bytes of address */
-#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
-#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10 /* and takes up to 10 msec */
-
-#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-#define CONFIG_SYS_FLASH_BANKS { FLASH_BASE0_PRELIM , FLASH_BASE1_PRELIM }
-#define CONFIG_SYS_DBUS_SIZE2 1
-
-/*-----------------------------------------------------------------------
- * Definitions for initial stack pointer and data area (in DPRAM)
- */
-
-
- /*
- * NS16550 Configuration (internal DUART)
- */
- /*
- * Low Level Configuration Settings
- * (address mappings, register initial values, etc.)
- * You should know what you are doing if you make changes here.
- */
-
-#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
-
-#define CONFIG_SYS_ROMNAL 0x0F /*rom/flash next access time */
-#define CONFIG_SYS_ROMFAL 0x1E /*rom/flash access time */
-
-#define CONFIG_SYS_REFINT 0x8F /* no of clock cycles between CBR refresh cycles */
-
-/* the following are for SDRAM only*/
-#define CONFIG_SYS_BSTOPRE 0x25C /* Burst To Precharge, sets open page interval */
-#define CONFIG_SYS_REFREC 8 /* Refresh to activate interval */
-#define CONFIG_SYS_RDLAT 4 /* data latency from read command */
-#define CONFIG_SYS_PRETOACT 3 /* Precharge to activate interval */
-#define CONFIG_SYS_ACTTOPRE 5 /* Activate to Precharge interval */
-#define CONFIG_SYS_ACTORW 2 /* Activate to R/W */
-#define CONFIG_SYS_SDMODE_CAS_LAT 3 /* SDMODE CAS latency */
-#define CONFIG_SYS_SDMODE_WRAP 0 /* SDMODE wrap type */
-
-#define CONFIG_SYS_REGISTERD_TYPE_BUFFER 1
-#define CONFIG_SYS_EXTROM 0
-#define CONFIG_SYS_REGDIMM 0
-
-
-/* memory bank settings*/
-/*
- * only bits 20-29 are actually used from these vales to set the
- * start/end address the upper two bits will be 0, and the lower 20
- * bits will be set to 0x00000 for a start address, or 0xfffff for an
- * end address
- */
-#define CONFIG_SYS_BANK0_START 0x00000000
-#define CONFIG_SYS_BANK0_END 0x01FFFFFF
-#define CONFIG_SYS_BANK0_ENABLE 1
-#define CONFIG_SYS_BANK1_START 0x02000000
-#define CONFIG_SYS_BANK1_END 0x02ffffff
-#define CONFIG_SYS_BANK1_ENABLE 0
-#define CONFIG_SYS_BANK2_START 0x03f00000
-#define CONFIG_SYS_BANK2_END 0x03ffffff
-#define CONFIG_SYS_BANK2_ENABLE 0
-#define CONFIG_SYS_BANK3_START 0x04000000
-#define CONFIG_SYS_BANK3_END 0x04ffffff
-#define CONFIG_SYS_BANK3_ENABLE 0
-#define CONFIG_SYS_BANK4_START 0x05000000
-#define CONFIG_SYS_BANK4_END 0x05FFFFFF
-#define CONFIG_SYS_BANK4_ENABLE 0
-#define CONFIG_SYS_BANK5_START 0x06000000
-#define CONFIG_SYS_BANK5_END 0x06FFFFFF
-#define CONFIG_SYS_BANK5_ENABLE 0
-#define CONFIG_SYS_BANK6_START 0x07000000
-#define CONFIG_SYS_BANK6_END 0x07FFFFFF
-#define CONFIG_SYS_BANK6_ENABLE 0
-#define CONFIG_SYS_BANK7_START 0x08000000
-#define CONFIG_SYS_BANK7_END 0x08FFFFFF
-#define CONFIG_SYS_BANK7_ENABLE 0
-/*
- * Memory bank enable bitmask, specifying which of the banks defined above
- are actually present. MSB is for bank #7, LSB is for bank #0.
- */
-#define CONFIG_SYS_BANK_ENABLE 0x01
-
-#define CONFIG_SYS_ODCR 0xff /* configures line driver impedances, */
- /* see 8240 book for bit definitions */
-#define CONFIG_SYS_PGMAX 0x32 /* how long the 8240 retains the */
- /* currently accessed page in memory */
- /* see 8240 book for details */
-
-/* SDRAM 0 - 256MB */
-#define CONFIG_SYS_IBAT0L (CONFIG_SYS_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
-#define CONFIG_SYS_IBAT0U (CONFIG_SYS_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
-
-/* stack in DCACHE @ 1GB (no backing mem) */
-#if defined(USE_DINK32)
-#define CONFIG_SYS_IBAT1L (0x40000000 | BATL_PP_00 )
-#define CONFIG_SYS_IBAT1U (0x40000000 | BATU_BL_128K )
-#else
-#define CONFIG_SYS_IBAT1L (CONFIG_SYS_INIT_RAM_ADDR | BATL_PP_10 | BATL_MEMCOHERENCE)
-#define CONFIG_SYS_IBAT1U (CONFIG_SYS_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
-#endif
-
-/* PCI memory */
-#define CONFIG_SYS_IBAT2L (0x80000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
-#define CONFIG_SYS_IBAT2U (0x80000000 | BATU_BL_256M | BATU_VS | BATU_VP)
-
-/* Flash, config addrs, etc */
-#define CONFIG_SYS_IBAT3L (0xF0000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
-#define CONFIG_SYS_IBAT3U (0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP)
-
-#define CONFIG_SYS_DBAT0L CONFIG_SYS_IBAT0L
-#define CONFIG_SYS_DBAT0U CONFIG_SYS_IBAT0U
-#define CONFIG_SYS_DBAT1L CONFIG_SYS_IBAT1L
-#define CONFIG_SYS_DBAT1U CONFIG_SYS_IBAT1U
-#define CONFIG_SYS_DBAT2L CONFIG_SYS_IBAT2L
-#define CONFIG_SYS_DBAT2U CONFIG_SYS_IBAT2U
-#define CONFIG_SYS_DBAT3L CONFIG_SYS_IBAT3L
-#define CONFIG_SYS_DBAT3U CONFIG_SYS_IBAT3U
-
-/*
- * For booting Linux, the board info and command line data
- * have to be in the first 8 MB of memory, since this is
- * the maximum mapped by the Linux kernel during initialization.
- */
-#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
-/*-----------------------------------------------------------------------
- * FLASH organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */
-#define CONFIG_SYS_MAX_FLASH_SECT 20 /* max number of sectors on one chip */
-
-#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */
-#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */
-
-#define CONFIG_SYS_FLASH_CHECKSUM
-
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CONFIG_SYS_CACHELINE_SIZE 32 /* For MPC8240 CPU */
-#if defined(CONFIG_CMD_KGDB)
-# define CONFIG_SYS_CACHELINE_SHIFT 5 /* log base 2 of the above value */
-#endif
-
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
-#define BOOTFLAG_WARM 0x02 /* Software reboot */
-
-/* values according to the manual */
-
-#define CONFIG_DRAM_50MHZ 1
-#define CONFIG_SDRAM_50MHZ
-
-#define CONFIG_DISK_SPINUP_TIME 1000000
-
-
-#endif /* __CONFIG_H */
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: C:/qaz/__CVS_ROOT/units/or1200_soc/sw/u-boot-2009.03/include/configs/barco.h,v $
+ * $Revision: 1.1.1.1 $
+ * $Author: kenagy $
+ * $Date: 2009/03/25 22:22:22 $
+ *
+ * Last ChangeLog Entry
+ * $Log: barco.h,v $
+ * Revision 1.1.1.1 2009/03/25 22:22:22 kenagy
+ * no message
+ *
+ * Revision 1.2 2005/02/21 12:48:58 mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.1 2005/02/14 09:29:25 mleeman
+ * moved barcohydra.h to barco.h
+ *
+ * Revision 1.4 2005/02/09 12:56:23 mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (C) Copyright 2001, 2002
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+/* ------------------------------------------------------------------------- */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_MPC824X 1
+#define CONFIG_MPC8245 1
+#define CONFIG_BARCOBCD_STREAMING 1
+
+#undef USE_DINK32
+
+#define CONFIG_CONS_INDEX 3 /* set to '3' for on-chip DUART */
+#define CONFIG_BAUDRATE 9600
+#define CONFIG_DRAM_SPEED 100 /* MHz */
+
+#define CONFIG_BOOTARGS "mem=32M"
+
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_DNS
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_PCI
+
+#undef CONFIG_CMD_NET
+
+
+#define CONFIG_HUSH_PARSER 1 /* use "hush" command parser */
+#define CONFIG_BOOTDELAY 1
+#define CONFIG_BOOTCOMMAND "boot_default"
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP 1 /* undef to save memory */
+#define CONFIG_SYS_PROMPT "=> " /* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
+#define CONFIG_SYS_LOAD_ADDR 0x00100000 /* default load address */
+#define CONFIG_SYS_HZ 1000 /* decrementer freq: 1 ms ticks */
+
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *-----------------------------------------------------------------------
+ */
+#define CONFIG_PCI /* include pci support */
+#undef CONFIG_PCI_PNP
+
+#define PCI_ENET0_IOADDR 0x80000000
+#define PCI_ENET0_MEMADDR 0x80000000
+#define PCI_ENET1_IOADDR 0x81000000
+#define PCI_ENET1_MEMADDR 0x81000000
+
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0
+ */
+#define CONFIG_SYS_SDRAM_BASE 0x00000000
+#define CONFIG_SYS_MAX_RAM_SIZE 0x02000000
+
+#define CONFIG_LOGBUFFER
+#ifdef CONFIG_LOGBUFFER
+#define CONFIG_SYS_STDOUT_ADDR 0x1FFC000
+#else
+#define CONFIG_SYS_STDOUT_ADDR 0x2B9000
+#endif
+
+#define CONFIG_SYS_RESET_ADDRESS 0xFFF00100
+
+#if defined (USE_DINK32)
+#define CONFIG_SYS_MONITOR_LEN 0x00030000
+#define CONFIG_SYS_MONITOR_BASE 0x00090000
+#define CONFIG_SYS_RAMBOOT 1
+#define CONFIG_SYS_INIT_RAM_ADDR (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
+#define CONFIG_SYS_INIT_RAM_END 0x10000
+#define CONFIG_SYS_GBL_DATA_SIZE 256 /* size in bytes reserved for initial data */
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_GBL_DATA_OFFSET
+#else
+#undef CONFIG_SYS_RAMBOOT
+#define CONFIG_SYS_MONITOR_LEN 0x00030000
+#define CONFIG_SYS_MONITOR_BASE TEXT_BASE
+
+#define CONFIG_SYS_GBL_DATA_SIZE 128
+
+#define CONFIG_SYS_INIT_RAM_ADDR 0x40000000
+#define CONFIG_SYS_INIT_RAM_END 0x1000
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+
+#endif
+
+#define CONFIG_SYS_FLASH_BASE 0xFFF00000
+#define CONFIG_SYS_FLASH_SIZE (8 * 1024 * 1024) /* Unity has onboard 1MByte flash */
+#define CONFIG_ENV_IS_IN_FLASH 1
+#define CONFIG_ENV_OFFSET 0x000047A4 /* Offset of Environment Sector */
+#define CONFIG_ENV_SIZE 0x00002000 /* Total Size of Environment Sector */
+/* #define ENV_CRC 0x8BF6F24B XXX - FIXME: gets defined automatically */
+
+#define CONFIG_SYS_MALLOC_LEN (512 << 10) /* Reserve 512 kB for malloc() */
+
+#define CONFIG_SYS_MEMTEST_START 0x00000000 /* memtest works on */
+#define CONFIG_SYS_MEMTEST_END 0x04000000 /* 0 ... 32 MB in DRAM */
+
+#define CONFIG_SYS_EUMB_ADDR 0xFDF00000
+
+#define CONFIG_SYS_FLASH_RANGE_BASE 0xFFC00000 /* flash memory address range */
+#define CONFIG_SYS_FLASH_RANGE_SIZE 0x00400000
+#define FLASH_BASE0_PRELIM 0xFFF00000 /* sandpoint flash */
+#define FLASH_BASE1_PRELIM 0xFF000000 /* PMC onboard flash */
+
+/*
+ * select i2c support configuration
+ *
+ * Supported configurations are {none, software, hardware} drivers.
+ * If the software driver is chosen, there are some additional
+ * configuration items that the driver uses to drive the port pins.
+ */
+#define CONFIG_HARD_I2C 1 /* To enable I2C support */
+#undef CONFIG_SOFT_I2C /* I2C bit-banged */
+#define CONFIG_SYS_I2C_SPEED 400000 /* I2C speed and slave address */
+#define CONFIG_SYS_I2C_SLAVE 0x7F
+
+#ifdef CONFIG_SOFT_I2C
+#error "Soft I2C is not configured properly. Please review!"
+#define I2C_PORT 3 /* Port A=0, B=1, C=2, D=3 */
+#define I2C_ACTIVE (iop->pdir |= 0x00010000)
+#define I2C_TRISTATE (iop->pdir &= ~0x00010000)
+#define I2C_READ ((iop->pdat & 0x00010000) != 0)
+#define I2C_SDA(bit) if(bit) iop->pdat |= 0x00010000; \
+ else iop->pdat &= ~0x00010000
+#define I2C_SCL(bit) if(bit) iop->pdat |= 0x00020000; \
+ else iop->pdat &= ~0x00020000
+#define I2C_DELAY udelay(5) /* 1/4 I2C clock duration */
+#endif /* CONFIG_SOFT_I2C */
+
+#define CONFIG_SYS_I2C_EEPROM_ADDR 0x57 /* EEPROM IS24C02 */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1 /* Bytes of address */
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10 /* and takes up to 10 msec */
+
+#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+#define CONFIG_SYS_FLASH_BANKS { FLASH_BASE0_PRELIM , FLASH_BASE1_PRELIM }
+#define CONFIG_SYS_DBUS_SIZE2 1
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+
+
+ /*
+ * NS16550 Configuration (internal DUART)
+ */
+ /*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+
+#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
+
+#define CONFIG_SYS_ROMNAL 0x0F /*rom/flash next access time */
+#define CONFIG_SYS_ROMFAL 0x1E /*rom/flash access time */
+
+#define CONFIG_SYS_REFINT 0x8F /* no of clock cycles between CBR refresh cycles */
+
+/* the following are for SDRAM only*/
+#define CONFIG_SYS_BSTOPRE 0x25C /* Burst To Precharge, sets open page interval */
+#define CONFIG_SYS_REFREC 8 /* Refresh to activate interval */
+#define CONFIG_SYS_RDLAT 4 /* data latency from read command */
+#define CONFIG_SYS_PRETOACT 3 /* Precharge to activate interval */
+#define CONFIG_SYS_ACTTOPRE 5 /* Activate to Precharge interval */
+#define CONFIG_SYS_ACTORW 2 /* Activate to R/W */
+#define CONFIG_SYS_SDMODE_CAS_LAT 3 /* SDMODE CAS latency */
+#define CONFIG_SYS_SDMODE_WRAP 0 /* SDMODE wrap type */
+
+#define CONFIG_SYS_REGISTERD_TYPE_BUFFER 1
+#define CONFIG_SYS_EXTROM 0
+#define CONFIG_SYS_REGDIMM 0
+
+
+/* memory bank settings*/
+/*
+ * only bits 20-29 are actually used from these vales to set the
+ * start/end address the upper two bits will be 0, and the lower 20
+ * bits will be set to 0x00000 for a start address, or 0xfffff for an
+ * end address
+ */
+#define CONFIG_SYS_BANK0_START 0x00000000
+#define CONFIG_SYS_BANK0_END 0x01FFFFFF
+#define CONFIG_SYS_BANK0_ENABLE 1
+#define CONFIG_SYS_BANK1_START 0x02000000
+#define CONFIG_SYS_BANK1_END 0x02ffffff
+#define CONFIG_SYS_BANK1_ENABLE 0
+#define CONFIG_SYS_BANK2_START 0x03f00000
+#define CONFIG_SYS_BANK2_END 0x03ffffff
+#define CONFIG_SYS_BANK2_ENABLE 0
+#define CONFIG_SYS_BANK3_START 0x04000000
+#define CONFIG_SYS_BANK3_END 0x04ffffff
+#define CONFIG_SYS_BANK3_ENABLE 0
+#define CONFIG_SYS_BANK4_START 0x05000000
+#define CONFIG_SYS_BANK4_END 0x05FFFFFF
+#define CONFIG_SYS_BANK4_ENABLE 0
+#define CONFIG_SYS_BANK5_START 0x06000000
+#define CONFIG_SYS_BANK5_END 0x06FFFFFF
+#define CONFIG_SYS_BANK5_ENABLE 0
+#define CONFIG_SYS_BANK6_START 0x07000000
+#define CONFIG_SYS_BANK6_END 0x07FFFFFF
+#define CONFIG_SYS_BANK6_ENABLE 0
+#define CONFIG_SYS_BANK7_START 0x08000000
+#define CONFIG_SYS_BANK7_END 0x08FFFFFF
+#define CONFIG_SYS_BANK7_ENABLE 0
+/*
+ * Memory bank enable bitmask, specifying which of the banks defined above
+ are actually present. MSB is for bank #7, LSB is for bank #0.
+ */
+#define CONFIG_SYS_BANK_ENABLE 0x01
+
+#define CONFIG_SYS_ODCR 0xff /* configures line driver impedances, */
+ /* see 8240 book for bit definitions */
+#define CONFIG_SYS_PGMAX 0x32 /* how long the 8240 retains the */
+ /* currently accessed page in memory */
+ /* see 8240 book for details */
+
+/* SDRAM 0 - 256MB */
+#define CONFIG_SYS_IBAT0L (CONFIG_SYS_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CONFIG_SYS_IBAT0U (CONFIG_SYS_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* stack in DCACHE @ 1GB (no backing mem) */
+#if defined(USE_DINK32)
+#define CONFIG_SYS_IBAT1L (0x40000000 | BATL_PP_00 )
+#define CONFIG_SYS_IBAT1U (0x40000000 | BATU_BL_128K )
+#else
+#define CONFIG_SYS_IBAT1L (CONFIG_SYS_INIT_RAM_ADDR | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CONFIG_SYS_IBAT1U (CONFIG_SYS_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
+#endif
+
+/* PCI memory */
+#define CONFIG_SYS_IBAT2L (0x80000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CONFIG_SYS_IBAT2U (0x80000000 | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* Flash, config addrs, etc */
+#define CONFIG_SYS_IBAT3L (0xF0000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CONFIG_SYS_IBAT3U (0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP)
+
+#define CONFIG_SYS_DBAT0L CONFIG_SYS_IBAT0L
+#define CONFIG_SYS_DBAT0U CONFIG_SYS_IBAT0U
+#define CONFIG_SYS_DBAT1L CONFIG_SYS_IBAT1L
+#define CONFIG_SYS_DBAT1U CONFIG_SYS_IBAT1U
+#define CONFIG_SYS_DBAT2L CONFIG_SYS_IBAT2L
+#define CONFIG_SYS_DBAT2U CONFIG_SYS_IBAT2U
+#define CONFIG_SYS_DBAT3L CONFIG_SYS_IBAT3L
+#define CONFIG_SYS_DBAT3U CONFIG_SYS_IBAT3U
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */
+#define CONFIG_SYS_MAX_FLASH_SECT 20 /* max number of sectors on one chip */
+
+#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */
+
+#define CONFIG_SYS_FLASH_CHECKSUM
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CONFIG_SYS_CACHELINE_SIZE 32 /* For MPC8240 CPU */
+#if defined(CONFIG_CMD_KGDB)
+# define CONFIG_SYS_CACHELINE_SHIFT 5 /* log base 2 of the above value */
+#endif
+
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+/* values according to the manual */
+
+#define CONFIG_DRAM_50MHZ 1
+#define CONFIG_SDRAM_50MHZ
+
+#define CONFIG_DISK_SPINUP_TIME 1000000
+
+
+#endif /* __CONFIG_H */
diff -Naur u-boot-2009.03_orig/include/configs/de1_or1k.h u-boot-2009.03/include/configs/de1_or1k.h
--- u-boot-2009.03_orig/include/configs/de1_or1k.h 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/configs/de1_or1k.h 2009-03-25 17:39:02.660456000 -0700
@@ -0,0 +1,154 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+/*
+ *
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+
+/*-----------------------------------------------------------------------
+ * misc configuration.
+ */
+
+#undef CONFIG_BZIP2
+
+#undef CONFIG_WATCHDOG
+
+#define CONFIG_CLOCKS_IN_MHZ 24
+#define CONFIG_HZ (CONFIG_CLOCKS_IN_MHZ * 1000000)
+
+/*-----------------------------------------------------------------------
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#undef CONFIG_CMD_AUTOSCRIPT /* Autoscript Support */
+#undef CONFIG_CMD_BDI /* bdinfo */
+#undef CONFIG_CMD_BOOTD /* bootd */
+// #undef CONFIG_CMD_CONSOLE /* coninfo */
+#undef CONFIG_CMD_ECHO /* echo arguments */
+#undef CONFIG_CMD_SAVEENV /* saveenv */
+#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */
+#undef CONFIG_CMD_FPGA /* FPGA configuration Support */
+#undef CONFIG_CMD_IMI /* iminfo */
+#undef CONFIG_CMD_IMLS /* List all found images */
+#undef CONFIG_CMD_ITEST /* Integer (and string) test */
+#undef CONFIG_CMD_LOADB /* loadb */
+#undef CONFIG_CMD_LOADS /* loads */
+// #undef CONFIG_CMD_MEMORY /* md mm nm mw cp cmp crc base loop mtest */
+#undef CONFIG_CMD_MISC /* Misc functions like sleep etc*/
+#undef CONFIG_CMD_NET /* bootp, tftpboot, rarpboot */
+#undef CONFIG_CMD_NFS /* NFS support */
+#undef CONFIG_CMD_RUN /* run command in env variable */
+#undef CONFIG_CMD_SETGETDCR /* DCR support on 4xx */
+#undef CONFIG_CMD_XIMG /* Load part of Multi Image */
+
+
+/*-----------------------------------------------------------------------
+ * environment data configuration.
+ */
+
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_SIZE 1024
+#define CONFIG_SYS_MAX_FLASH_SECT 1
+#define CONFIG_SYS_NO_FLASH
+
+
+/*-----------------------------------------------------------------------
+ * boot configuration.
+ */
+#undef CONFIG_BOOTARGS
+
+#define CONFIG_BOOTDELAY 10 /* autoboot after 10 seconds */
+#define CONFIG_TIMESTAMP /* Print image info with timestamp */
+#define CONFIG_SYS_LOAD_ADDR 0x81000000
+
+
+/*-----------------------------------------------------------------------
+ * Console configuration.
+ */
+#define CONFIG_SYS_PROMPT "de1_or1k # " /* Monitor Command Prompt */
+
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_CMDLINE_EDITING
+
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS 16
+
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0
+ */
+#define CONFIG_SYS_SDRAM_BASE 0x30000000
+#define CONFIG_SYS_SDRAM_SIZE 0x00020000
+#define CONFIG_SYS_FLASH_BASE 0x20000000
+#define CONFIG_SYS_FLASH_SIZE 0x00400000
+
+#define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE
+#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_SDRAM_SIZE)
+
+#define CONFIG_SYS_MALLOC_BASE 0x30010000
+#define CONFIG_SYS_MALLOC_LEN 32*1024
+
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area
+ */
+
+#define CONFIG_SYS_INIT_RAM_ADDR 0x30000000 /* inside of SDRAM */
+#define CONFIG_SYS_INIT_RAM_END (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_SDRAM_SIZE) /* End of used area in RAM */
+#define CONFIG_SYS_INIT_DATA_SIZE 128 /* size in bytes reserved for initial data */
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_INIT_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_GBL_DATA_OFFSET
+
+
+/*-----------------------------------------------------------------------
+ * serial port configuration.
+ */
+
+#define CONFIG_BAUDRATE 57600
+#define CONFIG_SYS_BAUDRATE_TABLE { 9600 , 19200 , 38400 , 57600, 115200 }
+
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_REG_SIZE 1
+#define CONFIG_SYS_NS16550_COM1 (0x50000000)
+#define CONFIG_SYS_NS16550_CLK CONFIG_HZ
+
+
+/*-----------------------------------------------------------------------
+ * qaz debug
+ */
+
+
+
+#endif /* __CONFIG_H */
+
+
diff -Naur u-boot-2009.03_orig/include/cramfs/CVS/Entries u-boot-2009.03/include/cramfs/CVS/Entries
--- u-boot-2009.03_orig/include/cramfs/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/cramfs/CVS/Entries 2009-03-25 15:58:14.387304100 -0700
@@ -0,0 +1,3 @@
+/cramfs_fs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cramfs_fs_sb.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/cramfs/CVS/Entries.Extra u-boot-2009.03/include/cramfs/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/cramfs/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/cramfs/CVS/Entries.Extra 2009-03-25 15:58:14.402929000 -0700
@@ -0,0 +1,2 @@
+/cramfs_fs.h///1238019748/
+/cramfs_fs_sb.h///1238019748/
diff -Naur u-boot-2009.03_orig/include/cramfs/CVS/Entries.Extra.Old u-boot-2009.03/include/cramfs/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/cramfs/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/cramfs/CVS/Entries.Extra.Old 2009-03-25 15:25:55.000000000 -0700
@@ -0,0 +1,2 @@
+/cramfs_fs.h///1238019748/
+/cramfs_fs_sb.h///1238019748/
diff -Naur u-boot-2009.03_orig/include/cramfs/CVS/Entries.Old u-boot-2009.03/include/cramfs/CVS/Entries.Old
--- u-boot-2009.03_orig/include/cramfs/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/cramfs/CVS/Entries.Old 2009-03-25 15:25:55.000000000 -0700
@@ -0,0 +1,3 @@
+/cramfs_fs.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/cramfs_fs_sb.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+D
diff -Naur u-boot-2009.03_orig/include/cramfs/CVS/Repository u-boot-2009.03/include/cramfs/CVS/Repository
--- u-boot-2009.03_orig/include/cramfs/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/cramfs/CVS/Repository 2009-03-25 15:25:55.290339400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/cramfs
diff -Naur u-boot-2009.03_orig/include/cramfs/CVS/Root u-boot-2009.03/include/cramfs/CVS/Root
--- u-boot-2009.03_orig/include/cramfs/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/cramfs/CVS/Root 2009-03-25 15:25:55.290339400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/galileo/CVS/Entries u-boot-2009.03/include/galileo/CVS/Entries
--- u-boot-2009.03_orig/include/galileo/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/galileo/CVS/Entries 2009-03-25 15:58:14.481053500 -0700
@@ -0,0 +1,5 @@
+/core.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gt64260R.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/galileo/CVS/Entries.Extra u-boot-2009.03/include/galileo/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/galileo/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/galileo/CVS/Entries.Extra 2009-03-25 15:58:14.481053500 -0700
@@ -0,0 +1,4 @@
+/core.h///1238019748/
+/gt64260R.h///1238019748/
+/memory.h///1238019748/
+/pci.h///1238019748/
diff -Naur u-boot-2009.03_orig/include/galileo/CVS/Entries.Extra.Old u-boot-2009.03/include/galileo/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/galileo/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/galileo/CVS/Entries.Extra.Old 2009-03-25 15:25:55.000000000 -0700
@@ -0,0 +1,4 @@
+/core.h///1238019748/
+/gt64260R.h///1238019748/
+/memory.h///1238019748/
+/pci.h///1238019748/
diff -Naur u-boot-2009.03_orig/include/galileo/CVS/Entries.Old u-boot-2009.03/include/galileo/CVS/Entries.Old
--- u-boot-2009.03_orig/include/galileo/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/galileo/CVS/Entries.Old 2009-03-25 15:25:55.000000000 -0700
@@ -0,0 +1,5 @@
+/core.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/gt64260R.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/memory.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/pci.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+D
diff -Naur u-boot-2009.03_orig/include/galileo/CVS/Repository u-boot-2009.03/include/galileo/CVS/Repository
--- u-boot-2009.03_orig/include/galileo/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/galileo/CVS/Repository 2009-03-25 15:25:55.384088800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/galileo
diff -Naur u-boot-2009.03_orig/include/galileo/CVS/Root u-boot-2009.03/include/galileo/CVS/Root
--- u-boot-2009.03_orig/include/galileo/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/galileo/CVS/Root 2009-03-25 15:25:55.368463900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/image.h u-boot-2009.03/include/image.h
--- u-boot-2009.03_orig/include/image.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/image.h 2009-03-25 16:04:34.525496200 -0700
@@ -478,6 +478,8 @@
if (!image_check_arch (hdr, IH_ARCH_SH))
#elif defined(__sparc__)
if (!image_check_arch (hdr, IH_ARCH_SPARC))
+#elif defined(__or1200__)
+ if (!image_check_arch (hdr, IH_ARCH_INVALID))
#else
# error Unknown CPU type
#endif
diff -Naur u-boot-2009.03_orig/include/jffs2/CVS/Entries u-boot-2009.03/include/jffs2/CVS/Entries
--- u-boot-2009.03_orig/include/jffs2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/jffs2/CVS/Entries 2009-03-31 15:01:30.060246400 -0700
@@ -0,0 +1,6 @@
+/jffs2_1pass.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/compr_rubin.h/1.1.1.1/Tue Mar 31 22:01:29 2009//T1.1.1.1
+/jffs2.h/1.1.1.1/Tue Mar 31 22:01:29 2009//T1.1.1.1
+/load_kernel.h/1.1.1.1/Tue Mar 31 22:01:30 2009//T1.1.1.1
+/mini_inflate.h/1.1.1.1/Tue Mar 31 22:01:30 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/include/jffs2/CVS/Entries.Extra u-boot-2009.03/include/jffs2/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/jffs2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/jffs2/CVS/Entries.Extra 2009-03-31 15:01:30.060246400 -0700
@@ -0,0 +1,5 @@
+/jffs2_1pass.h///1238019748/
+/compr_rubin.h///1238019748/
+/jffs2.h///1238019748/
+/load_kernel.h///1238019748/
+/mini_inflate.h///1238019748/
diff -Naur u-boot-2009.03_orig/include/jffs2/CVS/Entries.Extra.Old u-boot-2009.03/include/jffs2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/jffs2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/jffs2/CVS/Entries.Extra.Old 2009-03-25 17:51:52.000000000 -0700
@@ -0,0 +1,5 @@
+/jffs2_1pass.h///1238019748/
+/compr_rubin.h///1238028712/
+/jffs2.h///1238028712/
+/load_kernel.h///1238028712/
+/mini_inflate.h///1238028712/
diff -Naur u-boot-2009.03_orig/include/jffs2/CVS/Entries.Old u-boot-2009.03/include/jffs2/CVS/Entries.Old
--- u-boot-2009.03_orig/include/jffs2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/jffs2/CVS/Entries.Old 2009-03-25 17:51:52.000000000 -0700
@@ -0,0 +1,6 @@
+/jffs2_1pass.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/compr_rubin.h/1.2/Thu Mar 26 00:51:52 2009//
+/jffs2.h/1.2/Thu Mar 26 00:51:52 2009//
+/load_kernel.h/1.2/Thu Mar 26 00:51:52 2009//
+/mini_inflate.h/1.2/Thu Mar 26 00:51:52 2009//
+D
diff -Naur u-boot-2009.03_orig/include/jffs2/CVS/Repository u-boot-2009.03/include/jffs2/CVS/Repository
--- u-boot-2009.03_orig/include/jffs2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/jffs2/CVS/Repository 2009-03-25 15:25:55.477838200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/jffs2
diff -Naur u-boot-2009.03_orig/include/jffs2/CVS/Root u-boot-2009.03/include/jffs2/CVS/Root
--- u-boot-2009.03_orig/include/jffs2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/jffs2/CVS/Root 2009-03-25 15:25:55.477838200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/jffs2/compr_rubin.h u-boot-2009.03/include/jffs2/compr_rubin.h
--- u-boot-2009.03_orig/include/jffs2/compr_rubin.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/jffs2/compr_rubin.h 2009-03-31 15:01:29.810249600 -0700
@@ -1,11 +1,11 @@
-/* Rubin encoder/decoder header */
-/* work started at : aug 3, 1994 */
-/* last modification : aug 15, 1994 */
-/* $Id: compr_rubin.h,v 1.1 2002/01/16 23:34:32 nyet Exp $ */
-
-#define RUBIN_REG_SIZE 16
-#define UPPER_BIT_RUBIN (((long) 1)<<(RUBIN_REG_SIZE-1))
-#define LOWER_BITS_RUBIN ((((long) 1)<<(RUBIN_REG_SIZE-1))-1)
-
-void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
- unsigned long sourcelen, unsigned long dstlen);
+/* Rubin encoder/decoder header */
+/* work started at : aug 3, 1994 */
+/* last modification : aug 15, 1994 */
+/* $Id: compr_rubin.h,v 1.1.1.1 2009/03/25 22:22:28 kenagy Exp $ */
+
+#define RUBIN_REG_SIZE 16
+#define UPPER_BIT_RUBIN (((long) 1)<<(RUBIN_REG_SIZE-1))
+#define LOWER_BITS_RUBIN ((((long) 1)<<(RUBIN_REG_SIZE-1))-1)
+
+void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ unsigned long sourcelen, unsigned long dstlen);
diff -Naur u-boot-2009.03_orig/include/jffs2/jffs2.h u-boot-2009.03/include/jffs2/jffs2.h
--- u-boot-2009.03_orig/include/jffs2/jffs2.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/jffs2/jffs2.h 2009-03-31 15:01:29.966497600 -0700
@@ -1,237 +1,237 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2001 Red Hat, Inc.
- *
- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
- *
- * The original JFFS, from which the design for JFFS2 was derived,
- * was designed and implemented by Axis Communications AB.
- *
- * The contents of this file are subject to the Red Hat eCos Public
- * License Version 1.1 (the "Licence"); you may not use this file
- * except in compliance with the Licence. You may obtain a copy of
- * the Licence at http://www.redhat.com/
- *
- * Software distributed under the Licence is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing rights and
- * limitations under the Licence.
- *
- * The Original Code is JFFS2 - Journalling Flash File System, version 2
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License version 2 (the "GPL"), in
- * which case the provisions of the GPL are applicable instead of the
- * above. If you wish to allow the use of your version of this file
- * only under the terms of the GPL and not to allow others to use your
- * version of this file under the RHEPL, indicate your decision by
- * deleting the provisions above and replace them with the notice and
- * other provisions required by the GPL. If you do not delete the
- * provisions above, a recipient may use your version of this file
- * under either the RHEPL or the GPL.
- *
- * $Id: jffs2.h,v 1.2 2002/01/17 00:53:20 nyet Exp $
- *
- */
-
-#ifndef __LINUX_JFFS2_H__
-#define __LINUX_JFFS2_H__
-
-#include <asm/types.h>
-#include <jffs2/load_kernel.h>
-
-#define JFFS2_SUPER_MAGIC 0x72b6
-
-/* Values we may expect to find in the 'magic' field */
-#define JFFS2_OLD_MAGIC_BITMASK 0x1984
-#define JFFS2_MAGIC_BITMASK 0x1985
-#define KSAMTIB_CIGAM_2SFFJ 0x5981 /* For detecting wrong-endian fs */
-#define JFFS2_EMPTY_BITMASK 0xffff
-#define JFFS2_DIRTY_BITMASK 0x0000
-
-/* Summary node MAGIC marker */
-#define JFFS2_SUM_MAGIC 0x02851885
-
-/* We only allow a single char for length, and 0xFF is empty flash so
- we don't want it confused with a real length. Hence max 254.
-*/
-#define JFFS2_MAX_NAME_LEN 254
-
-/* How small can we sensibly write nodes? */
-#define JFFS2_MIN_DATA_LEN 128
-
-#define JFFS2_COMPR_NONE 0x00
-#define JFFS2_COMPR_ZERO 0x01
-#define JFFS2_COMPR_RTIME 0x02
-#define JFFS2_COMPR_RUBINMIPS 0x03
-#define JFFS2_COMPR_COPY 0x04
-#define JFFS2_COMPR_DYNRUBIN 0x05
-#define JFFS2_COMPR_ZLIB 0x06
-#if defined(CONFIG_JFFS2_LZO_LZARI)
-#define JFFS2_COMPR_LZO 0x07
-#define JFFS2_COMPR_LZARI 0x08
-#define JFFS2_NUM_COMPR 9
-#else
-#define JFFS2_NUM_COMPR 7
-#endif
-
-/* Compatibility flags. */
-#define JFFS2_COMPAT_MASK 0xc000 /* What do to if an unknown nodetype is found */
-#define JFFS2_NODE_ACCURATE 0x2000
-/* INCOMPAT: Fail to mount the filesystem */
-#define JFFS2_FEATURE_INCOMPAT 0xc000
-/* ROCOMPAT: Mount read-only */
-#define JFFS2_FEATURE_ROCOMPAT 0x8000
-/* RWCOMPAT_COPY: Mount read/write, and copy the node when it's GC'd */
-#define JFFS2_FEATURE_RWCOMPAT_COPY 0x4000
-/* RWCOMPAT_DELETE: Mount read/write, and delete the node when it's GC'd */
-#define JFFS2_FEATURE_RWCOMPAT_DELETE 0x0000
-
-#define JFFS2_NODETYPE_DIRENT (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 1)
-#define JFFS2_NODETYPE_INODE (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 2)
-#define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
-#define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4)
-#define JFFS2_NODETYPE_SUMMARY (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 6)
-
-/* Maybe later... */
-/*#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) */
-/*#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4) */
-
-/* Same as the non_ECC versions, but with extra space for real
- * ECC instead of just the checksum. For use on NAND flash
- */
-/*#define JFFS2_NODETYPE_DIRENT_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 5) */
-/*#define JFFS2_NODETYPE_INODE_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 6) */
-
-#define JFFS2_INO_FLAG_PREREAD 1 /* Do read_inode() for this one at
- mount time, don't wait for it to
- happen later */
-#define JFFS2_INO_FLAG_USERCOMPR 2 /* User has requested a specific
- compression type */
-
-
-struct jffs2_unknown_node
-{
- /* All start like this */
- __u16 magic;
- __u16 nodetype;
- __u32 totlen; /* So we can skip over nodes we don't grok */
- __u32 hdr_crc;
-} __attribute__((packed));
-
-struct jffs2_raw_dirent
-{
- __u16 magic;
- __u16 nodetype; /* == JFFS_NODETYPE_DIRENT */
- __u32 totlen;
- __u32 hdr_crc;
- __u32 pino;
- __u32 version;
- __u32 ino; /* == zero for unlink */
- __u32 mctime;
- __u8 nsize;
- __u8 type;
- __u8 unused[2];
- __u32 node_crc;
- __u32 name_crc;
- __u8 name[0];
-} __attribute__((packed));
-
-/* The JFFS2 raw inode structure: Used for storage on physical media. */
-/* The uid, gid, atime, mtime and ctime members could be longer, but
- are left like this for space efficiency. If and when people decide
- they really need them extended, it's simple enough to add support for
- a new type of raw node.
-*/
-struct jffs2_raw_inode
-{
- __u16 magic; /* A constant magic number. */
- __u16 nodetype; /* == JFFS_NODETYPE_INODE */
- __u32 totlen; /* Total length of this node (inc data, etc.) */
- __u32 hdr_crc;
- __u32 ino; /* Inode number. */
- __u32 version; /* Version number. */
- __u32 mode; /* The file's type or mode. */
- __u16 uid; /* The file's owner. */
- __u16 gid; /* The file's group. */
- __u32 isize; /* Total resultant size of this inode (used for truncations) */
- __u32 atime; /* Last access time. */
- __u32 mtime; /* Last modification time. */
- __u32 ctime; /* Change time. */
- __u32 offset; /* Where to begin to write. */
- __u32 csize; /* (Compressed) data size */
- __u32 dsize; /* Size of the node's data. (after decompression) */
- __u8 compr; /* Compression algorithm used */
- __u8 usercompr; /* Compression algorithm requested by the user */
- __u16 flags; /* See JFFS2_INO_FLAG_* */
- __u32 data_crc; /* CRC for the (compressed) data. */
- __u32 node_crc; /* CRC for the raw inode (excluding data) */
-/* __u8 data[dsize]; */
-} __attribute__((packed));
-
-struct jffs2_raw_summary
-{
- __u16 magic;
- __u16 nodetype; /* = JFFS2_NODETYPE_SUMMARY */
- __u32 totlen;
- __u32 hdr_crc;
- __u32 sum_num; /* number of sum entries*/
- __u32 cln_mkr; /* clean marker size, 0 = no cleanmarker */
- __u32 padded; /* sum of the size of padding nodes */
- __u32 sum_crc; /* summary information crc */
- __u32 node_crc; /* node crc */
- __u32 sum[0]; /* inode summary info */
-};
-
-union jffs2_node_union {
- struct jffs2_raw_inode i;
- struct jffs2_raw_dirent d;
- struct jffs2_raw_summary s;
- struct jffs2_unknown_node u;
-} __attribute__((packed));
-
-enum
- {
- DT_UNKNOWN = 0,
-# define DT_UNKNOWN DT_UNKNOWN
- DT_FIFO = 1,
-# define DT_FIFO DT_FIFO
- DT_CHR = 2,
-# define DT_CHR DT_CHR
- DT_DIR = 4,
-# define DT_DIR DT_DIR
- DT_BLK = 6,
-# define DT_BLK DT_BLK
- DT_REG = 8,
-# define DT_REG DT_REG
- DT_LNK = 10,
-# define DT_LNK DT_LNK
- DT_SOCK = 12,
-# define DT_SOCK DT_SOCK
- DT_WHT = 14
-# define DT_WHT DT_WHT
- };
-
-
-u32 jffs2_1pass_ls(struct part_info *part,const char *fname);
-u32 jffs2_1pass_load(char *dest, struct part_info *part,const char *fname);
-u32 jffs2_1pass_info(struct part_info *part);
-
-void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
- u32 srclen, u32 destlen);
-void rubin_do_decompress(unsigned char *bits, unsigned char *in,
- unsigned char *page_out, __u32 destlen);
-void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
- unsigned long sourcelen, unsigned long dstlen);
-long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
- __u32 srclen, __u32 destlen);
-#if defined(CONFIG_JFFS2_LZO_LZARI)
-int lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
- u32 srclen, u32 destlen);
-int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
- u32 srclen, u32 destlen);
-#endif
-
-char *mkmodestr(unsigned long mode, char *str);
-#endif /* __LINUX_JFFS2_H__ */
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+ * The original JFFS, from which the design for JFFS2 was derived,
+ * was designed and implemented by Axis Communications AB.
+ *
+ * The contents of this file are subject to the Red Hat eCos Public
+ * License Version 1.1 (the "Licence"); you may not use this file
+ * except in compliance with the Licence. You may obtain a copy of
+ * the Licence at http://www.redhat.com/
+ *
+ * Software distributed under the Licence is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing rights and
+ * limitations under the Licence.
+ *
+ * The Original Code is JFFS2 - Journalling Flash File System, version 2
+ *
+ * Alternatively, the contents of this file may be used under the
+ * terms of the GNU General Public License version 2 (the "GPL"), in
+ * which case the provisions of the GPL are applicable instead of the
+ * above. If you wish to allow the use of your version of this file
+ * only under the terms of the GPL and not to allow others to use your
+ * version of this file under the RHEPL, indicate your decision by
+ * deleting the provisions above and replace them with the notice and
+ * other provisions required by the GPL. If you do not delete the
+ * provisions above, a recipient may use your version of this file
+ * under either the RHEPL or the GPL.
+ *
+ * $Id: jffs2.h,v 1.1.1.1 2009/03/25 22:22:28 kenagy Exp $
+ *
+ */
+
+#ifndef __LINUX_JFFS2_H__
+#define __LINUX_JFFS2_H__
+
+#include <asm/types.h>
+#include <jffs2/load_kernel.h>
+
+#define JFFS2_SUPER_MAGIC 0x72b6
+
+/* Values we may expect to find in the 'magic' field */
+#define JFFS2_OLD_MAGIC_BITMASK 0x1984
+#define JFFS2_MAGIC_BITMASK 0x1985
+#define KSAMTIB_CIGAM_2SFFJ 0x5981 /* For detecting wrong-endian fs */
+#define JFFS2_EMPTY_BITMASK 0xffff
+#define JFFS2_DIRTY_BITMASK 0x0000
+
+/* Summary node MAGIC marker */
+#define JFFS2_SUM_MAGIC 0x02851885
+
+/* We only allow a single char for length, and 0xFF is empty flash so
+ we don't want it confused with a real length. Hence max 254.
+*/
+#define JFFS2_MAX_NAME_LEN 254
+
+/* How small can we sensibly write nodes? */
+#define JFFS2_MIN_DATA_LEN 128
+
+#define JFFS2_COMPR_NONE 0x00
+#define JFFS2_COMPR_ZERO 0x01
+#define JFFS2_COMPR_RTIME 0x02
+#define JFFS2_COMPR_RUBINMIPS 0x03
+#define JFFS2_COMPR_COPY 0x04
+#define JFFS2_COMPR_DYNRUBIN 0x05
+#define JFFS2_COMPR_ZLIB 0x06
+#if defined(CONFIG_JFFS2_LZO_LZARI)
+#define JFFS2_COMPR_LZO 0x07
+#define JFFS2_COMPR_LZARI 0x08
+#define JFFS2_NUM_COMPR 9
+#else
+#define JFFS2_NUM_COMPR 7
+#endif
+
+/* Compatibility flags. */
+#define JFFS2_COMPAT_MASK 0xc000 /* What do to if an unknown nodetype is found */
+#define JFFS2_NODE_ACCURATE 0x2000
+/* INCOMPAT: Fail to mount the filesystem */
+#define JFFS2_FEATURE_INCOMPAT 0xc000
+/* ROCOMPAT: Mount read-only */
+#define JFFS2_FEATURE_ROCOMPAT 0x8000
+/* RWCOMPAT_COPY: Mount read/write, and copy the node when it's GC'd */
+#define JFFS2_FEATURE_RWCOMPAT_COPY 0x4000
+/* RWCOMPAT_DELETE: Mount read/write, and delete the node when it's GC'd */
+#define JFFS2_FEATURE_RWCOMPAT_DELETE 0x0000
+
+#define JFFS2_NODETYPE_DIRENT (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 1)
+#define JFFS2_NODETYPE_INODE (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 2)
+#define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
+#define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4)
+#define JFFS2_NODETYPE_SUMMARY (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 6)
+
+/* Maybe later... */
+/*#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) */
+/*#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4) */
+
+/* Same as the non_ECC versions, but with extra space for real
+ * ECC instead of just the checksum. For use on NAND flash
+ */
+/*#define JFFS2_NODETYPE_DIRENT_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 5) */
+/*#define JFFS2_NODETYPE_INODE_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 6) */
+
+#define JFFS2_INO_FLAG_PREREAD 1 /* Do read_inode() for this one at
+ mount time, don't wait for it to
+ happen later */
+#define JFFS2_INO_FLAG_USERCOMPR 2 /* User has requested a specific
+ compression type */
+
+
+struct jffs2_unknown_node
+{
+ /* All start like this */
+ __u16 magic;
+ __u16 nodetype;
+ __u32 totlen; /* So we can skip over nodes we don't grok */
+ __u32 hdr_crc;
+} __attribute__((packed));
+
+struct jffs2_raw_dirent
+{
+ __u16 magic;
+ __u16 nodetype; /* == JFFS_NODETYPE_DIRENT */
+ __u32 totlen;
+ __u32 hdr_crc;
+ __u32 pino;
+ __u32 version;
+ __u32 ino; /* == zero for unlink */
+ __u32 mctime;
+ __u8 nsize;
+ __u8 type;
+ __u8 unused[2];
+ __u32 node_crc;
+ __u32 name_crc;
+ __u8 name[0];
+} __attribute__((packed));
+
+/* The JFFS2 raw inode structure: Used for storage on physical media. */
+/* The uid, gid, atime, mtime and ctime members could be longer, but
+ are left like this for space efficiency. If and when people decide
+ they really need them extended, it's simple enough to add support for
+ a new type of raw node.
+*/
+struct jffs2_raw_inode
+{
+ __u16 magic; /* A constant magic number. */
+ __u16 nodetype; /* == JFFS_NODETYPE_INODE */
+ __u32 totlen; /* Total length of this node (inc data, etc.) */
+ __u32 hdr_crc;
+ __u32 ino; /* Inode number. */
+ __u32 version; /* Version number. */
+ __u32 mode; /* The file's type or mode. */
+ __u16 uid; /* The file's owner. */
+ __u16 gid; /* The file's group. */
+ __u32 isize; /* Total resultant size of this inode (used for truncations) */
+ __u32 atime; /* Last access time. */
+ __u32 mtime; /* Last modification time. */
+ __u32 ctime; /* Change time. */
+ __u32 offset; /* Where to begin to write. */
+ __u32 csize; /* (Compressed) data size */
+ __u32 dsize; /* Size of the node's data. (after decompression) */
+ __u8 compr; /* Compression algorithm used */
+ __u8 usercompr; /* Compression algorithm requested by the user */
+ __u16 flags; /* See JFFS2_INO_FLAG_* */
+ __u32 data_crc; /* CRC for the (compressed) data. */
+ __u32 node_crc; /* CRC for the raw inode (excluding data) */
+/* __u8 data[dsize]; */
+} __attribute__((packed));
+
+struct jffs2_raw_summary
+{
+ __u16 magic;
+ __u16 nodetype; /* = JFFS2_NODETYPE_SUMMARY */
+ __u32 totlen;
+ __u32 hdr_crc;
+ __u32 sum_num; /* number of sum entries*/
+ __u32 cln_mkr; /* clean marker size, 0 = no cleanmarker */
+ __u32 padded; /* sum of the size of padding nodes */
+ __u32 sum_crc; /* summary information crc */
+ __u32 node_crc; /* node crc */
+ __u32 sum[0]; /* inode summary info */
+};
+
+union jffs2_node_union {
+ struct jffs2_raw_inode i;
+ struct jffs2_raw_dirent d;
+ struct jffs2_raw_summary s;
+ struct jffs2_unknown_node u;
+} __attribute__((packed));
+
+enum
+ {
+ DT_UNKNOWN = 0,
+# define DT_UNKNOWN DT_UNKNOWN
+ DT_FIFO = 1,
+# define DT_FIFO DT_FIFO
+ DT_CHR = 2,
+# define DT_CHR DT_CHR
+ DT_DIR = 4,
+# define DT_DIR DT_DIR
+ DT_BLK = 6,
+# define DT_BLK DT_BLK
+ DT_REG = 8,
+# define DT_REG DT_REG
+ DT_LNK = 10,
+# define DT_LNK DT_LNK
+ DT_SOCK = 12,
+# define DT_SOCK DT_SOCK
+ DT_WHT = 14
+# define DT_WHT DT_WHT
+ };
+
+
+u32 jffs2_1pass_ls(struct part_info *part,const char *fname);
+u32 jffs2_1pass_load(char *dest, struct part_info *part,const char *fname);
+u32 jffs2_1pass_info(struct part_info *part);
+
+void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ u32 srclen, u32 destlen);
+void rubin_do_decompress(unsigned char *bits, unsigned char *in,
+ unsigned char *page_out, __u32 destlen);
+void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ unsigned long sourcelen, unsigned long dstlen);
+long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ __u32 srclen, __u32 destlen);
+#if defined(CONFIG_JFFS2_LZO_LZARI)
+int lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ u32 srclen, u32 destlen);
+int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
+ u32 srclen, u32 destlen);
+#endif
+
+char *mkmodestr(unsigned long mode, char *str);
+#endif /* __LINUX_JFFS2_H__ */
diff -Naur u-boot-2009.03_orig/include/jffs2/load_kernel.h u-boot-2009.03/include/jffs2/load_kernel.h
--- u-boot-2009.03_orig/include/jffs2/load_kernel.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/jffs2/load_kernel.h 2009-03-31 15:01:30.013372000 -0700
@@ -1,82 +1,82 @@
-#ifndef load_kernel_h
-#define load_kernel_h
-/*-------------------------------------------------------------------------
- * Filename: load_kernel.h
- * Version: $Id: load_kernel.h,v 1.3 2002/01/25 01:34:11 nyet Exp $
- * Copyright: Copyright (C) 2001, Russ Dill
- * Author: Russ Dill <Russ.Dill@asu.edu>
- * Description: header for load kernel modules
- *-----------------------------------------------------------------------*/
-/*
- *
- * 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
- *
- */
-
-#include <linux/list.h>
-
-/* mtd device types */
-#define MTD_DEV_TYPE_NOR 0x0001
-#define MTD_DEV_TYPE_NAND 0x0002
-#define MTD_DEV_TYPE_ONENAND 0x0004
-
-#define MTD_DEV_TYPE(type) ((type == MTD_DEV_TYPE_NAND) ? "nand" : \
- (type == MTD_DEV_TYPE_ONENAND) ? "onenand" : "nor")
-
-struct mtd_device {
- struct list_head link;
- struct mtdids *id; /* parent mtd id entry */
- u16 num_parts; /* number of partitions on this device */
- struct list_head parts; /* partitions */
-};
-
-struct part_info {
- struct list_head link;
- char *name; /* partition name */
- u8 auto_name; /* set to 1 for generated name */
- u32 size; /* total size of the partition */
- u32 offset; /* offset within device */
- void *jffs2_priv; /* used internaly by jffs2 */
- u32 mask_flags; /* kernel MTD mask flags */
- u32 sector_size; /* size of sector */
- struct mtd_device *dev; /* parent device */
-};
-
-struct mtdids {
- struct list_head link;
- u8 type; /* device type */
- u8 num; /* device number */
- u32 size; /* device size */
- char *mtd_id; /* linux kernel device id */
-};
-
-#define ldr_strlen strlen
-#define ldr_strncmp strncmp
-#define ldr_memcpy memcpy
-#define putstr(x) printf("%s", x)
-#define mmalloc malloc
-#define UDEBUG printf
-
-#define putnstr(str, size) printf("%*.*s", size, size, str)
-#define ldr_output_string(x) puts(x)
-#define putLabeledWord(x, y) printf("%s %08x\n", x, (unsigned int)y)
-#define led_blink(x, y, z, a)
-
-/* common/cmd_jffs2.c */
-extern int mtdparts_init(void);
-extern int find_dev_and_part(const char *id, struct mtd_device **dev,
- u8 *part_num, struct part_info **part);
-
-#endif /* load_kernel_h */
+#ifndef load_kernel_h
+#define load_kernel_h
+/*-------------------------------------------------------------------------
+ * Filename: load_kernel.h
+ * Version: $Id: load_kernel.h,v 1.1.1.1 2009/03/25 22:22:28 kenagy Exp $
+ * Copyright: Copyright (C) 2001, Russ Dill
+ * Author: Russ Dill <Russ.Dill@asu.edu>
+ * Description: header for load kernel modules
+ *-----------------------------------------------------------------------*/
+/*
+ *
+ * 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
+ *
+ */
+
+#include <linux/list.h>
+
+/* mtd device types */
+#define MTD_DEV_TYPE_NOR 0x0001
+#define MTD_DEV_TYPE_NAND 0x0002
+#define MTD_DEV_TYPE_ONENAND 0x0004
+
+#define MTD_DEV_TYPE(type) ((type == MTD_DEV_TYPE_NAND) ? "nand" : \
+ (type == MTD_DEV_TYPE_ONENAND) ? "onenand" : "nor")
+
+struct mtd_device {
+ struct list_head link;
+ struct mtdids *id; /* parent mtd id entry */
+ u16 num_parts; /* number of partitions on this device */
+ struct list_head parts; /* partitions */
+};
+
+struct part_info {
+ struct list_head link;
+ char *name; /* partition name */
+ u8 auto_name; /* set to 1 for generated name */
+ u32 size; /* total size of the partition */
+ u32 offset; /* offset within device */
+ void *jffs2_priv; /* used internaly by jffs2 */
+ u32 mask_flags; /* kernel MTD mask flags */
+ u32 sector_size; /* size of sector */
+ struct mtd_device *dev; /* parent device */
+};
+
+struct mtdids {
+ struct list_head link;
+ u8 type; /* device type */
+ u8 num; /* device number */
+ u32 size; /* device size */
+ char *mtd_id; /* linux kernel device id */
+};
+
+#define ldr_strlen strlen
+#define ldr_strncmp strncmp
+#define ldr_memcpy memcpy
+#define putstr(x) printf("%s", x)
+#define mmalloc malloc
+#define UDEBUG printf
+
+#define putnstr(str, size) printf("%*.*s", size, size, str)
+#define ldr_output_string(x) puts(x)
+#define putLabeledWord(x, y) printf("%s %08x\n", x, (unsigned int)y)
+#define led_blink(x, y, z, a)
+
+/* common/cmd_jffs2.c */
+extern int mtdparts_init(void);
+extern int find_dev_and_part(const char *id, struct mtd_device **dev,
+ u8 *part_num, struct part_info **part);
+
+#endif /* load_kernel_h */
diff -Naur u-boot-2009.03_orig/include/jffs2/mini_inflate.h u-boot-2009.03/include/jffs2/mini_inflate.h
--- u-boot-2009.03_orig/include/jffs2/mini_inflate.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/jffs2/mini_inflate.h 2009-03-31 15:01:30.028996800 -0700
@@ -1,82 +1,82 @@
-/*-------------------------------------------------------------------------
- * Filename: mini_inflate.h
- * Version: $Id: mini_inflate.h,v 1.2 2002/01/17 00:53:20 nyet Exp $
- * Copyright: Copyright (C) 2001, Russ Dill
- * Author: Russ Dill <Russ.Dill@asu.edu>
- * Description: Mini deflate implementation
- *-----------------------------------------------------------------------*/
-/*
- *
- * 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
- *
- */
-
-typedef __SIZE_TYPE__ size;
-
-#define NO_ERROR 0
-#define COMP_UNKNOWN 1 /* The specififed bytype is invalid */
-#define CODE_NOT_FOUND 2 /* a huffman code in the stream could not be decoded */
-#define TOO_MANY_BITS 3 /* pull_bits was passed an argument that is too
- * large */
-
-/* This struct represents an entire huffman code set. It has various lookup
- * tables to speed decoding */
-struct huffman_set {
- int bits; /* maximum bit length */
- int num_symbols; /* Number of symbols this code can represent */
- int *lengths; /* The bit length of symbols */
- int *symbols; /* All of the symbols, sorted by the huffman code */
- int *count; /* the number of codes of this bit length */
- int *first; /* the first code of this bit length */
- int *pos; /* the symbol that first represents (in the symbols
- * array) */
-};
-
-struct bitstream {
- unsigned char *data; /* increments as we move from byte to byte */
- unsigned char bit; /* 0 to 7 */
- void *(*memcpy)(void *, const void *, size);
- unsigned long decoded; /* The number of bytes decoded */
- int error;
-
- int distance_count[16];
- int distance_first[16];
- int distance_pos[16];
- int distance_lengths[32];
- int distance_symbols[32];
-
- int code_count[8];
- int code_first[8];
- int code_pos[8];
- int code_lengths[19];
- int code_symbols[19];
-
- int length_count[16];
- int length_first[16];
- int length_pos[16];
- int length_lengths[288];
- int length_symbols[288];
-
- struct huffman_set codes;
- struct huffman_set lengths;
- struct huffman_set distance;
-};
-
-#define NO_COMP 0
-#define FIXED_COMP 1
-#define DYNAMIC_COMP 2
-
-long decompress_block(unsigned char *dest, unsigned char *source,
- void *(*inflate_memcpy)(void *dest, const void *src, size n));
+/*-------------------------------------------------------------------------
+ * Filename: mini_inflate.h
+ * Version: $Id: mini_inflate.h,v 1.1.1.1 2009/03/25 22:22:28 kenagy Exp $
+ * Copyright: Copyright (C) 2001, Russ Dill
+ * Author: Russ Dill <Russ.Dill@asu.edu>
+ * Description: Mini deflate implementation
+ *-----------------------------------------------------------------------*/
+/*
+ *
+ * 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
+ *
+ */
+
+typedef __SIZE_TYPE__ size;
+
+#define NO_ERROR 0
+#define COMP_UNKNOWN 1 /* The specififed bytype is invalid */
+#define CODE_NOT_FOUND 2 /* a huffman code in the stream could not be decoded */
+#define TOO_MANY_BITS 3 /* pull_bits was passed an argument that is too
+ * large */
+
+/* This struct represents an entire huffman code set. It has various lookup
+ * tables to speed decoding */
+struct huffman_set {
+ int bits; /* maximum bit length */
+ int num_symbols; /* Number of symbols this code can represent */
+ int *lengths; /* The bit length of symbols */
+ int *symbols; /* All of the symbols, sorted by the huffman code */
+ int *count; /* the number of codes of this bit length */
+ int *first; /* the first code of this bit length */
+ int *pos; /* the symbol that first represents (in the symbols
+ * array) */
+};
+
+struct bitstream {
+ unsigned char *data; /* increments as we move from byte to byte */
+ unsigned char bit; /* 0 to 7 */
+ void *(*memcpy)(void *, const void *, size);
+ unsigned long decoded; /* The number of bytes decoded */
+ int error;
+
+ int distance_count[16];
+ int distance_first[16];
+ int distance_pos[16];
+ int distance_lengths[32];
+ int distance_symbols[32];
+
+ int code_count[8];
+ int code_first[8];
+ int code_pos[8];
+ int code_lengths[19];
+ int code_symbols[19];
+
+ int length_count[16];
+ int length_first[16];
+ int length_pos[16];
+ int length_lengths[288];
+ int length_symbols[288];
+
+ struct huffman_set codes;
+ struct huffman_set lengths;
+ struct huffman_set distance;
+};
+
+#define NO_COMP 0
+#define FIXED_COMP 1
+#define DYNAMIC_COMP 2
+
+long decompress_block(unsigned char *dest, unsigned char *source,
+ void *(*inflate_memcpy)(void *dest, const void *src, size n));
diff -Naur u-boot-2009.03_orig/include/linux/CVS/Entries u-boot-2009.03/include/linux/CVS/Entries
--- u-boot-2009.03_orig/include/linux/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/CVS/Entries 2009-03-25 15:58:14.949800500 -0700
@@ -0,0 +1,18 @@
+D/byteorder////
+D/mtd////
+/bitops.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc32.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ctype.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/err.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/list.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mc146818rtc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mii.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/poison.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/posix_types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rbtree.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/stddef.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/types.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/include/linux/CVS/Entries.Extra u-boot-2009.03/include/linux/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/linux/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/CVS/Entries.Extra 2009-03-25 15:58:14.949800500 -0700
@@ -0,0 +1,18 @@
+D/byteorder////
+D/mtd////
+/bitops.h///1238019748/
+/config.h///1238019748/
+/crc32.h///1238019748/
+/ctype.h///1238019748/
+/err.h///1238019748/
+/list.h///1238019748/
+/mc146818rtc.h///1238019748/
+/mii.h///1238019748/
+/poison.h///1238019748/
+/posix_types.h///1238019748/
+/rbtree.h///1238019748/
+/stat.h///1238019748/
+/stddef.h///1238019748/
+/string.h///1238019748/
+/time.h///1238019748/
+/types.h///1238019748/
diff -Naur u-boot-2009.03_orig/include/linux/CVS/Entries.Extra.Old u-boot-2009.03/include/linux/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/linux/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/CVS/Entries.Extra.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,18 @@
+/bitops.h///1238019748/
+/config.h///1238019748/
+/crc32.h///1238019748/
+/ctype.h///1238019748/
+/err.h///1238019748/
+/list.h///1238019748/
+/mc146818rtc.h///1238019748/
+/mii.h///1238019748/
+/poison.h///1238019748/
+/posix_types.h///1238019748/
+/rbtree.h///1238019748/
+/stat.h///1238019748/
+/stddef.h///1238019748/
+/string.h///1238019748/
+/time.h///1238019748/
+/types.h///1238019748/
+D/byteorder////
+D/mtd////
diff -Naur u-boot-2009.03_orig/include/linux/CVS/Entries.Old u-boot-2009.03/include/linux/CVS/Entries.Old
--- u-boot-2009.03_orig/include/linux/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/CVS/Entries.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,18 @@
+/bitops.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/config.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/crc32.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/ctype.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/err.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/list.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/mc146818rtc.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/mii.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/poison.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/posix_types.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/rbtree.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/stat.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/stddef.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/string.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/time.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/types.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+D/byteorder////
+D/mtd////
diff -Naur u-boot-2009.03_orig/include/linux/CVS/Repository u-boot-2009.03/include/linux/CVS/Repository
--- u-boot-2009.03_orig/include/linux/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/CVS/Repository 2009-03-25 15:25:55.587212500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/linux
diff -Naur u-boot-2009.03_orig/include/linux/CVS/Root u-boot-2009.03/include/linux/CVS/Root
--- u-boot-2009.03_orig/include/linux/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/CVS/Root 2009-03-25 15:25:55.587212500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries u-boot-2009.03/include/linux/byteorder/CVS/Entries
--- u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/byteorder/CVS/Entries 2009-03-25 15:58:14.731051900 -0700
@@ -0,0 +1,5 @@
+/big_endian.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/generic.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/little_endian.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/swab.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries.Extra u-boot-2009.03/include/linux/byteorder/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/byteorder/CVS/Entries.Extra 2009-03-25 15:58:14.731051900 -0700
@@ -0,0 +1,4 @@
+/big_endian.h///1238019748/
+/generic.h///1238019748/
+/little_endian.h///1238019748/
+/swab.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries.Extra.Old u-boot-2009.03/include/linux/byteorder/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/byteorder/CVS/Entries.Extra.Old 2009-03-25 15:25:55.000000000 -0700
@@ -0,0 +1,4 @@
+/big_endian.h///1238019748/
+/generic.h///1238019748/
+/little_endian.h///1238019748/
+/swab.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries.Old u-boot-2009.03/include/linux/byteorder/CVS/Entries.Old
--- u-boot-2009.03_orig/include/linux/byteorder/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/byteorder/CVS/Entries.Old 2009-03-25 15:25:55.000000000 -0700
@@ -0,0 +1,5 @@
+/big_endian.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/generic.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/little_endian.h/1.1.1.1/Wed Mar 25 22:22:28 2009//
+/swab.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/include/linux/byteorder/CVS/Repository u-boot-2009.03/include/linux/byteorder/CVS/Repository
--- u-boot-2009.03_orig/include/linux/byteorder/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/byteorder/CVS/Repository 2009-03-25 15:25:55.837210900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/linux/byteorder
diff -Naur u-boot-2009.03_orig/include/linux/byteorder/CVS/Root u-boot-2009.03/include/linux/byteorder/CVS/Root
--- u-boot-2009.03_orig/include/linux/byteorder/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/byteorder/CVS/Root 2009-03-25 15:25:55.837210900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/linux/mtd/CVS/Entries u-boot-2009.03/include/linux/mtd/CVS/Entries
--- u-boot-2009.03_orig/include/linux/mtd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/mtd/CVS/Entries 2009-03-31 15:01:56.528657600 -0700
@@ -0,0 +1,21 @@
+/bbm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blktrans.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/compat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/doc2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_upm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mtd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_ecc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ndfc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nftl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inftl-user.h/1.1.1.1/Tue Mar 31 22:01:56 2009//T1.1.1.1
+/jffs2-user.h/1.1.1.1/Tue Mar 31 22:01:56 2009//T1.1.1.1
+/mtd-abi.h/1.1.1.1/Tue Mar 31 22:01:56 2009//T1.1.1.1
+/nand_ids.h/1.1.1.1/Tue Mar 31 22:01:56 2009//T1.1.1.1
+/nand_legacy.h/1.1.1.1/Tue Mar 31 22:01:56 2009//T1.1.1.1
+/nftl-user.h/1.1.1.1/Tue Mar 31 22:01:56 2009//T1.1.1.1
+/partitions.h/1.1.1.1/Tue Mar 31 22:01:56 2009//T1.1.1.1
+D
diff -Naur u-boot-2009.03_orig/include/linux/mtd/CVS/Entries.Extra u-boot-2009.03/include/linux/mtd/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/linux/mtd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/mtd/CVS/Entries.Extra 2009-03-31 15:01:56.528657600 -0700
@@ -0,0 +1,20 @@
+/bbm.h///1238019749/
+/blktrans.h///1238019749/
+/compat.h///1238019749/
+/doc2000.h///1238019749/
+/fsl_upm.h///1238019749/
+/mtd.h///1238019749/
+/nand.h///1238019749/
+/nand_ecc.h///1238019749/
+/ndfc.h///1238019749/
+/nftl.h///1238019749/
+/onenand.h///1238019749/
+/onenand_regs.h///1238019749/
+/ubi.h///1238019749/
+/inftl-user.h///1238019749/
+/jffs2-user.h///1238019749/
+/mtd-abi.h///1238019749/
+/nand_ids.h///1238019749/
+/nand_legacy.h///1238019749/
+/nftl-user.h///1238019749/
+/partitions.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/linux/mtd/CVS/Entries.Extra.Old u-boot-2009.03/include/linux/mtd/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/linux/mtd/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/mtd/CVS/Entries.Extra.Old 2009-03-25 17:51:53.000000000 -0700
@@ -0,0 +1,20 @@
+/bbm.h///1238019749/
+/blktrans.h///1238019749/
+/compat.h///1238019749/
+/doc2000.h///1238019749/
+/fsl_upm.h///1238019749/
+/mtd.h///1238019749/
+/nand.h///1238019749/
+/nand_ecc.h///1238019749/
+/ndfc.h///1238019749/
+/nftl.h///1238019749/
+/onenand.h///1238019749/
+/onenand_regs.h///1238019749/
+/ubi.h///1238019749/
+/inftl-user.h///1238028712/
+/jffs2-user.h///1238028712/
+/mtd-abi.h///1238028712/
+/nand_ids.h///1238028712/
+/nand_legacy.h///1238028713/
+/nftl-user.h///1238028713/
+/partitions.h///1238028713/
diff -Naur u-boot-2009.03_orig/include/linux/mtd/CVS/Entries.Old u-boot-2009.03/include/linux/mtd/CVS/Entries.Old
--- u-boot-2009.03_orig/include/linux/mtd/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/mtd/CVS/Entries.Old 2009-03-25 17:51:53.000000000 -0700
@@ -0,0 +1,21 @@
+/bbm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/blktrans.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/compat.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/doc2000.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fsl_upm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mtd.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_ecc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ndfc.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nftl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_regs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubi.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inftl-user.h/1.2/Thu Mar 26 00:51:52 2009//
+/jffs2-user.h/1.2/Thu Mar 26 00:51:52 2009//
+/mtd-abi.h/1.2/Thu Mar 26 00:51:52 2009//
+/nand_ids.h/1.2/Thu Mar 26 00:51:52 2009//
+/nand_legacy.h/1.2/Thu Mar 26 00:51:53 2009//
+/nftl-user.h/1.2/Thu Mar 26 00:51:53 2009//
+/partitions.h/1.2/Thu Mar 26 00:51:53 2009//
+D
diff -Naur u-boot-2009.03_orig/include/linux/mtd/CVS/Repository u-boot-2009.03/include/linux/mtd/CVS/Repository
--- u-boot-2009.03_orig/include/linux/mtd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/mtd/CVS/Repository 2009-03-25 15:25:55.962210100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/linux/mtd
diff -Naur u-boot-2009.03_orig/include/linux/mtd/CVS/Root u-boot-2009.03/include/linux/mtd/CVS/Root
--- u-boot-2009.03_orig/include/linux/mtd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/linux/mtd/CVS/Root 2009-03-25 15:25:55.962210100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/linux/mtd/inftl-user.h u-boot-2009.03/include/linux/mtd/inftl-user.h
--- u-boot-2009.03_orig/include/linux/mtd/inftl-user.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux/mtd/inftl-user.h 2009-03-31 15:01:56.216161600 -0700
@@ -1,89 +1,89 @@
-/*
- * $Id: inftl-user.h,v 1.2 2005/11/07 11:14:56 gleixner Exp $
- *
- * Parts of INFTL headers shared with userspace
- *
- */
-
-#ifndef __MTD_INFTL_USER_H__
-#define __MTD_INFTL_USER_H__
-
-#define OSAK_VERSION 0x5120
-#define PERCENTUSED 98
-
-#define SECTORSIZE 512
-
-/* Block Control Information */
-
-struct inftl_bci {
- uint8_t ECCsig[6];
- uint8_t Status;
- uint8_t Status1;
-} __attribute__((packed));
-
-struct inftl_unithead1 {
- uint16_t virtualUnitNo;
- uint16_t prevUnitNo;
- uint8_t ANAC;
- uint8_t NACs;
- uint8_t parityPerField;
- uint8_t discarded;
-} __attribute__((packed));
-
-struct inftl_unithead2 {
- uint8_t parityPerField;
- uint8_t ANAC;
- uint16_t prevUnitNo;
- uint16_t virtualUnitNo;
- uint8_t NACs;
- uint8_t discarded;
-} __attribute__((packed));
-
-struct inftl_unittail {
- uint8_t Reserved[4];
- uint16_t EraseMark;
- uint16_t EraseMark1;
-} __attribute__((packed));
-
-union inftl_uci {
- struct inftl_unithead1 a;
- struct inftl_unithead2 b;
- struct inftl_unittail c;
-};
-
-struct inftl_oob {
- struct inftl_bci b;
- union inftl_uci u;
-};
-
-
-/* INFTL Media Header */
-
-struct INFTLPartition {
- __u32 virtualUnits;
- __u32 firstUnit;
- __u32 lastUnit;
- __u32 flags;
- __u32 spareUnits;
- __u32 Reserved0;
- __u32 Reserved1;
-} __attribute__((packed));
-
-struct INFTLMediaHeader {
- char bootRecordID[8];
- __u32 NoOfBootImageBlocks;
- __u32 NoOfBinaryPartitions;
- __u32 NoOfBDTLPartitions;
- __u32 BlockMultiplierBits;
- __u32 FormatFlags;
- __u32 OsakVersion;
- __u32 PercentUsed;
- struct INFTLPartition Partitions[4];
-} __attribute__((packed));
-
-/* Partition flag types */
-#define INFTL_BINARY 0x20000000
-#define INFTL_BDTL 0x40000000
-#define INFTL_LAST 0x80000000
-
-#endif /* __MTD_INFTL_USER_H__ */
+/*
+ * $Id: inftl-user.h,v 1.1.1.1 2009/03/25 22:22:29 kenagy Exp $
+ *
+ * Parts of INFTL headers shared with userspace
+ *
+ */
+
+#ifndef __MTD_INFTL_USER_H__
+#define __MTD_INFTL_USER_H__
+
+#define OSAK_VERSION 0x5120
+#define PERCENTUSED 98
+
+#define SECTORSIZE 512
+
+/* Block Control Information */
+
+struct inftl_bci {
+ uint8_t ECCsig[6];
+ uint8_t Status;
+ uint8_t Status1;
+} __attribute__((packed));
+
+struct inftl_unithead1 {
+ uint16_t virtualUnitNo;
+ uint16_t prevUnitNo;
+ uint8_t ANAC;
+ uint8_t NACs;
+ uint8_t parityPerField;
+ uint8_t discarded;
+} __attribute__((packed));
+
+struct inftl_unithead2 {
+ uint8_t parityPerField;
+ uint8_t ANAC;
+ uint16_t prevUnitNo;
+ uint16_t virtualUnitNo;
+ uint8_t NACs;
+ uint8_t discarded;
+} __attribute__((packed));
+
+struct inftl_unittail {
+ uint8_t Reserved[4];
+ uint16_t EraseMark;
+ uint16_t EraseMark1;
+} __attribute__((packed));
+
+union inftl_uci {
+ struct inftl_unithead1 a;
+ struct inftl_unithead2 b;
+ struct inftl_unittail c;
+};
+
+struct inftl_oob {
+ struct inftl_bci b;
+ union inftl_uci u;
+};
+
+
+/* INFTL Media Header */
+
+struct INFTLPartition {
+ __u32 virtualUnits;
+ __u32 firstUnit;
+ __u32 lastUnit;
+ __u32 flags;
+ __u32 spareUnits;
+ __u32 Reserved0;
+ __u32 Reserved1;
+} __attribute__((packed));
+
+struct INFTLMediaHeader {
+ char bootRecordID[8];
+ __u32 NoOfBootImageBlocks;
+ __u32 NoOfBinaryPartitions;
+ __u32 NoOfBDTLPartitions;
+ __u32 BlockMultiplierBits;
+ __u32 FormatFlags;
+ __u32 OsakVersion;
+ __u32 PercentUsed;
+ struct INFTLPartition Partitions[4];
+} __attribute__((packed));
+
+/* Partition flag types */
+#define INFTL_BINARY 0x20000000
+#define INFTL_BDTL 0x40000000
+#define INFTL_LAST 0x80000000
+
+#endif /* __MTD_INFTL_USER_H__ */
diff -Naur u-boot-2009.03_orig/include/linux/mtd/jffs2-user.h u-boot-2009.03/include/linux/mtd/jffs2-user.h
--- u-boot-2009.03_orig/include/linux/mtd/jffs2-user.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux/mtd/jffs2-user.h 2009-03-31 15:01:56.372409600 -0700
@@ -1,35 +1,35 @@
-/*
- * $Id: jffs2-user.h,v 1.1 2004/05/05 11:57:54 dwmw2 Exp $
- *
- * JFFS2 definitions for use in user space only
- */
-
-#ifndef __JFFS2_USER_H__
-#define __JFFS2_USER_H__
-
-/* This file is blessed for inclusion by userspace */
-#include <linux/jffs2.h>
-#include <endian.h>
-#include <byteswap.h>
-
-#undef cpu_to_je16
-#undef cpu_to_je32
-#undef cpu_to_jemode
-#undef je16_to_cpu
-#undef je32_to_cpu
-#undef jemode_to_cpu
-
-extern int target_endian;
-
-#define t16(x) ({ uint16_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_16(__b); })
-#define t32(x) ({ uint32_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_32(__b); })
-
-#define cpu_to_je16(x) ((jint16_t){t16(x)})
-#define cpu_to_je32(x) ((jint32_t){t32(x)})
-#define cpu_to_jemode(x) ((jmode_t){t32(x)})
-
-#define je16_to_cpu(x) (t16((x).v16))
-#define je32_to_cpu(x) (t32((x).v32))
-#define jemode_to_cpu(x) (t32((x).m))
-
-#endif /* __JFFS2_USER_H__ */
+/*
+ * $Id: jffs2-user.h,v 1.1.1.1 2009/03/25 22:22:29 kenagy Exp $
+ *
+ * JFFS2 definitions for use in user space only
+ */
+
+#ifndef __JFFS2_USER_H__
+#define __JFFS2_USER_H__
+
+/* This file is blessed for inclusion by userspace */
+#include <linux/jffs2.h>
+#include <endian.h>
+#include <byteswap.h>
+
+#undef cpu_to_je16
+#undef cpu_to_je32
+#undef cpu_to_jemode
+#undef je16_to_cpu
+#undef je32_to_cpu
+#undef jemode_to_cpu
+
+extern int target_endian;
+
+#define t16(x) ({ uint16_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_16(__b); })
+#define t32(x) ({ uint32_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_32(__b); })
+
+#define cpu_to_je16(x) ((jint16_t){t16(x)})
+#define cpu_to_je32(x) ((jint32_t){t32(x)})
+#define cpu_to_jemode(x) ((jmode_t){t32(x)})
+
+#define je16_to_cpu(x) (t16((x).v16))
+#define je32_to_cpu(x) (t32((x).v32))
+#define jemode_to_cpu(x) (t32((x).m))
+
+#endif /* __JFFS2_USER_H__ */
diff -Naur u-boot-2009.03_orig/include/linux/mtd/mtd-abi.h u-boot-2009.03/include/linux/mtd/mtd-abi.h
--- u-boot-2009.03_orig/include/linux/mtd/mtd-abi.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux/mtd/mtd-abi.h 2009-03-31 15:01:56.403659200 -0700
@@ -1,156 +1,156 @@
-/*
- * $Id: mtd-abi.h,v 1.13 2005/11/07 11:14:56 gleixner Exp $
- *
- * Portions of MTD ABI definition which are shared by kernel and user space
- */
-
-#ifndef __MTD_ABI_H__
-#define __MTD_ABI_H__
-
-#if 1
-#include <linux/mtd/compat.h>
-#endif
-
-struct erase_info_user {
- uint32_t start;
- uint32_t length;
-};
-
-struct mtd_oob_buf {
- uint32_t start;
- uint32_t length;
- unsigned char __user *ptr;
-};
-
-#define MTD_ABSENT 0
-#define MTD_RAM 1
-#define MTD_ROM 2
-#define MTD_NORFLASH 3
-#define MTD_NANDFLASH 4
-#define MTD_DATAFLASH 6
-#define MTD_UBIVOLUME 7
-
-#define MTD_WRITEABLE 0x400 /* Device is writeable */
-#define MTD_BIT_WRITEABLE 0x800 /* Single bits can be flipped */
-#define MTD_NO_ERASE 0x1000 /* No erase necessary */
-#define MTD_STUPID_LOCK 0x2000 /* Always locked after reset */
-
-/* Some common devices / combinations of capabilities */
-#define MTD_CAP_ROM 0
-#define MTD_CAP_RAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
-#define MTD_CAP_NORFLASH (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
-#define MTD_CAP_NANDFLASH (MTD_WRITEABLE)
-
-/* ECC byte placement */
-#define MTD_NANDECC_OFF 0 /* Switch off ECC (Not recommended) */
-#define MTD_NANDECC_PLACE 1 /* Use the given placement in the structure (YAFFS1 legacy mode) */
-#define MTD_NANDECC_AUTOPLACE 2 /* Use the default placement scheme */
-#define MTD_NANDECC_PLACEONLY 3 /* Use the given placement in the structure (Do not store ecc result on read) */
-#define MTD_NANDECC_AUTOPL_USR 4 /* Use the given autoplacement scheme rather than using the default */
-
-/* OTP mode selection */
-#define MTD_OTP_OFF 0
-#define MTD_OTP_FACTORY 1
-#define MTD_OTP_USER 2
-
-struct mtd_info_user {
- uint8_t type;
- uint32_t flags;
- uint32_t size; /* Total size of the MTD */
- uint32_t erasesize;
- uint32_t writesize;
- uint32_t oobsize; /* Amount of OOB data per block (e.g. 16) */
- /* The below two fields are obsolete and broken, do not use them
- * (TODO: remove at some point) */
- uint32_t ecctype;
- uint32_t eccsize;
-};
-
-struct region_info_user {
- uint32_t offset; /* At which this region starts,
- * from the beginning of the MTD */
- uint32_t erasesize; /* For this region */
- uint32_t numblocks; /* Number of blocks in this region */
- uint32_t regionindex;
-};
-
-struct otp_info {
- uint32_t start;
- uint32_t length;
- uint32_t locked;
-};
-
-#define MEMGETINFO _IOR('M', 1, struct mtd_info_user)
-#define MEMERASE _IOW('M', 2, struct erase_info_user)
-#define MEMWRITEOOB _IOWR('M', 3, struct mtd_oob_buf)
-#define MEMREADOOB _IOWR('M', 4, struct mtd_oob_buf)
-#define MEMLOCK _IOW('M', 5, struct erase_info_user)
-#define MEMUNLOCK _IOW('M', 6, struct erase_info_user)
-#define MEMGETREGIONCOUNT _IOR('M', 7, int)
-#define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user)
-#define MEMSETOOBSEL _IOW('M', 9, struct nand_oobinfo)
-#define MEMGETOOBSEL _IOR('M', 10, struct nand_oobinfo)
-#define MEMGETBADBLOCK _IOW('M', 11, loff_t)
-#define MEMSETBADBLOCK _IOW('M', 12, loff_t)
-#define OTPSELECT _IOR('M', 13, int)
-#define OTPGETREGIONCOUNT _IOW('M', 14, int)
-#define OTPGETREGIONINFO _IOW('M', 15, struct otp_info)
-#define OTPLOCK _IOR('M', 16, struct otp_info)
-#define ECCGETLAYOUT _IOR('M', 17, struct nand_ecclayout)
-#define ECCGETSTATS _IOR('M', 18, struct mtd_ecc_stats)
-#define MTDFILEMODE _IO('M', 19)
-
-/*
- * Obsolete legacy interface. Keep it in order not to break userspace
- * interfaces
- */
-struct nand_oobinfo {
- uint32_t useecc;
- uint32_t eccbytes;
- uint32_t oobfree[8][2];
- uint32_t eccpos[48];
-};
-
-struct nand_oobfree {
- uint32_t offset;
- uint32_t length;
-};
-
-#define MTD_MAX_OOBFREE_ENTRIES 8
-/*
- * ECC layout control structure. Exported to userspace for
- * diagnosis and to allow creation of raw images
- */
-struct nand_ecclayout {
- uint32_t eccbytes;
- uint32_t eccpos[64];
- uint32_t oobavail;
- struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
-};
-
-/**
- * struct mtd_ecc_stats - error correction stats
- *
- * @corrected: number of corrected bits
- * @failed: number of uncorrectable errors
- * @badblocks: number of bad blocks in this partition
- * @bbtblocks: number of blocks reserved for bad block tables
- */
-struct mtd_ecc_stats {
- uint32_t corrected;
- uint32_t failed;
- uint32_t badblocks;
- uint32_t bbtblocks;
-};
-
-/*
- * Read/write file modes for access to MTD
- */
-enum mtd_file_modes {
- MTD_MODE_NORMAL = MTD_OTP_OFF,
- MTD_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
- MTD_MODE_OTP_USER = MTD_OTP_USER,
- MTD_MODE_RAW,
-};
-
-#endif /* __MTD_ABI_H__ */
+/*
+ * $Id: mtd-abi.h,v 1.1.1.1 2009/03/25 22:22:29 kenagy Exp $
+ *
+ * Portions of MTD ABI definition which are shared by kernel and user space
+ */
+
+#ifndef __MTD_ABI_H__
+#define __MTD_ABI_H__
+
+#if 1
+#include <linux/mtd/compat.h>
+#endif
+
+struct erase_info_user {
+ uint32_t start;
+ uint32_t length;
+};
+
+struct mtd_oob_buf {
+ uint32_t start;
+ uint32_t length;
+ unsigned char __user *ptr;
+};
+
+#define MTD_ABSENT 0
+#define MTD_RAM 1
+#define MTD_ROM 2
+#define MTD_NORFLASH 3
+#define MTD_NANDFLASH 4
+#define MTD_DATAFLASH 6
+#define MTD_UBIVOLUME 7
+
+#define MTD_WRITEABLE 0x400 /* Device is writeable */
+#define MTD_BIT_WRITEABLE 0x800 /* Single bits can be flipped */
+#define MTD_NO_ERASE 0x1000 /* No erase necessary */
+#define MTD_STUPID_LOCK 0x2000 /* Always locked after reset */
+
+/* Some common devices / combinations of capabilities */
+#define MTD_CAP_ROM 0
+#define MTD_CAP_RAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
+#define MTD_CAP_NORFLASH (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
+#define MTD_CAP_NANDFLASH (MTD_WRITEABLE)
+
+/* ECC byte placement */
+#define MTD_NANDECC_OFF 0 /* Switch off ECC (Not recommended) */
+#define MTD_NANDECC_PLACE 1 /* Use the given placement in the structure (YAFFS1 legacy mode) */
+#define MTD_NANDECC_AUTOPLACE 2 /* Use the default placement scheme */
+#define MTD_NANDECC_PLACEONLY 3 /* Use the given placement in the structure (Do not store ecc result on read) */
+#define MTD_NANDECC_AUTOPL_USR 4 /* Use the given autoplacement scheme rather than using the default */
+
+/* OTP mode selection */
+#define MTD_OTP_OFF 0
+#define MTD_OTP_FACTORY 1
+#define MTD_OTP_USER 2
+
+struct mtd_info_user {
+ uint8_t type;
+ uint32_t flags;
+ uint32_t size; /* Total size of the MTD */
+ uint32_t erasesize;
+ uint32_t writesize;
+ uint32_t oobsize; /* Amount of OOB data per block (e.g. 16) */
+ /* The below two fields are obsolete and broken, do not use them
+ * (TODO: remove at some point) */
+ uint32_t ecctype;
+ uint32_t eccsize;
+};
+
+struct region_info_user {
+ uint32_t offset; /* At which this region starts,
+ * from the beginning of the MTD */
+ uint32_t erasesize; /* For this region */
+ uint32_t numblocks; /* Number of blocks in this region */
+ uint32_t regionindex;
+};
+
+struct otp_info {
+ uint32_t start;
+ uint32_t length;
+ uint32_t locked;
+};
+
+#define MEMGETINFO _IOR('M', 1, struct mtd_info_user)
+#define MEMERASE _IOW('M', 2, struct erase_info_user)
+#define MEMWRITEOOB _IOWR('M', 3, struct mtd_oob_buf)
+#define MEMREADOOB _IOWR('M', 4, struct mtd_oob_buf)
+#define MEMLOCK _IOW('M', 5, struct erase_info_user)
+#define MEMUNLOCK _IOW('M', 6, struct erase_info_user)
+#define MEMGETREGIONCOUNT _IOR('M', 7, int)
+#define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user)
+#define MEMSETOOBSEL _IOW('M', 9, struct nand_oobinfo)
+#define MEMGETOOBSEL _IOR('M', 10, struct nand_oobinfo)
+#define MEMGETBADBLOCK _IOW('M', 11, loff_t)
+#define MEMSETBADBLOCK _IOW('M', 12, loff_t)
+#define OTPSELECT _IOR('M', 13, int)
+#define OTPGETREGIONCOUNT _IOW('M', 14, int)
+#define OTPGETREGIONINFO _IOW('M', 15, struct otp_info)
+#define OTPLOCK _IOR('M', 16, struct otp_info)
+#define ECCGETLAYOUT _IOR('M', 17, struct nand_ecclayout)
+#define ECCGETSTATS _IOR('M', 18, struct mtd_ecc_stats)
+#define MTDFILEMODE _IO('M', 19)
+
+/*
+ * Obsolete legacy interface. Keep it in order not to break userspace
+ * interfaces
+ */
+struct nand_oobinfo {
+ uint32_t useecc;
+ uint32_t eccbytes;
+ uint32_t oobfree[8][2];
+ uint32_t eccpos[48];
+};
+
+struct nand_oobfree {
+ uint32_t offset;
+ uint32_t length;
+};
+
+#define MTD_MAX_OOBFREE_ENTRIES 8
+/*
+ * ECC layout control structure. Exported to userspace for
+ * diagnosis and to allow creation of raw images
+ */
+struct nand_ecclayout {
+ uint32_t eccbytes;
+ uint32_t eccpos[64];
+ uint32_t oobavail;
+ struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
+};
+
+/**
+ * struct mtd_ecc_stats - error correction stats
+ *
+ * @corrected: number of corrected bits
+ * @failed: number of uncorrectable errors
+ * @badblocks: number of bad blocks in this partition
+ * @bbtblocks: number of blocks reserved for bad block tables
+ */
+struct mtd_ecc_stats {
+ uint32_t corrected;
+ uint32_t failed;
+ uint32_t badblocks;
+ uint32_t bbtblocks;
+};
+
+/*
+ * Read/write file modes for access to MTD
+ */
+enum mtd_file_modes {
+ MTD_MODE_NORMAL = MTD_OTP_OFF,
+ MTD_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
+ MTD_MODE_OTP_USER = MTD_OTP_USER,
+ MTD_MODE_RAW,
+};
+
+#endif /* __MTD_ABI_H__ */
diff -Naur u-boot-2009.03_orig/include/linux/mtd/nand_ids.h u-boot-2009.03/include/linux/mtd/nand_ids.h
--- u-boot-2009.03_orig/include/linux/mtd/nand_ids.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux/mtd/nand_ids.h 2009-03-31 15:01:56.434908800 -0700
@@ -1,60 +1,60 @@
-/*
- * u-boot/include/linux/mtd/nand_ids.h
- *
- * Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com>
- * Steven J. Hill <sjhill@cotw.com>
- *
- * $Id: nand_ids.h,v 1.1 2000/10/13 16:16:26 mdeans Exp $
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Info:
- * Contains standard defines and IDs for NAND flash devices
- *
- * Changelog:
- * 01-31-2000 DMW Created
- * 09-18-2000 SJH Moved structure out of the Disk-On-Chip drivers
- * so it can be used by other NAND flash device
- * drivers. I also changed the copyright since none
- * of the original contents of this file are specific
- * to DoC devices. David can whack me with a baseball
- * bat later if I did something naughty.
- * 10-11-2000 SJH Added private NAND flash structure for driver
- * 2000-10-13 BE Moved out of 'nand.h' - avoids duplication.
- */
-
-#ifndef __LINUX_MTD_NAND_IDS_H
-#define __LINUX_MTD_NAND_IDS_H
-
-#ifndef CONFIG_NAND_LEGACY
-#error This module is for the legacy NAND support
-#endif
-
-static struct nand_flash_dev nand_flash_ids[] = {
- {"Toshiba TC5816BDC", NAND_MFR_TOSHIBA, 0x64, 21, 1, 2, 0x1000, 0},
- {"Toshiba TC5832DC", NAND_MFR_TOSHIBA, 0x6b, 22, 0, 2, 0x2000, 0},
- {"Toshiba TH58V128DC", NAND_MFR_TOSHIBA, 0x73, 24, 0, 2, 0x4000, 0},
- {"Toshiba TC58256FT/DC", NAND_MFR_TOSHIBA, 0x75, 25, 0, 2, 0x4000, 0},
- {"Toshiba TH58512FT", NAND_MFR_TOSHIBA, 0x76, 26, 0, 3, 0x4000, 0},
- {"Toshiba TC58V32DC", NAND_MFR_TOSHIBA, 0xe5, 22, 0, 2, 0x2000, 0},
- {"Toshiba TC58V64AFT/DC", NAND_MFR_TOSHIBA, 0xe6, 23, 0, 2, 0x2000, 0},
- {"Toshiba TC58V16BDC", NAND_MFR_TOSHIBA, 0xea, 21, 1, 2, 0x1000, 0},
- {"Toshiba TH58100FT", NAND_MFR_TOSHIBA, 0x79, 27, 0, 3, 0x4000, 0},
- {"Samsung KM29N16000", NAND_MFR_SAMSUNG, 0x64, 21, 1, 2, 0x1000, 0},
- {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0x6b, 22, 0, 2, 0x2000, 0},
- {"Samsung KM29U128T", NAND_MFR_SAMSUNG, 0x73, 24, 0, 2, 0x4000, 0},
- {"Samsung KM29U256T", NAND_MFR_SAMSUNG, 0x75, 25, 0, 2, 0x4000, 0},
- {"Samsung unknown 64Mb", NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000, 0},
- {"Samsung KM29W32000", NAND_MFR_SAMSUNG, 0xe3, 22, 0, 2, 0x2000, 0},
- {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0xe5, 22, 0, 2, 0x2000, 0},
- {"Samsung KM29U64000", NAND_MFR_SAMSUNG, 0xe6, 23, 0, 2, 0x2000, 0},
- {"Samsung KM29W16000", NAND_MFR_SAMSUNG, 0xea, 21, 1, 2, 0x1000, 0},
- {"Samsung K9F5616Q0C", NAND_MFR_SAMSUNG, 0x45, 25, 0, 2, 0x4000, 1},
- {"Samsung K9K1216Q0C", NAND_MFR_SAMSUNG, 0x46, 26, 0, 3, 0x4000, 1},
- {"Samsung K9F1G08U0M", NAND_MFR_SAMSUNG, 0xf1, 27, 0, 2, 0, 0},
- {NULL,}
-};
-
-#endif /* __LINUX_MTD_NAND_IDS_H */
+/*
+ * u-boot/include/linux/mtd/nand_ids.h
+ *
+ * Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com>
+ * Steven J. Hill <sjhill@cotw.com>
+ *
+ * $Id: nand_ids.h,v 1.1.1.1 2009/03/25 22:22:29 kenagy Exp $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Info:
+ * Contains standard defines and IDs for NAND flash devices
+ *
+ * Changelog:
+ * 01-31-2000 DMW Created
+ * 09-18-2000 SJH Moved structure out of the Disk-On-Chip drivers
+ * so it can be used by other NAND flash device
+ * drivers. I also changed the copyright since none
+ * of the original contents of this file are specific
+ * to DoC devices. David can whack me with a baseball
+ * bat later if I did something naughty.
+ * 10-11-2000 SJH Added private NAND flash structure for driver
+ * 2000-10-13 BE Moved out of 'nand.h' - avoids duplication.
+ */
+
+#ifndef __LINUX_MTD_NAND_IDS_H
+#define __LINUX_MTD_NAND_IDS_H
+
+#ifndef CONFIG_NAND_LEGACY
+#error This module is for the legacy NAND support
+#endif
+
+static struct nand_flash_dev nand_flash_ids[] = {
+ {"Toshiba TC5816BDC", NAND_MFR_TOSHIBA, 0x64, 21, 1, 2, 0x1000, 0},
+ {"Toshiba TC5832DC", NAND_MFR_TOSHIBA, 0x6b, 22, 0, 2, 0x2000, 0},
+ {"Toshiba TH58V128DC", NAND_MFR_TOSHIBA, 0x73, 24, 0, 2, 0x4000, 0},
+ {"Toshiba TC58256FT/DC", NAND_MFR_TOSHIBA, 0x75, 25, 0, 2, 0x4000, 0},
+ {"Toshiba TH58512FT", NAND_MFR_TOSHIBA, 0x76, 26, 0, 3, 0x4000, 0},
+ {"Toshiba TC58V32DC", NAND_MFR_TOSHIBA, 0xe5, 22, 0, 2, 0x2000, 0},
+ {"Toshiba TC58V64AFT/DC", NAND_MFR_TOSHIBA, 0xe6, 23, 0, 2, 0x2000, 0},
+ {"Toshiba TC58V16BDC", NAND_MFR_TOSHIBA, 0xea, 21, 1, 2, 0x1000, 0},
+ {"Toshiba TH58100FT", NAND_MFR_TOSHIBA, 0x79, 27, 0, 3, 0x4000, 0},
+ {"Samsung KM29N16000", NAND_MFR_SAMSUNG, 0x64, 21, 1, 2, 0x1000, 0},
+ {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0x6b, 22, 0, 2, 0x2000, 0},
+ {"Samsung KM29U128T", NAND_MFR_SAMSUNG, 0x73, 24, 0, 2, 0x4000, 0},
+ {"Samsung KM29U256T", NAND_MFR_SAMSUNG, 0x75, 25, 0, 2, 0x4000, 0},
+ {"Samsung unknown 64Mb", NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000, 0},
+ {"Samsung KM29W32000", NAND_MFR_SAMSUNG, 0xe3, 22, 0, 2, 0x2000, 0},
+ {"Samsung unknown 4Mb", NAND_MFR_SAMSUNG, 0xe5, 22, 0, 2, 0x2000, 0},
+ {"Samsung KM29U64000", NAND_MFR_SAMSUNG, 0xe6, 23, 0, 2, 0x2000, 0},
+ {"Samsung KM29W16000", NAND_MFR_SAMSUNG, 0xea, 21, 1, 2, 0x1000, 0},
+ {"Samsung K9F5616Q0C", NAND_MFR_SAMSUNG, 0x45, 25, 0, 2, 0x4000, 1},
+ {"Samsung K9K1216Q0C", NAND_MFR_SAMSUNG, 0x46, 26, 0, 3, 0x4000, 1},
+ {"Samsung K9F1G08U0M", NAND_MFR_SAMSUNG, 0xf1, 27, 0, 2, 0, 0},
+ {NULL,}
+};
+
+#endif /* __LINUX_MTD_NAND_IDS_H */
diff -Naur u-boot-2009.03_orig/include/linux/mtd/nand_legacy.h u-boot-2009.03/include/linux/mtd/nand_legacy.h
--- u-boot-2009.03_orig/include/linux/mtd/nand_legacy.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux/mtd/nand_legacy.h 2009-03-31 15:01:56.466158400 -0700
@@ -1,196 +1,196 @@
-/*
- * linux/include/linux/mtd/nand.h
- *
- * Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com>
- * Steven J. Hill <sjhill@cotw.com>
- * Thomas Gleixner <gleixner@autronix.de>
- *
- * $Id: nand.h,v 1.7 2003/07/24 23:30:46 a0384864 Exp $
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Info:
- * Contains standard defines and IDs for NAND flash devices
- *
- * Changelog:
- * 01-31-2000 DMW Created
- * 09-18-2000 SJH Moved structure out of the Disk-On-Chip drivers
- * so it can be used by other NAND flash device
- * drivers. I also changed the copyright since none
- * of the original contents of this file are specific
- * to DoC devices. David can whack me with a baseball
- * bat later if I did something naughty.
- * 10-11-2000 SJH Added private NAND flash structure for driver
- * 10-24-2000 SJH Added prototype for 'nand_scan' function
- * 10-29-2001 TG changed nand_chip structure to support
- * hardwarespecific function for accessing control lines
- * 02-21-2002 TG added support for different read/write adress and
- * ready/busy line access function
- * 02-26-2002 TG added chip_delay to nand_chip structure to optimize
- * command delay times for different chips
- * 04-28-2002 TG OOB config defines moved from nand.c to avoid duplicate
- * defines in jffs2/wbuf.c
- */
-#ifndef __LINUX_MTD_NAND_LEGACY_H
-#define __LINUX_MTD_NAND_LEGACY_H
-
-#ifndef CONFIG_NAND_LEGACY
-#error This module is for the legacy NAND support
-#endif
-
-/* The maximum number of NAND chips in an array */
-#ifndef CONFIG_SYS_NAND_MAX_CHIPS
-#define CONFIG_SYS_NAND_MAX_CHIPS 1
-#endif
-
-/*
- * Standard NAND flash commands
- */
-#define NAND_CMD_READ0 0
-#define NAND_CMD_READ1 1
-#define NAND_CMD_PAGEPROG 0x10
-#define NAND_CMD_READOOB 0x50
-#define NAND_CMD_ERASE1 0x60
-#define NAND_CMD_STATUS 0x70
-#define NAND_CMD_SEQIN 0x80
-#define NAND_CMD_READID 0x90
-#define NAND_CMD_ERASE2 0xd0
-#define NAND_CMD_RESET 0xff
-
-/*
- * NAND Private Flash Chip Data
- *
- * Structure overview:
- *
- * IO_ADDR - address to access the 8 I/O lines of the flash device
- *
- * hwcontrol - hardwarespecific function for accesing control-lines
- *
- * dev_ready - hardwarespecific function for accesing device ready/busy line
- *
- * chip_lock - spinlock used to protect access to this structure
- *
- * wq - wait queue to sleep on if a NAND operation is in progress
- *
- * state - give the current state of the NAND device
- *
- * page_shift - number of address bits in a page (column address bits)
- *
- * data_buf - data buffer passed to/from MTD user modules
- *
- * data_cache - data cache for redundant page access and shadow for
- * ECC failure
- *
- * ecc_code_buf - used only for holding calculated or read ECCs for
- * a page read or written when ECC is in use
- *
- * reserved - padding to make structure fall on word boundary if
- * when ECC is in use
- */
-struct Nand {
- char floor, chip;
- unsigned long curadr;
- unsigned char curmode;
- /* Also some erase/write/pipeline info when we get that far */
-};
-
-struct nand_chip {
- int page_shift;
- u_char *data_buf;
- u_char *data_cache;
- int cache_page;
- u_char ecc_code_buf[6];
- u_char reserved[2];
- char ChipID; /* Type of DiskOnChip */
- struct Nand *chips;
- int chipshift;
- char* chips_name;
- unsigned long erasesize;
- unsigned long mfr; /* Flash IDs - only one type of flash per device */
- unsigned long id;
- char* name;
- int numchips;
- char page256;
- char pageadrlen;
- unsigned long IO_ADDR; /* address to access the 8 I/O lines to the flash device */
- unsigned long totlen;
- uint oobblock; /* Size of OOB blocks (e.g. 512) */
- uint oobsize; /* Amount of OOB data per block (e.g. 16) */
- uint eccsize;
- int bus16;
-};
-
-/*
- * NAND Flash Manufacturer ID Codes
- */
-#define NAND_MFR_TOSHIBA 0x98
-#define NAND_MFR_SAMSUNG 0xec
-
-/*
- * NAND Flash Device ID Structure
- *
- * Structure overview:
- *
- * name - Complete name of device
- *
- * manufacture_id - manufacturer ID code of device.
- *
- * model_id - model ID code of device.
- *
- * chipshift - total number of address bits for the device which
- * is used to calculate address offsets and the total
- * number of bytes the device is capable of.
- *
- * page256 - denotes if flash device has 256 byte pages or not.
- *
- * pageadrlen - number of bytes minus one needed to hold the
- * complete address into the flash array. Keep in
- * mind that when a read or write is done to a
- * specific address, the address is input serially
- * 8 bits at a time. This structure member is used
- * by the read/write routines as a loop index for
- * shifting the address out 8 bits at a time.
- *
- * erasesize - size of an erase block in the flash device.
- */
-struct nand_flash_dev {
- char * name;
- int manufacture_id;
- int model_id;
- int chipshift;
- char page256;
- char pageadrlen;
- unsigned long erasesize;
- int bus16;
-};
-
-/*
-* Constants for oob configuration
-*/
-#define NAND_NOOB_ECCPOS0 0
-#define NAND_NOOB_ECCPOS1 1
-#define NAND_NOOB_ECCPOS2 2
-#define NAND_NOOB_ECCPOS3 3
-#define NAND_NOOB_ECCPOS4 6
-#define NAND_NOOB_ECCPOS5 7
-#define NAND_NOOB_BADBPOS -1
-#define NAND_NOOB_ECCVPOS -1
-
-#define NAND_JFFS2_OOB_ECCPOS0 0
-#define NAND_JFFS2_OOB_ECCPOS1 1
-#define NAND_JFFS2_OOB_ECCPOS2 2
-#define NAND_JFFS2_OOB_ECCPOS3 3
-#define NAND_JFFS2_OOB_ECCPOS4 6
-#define NAND_JFFS2_OOB_ECCPOS5 7
-#define NAND_JFFS2_OOB_BADBPOS 5
-#define NAND_JFFS2_OOB_ECCVPOS 4
-
-#define NAND_JFFS2_OOB8_FSDAPOS 6
-#define NAND_JFFS2_OOB16_FSDAPOS 8
-#define NAND_JFFS2_OOB8_FSDALEN 2
-#define NAND_JFFS2_OOB16_FSDALEN 8
-
-unsigned long nand_probe(unsigned long physadr);
-#endif /* __LINUX_MTD_NAND_LEGACY_H */
+/*
+ * linux/include/linux/mtd/nand.h
+ *
+ * Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com>
+ * Steven J. Hill <sjhill@cotw.com>
+ * Thomas Gleixner <gleixner@autronix.de>
+ *
+ * $Id: nand_legacy.h,v 1.1.1.1 2009/03/25 22:22:29 kenagy Exp $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Info:
+ * Contains standard defines and IDs for NAND flash devices
+ *
+ * Changelog:
+ * 01-31-2000 DMW Created
+ * 09-18-2000 SJH Moved structure out of the Disk-On-Chip drivers
+ * so it can be used by other NAND flash device
+ * drivers. I also changed the copyright since none
+ * of the original contents of this file are specific
+ * to DoC devices. David can whack me with a baseball
+ * bat later if I did something naughty.
+ * 10-11-2000 SJH Added private NAND flash structure for driver
+ * 10-24-2000 SJH Added prototype for 'nand_scan' function
+ * 10-29-2001 TG changed nand_chip structure to support
+ * hardwarespecific function for accessing control lines
+ * 02-21-2002 TG added support for different read/write adress and
+ * ready/busy line access function
+ * 02-26-2002 TG added chip_delay to nand_chip structure to optimize
+ * command delay times for different chips
+ * 04-28-2002 TG OOB config defines moved from nand.c to avoid duplicate
+ * defines in jffs2/wbuf.c
+ */
+#ifndef __LINUX_MTD_NAND_LEGACY_H
+#define __LINUX_MTD_NAND_LEGACY_H
+
+#ifndef CONFIG_NAND_LEGACY
+#error This module is for the legacy NAND support
+#endif
+
+/* The maximum number of NAND chips in an array */
+#ifndef CONFIG_SYS_NAND_MAX_CHIPS
+#define CONFIG_SYS_NAND_MAX_CHIPS 1
+#endif
+
+/*
+ * Standard NAND flash commands
+ */
+#define NAND_CMD_READ0 0
+#define NAND_CMD_READ1 1
+#define NAND_CMD_PAGEPROG 0x10
+#define NAND_CMD_READOOB 0x50
+#define NAND_CMD_ERASE1 0x60
+#define NAND_CMD_STATUS 0x70
+#define NAND_CMD_SEQIN 0x80
+#define NAND_CMD_READID 0x90
+#define NAND_CMD_ERASE2 0xd0
+#define NAND_CMD_RESET 0xff
+
+/*
+ * NAND Private Flash Chip Data
+ *
+ * Structure overview:
+ *
+ * IO_ADDR - address to access the 8 I/O lines of the flash device
+ *
+ * hwcontrol - hardwarespecific function for accesing control-lines
+ *
+ * dev_ready - hardwarespecific function for accesing device ready/busy line
+ *
+ * chip_lock - spinlock used to protect access to this structure
+ *
+ * wq - wait queue to sleep on if a NAND operation is in progress
+ *
+ * state - give the current state of the NAND device
+ *
+ * page_shift - number of address bits in a page (column address bits)
+ *
+ * data_buf - data buffer passed to/from MTD user modules
+ *
+ * data_cache - data cache for redundant page access and shadow for
+ * ECC failure
+ *
+ * ecc_code_buf - used only for holding calculated or read ECCs for
+ * a page read or written when ECC is in use
+ *
+ * reserved - padding to make structure fall on word boundary if
+ * when ECC is in use
+ */
+struct Nand {
+ char floor, chip;
+ unsigned long curadr;
+ unsigned char curmode;
+ /* Also some erase/write/pipeline info when we get that far */
+};
+
+struct nand_chip {
+ int page_shift;
+ u_char *data_buf;
+ u_char *data_cache;
+ int cache_page;
+ u_char ecc_code_buf[6];
+ u_char reserved[2];
+ char ChipID; /* Type of DiskOnChip */
+ struct Nand *chips;
+ int chipshift;
+ char* chips_name;
+ unsigned long erasesize;
+ unsigned long mfr; /* Flash IDs - only one type of flash per device */
+ unsigned long id;
+ char* name;
+ int numchips;
+ char page256;
+ char pageadrlen;
+ unsigned long IO_ADDR; /* address to access the 8 I/O lines to the flash device */
+ unsigned long totlen;
+ uint oobblock; /* Size of OOB blocks (e.g. 512) */
+ uint oobsize; /* Amount of OOB data per block (e.g. 16) */
+ uint eccsize;
+ int bus16;
+};
+
+/*
+ * NAND Flash Manufacturer ID Codes
+ */
+#define NAND_MFR_TOSHIBA 0x98
+#define NAND_MFR_SAMSUNG 0xec
+
+/*
+ * NAND Flash Device ID Structure
+ *
+ * Structure overview:
+ *
+ * name - Complete name of device
+ *
+ * manufacture_id - manufacturer ID code of device.
+ *
+ * model_id - model ID code of device.
+ *
+ * chipshift - total number of address bits for the device which
+ * is used to calculate address offsets and the total
+ * number of bytes the device is capable of.
+ *
+ * page256 - denotes if flash device has 256 byte pages or not.
+ *
+ * pageadrlen - number of bytes minus one needed to hold the
+ * complete address into the flash array. Keep in
+ * mind that when a read or write is done to a
+ * specific address, the address is input serially
+ * 8 bits at a time. This structure member is used
+ * by the read/write routines as a loop index for
+ * shifting the address out 8 bits at a time.
+ *
+ * erasesize - size of an erase block in the flash device.
+ */
+struct nand_flash_dev {
+ char * name;
+ int manufacture_id;
+ int model_id;
+ int chipshift;
+ char page256;
+ char pageadrlen;
+ unsigned long erasesize;
+ int bus16;
+};
+
+/*
+* Constants for oob configuration
+*/
+#define NAND_NOOB_ECCPOS0 0
+#define NAND_NOOB_ECCPOS1 1
+#define NAND_NOOB_ECCPOS2 2
+#define NAND_NOOB_ECCPOS3 3
+#define NAND_NOOB_ECCPOS4 6
+#define NAND_NOOB_ECCPOS5 7
+#define NAND_NOOB_BADBPOS -1
+#define NAND_NOOB_ECCVPOS -1
+
+#define NAND_JFFS2_OOB_ECCPOS0 0
+#define NAND_JFFS2_OOB_ECCPOS1 1
+#define NAND_JFFS2_OOB_ECCPOS2 2
+#define NAND_JFFS2_OOB_ECCPOS3 3
+#define NAND_JFFS2_OOB_ECCPOS4 6
+#define NAND_JFFS2_OOB_ECCPOS5 7
+#define NAND_JFFS2_OOB_BADBPOS 5
+#define NAND_JFFS2_OOB_ECCVPOS 4
+
+#define NAND_JFFS2_OOB8_FSDAPOS 6
+#define NAND_JFFS2_OOB16_FSDAPOS 8
+#define NAND_JFFS2_OOB8_FSDALEN 2
+#define NAND_JFFS2_OOB16_FSDALEN 8
+
+unsigned long nand_probe(unsigned long physadr);
+#endif /* __LINUX_MTD_NAND_LEGACY_H */
diff -Naur u-boot-2009.03_orig/include/linux/mtd/nftl-user.h u-boot-2009.03/include/linux/mtd/nftl-user.h
--- u-boot-2009.03_orig/include/linux/mtd/nftl-user.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux/mtd/nftl-user.h 2009-03-31 15:01:56.497408000 -0700
@@ -1,76 +1,76 @@
-/*
- * $Id: nftl-user.h,v 1.2 2005/11/07 11:14:56 gleixner Exp $
- *
- * Parts of NFTL headers shared with userspace
- *
- */
-
-#ifndef __MTD_NFTL_USER_H__
-#define __MTD_NFTL_USER_H__
-
-/* Block Control Information */
-
-struct nftl_bci {
- unsigned char ECCSig[6];
- uint8_t Status;
- uint8_t Status1;
-}__attribute__((packed));
-
-/* Unit Control Information */
-
-struct nftl_uci0 {
- uint16_t VirtUnitNum;
- uint16_t ReplUnitNum;
- uint16_t SpareVirtUnitNum;
- uint16_t SpareReplUnitNum;
-} __attribute__((packed));
-
-struct nftl_uci1 {
- uint32_t WearInfo;
- uint16_t EraseMark;
- uint16_t EraseMark1;
-} __attribute__((packed));
-
-struct nftl_uci2 {
- uint16_t FoldMark;
- uint16_t FoldMark1;
- uint32_t unused;
-} __attribute__((packed));
-
-union nftl_uci {
- struct nftl_uci0 a;
- struct nftl_uci1 b;
- struct nftl_uci2 c;
-};
-
-struct nftl_oob {
- struct nftl_bci b;
- union nftl_uci u;
-};
-
-/* NFTL Media Header */
-
-struct NFTLMediaHeader {
- char DataOrgID[6];
- uint16_t NumEraseUnits;
- uint16_t FirstPhysicalEUN;
- uint32_t FormattedSize;
- unsigned char UnitSizeFactor;
-} __attribute__((packed));
-
-#define MAX_ERASE_ZONES (8192 - 512)
-
-#define ERASE_MARK 0x3c69
-#define SECTOR_FREE 0xff
-#define SECTOR_USED 0x55
-#define SECTOR_IGNORE 0x11
-#define SECTOR_DELETED 0x00
-
-#define FOLD_MARK_IN_PROGRESS 0x5555
-
-#define ZONE_GOOD 0xff
-#define ZONE_BAD_ORIGINAL 0
-#define ZONE_BAD_MARKED 7
-
-
-#endif /* __MTD_NFTL_USER_H__ */
+/*
+ * $Id: nftl-user.h,v 1.1.1.1 2009/03/25 22:22:29 kenagy Exp $
+ *
+ * Parts of NFTL headers shared with userspace
+ *
+ */
+
+#ifndef __MTD_NFTL_USER_H__
+#define __MTD_NFTL_USER_H__
+
+/* Block Control Information */
+
+struct nftl_bci {
+ unsigned char ECCSig[6];
+ uint8_t Status;
+ uint8_t Status1;
+}__attribute__((packed));
+
+/* Unit Control Information */
+
+struct nftl_uci0 {
+ uint16_t VirtUnitNum;
+ uint16_t ReplUnitNum;
+ uint16_t SpareVirtUnitNum;
+ uint16_t SpareReplUnitNum;
+} __attribute__((packed));
+
+struct nftl_uci1 {
+ uint32_t WearInfo;
+ uint16_t EraseMark;
+ uint16_t EraseMark1;
+} __attribute__((packed));
+
+struct nftl_uci2 {
+ uint16_t FoldMark;
+ uint16_t FoldMark1;
+ uint32_t unused;
+} __attribute__((packed));
+
+union nftl_uci {
+ struct nftl_uci0 a;
+ struct nftl_uci1 b;
+ struct nftl_uci2 c;
+};
+
+struct nftl_oob {
+ struct nftl_bci b;
+ union nftl_uci u;
+};
+
+/* NFTL Media Header */
+
+struct NFTLMediaHeader {
+ char DataOrgID[6];
+ uint16_t NumEraseUnits;
+ uint16_t FirstPhysicalEUN;
+ uint32_t FormattedSize;
+ unsigned char UnitSizeFactor;
+} __attribute__((packed));
+
+#define MAX_ERASE_ZONES (8192 - 512)
+
+#define ERASE_MARK 0x3c69
+#define SECTOR_FREE 0xff
+#define SECTOR_USED 0x55
+#define SECTOR_IGNORE 0x11
+#define SECTOR_DELETED 0x00
+
+#define FOLD_MARK_IN_PROGRESS 0x5555
+
+#define ZONE_GOOD 0xff
+#define ZONE_BAD_ORIGINAL 0
+#define ZONE_BAD_MARKED 7
+
+
+#endif /* __MTD_NFTL_USER_H__ */
diff -Naur u-boot-2009.03_orig/include/linux/mtd/partitions.h u-boot-2009.03/include/linux/mtd/partitions.h
--- u-boot-2009.03_orig/include/linux/mtd/partitions.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux/mtd/partitions.h 2009-03-31 15:01:56.528657600 -0700
@@ -1,84 +1,84 @@
-/*
- * MTD partitioning layer definitions
- *
- * (C) 2000 Nicolas Pitre <nico@cam.org>
- *
- * This code is GPL
- *
- * $Id: partitions.h,v 1.17 2005/11/07 11:14:55 gleixner Exp $
- */
-
-#ifndef MTD_PARTITIONS_H
-#define MTD_PARTITIONS_H
-
-#include <linux/types.h>
-
-
-/*
- * Partition definition structure:
- *
- * An array of struct partition is passed along with a MTD object to
- * add_mtd_partitions() to create them.
- *
- * For each partition, these fields are available:
- * name: string that will be used to label the partition's MTD device.
- * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition
- * will extend to the end of the master MTD device.
- * offset: absolute starting position within the master MTD device; if
- * defined as MTDPART_OFS_APPEND, the partition will start where the
- * previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block.
- * mask_flags: contains flags that have to be masked (removed) from the
- * master MTD flag set for the corresponding MTD partition.
- * For example, to force a read-only partition, simply adding
- * MTD_WRITEABLE to the mask_flags will do the trick.
- *
- * Note: writeable partitions require their size and offset be
- * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
- */
-
-struct mtd_partition {
- char *name; /* identifier string */
- u_int32_t size; /* partition size */
- u_int32_t offset; /* offset within the master MTD space */
- u_int32_t mask_flags; /* master MTD flags to mask out for this partition */
- struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only)*/
- struct mtd_info **mtdp; /* pointer to store the MTD object */
-};
-
-#define MTDPART_OFS_NXTBLK (-2)
-#define MTDPART_OFS_APPEND (-1)
-#define MTDPART_SIZ_FULL (0)
-
-
-int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
-int del_mtd_partitions(struct mtd_info *);
-
-#if 0
-/*
- * Functions dealing with the various ways of partitioning the space
- */
-
-struct mtd_part_parser {
- struct list_head list;
- struct module *owner;
- const char *name;
- int (*parse_fn)(struct mtd_info *, struct mtd_partition **, unsigned long);
-};
-
-extern int register_mtd_parser(struct mtd_part_parser *parser);
-extern int deregister_mtd_parser(struct mtd_part_parser *parser);
-extern int parse_mtd_partitions(struct mtd_info *master, const char **types,
- struct mtd_partition **pparts, unsigned long origin);
-
-#define put_partition_parser(p) do { module_put((p)->owner); } while(0)
-
-struct device;
-struct device_node;
-
-int __devinit of_mtd_parse_partitions(struct device *dev,
- struct mtd_info *mtd,
- struct device_node *node,
- struct mtd_partition **pparts);
-#endif
-
-#endif
+/*
+ * MTD partitioning layer definitions
+ *
+ * (C) 2000 Nicolas Pitre <nico@cam.org>
+ *
+ * This code is GPL
+ *
+ * $Id: partitions.h,v 1.1.1.1 2009/03/25 22:22:29 kenagy Exp $
+ */
+
+#ifndef MTD_PARTITIONS_H
+#define MTD_PARTITIONS_H
+
+#include <linux/types.h>
+
+
+/*
+ * Partition definition structure:
+ *
+ * An array of struct partition is passed along with a MTD object to
+ * add_mtd_partitions() to create them.
+ *
+ * For each partition, these fields are available:
+ * name: string that will be used to label the partition's MTD device.
+ * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition
+ * will extend to the end of the master MTD device.
+ * offset: absolute starting position within the master MTD device; if
+ * defined as MTDPART_OFS_APPEND, the partition will start where the
+ * previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block.
+ * mask_flags: contains flags that have to be masked (removed) from the
+ * master MTD flag set for the corresponding MTD partition.
+ * For example, to force a read-only partition, simply adding
+ * MTD_WRITEABLE to the mask_flags will do the trick.
+ *
+ * Note: writeable partitions require their size and offset be
+ * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
+ */
+
+struct mtd_partition {
+ char *name; /* identifier string */
+ u_int32_t size; /* partition size */
+ u_int32_t offset; /* offset within the master MTD space */
+ u_int32_t mask_flags; /* master MTD flags to mask out for this partition */
+ struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only)*/
+ struct mtd_info **mtdp; /* pointer to store the MTD object */
+};
+
+#define MTDPART_OFS_NXTBLK (-2)
+#define MTDPART_OFS_APPEND (-1)
+#define MTDPART_SIZ_FULL (0)
+
+
+int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
+int del_mtd_partitions(struct mtd_info *);
+
+#if 0
+/*
+ * Functions dealing with the various ways of partitioning the space
+ */
+
+struct mtd_part_parser {
+ struct list_head list;
+ struct module *owner;
+ const char *name;
+ int (*parse_fn)(struct mtd_info *, struct mtd_partition **, unsigned long);
+};
+
+extern int register_mtd_parser(struct mtd_part_parser *parser);
+extern int deregister_mtd_parser(struct mtd_part_parser *parser);
+extern int parse_mtd_partitions(struct mtd_info *master, const char **types,
+ struct mtd_partition **pparts, unsigned long origin);
+
+#define put_partition_parser(p) do { module_put((p)->owner); } while(0)
+
+struct device;
+struct device_node;
+
+int __devinit of_mtd_parse_partitions(struct device *dev,
+ struct mtd_info *mtd,
+ struct device_node *node,
+ struct mtd_partition **pparts);
+#endif
+
+#endif
diff -Naur u-boot-2009.03_orig/include/linux_logo.h u-boot-2009.03/include/linux_logo.h
--- u-boot-2009.03_orig/include/linux_logo.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/linux_logo.h 2009-03-31 14:57:41.500672000 -0700
@@ -1,1445 +1,1445 @@
-/* $Id: linux_logo.h,v 1.5 1998/07/30 16:30:58 jj Exp $
- * include/linux/linux_logo.h: This is a linux logo
- * to be displayed on boot.
- *
- * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
- * Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- *
- * You can put anything here, but:
- * LINUX_LOGO_COLORS has to be less than 224
- * image size has to be 80x80
- * values have to start from 0x20
- * (i.e. RGB(linux_logo_red[0],
- * linux_logo_green[0],
- * linux_logo_blue[0]) is color 0x20)
- * BW image has to be 80x80 as well, with MS bit
- * on the left
- * Serial_console ascii image can be any size,
- * but should contain %s to display the version
- */
-
-#if LINUX_LOGO_COLORS == 214
-
-unsigned char linux_logo_red[] __initdata = {
- 0x02, 0x9E, 0xE9, 0xC4, 0x50, 0xC9, 0xC4, 0xE9,
- 0x65, 0xE3, 0xC2, 0x25, 0xA4, 0xEC, 0x90, 0xA6,
- 0xC4, 0x6A, 0xD1, 0xF3, 0x12, 0xED, 0xA0, 0xC2,
- 0xB8, 0xD5, 0xDB, 0xD2, 0x3E, 0x16, 0xEB, 0x54,
- 0xA9, 0xCD, 0xF5, 0x0A, 0xBA, 0xB3, 0xDC, 0x74,
- 0xCE, 0xF6, 0xD3, 0xC5, 0xEA, 0xB8, 0xED, 0x5E,
- 0xE5, 0x26, 0xF4, 0xA9, 0x82, 0x94, 0xE6, 0x38,
- 0xF2, 0x0F, 0x7F, 0x49, 0xE5, 0xF4, 0xD3, 0xC3,
- 0xC2, 0x1E, 0xD5, 0xC6, 0xA4, 0xFA, 0x0A, 0xBA,
- 0xD4, 0xEB, 0xEA, 0xEC, 0xA8, 0xBC, 0xB4, 0xDC,
- 0x84, 0xE4, 0xCE, 0xEC, 0x92, 0xCD, 0xDC, 0x8B,
- 0xCC, 0x1E, 0xF6, 0xB2, 0x60, 0x2A, 0x96, 0x52,
- 0x0F, 0xBD, 0xFA, 0xCC, 0xB8, 0x7A, 0x4C, 0xD2,
- 0x06, 0xEF, 0x44, 0x64, 0xF4, 0xBA, 0xCE, 0xE6,
- 0x8A, 0x6F, 0x3C, 0x70, 0x7C, 0x9C, 0xBA, 0xDF,
- 0x2C, 0x4D, 0x3B, 0xCA, 0xDE, 0xCE, 0xEE, 0x46,
- 0x6A, 0xAC, 0x96, 0xE5, 0x96, 0x7A, 0xBA, 0xB6,
- 0xE2, 0x7E, 0xAA, 0xC5, 0x96, 0x9E, 0xC2, 0xAA,
- 0xDA, 0x35, 0xB6, 0x82, 0x88, 0xBE, 0xC2, 0x9E,
- 0xB4, 0xD5, 0xDA, 0x9C, 0xA0, 0xD0, 0xA8, 0xC7,
- 0x72, 0xF2, 0xDB, 0x76, 0xDC, 0xBE, 0xAA, 0xF4,
- 0x87, 0x2F, 0x53, 0x8E, 0x36, 0xCE, 0xE6, 0xCA,
- 0xCB, 0xE4, 0xD6, 0xAA, 0x42, 0x5D, 0xB4, 0x59,
- 0x1C, 0xC8, 0x96, 0x6C, 0xDA, 0xCE, 0xE6, 0xCB,
- 0x96, 0x16, 0xFA, 0xBE, 0xAE, 0xFE, 0x6E, 0xD6,
- 0xCE, 0xB6, 0xE5, 0xED, 0xDB, 0xDC, 0xF4, 0x72,
- 0x1F, 0xAE, 0xE6, 0xC2, 0xCA, 0xC4
-};
-
-unsigned char linux_logo_green[] __initdata = {
- 0x02, 0x88, 0xC4, 0x85, 0x44, 0xA2, 0xA8, 0xE5,
- 0x65, 0xA6, 0xC2, 0x24, 0xA4, 0xB4, 0x62, 0x86,
- 0x94, 0x44, 0xD2, 0xB6, 0x12, 0xD4, 0x73, 0x96,
- 0x92, 0x95, 0xB2, 0xC2, 0x36, 0x0E, 0xBC, 0x54,
- 0x75, 0xA5, 0xF5, 0x0A, 0xB2, 0x83, 0xC2, 0x74,
- 0x9B, 0xBD, 0xA2, 0xCA, 0xDA, 0x8C, 0xCB, 0x42,
- 0xAC, 0x12, 0xDA, 0x7B, 0x54, 0x94, 0xD2, 0x24,
- 0xBE, 0x06, 0x65, 0x33, 0xBB, 0xBC, 0xAB, 0x8C,
- 0x92, 0x1E, 0x9B, 0xB6, 0x6E, 0xFB, 0x04, 0xA2,
- 0xC8, 0xBD, 0xAD, 0xEC, 0x92, 0xBC, 0x7B, 0x9D,
- 0x84, 0xC4, 0xC4, 0xB4, 0x6C, 0x93, 0xA3, 0x5E,
- 0x8D, 0x13, 0xD6, 0x82, 0x4C, 0x2A, 0x7A, 0x5A,
- 0x0D, 0x82, 0xBB, 0xCC, 0x8B, 0x6A, 0x3C, 0xBE,
- 0x06, 0xC4, 0x44, 0x45, 0xDB, 0x96, 0xB6, 0xDE,
- 0x8A, 0x4D, 0x3C, 0x5A, 0x7C, 0x9C, 0xAA, 0xCB,
- 0x1C, 0x4D, 0x2E, 0xB2, 0xBE, 0xAA, 0xDE, 0x3E,
- 0x6A, 0xAC, 0x82, 0xE5, 0x72, 0x62, 0x92, 0x9E,
- 0xCA, 0x4A, 0x8E, 0xBE, 0x86, 0x6B, 0xAA, 0x9A,
- 0xBE, 0x34, 0xAB, 0x76, 0x6E, 0x9A, 0x9E, 0x62,
- 0x76, 0xCE, 0xD3, 0x92, 0x7C, 0xB8, 0x7E, 0xC6,
- 0x5E, 0xE2, 0xC3, 0x54, 0xAA, 0x9E, 0x8A, 0xCA,
- 0x63, 0x2D, 0x3B, 0x8E, 0x1A, 0x9E, 0xC2, 0xA6,
- 0xCB, 0xDC, 0xD6, 0x8E, 0x26, 0x5C, 0xB4, 0x45,
- 0x1C, 0xB8, 0x6E, 0x4C, 0xBC, 0xAE, 0xD6, 0x92,
- 0x63, 0x16, 0xF6, 0x8C, 0x7A, 0xFE, 0x6E, 0xBA,
- 0xC6, 0x86, 0xAA, 0xAE, 0xDB, 0xA4, 0xD4, 0x56,
- 0x0E, 0x6E, 0xB6, 0xB2, 0xBE, 0xBE
-};
-
-unsigned char linux_logo_blue[] __initdata = {
- 0x04, 0x28, 0x10, 0x0B, 0x14, 0x14, 0x74, 0xC7,
- 0x64, 0x0E, 0xC3, 0x24, 0xA4, 0x0C, 0x10, 0x20,
- 0x0D, 0x04, 0xD1, 0x0D, 0x13, 0x22, 0x0A, 0x40,
- 0x14, 0x0C, 0x11, 0x94, 0x0C, 0x08, 0x0B, 0x56,
- 0x09, 0x47, 0xF4, 0x0B, 0x9C, 0x07, 0x54, 0x74,
- 0x0F, 0x0C, 0x0F, 0xC7, 0x6C, 0x14, 0x14, 0x11,
- 0x0B, 0x04, 0x12, 0x0C, 0x05, 0x94, 0x94, 0x0A,
- 0x34, 0x09, 0x14, 0x08, 0x2F, 0x15, 0x19, 0x11,
- 0x28, 0x0C, 0x0B, 0x94, 0x08, 0xFA, 0x08, 0x7C,
- 0xBC, 0x15, 0x0A, 0xEC, 0x64, 0xBB, 0x0A, 0x0C,
- 0x84, 0x2C, 0xA0, 0x15, 0x10, 0x0D, 0x0B, 0x0E,
- 0x0A, 0x07, 0x10, 0x3C, 0x24, 0x2C, 0x28, 0x5C,
- 0x0A, 0x0D, 0x0A, 0xC1, 0x22, 0x4C, 0x10, 0x94,
- 0x04, 0x0F, 0x45, 0x08, 0x31, 0x54, 0x3C, 0xBC,
- 0x8C, 0x09, 0x3C, 0x18, 0x7C, 0x9C, 0x7C, 0x91,
- 0x0C, 0x4D, 0x17, 0x74, 0x0C, 0x48, 0x9C, 0x3C,
- 0x6A, 0xAC, 0x5C, 0xE3, 0x29, 0x3C, 0x2C, 0x7C,
- 0x6C, 0x04, 0x14, 0xA9, 0x74, 0x07, 0x2C, 0x74,
- 0x4C, 0x34, 0x97, 0x5C, 0x38, 0x0C, 0x5C, 0x04,
- 0x0C, 0xBA, 0xBC, 0x78, 0x18, 0x88, 0x24, 0xC2,
- 0x3C, 0xB4, 0x87, 0x0C, 0x14, 0x4C, 0x3C, 0x10,
- 0x17, 0x2C, 0x0A, 0x8C, 0x04, 0x1C, 0x44, 0x2C,
- 0xCD, 0xD8, 0xD4, 0x34, 0x0C, 0x5B, 0xB4, 0x1E,
- 0x1D, 0xAC, 0x24, 0x18, 0x20, 0x5C, 0xB4, 0x1C,
- 0x09, 0x14, 0xFC, 0x0C, 0x10, 0xFC, 0x6C, 0x7C,
- 0xB4, 0x1C, 0x15, 0x17, 0xDB, 0x18, 0x21, 0x24,
- 0x04, 0x04, 0x44, 0x8C, 0x8C, 0xB7
-};
-
-unsigned char linux_logo[] __initdata = {
- 0xBF, 0x95, 0x90, 0xCB, 0x95, 0xA1, 0x2C, 0x2C,
- 0x95, 0x55, 0xCB, 0x90, 0xCB, 0x95, 0x2C, 0x95,
- 0xCB, 0x47, 0x94, 0x95, 0xA1, 0xD6, 0xD6, 0x2C,
- 0x90, 0x47, 0x70, 0x2C, 0x6D, 0x2A, 0x6D, 0xD6,
- 0xA1, 0x2C, 0x55, 0x95, 0x2C, 0x2C, 0x55, 0x55,
- 0x95, 0xA1, 0xA1, 0xA1, 0x6D, 0xBF, 0x2A, 0x2A,
- 0xBF, 0x83, 0xBF, 0x95, 0x90, 0xCB, 0x95, 0xA1,
- 0x2C, 0x2C, 0x95, 0x55, 0xCB, 0x90, 0xCB, 0x95,
- 0x2C, 0x95, 0xCB, 0x47, 0x94, 0x95, 0xA1, 0xD6,
- 0xD6, 0x2C, 0x90, 0x47, 0x70, 0x2C, 0x6D, 0x2A,
- 0x95, 0x47, 0x47, 0x90, 0x2C, 0x2C, 0x2C, 0x95,
- 0x55, 0x55, 0xCB, 0x90, 0xCB, 0x55, 0x55, 0xCB,
- 0x47, 0xE6, 0x70, 0x95, 0xD6, 0xD6, 0xA1, 0x2C,
- 0x55, 0x55, 0x95, 0xD6, 0x6D, 0xD6, 0xA1, 0x2C,
- 0x2C, 0x95, 0x55, 0x95, 0x95, 0x95, 0x2C, 0x2C,
- 0xA1, 0xA1, 0x2C, 0x2C, 0xA1, 0xD6, 0xD6, 0xD6,
- 0xD6, 0xD6, 0x95, 0x47, 0x47, 0x90, 0x2C, 0x2C,
- 0x2C, 0x95, 0x55, 0x55, 0xCB, 0x90, 0xCB, 0x55,
- 0x55, 0xCB, 0x47, 0xE6, 0x70, 0x95, 0xD6, 0xD6,
- 0xA1, 0x2C, 0x55, 0x55, 0x95, 0xD6, 0x6D, 0xD6,
- 0x90, 0x47, 0x47, 0x70, 0x2C, 0xA1, 0x2C, 0x95,
- 0x55, 0x55, 0x90, 0xCB, 0x55, 0x55, 0x55, 0x70,
- 0x94, 0x70, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C,
- 0x95, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C,
- 0x95, 0x55, 0xCB, 0x95, 0xD6, 0xA1, 0x2C, 0x95,
- 0xA1, 0xD6, 0xD6, 0xA1, 0xA1, 0xD6, 0xA1, 0xA1,
- 0xA1, 0x2C, 0x90, 0x47, 0x47, 0x70, 0x2C, 0xA1,
- 0x2C, 0x95, 0x55, 0x55, 0x90, 0xCB, 0x55, 0x55,
- 0x55, 0x70, 0x94, 0x70, 0x95, 0xA1, 0xD6, 0xD6,
- 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0xD6, 0xD6, 0xA1,
- 0x94, 0xA0, 0x47, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
- 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0xCB,
- 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C,
- 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x95,
- 0x55, 0x55, 0x2C, 0x3F, 0x80, 0x20, 0x88, 0x88,
- 0x88, 0x20, 0x88, 0xB1, 0x2C, 0xA1, 0x2C, 0x2C,
- 0x95, 0xCB, 0x94, 0xA0, 0x47, 0x55, 0x2C, 0xD6,
- 0xA1, 0x95, 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55,
- 0xCB, 0xCB, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6,
- 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
- 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C,
- 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x95, 0x2C, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x95,
- 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
- 0x2C, 0x94, 0x80, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x88, 0x92, 0xA1, 0x95,
- 0x55, 0x90, 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6,
- 0xA1, 0x2C, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x95, 0x2C, 0xD6, 0xD6, 0xD6, 0xA1,
- 0x2C, 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95,
- 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0x95,
- 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55, 0x2C, 0x2C,
- 0xA1, 0xD6, 0xA1, 0xA1, 0x2C, 0x2C, 0x95, 0x55,
- 0x55, 0x55, 0x95, 0x95, 0x2C, 0x95, 0x95, 0xD6,
- 0xB1, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x80, 0x34, 0x88, 0x43, 0x47,
- 0x95, 0xCB, 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6,
- 0xA1, 0x95, 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55,
- 0x2C, 0x2C, 0xA1, 0xD6, 0xA1, 0xA1, 0xA1, 0x2C,
- 0x55, 0x55, 0x55, 0x55, 0x2C, 0x95, 0x2C, 0x2C,
- 0x55, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x55,
- 0x90, 0x70, 0x90, 0x55, 0x95, 0x95, 0xA1, 0xA1,
- 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x95, 0x95,
- 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xD5,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x88, 0x7D, 0x3F, 0xB1, 0x80, 0x20,
- 0x99, 0x2C, 0x55, 0x55, 0x95, 0x2C, 0xA1, 0xA1,
- 0x2C, 0x55, 0x90, 0x70, 0x90, 0x55, 0x95, 0x95,
- 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C,
- 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
- 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1, 0x95, 0xCB,
- 0x70, 0x94, 0x90, 0x55, 0x95, 0xA1, 0xA1, 0xA1,
- 0x2C, 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0xA1, 0x88,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0xB1, 0x47, 0xD5, 0x7D, 0x43,
- 0x20, 0x70, 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1,
- 0x95, 0xCB, 0x70, 0x94, 0x90, 0x55, 0x95, 0xA1,
- 0xA1, 0xA1, 0x2C, 0x95, 0x2C, 0x2C, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95,
- 0x95, 0x90, 0x55, 0x2C, 0xD6, 0xD6, 0x2C, 0x90,
- 0x94, 0x70, 0x55, 0x95, 0x2C, 0xD6, 0xD6, 0xA1,
- 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x95, 0x55, 0x55,
- 0xCB, 0xCB, 0xCB, 0x55, 0xCB, 0x55, 0x47, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x88, 0xB1, 0x3F, 0x92, 0x2B, 0x80,
- 0x20, 0x80, 0xD6, 0x70, 0x55, 0x2C, 0xD6, 0xD6,
- 0x2C, 0x90, 0x94, 0x70, 0x55, 0x95, 0x2C, 0xD6,
- 0xD6, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x95,
- 0x95, 0x55, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x55,
- 0xD6, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x55, 0x70,
- 0x94, 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0xA1, 0x95,
- 0x55, 0x55, 0x55, 0x95, 0x55, 0x55, 0xCB, 0x90,
- 0x70, 0x90, 0xCB, 0x55, 0x55, 0xA1, 0xD8, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x88, 0xD8, 0xE1, 0x88, 0x20, 0x20,
- 0x88, 0x88, 0xE6, 0x55, 0x2C, 0xA1, 0xD6, 0xA1,
- 0x55, 0x70, 0x94, 0x55, 0x95, 0xA1, 0xA1, 0xA1,
- 0xA1, 0x95, 0x55, 0x55, 0x95, 0x95, 0x55, 0x55,
- 0x90, 0x90, 0x90, 0x90, 0xCB, 0x55, 0x55, 0x55,
- 0xD6, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0xCB, 0x70,
- 0x70, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x55,
- 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x95, 0x2C, 0x95, 0x2C, 0xD6, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x80, 0xD6, 0xA1, 0xD6, 0xD6, 0xA1,
- 0xCB, 0x70, 0x70, 0x95, 0x2C, 0xA1, 0xA1, 0x2C,
- 0x2C, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
- 0xD6, 0xA1, 0xA1, 0xA1, 0xA1, 0x55, 0x70, 0x94,
- 0xCB, 0x95, 0xA1, 0xA1, 0x2C, 0x95, 0xCB, 0x55,
- 0x90, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x95, 0xA1,
- 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x95, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x88, 0x95, 0xA1, 0xA1, 0xA1, 0x55,
- 0x70, 0x94, 0xCB, 0x95, 0xA1, 0xA1, 0x2C, 0x95,
- 0xCB, 0xCB, 0x90, 0xCB, 0x55, 0x55, 0x55, 0x55,
- 0x95, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
- 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0xCB, 0x70, 0x70,
- 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x70, 0x90, 0xCB,
- 0xCB, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x2C, 0xD6,
- 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x70, 0x20, 0x20,
- 0x88, 0x43, 0xD8, 0x43, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x88, 0x88, 0x43, 0x2B, 0xD8, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x3F, 0x2C, 0x95, 0x95, 0xCB,
- 0x70, 0x70, 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x90,
- 0x90, 0xCB, 0x55, 0xCB, 0x55, 0xCB, 0x55, 0x95,
- 0x2C, 0xD6, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C,
- 0xA1, 0x95, 0x95, 0x55, 0xCB, 0x70, 0x90, 0x55,
- 0x2C, 0x2C, 0x2C, 0x55, 0x70, 0x70, 0x55, 0x95,
- 0x95, 0xCB, 0x90, 0x90, 0x90, 0x95, 0x2C, 0xA1,
- 0xD6, 0xD6, 0x2C, 0x2C, 0x95, 0x70, 0x20, 0x20,
- 0x80, 0x2B, 0x34, 0x2B, 0x88, 0x20, 0x20, 0x20,
- 0x88, 0xB1, 0x28, 0x28, 0x2B, 0x7D, 0x80, 0x20,
- 0x20, 0x20, 0x20, 0x92, 0x95, 0x55, 0xCB, 0x70,
- 0x90, 0x55, 0x2C, 0x2C, 0x2C, 0x55, 0x70, 0x70,
- 0x55, 0x95, 0x55, 0x55, 0x90, 0x90, 0x90, 0x55,
- 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x95,
- 0xA1, 0x95, 0x55, 0xCB, 0x90, 0x70, 0xCB, 0x95,
- 0xA1, 0x95, 0x95, 0xCB, 0x90, 0xCB, 0x95, 0x2C,
- 0x95, 0x70, 0x70, 0x90, 0x55, 0x2C, 0xA1, 0xA1,
- 0x2C, 0x2C, 0x55, 0xCB, 0x55, 0x90, 0x20, 0x34,
- 0x90, 0x6D, 0x70, 0xD8, 0x43, 0x20, 0x20, 0x88,
- 0x3F, 0x55, 0xA1, 0x2A, 0xD6, 0x7D, 0x43, 0x20,
- 0x20, 0x20, 0x88, 0x7D, 0x55, 0xCB, 0x90, 0x70,
- 0xCB, 0x95, 0xA1, 0x95, 0x95, 0xCB, 0x70, 0xCB,
- 0x95, 0xA1, 0x95, 0x70, 0x70, 0xCB, 0x55, 0x2C,
- 0xA1, 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x55, 0x95,
- 0x2C, 0x55, 0x90, 0x70, 0x94, 0x90, 0x95, 0x2C,
- 0x2C, 0x95, 0xCB, 0x90, 0x55, 0x95, 0xA1, 0xA1,
- 0x95, 0x90, 0x90, 0x95, 0xA1, 0xD6, 0xD6, 0x6D,
- 0xA1, 0x95, 0x55, 0xCB, 0x55, 0xCB, 0x20, 0x99,
- 0xBF, 0xA3, 0xA3, 0x90, 0x20, 0x20, 0x20, 0x92,
- 0x83, 0x6B, 0x6B, 0x6B, 0xA3, 0x70, 0x88, 0x20,
- 0x20, 0x20, 0x20, 0x2B, 0x90, 0x70, 0x94, 0x90,
- 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x90, 0x55, 0x95,
- 0xA1, 0x2C, 0x55, 0x90, 0x90, 0x95, 0xA1, 0xD6,
- 0xD6, 0x6D, 0xA1, 0x95, 0x55, 0xCB, 0x55, 0x55,
- 0x2C, 0x55, 0x70, 0x70, 0x94, 0x90, 0x95, 0x2C,
- 0x2C, 0x55, 0xCB, 0xCB, 0x95, 0x2C, 0x2C, 0x2C,
- 0x55, 0x55, 0x95, 0xA1, 0x6D, 0xBF, 0x6D, 0xD6,
- 0x95, 0x55, 0x90, 0xCB, 0x55, 0x95, 0x88, 0x95,
- 0x2C, 0x3F, 0x6D, 0x6B, 0x34, 0x20, 0x20, 0x47,
- 0x65, 0xD6, 0xE1, 0x3F, 0x2A, 0x6B, 0x2B, 0x20,
- 0x20, 0x20, 0x20, 0x43, 0x70, 0x70, 0x94, 0x90,
- 0x95, 0x2C, 0x2C, 0x55, 0x55, 0x55, 0x95, 0x2C,
- 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0xA1, 0x6D, 0xBF,
- 0x6D, 0xD6, 0x2C, 0x55, 0x90, 0xCB, 0x95, 0x95,
- 0x95, 0x55, 0x70, 0x94, 0x70, 0x55, 0x2C, 0xA1,
- 0x2C, 0x55, 0xCB, 0x55, 0x2C, 0x95, 0x2C, 0x95,
- 0x95, 0x95, 0xA1, 0x6D, 0xBF, 0x2A, 0xD6, 0x95,
- 0x70, 0x94, 0x94, 0x70, 0x55, 0x55, 0x20, 0xBF,
- 0xC9, 0xB1, 0x99, 0x42, 0xB1, 0x61, 0x7D, 0x94,
- 0x65, 0xB1, 0x88, 0x99, 0xD5, 0xE5, 0x7F, 0x20,
- 0x20, 0x20, 0x20, 0x43, 0x70, 0x94, 0x70, 0x55,
- 0x2C, 0xA1, 0x2C, 0x55, 0x90, 0x55, 0x2C, 0x95,
- 0x2C, 0x95, 0x95, 0x2C, 0xA1, 0x6D, 0xBF, 0xBF,
- 0xD6, 0x55, 0x70, 0x94, 0x94, 0x70, 0xCB, 0x55,
- 0x55, 0xCB, 0x70, 0x94, 0x70, 0x95, 0xA1, 0xA1,
- 0x95, 0x55, 0x55, 0x95, 0x2C, 0x95, 0x95, 0x95,
- 0x95, 0xA1, 0x6D, 0x2A, 0x2A, 0xD6, 0x55, 0x94,
- 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x95, 0x20, 0x2A,
- 0xD8, 0x43, 0xC9, 0x83, 0x98, 0x79, 0x34, 0x9F,
- 0x6B, 0x43, 0x20, 0x88, 0x2B, 0x65, 0xA0, 0x20,
- 0x20, 0x20, 0x20, 0xE1, 0x70, 0x94, 0x70, 0x95,
- 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x95, 0x2C, 0x95,
- 0x95, 0x95, 0x95, 0xA1, 0x6D, 0xBF, 0x2A, 0xD6,
- 0x55, 0x94, 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x55,
- 0x94, 0x70, 0x94, 0x47, 0x70, 0x95, 0x2C, 0x2C,
- 0x95, 0xCB, 0x95, 0x2C, 0x2C, 0xA1, 0x2C, 0x2C,
- 0xA1, 0xD6, 0x6D, 0x6D, 0xA1, 0xCB, 0x47, 0x28,
- 0xE6, 0x47, 0x70, 0x55, 0x95, 0xA1, 0x20, 0x2C,
- 0x7F, 0x88, 0xF0, 0xC6, 0x25, 0x5E, 0xCF, 0x2F,
- 0xE7, 0x9A, 0x20, 0x88, 0x99, 0x65, 0x3F, 0x20,
- 0x20, 0x20, 0x20, 0x34, 0x94, 0x47, 0x70, 0x95,
- 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0x2C, 0x2C, 0xA1,
- 0x2C, 0x2C, 0xA1, 0xD6, 0x6D, 0x6D, 0xA1, 0xCB,
- 0x94, 0x28, 0xA0, 0x47, 0x70, 0x55, 0x95, 0x95,
- 0x47, 0x70, 0x90, 0x94, 0x70, 0x95, 0xA1, 0x2C,
- 0x55, 0x55, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C,
- 0xA1, 0x6D, 0x2A, 0xD6, 0x55, 0x47, 0x28, 0x28,
- 0x47, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0x20, 0x28,
- 0xEC, 0x86, 0xBE, 0x48, 0x3E, 0x3E, 0x3A, 0x25,
- 0x4E, 0xAE, 0x93, 0xD7, 0xEC, 0xD1, 0x34, 0x20,
- 0x20, 0x20, 0x20, 0x43, 0x55, 0x94, 0x70, 0x95,
- 0xA1, 0xA1, 0x55, 0xCB, 0x2C, 0xA1, 0xA1, 0xA1,
- 0xA1, 0x2C, 0xA1, 0x6D, 0x6D, 0xD6, 0x55, 0x47,
- 0x28, 0x28, 0x47, 0x70, 0x55, 0x95, 0x2C, 0x2C,
- 0x95, 0x95, 0x55, 0x90, 0xCB, 0x2C, 0xA1, 0xA1,
- 0x55, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0xA1, 0x2C,
- 0xD6, 0x6D, 0x6D, 0xA1, 0x70, 0x28, 0xD5, 0xE6,
- 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0x20, 0xE1,
- 0x26, 0x84, 0x76, 0x73, 0x9C, 0x22, 0x4E, 0x35,
- 0x8C, 0x7A, 0x4E, 0xDC, 0x8E, 0x7E, 0x3D, 0x88,
- 0x20, 0x20, 0x20, 0x88, 0x2C, 0x90, 0x90, 0x95,
- 0xA1, 0x2C, 0x55, 0x55, 0x2C, 0xD6, 0xD6, 0xD6,
- 0x2C, 0x2C, 0xD6, 0x2A, 0x6D, 0x2C, 0x70, 0x28,
- 0xD5, 0xE6, 0x70, 0x55, 0x95, 0xA1, 0x2C, 0xA1,
- 0xBF, 0xA1, 0x95, 0xCB, 0xCB, 0x2C, 0xA1, 0xA1,
- 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, 0x95,
- 0xD6, 0x6D, 0xD6, 0x95, 0x94, 0x28, 0xE6, 0x70,
- 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0xD6, 0x20, 0x57,
- 0xE4, 0xDF, 0x50, 0x3E, 0x22, 0x4E, 0x35, 0x8C,
- 0x8C, 0x52, 0x52, 0x7A, 0x4E, 0x58, 0xD7, 0x20,
- 0x20, 0x20, 0x20, 0x88, 0x2C, 0xCB, 0x55, 0x2C,
- 0xA1, 0xA1, 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0xA1,
- 0x2C, 0x95, 0xA1, 0x6D, 0x6D, 0x95, 0x47, 0xA0,
- 0xE6, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0xA1,
- 0xD2, 0x95, 0x55, 0x90, 0x55, 0x2C, 0xD6, 0xA1,
- 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0x2C, 0x95, 0x2C,
- 0xA1, 0x6D, 0xA1, 0x55, 0x94, 0x47, 0x94, 0xCB,
- 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, 0x59, 0xC8,
- 0xE3, 0x76, 0x2D, 0x3E, 0x22, 0x4E, 0x8C, 0x35,
- 0x52, 0x52, 0xEE, 0x3A, 0x4D, 0xED, 0x24, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x28, 0xCB, 0x55, 0x2C,
- 0xD6, 0xA1, 0x95, 0x95, 0xA1, 0xD6, 0xA1, 0x2C,
- 0x95, 0x2C, 0xD6, 0x6D, 0xA1, 0x55, 0x94, 0xE6,
- 0x70, 0xCB, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xA1,
- 0xD0, 0x94, 0x94, 0x90, 0x55, 0x2C, 0xA1, 0xA1,
- 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x2C,
- 0xA1, 0xD6, 0x2C, 0x70, 0x94, 0x94, 0x94, 0x94,
- 0x70, 0x55, 0xA1, 0xD6, 0xA1, 0xD6, 0x88, 0x77,
- 0x38, 0xC4, 0x3E, 0x69, 0x4E, 0x35, 0x8C, 0xEE,
- 0x35, 0x89, 0x30, 0x30, 0x4A, 0x48, 0x3C, 0x20,
- 0x20, 0x88, 0x20, 0x20, 0xD8, 0x2C, 0x55, 0x2C,
- 0xD6, 0xA1, 0x95, 0x95, 0x2C, 0xD6, 0xA1, 0x2C,
- 0x95, 0x2C, 0xA1, 0xD6, 0x2C, 0x90, 0x94, 0x47,
- 0x94, 0x94, 0x70, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
- 0x95, 0x28, 0x47, 0x90, 0x95, 0x2C, 0xA1, 0x2C,
- 0x95, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C,
- 0xA1, 0xA1, 0x55, 0x70, 0x94, 0x47, 0x94, 0x94,
- 0x70, 0x2C, 0xD6, 0xD6, 0x2C, 0xA1, 0x43, 0x98,
- 0x54, 0x48, 0x3E, 0x22, 0x35, 0xEE, 0xEE, 0x9C,
- 0x4D, 0x45, 0x75, 0x4A, 0xDF, 0x7B, 0x3D, 0x20,
- 0xD8, 0x28, 0x2B, 0x88, 0x20, 0x95, 0x95, 0x2C,
- 0xA1, 0x2C, 0x55, 0x55, 0x2C, 0xA1, 0xD6, 0xA1,
- 0x2C, 0x95, 0xA1, 0x2C, 0x55, 0x70, 0x94, 0x94,
- 0x94, 0x94, 0x70, 0x95, 0xD6, 0xD6, 0x2C, 0x95,
- 0x70, 0x28, 0x47, 0x55, 0x95, 0x2C, 0x2C, 0x2C,
- 0x95, 0x95, 0x95, 0xA1, 0xA1, 0xA1, 0x95, 0x55,
- 0x95, 0x95, 0x55, 0x70, 0x70, 0x70, 0x94, 0x70,
- 0x55, 0xD6, 0x6D, 0xD6, 0x95, 0x2C, 0x20, 0x43,
- 0xBB, 0xC8, 0x36, 0x30, 0x30, 0x38, 0x45, 0x6E,
- 0xE3, 0x75, 0x78, 0x37, 0xBD, 0xD9, 0x3F, 0x20,
- 0x88, 0xD5, 0x70, 0xB1, 0x88, 0xA0, 0x95, 0x2C,
- 0x2C, 0xA1, 0x95, 0x55, 0x95, 0xA1, 0xA1, 0xA1,
- 0x2C, 0x55, 0x95, 0x2C, 0x55, 0x70, 0x70, 0x70,
- 0x94, 0x70, 0x55, 0xD6, 0x6D, 0x6D, 0x95, 0x55,
- 0x94, 0x47, 0x70, 0x95, 0x2C, 0x2C, 0x2C, 0xA1,
- 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x55,
- 0x55, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0x95,
- 0xA1, 0x6D, 0x4B, 0xD6, 0x55, 0xD6, 0x20, 0xD8,
- 0xD6, 0x67, 0xDA, 0x4D, 0xED, 0x62, 0x78, 0x78,
- 0x23, 0x84, 0x67, 0xF5, 0x4B, 0xBF, 0x90, 0x88,
- 0x88, 0x2B, 0x47, 0x99, 0x20, 0x43, 0xD6, 0x2C,
- 0x2C, 0xA1, 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1,
- 0x95, 0x95, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x95, 0xD6, 0x6D, 0xBF, 0xD6, 0x55, 0xCB,
- 0x55, 0x55, 0x55, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
- 0x2C, 0x2C, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x95,
- 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
- 0x6D, 0x2A, 0x2A, 0xA1, 0x55, 0x55, 0x20, 0xD8,
- 0x6D, 0xAB, 0x96, 0x7E, 0x64, 0x53, 0x36, 0x36,
- 0xC6, 0x63, 0x6D, 0xD0, 0x6B, 0xE5, 0xA3, 0x7D,
- 0x20, 0x88, 0x80, 0x88, 0x20, 0x20, 0xC9, 0xA1,
- 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0xA1, 0xA1, 0xA1,
- 0x95, 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
- 0x2C, 0xA1, 0x6D, 0xBF, 0x6D, 0xA1, 0x55, 0x55,
- 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0xA1,
- 0xA1, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x95,
- 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xD6,
- 0x6D, 0x6D, 0xA1, 0x55, 0x2C, 0xD8, 0x20, 0xB1,
- 0xA3, 0x4B, 0x6D, 0xD9, 0xA7, 0x6C, 0xAF, 0xB2,
- 0x6D, 0x2A, 0x83, 0x42, 0xE5, 0xE5, 0x65, 0x2C,
- 0x20, 0x20, 0x88, 0x20, 0x20, 0x20, 0x88, 0x95,
- 0x2C, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
- 0x2C, 0x95, 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1,
- 0xD6, 0xD6, 0x6D, 0x6D, 0xA1, 0x55, 0xCB, 0x55,
- 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x95, 0x2C,
- 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95,
- 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xA1,
- 0xA1, 0x2C, 0x55, 0x55, 0x28, 0x88, 0x43, 0x2A,
- 0xE5, 0xA3, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D,
- 0xBF, 0xA3, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0x65,
- 0xB1, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD8,
- 0xD6, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x2C,
- 0x95, 0x95, 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1,
- 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x90, 0x90, 0x55,
- 0x90, 0xCB, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95,
- 0x2C, 0x2C, 0x95, 0x55, 0x95, 0x95, 0x95, 0x55,
- 0x55, 0xCB, 0x55, 0x2C, 0x95, 0x95, 0x95, 0x95,
- 0x55, 0x90, 0x90, 0x90, 0xE1, 0x43, 0x28, 0xE5,
- 0xE5, 0x65, 0xD0, 0x6D, 0x6D, 0x6D, 0x2A, 0xD2,
- 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xD6, 0x20, 0x20, 0x20, 0x20, 0x20, 0x88, 0x88,
- 0xD5, 0x2C, 0x2C, 0x2C, 0x95, 0x55, 0x95, 0x95,
- 0x95, 0x55, 0x55, 0xCB, 0x55, 0x95, 0x2C, 0x95,
- 0x95, 0x95, 0x55, 0x90, 0x70, 0x70, 0x70, 0x90,
- 0x70, 0x70, 0xCB, 0x55, 0x55, 0x95, 0x95, 0x95,
- 0x2C, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0xCB,
- 0x70, 0x70, 0x70, 0xCB, 0x90, 0x90, 0x70, 0x94,
- 0x94, 0x94, 0x2C, 0x80, 0x20, 0xE1, 0xA3, 0xE5,
- 0xE5, 0xE5, 0x42, 0xEC, 0xD0, 0x83, 0xA3, 0x65,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0x65, 0x7D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x88, 0x2C, 0x95, 0x95, 0x95, 0x55, 0x55, 0x55,
- 0x55, 0xCB, 0x70, 0x70, 0x90, 0x90, 0x90, 0x90,
- 0x70, 0x94, 0x94, 0x94, 0x70, 0x70, 0x70, 0x70,
- 0x70, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95, 0x95,
- 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x90, 0x70, 0x90, 0x55, 0x55, 0xCB, 0x70, 0x94,
- 0x94, 0x95, 0xD8, 0x20, 0x88, 0x70, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0x47, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0xE1, 0x6D, 0x2C, 0x95, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x90, 0x70, 0x70, 0x55, 0x55, 0xCB,
- 0x70, 0x94, 0x94, 0x94, 0x70, 0x90, 0x70, 0x94,
- 0x55, 0x2C, 0x2C, 0x2C, 0x95, 0x2C, 0x95, 0x95,
- 0x2C, 0x2C, 0x2C, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0xCB, 0xCB, 0x95, 0x2C, 0x2C, 0x95, 0x55, 0x90,
- 0x55, 0x99, 0x20, 0x20, 0xE1, 0xA3, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xD6, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x2B, 0x6D, 0x95, 0x95, 0x55, 0x55,
- 0x55, 0x55, 0xCB, 0x55, 0x95, 0x2C, 0x2C, 0x95,
- 0x55, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x90, 0x70,
- 0x2C, 0xD6, 0xD6, 0x2C, 0x2C, 0x95, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95,
- 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0x55, 0x95,
- 0xE6, 0x88, 0x20, 0x20, 0x3F, 0xA3, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0x42, 0xA3, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x88, 0x2B, 0xD6, 0x95, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x95,
- 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, 0x55, 0x55,
- 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x2C,
- 0x2C, 0x2C, 0x95, 0x2C, 0x95, 0x95, 0x55, 0x95,
- 0x95, 0x2C, 0x2C, 0x2C, 0x95, 0xCB, 0xCB, 0x94,
- 0x20, 0x20, 0x20, 0x20, 0xE6, 0x83, 0x65, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0x6B, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0x6B, 0xA3, 0xD2,
- 0xD2, 0x6B, 0xC9, 0x20, 0x20, 0x88, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x88, 0x8A, 0xA1, 0x95, 0x95,
- 0x95, 0x55, 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0xCB,
- 0xCB, 0x55, 0x95, 0x95, 0x95, 0x55, 0x55, 0x95,
- 0x6D, 0x6D, 0x6D, 0xD6, 0xA1, 0x2C, 0x2C, 0x95,
- 0x2C, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x55, 0x70, 0x70, 0x2C, 0x80,
- 0x88, 0x20, 0x20, 0x80, 0x94, 0xD6, 0x32, 0x6B,
- 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xA3, 0xD2, 0xD0, 0xBF, 0x2A,
- 0x2A, 0xD0, 0x6D, 0x34, 0x20, 0xE1, 0x88, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x88, 0xA1, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, 0x70, 0x70,
- 0x70, 0x90, 0xCB, 0xCB, 0xCB, 0x95, 0x95, 0x2C,
- 0xD0, 0x6D, 0xD6, 0xD6, 0xA1, 0xA1, 0xA1, 0x2C,
- 0x2C, 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x55, 0x95,
- 0x95, 0x2C, 0x95, 0x55, 0xCB, 0xCB, 0x95, 0x88,
- 0x20, 0x20, 0x88, 0xD8, 0x2C, 0xD1, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x65, 0x65, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0xEC,
- 0xBF, 0x2A, 0xEC, 0x95, 0x20, 0x34, 0x2B, 0xE1,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, 0x95, 0x55,
- 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, 0xCB, 0xCB,
- 0x55, 0x55, 0xCB, 0xCB, 0xCB, 0x55, 0x95, 0x95,
- 0x32, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C,
- 0xA1, 0x95, 0x95, 0x95, 0x55, 0xCB, 0xCB, 0x55,
- 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, 0x99, 0x20,
- 0xE1, 0xE1, 0x43, 0x47, 0x6B, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0x42, 0xEC, 0xBF, 0xA3, 0x8A, 0x20, 0x88, 0xD8,
- 0x2B, 0x20, 0x20, 0x20, 0x88, 0x88, 0x2C, 0xCB,
- 0xCB, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x55, 0x95,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x95,
- 0x6D, 0x55, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x95,
- 0x2C, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0x95,
- 0x95, 0x95, 0x95, 0x95, 0x95, 0xA1, 0x34, 0x20,
- 0xC9, 0x20, 0xE1, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xA3, 0x83, 0x6D, 0x20, 0x88, 0x88,
- 0x2B, 0x34, 0x20, 0x20, 0x20, 0x88, 0xD5, 0x55,
- 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x95, 0x55, 0x55, 0x95, 0x95,
- 0x2C, 0x55, 0xCB, 0x55, 0xCB, 0x55, 0x55, 0x95,
- 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
- 0x2C, 0x95, 0x95, 0x55, 0x95, 0x2C, 0x20, 0xD8,
- 0xE1, 0x20, 0x70, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x65, 0xA3, 0x92, 0x43, 0x7D,
- 0xD8, 0xC9, 0x88, 0x20, 0x20, 0x20, 0x43, 0xD6,
- 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x55, 0x95, 0x2C,
- 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95, 0x2C,
- 0xA1, 0x55, 0x55, 0x55, 0x55, 0x95, 0x95, 0x55,
- 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0xA1, 0x2C,
- 0xA1, 0x2C, 0x2C, 0x95, 0x2C, 0x99, 0x88, 0xB1,
- 0x20, 0xD8, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x34, 0x8A,
- 0xC9, 0x34, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x90,
- 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x95, 0x95, 0x2C,
- 0x2C, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
- 0xD6, 0x2C, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C,
- 0x55, 0xCB, 0x55, 0x2C, 0x2C, 0xA1, 0x2C, 0xA1,
- 0xA1, 0xA1, 0x2C, 0x2C, 0x6D, 0x43, 0xD8, 0x80,
- 0x88, 0xCB, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x32, 0x80, 0xE1,
- 0x80, 0x20, 0xB1, 0x20, 0x20, 0x20, 0x20, 0xC9,
- 0xD6, 0xA1, 0xA1, 0xA1, 0x2C, 0xA1, 0x2C, 0x2C,
- 0x2C, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95, 0x55,
- 0xD6, 0x95, 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x2C,
- 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95, 0x2C,
- 0x2C, 0x2C, 0x2C, 0x95, 0xCB, 0x20, 0xC9, 0x20,
- 0xE1, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xD8, 0x20,
- 0x20, 0x20, 0x2B, 0x43, 0x20, 0x20, 0x20, 0x88,
- 0xD6, 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x55,
- 0x95, 0x55, 0x55, 0xCB, 0x55, 0xCB, 0xCB, 0x55,
- 0x2C, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0x95,
- 0x55, 0x95, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95,
- 0x55, 0xCB, 0x70, 0xCB, 0xC9, 0x80, 0x2B, 0x20,
- 0xA0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x92, 0x20,
- 0x20, 0x20, 0xE1, 0xD8, 0x20, 0x20, 0x20, 0x20,
- 0x95, 0x95, 0x55, 0xCB, 0x90, 0x90, 0x70, 0x90,
- 0x90, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x55, 0x95,
- 0x95, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
- 0x95, 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x55,
- 0x90, 0x47, 0xA0, 0x55, 0x20, 0x2B, 0x43, 0x88,
- 0x6D, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x28, 0x20,
- 0x20, 0x20, 0xE1, 0xE1, 0x20, 0x20, 0x20, 0x20,
- 0x28, 0x55, 0x90, 0x47, 0xA0, 0x47, 0x94, 0x70,
- 0x55, 0x95, 0x95, 0x55, 0xCB, 0x55, 0x55, 0x2C,
- 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
- 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x55,
- 0x94, 0xE6, 0x70, 0x2B, 0x88, 0x2B, 0x88, 0xE1,
- 0x65, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x47, 0x20,
- 0x20, 0x20, 0xE1, 0x34, 0x20, 0x20, 0x20, 0x20,
- 0xB1, 0x95, 0x94, 0xE6, 0xA0, 0x47, 0x70, 0x55,
- 0x2C, 0xA1, 0x2C, 0x55, 0x90, 0xCB, 0x2C, 0xD6,
- 0x6D, 0xA1, 0x2C, 0x95, 0x95, 0xA1, 0x2C, 0xA1,
- 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x55,
- 0x70, 0xE6, 0x70, 0x20, 0x20, 0x7D, 0x20, 0x8A,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x65, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x94, 0x20,
- 0x20, 0x20, 0xD8, 0x88, 0x20, 0x20, 0x20, 0x20,
- 0xD8, 0x2C, 0x94, 0x47, 0x47, 0x90, 0x95, 0x95,
- 0xA1, 0x6D, 0xA1, 0x90, 0x94, 0x55, 0x2C, 0xD6,
- 0xD0, 0xA1, 0x95, 0x95, 0x2C, 0x2C, 0xA1, 0x2C,
- 0x95, 0x95, 0x55, 0x55, 0x55, 0x95, 0x2C, 0x2C,
- 0xCB, 0x95, 0xD8, 0x20, 0x20, 0xB1, 0x88, 0x28,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE2, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20,
- 0x20, 0x20, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x88, 0xD6, 0x55, 0x47, 0x94, 0x55, 0x2C, 0xA1,
- 0xA1, 0xD6, 0x95, 0x94, 0x94, 0x55, 0xD6, 0x6D,
- 0xBF, 0x95, 0x90, 0xCB, 0x2C, 0x2C, 0x2C, 0x2C,
- 0x55, 0x95, 0xCB, 0x90, 0x90, 0x95, 0x2C, 0x95,
- 0x90, 0x70, 0x20, 0x20, 0x34, 0x8A, 0x20, 0x94,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20,
- 0x20, 0x88, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x88, 0xD6, 0xCB, 0x47, 0x94, 0x55, 0xA1, 0xD6,
- 0xD6, 0x2C, 0xCB, 0x47, 0x70, 0xA1, 0x6D, 0x2A,
- 0x95, 0x47, 0x47, 0x70, 0x95, 0xA1, 0x2C, 0x95,
- 0x55, 0x55, 0x90, 0x90, 0x55, 0x55, 0x55, 0x90,
- 0x47, 0xD5, 0x20, 0x20, 0x80, 0xD5, 0x43, 0xCB,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20,
- 0x20, 0x80, 0x34, 0x20, 0x20, 0x20, 0x88, 0x20,
- 0x20, 0x2C, 0x47, 0xE6, 0x70, 0x2C, 0xD6, 0xD6,
- 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0xA1, 0x6D, 0xD6,
- 0x90, 0x47, 0x47, 0x90, 0x2C, 0xA1, 0x2C, 0x95,
- 0x55, 0x55, 0x90, 0x90, 0x55, 0x55, 0x55, 0x70,
- 0x94, 0x8A, 0x20, 0x88, 0x88, 0xE1, 0xD8, 0x95,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE2, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x47, 0x20,
- 0x43, 0x7D, 0x43, 0x80, 0x88, 0x20, 0x20, 0x20,
- 0x88, 0xCB, 0x94, 0x70, 0x55, 0xA1, 0xD6, 0xD6,
- 0xA1, 0x2C, 0x2C, 0x95, 0xA1, 0xA1, 0xD6, 0xA1,
- 0x94, 0xE6, 0x47, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
- 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0xCB,
- 0x55, 0xA0, 0x43, 0x86, 0x86, 0x43, 0xD8, 0xCB,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x3F, 0x80,
- 0xD8, 0x80, 0x88, 0x34, 0xD8, 0x2B, 0xD8, 0x20,
- 0x99, 0x90, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6,
- 0xA1, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
- 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C,
- 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x95, 0x44, 0xBC, 0x3E, 0x5D, 0xD3, 0x79, 0x92,
- 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x65, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0x9A, 0x34,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x99, 0xE1,
- 0x70, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xD6, 0xA1,
- 0x2C, 0x95, 0x55, 0x55, 0x95, 0x95, 0x95, 0x95,
- 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0x95,
- 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55, 0x2C, 0x2C,
- 0x32, 0x9D, 0xEB, 0x5D, 0x69, 0x49, 0x84, 0xF0,
- 0xB1, 0xEC, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xC1, 0x4E, 0x21, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0xC9, 0xD8,
- 0xBB, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C,
- 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C,
- 0x55, 0xCB, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x55,
- 0x90, 0x70, 0x90, 0x55, 0x95, 0x95, 0x6D, 0xD0,
- 0xC2, 0x48, 0x6A, 0x49, 0x69, 0x82, 0x5D, 0x2F,
- 0x59, 0x7D, 0xBF, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xEA, 0xC7, 0x7E, 0x66,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x43, 0x5A,
- 0x46, 0x27, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x95,
- 0x95, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
- 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1, 0x95, 0x55,
- 0x94, 0x94, 0x2C, 0x2A, 0x72, 0x3B, 0x56, 0xDD,
- 0xDF, 0x29, 0x5D, 0x49, 0x89, 0x5D, 0x3E, 0x69,
- 0x93, 0x66, 0x34, 0xA1, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x65, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xEA, 0x3E, 0x5A, 0x66,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x5B, 0x73,
- 0x89, 0x4C, 0xBF, 0x2C, 0x95, 0x2C, 0x2C, 0x95,
- 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
- 0x2C, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0x2C, 0xCB,
- 0x70, 0x55, 0xE7, 0x60, 0x4A, 0x48, 0xCD, 0x4A,
- 0x29, 0x73, 0x5D, 0x82, 0x49, 0x49, 0x49, 0x49,
- 0x3A, 0x57, 0x88, 0x88, 0x70, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0x42, 0x73, 0x50, 0xBE, 0x79,
- 0x20, 0x20, 0x20, 0x20, 0x66, 0xCC, 0x37, 0x9C,
- 0x3E, 0xCE, 0xBF, 0x95, 0x95, 0x95, 0x2C, 0x95,
- 0x95, 0x55, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0x55,
- 0xA1, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x55, 0x94,
- 0x94, 0xE8, 0x60, 0xC4, 0x3E, 0x2D, 0x2D, 0x2D,
- 0x33, 0x5D, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x89, 0xAA, 0x59, 0x20, 0x20, 0x28, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xEC, 0x4A, 0x2D, 0x50, 0x78, 0x2E,
- 0x57, 0x51, 0xF0, 0x57, 0x31, 0x4D, 0x50, 0x2D,
- 0x5D, 0xF2, 0xA1, 0x2C, 0x95, 0x95, 0x55, 0x55,
- 0x90, 0x90, 0x70, 0x90, 0xCB, 0x55, 0x55, 0x55,
- 0x6D, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0x55, 0x94,
- 0x70, 0xB9, 0x75, 0x50, 0x3E, 0x49, 0x49, 0x49,
- 0x5D, 0x82, 0x49, 0x49, 0x82, 0x49, 0x49, 0x49,
- 0x89, 0x69, 0x4F, 0x20, 0x20, 0x20, 0x8A, 0x42,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0x83, 0x4A, 0x3A, 0x50, 0x62, 0x23,
- 0x81, 0xB8, 0xB8, 0xE9, 0x5F, 0x29, 0x33, 0x5D,
- 0x5D, 0x73, 0xE8, 0xCB, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
- 0xD6, 0xA1, 0xA1, 0xA1, 0xA1, 0x55, 0x70, 0x70,
- 0xCB, 0x68, 0x75, 0x50, 0x82, 0x49, 0x49, 0x49,
- 0x5D, 0x49, 0x49, 0x5D, 0x49, 0x49, 0x5D, 0x82,
- 0x69, 0x5D, 0x25, 0xF0, 0x20, 0x20, 0x20, 0xE1,
- 0x2A, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0x4B, 0xF4, 0xDF, 0x50, 0x73, 0x76, 0x48,
- 0x75, 0xDF, 0x75, 0x62, 0xC4, 0x33, 0x82, 0x49,
- 0x5D, 0x5D, 0xA8, 0xF5, 0x55, 0x55, 0x55, 0x55,
- 0x2C, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
- 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0xCB, 0x70, 0x70,
- 0x95, 0x83, 0x5F, 0xEA, 0x2D, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x5D, 0x49, 0x22, 0x5A, 0x79, 0x20, 0x20, 0x20,
- 0x80, 0xD2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0x65, 0xD0, 0x63, 0x5F, 0x29, 0x2D, 0x2D, 0xEA,
- 0x29, 0x29, 0x76, 0x50, 0x2D, 0x82, 0x49, 0x49,
- 0x3E, 0x49, 0x5C, 0xB0, 0xBA, 0x95, 0x55, 0x55,
- 0x2C, 0xA1, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C,
- 0xA1, 0x95, 0x95, 0x55, 0xCB, 0x70, 0x70, 0x55,
- 0x2C, 0x83, 0x60, 0x76, 0x5D, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x5D, 0x89, 0xDC, 0x8B, 0x20, 0x20, 0x20,
- 0x20, 0x95, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE2, 0x32, 0x85, 0xE3, 0x29, 0x2D, 0x33, 0x2D,
- 0x2D, 0x2D, 0x6A, 0x2D, 0x33, 0x5D, 0x49, 0x82,
- 0x49, 0x49, 0x82, 0x73, 0x5C, 0x9E, 0x2C, 0x55,
- 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x95,
- 0x2C, 0x95, 0x55, 0xCB, 0x90, 0x90, 0xCB, 0x95,
- 0x2C, 0x6D, 0x41, 0x6F, 0x3E, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x82, 0x3E, 0x4E, 0x38, 0xCA, 0x20, 0x20,
- 0x20, 0x55, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x65,
- 0x42, 0xA0, 0xD4, 0xE3, 0x29, 0x2D, 0x82, 0x5D,
- 0x5D, 0x82, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x3E, 0x49, 0x49, 0x49, 0x5C, 0x56, 0xD6,
- 0xA1, 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x55, 0x95,
- 0xA1, 0x55, 0x90, 0x70, 0x94, 0x70, 0x95, 0x2C,
- 0x2C, 0xD6, 0xDD, 0x6F, 0x33, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x5D, 0x5D, 0x82, 0x69, 0x22, 0x62, 0x80, 0x34,
- 0x94, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0xE5, 0x65, 0x6B,
- 0xD5, 0x88, 0x5B, 0xE3, 0x29, 0x5D, 0x5D, 0x5D,
- 0x5D, 0x5D, 0x5D, 0x5D, 0x49, 0x49, 0x49, 0x82,
- 0x49, 0x49, 0x89, 0x49, 0x82, 0x49, 0x71, 0xBA,
- 0x6D, 0x6D, 0xA1, 0x95, 0x55, 0xCB, 0x55, 0x55,
- 0x2C, 0x55, 0x70, 0x70, 0x70, 0x90, 0x95, 0xA1,
- 0x2C, 0xA1, 0x41, 0x76, 0x5D, 0x5D, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x5D, 0x82, 0x5D, 0x89, 0x5E, 0x96, 0x65,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0x65, 0xEC, 0xB1,
- 0x20, 0x20, 0xCA, 0x23, 0x29, 0x33, 0x49, 0x5D,
- 0x49, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49, 0x82,
- 0x49, 0x82, 0x5D, 0x5D, 0x5D, 0x2D, 0x5C, 0x8F,
- 0x6D, 0xD6, 0x2C, 0x55, 0x90, 0xCB, 0x95, 0x95,
- 0x95, 0x55, 0x70, 0x94, 0x70, 0x55, 0x2C, 0xA1,
- 0x95, 0xE8, 0x5F, 0x76, 0x33, 0x5D, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x3E, 0x9C, 0x2F, 0x68,
- 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
- 0x65, 0xE5, 0x65, 0xE5, 0x6B, 0x90, 0x80, 0x20,
- 0x20, 0x20, 0x4F, 0x81, 0x50, 0x3E, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x69, 0x69, 0x49, 0x5D, 0x2D, 0xC4, 0x46, 0xA3,
- 0xD6, 0x55, 0x70, 0x94, 0x94, 0x70, 0xCB, 0x55,
- 0x55, 0xCB, 0x70, 0x47, 0x70, 0x95, 0xA1, 0xA1,
- 0x95, 0xBD, 0x75, 0x2D, 0x33, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x5D, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x5D, 0x2D, 0xB5, 0xDB,
- 0xD6, 0x65, 0xE5, 0x65, 0xE5, 0xE5, 0x65, 0xE5,
- 0x65, 0x65, 0x6B, 0x95, 0x2B, 0x88, 0x20, 0x20,
- 0x20, 0x20, 0x8B, 0x81, 0x29, 0x33, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x3E, 0x3E, 0x5E, 0x41, 0x97, 0x27, 0xD6,
- 0x55, 0x94, 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x55,
- 0x94, 0x70, 0x94, 0x94, 0x70, 0x55, 0xA1, 0x2C,
- 0x6D, 0xC5, 0x39, 0x6A, 0x5D, 0x5D, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x3E, 0xEA, 0x30, 0x77,
- 0xE1, 0xC9, 0x94, 0x2C, 0xD6, 0xD6, 0xA1, 0x55,
- 0x47, 0x9F, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x80, 0x91, 0x81, 0x6A, 0x2D, 0x49, 0x49,
- 0x49, 0x5D, 0x5D, 0x49, 0x49, 0x5D, 0x5D, 0x82,
- 0xEB, 0x4A, 0x41, 0xC2, 0x8F, 0xF5, 0xA1, 0x55,
- 0x94, 0x28, 0xA0, 0x47, 0x70, 0x55, 0x95, 0x95,
- 0x47, 0x70, 0x70, 0x94, 0x90, 0x95, 0xA1, 0x2C,
- 0xE8, 0xA6, 0x39, 0x76, 0x50, 0x50, 0x2D, 0x2D,
- 0x3E, 0x3E, 0x5D, 0x3E, 0x5D, 0x5D, 0x49, 0x82,
- 0x49, 0x49, 0x49, 0x82, 0x82, 0x50, 0x75, 0xE0,
- 0x57, 0x20, 0x88, 0x88, 0x20, 0x20, 0x88, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x79, 0x91, 0x81, 0x76, 0x33, 0x49, 0x49,
- 0x5D, 0x82, 0x49, 0x49, 0x3E, 0x6A, 0xEA, 0x29,
- 0xDF, 0x97, 0xBF, 0x6D, 0x6D, 0xD6, 0x55, 0x47,
- 0x28, 0x28, 0x47, 0x70, 0x55, 0x95, 0x2C, 0x2C,
- 0x95, 0x95, 0x55, 0x90, 0x90, 0x95, 0xA1, 0xA1,
- 0xD6, 0x26, 0x45, 0x81, 0x5F, 0x30, 0x48, 0x6F,
- 0x6F, 0x29, 0x29, 0x6A, 0x2D, 0x2D, 0x5D, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x2D, 0x76, 0x6E, 0x77,
- 0x5B, 0x66, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x79, 0xA9, 0xB8, 0x39, 0x50, 0x5D, 0x5D,
- 0x5D, 0x5D, 0x3E, 0x2D, 0x29, 0x76, 0xCD, 0x37,
- 0xB9, 0xA1, 0xA1, 0x6D, 0x6D, 0x2C, 0x94, 0x28,
- 0xD5, 0xE6, 0x70, 0x55, 0x95, 0xA1, 0x2C, 0xA1,
- 0xBF, 0xA1, 0x95, 0xCB, 0x55, 0x95, 0xA1, 0x2C,
- 0x95, 0x83, 0xDE, 0x87, 0xB6, 0xBE, 0x40, 0x6E,
- 0x81, 0x81, 0x78, 0x78, 0x39, 0x6F, 0xEA, 0x2D,
- 0x2D, 0x33, 0x33, 0x33, 0x76, 0x30, 0x64, 0x54,
- 0x5B, 0x66, 0x20, 0x20, 0x66, 0x20, 0x88, 0x20,
- 0x20, 0x20, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x88, 0x34, 0x8B, 0xF1, 0x23, 0x6F, 0x50, 0x2D,
- 0x2D, 0x6A, 0x29, 0x6F, 0x78, 0x84, 0x9B, 0xD2,
- 0x2C, 0x2C, 0xD6, 0x6D, 0x6D, 0x2C, 0x47, 0xA0,
- 0xE6, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0xA1,
- 0xD2, 0x95, 0x55, 0xCB, 0x55, 0x2C, 0xD6, 0xA1,
- 0x95, 0x95, 0xA1, 0xD6, 0x6D, 0x6D, 0xBA, 0xF3,
- 0x8D, 0x36, 0x74, 0x36, 0xF1, 0xB8, 0x23, 0x78,
- 0x62, 0x4A, 0x29, 0x62, 0x23, 0xF1, 0x54, 0x31,
- 0x57, 0x2B, 0x90, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
- 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C, 0xCB,
- 0xE6, 0x7D, 0xCA, 0xB7, 0xB8, 0x75, 0x6F, 0x6F,
- 0x76, 0x6F, 0x78, 0x81, 0x53, 0xBD, 0x6D, 0x2C,
- 0x95, 0x95, 0xA1, 0x6D, 0xA1, 0x55, 0x94, 0xE6,
- 0x70, 0xCB, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xA1,
- 0xD0, 0x94, 0x94, 0x90, 0x95, 0x2C, 0xD6, 0xA1,
- 0x95, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x2C,
- 0xD6, 0x68, 0xAB, 0x6C, 0xA4, 0x77, 0x77, 0xAD,
- 0x40, 0x53, 0x6E, 0x40, 0xB7, 0x54, 0x31, 0xD7,
- 0xAC, 0xD6, 0x55, 0x55, 0x95, 0x95, 0x95, 0x55,
- 0x95, 0x2C, 0x2C, 0xA1, 0x95, 0x95, 0x2C, 0xA1,
- 0x6D, 0xD2, 0x7C, 0x54, 0xAD, 0x40, 0x6E, 0x81,
- 0x81, 0x6E, 0x36, 0xDA, 0xE8, 0xD6, 0xD6, 0x2C,
- 0x2C, 0x2C, 0xA1, 0xD6, 0x95, 0x90, 0x94, 0x47,
- 0x94, 0x94, 0x70, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
- 0x95, 0x28, 0x47, 0x90, 0x95, 0x2C, 0xA1, 0x2C,
- 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C,
- 0x2C, 0xA1, 0x55, 0x70, 0x95, 0x2C, 0xB2, 0xB4,
- 0xC3, 0xC3, 0x54, 0x54, 0xA9, 0x31, 0xCA, 0x2A,
- 0x95, 0x90, 0x55, 0x95, 0x2C, 0xA1, 0x2C, 0x95,
- 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xD6,
- 0x6D, 0x2A, 0xB2, 0x4F, 0x31, 0x2E, 0xE0, 0xAD,
- 0xB7, 0xC8, 0xB4, 0xF5, 0x2C, 0xA1, 0xA1, 0xA1,
- 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0x70, 0x94, 0x94,
- 0x94, 0x94, 0x70, 0x95, 0xD6, 0xD6, 0x2C, 0x95,
- 0x94, 0x28, 0x47, 0xCB, 0x95, 0x2C, 0xA1, 0xA1,
- 0x95, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x95,
- 0x95, 0x2C, 0x55, 0x70, 0x70, 0x70, 0x94, 0x2C,
- 0x63, 0xBB, 0xA5, 0xD7, 0xCA, 0xB3, 0x6D, 0x2C,
- 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x95, 0x95,
- 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
- 0xD6, 0x2C, 0x70, 0x95, 0xAC, 0xC0, 0xDB, 0xEF,
- 0xEF, 0xA2, 0xE8, 0x95, 0x95, 0xA1, 0xD6, 0xA1,
- 0x95, 0x55, 0x2C, 0x95, 0x55, 0x70, 0x70, 0x70,
- 0x94, 0x70, 0x55, 0xD6, 0x6D, 0x6D, 0x95, 0x55,
- 0x70, 0x47, 0x70, 0x95, 0x2C, 0x2C, 0x2C, 0xA1,
- 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x55,
- 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x95,
- 0xA1, 0xF5, 0xBF, 0xBF, 0xA1, 0x95, 0x95, 0x95,
- 0x95, 0x55, 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x95,
- 0x95, 0x95, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0xA1,
- 0x2C, 0x55, 0x70, 0x94, 0x90, 0x2C, 0x6D, 0x6D,
- 0x6D, 0xA1, 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1,
- 0x2C, 0x55, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x95, 0xD6, 0x6D, 0xBF, 0xD6, 0x55, 0xCB,
- 0x55, 0x55, 0x55, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
- 0xA1, 0x95, 0x2C, 0xA1, 0xA1, 0xA1, 0x2C, 0x95,
- 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
- 0x6D, 0xBF, 0x6D, 0x2C, 0x55, 0x55, 0x95, 0x95,
- 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x95,
- 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C,
- 0xA1, 0x95, 0xCB, 0xCB, 0x95, 0x95, 0x2C, 0x2C,
- 0x2C, 0xA1, 0x2C, 0x2C, 0x2C, 0xA1, 0xA1, 0x2C,
- 0x2C, 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
- 0x2C, 0xA1, 0x6D, 0xBF, 0x6D, 0xA1, 0x55, 0x55,
- 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
- 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x95,
- 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xD6,
- 0x6D, 0x6D, 0xA1, 0x95, 0xCB, 0x55, 0x95, 0x55,
- 0x90, 0x70, 0xCB, 0xCB, 0x90, 0xCB, 0x95, 0x95,
- 0x2C, 0x2C, 0xA1, 0xD6, 0xA1, 0xA1, 0xA1, 0xA1,
- 0xA1, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
- 0x2C, 0xA1, 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C,
- 0x2C, 0x95, 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1,
- 0xD6, 0xD6, 0x6D, 0x6D, 0xA1, 0x55, 0xCB, 0x55
-};
-
-#endif
-
-#ifdef INCLUDE_LINUX_LOGOBW
-
-unsigned char linux_logo_bw[] __initdata = {
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
- 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFE, 0x3F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xC7, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC3,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF,
- 0xFB, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFD, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF,
- 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xCF, 0xC3, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x87, 0x81, 0xF9,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7,
- 0x99, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xF3, 0xBC, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0,
- 0x19, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xC0, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80,
- 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xC0, 0x21, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0xC0, 0x1F,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4,
- 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C,
- 0xC0, 0x7C, 0x04, 0x81, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xE3, 0x80, 0x00, 0x7C, 0x40, 0x11, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0xD2, 0x29,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F,
- 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00,
- 0x00, 0x3F, 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x19, 0xFF, 0xFF,
- 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1E, 0x80, 0x19,
- 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1E,
- 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x00,
- 0x00, 0x0F, 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC,
- 0xF8, 0x00, 0x00, 0x0E, 0x80, 0x11, 0xFF, 0xFF,
- 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x06, 0x00, 0x11,
- 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x06,
- 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00,
- 0x00, 0x02, 0x00, 0x09, 0xFF, 0xFF, 0xFF, 0xF1,
- 0xF0, 0x00, 0x00, 0x02, 0x80, 0x10, 0xFF, 0xFF,
- 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x97, 0x10,
- 0xFF, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x00, 0x00,
- 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00,
- 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC7,
- 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8,
- 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0x01,
- 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00,
- 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F,
- 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
- 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0x18,
- 0xFF, 0xFF, 0xFF, 0x9E, 0x80, 0x00, 0x00, 0x03,
- 0xA8, 0x11, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00,
- 0x00, 0x02, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x99,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFF, 0xFF,
- 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x01,
- 0xFF, 0xFF, 0xFE, 0x20, 0x60, 0x00, 0x00, 0x00,
- 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00,
- 0x00, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x40,
- 0x38, 0x00, 0x00, 0x00, 0xFE, 0x47, 0xFF, 0xFF,
- 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x23,
- 0xFF, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00,
- 0x78, 0x11, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80,
- 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00,
- 0x07, 0xC0, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF,
- 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x04,
- 0x7F, 0xFF, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x10,
- 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01, 0x80,
- 0x00, 0x30, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x70, 0x00, 0x01, 0x4F, 0xFF,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00,
- 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x80, 0x03, 0xF0,
- 0x00, 0x00, 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x40,
- 0x0F, 0xF0, 0x00, 0x04, 0x1F, 0xFF, 0x80, 0x00,
- 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x10, 0x1F, 0xFF,
- 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x40,
- 0xFF, 0xFF, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xF0,
- 0x00, 0x83, 0xFF, 0xFF, 0x81, 0xE0, 0x01, 0xFF,
- 0xFF, 0xF8, 0x02, 0x07, 0xFF, 0xFF, 0x80, 0x3F,
- 0x07, 0xE0, 0x00, 0x1C, 0x0C, 0x1F, 0xFF, 0xFF,
- 0xF8, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0x78, 0x1F,
- 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0x00, 0x07, 0x0F,
- 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0C, 0x07,
- 0xFF, 0x83, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-};
-
-#endif
-
-#ifdef INCLUDE_LINUX_LOGO16
-
-unsigned char linux_logo16_red[] __initdata = {
- 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x35, 0x83, 0xa5,
- 0x65, 0x8f, 0x98, 0xc9, 0xdb, 0xe1, 0xe7, 0xf8
-};
-
-unsigned char linux_logo16_green[] __initdata = {
- 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x2e, 0x83, 0xa5,
- 0x65, 0x6e, 0x98, 0x89, 0xbf, 0xac, 0xda, 0xf8
-};
-
-unsigned char linux_logo16_blue[] __initdata = {
- 0x00, 0x90, 0xaf, 0x9c, 0xf7, 0x2b, 0x82, 0xa5,
- 0x65, 0x41, 0x97, 0x1e, 0x60, 0x29, 0xa5, 0xf8
-};
-
-unsigned char linux_logo16[] __initdata = {
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa1, 0x11, 0x11,
- 0x61, 0x16, 0x66, 0x66, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0xa8, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x87, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x73, 0x33, 0x33, 0x3a, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x27, 0x77, 0x77, 0x77, 0x33, 0x3a, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xa3, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x55, 0x50, 0x08, 0x33, 0x77, 0x77,
- 0x77, 0x72, 0x72, 0x27, 0x77, 0x77, 0x33, 0x33,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xa3, 0x33, 0x33, 0x77, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x58, 0x85, 0x00, 0x11, 0x11, 0xaa,
- 0xa3, 0x37, 0x77, 0x72, 0x22, 0x22, 0x77, 0x73,
- 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3,
- 0x33, 0x37, 0x77, 0x33, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x56, 0x85, 0x00, 0x06, 0x66, 0x11,
- 0x11, 0x1a, 0xa3, 0x37, 0x77, 0x72, 0x22, 0x77,
- 0x73, 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
- 0x33, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, 0x66, 0x66,
- 0x66, 0x66, 0x11, 0x1a, 0xa3, 0x77, 0x72, 0x22,
- 0x77, 0x73, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0xa0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
- 0x66, 0x66, 0x66, 0x66, 0x11, 0xa3, 0x77, 0x22,
- 0x22, 0x77, 0x33, 0x33, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33,
- 0x33, 0x3a, 0xa1, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x33,
- 0xaa, 0x11, 0x16, 0x66, 0x66, 0x61, 0x1a, 0x37,
- 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x33,
- 0x3a, 0xa1, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x22,
- 0x22, 0x77, 0x3a, 0x11, 0x66, 0x66, 0x66, 0x1a,
- 0x37, 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33, 0x3a,
- 0xa1, 0x11, 0x11, 0x10, 0x00, 0x00, 0x50, 0x00,
- 0x00, 0x05, 0x80, 0x50, 0x00, 0x00, 0x07, 0x72,
- 0x22, 0x22, 0x22, 0x73, 0xa1, 0x66, 0x66, 0x61,
- 0x1a, 0x77, 0x22, 0x27, 0x73, 0x33, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x3a, 0xaa,
- 0x11, 0x11, 0x1a, 0xa0, 0x08, 0x71, 0x05, 0x00,
- 0x00, 0x12, 0x22, 0x50, 0x00, 0x00, 0x07, 0x77,
- 0x77, 0x72, 0x22, 0x22, 0x27, 0x31, 0x16, 0x66,
- 0x61, 0x13, 0x77, 0x22, 0x77, 0x33, 0x3a, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xa1,
- 0x11, 0x1a, 0x33, 0x70, 0x07, 0x2e, 0x70, 0x00,
- 0x01, 0x44, 0x42, 0x60, 0x00, 0x00, 0x02, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x27, 0x31, 0x66,
- 0x66, 0x61, 0xa3, 0x72, 0x22, 0x77, 0x33, 0xaa,
- 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xaa, 0x11,
- 0x1a, 0x33, 0x77, 0x30, 0x04, 0x82, 0x40, 0x00,
- 0x54, 0x48, 0x54, 0x40, 0x00, 0x00, 0x01, 0xaa,
- 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x31,
- 0x66, 0x66, 0x11, 0x37, 0x22, 0x27, 0x73, 0x3a,
- 0xaa, 0xaa, 0xa3, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
- 0xa3, 0x77, 0xaa, 0x10, 0x50, 0x08, 0x46, 0x05,
- 0x54, 0x80, 0x50, 0x42, 0x00, 0x00, 0x08, 0x66,
- 0x66, 0x1a, 0x32, 0x22, 0x22, 0x22, 0x22, 0x27,
- 0x31, 0x66, 0x66, 0x13, 0x72, 0x22, 0x77, 0x33,
- 0xaa, 0xaa, 0xaa, 0x33, 0xaa, 0xa1, 0xaa, 0xa3,
- 0x37, 0xa1, 0x1a, 0x30, 0x50, 0x06, 0x26, 0x00,
- 0x54, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, 0xe2,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22, 0x22,
- 0x27, 0xa6, 0x66, 0x61, 0xa7, 0x72, 0x27, 0x73,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
- 0x31, 0x11, 0x37, 0x70, 0x02, 0x00, 0xab, 0xbb,
- 0xb6, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xee, 0xee,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
- 0x22, 0x23, 0x16, 0x66, 0x1a, 0x37, 0x22, 0x77,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x3a,
- 0x11, 0xa7, 0x33, 0x10, 0x04, 0x09, 0xbd, 0xdd,
- 0xbd, 0xd0, 0x04, 0x45, 0x00, 0x0e, 0xee, 0xee,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
- 0x22, 0x22, 0x71, 0x66, 0x66, 0x13, 0x72, 0x27,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x11,
- 0xa3, 0x73, 0xa1, 0x60, 0x08, 0xbd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdb, 0x90, 0x00, 0x02, 0xec, 0xee,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xce, 0x22,
- 0x22, 0x22, 0x27, 0xa6, 0x66, 0x61, 0x37, 0x27,
- 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x1a,
- 0x33, 0xa1, 0x16, 0x60, 0x0b, 0xbd, 0xdd, 0xdd,
- 0xcd, 0xdd, 0xdd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0xa2,
- 0x22, 0x22, 0x22, 0x7a, 0x66, 0x66, 0x13, 0x77,
- 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0x3a, 0x11, 0x33,
- 0xaa, 0x11, 0x66, 0x60, 0x9b, 0xdd, 0xdd, 0xdd,
- 0xcd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x61,
- 0x72, 0x22, 0x22, 0x22, 0xa1, 0x66, 0x61, 0x37,
- 0x1a, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x13, 0x3a,
- 0x11, 0x11, 0x11, 0x10, 0x5b, 0xdd, 0xdd, 0xdc,
- 0xdd, 0xdd, 0xbd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x86,
- 0x17, 0x22, 0x22, 0x22, 0x23, 0x16, 0x66, 0xaa,
- 0xaa, 0xa3, 0x3a, 0xaa, 0xaa, 0x1a, 0x3a, 0xa1,
- 0x11, 0x11, 0x1a, 0x70, 0x05, 0xbd, 0xdd, 0xdd,
- 0xdb, 0x5b, 0xdd, 0xb0, 0x00, 0x60, 0x2e, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe6, 0x88,
- 0x66, 0x32, 0x22, 0x22, 0x22, 0x36, 0x66, 0x11,
- 0x33, 0x33, 0x3a, 0xaa, 0x11, 0xaa, 0xaa, 0xa1,
- 0x11, 0x1a, 0x3a, 0x60, 0x02, 0x99, 0xbb, 0xb9,
- 0x9b, 0xbb, 0xbc, 0x22, 0x00, 0x86, 0x5e, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe1, 0x68,
- 0x86, 0x63, 0x22, 0x22, 0x22, 0x2a, 0x66, 0x66,
- 0x33, 0x33, 0xaa, 0xaa, 0x1a, 0xaa, 0xaa, 0x11,
- 0x1a, 0xa7, 0x68, 0x80, 0x02, 0x2b, 0xbd, 0xbb,
- 0xbb, 0xb9, 0x22, 0x22, 0x00, 0x06, 0x6e, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0xa6,
- 0x88, 0x86, 0x32, 0x22, 0x22, 0x27, 0xa6, 0x66,
- 0x33, 0x3a, 0xaa, 0xa1, 0xaa, 0xaa, 0xa1, 0x11,
- 0xa3, 0xa6, 0x88, 0x80, 0x02, 0x22, 0x9b, 0xbb,
- 0xbb, 0x22, 0x24, 0xf4, 0x60, 0x00, 0x0c, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc2, 0x21,
- 0x68, 0x88, 0x63, 0x22, 0x22, 0x22, 0x71, 0x66,
- 0x33, 0x3a, 0x11, 0x11, 0xaa, 0xaa, 0x11, 0xaa,
- 0x71, 0x88, 0x88, 0x00, 0x02, 0xe2, 0x26, 0x99,
- 0x22, 0x22, 0x4f, 0xf4, 0x40, 0x00, 0x0c, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x22, 0x22,
- 0x16, 0x88, 0x86, 0xa2, 0x22, 0x22, 0x27, 0x11,
- 0x33, 0xa1, 0x11, 0x11, 0xaa, 0x31, 0x1a, 0xa3,
- 0x68, 0x88, 0x81, 0x00, 0x54, 0x42, 0x22, 0x22,
- 0x22, 0x44, 0xff, 0xff, 0x48, 0x00, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x22,
- 0x21, 0x88, 0x88, 0x6a, 0x22, 0x22, 0x22, 0x31,
- 0x3a, 0xa1, 0x11, 0x1a, 0xa3, 0x11, 0x33, 0x36,
- 0x88, 0x86, 0x30, 0x00, 0x4f, 0x44, 0x22, 0x22,
- 0x24, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x95, 0x22, 0x72,
- 0x22, 0x18, 0x88, 0x86, 0x32, 0x22, 0x22, 0x27,
- 0xaa, 0x11, 0x11, 0x1a, 0x31, 0x13, 0x33, 0x68,
- 0x88, 0x6a, 0x00, 0x02, 0x4f, 0x4f, 0x42, 0x24,
- 0x4f, 0xff, 0xff, 0xff, 0xf4, 0x50, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x73,
- 0x72, 0x26, 0x88, 0x88, 0x63, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0xa3, 0xa1, 0x73, 0xa6, 0x88,
- 0x81, 0xa5, 0x00, 0x04, 0x4f, 0x4f, 0x44, 0x4f,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0x40, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x12, 0x27,
- 0xaa, 0x22, 0x68, 0x55, 0x86, 0x72, 0x22, 0x22,
- 0x11, 0x11, 0x1a, 0x33, 0x13, 0x3a, 0x18, 0x88,
- 0x1a, 0x10, 0x00, 0x44, 0x4f, 0x4f, 0xff, 0x4f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x61, 0x22,
- 0x3a, 0xa2, 0x26, 0x85, 0x58, 0x67, 0x22, 0x22,
- 0x61, 0x61, 0x1a, 0x7a, 0x37, 0x31, 0x88, 0x81,
- 0x11, 0x00, 0x05, 0xe4, 0x44, 0xff, 0xff, 0xff,
- 0x4f, 0xf4, 0x44, 0xff, 0xff, 0xf5, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x12,
- 0x2a, 0xaa, 0x72, 0x68, 0x55, 0x81, 0x22, 0x22,
- 0x66, 0x61, 0xa3, 0x33, 0x73, 0x16, 0x88, 0x11,
- 0x10, 0x00, 0x08, 0x74, 0x44, 0x4f, 0x44, 0x44,
- 0xf4, 0xf4, 0x44, 0x44, 0xe2, 0x44, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x81,
- 0x22, 0xaa, 0xa7, 0x26, 0x85, 0x88, 0x12, 0x22,
- 0x66, 0x61, 0x37, 0xa7, 0x3a, 0x66, 0x66, 0x11,
- 0x80, 0x00, 0x0a, 0x72, 0x44, 0x4f, 0x44, 0x4f,
- 0xff, 0x44, 0x44, 0x22, 0x22, 0x24, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x85, 0x88,
- 0x12, 0x2a, 0xaa, 0x22, 0x68, 0x58, 0x63, 0x22,
- 0x66, 0x1a, 0x73, 0x77, 0x31, 0x66, 0x61, 0x11,
- 0x00, 0x00, 0x07, 0x44, 0xff, 0x4f, 0xf4, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0x42, 0x22, 0x40, 0x9b,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x85, 0x55,
- 0x81, 0x27, 0xaa, 0xa2, 0x78, 0x88, 0x86, 0x72,
- 0x66, 0x13, 0x77, 0x73, 0x11, 0x66, 0x61, 0x76,
- 0x00, 0x50, 0x84, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x42, 0x40, 0x9b,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x68, 0x55,
- 0x58, 0x12, 0x3a, 0xaa, 0x23, 0x88, 0x88, 0xa7,
- 0x66, 0xa7, 0x77, 0x7a, 0x16, 0x66, 0x1a, 0x15,
- 0x05, 0x00, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0x24, 0x9b,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x26, 0x55,
- 0x55, 0x81, 0x23, 0xaa, 0x32, 0x18, 0x88, 0x6a,
- 0x61, 0x37, 0x77, 0x31, 0x66, 0x66, 0x17, 0x60,
- 0x05, 0x08, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4e, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0xa2, 0x65,
- 0x55, 0x58, 0xa2, 0x7a, 0xa2, 0x26, 0x88, 0x61,
- 0x61, 0x32, 0x27, 0xa1, 0x66, 0x61, 0x31, 0x60,
- 0x00, 0x04, 0x4f, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x9b, 0xaa, 0x26,
- 0x55, 0x55, 0x87, 0x27, 0x33, 0x27, 0x68, 0x61,
- 0x1a, 0x72, 0x27, 0xa6, 0x66, 0x6a, 0x71, 0x00,
- 0x80, 0x84, 0xff, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
- 0x9b, 0x9b, 0x99, 0xb9, 0xb9, 0x99, 0xaa, 0xa2,
- 0x85, 0x55, 0x56, 0x22, 0x27, 0x22, 0x36, 0x66,
- 0x13, 0x22, 0x23, 0x16, 0x86, 0x63, 0x73, 0x00,
- 0x00, 0x44, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4f, 0x99,
- 0x9b, 0x99, 0x99, 0x99, 0xb9, 0x99, 0xaa, 0xaa,
- 0x28, 0x55, 0x58, 0x12, 0x22, 0x22, 0x21, 0x11,
- 0xa3, 0x27, 0x7a, 0x66, 0x86, 0x17, 0x75, 0x05,
- 0x05, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x44, 0x4f, 0x99,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x3a, 0xaa,
- 0xa2, 0x85, 0x58, 0x67, 0x72, 0x22, 0x27, 0xa1,
- 0x37, 0x27, 0x7a, 0x68, 0x86, 0xa2, 0x70, 0x00,
- 0x02, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xf4, 0x99,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x23, 0xaa,
- 0xa7, 0x78, 0x88, 0x81, 0x77, 0x22, 0x27, 0x3a,
- 0x72, 0x73, 0x71, 0x68, 0x66, 0x32, 0x50, 0x00,
- 0x04, 0x4f, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x95,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x55, 0x12, 0x3a,
- 0xaa, 0x21, 0x88, 0x81, 0x77, 0x27, 0x73, 0x73,
- 0x72, 0x33, 0x36, 0x86, 0x61, 0x72, 0x00, 0x00,
- 0x04, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x8a, 0x27,
- 0xaa, 0x77, 0x68, 0x61, 0x23, 0x71, 0x11, 0x3a,
- 0x27, 0xa3, 0x36, 0x86, 0x61, 0x20, 0x00, 0x00,
- 0x04, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x59,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x95, 0x58, 0x77,
- 0x27, 0x32, 0x36, 0x63, 0x23, 0x71, 0x66, 0x11,
- 0x27, 0x13, 0xa6, 0x86, 0x6a, 0x20, 0x00, 0x50,
- 0x04, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x99,
- 0x9b, 0xbb, 0xbb, 0xbb, 0xb9, 0x99, 0x68, 0x13,
- 0x32, 0x22, 0x73, 0xa7, 0x2a, 0x31, 0x88, 0x66,
- 0x7a, 0x13, 0x18, 0x66, 0x63, 0x20, 0x00, 0x06,
- 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x49, 0x95,
- 0xa9, 0xa9, 0x99, 0x97, 0x92, 0x99, 0x65, 0x6a,
- 0x17, 0x22, 0x23, 0x72, 0x27, 0xaa, 0x88, 0x88,
- 0xa1, 0x17, 0x68, 0x66, 0x67, 0x70, 0x00, 0x05,
- 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x49, 0x9c,
- 0x2e, 0xee, 0xee, 0xee, 0xee, 0xa9, 0x65, 0x8a,
- 0x1a, 0xaa, 0x37, 0x72, 0x27, 0x37, 0x88, 0x88,
- 0x11, 0x17, 0x68, 0x66, 0x67, 0x10, 0x9d, 0xd0,
- 0x84, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0xf4, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x4f, 0x69,
- 0xcc, 0xee, 0xee, 0xee, 0xec, 0x99, 0x88, 0x63,
- 0x61, 0x68, 0x61, 0x72, 0x22, 0x7a, 0x68, 0x88,
- 0x11, 0x17, 0x88, 0x66, 0x12, 0x1b, 0xdd, 0xdd,
- 0x02, 0x44, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0xff, 0x4f, 0x4c, 0xc5,
- 0x0c, 0xc1, 0x11, 0x1c, 0xc0, 0x26, 0x66, 0x17,
- 0x66, 0x88, 0x88, 0x12, 0x22, 0x23, 0xa8, 0x88,
- 0x11, 0x13, 0x88, 0x66, 0x17, 0xbb, 0xdd, 0xdd,
- 0xd0, 0x8f, 0xff, 0xf4, 0xf4, 0x44, 0xf4, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0x4f, 0x44, 0xdd, 0xdd,
- 0x00, 0x00, 0x00, 0x05, 0x9d, 0x21, 0x66, 0x27,
- 0xa6, 0x65, 0x58, 0x67, 0x22, 0x27, 0x28, 0x88,
- 0x11, 0xaa, 0x86, 0x68, 0x1a, 0xbb, 0xdd, 0xdd,
- 0xdb, 0x05, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xdd, 0xdb,
- 0x00, 0x00, 0x00, 0x00, 0xdd, 0xda, 0x66, 0x22,
- 0x71, 0x15, 0x55, 0x81, 0x22, 0x22, 0x76, 0x88,
- 0x11, 0x31, 0x88, 0x88, 0xab, 0xbd, 0xdd, 0xdd,
- 0xdd, 0x00, 0x04, 0x44, 0xff, 0xff, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0x44, 0xdd, 0xdb,
- 0x00, 0x00, 0x00, 0x0b, 0xdd, 0xda, 0x11, 0x22,
- 0x23, 0x68, 0x55, 0x86, 0x22, 0x22, 0x7a, 0x88,
- 0x1a, 0x71, 0x88, 0x89, 0xbb, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xd0, 0x00, 0x4f, 0x44, 0xff, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xff, 0xe2, 0xdd, 0xdb,
- 0x90, 0x00, 0x05, 0xbd, 0xdd, 0xb8, 0x63, 0x22,
- 0x27, 0xa6, 0x55, 0x88, 0x77, 0x22, 0x22, 0x88,
- 0x1a, 0x28, 0xbd, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdb, 0x00, 0x07, 0x44, 0x4f, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x22, 0xdd, 0xdb,
- 0xbb, 0x9b, 0xbb, 0xbd, 0xdd, 0xd5, 0x86, 0x22,
- 0x22, 0x77, 0x85, 0x88, 0x17, 0x22, 0x22, 0x88,
- 0xaa, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0x00, 0x00, 0x54, 0x4f, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0x44, 0x22, 0xbd, 0xdd,
- 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0x88, 0x72,
- 0x27, 0x22, 0x88, 0x88, 0x67, 0x72, 0x22, 0x18,
- 0x33, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xd0, 0x00, 0x05, 0x4f, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0x44, 0x4f, 0x22, 0xbd, 0xdd,
- 0xdb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd, 0x88, 0x17,
- 0x27, 0x72, 0x68, 0x88, 0x87, 0x32, 0x22, 0x36,
- 0x37, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xd5, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0xf4, 0xf4, 0x22, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x67,
- 0x72, 0x77, 0x38, 0x88, 0x83, 0x37, 0x22, 0x26,
- 0x72, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0xf4, 0x44, 0x25, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd3,
- 0x32, 0x73, 0x76, 0x88, 0x81, 0x33, 0x22, 0x2a,
- 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xb0, 0x54, 0x4f, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x00, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xa7, 0x73, 0x26, 0x88, 0x86, 0x7a, 0x72, 0x27,
- 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0xff, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0x44, 0x40, 0x05, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0x13, 0x23, 0x21, 0x68, 0x86, 0x17, 0x72, 0x22,
- 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0x4f, 0x4f, 0x4f,
- 0xff, 0xff, 0x44, 0x42, 0x00, 0x05, 0xbd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0x87, 0x27, 0x27, 0x16, 0x66, 0x67, 0x22, 0x22,
- 0x72, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0x94, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x00, 0x00, 0x05, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb8,
- 0x86, 0x22, 0x22, 0x7a, 0x68, 0x81, 0x22, 0x22,
- 0x37, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x44, 0x44, 0x44,
- 0x44, 0x47, 0x00, 0x00, 0x00, 0x05, 0xbd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x68,
- 0x58, 0x72, 0x22, 0x27, 0x18, 0x86, 0x72, 0x22,
- 0x1a, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x18, 0x85,
- 0x58, 0x12, 0x22, 0x36, 0x18, 0x88, 0x32, 0x22,
- 0x61, 0x3b, 0xbb, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x7a, 0x68, 0x85,
- 0x88, 0x62, 0x27, 0x16, 0x18, 0x88, 0x12, 0x27,
- 0x86, 0x18, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd,
- 0xdd, 0xdd, 0xdd, 0xbb, 0xb5, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xbb, 0xbd,
- 0xdd, 0xdd, 0xdb, 0xbb, 0x87, 0x31, 0x68, 0x65,
- 0x88, 0x82, 0x23, 0x16, 0x18, 0x88, 0x12, 0x23,
- 0x88, 0x67, 0x27, 0xa8, 0x9b, 0xbb, 0xbb, 0xbb,
- 0xbd, 0xdd, 0xbb, 0xbb, 0x95, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x9b, 0xbb,
- 0xbb, 0xbb, 0xbb, 0x96, 0x87, 0x16, 0x68, 0x18,
- 0x88, 0x62, 0x31, 0x66, 0x18, 0x88, 0x62, 0x73,
- 0x88, 0x63, 0x27, 0x33, 0x65, 0x55, 0x99, 0x9b,
- 0xbb, 0xbb, 0xbb, 0x99, 0x55, 0x0a, 0xa1, 0x86,
- 0x81, 0x68, 0x88, 0x55, 0x58, 0x85, 0x9b, 0xbb,
- 0xbb, 0xbb, 0x95, 0x88, 0x83, 0x66, 0x66, 0x18,
- 0x66, 0x82, 0xa1, 0x66, 0x18, 0x88, 0x62, 0x33,
- 0x88, 0x81, 0x27, 0x7a, 0x18, 0x58, 0x86, 0x85,
- 0x99, 0x99, 0x99, 0x95, 0x53, 0x2a, 0xaa, 0x88,
- 0x67, 0x31, 0x68, 0x55, 0x58, 0x85, 0x59, 0xbb,
- 0xbb, 0xb9, 0x58, 0x68, 0x83, 0x66, 0x61, 0x16,
- 0x66, 0x62, 0x16, 0x66, 0x68, 0x88, 0x62, 0xaa,
- 0x88, 0x86, 0x27, 0x77, 0x78, 0x55, 0x88, 0x22,
- 0x25, 0x55, 0x95, 0x55, 0x6a, 0xa2, 0x2a, 0x88,
- 0x62, 0x27, 0x37, 0x38, 0x88, 0x87, 0x55, 0x59,
- 0x95, 0x58, 0x16, 0x88, 0x8a, 0x66, 0x63, 0x68,
- 0x86, 0x67, 0x66, 0x66, 0x68, 0x88, 0x12, 0x11,
- 0x88, 0x88, 0x72, 0x77, 0x78, 0x85, 0x58, 0x17,
- 0x23, 0x32, 0x55, 0x55, 0x81, 0x13, 0x73, 0x66,
- 0x62, 0x7a, 0xaa, 0x38, 0x88, 0x58, 0x27, 0x55,
- 0x58, 0x32, 0x38, 0x88, 0x81, 0x66, 0xa2, 0x88,
- 0x86, 0x61, 0x66, 0x61, 0x66, 0x68, 0x13, 0x11,
- 0x88, 0x88, 0x12, 0x22, 0x71, 0x85, 0x58, 0x62,
- 0x23, 0xa2, 0x68, 0x88, 0x81, 0x66, 0x88, 0x88,
- 0x63, 0x2a, 0xaa, 0x28, 0x88, 0x55, 0x86, 0x61,
- 0x66, 0x66, 0x68, 0x88, 0x66, 0x66, 0x77, 0x88,
- 0x68, 0x16, 0x66, 0x62, 0x66, 0x68, 0xa1, 0x61,
- 0x88, 0x88, 0x62, 0x22, 0x22, 0x85, 0x55, 0x83,
- 0x72, 0x37, 0xa8, 0x88, 0x61, 0x66, 0x85, 0x55,
- 0x86, 0x23, 0xaa, 0x71, 0x88, 0x85, 0x88, 0x66,
- 0x88, 0x86, 0x88, 0x88, 0x16, 0x61, 0x21, 0x88,
- 0x66, 0xa6, 0x86, 0x17, 0x66, 0x66, 0x31, 0x61,
- 0x88, 0x88, 0x87, 0x72, 0x22, 0x68, 0x55, 0x86,
- 0x77, 0x77, 0x36, 0x88, 0x13, 0x68, 0x85, 0x55,
- 0x58, 0x12, 0x73, 0x72, 0x76, 0x88, 0x88, 0x68,
- 0x88, 0x88, 0x88, 0x66, 0x36, 0x63, 0x26, 0x86,
- 0x86, 0x36, 0x86, 0x11, 0x66, 0x66, 0x76, 0x61,
- 0x88, 0x88, 0x81, 0x22, 0x22, 0x38, 0x85, 0x58,
- 0x37, 0x22, 0x21, 0x68, 0xa2, 0x31, 0x68, 0x55,
- 0x55, 0x81, 0x22, 0x22, 0xa8, 0x88, 0x88, 0x68,
- 0x86, 0x88, 0x68, 0x81, 0x36, 0x17, 0x21, 0x68,
- 0x86, 0x16, 0x66, 0x26, 0x66, 0x61, 0x36, 0x66,
- 0x68, 0x88, 0x86, 0x27, 0x22, 0x28, 0x88, 0x88,
- 0x17, 0x72, 0x2a, 0x66, 0xa2, 0x22, 0x36, 0x55,
- 0x55, 0x58, 0x37, 0x3a, 0x16, 0x66, 0x66, 0x66,
- 0x66, 0x18, 0x88, 0x67, 0x16, 0x12, 0x71, 0x68,
- 0x81, 0x68, 0x61, 0x76, 0x66, 0x6a, 0x16, 0x66,
- 0x88, 0x88, 0x86, 0x77, 0x22, 0x26, 0x88, 0x88,
- 0x13, 0x37, 0x71, 0x66, 0xa2, 0x33, 0x2a, 0x85,
- 0x55, 0x55, 0x17, 0x73, 0x16, 0x66, 0x66, 0x68,
- 0x63, 0x88, 0x88, 0xa2, 0x66, 0xa2, 0xa6, 0x88,
- 0x61, 0x68, 0x6a, 0x76, 0x66, 0x6a, 0x66, 0x6a
-};
-
-#endif
+/* $Id: linux_logo.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * include/linux/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+ * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
+ * Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+ * image size has to be 80x80
+ * values have to start from 0x20
+ * (i.e. RGB(linux_logo_red[0],
+ * linux_logo_green[0],
+ * linux_logo_blue[0]) is color 0x20)
+ * BW image has to be 80x80 as well, with MS bit
+ * on the left
+ * Serial_console ascii image can be any size,
+ * but should contain %s to display the version
+ */
+
+#if LINUX_LOGO_COLORS == 214
+
+unsigned char linux_logo_red[] __initdata = {
+ 0x02, 0x9E, 0xE9, 0xC4, 0x50, 0xC9, 0xC4, 0xE9,
+ 0x65, 0xE3, 0xC2, 0x25, 0xA4, 0xEC, 0x90, 0xA6,
+ 0xC4, 0x6A, 0xD1, 0xF3, 0x12, 0xED, 0xA0, 0xC2,
+ 0xB8, 0xD5, 0xDB, 0xD2, 0x3E, 0x16, 0xEB, 0x54,
+ 0xA9, 0xCD, 0xF5, 0x0A, 0xBA, 0xB3, 0xDC, 0x74,
+ 0xCE, 0xF6, 0xD3, 0xC5, 0xEA, 0xB8, 0xED, 0x5E,
+ 0xE5, 0x26, 0xF4, 0xA9, 0x82, 0x94, 0xE6, 0x38,
+ 0xF2, 0x0F, 0x7F, 0x49, 0xE5, 0xF4, 0xD3, 0xC3,
+ 0xC2, 0x1E, 0xD5, 0xC6, 0xA4, 0xFA, 0x0A, 0xBA,
+ 0xD4, 0xEB, 0xEA, 0xEC, 0xA8, 0xBC, 0xB4, 0xDC,
+ 0x84, 0xE4, 0xCE, 0xEC, 0x92, 0xCD, 0xDC, 0x8B,
+ 0xCC, 0x1E, 0xF6, 0xB2, 0x60, 0x2A, 0x96, 0x52,
+ 0x0F, 0xBD, 0xFA, 0xCC, 0xB8, 0x7A, 0x4C, 0xD2,
+ 0x06, 0xEF, 0x44, 0x64, 0xF4, 0xBA, 0xCE, 0xE6,
+ 0x8A, 0x6F, 0x3C, 0x70, 0x7C, 0x9C, 0xBA, 0xDF,
+ 0x2C, 0x4D, 0x3B, 0xCA, 0xDE, 0xCE, 0xEE, 0x46,
+ 0x6A, 0xAC, 0x96, 0xE5, 0x96, 0x7A, 0xBA, 0xB6,
+ 0xE2, 0x7E, 0xAA, 0xC5, 0x96, 0x9E, 0xC2, 0xAA,
+ 0xDA, 0x35, 0xB6, 0x82, 0x88, 0xBE, 0xC2, 0x9E,
+ 0xB4, 0xD5, 0xDA, 0x9C, 0xA0, 0xD0, 0xA8, 0xC7,
+ 0x72, 0xF2, 0xDB, 0x76, 0xDC, 0xBE, 0xAA, 0xF4,
+ 0x87, 0x2F, 0x53, 0x8E, 0x36, 0xCE, 0xE6, 0xCA,
+ 0xCB, 0xE4, 0xD6, 0xAA, 0x42, 0x5D, 0xB4, 0x59,
+ 0x1C, 0xC8, 0x96, 0x6C, 0xDA, 0xCE, 0xE6, 0xCB,
+ 0x96, 0x16, 0xFA, 0xBE, 0xAE, 0xFE, 0x6E, 0xD6,
+ 0xCE, 0xB6, 0xE5, 0xED, 0xDB, 0xDC, 0xF4, 0x72,
+ 0x1F, 0xAE, 0xE6, 0xC2, 0xCA, 0xC4
+};
+
+unsigned char linux_logo_green[] __initdata = {
+ 0x02, 0x88, 0xC4, 0x85, 0x44, 0xA2, 0xA8, 0xE5,
+ 0x65, 0xA6, 0xC2, 0x24, 0xA4, 0xB4, 0x62, 0x86,
+ 0x94, 0x44, 0xD2, 0xB6, 0x12, 0xD4, 0x73, 0x96,
+ 0x92, 0x95, 0xB2, 0xC2, 0x36, 0x0E, 0xBC, 0x54,
+ 0x75, 0xA5, 0xF5, 0x0A, 0xB2, 0x83, 0xC2, 0x74,
+ 0x9B, 0xBD, 0xA2, 0xCA, 0xDA, 0x8C, 0xCB, 0x42,
+ 0xAC, 0x12, 0xDA, 0x7B, 0x54, 0x94, 0xD2, 0x24,
+ 0xBE, 0x06, 0x65, 0x33, 0xBB, 0xBC, 0xAB, 0x8C,
+ 0x92, 0x1E, 0x9B, 0xB6, 0x6E, 0xFB, 0x04, 0xA2,
+ 0xC8, 0xBD, 0xAD, 0xEC, 0x92, 0xBC, 0x7B, 0x9D,
+ 0x84, 0xC4, 0xC4, 0xB4, 0x6C, 0x93, 0xA3, 0x5E,
+ 0x8D, 0x13, 0xD6, 0x82, 0x4C, 0x2A, 0x7A, 0x5A,
+ 0x0D, 0x82, 0xBB, 0xCC, 0x8B, 0x6A, 0x3C, 0xBE,
+ 0x06, 0xC4, 0x44, 0x45, 0xDB, 0x96, 0xB6, 0xDE,
+ 0x8A, 0x4D, 0x3C, 0x5A, 0x7C, 0x9C, 0xAA, 0xCB,
+ 0x1C, 0x4D, 0x2E, 0xB2, 0xBE, 0xAA, 0xDE, 0x3E,
+ 0x6A, 0xAC, 0x82, 0xE5, 0x72, 0x62, 0x92, 0x9E,
+ 0xCA, 0x4A, 0x8E, 0xBE, 0x86, 0x6B, 0xAA, 0x9A,
+ 0xBE, 0x34, 0xAB, 0x76, 0x6E, 0x9A, 0x9E, 0x62,
+ 0x76, 0xCE, 0xD3, 0x92, 0x7C, 0xB8, 0x7E, 0xC6,
+ 0x5E, 0xE2, 0xC3, 0x54, 0xAA, 0x9E, 0x8A, 0xCA,
+ 0x63, 0x2D, 0x3B, 0x8E, 0x1A, 0x9E, 0xC2, 0xA6,
+ 0xCB, 0xDC, 0xD6, 0x8E, 0x26, 0x5C, 0xB4, 0x45,
+ 0x1C, 0xB8, 0x6E, 0x4C, 0xBC, 0xAE, 0xD6, 0x92,
+ 0x63, 0x16, 0xF6, 0x8C, 0x7A, 0xFE, 0x6E, 0xBA,
+ 0xC6, 0x86, 0xAA, 0xAE, 0xDB, 0xA4, 0xD4, 0x56,
+ 0x0E, 0x6E, 0xB6, 0xB2, 0xBE, 0xBE
+};
+
+unsigned char linux_logo_blue[] __initdata = {
+ 0x04, 0x28, 0x10, 0x0B, 0x14, 0x14, 0x74, 0xC7,
+ 0x64, 0x0E, 0xC3, 0x24, 0xA4, 0x0C, 0x10, 0x20,
+ 0x0D, 0x04, 0xD1, 0x0D, 0x13, 0x22, 0x0A, 0x40,
+ 0x14, 0x0C, 0x11, 0x94, 0x0C, 0x08, 0x0B, 0x56,
+ 0x09, 0x47, 0xF4, 0x0B, 0x9C, 0x07, 0x54, 0x74,
+ 0x0F, 0x0C, 0x0F, 0xC7, 0x6C, 0x14, 0x14, 0x11,
+ 0x0B, 0x04, 0x12, 0x0C, 0x05, 0x94, 0x94, 0x0A,
+ 0x34, 0x09, 0x14, 0x08, 0x2F, 0x15, 0x19, 0x11,
+ 0x28, 0x0C, 0x0B, 0x94, 0x08, 0xFA, 0x08, 0x7C,
+ 0xBC, 0x15, 0x0A, 0xEC, 0x64, 0xBB, 0x0A, 0x0C,
+ 0x84, 0x2C, 0xA0, 0x15, 0x10, 0x0D, 0x0B, 0x0E,
+ 0x0A, 0x07, 0x10, 0x3C, 0x24, 0x2C, 0x28, 0x5C,
+ 0x0A, 0x0D, 0x0A, 0xC1, 0x22, 0x4C, 0x10, 0x94,
+ 0x04, 0x0F, 0x45, 0x08, 0x31, 0x54, 0x3C, 0xBC,
+ 0x8C, 0x09, 0x3C, 0x18, 0x7C, 0x9C, 0x7C, 0x91,
+ 0x0C, 0x4D, 0x17, 0x74, 0x0C, 0x48, 0x9C, 0x3C,
+ 0x6A, 0xAC, 0x5C, 0xE3, 0x29, 0x3C, 0x2C, 0x7C,
+ 0x6C, 0x04, 0x14, 0xA9, 0x74, 0x07, 0x2C, 0x74,
+ 0x4C, 0x34, 0x97, 0x5C, 0x38, 0x0C, 0x5C, 0x04,
+ 0x0C, 0xBA, 0xBC, 0x78, 0x18, 0x88, 0x24, 0xC2,
+ 0x3C, 0xB4, 0x87, 0x0C, 0x14, 0x4C, 0x3C, 0x10,
+ 0x17, 0x2C, 0x0A, 0x8C, 0x04, 0x1C, 0x44, 0x2C,
+ 0xCD, 0xD8, 0xD4, 0x34, 0x0C, 0x5B, 0xB4, 0x1E,
+ 0x1D, 0xAC, 0x24, 0x18, 0x20, 0x5C, 0xB4, 0x1C,
+ 0x09, 0x14, 0xFC, 0x0C, 0x10, 0xFC, 0x6C, 0x7C,
+ 0xB4, 0x1C, 0x15, 0x17, 0xDB, 0x18, 0x21, 0x24,
+ 0x04, 0x04, 0x44, 0x8C, 0x8C, 0xB7
+};
+
+unsigned char linux_logo[] __initdata = {
+ 0xBF, 0x95, 0x90, 0xCB, 0x95, 0xA1, 0x2C, 0x2C,
+ 0x95, 0x55, 0xCB, 0x90, 0xCB, 0x95, 0x2C, 0x95,
+ 0xCB, 0x47, 0x94, 0x95, 0xA1, 0xD6, 0xD6, 0x2C,
+ 0x90, 0x47, 0x70, 0x2C, 0x6D, 0x2A, 0x6D, 0xD6,
+ 0xA1, 0x2C, 0x55, 0x95, 0x2C, 0x2C, 0x55, 0x55,
+ 0x95, 0xA1, 0xA1, 0xA1, 0x6D, 0xBF, 0x2A, 0x2A,
+ 0xBF, 0x83, 0xBF, 0x95, 0x90, 0xCB, 0x95, 0xA1,
+ 0x2C, 0x2C, 0x95, 0x55, 0xCB, 0x90, 0xCB, 0x95,
+ 0x2C, 0x95, 0xCB, 0x47, 0x94, 0x95, 0xA1, 0xD6,
+ 0xD6, 0x2C, 0x90, 0x47, 0x70, 0x2C, 0x6D, 0x2A,
+ 0x95, 0x47, 0x47, 0x90, 0x2C, 0x2C, 0x2C, 0x95,
+ 0x55, 0x55, 0xCB, 0x90, 0xCB, 0x55, 0x55, 0xCB,
+ 0x47, 0xE6, 0x70, 0x95, 0xD6, 0xD6, 0xA1, 0x2C,
+ 0x55, 0x55, 0x95, 0xD6, 0x6D, 0xD6, 0xA1, 0x2C,
+ 0x2C, 0x95, 0x55, 0x95, 0x95, 0x95, 0x2C, 0x2C,
+ 0xA1, 0xA1, 0x2C, 0x2C, 0xA1, 0xD6, 0xD6, 0xD6,
+ 0xD6, 0xD6, 0x95, 0x47, 0x47, 0x90, 0x2C, 0x2C,
+ 0x2C, 0x95, 0x55, 0x55, 0xCB, 0x90, 0xCB, 0x55,
+ 0x55, 0xCB, 0x47, 0xE6, 0x70, 0x95, 0xD6, 0xD6,
+ 0xA1, 0x2C, 0x55, 0x55, 0x95, 0xD6, 0x6D, 0xD6,
+ 0x90, 0x47, 0x47, 0x70, 0x2C, 0xA1, 0x2C, 0x95,
+ 0x55, 0x55, 0x90, 0xCB, 0x55, 0x55, 0x55, 0x70,
+ 0x94, 0x70, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C,
+ 0x95, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C,
+ 0x95, 0x55, 0xCB, 0x95, 0xD6, 0xA1, 0x2C, 0x95,
+ 0xA1, 0xD6, 0xD6, 0xA1, 0xA1, 0xD6, 0xA1, 0xA1,
+ 0xA1, 0x2C, 0x90, 0x47, 0x47, 0x70, 0x2C, 0xA1,
+ 0x2C, 0x95, 0x55, 0x55, 0x90, 0xCB, 0x55, 0x55,
+ 0x55, 0x70, 0x94, 0x70, 0x95, 0xA1, 0xD6, 0xD6,
+ 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0xD6, 0xD6, 0xA1,
+ 0x94, 0xA0, 0x47, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
+ 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0xCB,
+ 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C,
+ 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x95,
+ 0x55, 0x55, 0x2C, 0x3F, 0x80, 0x20, 0x88, 0x88,
+ 0x88, 0x20, 0x88, 0xB1, 0x2C, 0xA1, 0x2C, 0x2C,
+ 0x95, 0xCB, 0x94, 0xA0, 0x47, 0x55, 0x2C, 0xD6,
+ 0xA1, 0x95, 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55,
+ 0xCB, 0xCB, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6,
+ 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C,
+ 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x95, 0x2C, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x95,
+ 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x2C, 0x94, 0x80, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x88, 0x92, 0xA1, 0x95,
+ 0x55, 0x90, 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6,
+ 0xA1, 0x2C, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x95, 0x2C, 0xD6, 0xD6, 0xD6, 0xA1,
+ 0x2C, 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95,
+ 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0x95,
+ 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55, 0x2C, 0x2C,
+ 0xA1, 0xD6, 0xA1, 0xA1, 0x2C, 0x2C, 0x95, 0x55,
+ 0x55, 0x55, 0x95, 0x95, 0x2C, 0x95, 0x95, 0xD6,
+ 0xB1, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x80, 0x34, 0x88, 0x43, 0x47,
+ 0x95, 0xCB, 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6,
+ 0xA1, 0x95, 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55,
+ 0x2C, 0x2C, 0xA1, 0xD6, 0xA1, 0xA1, 0xA1, 0x2C,
+ 0x55, 0x55, 0x55, 0x55, 0x2C, 0x95, 0x2C, 0x2C,
+ 0x55, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x55,
+ 0x90, 0x70, 0x90, 0x55, 0x95, 0x95, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x95, 0x95,
+ 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xD5,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x88, 0x7D, 0x3F, 0xB1, 0x80, 0x20,
+ 0x99, 0x2C, 0x55, 0x55, 0x95, 0x2C, 0xA1, 0xA1,
+ 0x2C, 0x55, 0x90, 0x70, 0x90, 0x55, 0x95, 0x95,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C,
+ 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1, 0x95, 0xCB,
+ 0x70, 0x94, 0x90, 0x55, 0x95, 0xA1, 0xA1, 0xA1,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0xA1, 0x88,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xB1, 0x47, 0xD5, 0x7D, 0x43,
+ 0x20, 0x70, 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1,
+ 0x95, 0xCB, 0x70, 0x94, 0x90, 0x55, 0x95, 0xA1,
+ 0xA1, 0xA1, 0x2C, 0x95, 0x2C, 0x2C, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x90, 0x55, 0x2C, 0xD6, 0xD6, 0x2C, 0x90,
+ 0x94, 0x70, 0x55, 0x95, 0x2C, 0xD6, 0xD6, 0xA1,
+ 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x95, 0x55, 0x55,
+ 0xCB, 0xCB, 0xCB, 0x55, 0xCB, 0x55, 0x47, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x88, 0xB1, 0x3F, 0x92, 0x2B, 0x80,
+ 0x20, 0x80, 0xD6, 0x70, 0x55, 0x2C, 0xD6, 0xD6,
+ 0x2C, 0x90, 0x94, 0x70, 0x55, 0x95, 0x2C, 0xD6,
+ 0xD6, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x95,
+ 0x95, 0x55, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x55,
+ 0xD6, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x55, 0x70,
+ 0x94, 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0xA1, 0x95,
+ 0x55, 0x55, 0x55, 0x95, 0x55, 0x55, 0xCB, 0x90,
+ 0x70, 0x90, 0xCB, 0x55, 0x55, 0xA1, 0xD8, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x88, 0xD8, 0xE1, 0x88, 0x20, 0x20,
+ 0x88, 0x88, 0xE6, 0x55, 0x2C, 0xA1, 0xD6, 0xA1,
+ 0x55, 0x70, 0x94, 0x55, 0x95, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0x95, 0x55, 0x55, 0x95, 0x95, 0x55, 0x55,
+ 0x90, 0x90, 0x90, 0x90, 0xCB, 0x55, 0x55, 0x55,
+ 0xD6, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0xCB, 0x70,
+ 0x70, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x55,
+ 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x95, 0x2C, 0x95, 0x2C, 0xD6, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x80, 0xD6, 0xA1, 0xD6, 0xD6, 0xA1,
+ 0xCB, 0x70, 0x70, 0x95, 0x2C, 0xA1, 0xA1, 0x2C,
+ 0x2C, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0xD6, 0xA1, 0xA1, 0xA1, 0xA1, 0x55, 0x70, 0x94,
+ 0xCB, 0x95, 0xA1, 0xA1, 0x2C, 0x95, 0xCB, 0x55,
+ 0x90, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x95, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x95, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x88, 0x95, 0xA1, 0xA1, 0xA1, 0x55,
+ 0x70, 0x94, 0xCB, 0x95, 0xA1, 0xA1, 0x2C, 0x95,
+ 0xCB, 0xCB, 0x90, 0xCB, 0x55, 0x55, 0x55, 0x55,
+ 0x95, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0xCB, 0x70, 0x70,
+ 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x70, 0x90, 0xCB,
+ 0xCB, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x2C, 0xD6,
+ 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x70, 0x20, 0x20,
+ 0x88, 0x43, 0xD8, 0x43, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x88, 0x88, 0x43, 0x2B, 0xD8, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x3F, 0x2C, 0x95, 0x95, 0xCB,
+ 0x70, 0x70, 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x90,
+ 0x90, 0xCB, 0x55, 0xCB, 0x55, 0xCB, 0x55, 0x95,
+ 0x2C, 0xD6, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C,
+ 0xA1, 0x95, 0x95, 0x55, 0xCB, 0x70, 0x90, 0x55,
+ 0x2C, 0x2C, 0x2C, 0x55, 0x70, 0x70, 0x55, 0x95,
+ 0x95, 0xCB, 0x90, 0x90, 0x90, 0x95, 0x2C, 0xA1,
+ 0xD6, 0xD6, 0x2C, 0x2C, 0x95, 0x70, 0x20, 0x20,
+ 0x80, 0x2B, 0x34, 0x2B, 0x88, 0x20, 0x20, 0x20,
+ 0x88, 0xB1, 0x28, 0x28, 0x2B, 0x7D, 0x80, 0x20,
+ 0x20, 0x20, 0x20, 0x92, 0x95, 0x55, 0xCB, 0x70,
+ 0x90, 0x55, 0x2C, 0x2C, 0x2C, 0x55, 0x70, 0x70,
+ 0x55, 0x95, 0x55, 0x55, 0x90, 0x90, 0x90, 0x55,
+ 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x95,
+ 0xA1, 0x95, 0x55, 0xCB, 0x90, 0x70, 0xCB, 0x95,
+ 0xA1, 0x95, 0x95, 0xCB, 0x90, 0xCB, 0x95, 0x2C,
+ 0x95, 0x70, 0x70, 0x90, 0x55, 0x2C, 0xA1, 0xA1,
+ 0x2C, 0x2C, 0x55, 0xCB, 0x55, 0x90, 0x20, 0x34,
+ 0x90, 0x6D, 0x70, 0xD8, 0x43, 0x20, 0x20, 0x88,
+ 0x3F, 0x55, 0xA1, 0x2A, 0xD6, 0x7D, 0x43, 0x20,
+ 0x20, 0x20, 0x88, 0x7D, 0x55, 0xCB, 0x90, 0x70,
+ 0xCB, 0x95, 0xA1, 0x95, 0x95, 0xCB, 0x70, 0xCB,
+ 0x95, 0xA1, 0x95, 0x70, 0x70, 0xCB, 0x55, 0x2C,
+ 0xA1, 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x55, 0x95,
+ 0x2C, 0x55, 0x90, 0x70, 0x94, 0x90, 0x95, 0x2C,
+ 0x2C, 0x95, 0xCB, 0x90, 0x55, 0x95, 0xA1, 0xA1,
+ 0x95, 0x90, 0x90, 0x95, 0xA1, 0xD6, 0xD6, 0x6D,
+ 0xA1, 0x95, 0x55, 0xCB, 0x55, 0xCB, 0x20, 0x99,
+ 0xBF, 0xA3, 0xA3, 0x90, 0x20, 0x20, 0x20, 0x92,
+ 0x83, 0x6B, 0x6B, 0x6B, 0xA3, 0x70, 0x88, 0x20,
+ 0x20, 0x20, 0x20, 0x2B, 0x90, 0x70, 0x94, 0x90,
+ 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x90, 0x55, 0x95,
+ 0xA1, 0x2C, 0x55, 0x90, 0x90, 0x95, 0xA1, 0xD6,
+ 0xD6, 0x6D, 0xA1, 0x95, 0x55, 0xCB, 0x55, 0x55,
+ 0x2C, 0x55, 0x70, 0x70, 0x94, 0x90, 0x95, 0x2C,
+ 0x2C, 0x55, 0xCB, 0xCB, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x55, 0x55, 0x95, 0xA1, 0x6D, 0xBF, 0x6D, 0xD6,
+ 0x95, 0x55, 0x90, 0xCB, 0x55, 0x95, 0x88, 0x95,
+ 0x2C, 0x3F, 0x6D, 0x6B, 0x34, 0x20, 0x20, 0x47,
+ 0x65, 0xD6, 0xE1, 0x3F, 0x2A, 0x6B, 0x2B, 0x20,
+ 0x20, 0x20, 0x20, 0x43, 0x70, 0x70, 0x94, 0x90,
+ 0x95, 0x2C, 0x2C, 0x55, 0x55, 0x55, 0x95, 0x2C,
+ 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0xA1, 0x6D, 0xBF,
+ 0x6D, 0xD6, 0x2C, 0x55, 0x90, 0xCB, 0x95, 0x95,
+ 0x95, 0x55, 0x70, 0x94, 0x70, 0x55, 0x2C, 0xA1,
+ 0x2C, 0x55, 0xCB, 0x55, 0x2C, 0x95, 0x2C, 0x95,
+ 0x95, 0x95, 0xA1, 0x6D, 0xBF, 0x2A, 0xD6, 0x95,
+ 0x70, 0x94, 0x94, 0x70, 0x55, 0x55, 0x20, 0xBF,
+ 0xC9, 0xB1, 0x99, 0x42, 0xB1, 0x61, 0x7D, 0x94,
+ 0x65, 0xB1, 0x88, 0x99, 0xD5, 0xE5, 0x7F, 0x20,
+ 0x20, 0x20, 0x20, 0x43, 0x70, 0x94, 0x70, 0x55,
+ 0x2C, 0xA1, 0x2C, 0x55, 0x90, 0x55, 0x2C, 0x95,
+ 0x2C, 0x95, 0x95, 0x2C, 0xA1, 0x6D, 0xBF, 0xBF,
+ 0xD6, 0x55, 0x70, 0x94, 0x94, 0x70, 0xCB, 0x55,
+ 0x55, 0xCB, 0x70, 0x94, 0x70, 0x95, 0xA1, 0xA1,
+ 0x95, 0x55, 0x55, 0x95, 0x2C, 0x95, 0x95, 0x95,
+ 0x95, 0xA1, 0x6D, 0x2A, 0x2A, 0xD6, 0x55, 0x94,
+ 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x95, 0x20, 0x2A,
+ 0xD8, 0x43, 0xC9, 0x83, 0x98, 0x79, 0x34, 0x9F,
+ 0x6B, 0x43, 0x20, 0x88, 0x2B, 0x65, 0xA0, 0x20,
+ 0x20, 0x20, 0x20, 0xE1, 0x70, 0x94, 0x70, 0x95,
+ 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x95, 0x2C, 0x95,
+ 0x95, 0x95, 0x95, 0xA1, 0x6D, 0xBF, 0x2A, 0xD6,
+ 0x55, 0x94, 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x55,
+ 0x94, 0x70, 0x94, 0x47, 0x70, 0x95, 0x2C, 0x2C,
+ 0x95, 0xCB, 0x95, 0x2C, 0x2C, 0xA1, 0x2C, 0x2C,
+ 0xA1, 0xD6, 0x6D, 0x6D, 0xA1, 0xCB, 0x47, 0x28,
+ 0xE6, 0x47, 0x70, 0x55, 0x95, 0xA1, 0x20, 0x2C,
+ 0x7F, 0x88, 0xF0, 0xC6, 0x25, 0x5E, 0xCF, 0x2F,
+ 0xE7, 0x9A, 0x20, 0x88, 0x99, 0x65, 0x3F, 0x20,
+ 0x20, 0x20, 0x20, 0x34, 0x94, 0x47, 0x70, 0x95,
+ 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0x2C, 0x2C, 0xA1,
+ 0x2C, 0x2C, 0xA1, 0xD6, 0x6D, 0x6D, 0xA1, 0xCB,
+ 0x94, 0x28, 0xA0, 0x47, 0x70, 0x55, 0x95, 0x95,
+ 0x47, 0x70, 0x90, 0x94, 0x70, 0x95, 0xA1, 0x2C,
+ 0x55, 0x55, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C,
+ 0xA1, 0x6D, 0x2A, 0xD6, 0x55, 0x47, 0x28, 0x28,
+ 0x47, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0x20, 0x28,
+ 0xEC, 0x86, 0xBE, 0x48, 0x3E, 0x3E, 0x3A, 0x25,
+ 0x4E, 0xAE, 0x93, 0xD7, 0xEC, 0xD1, 0x34, 0x20,
+ 0x20, 0x20, 0x20, 0x43, 0x55, 0x94, 0x70, 0x95,
+ 0xA1, 0xA1, 0x55, 0xCB, 0x2C, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0x2C, 0xA1, 0x6D, 0x6D, 0xD6, 0x55, 0x47,
+ 0x28, 0x28, 0x47, 0x70, 0x55, 0x95, 0x2C, 0x2C,
+ 0x95, 0x95, 0x55, 0x90, 0xCB, 0x2C, 0xA1, 0xA1,
+ 0x55, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0xA1, 0x2C,
+ 0xD6, 0x6D, 0x6D, 0xA1, 0x70, 0x28, 0xD5, 0xE6,
+ 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0x20, 0xE1,
+ 0x26, 0x84, 0x76, 0x73, 0x9C, 0x22, 0x4E, 0x35,
+ 0x8C, 0x7A, 0x4E, 0xDC, 0x8E, 0x7E, 0x3D, 0x88,
+ 0x20, 0x20, 0x20, 0x88, 0x2C, 0x90, 0x90, 0x95,
+ 0xA1, 0x2C, 0x55, 0x55, 0x2C, 0xD6, 0xD6, 0xD6,
+ 0x2C, 0x2C, 0xD6, 0x2A, 0x6D, 0x2C, 0x70, 0x28,
+ 0xD5, 0xE6, 0x70, 0x55, 0x95, 0xA1, 0x2C, 0xA1,
+ 0xBF, 0xA1, 0x95, 0xCB, 0xCB, 0x2C, 0xA1, 0xA1,
+ 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, 0x95,
+ 0xD6, 0x6D, 0xD6, 0x95, 0x94, 0x28, 0xE6, 0x70,
+ 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0xD6, 0x20, 0x57,
+ 0xE4, 0xDF, 0x50, 0x3E, 0x22, 0x4E, 0x35, 0x8C,
+ 0x8C, 0x52, 0x52, 0x7A, 0x4E, 0x58, 0xD7, 0x20,
+ 0x20, 0x20, 0x20, 0x88, 0x2C, 0xCB, 0x55, 0x2C,
+ 0xA1, 0xA1, 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0xA1,
+ 0x2C, 0x95, 0xA1, 0x6D, 0x6D, 0x95, 0x47, 0xA0,
+ 0xE6, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0xA1,
+ 0xD2, 0x95, 0x55, 0x90, 0x55, 0x2C, 0xD6, 0xA1,
+ 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0x2C, 0x95, 0x2C,
+ 0xA1, 0x6D, 0xA1, 0x55, 0x94, 0x47, 0x94, 0xCB,
+ 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, 0x59, 0xC8,
+ 0xE3, 0x76, 0x2D, 0x3E, 0x22, 0x4E, 0x8C, 0x35,
+ 0x52, 0x52, 0xEE, 0x3A, 0x4D, 0xED, 0x24, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x28, 0xCB, 0x55, 0x2C,
+ 0xD6, 0xA1, 0x95, 0x95, 0xA1, 0xD6, 0xA1, 0x2C,
+ 0x95, 0x2C, 0xD6, 0x6D, 0xA1, 0x55, 0x94, 0xE6,
+ 0x70, 0xCB, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xA1,
+ 0xD0, 0x94, 0x94, 0x90, 0x55, 0x2C, 0xA1, 0xA1,
+ 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x2C,
+ 0xA1, 0xD6, 0x2C, 0x70, 0x94, 0x94, 0x94, 0x94,
+ 0x70, 0x55, 0xA1, 0xD6, 0xA1, 0xD6, 0x88, 0x77,
+ 0x38, 0xC4, 0x3E, 0x69, 0x4E, 0x35, 0x8C, 0xEE,
+ 0x35, 0x89, 0x30, 0x30, 0x4A, 0x48, 0x3C, 0x20,
+ 0x20, 0x88, 0x20, 0x20, 0xD8, 0x2C, 0x55, 0x2C,
+ 0xD6, 0xA1, 0x95, 0x95, 0x2C, 0xD6, 0xA1, 0x2C,
+ 0x95, 0x2C, 0xA1, 0xD6, 0x2C, 0x90, 0x94, 0x47,
+ 0x94, 0x94, 0x70, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
+ 0x95, 0x28, 0x47, 0x90, 0x95, 0x2C, 0xA1, 0x2C,
+ 0x95, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C,
+ 0xA1, 0xA1, 0x55, 0x70, 0x94, 0x47, 0x94, 0x94,
+ 0x70, 0x2C, 0xD6, 0xD6, 0x2C, 0xA1, 0x43, 0x98,
+ 0x54, 0x48, 0x3E, 0x22, 0x35, 0xEE, 0xEE, 0x9C,
+ 0x4D, 0x45, 0x75, 0x4A, 0xDF, 0x7B, 0x3D, 0x20,
+ 0xD8, 0x28, 0x2B, 0x88, 0x20, 0x95, 0x95, 0x2C,
+ 0xA1, 0x2C, 0x55, 0x55, 0x2C, 0xA1, 0xD6, 0xA1,
+ 0x2C, 0x95, 0xA1, 0x2C, 0x55, 0x70, 0x94, 0x94,
+ 0x94, 0x94, 0x70, 0x95, 0xD6, 0xD6, 0x2C, 0x95,
+ 0x70, 0x28, 0x47, 0x55, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x95, 0x95, 0x95, 0xA1, 0xA1, 0xA1, 0x95, 0x55,
+ 0x95, 0x95, 0x55, 0x70, 0x70, 0x70, 0x94, 0x70,
+ 0x55, 0xD6, 0x6D, 0xD6, 0x95, 0x2C, 0x20, 0x43,
+ 0xBB, 0xC8, 0x36, 0x30, 0x30, 0x38, 0x45, 0x6E,
+ 0xE3, 0x75, 0x78, 0x37, 0xBD, 0xD9, 0x3F, 0x20,
+ 0x88, 0xD5, 0x70, 0xB1, 0x88, 0xA0, 0x95, 0x2C,
+ 0x2C, 0xA1, 0x95, 0x55, 0x95, 0xA1, 0xA1, 0xA1,
+ 0x2C, 0x55, 0x95, 0x2C, 0x55, 0x70, 0x70, 0x70,
+ 0x94, 0x70, 0x55, 0xD6, 0x6D, 0x6D, 0x95, 0x55,
+ 0x94, 0x47, 0x70, 0x95, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x55,
+ 0x55, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0x95,
+ 0xA1, 0x6D, 0x4B, 0xD6, 0x55, 0xD6, 0x20, 0xD8,
+ 0xD6, 0x67, 0xDA, 0x4D, 0xED, 0x62, 0x78, 0x78,
+ 0x23, 0x84, 0x67, 0xF5, 0x4B, 0xBF, 0x90, 0x88,
+ 0x88, 0x2B, 0x47, 0x99, 0x20, 0x43, 0xD6, 0x2C,
+ 0x2C, 0xA1, 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1,
+ 0x95, 0x95, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x95, 0xD6, 0x6D, 0xBF, 0xD6, 0x55, 0xCB,
+ 0x55, 0x55, 0x55, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0x2C, 0x2C, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x95,
+ 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0x6D, 0x2A, 0x2A, 0xA1, 0x55, 0x55, 0x20, 0xD8,
+ 0x6D, 0xAB, 0x96, 0x7E, 0x64, 0x53, 0x36, 0x36,
+ 0xC6, 0x63, 0x6D, 0xD0, 0x6B, 0xE5, 0xA3, 0x7D,
+ 0x20, 0x88, 0x80, 0x88, 0x20, 0x20, 0xC9, 0xA1,
+ 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0xA1, 0xA1, 0xA1,
+ 0x95, 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0xA1, 0x6D, 0xBF, 0x6D, 0xA1, 0x55, 0x55,
+ 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0xA1, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x95,
+ 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xD6,
+ 0x6D, 0x6D, 0xA1, 0x55, 0x2C, 0xD8, 0x20, 0xB1,
+ 0xA3, 0x4B, 0x6D, 0xD9, 0xA7, 0x6C, 0xAF, 0xB2,
+ 0x6D, 0x2A, 0x83, 0x42, 0xE5, 0xE5, 0x65, 0x2C,
+ 0x20, 0x20, 0x88, 0x20, 0x20, 0x20, 0x88, 0x95,
+ 0x2C, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x95, 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1,
+ 0xD6, 0xD6, 0x6D, 0x6D, 0xA1, 0x55, 0xCB, 0x55,
+ 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x95, 0x2C,
+ 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95,
+ 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xA1,
+ 0xA1, 0x2C, 0x55, 0x55, 0x28, 0x88, 0x43, 0x2A,
+ 0xE5, 0xA3, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D,
+ 0xBF, 0xA3, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0x65,
+ 0xB1, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD8,
+ 0xD6, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x2C,
+ 0x95, 0x95, 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x90, 0x90, 0x55,
+ 0x90, 0xCB, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x2C, 0x2C, 0x95, 0x55, 0x95, 0x95, 0x95, 0x55,
+ 0x55, 0xCB, 0x55, 0x2C, 0x95, 0x95, 0x95, 0x95,
+ 0x55, 0x90, 0x90, 0x90, 0xE1, 0x43, 0x28, 0xE5,
+ 0xE5, 0x65, 0xD0, 0x6D, 0x6D, 0x6D, 0x2A, 0xD2,
+ 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xD6, 0x20, 0x20, 0x20, 0x20, 0x20, 0x88, 0x88,
+ 0xD5, 0x2C, 0x2C, 0x2C, 0x95, 0x55, 0x95, 0x95,
+ 0x95, 0x55, 0x55, 0xCB, 0x55, 0x95, 0x2C, 0x95,
+ 0x95, 0x95, 0x55, 0x90, 0x70, 0x70, 0x70, 0x90,
+ 0x70, 0x70, 0xCB, 0x55, 0x55, 0x95, 0x95, 0x95,
+ 0x2C, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0xCB,
+ 0x70, 0x70, 0x70, 0xCB, 0x90, 0x90, 0x70, 0x94,
+ 0x94, 0x94, 0x2C, 0x80, 0x20, 0xE1, 0xA3, 0xE5,
+ 0xE5, 0xE5, 0x42, 0xEC, 0xD0, 0x83, 0xA3, 0x65,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0x65, 0x7D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x88, 0x2C, 0x95, 0x95, 0x95, 0x55, 0x55, 0x55,
+ 0x55, 0xCB, 0x70, 0x70, 0x90, 0x90, 0x90, 0x90,
+ 0x70, 0x94, 0x94, 0x94, 0x70, 0x70, 0x70, 0x70,
+ 0x70, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95, 0x95,
+ 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x90, 0x70, 0x90, 0x55, 0x55, 0xCB, 0x70, 0x94,
+ 0x94, 0x95, 0xD8, 0x20, 0x88, 0x70, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0x47, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0xE1, 0x6D, 0x2C, 0x95, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x90, 0x70, 0x70, 0x55, 0x55, 0xCB,
+ 0x70, 0x94, 0x94, 0x94, 0x70, 0x90, 0x70, 0x94,
+ 0x55, 0x2C, 0x2C, 0x2C, 0x95, 0x2C, 0x95, 0x95,
+ 0x2C, 0x2C, 0x2C, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xCB, 0xCB, 0x95, 0x2C, 0x2C, 0x95, 0x55, 0x90,
+ 0x55, 0x99, 0x20, 0x20, 0xE1, 0xA3, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xD6, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x2B, 0x6D, 0x95, 0x95, 0x55, 0x55,
+ 0x55, 0x55, 0xCB, 0x55, 0x95, 0x2C, 0x2C, 0x95,
+ 0x55, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x90, 0x70,
+ 0x2C, 0xD6, 0xD6, 0x2C, 0x2C, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0x55, 0x95,
+ 0xE6, 0x88, 0x20, 0x20, 0x3F, 0xA3, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0x42, 0xA3, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x88, 0x2B, 0xD6, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x95,
+ 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, 0x55, 0x55,
+ 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x2C,
+ 0x2C, 0x2C, 0x95, 0x2C, 0x95, 0x95, 0x55, 0x95,
+ 0x95, 0x2C, 0x2C, 0x2C, 0x95, 0xCB, 0xCB, 0x94,
+ 0x20, 0x20, 0x20, 0x20, 0xE6, 0x83, 0x65, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0x6B, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0x6B, 0xA3, 0xD2,
+ 0xD2, 0x6B, 0xC9, 0x20, 0x20, 0x88, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x88, 0x8A, 0xA1, 0x95, 0x95,
+ 0x95, 0x55, 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0xCB,
+ 0xCB, 0x55, 0x95, 0x95, 0x95, 0x55, 0x55, 0x95,
+ 0x6D, 0x6D, 0x6D, 0xD6, 0xA1, 0x2C, 0x2C, 0x95,
+ 0x2C, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x55, 0x70, 0x70, 0x2C, 0x80,
+ 0x88, 0x20, 0x20, 0x80, 0x94, 0xD6, 0x32, 0x6B,
+ 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xA3, 0xD2, 0xD0, 0xBF, 0x2A,
+ 0x2A, 0xD0, 0x6D, 0x34, 0x20, 0xE1, 0x88, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x88, 0xA1, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, 0x70, 0x70,
+ 0x70, 0x90, 0xCB, 0xCB, 0xCB, 0x95, 0x95, 0x2C,
+ 0xD0, 0x6D, 0xD6, 0xD6, 0xA1, 0xA1, 0xA1, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x55, 0x95,
+ 0x95, 0x2C, 0x95, 0x55, 0xCB, 0xCB, 0x95, 0x88,
+ 0x20, 0x20, 0x88, 0xD8, 0x2C, 0xD1, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x65, 0x65, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0xEC,
+ 0xBF, 0x2A, 0xEC, 0x95, 0x20, 0x34, 0x2B, 0xE1,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, 0x95, 0x55,
+ 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, 0xCB, 0xCB,
+ 0x55, 0x55, 0xCB, 0xCB, 0xCB, 0x55, 0x95, 0x95,
+ 0x32, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C,
+ 0xA1, 0x95, 0x95, 0x95, 0x55, 0xCB, 0xCB, 0x55,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, 0x99, 0x20,
+ 0xE1, 0xE1, 0x43, 0x47, 0x6B, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0x42, 0xEC, 0xBF, 0xA3, 0x8A, 0x20, 0x88, 0xD8,
+ 0x2B, 0x20, 0x20, 0x20, 0x88, 0x88, 0x2C, 0xCB,
+ 0xCB, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x55, 0x95,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x95,
+ 0x6D, 0x55, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x95,
+ 0x2C, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0xA1, 0x34, 0x20,
+ 0xC9, 0x20, 0xE1, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xA3, 0x83, 0x6D, 0x20, 0x88, 0x88,
+ 0x2B, 0x34, 0x20, 0x20, 0x20, 0x88, 0xD5, 0x55,
+ 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x55, 0x55, 0x95, 0x95,
+ 0x2C, 0x55, 0xCB, 0x55, 0xCB, 0x55, 0x55, 0x95,
+ 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x95, 0x95, 0x55, 0x95, 0x2C, 0x20, 0xD8,
+ 0xE1, 0x20, 0x70, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x65, 0xA3, 0x92, 0x43, 0x7D,
+ 0xD8, 0xC9, 0x88, 0x20, 0x20, 0x20, 0x43, 0xD6,
+ 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x55, 0x95, 0x2C,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95, 0x2C,
+ 0xA1, 0x55, 0x55, 0x55, 0x55, 0x95, 0x95, 0x55,
+ 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0xA1, 0x2C,
+ 0xA1, 0x2C, 0x2C, 0x95, 0x2C, 0x99, 0x88, 0xB1,
+ 0x20, 0xD8, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x34, 0x8A,
+ 0xC9, 0x34, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x90,
+ 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x95, 0x95, 0x2C,
+ 0x2C, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
+ 0xD6, 0x2C, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x55, 0xCB, 0x55, 0x2C, 0x2C, 0xA1, 0x2C, 0xA1,
+ 0xA1, 0xA1, 0x2C, 0x2C, 0x6D, 0x43, 0xD8, 0x80,
+ 0x88, 0xCB, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x32, 0x80, 0xE1,
+ 0x80, 0x20, 0xB1, 0x20, 0x20, 0x20, 0x20, 0xC9,
+ 0xD6, 0xA1, 0xA1, 0xA1, 0x2C, 0xA1, 0x2C, 0x2C,
+ 0x2C, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95, 0x55,
+ 0xD6, 0x95, 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x2C,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x95, 0xCB, 0x20, 0xC9, 0x20,
+ 0xE1, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xD8, 0x20,
+ 0x20, 0x20, 0x2B, 0x43, 0x20, 0x20, 0x20, 0x88,
+ 0xD6, 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x55,
+ 0x95, 0x55, 0x55, 0xCB, 0x55, 0xCB, 0xCB, 0x55,
+ 0x2C, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0x95,
+ 0x55, 0x95, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x55, 0xCB, 0x70, 0xCB, 0xC9, 0x80, 0x2B, 0x20,
+ 0xA0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x92, 0x20,
+ 0x20, 0x20, 0xE1, 0xD8, 0x20, 0x20, 0x20, 0x20,
+ 0x95, 0x95, 0x55, 0xCB, 0x90, 0x90, 0x70, 0x90,
+ 0x90, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x55, 0x95,
+ 0x95, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x95, 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x55,
+ 0x90, 0x47, 0xA0, 0x55, 0x20, 0x2B, 0x43, 0x88,
+ 0x6D, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x28, 0x20,
+ 0x20, 0x20, 0xE1, 0xE1, 0x20, 0x20, 0x20, 0x20,
+ 0x28, 0x55, 0x90, 0x47, 0xA0, 0x47, 0x94, 0x70,
+ 0x55, 0x95, 0x95, 0x55, 0xCB, 0x55, 0x55, 0x2C,
+ 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x55,
+ 0x94, 0xE6, 0x70, 0x2B, 0x88, 0x2B, 0x88, 0xE1,
+ 0x65, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x47, 0x20,
+ 0x20, 0x20, 0xE1, 0x34, 0x20, 0x20, 0x20, 0x20,
+ 0xB1, 0x95, 0x94, 0xE6, 0xA0, 0x47, 0x70, 0x55,
+ 0x2C, 0xA1, 0x2C, 0x55, 0x90, 0xCB, 0x2C, 0xD6,
+ 0x6D, 0xA1, 0x2C, 0x95, 0x95, 0xA1, 0x2C, 0xA1,
+ 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x55,
+ 0x70, 0xE6, 0x70, 0x20, 0x20, 0x7D, 0x20, 0x8A,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x65, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x94, 0x20,
+ 0x20, 0x20, 0xD8, 0x88, 0x20, 0x20, 0x20, 0x20,
+ 0xD8, 0x2C, 0x94, 0x47, 0x47, 0x90, 0x95, 0x95,
+ 0xA1, 0x6D, 0xA1, 0x90, 0x94, 0x55, 0x2C, 0xD6,
+ 0xD0, 0xA1, 0x95, 0x95, 0x2C, 0x2C, 0xA1, 0x2C,
+ 0x95, 0x95, 0x55, 0x55, 0x55, 0x95, 0x2C, 0x2C,
+ 0xCB, 0x95, 0xD8, 0x20, 0x20, 0xB1, 0x88, 0x28,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE2, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20,
+ 0x20, 0x20, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x88, 0xD6, 0x55, 0x47, 0x94, 0x55, 0x2C, 0xA1,
+ 0xA1, 0xD6, 0x95, 0x94, 0x94, 0x55, 0xD6, 0x6D,
+ 0xBF, 0x95, 0x90, 0xCB, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x55, 0x95, 0xCB, 0x90, 0x90, 0x95, 0x2C, 0x95,
+ 0x90, 0x70, 0x20, 0x20, 0x34, 0x8A, 0x20, 0x94,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20,
+ 0x20, 0x88, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x88, 0xD6, 0xCB, 0x47, 0x94, 0x55, 0xA1, 0xD6,
+ 0xD6, 0x2C, 0xCB, 0x47, 0x70, 0xA1, 0x6D, 0x2A,
+ 0x95, 0x47, 0x47, 0x70, 0x95, 0xA1, 0x2C, 0x95,
+ 0x55, 0x55, 0x90, 0x90, 0x55, 0x55, 0x55, 0x90,
+ 0x47, 0xD5, 0x20, 0x20, 0x80, 0xD5, 0x43, 0xCB,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20,
+ 0x20, 0x80, 0x34, 0x20, 0x20, 0x20, 0x88, 0x20,
+ 0x20, 0x2C, 0x47, 0xE6, 0x70, 0x2C, 0xD6, 0xD6,
+ 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0xA1, 0x6D, 0xD6,
+ 0x90, 0x47, 0x47, 0x90, 0x2C, 0xA1, 0x2C, 0x95,
+ 0x55, 0x55, 0x90, 0x90, 0x55, 0x55, 0x55, 0x70,
+ 0x94, 0x8A, 0x20, 0x88, 0x88, 0xE1, 0xD8, 0x95,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE2, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x47, 0x20,
+ 0x43, 0x7D, 0x43, 0x80, 0x88, 0x20, 0x20, 0x20,
+ 0x88, 0xCB, 0x94, 0x70, 0x55, 0xA1, 0xD6, 0xD6,
+ 0xA1, 0x2C, 0x2C, 0x95, 0xA1, 0xA1, 0xD6, 0xA1,
+ 0x94, 0xE6, 0x47, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
+ 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0xCB,
+ 0x55, 0xA0, 0x43, 0x86, 0x86, 0x43, 0xD8, 0xCB,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x3F, 0x80,
+ 0xD8, 0x80, 0x88, 0x34, 0xD8, 0x2B, 0xD8, 0x20,
+ 0x99, 0x90, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6,
+ 0xA1, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C,
+ 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x95, 0x44, 0xBC, 0x3E, 0x5D, 0xD3, 0x79, 0x92,
+ 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x65, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0x9A, 0x34,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x99, 0xE1,
+ 0x70, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xD6, 0xA1,
+ 0x2C, 0x95, 0x55, 0x55, 0x95, 0x95, 0x95, 0x95,
+ 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0x95,
+ 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55, 0x2C, 0x2C,
+ 0x32, 0x9D, 0xEB, 0x5D, 0x69, 0x49, 0x84, 0xF0,
+ 0xB1, 0xEC, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xC1, 0x4E, 0x21, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0xC9, 0xD8,
+ 0xBB, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C,
+ 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C,
+ 0x55, 0xCB, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x55,
+ 0x90, 0x70, 0x90, 0x55, 0x95, 0x95, 0x6D, 0xD0,
+ 0xC2, 0x48, 0x6A, 0x49, 0x69, 0x82, 0x5D, 0x2F,
+ 0x59, 0x7D, 0xBF, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xEA, 0xC7, 0x7E, 0x66,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x43, 0x5A,
+ 0x46, 0x27, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x95,
+ 0x95, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1, 0x95, 0x55,
+ 0x94, 0x94, 0x2C, 0x2A, 0x72, 0x3B, 0x56, 0xDD,
+ 0xDF, 0x29, 0x5D, 0x49, 0x89, 0x5D, 0x3E, 0x69,
+ 0x93, 0x66, 0x34, 0xA1, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x65, 0x42, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xEA, 0x3E, 0x5A, 0x66,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x5B, 0x73,
+ 0x89, 0x4C, 0xBF, 0x2C, 0x95, 0x2C, 0x2C, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x2C, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0x2C, 0xCB,
+ 0x70, 0x55, 0xE7, 0x60, 0x4A, 0x48, 0xCD, 0x4A,
+ 0x29, 0x73, 0x5D, 0x82, 0x49, 0x49, 0x49, 0x49,
+ 0x3A, 0x57, 0x88, 0x88, 0x70, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0x42, 0x73, 0x50, 0xBE, 0x79,
+ 0x20, 0x20, 0x20, 0x20, 0x66, 0xCC, 0x37, 0x9C,
+ 0x3E, 0xCE, 0xBF, 0x95, 0x95, 0x95, 0x2C, 0x95,
+ 0x95, 0x55, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0x55,
+ 0xA1, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x55, 0x94,
+ 0x94, 0xE8, 0x60, 0xC4, 0x3E, 0x2D, 0x2D, 0x2D,
+ 0x33, 0x5D, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x89, 0xAA, 0x59, 0x20, 0x20, 0x28, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xEC, 0x4A, 0x2D, 0x50, 0x78, 0x2E,
+ 0x57, 0x51, 0xF0, 0x57, 0x31, 0x4D, 0x50, 0x2D,
+ 0x5D, 0xF2, 0xA1, 0x2C, 0x95, 0x95, 0x55, 0x55,
+ 0x90, 0x90, 0x70, 0x90, 0xCB, 0x55, 0x55, 0x55,
+ 0x6D, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0x55, 0x94,
+ 0x70, 0xB9, 0x75, 0x50, 0x3E, 0x49, 0x49, 0x49,
+ 0x5D, 0x82, 0x49, 0x49, 0x82, 0x49, 0x49, 0x49,
+ 0x89, 0x69, 0x4F, 0x20, 0x20, 0x20, 0x8A, 0x42,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0x83, 0x4A, 0x3A, 0x50, 0x62, 0x23,
+ 0x81, 0xB8, 0xB8, 0xE9, 0x5F, 0x29, 0x33, 0x5D,
+ 0x5D, 0x73, 0xE8, 0xCB, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0xD6, 0xA1, 0xA1, 0xA1, 0xA1, 0x55, 0x70, 0x70,
+ 0xCB, 0x68, 0x75, 0x50, 0x82, 0x49, 0x49, 0x49,
+ 0x5D, 0x49, 0x49, 0x5D, 0x49, 0x49, 0x5D, 0x82,
+ 0x69, 0x5D, 0x25, 0xF0, 0x20, 0x20, 0x20, 0xE1,
+ 0x2A, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0x4B, 0xF4, 0xDF, 0x50, 0x73, 0x76, 0x48,
+ 0x75, 0xDF, 0x75, 0x62, 0xC4, 0x33, 0x82, 0x49,
+ 0x5D, 0x5D, 0xA8, 0xF5, 0x55, 0x55, 0x55, 0x55,
+ 0x2C, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0xCB, 0x70, 0x70,
+ 0x95, 0x83, 0x5F, 0xEA, 0x2D, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x5D, 0x49, 0x22, 0x5A, 0x79, 0x20, 0x20, 0x20,
+ 0x80, 0xD2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0x65, 0xD0, 0x63, 0x5F, 0x29, 0x2D, 0x2D, 0xEA,
+ 0x29, 0x29, 0x76, 0x50, 0x2D, 0x82, 0x49, 0x49,
+ 0x3E, 0x49, 0x5C, 0xB0, 0xBA, 0x95, 0x55, 0x55,
+ 0x2C, 0xA1, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C,
+ 0xA1, 0x95, 0x95, 0x55, 0xCB, 0x70, 0x70, 0x55,
+ 0x2C, 0x83, 0x60, 0x76, 0x5D, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x5D, 0x89, 0xDC, 0x8B, 0x20, 0x20, 0x20,
+ 0x20, 0x95, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE2, 0x32, 0x85, 0xE3, 0x29, 0x2D, 0x33, 0x2D,
+ 0x2D, 0x2D, 0x6A, 0x2D, 0x33, 0x5D, 0x49, 0x82,
+ 0x49, 0x49, 0x82, 0x73, 0x5C, 0x9E, 0x2C, 0x55,
+ 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x95,
+ 0x2C, 0x95, 0x55, 0xCB, 0x90, 0x90, 0xCB, 0x95,
+ 0x2C, 0x6D, 0x41, 0x6F, 0x3E, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x82, 0x3E, 0x4E, 0x38, 0xCA, 0x20, 0x20,
+ 0x20, 0x55, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x65,
+ 0x42, 0xA0, 0xD4, 0xE3, 0x29, 0x2D, 0x82, 0x5D,
+ 0x5D, 0x82, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x3E, 0x49, 0x49, 0x49, 0x5C, 0x56, 0xD6,
+ 0xA1, 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x55, 0x95,
+ 0xA1, 0x55, 0x90, 0x70, 0x94, 0x70, 0x95, 0x2C,
+ 0x2C, 0xD6, 0xDD, 0x6F, 0x33, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x5D, 0x5D, 0x82, 0x69, 0x22, 0x62, 0x80, 0x34,
+ 0x94, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0xE5, 0x65, 0x6B,
+ 0xD5, 0x88, 0x5B, 0xE3, 0x29, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x49, 0x49, 0x49, 0x82,
+ 0x49, 0x49, 0x89, 0x49, 0x82, 0x49, 0x71, 0xBA,
+ 0x6D, 0x6D, 0xA1, 0x95, 0x55, 0xCB, 0x55, 0x55,
+ 0x2C, 0x55, 0x70, 0x70, 0x70, 0x90, 0x95, 0xA1,
+ 0x2C, 0xA1, 0x41, 0x76, 0x5D, 0x5D, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x5D, 0x82, 0x5D, 0x89, 0x5E, 0x96, 0x65,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0x65, 0xEC, 0xB1,
+ 0x20, 0x20, 0xCA, 0x23, 0x29, 0x33, 0x49, 0x5D,
+ 0x49, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49, 0x82,
+ 0x49, 0x82, 0x5D, 0x5D, 0x5D, 0x2D, 0x5C, 0x8F,
+ 0x6D, 0xD6, 0x2C, 0x55, 0x90, 0xCB, 0x95, 0x95,
+ 0x95, 0x55, 0x70, 0x94, 0x70, 0x55, 0x2C, 0xA1,
+ 0x95, 0xE8, 0x5F, 0x76, 0x33, 0x5D, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x3E, 0x9C, 0x2F, 0x68,
+ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
+ 0x65, 0xE5, 0x65, 0xE5, 0x6B, 0x90, 0x80, 0x20,
+ 0x20, 0x20, 0x4F, 0x81, 0x50, 0x3E, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x69, 0x69, 0x49, 0x5D, 0x2D, 0xC4, 0x46, 0xA3,
+ 0xD6, 0x55, 0x70, 0x94, 0x94, 0x70, 0xCB, 0x55,
+ 0x55, 0xCB, 0x70, 0x47, 0x70, 0x95, 0xA1, 0xA1,
+ 0x95, 0xBD, 0x75, 0x2D, 0x33, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x5D, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x5D, 0x2D, 0xB5, 0xDB,
+ 0xD6, 0x65, 0xE5, 0x65, 0xE5, 0xE5, 0x65, 0xE5,
+ 0x65, 0x65, 0x6B, 0x95, 0x2B, 0x88, 0x20, 0x20,
+ 0x20, 0x20, 0x8B, 0x81, 0x29, 0x33, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x3E, 0x3E, 0x5E, 0x41, 0x97, 0x27, 0xD6,
+ 0x55, 0x94, 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x55,
+ 0x94, 0x70, 0x94, 0x94, 0x70, 0x55, 0xA1, 0x2C,
+ 0x6D, 0xC5, 0x39, 0x6A, 0x5D, 0x5D, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x3E, 0xEA, 0x30, 0x77,
+ 0xE1, 0xC9, 0x94, 0x2C, 0xD6, 0xD6, 0xA1, 0x55,
+ 0x47, 0x9F, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x80, 0x91, 0x81, 0x6A, 0x2D, 0x49, 0x49,
+ 0x49, 0x5D, 0x5D, 0x49, 0x49, 0x5D, 0x5D, 0x82,
+ 0xEB, 0x4A, 0x41, 0xC2, 0x8F, 0xF5, 0xA1, 0x55,
+ 0x94, 0x28, 0xA0, 0x47, 0x70, 0x55, 0x95, 0x95,
+ 0x47, 0x70, 0x70, 0x94, 0x90, 0x95, 0xA1, 0x2C,
+ 0xE8, 0xA6, 0x39, 0x76, 0x50, 0x50, 0x2D, 0x2D,
+ 0x3E, 0x3E, 0x5D, 0x3E, 0x5D, 0x5D, 0x49, 0x82,
+ 0x49, 0x49, 0x49, 0x82, 0x82, 0x50, 0x75, 0xE0,
+ 0x57, 0x20, 0x88, 0x88, 0x20, 0x20, 0x88, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x79, 0x91, 0x81, 0x76, 0x33, 0x49, 0x49,
+ 0x5D, 0x82, 0x49, 0x49, 0x3E, 0x6A, 0xEA, 0x29,
+ 0xDF, 0x97, 0xBF, 0x6D, 0x6D, 0xD6, 0x55, 0x47,
+ 0x28, 0x28, 0x47, 0x70, 0x55, 0x95, 0x2C, 0x2C,
+ 0x95, 0x95, 0x55, 0x90, 0x90, 0x95, 0xA1, 0xA1,
+ 0xD6, 0x26, 0x45, 0x81, 0x5F, 0x30, 0x48, 0x6F,
+ 0x6F, 0x29, 0x29, 0x6A, 0x2D, 0x2D, 0x5D, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x2D, 0x76, 0x6E, 0x77,
+ 0x5B, 0x66, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x79, 0xA9, 0xB8, 0x39, 0x50, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x3E, 0x2D, 0x29, 0x76, 0xCD, 0x37,
+ 0xB9, 0xA1, 0xA1, 0x6D, 0x6D, 0x2C, 0x94, 0x28,
+ 0xD5, 0xE6, 0x70, 0x55, 0x95, 0xA1, 0x2C, 0xA1,
+ 0xBF, 0xA1, 0x95, 0xCB, 0x55, 0x95, 0xA1, 0x2C,
+ 0x95, 0x83, 0xDE, 0x87, 0xB6, 0xBE, 0x40, 0x6E,
+ 0x81, 0x81, 0x78, 0x78, 0x39, 0x6F, 0xEA, 0x2D,
+ 0x2D, 0x33, 0x33, 0x33, 0x76, 0x30, 0x64, 0x54,
+ 0x5B, 0x66, 0x20, 0x20, 0x66, 0x20, 0x88, 0x20,
+ 0x20, 0x20, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x88, 0x34, 0x8B, 0xF1, 0x23, 0x6F, 0x50, 0x2D,
+ 0x2D, 0x6A, 0x29, 0x6F, 0x78, 0x84, 0x9B, 0xD2,
+ 0x2C, 0x2C, 0xD6, 0x6D, 0x6D, 0x2C, 0x47, 0xA0,
+ 0xE6, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0xA1,
+ 0xD2, 0x95, 0x55, 0xCB, 0x55, 0x2C, 0xD6, 0xA1,
+ 0x95, 0x95, 0xA1, 0xD6, 0x6D, 0x6D, 0xBA, 0xF3,
+ 0x8D, 0x36, 0x74, 0x36, 0xF1, 0xB8, 0x23, 0x78,
+ 0x62, 0x4A, 0x29, 0x62, 0x23, 0xF1, 0x54, 0x31,
+ 0x57, 0x2B, 0x90, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C, 0xCB,
+ 0xE6, 0x7D, 0xCA, 0xB7, 0xB8, 0x75, 0x6F, 0x6F,
+ 0x76, 0x6F, 0x78, 0x81, 0x53, 0xBD, 0x6D, 0x2C,
+ 0x95, 0x95, 0xA1, 0x6D, 0xA1, 0x55, 0x94, 0xE6,
+ 0x70, 0xCB, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xA1,
+ 0xD0, 0x94, 0x94, 0x90, 0x95, 0x2C, 0xD6, 0xA1,
+ 0x95, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x2C,
+ 0xD6, 0x68, 0xAB, 0x6C, 0xA4, 0x77, 0x77, 0xAD,
+ 0x40, 0x53, 0x6E, 0x40, 0xB7, 0x54, 0x31, 0xD7,
+ 0xAC, 0xD6, 0x55, 0x55, 0x95, 0x95, 0x95, 0x55,
+ 0x95, 0x2C, 0x2C, 0xA1, 0x95, 0x95, 0x2C, 0xA1,
+ 0x6D, 0xD2, 0x7C, 0x54, 0xAD, 0x40, 0x6E, 0x81,
+ 0x81, 0x6E, 0x36, 0xDA, 0xE8, 0xD6, 0xD6, 0x2C,
+ 0x2C, 0x2C, 0xA1, 0xD6, 0x95, 0x90, 0x94, 0x47,
+ 0x94, 0x94, 0x70, 0x55, 0x2C, 0xD6, 0xA1, 0x95,
+ 0x95, 0x28, 0x47, 0x90, 0x95, 0x2C, 0xA1, 0x2C,
+ 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0xA1, 0x55, 0x70, 0x95, 0x2C, 0xB2, 0xB4,
+ 0xC3, 0xC3, 0x54, 0x54, 0xA9, 0x31, 0xCA, 0x2A,
+ 0x95, 0x90, 0x55, 0x95, 0x2C, 0xA1, 0x2C, 0x95,
+ 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xD6,
+ 0x6D, 0x2A, 0xB2, 0x4F, 0x31, 0x2E, 0xE0, 0xAD,
+ 0xB7, 0xC8, 0xB4, 0xF5, 0x2C, 0xA1, 0xA1, 0xA1,
+ 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0x70, 0x94, 0x94,
+ 0x94, 0x94, 0x70, 0x95, 0xD6, 0xD6, 0x2C, 0x95,
+ 0x94, 0x28, 0x47, 0xCB, 0x95, 0x2C, 0xA1, 0xA1,
+ 0x95, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x95,
+ 0x95, 0x2C, 0x55, 0x70, 0x70, 0x70, 0x94, 0x2C,
+ 0x63, 0xBB, 0xA5, 0xD7, 0xCA, 0xB3, 0x6D, 0x2C,
+ 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x95, 0x95,
+ 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0xD6, 0x2C, 0x70, 0x95, 0xAC, 0xC0, 0xDB, 0xEF,
+ 0xEF, 0xA2, 0xE8, 0x95, 0x95, 0xA1, 0xD6, 0xA1,
+ 0x95, 0x55, 0x2C, 0x95, 0x55, 0x70, 0x70, 0x70,
+ 0x94, 0x70, 0x55, 0xD6, 0x6D, 0x6D, 0x95, 0x55,
+ 0x70, 0x47, 0x70, 0x95, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x55,
+ 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x95,
+ 0xA1, 0xF5, 0xBF, 0xBF, 0xA1, 0x95, 0x95, 0x95,
+ 0x95, 0x55, 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x95,
+ 0x95, 0x95, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0xA1,
+ 0x2C, 0x55, 0x70, 0x94, 0x90, 0x2C, 0x6D, 0x6D,
+ 0x6D, 0xA1, 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1,
+ 0x2C, 0x55, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x95, 0xD6, 0x6D, 0xBF, 0xD6, 0x55, 0xCB,
+ 0x55, 0x55, 0x55, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0xA1, 0x95, 0x2C, 0xA1, 0xA1, 0xA1, 0x2C, 0x95,
+ 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1,
+ 0x6D, 0xBF, 0x6D, 0x2C, 0x55, 0x55, 0x95, 0x95,
+ 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x95,
+ 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C,
+ 0xA1, 0x95, 0xCB, 0xCB, 0x95, 0x95, 0x2C, 0x2C,
+ 0x2C, 0xA1, 0x2C, 0x2C, 0x2C, 0xA1, 0xA1, 0x2C,
+ 0x2C, 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0xA1, 0x6D, 0xBF, 0x6D, 0xA1, 0x55, 0x55,
+ 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x95,
+ 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xD6,
+ 0x6D, 0x6D, 0xA1, 0x95, 0xCB, 0x55, 0x95, 0x55,
+ 0x90, 0x70, 0xCB, 0xCB, 0x90, 0xCB, 0x95, 0x95,
+ 0x2C, 0x2C, 0xA1, 0xD6, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0xA1, 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C,
+ 0x2C, 0x95, 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1,
+ 0xD6, 0xD6, 0x6D, 0x6D, 0xA1, 0x55, 0xCB, 0x55
+};
+
+#endif
+
+#ifdef INCLUDE_LINUX_LOGOBW
+
+unsigned char linux_logo_bw[] __initdata = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
+ 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFE, 0x3F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xC7, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC3,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF,
+ 0xFB, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFD, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF,
+ 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xCF, 0xC3, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x87, 0x81, 0xF9,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7,
+ 0x99, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xF3, 0xBC, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0,
+ 0x19, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xC0, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80,
+ 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xC0, 0x21, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0xC0, 0x1F,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C,
+ 0xC0, 0x7C, 0x04, 0x81, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xE3, 0x80, 0x00, 0x7C, 0x40, 0x11, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0xD2, 0x29,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F,
+ 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00,
+ 0x00, 0x3F, 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x19, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1E, 0x80, 0x19,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1E,
+ 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x00,
+ 0x00, 0x0F, 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xF8, 0x00, 0x00, 0x0E, 0x80, 0x11, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x06, 0x00, 0x11,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x06,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00,
+ 0x00, 0x02, 0x00, 0x09, 0xFF, 0xFF, 0xFF, 0xF1,
+ 0xF0, 0x00, 0x00, 0x02, 0x80, 0x10, 0xFF, 0xFF,
+ 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x97, 0x10,
+ 0xFF, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x00, 0x00,
+ 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00,
+ 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC7,
+ 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0x01,
+ 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00,
+ 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F,
+ 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0x18,
+ 0xFF, 0xFF, 0xFF, 0x9E, 0x80, 0x00, 0x00, 0x03,
+ 0xA8, 0x11, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00,
+ 0x00, 0x02, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x99,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x01,
+ 0xFF, 0xFF, 0xFE, 0x20, 0x60, 0x00, 0x00, 0x00,
+ 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x40,
+ 0x38, 0x00, 0x00, 0x00, 0xFE, 0x47, 0xFF, 0xFF,
+ 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x23,
+ 0xFF, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00,
+ 0x78, 0x11, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00,
+ 0x07, 0xC0, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF,
+ 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x04,
+ 0x7F, 0xFF, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x10,
+ 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01, 0x80,
+ 0x00, 0x30, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x70, 0x00, 0x01, 0x4F, 0xFF,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00,
+ 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x80, 0x03, 0xF0,
+ 0x00, 0x00, 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x40,
+ 0x0F, 0xF0, 0x00, 0x04, 0x1F, 0xFF, 0x80, 0x00,
+ 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x10, 0x1F, 0xFF,
+ 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x40,
+ 0xFF, 0xFF, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x83, 0xFF, 0xFF, 0x81, 0xE0, 0x01, 0xFF,
+ 0xFF, 0xF8, 0x02, 0x07, 0xFF, 0xFF, 0x80, 0x3F,
+ 0x07, 0xE0, 0x00, 0x1C, 0x0C, 0x1F, 0xFF, 0xFF,
+ 0xF8, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0x78, 0x1F,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0x00, 0x07, 0x0F,
+ 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0C, 0x07,
+ 0xFF, 0x83, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+};
+
+#endif
+
+#ifdef INCLUDE_LINUX_LOGO16
+
+unsigned char linux_logo16_red[] __initdata = {
+ 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x35, 0x83, 0xa5,
+ 0x65, 0x8f, 0x98, 0xc9, 0xdb, 0xe1, 0xe7, 0xf8
+};
+
+unsigned char linux_logo16_green[] __initdata = {
+ 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x2e, 0x83, 0xa5,
+ 0x65, 0x6e, 0x98, 0x89, 0xbf, 0xac, 0xda, 0xf8
+};
+
+unsigned char linux_logo16_blue[] __initdata = {
+ 0x00, 0x90, 0xaf, 0x9c, 0xf7, 0x2b, 0x82, 0xa5,
+ 0x65, 0x41, 0x97, 0x1e, 0x60, 0x29, 0xa5, 0xf8
+};
+
+unsigned char linux_logo16[] __initdata = {
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa1, 0x11, 0x11,
+ 0x61, 0x16, 0x66, 0x66, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0xa8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x87, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x73, 0x33, 0x33, 0x3a, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x27, 0x77, 0x77, 0x77, 0x33, 0x3a, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xa3, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x55, 0x50, 0x08, 0x33, 0x77, 0x77,
+ 0x77, 0x72, 0x72, 0x27, 0x77, 0x77, 0x33, 0x33,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xa3, 0x33, 0x33, 0x77, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x58, 0x85, 0x00, 0x11, 0x11, 0xaa,
+ 0xa3, 0x37, 0x77, 0x72, 0x22, 0x22, 0x77, 0x73,
+ 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3,
+ 0x33, 0x37, 0x77, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x85, 0x00, 0x06, 0x66, 0x11,
+ 0x11, 0x1a, 0xa3, 0x37, 0x77, 0x72, 0x22, 0x77,
+ 0x73, 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
+ 0x33, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, 0x66, 0x66,
+ 0x66, 0x66, 0x11, 0x1a, 0xa3, 0x77, 0x72, 0x22,
+ 0x77, 0x73, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33,
+ 0x33, 0x33, 0x33, 0xa0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x66, 0x66, 0x66, 0x66, 0x11, 0xa3, 0x77, 0x22,
+ 0x22, 0x77, 0x33, 0x33, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33,
+ 0x33, 0x3a, 0xa1, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x33,
+ 0xaa, 0x11, 0x16, 0x66, 0x66, 0x61, 0x1a, 0x37,
+ 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x33,
+ 0x3a, 0xa1, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x22,
+ 0x22, 0x77, 0x3a, 0x11, 0x66, 0x66, 0x66, 0x1a,
+ 0x37, 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33, 0x3a,
+ 0xa1, 0x11, 0x11, 0x10, 0x00, 0x00, 0x50, 0x00,
+ 0x00, 0x05, 0x80, 0x50, 0x00, 0x00, 0x07, 0x72,
+ 0x22, 0x22, 0x22, 0x73, 0xa1, 0x66, 0x66, 0x61,
+ 0x1a, 0x77, 0x22, 0x27, 0x73, 0x33, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x3a, 0xaa,
+ 0x11, 0x11, 0x1a, 0xa0, 0x08, 0x71, 0x05, 0x00,
+ 0x00, 0x12, 0x22, 0x50, 0x00, 0x00, 0x07, 0x77,
+ 0x77, 0x72, 0x22, 0x22, 0x27, 0x31, 0x16, 0x66,
+ 0x61, 0x13, 0x77, 0x22, 0x77, 0x33, 0x3a, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xa1,
+ 0x11, 0x1a, 0x33, 0x70, 0x07, 0x2e, 0x70, 0x00,
+ 0x01, 0x44, 0x42, 0x60, 0x00, 0x00, 0x02, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x27, 0x31, 0x66,
+ 0x66, 0x61, 0xa3, 0x72, 0x22, 0x77, 0x33, 0xaa,
+ 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xaa, 0x11,
+ 0x1a, 0x33, 0x77, 0x30, 0x04, 0x82, 0x40, 0x00,
+ 0x54, 0x48, 0x54, 0x40, 0x00, 0x00, 0x01, 0xaa,
+ 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x31,
+ 0x66, 0x66, 0x11, 0x37, 0x22, 0x27, 0x73, 0x3a,
+ 0xaa, 0xaa, 0xa3, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
+ 0xa3, 0x77, 0xaa, 0x10, 0x50, 0x08, 0x46, 0x05,
+ 0x54, 0x80, 0x50, 0x42, 0x00, 0x00, 0x08, 0x66,
+ 0x66, 0x1a, 0x32, 0x22, 0x22, 0x22, 0x22, 0x27,
+ 0x31, 0x66, 0x66, 0x13, 0x72, 0x22, 0x77, 0x33,
+ 0xaa, 0xaa, 0xaa, 0x33, 0xaa, 0xa1, 0xaa, 0xa3,
+ 0x37, 0xa1, 0x1a, 0x30, 0x50, 0x06, 0x26, 0x00,
+ 0x54, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, 0xe2,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22, 0x22,
+ 0x27, 0xa6, 0x66, 0x61, 0xa7, 0x72, 0x27, 0x73,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
+ 0x31, 0x11, 0x37, 0x70, 0x02, 0x00, 0xab, 0xbb,
+ 0xb6, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xee, 0xee,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
+ 0x22, 0x23, 0x16, 0x66, 0x1a, 0x37, 0x22, 0x77,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x3a,
+ 0x11, 0xa7, 0x33, 0x10, 0x04, 0x09, 0xbd, 0xdd,
+ 0xbd, 0xd0, 0x04, 0x45, 0x00, 0x0e, 0xee, 0xee,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
+ 0x22, 0x22, 0x71, 0x66, 0x66, 0x13, 0x72, 0x27,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x11,
+ 0xa3, 0x73, 0xa1, 0x60, 0x08, 0xbd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdb, 0x90, 0x00, 0x02, 0xec, 0xee,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xce, 0x22,
+ 0x22, 0x22, 0x27, 0xa6, 0x66, 0x61, 0x37, 0x27,
+ 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x1a,
+ 0x33, 0xa1, 0x16, 0x60, 0x0b, 0xbd, 0xdd, 0xdd,
+ 0xcd, 0xdd, 0xdd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0xa2,
+ 0x22, 0x22, 0x22, 0x7a, 0x66, 0x66, 0x13, 0x77,
+ 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0x3a, 0x11, 0x33,
+ 0xaa, 0x11, 0x66, 0x60, 0x9b, 0xdd, 0xdd, 0xdd,
+ 0xcd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0xec, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x61,
+ 0x72, 0x22, 0x22, 0x22, 0xa1, 0x66, 0x61, 0x37,
+ 0x1a, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x13, 0x3a,
+ 0x11, 0x11, 0x11, 0x10, 0x5b, 0xdd, 0xdd, 0xdc,
+ 0xdd, 0xdd, 0xbd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x86,
+ 0x17, 0x22, 0x22, 0x22, 0x23, 0x16, 0x66, 0xaa,
+ 0xaa, 0xa3, 0x3a, 0xaa, 0xaa, 0x1a, 0x3a, 0xa1,
+ 0x11, 0x11, 0x1a, 0x70, 0x05, 0xbd, 0xdd, 0xdd,
+ 0xdb, 0x5b, 0xdd, 0xb0, 0x00, 0x60, 0x2e, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe6, 0x88,
+ 0x66, 0x32, 0x22, 0x22, 0x22, 0x36, 0x66, 0x11,
+ 0x33, 0x33, 0x3a, 0xaa, 0x11, 0xaa, 0xaa, 0xa1,
+ 0x11, 0x1a, 0x3a, 0x60, 0x02, 0x99, 0xbb, 0xb9,
+ 0x9b, 0xbb, 0xbc, 0x22, 0x00, 0x86, 0x5e, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe1, 0x68,
+ 0x86, 0x63, 0x22, 0x22, 0x22, 0x2a, 0x66, 0x66,
+ 0x33, 0x33, 0xaa, 0xaa, 0x1a, 0xaa, 0xaa, 0x11,
+ 0x1a, 0xa7, 0x68, 0x80, 0x02, 0x2b, 0xbd, 0xbb,
+ 0xbb, 0xb9, 0x22, 0x22, 0x00, 0x06, 0x6e, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0xa6,
+ 0x88, 0x86, 0x32, 0x22, 0x22, 0x27, 0xa6, 0x66,
+ 0x33, 0x3a, 0xaa, 0xa1, 0xaa, 0xaa, 0xa1, 0x11,
+ 0xa3, 0xa6, 0x88, 0x80, 0x02, 0x22, 0x9b, 0xbb,
+ 0xbb, 0x22, 0x24, 0xf4, 0x60, 0x00, 0x0c, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc2, 0x21,
+ 0x68, 0x88, 0x63, 0x22, 0x22, 0x22, 0x71, 0x66,
+ 0x33, 0x3a, 0x11, 0x11, 0xaa, 0xaa, 0x11, 0xaa,
+ 0x71, 0x88, 0x88, 0x00, 0x02, 0xe2, 0x26, 0x99,
+ 0x22, 0x22, 0x4f, 0xf4, 0x40, 0x00, 0x0c, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x22, 0x22,
+ 0x16, 0x88, 0x86, 0xa2, 0x22, 0x22, 0x27, 0x11,
+ 0x33, 0xa1, 0x11, 0x11, 0xaa, 0x31, 0x1a, 0xa3,
+ 0x68, 0x88, 0x81, 0x00, 0x54, 0x42, 0x22, 0x22,
+ 0x22, 0x44, 0xff, 0xff, 0x48, 0x00, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x22,
+ 0x21, 0x88, 0x88, 0x6a, 0x22, 0x22, 0x22, 0x31,
+ 0x3a, 0xa1, 0x11, 0x1a, 0xa3, 0x11, 0x33, 0x36,
+ 0x88, 0x86, 0x30, 0x00, 0x4f, 0x44, 0x22, 0x22,
+ 0x24, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x95, 0x22, 0x72,
+ 0x22, 0x18, 0x88, 0x86, 0x32, 0x22, 0x22, 0x27,
+ 0xaa, 0x11, 0x11, 0x1a, 0x31, 0x13, 0x33, 0x68,
+ 0x88, 0x6a, 0x00, 0x02, 0x4f, 0x4f, 0x42, 0x24,
+ 0x4f, 0xff, 0xff, 0xff, 0xf4, 0x50, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x73,
+ 0x72, 0x26, 0x88, 0x88, 0x63, 0x22, 0x22, 0x22,
+ 0x11, 0x11, 0x11, 0xa3, 0xa1, 0x73, 0xa6, 0x88,
+ 0x81, 0xa5, 0x00, 0x04, 0x4f, 0x4f, 0x44, 0x4f,
+ 0xff, 0xff, 0xff, 0xff, 0xf4, 0x40, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x12, 0x27,
+ 0xaa, 0x22, 0x68, 0x55, 0x86, 0x72, 0x22, 0x22,
+ 0x11, 0x11, 0x1a, 0x33, 0x13, 0x3a, 0x18, 0x88,
+ 0x1a, 0x10, 0x00, 0x44, 0x4f, 0x4f, 0xff, 0x4f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x61, 0x22,
+ 0x3a, 0xa2, 0x26, 0x85, 0x58, 0x67, 0x22, 0x22,
+ 0x61, 0x61, 0x1a, 0x7a, 0x37, 0x31, 0x88, 0x81,
+ 0x11, 0x00, 0x05, 0xe4, 0x44, 0xff, 0xff, 0xff,
+ 0x4f, 0xf4, 0x44, 0xff, 0xff, 0xf5, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x12,
+ 0x2a, 0xaa, 0x72, 0x68, 0x55, 0x81, 0x22, 0x22,
+ 0x66, 0x61, 0xa3, 0x33, 0x73, 0x16, 0x88, 0x11,
+ 0x10, 0x00, 0x08, 0x74, 0x44, 0x4f, 0x44, 0x44,
+ 0xf4, 0xf4, 0x44, 0x44, 0xe2, 0x44, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x81,
+ 0x22, 0xaa, 0xa7, 0x26, 0x85, 0x88, 0x12, 0x22,
+ 0x66, 0x61, 0x37, 0xa7, 0x3a, 0x66, 0x66, 0x11,
+ 0x80, 0x00, 0x0a, 0x72, 0x44, 0x4f, 0x44, 0x4f,
+ 0xff, 0x44, 0x44, 0x22, 0x22, 0x24, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x85, 0x88,
+ 0x12, 0x2a, 0xaa, 0x22, 0x68, 0x58, 0x63, 0x22,
+ 0x66, 0x1a, 0x73, 0x77, 0x31, 0x66, 0x61, 0x11,
+ 0x00, 0x00, 0x07, 0x44, 0xff, 0x4f, 0xf4, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0x42, 0x22, 0x40, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x85, 0x55,
+ 0x81, 0x27, 0xaa, 0xa2, 0x78, 0x88, 0x86, 0x72,
+ 0x66, 0x13, 0x77, 0x73, 0x11, 0x66, 0x61, 0x76,
+ 0x00, 0x50, 0x84, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x42, 0x40, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x68, 0x55,
+ 0x58, 0x12, 0x3a, 0xaa, 0x23, 0x88, 0x88, 0xa7,
+ 0x66, 0xa7, 0x77, 0x7a, 0x16, 0x66, 0x1a, 0x15,
+ 0x05, 0x00, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0x24, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x26, 0x55,
+ 0x55, 0x81, 0x23, 0xaa, 0x32, 0x18, 0x88, 0x6a,
+ 0x61, 0x37, 0x77, 0x31, 0x66, 0x66, 0x17, 0x60,
+ 0x05, 0x08, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4e, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0xa2, 0x65,
+ 0x55, 0x58, 0xa2, 0x7a, 0xa2, 0x26, 0x88, 0x61,
+ 0x61, 0x32, 0x27, 0xa1, 0x66, 0x61, 0x31, 0x60,
+ 0x00, 0x04, 0x4f, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x9b, 0xaa, 0x26,
+ 0x55, 0x55, 0x87, 0x27, 0x33, 0x27, 0x68, 0x61,
+ 0x1a, 0x72, 0x27, 0xa6, 0x66, 0x6a, 0x71, 0x00,
+ 0x80, 0x84, 0xff, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
+ 0x9b, 0x9b, 0x99, 0xb9, 0xb9, 0x99, 0xaa, 0xa2,
+ 0x85, 0x55, 0x56, 0x22, 0x27, 0x22, 0x36, 0x66,
+ 0x13, 0x22, 0x23, 0x16, 0x86, 0x63, 0x73, 0x00,
+ 0x00, 0x44, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4f, 0x99,
+ 0x9b, 0x99, 0x99, 0x99, 0xb9, 0x99, 0xaa, 0xaa,
+ 0x28, 0x55, 0x58, 0x12, 0x22, 0x22, 0x21, 0x11,
+ 0xa3, 0x27, 0x7a, 0x66, 0x86, 0x17, 0x75, 0x05,
+ 0x05, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x44, 0x4f, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x3a, 0xaa,
+ 0xa2, 0x85, 0x58, 0x67, 0x72, 0x22, 0x27, 0xa1,
+ 0x37, 0x27, 0x7a, 0x68, 0x86, 0xa2, 0x70, 0x00,
+ 0x02, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xf4, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x23, 0xaa,
+ 0xa7, 0x78, 0x88, 0x81, 0x77, 0x22, 0x27, 0x3a,
+ 0x72, 0x73, 0x71, 0x68, 0x66, 0x32, 0x50, 0x00,
+ 0x04, 0x4f, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x95,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x55, 0x12, 0x3a,
+ 0xaa, 0x21, 0x88, 0x81, 0x77, 0x27, 0x73, 0x73,
+ 0x72, 0x33, 0x36, 0x86, 0x61, 0x72, 0x00, 0x00,
+ 0x04, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x8a, 0x27,
+ 0xaa, 0x77, 0x68, 0x61, 0x23, 0x71, 0x11, 0x3a,
+ 0x27, 0xa3, 0x36, 0x86, 0x61, 0x20, 0x00, 0x00,
+ 0x04, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x59,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x95, 0x58, 0x77,
+ 0x27, 0x32, 0x36, 0x63, 0x23, 0x71, 0x66, 0x11,
+ 0x27, 0x13, 0xa6, 0x86, 0x6a, 0x20, 0x00, 0x50,
+ 0x04, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x99,
+ 0x9b, 0xbb, 0xbb, 0xbb, 0xb9, 0x99, 0x68, 0x13,
+ 0x32, 0x22, 0x73, 0xa7, 0x2a, 0x31, 0x88, 0x66,
+ 0x7a, 0x13, 0x18, 0x66, 0x63, 0x20, 0x00, 0x06,
+ 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x49, 0x95,
+ 0xa9, 0xa9, 0x99, 0x97, 0x92, 0x99, 0x65, 0x6a,
+ 0x17, 0x22, 0x23, 0x72, 0x27, 0xaa, 0x88, 0x88,
+ 0xa1, 0x17, 0x68, 0x66, 0x67, 0x70, 0x00, 0x05,
+ 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x49, 0x9c,
+ 0x2e, 0xee, 0xee, 0xee, 0xee, 0xa9, 0x65, 0x8a,
+ 0x1a, 0xaa, 0x37, 0x72, 0x27, 0x37, 0x88, 0x88,
+ 0x11, 0x17, 0x68, 0x66, 0x67, 0x10, 0x9d, 0xd0,
+ 0x84, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0xf4, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x4f, 0x69,
+ 0xcc, 0xee, 0xee, 0xee, 0xec, 0x99, 0x88, 0x63,
+ 0x61, 0x68, 0x61, 0x72, 0x22, 0x7a, 0x68, 0x88,
+ 0x11, 0x17, 0x88, 0x66, 0x12, 0x1b, 0xdd, 0xdd,
+ 0x02, 0x44, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0xff, 0x4f, 0x4c, 0xc5,
+ 0x0c, 0xc1, 0x11, 0x1c, 0xc0, 0x26, 0x66, 0x17,
+ 0x66, 0x88, 0x88, 0x12, 0x22, 0x23, 0xa8, 0x88,
+ 0x11, 0x13, 0x88, 0x66, 0x17, 0xbb, 0xdd, 0xdd,
+ 0xd0, 0x8f, 0xff, 0xf4, 0xf4, 0x44, 0xf4, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0x4f, 0x44, 0xdd, 0xdd,
+ 0x00, 0x00, 0x00, 0x05, 0x9d, 0x21, 0x66, 0x27,
+ 0xa6, 0x65, 0x58, 0x67, 0x22, 0x27, 0x28, 0x88,
+ 0x11, 0xaa, 0x86, 0x68, 0x1a, 0xbb, 0xdd, 0xdd,
+ 0xdb, 0x05, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xdd, 0xdb,
+ 0x00, 0x00, 0x00, 0x00, 0xdd, 0xda, 0x66, 0x22,
+ 0x71, 0x15, 0x55, 0x81, 0x22, 0x22, 0x76, 0x88,
+ 0x11, 0x31, 0x88, 0x88, 0xab, 0xbd, 0xdd, 0xdd,
+ 0xdd, 0x00, 0x04, 0x44, 0xff, 0xff, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0x44, 0xdd, 0xdb,
+ 0x00, 0x00, 0x00, 0x0b, 0xdd, 0xda, 0x11, 0x22,
+ 0x23, 0x68, 0x55, 0x86, 0x22, 0x22, 0x7a, 0x88,
+ 0x1a, 0x71, 0x88, 0x89, 0xbb, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xd0, 0x00, 0x4f, 0x44, 0xff, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xff, 0xe2, 0xdd, 0xdb,
+ 0x90, 0x00, 0x05, 0xbd, 0xdd, 0xb8, 0x63, 0x22,
+ 0x27, 0xa6, 0x55, 0x88, 0x77, 0x22, 0x22, 0x88,
+ 0x1a, 0x28, 0xbd, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdb, 0x00, 0x07, 0x44, 0x4f, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x22, 0xdd, 0xdb,
+ 0xbb, 0x9b, 0xbb, 0xbd, 0xdd, 0xd5, 0x86, 0x22,
+ 0x22, 0x77, 0x85, 0x88, 0x17, 0x22, 0x22, 0x88,
+ 0xaa, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0x00, 0x00, 0x54, 0x4f, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0x44, 0x22, 0xbd, 0xdd,
+ 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0x88, 0x72,
+ 0x27, 0x22, 0x88, 0x88, 0x67, 0x72, 0x22, 0x18,
+ 0x33, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xd0, 0x00, 0x05, 0x4f, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0x44, 0x4f, 0x22, 0xbd, 0xdd,
+ 0xdb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd, 0x88, 0x17,
+ 0x27, 0x72, 0x68, 0x88, 0x87, 0x32, 0x22, 0x36,
+ 0x37, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xd5, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0xf4, 0xf4, 0x22, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x67,
+ 0x72, 0x77, 0x38, 0x88, 0x83, 0x37, 0x22, 0x26,
+ 0x72, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0xf4, 0x44, 0x25, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd3,
+ 0x32, 0x73, 0x76, 0x88, 0x81, 0x33, 0x22, 0x2a,
+ 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xb0, 0x54, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x00, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xa7, 0x73, 0x26, 0x88, 0x86, 0x7a, 0x72, 0x27,
+ 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0xff, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0x44, 0x40, 0x05, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0x13, 0x23, 0x21, 0x68, 0x86, 0x17, 0x72, 0x22,
+ 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xff, 0x44, 0x42, 0x00, 0x05, 0xbd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0x87, 0x27, 0x27, 0x16, 0x66, 0x67, 0x22, 0x22,
+ 0x72, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0x94, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x00, 0x00, 0x05, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb8,
+ 0x86, 0x22, 0x22, 0x7a, 0x68, 0x81, 0x22, 0x22,
+ 0x37, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x44, 0x44, 0x44,
+ 0x44, 0x47, 0x00, 0x00, 0x00, 0x05, 0xbd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x68,
+ 0x58, 0x72, 0x22, 0x27, 0x18, 0x86, 0x72, 0x22,
+ 0x1a, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x18, 0x85,
+ 0x58, 0x12, 0x22, 0x36, 0x18, 0x88, 0x32, 0x22,
+ 0x61, 0x3b, 0xbb, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x7a, 0x68, 0x85,
+ 0x88, 0x62, 0x27, 0x16, 0x18, 0x88, 0x12, 0x27,
+ 0x86, 0x18, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd,
+ 0xdd, 0xdd, 0xdd, 0xbb, 0xb5, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xbb, 0xbd,
+ 0xdd, 0xdd, 0xdb, 0xbb, 0x87, 0x31, 0x68, 0x65,
+ 0x88, 0x82, 0x23, 0x16, 0x18, 0x88, 0x12, 0x23,
+ 0x88, 0x67, 0x27, 0xa8, 0x9b, 0xbb, 0xbb, 0xbb,
+ 0xbd, 0xdd, 0xbb, 0xbb, 0x95, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x9b, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0x96, 0x87, 0x16, 0x68, 0x18,
+ 0x88, 0x62, 0x31, 0x66, 0x18, 0x88, 0x62, 0x73,
+ 0x88, 0x63, 0x27, 0x33, 0x65, 0x55, 0x99, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0x99, 0x55, 0x0a, 0xa1, 0x86,
+ 0x81, 0x68, 0x88, 0x55, 0x58, 0x85, 0x9b, 0xbb,
+ 0xbb, 0xbb, 0x95, 0x88, 0x83, 0x66, 0x66, 0x18,
+ 0x66, 0x82, 0xa1, 0x66, 0x18, 0x88, 0x62, 0x33,
+ 0x88, 0x81, 0x27, 0x7a, 0x18, 0x58, 0x86, 0x85,
+ 0x99, 0x99, 0x99, 0x95, 0x53, 0x2a, 0xaa, 0x88,
+ 0x67, 0x31, 0x68, 0x55, 0x58, 0x85, 0x59, 0xbb,
+ 0xbb, 0xb9, 0x58, 0x68, 0x83, 0x66, 0x61, 0x16,
+ 0x66, 0x62, 0x16, 0x66, 0x68, 0x88, 0x62, 0xaa,
+ 0x88, 0x86, 0x27, 0x77, 0x78, 0x55, 0x88, 0x22,
+ 0x25, 0x55, 0x95, 0x55, 0x6a, 0xa2, 0x2a, 0x88,
+ 0x62, 0x27, 0x37, 0x38, 0x88, 0x87, 0x55, 0x59,
+ 0x95, 0x58, 0x16, 0x88, 0x8a, 0x66, 0x63, 0x68,
+ 0x86, 0x67, 0x66, 0x66, 0x68, 0x88, 0x12, 0x11,
+ 0x88, 0x88, 0x72, 0x77, 0x78, 0x85, 0x58, 0x17,
+ 0x23, 0x32, 0x55, 0x55, 0x81, 0x13, 0x73, 0x66,
+ 0x62, 0x7a, 0xaa, 0x38, 0x88, 0x58, 0x27, 0x55,
+ 0x58, 0x32, 0x38, 0x88, 0x81, 0x66, 0xa2, 0x88,
+ 0x86, 0x61, 0x66, 0x61, 0x66, 0x68, 0x13, 0x11,
+ 0x88, 0x88, 0x12, 0x22, 0x71, 0x85, 0x58, 0x62,
+ 0x23, 0xa2, 0x68, 0x88, 0x81, 0x66, 0x88, 0x88,
+ 0x63, 0x2a, 0xaa, 0x28, 0x88, 0x55, 0x86, 0x61,
+ 0x66, 0x66, 0x68, 0x88, 0x66, 0x66, 0x77, 0x88,
+ 0x68, 0x16, 0x66, 0x62, 0x66, 0x68, 0xa1, 0x61,
+ 0x88, 0x88, 0x62, 0x22, 0x22, 0x85, 0x55, 0x83,
+ 0x72, 0x37, 0xa8, 0x88, 0x61, 0x66, 0x85, 0x55,
+ 0x86, 0x23, 0xaa, 0x71, 0x88, 0x85, 0x88, 0x66,
+ 0x88, 0x86, 0x88, 0x88, 0x16, 0x61, 0x21, 0x88,
+ 0x66, 0xa6, 0x86, 0x17, 0x66, 0x66, 0x31, 0x61,
+ 0x88, 0x88, 0x87, 0x72, 0x22, 0x68, 0x55, 0x86,
+ 0x77, 0x77, 0x36, 0x88, 0x13, 0x68, 0x85, 0x55,
+ 0x58, 0x12, 0x73, 0x72, 0x76, 0x88, 0x88, 0x68,
+ 0x88, 0x88, 0x88, 0x66, 0x36, 0x63, 0x26, 0x86,
+ 0x86, 0x36, 0x86, 0x11, 0x66, 0x66, 0x76, 0x61,
+ 0x88, 0x88, 0x81, 0x22, 0x22, 0x38, 0x85, 0x58,
+ 0x37, 0x22, 0x21, 0x68, 0xa2, 0x31, 0x68, 0x55,
+ 0x55, 0x81, 0x22, 0x22, 0xa8, 0x88, 0x88, 0x68,
+ 0x86, 0x88, 0x68, 0x81, 0x36, 0x17, 0x21, 0x68,
+ 0x86, 0x16, 0x66, 0x26, 0x66, 0x61, 0x36, 0x66,
+ 0x68, 0x88, 0x86, 0x27, 0x22, 0x28, 0x88, 0x88,
+ 0x17, 0x72, 0x2a, 0x66, 0xa2, 0x22, 0x36, 0x55,
+ 0x55, 0x58, 0x37, 0x3a, 0x16, 0x66, 0x66, 0x66,
+ 0x66, 0x18, 0x88, 0x67, 0x16, 0x12, 0x71, 0x68,
+ 0x81, 0x68, 0x61, 0x76, 0x66, 0x6a, 0x16, 0x66,
+ 0x88, 0x88, 0x86, 0x77, 0x22, 0x26, 0x88, 0x88,
+ 0x13, 0x37, 0x71, 0x66, 0xa2, 0x33, 0x2a, 0x85,
+ 0x55, 0x55, 0x17, 0x73, 0x16, 0x66, 0x66, 0x68,
+ 0x63, 0x88, 0x88, 0xa2, 0x66, 0xa2, 0xa6, 0x88,
+ 0x61, 0x68, 0x6a, 0x76, 0x66, 0x6a, 0x66, 0x6a
+};
+
+#endif
diff -Naur u-boot-2009.03_orig/include/lxt971a.h u-boot-2009.03/include/lxt971a.h
--- u-boot-2009.03_orig/include/lxt971a.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/lxt971a.h 2009-03-31 14:57:41.656920000 -0700
@@ -1,146 +1,146 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_eth.h,v 1.2 2004/02/24 13:25:39 mpietrek Exp $
- * @Author: Markus Pietrek
- * @References: [1] NS9750 Hardware Reference, December 2003
- * [2] Intel LXT971 Datasheet #249414 Rev. 02
- * [3] NS7520 Linux Ethernet Driver
- *
- * 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
- *
- ***********************************************************************/
-
-#ifndef __LXT971A_H__
-#define __LXT971A_H__
-
-/* PHY definitions (LXT971A) [2] */
-#define PHY_LXT971_PORT_CFG (0x10)
-#define PHY_LXT971_STAT2 (0x11)
-#define PHY_LXT971_INT_ENABLE (0x12)
-#define PHY_LXT971_INT_STATUS (0x13)
-#define PHY_LXT971_LED_CFG (0x14)
-#define PHY_LXT971_DIG_CFG (0x1A)
-#define PHY_LXT971_TX_CTRL (0x1E)
-
-/* PORT_CFG Port Configuration Register Bit Fields */
-#define PHY_LXT971_PORT_CFG_RES1 (0x8000)
-#define PHY_LXT971_PORT_CFG_FORCE_LNK (0x4000)
-#define PHY_LXT971_PORT_CFG_TX_DISABLE (0x2000)
-#define PHY_LXT971_PORT_CFG_BYPASS_SCR (0x1000)
-#define PHY_LXT971_PORT_CFG_RES2 (0x0800)
-#define PHY_LXT971_PORT_CFG_JABBER (0x0400)
-#define PHY_LXT971_PORT_CFG_SQE (0x0200)
-#define PHY_LXT971_PORT_CFG_TP_LOOPBACK (0x0100)
-#define PHY_LXT971_PORT_CFG_CRS_SEL (0x0080)
-#define PHY_LXT971_PORT_CFG_SLEEP_MODE (0x0040)
-#define PHY_LXT971_PORT_CFG_PRE_EN (0x0020)
-#define PHY_LXT971_PORT_CFG_SLEEP_T_MA (0x0018)
-#define PHY_LXT971_PORT_CFG_SLEEP_T_104 (0x0010)
-#define PHY_LXT971_PORT_CFG_SLEEP_T_200 (0x0001)
-#define PHY_LXT971_PORT_CFG_SLEEP_T_304 (0x0000)
-#define PHY_LXT971_PORT_CFG_FLT_CODE_EN (0x0004)
-#define PHY_LXT971_PORT_CFG_ALT_NP (0x0002)
-#define PHY_LXT971_PORT_CFG_FIBER_SEL (0x0001)
-
-/* STAT2 Status Register #2 Bit Fields */
-#define PHY_LXT971_STAT2_RES1 (0x8000)
-#define PHY_LXT971_STAT2_100BTX (0x4000)
-#define PHY_LXT971_STAT2_TX_STATUS (0x2000)
-#define PHY_LXT971_STAT2_RX_STATUS (0x1000)
-#define PHY_LXT971_STAT2_COL_STATUS (0x0800)
-#define PHY_LXT971_STAT2_LINK (0x0400)
-#define PHY_LXT971_STAT2_DUPLEX_MODE (0x0200)
-#define PHY_LXT971_STAT2_AUTO_NEG (0x0100)
-#define PHY_LXT971_STAT2_AUTO_NEG_COMP (0x0080)
-#define PHY_LXT971_STAT2_RES2 (0x0040)
-#define PHY_LXT971_STAT2_POLARITY (0x0020)
-#define PHY_LXT971_STAT2_PAUSE (0x0010)
-#define PHY_LXT971_STAT2_ERROR (0x0008)
-#define PHY_LXT971_STAT2_RES3 (0x0007)
-
-/* INT_ENABLE Interrupt Enable Register Bit Fields */
-#define PHY_LXT971_INT_ENABLE_RES1 (0xFF00)
-#define PHY_LXT971_INT_ENABLE_ANMSK (0x0080)
-#define PHY_LXT971_INT_ENABLE_SPEEDMSK (0x0040)
-#define PHY_LXT971_INT_ENABLE_DUPLEXMSK (0x0020)
-#define PHY_LXT971_INT_ENABLE_LINKMSK (0x0010)
-#define PHY_LXT971_INT_ENABLE_RES2 (0x000C)
-#define PHY_LXT971_INT_ENABLE_INTEN (0x0002)
-#define PHY_LXT971_INT_ENABLE_TINT (0x0001)
-
-/* INT_STATUS Interrupt Status Register Bit Fields */
-#define PHY_LXT971_INT_STATUS_RES1 (0xFF00)
-#define PHY_LXT971_INT_STATUS_ANDONE (0x0080)
-#define PHY_LXT971_INT_STATUS_SPEEDCHG (0x0040)
-#define PHY_LXT971_INT_STATUS_DUPLEXCHG (0x0020)
-#define PHY_LXT971_INT_STATUS_LINKCHG (0x0010)
-#define PHY_LXT971_INT_STATUS_RES2 (0x0008)
-#define PHY_LXT971_INT_STATUS_MDINT (0x0004)
-#define PHY_LXT971_INT_STATUS_RES3 (0x0003)
-
-/* LED_CFG Interrupt LED Configuration Register Bit Fields */
-#define PHY_LXT971_LED_CFG_SHIFT_LED1 (0x000C)
-#define PHY_LXT971_LED_CFG_SHIFT_LED2 (0x0008)
-#define PHY_LXT971_LED_CFG_SHIFT_LED3 (0x0004)
-#define PHY_LXT971_LED_CFG_LEDFREQ_MA (0x000C)
-#define PHY_LXT971_LED_CFG_LEDFREQ_RES (0x000C)
-#define PHY_LXT971_LED_CFG_LEDFREQ_100 (0x0008)
-#define PHY_LXT971_LED_CFG_LEDFREQ_60 (0x0004)
-#define PHY_LXT971_LED_CFG_LEDFREQ_30 (0x0000)
-#define PHY_LXT971_LED_CFG_PULSE_STR (0x0002)
-#define PHY_LXT971_LED_CFG_RES1 (0x0001)
-
-/* only one of these values must be shifted for each SHIFT_LED? */
-#define PHY_LXT971_LED_CFG_UNUSED1 (0x000F)
-#define PHY_LXT971_LED_CFG_DUPLEX_COL (0x000E)
-#define PHY_LXT971_LED_CFG_LINK_ACT (0x000D)
-#define PHY_LXT971_LED_CFG_LINK_RX (0x000C)
-#define PHY_LXT971_LED_CFG_TEST_BLK_SLW (0x000B)
-#define PHY_LXT971_LED_CFG_TEST_BLK_FST (0x000A)
-#define PHY_LXT971_LED_CFG_TEST_OFF (0x0009)
-#define PHY_LXT971_LED_CFG_TEST_ON (0x0008)
-#define PHY_LXT971_LED_CFG_RX_OR_TX (0x0007)
-#define PHY_LXT971_LED_CFG_UNUSED2 (0x0006)
-#define PHY_LXT971_LED_CFG_DUPLEX (0x0005)
-#define PHY_LXT971_LED_CFG_LINK (0x0004)
-#define PHY_LXT971_LED_CFG_COLLISION (0x0003)
-#define PHY_LXT971_LED_CFG_RECEIVE (0x0002)
-#define PHY_LXT971_LED_CFG_TRANSMIT (0x0001)
-#define PHY_LXT971_LED_CFG_SPEED (0x0000)
-
-/* DIG_CFG Digitial Configuration Register Bit Fields */
-#define PHY_LXT971_DIG_CFG_RES1 (0xF000)
-#define PHY_LXT971_DIG_CFG_MII_DRIVE (0x0800)
-#define PHY_LXT971_DIG_CFG_RES2 (0x0400)
-#define PHY_LXT971_DIG_CFG_SHOW_SYMBOL (0x0200)
-#define PHY_LXT971_DIG_CFG_RES3 (0x01FF)
-
-#define PHY_LXT971_MDIO_MAX_CLK (8000000)
-#define PHY_MDIO_MAX_CLK (2500000)
-
-/* TX_CTRL Transmit Control Register Bit Fields
- documentation is buggy for this register, therefore setting not included */
-
-typedef enum
-{
- PHY_NONE = 0x0000, /* no PHY detected yet */
- PHY_LXT971A = 0x0013
-} PhyType;
-
-#endif /* __LXT971A_H__ */
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: lxt971a.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @References: [1] NS9750 Hardware Reference, December 2003
+ * [2] Intel LXT971 Datasheet #249414 Rev. 02
+ * [3] NS7520 Linux Ethernet Driver
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#ifndef __LXT971A_H__
+#define __LXT971A_H__
+
+/* PHY definitions (LXT971A) [2] */
+#define PHY_LXT971_PORT_CFG (0x10)
+#define PHY_LXT971_STAT2 (0x11)
+#define PHY_LXT971_INT_ENABLE (0x12)
+#define PHY_LXT971_INT_STATUS (0x13)
+#define PHY_LXT971_LED_CFG (0x14)
+#define PHY_LXT971_DIG_CFG (0x1A)
+#define PHY_LXT971_TX_CTRL (0x1E)
+
+/* PORT_CFG Port Configuration Register Bit Fields */
+#define PHY_LXT971_PORT_CFG_RES1 (0x8000)
+#define PHY_LXT971_PORT_CFG_FORCE_LNK (0x4000)
+#define PHY_LXT971_PORT_CFG_TX_DISABLE (0x2000)
+#define PHY_LXT971_PORT_CFG_BYPASS_SCR (0x1000)
+#define PHY_LXT971_PORT_CFG_RES2 (0x0800)
+#define PHY_LXT971_PORT_CFG_JABBER (0x0400)
+#define PHY_LXT971_PORT_CFG_SQE (0x0200)
+#define PHY_LXT971_PORT_CFG_TP_LOOPBACK (0x0100)
+#define PHY_LXT971_PORT_CFG_CRS_SEL (0x0080)
+#define PHY_LXT971_PORT_CFG_SLEEP_MODE (0x0040)
+#define PHY_LXT971_PORT_CFG_PRE_EN (0x0020)
+#define PHY_LXT971_PORT_CFG_SLEEP_T_MA (0x0018)
+#define PHY_LXT971_PORT_CFG_SLEEP_T_104 (0x0010)
+#define PHY_LXT971_PORT_CFG_SLEEP_T_200 (0x0001)
+#define PHY_LXT971_PORT_CFG_SLEEP_T_304 (0x0000)
+#define PHY_LXT971_PORT_CFG_FLT_CODE_EN (0x0004)
+#define PHY_LXT971_PORT_CFG_ALT_NP (0x0002)
+#define PHY_LXT971_PORT_CFG_FIBER_SEL (0x0001)
+
+/* STAT2 Status Register #2 Bit Fields */
+#define PHY_LXT971_STAT2_RES1 (0x8000)
+#define PHY_LXT971_STAT2_100BTX (0x4000)
+#define PHY_LXT971_STAT2_TX_STATUS (0x2000)
+#define PHY_LXT971_STAT2_RX_STATUS (0x1000)
+#define PHY_LXT971_STAT2_COL_STATUS (0x0800)
+#define PHY_LXT971_STAT2_LINK (0x0400)
+#define PHY_LXT971_STAT2_DUPLEX_MODE (0x0200)
+#define PHY_LXT971_STAT2_AUTO_NEG (0x0100)
+#define PHY_LXT971_STAT2_AUTO_NEG_COMP (0x0080)
+#define PHY_LXT971_STAT2_RES2 (0x0040)
+#define PHY_LXT971_STAT2_POLARITY (0x0020)
+#define PHY_LXT971_STAT2_PAUSE (0x0010)
+#define PHY_LXT971_STAT2_ERROR (0x0008)
+#define PHY_LXT971_STAT2_RES3 (0x0007)
+
+/* INT_ENABLE Interrupt Enable Register Bit Fields */
+#define PHY_LXT971_INT_ENABLE_RES1 (0xFF00)
+#define PHY_LXT971_INT_ENABLE_ANMSK (0x0080)
+#define PHY_LXT971_INT_ENABLE_SPEEDMSK (0x0040)
+#define PHY_LXT971_INT_ENABLE_DUPLEXMSK (0x0020)
+#define PHY_LXT971_INT_ENABLE_LINKMSK (0x0010)
+#define PHY_LXT971_INT_ENABLE_RES2 (0x000C)
+#define PHY_LXT971_INT_ENABLE_INTEN (0x0002)
+#define PHY_LXT971_INT_ENABLE_TINT (0x0001)
+
+/* INT_STATUS Interrupt Status Register Bit Fields */
+#define PHY_LXT971_INT_STATUS_RES1 (0xFF00)
+#define PHY_LXT971_INT_STATUS_ANDONE (0x0080)
+#define PHY_LXT971_INT_STATUS_SPEEDCHG (0x0040)
+#define PHY_LXT971_INT_STATUS_DUPLEXCHG (0x0020)
+#define PHY_LXT971_INT_STATUS_LINKCHG (0x0010)
+#define PHY_LXT971_INT_STATUS_RES2 (0x0008)
+#define PHY_LXT971_INT_STATUS_MDINT (0x0004)
+#define PHY_LXT971_INT_STATUS_RES3 (0x0003)
+
+/* LED_CFG Interrupt LED Configuration Register Bit Fields */
+#define PHY_LXT971_LED_CFG_SHIFT_LED1 (0x000C)
+#define PHY_LXT971_LED_CFG_SHIFT_LED2 (0x0008)
+#define PHY_LXT971_LED_CFG_SHIFT_LED3 (0x0004)
+#define PHY_LXT971_LED_CFG_LEDFREQ_MA (0x000C)
+#define PHY_LXT971_LED_CFG_LEDFREQ_RES (0x000C)
+#define PHY_LXT971_LED_CFG_LEDFREQ_100 (0x0008)
+#define PHY_LXT971_LED_CFG_LEDFREQ_60 (0x0004)
+#define PHY_LXT971_LED_CFG_LEDFREQ_30 (0x0000)
+#define PHY_LXT971_LED_CFG_PULSE_STR (0x0002)
+#define PHY_LXT971_LED_CFG_RES1 (0x0001)
+
+/* only one of these values must be shifted for each SHIFT_LED? */
+#define PHY_LXT971_LED_CFG_UNUSED1 (0x000F)
+#define PHY_LXT971_LED_CFG_DUPLEX_COL (0x000E)
+#define PHY_LXT971_LED_CFG_LINK_ACT (0x000D)
+#define PHY_LXT971_LED_CFG_LINK_RX (0x000C)
+#define PHY_LXT971_LED_CFG_TEST_BLK_SLW (0x000B)
+#define PHY_LXT971_LED_CFG_TEST_BLK_FST (0x000A)
+#define PHY_LXT971_LED_CFG_TEST_OFF (0x0009)
+#define PHY_LXT971_LED_CFG_TEST_ON (0x0008)
+#define PHY_LXT971_LED_CFG_RX_OR_TX (0x0007)
+#define PHY_LXT971_LED_CFG_UNUSED2 (0x0006)
+#define PHY_LXT971_LED_CFG_DUPLEX (0x0005)
+#define PHY_LXT971_LED_CFG_LINK (0x0004)
+#define PHY_LXT971_LED_CFG_COLLISION (0x0003)
+#define PHY_LXT971_LED_CFG_RECEIVE (0x0002)
+#define PHY_LXT971_LED_CFG_TRANSMIT (0x0001)
+#define PHY_LXT971_LED_CFG_SPEED (0x0000)
+
+/* DIG_CFG Digitial Configuration Register Bit Fields */
+#define PHY_LXT971_DIG_CFG_RES1 (0xF000)
+#define PHY_LXT971_DIG_CFG_MII_DRIVE (0x0800)
+#define PHY_LXT971_DIG_CFG_RES2 (0x0400)
+#define PHY_LXT971_DIG_CFG_SHOW_SYMBOL (0x0200)
+#define PHY_LXT971_DIG_CFG_RES3 (0x01FF)
+
+#define PHY_LXT971_MDIO_MAX_CLK (8000000)
+#define PHY_MDIO_MAX_CLK (2500000)
+
+/* TX_CTRL Transmit Control Register Bit Fields
+ documentation is buggy for this register, therefore setting not included */
+
+typedef enum
+{
+ PHY_NONE = 0x0000, /* no PHY detected yet */
+ PHY_LXT971A = 0x0013
+} PhyType;
+
+#endif /* __LXT971A_H__ */
diff -Naur u-boot-2009.03_orig/include/lzma/CVS/Entries u-boot-2009.03/include/lzma/CVS/Entries
--- u-boot-2009.03_orig/include/lzma/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/lzma/CVS/Entries 2009-03-25 15:58:15.012300100 -0700
@@ -0,0 +1,4 @@
+/LzmaDecode.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LzmaTools.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LzmaTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/lzma/CVS/Entries.Extra u-boot-2009.03/include/lzma/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/lzma/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/lzma/CVS/Entries.Extra 2009-03-25 15:58:15.012300100 -0700
@@ -0,0 +1,3 @@
+/LzmaDecode.h///1238019749/
+/LzmaTools.h///1238019749/
+/LzmaTypes.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/lzma/CVS/Entries.Extra.Old u-boot-2009.03/include/lzma/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/lzma/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/lzma/CVS/Entries.Extra.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,3 @@
+/LzmaDecode.h///1238019749/
+/LzmaTools.h///1238019749/
+/LzmaTypes.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/lzma/CVS/Entries.Old u-boot-2009.03/include/lzma/CVS/Entries.Old
--- u-boot-2009.03_orig/include/lzma/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/lzma/CVS/Entries.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,4 @@
+/LzmaDecode.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/LzmaTools.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/LzmaTypes.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/include/lzma/CVS/Repository u-boot-2009.03/include/lzma/CVS/Repository
--- u-boot-2009.03_orig/include/lzma/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/lzma/CVS/Repository 2009-03-25 15:25:56.259083200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/lzma
diff -Naur u-boot-2009.03_orig/include/lzma/CVS/Root u-boot-2009.03/include/lzma/CVS/Root
--- u-boot-2009.03_orig/include/lzma/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/lzma/CVS/Root 2009-03-25 15:25:56.243458300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/mtd/CVS/Entries u-boot-2009.03/include/mtd/CVS/Entries
--- u-boot-2009.03_orig/include/mtd/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/mtd/CVS/Entries 2009-03-25 15:58:15.246673600 -0700
@@ -0,0 +1,2 @@
+/ubi-user.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/mtd/CVS/Entries.Extra u-boot-2009.03/include/mtd/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/mtd/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/mtd/CVS/Entries.Extra 2009-03-25 15:58:15.246673600 -0700
@@ -0,0 +1 @@
+/ubi-user.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/mtd/CVS/Entries.Extra.Old u-boot-2009.03/include/mtd/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/mtd/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/mtd/CVS/Entries.Extra.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1 @@
+/ubi-user.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/mtd/CVS/Entries.Old u-boot-2009.03/include/mtd/CVS/Entries.Old
--- u-boot-2009.03_orig/include/mtd/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/mtd/CVS/Entries.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,2 @@
+/ubi-user.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/include/mtd/CVS/Repository u-boot-2009.03/include/mtd/CVS/Repository
--- u-boot-2009.03_orig/include/mtd/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/mtd/CVS/Repository 2009-03-25 15:25:56.352832600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/mtd
diff -Naur u-boot-2009.03_orig/include/mtd/CVS/Root u-boot-2009.03/include/mtd/CVS/Root
--- u-boot-2009.03_orig/include/mtd/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/mtd/CVS/Root 2009-03-25 15:25:56.352832600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/ns7520_eth.h u-boot-2009.03/include/ns7520_eth.h
--- u-boot-2009.03_orig/include/ns7520_eth.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/ns7520_eth.h 2009-03-31 14:58:01.812912000 -0700
@@ -1,336 +1,336 @@
-/***********************************************************************
- *
- * Copyright 2003 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id$
- * @Author: Markus Pietrek
- * @Descr: Defines the NS7520 ethernet registers.
- * Stick with the old ETH prefix names instead going to the
- * new EFE names in the manual.
- * NS7520_ETH_* refer to NS7520 Hardware
- * Reference/January 2003 [1]
- * PHY_LXT971_* refer to Intel LXT971 Datasheet
- * #249414 Rev. 02 [2]
- * Partly derived from netarm_eth_module.h
- *
- * Modified by Arthur Shipkowski <art@videon-central.com> from the
- * Linux version to be properly formatted for U-Boot (i.e. no C++ comments)
- *
- ***********************************************************************/
-
-#ifndef FS_NS7520_ETH_H
-#define FS_NS7520_ETH_H
-
-#ifdef CONFIG_DRIVER_NS7520_ETHERNET
-
-#include <miiphy.h>
-#include "lxt971a.h"
-
-/* The port addresses */
-
-#define NS7520_ETH_MODULE_BASE (0xFF800000)
-
-#define get_eth_reg_addr(c) \
- ((volatile unsigned int*) ( NS7520_ETH_MODULE_BASE+(unsigned int) (c)))
-#define NS7520_ETH_EGCR (0x0000) /* Ethernet Gen Control */
-#define NS7520_ETH_EGSR (0x0004) /* Ethernet Gen Status */
-#define NS7520_ETH_FIFO (0x0008) /* FIFO Data */
-#define NS7520_ETH_FIFOL (0x000C) /* FIFO Data Last */
-#define NS7520_ETH_ETSR (0x0010) /* Ethernet Transmit Status */
-#define NS7520_ETH_ERSR (0x0014) /* Ethernet Receive Status */
-#define NS7520_ETH_MAC1 (0x0400) /* MAC Config 1 */
-#define NS7520_ETH_MAC2 (0x0404) /* MAC Config 2 */
-#define NS7520_ETH_IPGT (0x0408) /* Back2Back InterPacket Gap */
-#define NS7520_ETH_IPGR (0x040C) /* non back2back InterPacket Gap */
-#define NS7520_ETH_CLRT (0x0410) /* Collision Window/Retry */
-#define NS7520_ETH_MAXF (0x0414) /* Maximum Frame Register */
-#define NS7520_ETH_SUPP (0x0418) /* PHY Support */
-#define NS7520_ETH_TEST (0x041C) /* Test Register */
-#define NS7520_ETH_MCFG (0x0420) /* MII Management Configuration */
-#define NS7520_ETH_MCMD (0x0424) /* MII Management Command */
-#define NS7520_ETH_MADR (0x0428) /* MII Management Address */
-#define NS7520_ETH_MWTD (0x042C) /* MII Management Write Data */
-#define NS7520_ETH_MRDD (0x0430) /* MII Management Read Data */
-#define NS7520_ETH_MIND (0x0434) /* MII Management Indicators */
-#define NS7520_ETH_SMII (0x0438) /* SMII Status Register */
-#define NS7520_ETH_SA1 (0x0440) /* Station Address 1 */
-#define NS7520_ETH_SA2 (0x0444) /* Station Address 2 */
-#define NS7520_ETH_SA3 (0x0448) /* Station Address 3 */
-#define NS7520_ETH_SAFR (0x05C0) /* Station Address Filter */
-#define NS7520_ETH_HT1 (0x05D0) /* Hash Table 1 */
-#define NS7520_ETH_HT2 (0x05D4) /* Hash Table 2 */
-#define NS7520_ETH_HT3 (0x05D8) /* Hash Table 3 */
-#define NS7520_ETH_HT4 (0x05DC) /* Hash Table 4 */
-
-/* EGCR Ethernet General Control Register Bit Fields*/
-
-#define NS7520_ETH_EGCR_ERX (0x80000000) /* Enable Receive FIFO */
-#define NS7520_ETH_EGCR_ERXDMA (0x40000000) /* Enable Receive DMA */
-#define NS7520_ETH_EGCR_ERXLNG (0x20000000) /* Accept Long packets */
-#define NS7520_ETH_EGCR_ERXSHT (0x10000000) /* Accept Short packets */
-#define NS7520_ETH_EGCR_ERXREG (0x08000000) /* Enable Receive Data Interrupt */
-#define NS7520_ETH_EGCR_ERFIFOH (0x04000000) /* Enable Receive Half-Full Int */
-#define NS7520_ETH_EGCR_ERXBR (0x02000000) /* Enable Receive buffer ready */
-#define NS7520_ETH_EGCR_ERXBAD (0x01000000) /* Accept bad receive packets */
-#define NS7520_ETH_EGCR_ETX (0x00800000) /* Enable Transmit FIFO */
-#define NS7520_ETH_EGCR_ETXDMA (0x00400000) /* Enable Transmit DMA */
-#define NS7520_ETH_EGCR_ETXWM_R (0x00300000) /* Enable Transmit FIFO mark Reserv */
-#define NS7520_ETH_EGCR_ETXWM_75 (0x00200000) /* Enable Transmit FIFO mark 75% */
-#define NS7520_ETH_EGCR_ETXWM_50 (0x00100000) /* Enable Transmit FIFO mark 50% */
-#define NS7520_ETH_EGCR_ETXWM_25 (0x00000000) /* Enable Transmit FIFO mark 25% */
-#define NS7520_ETH_EGCR_ETXREG (0x00080000) /* Enable Transmit Data Read Int */
-#define NS7520_ETH_EGCR_ETFIFOH (0x00040000) /* Enable Transmit Fifo Half Int */
-#define NS7520_ETH_EGCR_ETXBC (0x00020000) /* Enable Transmit Buffer Compl Int */
-#define NS7520_ETH_EGCR_EFULLD (0x00010000) /* Enable Full Duplex Operation */
-#define NS7520_ETH_EGCR_MODE_MA (0x0000C000) /* Mask */
-#define NS7520_ETH_EGCR_MODE_SEE (0x0000C000) /* 10 Mbps SEEQ ENDEC PHY */
-#define NS7520_ETH_EGCR_MODE_LEV (0x00008000) /* 10 Mbps Level1 ENDEC PHY */
-#define NS7520_ETH_EGCR_RES1 (0x00002000) /* Reserved */
-#define NS7520_ETH_EGCR_RXCINV (0x00001000) /* Invert the receive clock input */
-#define NS7520_ETH_EGCR_TXCINV (0x00000800) /* Invert the transmit clock input */
-#define NS7520_ETH_EGCR_PNA (0x00000400) /* pSOS pNA buffer */
-#define NS7520_ETH_EGCR_MAC_RES (0x00000200) /* MAC Software reset */
-#define NS7520_ETH_EGCR_ITXA (0x00000100) /* Insert Transmit Source Address */
-#define NS7520_ETH_EGCR_ENDEC_MA (0x000000FC) /* ENDEC media control bits */
-#define NS7520_ETH_EGCR_EXINT_MA (0x00000003) /* Mask */
-#define NS7520_ETH_EGCR_EXINT_RE (0x00000003) /* Reserved */
-#define NS7520_ETH_EGCR_EXINT_TP (0x00000002) /* TP-PMD Mode */
-#define NS7520_ETH_EGCR_EXINT_10 (0x00000001) /* 10-MBit Mode */
-#define NS7520_ETH_EGCR_EXINT_NO (0x00000000) /* MII normal operation */
-
-/* EGSR Ethernet General Status Register Bit Fields*/
-
-#define NS7520_ETH_EGSR_RES1 (0xC0000000) /* Reserved */
-#define NS7520_ETH_EGSR_RXFDB_MA (0x30000000) /* Receive FIFO mask */
-#define NS7520_ETH_EGSR_RXFDB_3 (0x30000000) /* Receive FIFO 3 bytes available */
-#define NS7520_ETH_EGSR_RXFDB_2 (0x20000000) /* Receive FIFO 2 bytes available */
-#define NS7520_ETH_EGCR_RXFDB_1 (0x10000000) /* Receive FIFO 1 Bytes available */
-#define NS7520_ETH_EGCR_RXFDB_4 (0x00000000) /* Receive FIFO 4 Bytes available */
-#define NS7520_ETH_EGSR_RXREGR (0x08000000) /* Receive Register Ready */
-#define NS7520_ETH_EGSR_RXFIFOH (0x04000000) /* Receive FIFO Half Full */
-#define NS7520_ETH_EGSR_RXBR (0x02000000) /* Receive Buffer Ready */
-#define NS7520_ETH_EGSR_RXSKIP (0x01000000) /* Receive Buffer Skip */
-#define NS7520_ETH_EGSR_RES2 (0x00F00000) /* Reserved */
-#define NS7520_ETH_EGSR_TXREGE (0x00080000) /* Transmit Register Empty */
-#define NS7520_ETH_EGSR_TXFIFOH (0x00040000) /* Transmit FIFO half empty */
-#define NS7520_ETH_EGSR_TXBC (0x00020000) /* Transmit buffer complete */
-#define NS7520_ETH_EGSR_TXFIFOE (0x00010000) /* Transmit FIFO empty */
-#define NS7520_ETH_EGSR_RXPINS (0x0000FC00) /* ENDEC Phy Status */
-#define NS7520_ETH_EGSR_RES3 (0x000003FF) /* Reserved */
-
-/* ETSR Ethernet Transmit Status Register Bit Fields*/
-
-#define NS7520_ETH_ETSR_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_ETSR_TXOK (0x00008000) /* Packet transmitted OK */
-#define NS7520_ETH_ETSR_TXBR (0x00004000) /* Broadcast packet transmitted */
-#define NS7520_ETH_ETSR_TXMC (0x00002000) /* Multicast packet transmitted */
-#define NS7520_ETH_ETSR_TXAL (0x00001000) /* Transmit abort - late collision */
-#define NS7520_ETH_ETSR_TXAED (0x00000800) /* Transmit abort - deferral */
-#define NS7520_ETH_ETSR_TXAEC (0x00000400) /* Transmit abort - exc collisions */
-#define NS7520_ETH_ETSR_TXAUR (0x00000200) /* Transmit abort - underrun */
-#define NS7520_ETH_ETSR_TXAJ (0x00000100) /* Transmit abort - jumbo */
-#define NS7520_ETH_ETSR_RES2 (0x00000080) /* Reserved */
-#define NS7520_ETH_ETSR_TXDEF (0x00000040) /* Transmit Packet Deferred */
-#define NS7520_ETH_ETSR_TXCRC (0x00000020) /* Transmit CRC error */
-#define NS7520_ETH_ETSR_RES3 (0x00000010) /* Reserved */
-#define NS7520_ETH_ETSR_TXCOLC (0x0000000F) /* Transmit Collision Count */
-
-/* ERSR Ethernet Receive Status Register Bit Fields*/
-
-#define NS7520_ETH_ERSR_RXSIZE (0xFFFF0000) /* Receive Buffer Size */
-#define NS7520_ETH_ERSR_RXCE (0x00008000) /* Receive Carrier Event */
-#define NS7520_ETH_ERSR_RXDV (0x00004000) /* Receive Data Violation Event */
-#define NS7520_ETH_ERSR_RXOK (0x00002000) /* Receive Packet OK */
-#define NS7520_ETH_ERSR_RXBR (0x00001000) /* Receive Broadcast Packet */
-#define NS7520_ETH_ERSR_RXMC (0x00000800) /* Receive Multicast Packet */
-#define NS7520_ETH_ERSR_RXCRC (0x00000400) /* Receive Packet has CRC error */
-#define NS7520_ETH_ERSR_RXDR (0x00000200) /* Receive Packet has dribble error */
-#define NS7520_ETH_ERSR_RXCV (0x00000100) /* Receive Packet code violation */
-#define NS7520_ETH_ERSR_RXLNG (0x00000080) /* Receive Packet too long */
-#define NS7520_ETH_ERSR_RXSHT (0x00000040) /* Receive Packet too short */
-#define NS7520_ETH_ERSR_ROVER (0x00000020) /* Recive overflow */
-#define NS7520_ETH_ERSR_RES (0x0000001F) /* Reserved */
-
-/* MAC1 MAC Configuration Register 1 Bit Fields*/
-
-#define NS7520_ETH_MAC1_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_MAC1_SRST (0x00008000) /* Soft Reset */
-#define NS7520_ETH_MAC1_SIMMRST (0x00004000) /* Simulation Reset */
-#define NS7520_ETH_MAC1_RES2 (0x00003000) /* Reserved */
-#define NS7520_ETH_MAC1_RPEMCSR (0x00000800) /* Reset PEMCS/RX */
-#define NS7520_ETH_MAC1_RPERFUN (0x00000400) /* Reset PERFUN */
-#define NS7520_ETH_MAC1_RPEMCST (0x00000200) /* Reset PEMCS/TX */
-#define NS7520_ETH_MAC1_RPETFUN (0x00000100) /* Reset PETFUN */
-#define NS7520_ETH_MAC1_RES3 (0x000000E0) /* Reserved */
-#define NS7520_ETH_MAC1_LOOPBK (0x00000010) /* Internal Loopback */
-#define NS7520_ETH_MAC1_TXFLOW (0x00000008) /* TX flow control */
-#define NS7520_ETH_MAC1_RXFLOW (0x00000004) /* RX flow control */
-#define NS7520_ETH_MAC1_PALLRX (0x00000002) /* Pass ALL receive frames */
-#define NS7520_ETH_MAC1_RXEN (0x00000001) /* Receive enable */
-
-/* MAC Configuration Register 2 Bit Fields*/
-
-#define NS7520_ETH_MAC2_RES1 (0xFFFF8000) /* Reserved */
-#define NS7520_ETH_MAC2_EDEFER (0x00004000) /* Excess Deferral */
-#define NS7520_ETH_MAC2_BACKP (0x00002000) /* Backpressure/NO back off */
-#define NS7520_ETH_MAC2_NOBO (0x00001000) /* No back off */
-#define NS7520_ETH_MAC2_RES2 (0x00000C00) /* Reserved */
-#define NS7520_ETH_MAC2_LONGP (0x00000200) /* Long Preable enforcement */
-#define NS7520_ETH_MAC2_PUREP (0x00000100) /* Pure preamble enforcement */
-#define NS7520_ETH_MAC2_AUTOP (0x00000080) /* Auto detect PAD enable */
-#define NS7520_ETH_MAC2_VLANP (0x00000040) /* VLAN pad enable */
-#define NS7520_ETH_MAC2_PADEN (0x00000020) /* PAD/CRC enable */
-#define NS7520_ETH_MAC2_CRCEN (0x00000010) /* CRC enable */
-#define NS7520_ETH_MAC2_DELCRC (0x00000008) /* Delayed CRC */
-#define NS7520_ETH_MAC2_HUGE (0x00000004) /* Huge frame enable */
-#define NS7520_ETH_MAC2_FLENC (0x00000002) /* Frame length checking */
-#define NS7520_ETH_MAC2_FULLD (0x00000001) /* Full duplex */
-
-/* IPGT Back-to-Back Inter-Packet-Gap Register Bit Fields*/
-
-#define NS7520_ETH_IPGT_RES (0xFFFFFF80) /* Reserved */
-#define NS7520_ETH_IPGT_IPGT (0x0000007F) /* Back-to-Back Interpacket Gap */
-
-/* IPGR Non Back-to-Back Inter-Packet-Gap Register Bit Fields*/
-
-#define NS7520_ETH_IPGR_RES1 (0xFFFF8000) /* Reserved */
-#define NS7520_ETH_IPGR_IPGR1 (0x00007F00) /* Non Back-to-back Interpacket Gap */
-#define NS7520_ETH_IPGR_RES2 (0x00000080) /* Reserved */
-#define NS7520_ETH_IPGR_IPGR2 (0x0000007F) /* Non back-to-back Interpacket Gap */
-
-/* CLRT Collision Windows/Collision Retry Register Bit Fields*/
-
-#define NS7520_ETH_CLRT_RES1 (0xFFFFC000) /* Reserved */
-#define NS7520_ETH_CLRT_CWIN (0x00003F00) /* Collision Windows */
-#define NS7520_ETH_CLRT_RES2 (0x000000F0) /* Reserved */
-#define NS7520_ETH_CLRT_RETX (0x0000000F) /* Retransmission maximum */
-
-/* MAXF Maximum Frame Register Bit Fields*/
-
-#define NS7520_ETH_MAXF_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_MAXF_MAXF (0x0000FFFF) /* Maximum frame length */
-
-/* SUPP PHY Support Register Bit Fields*/
-
-#define NS7520_ETH_SUPP_RES1 (0xFFFFFF00) /* Reserved */
-#define NS7520_ETH_SUPP_RPE100X (0x00000080) /* Reset PE100X module */
-#define NS7520_ETH_SUPP_FORCEQ (0x00000040) /* Force Quit */
-#define NS7520_ETH_SUPP_NOCIPH (0x00000020) /* No Cipher */
-#define NS7520_ETH_SUPP_DLINKF (0x00000010) /* Disable link fail */
-#define NS7520_ETH_SUPP_RPE10T (0x00000008) /* Reset PE10T module */
-#define NS7520_ETH_SUPP_RES2 (0x00000004) /* Reserved */
-#define NS7520_ETH_SUPP_JABBER (0x00000002) /* Enable Jabber protection */
-#define NS7520_ETH_SUPP_BITMODE (0x00000001) /* Bit Mode */
-
-/* TEST Register Bit Fields*/
-
-#define NS7520_ETH_TEST_RES1 (0xFFFFFFF8) /* Reserved */
-#define NS7520_ETH_TEST_TBACK (0x00000004) /* Test backpressure */
-#define NS7520_ETH_TEST_TPAUSE (0x00000002) /* Test Pause */
-#define NS7520_ETH_TEST_SPQ (0x00000001) /* Shortcut pause quanta */
-
-/* MCFG MII Management Configuration Register Bit Fields*/
-
-#define NS7520_ETH_MCFG_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_MCFG_RMIIM (0x00008000) /* Reset MII management */
-#define NS7520_ETH_MCFG_RES2 (0x00007FE0) /* Reserved */
-#define NS7520_ETH_MCFG_CLKS_MA (0x0000001C) /* Clock Select */
-#define NS7520_ETH_MCFG_CLKS_4 (0x00000004) /* Sysclk / 4 */
-#define NS7520_ETH_MCFG_CLKS_6 (0x00000008) /* Sysclk / 6 */
-#define NS7520_ETH_MCFG_CLKS_8 (0x0000000C) /* Sysclk / 8 */
-#define NS7520_ETH_MCFG_CLKS_10 (0x00000010) /* Sysclk / 10 */
-#define NS7520_ETH_MCFG_CLKS_14 (0x00000014) /* Sysclk / 14 */
-#define NS7520_ETH_MCFG_CLKS_20 (0x00000018) /* Sysclk / 20 */
-#define NS7520_ETH_MCFG_CLKS_28 (0x0000001C) /* Sysclk / 28 */
-#define NS7520_ETH_MCFG_SPRE (0x00000002) /* Suppress preamble */
-#define NS7520_ETH_MCFG_SCANI (0x00000001) /* Scan increment */
-
-/* MCMD MII Management Command Register Bit Fields*/
-
-#define NS7520_ETH_MCMD_RES1 (0xFFFFFFFC) /* Reserved */
-#define NS7520_ETH_MCMD_SCAN (0x00000002) /* Automatically Scan for Read Data */
-#define NS7520_ETH_MCMD_READ (0x00000001) /* Single scan for Read Data */
-
-/* MCMD MII Management Address Register Bit Fields*/
-
-#define NS7520_ETH_MADR_RES1 (0xFFFFE000) /* Reserved */
-#define NS7520_ETH_MADR_DADR (0x00001F00) /* MII PHY device address */
-#define NS7520_ETH_MADR_RES2 (0x000000E0) /* Reserved */
-#define NS7520_ETH_MADR_RADR (0x0000001F) /* MII PHY register address */
-
-/* MWTD MII Management Write Data Register Bit Fields*/
-
-#define NS7520_ETH_MWTD_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_MWTD_MWTD (0x0000FFFF) /* MII Write Data */
-
-/* MRRD MII Management Read Data Register Bit Fields*/
-
-#define NS7520_ETH_MRRD_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_MRRD_MRDD (0x0000FFFF) /* MII Read Data */
-
-/* MIND MII Management Indicators Register Bit Fields*/
-
-#define NS7520_ETH_MIND_RES1 (0xFFFFFFF8) /* Reserved */
-#define NS7520_ETH_MIND_NVALID (0x00000004) /* Read Data not valid */
-#define NS7520_ETH_MIND_SCAN (0x00000002) /* Automatically scan for read data */
-#define NS7520_ETH_MIND_BUSY (0x00000001) /* MII interface busy */
-
-/* SMII Status Register Bit Fields*/
-
-#define NS7520_ETH_SMII_RES1 (0xFFFFFFE0) /* Reserved */
-#define NS7520_ETH_SMII_CLASH (0x00000010) /* MAC-to-MAC with PHY */
-#define NS7520_ETH_SMII_JABBER (0x00000008) /* Jabber condition present */
-#define NS7520_ETH_SMII_LINK (0x00000004) /* Link OK */
-#define NS7520_ETH_SMII_DUPLEX (0x00000002) /* Full-duplex operation */
-#define NS7520_ETH_SMII_SPEED (0x00000001) /* 100 Mbps */
-
-/* SA1 Station Address 1 Register Bit Fields*/
-
-#define NS7520_ETH_SA1_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_SA1_OCTET1 (0x0000FF00) /* Station Address octet 1 */
-#define NS7520_ETH_SA1_OCTET2 (0x000000FF) /* Station Address octet 2 */
-
-/* SA2 Station Address 2 Register Bit Fields*/
-
-#define NS7520_ETH_SA2_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_SA2_OCTET3 (0x0000FF00) /* Station Address octet 3 */
-#define NS7520_ETH_SA2_OCTET4 (0x000000FF) /* Station Address octet 4 */
-
-/* SA3 Station Address 3 Register Bit Fields*/
-
-#define NS7520_ETH_SA3_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_SA3_OCTET5 (0x0000FF00) /* Station Address octet 5 */
-#define NS7520_ETH_SA3_OCTET6 (0x000000FF) /* Station Address octet 6 */
-
-/* SAFR Station Address Filter Register Bit Fields*/
-
-#define NS7520_ETH_SAFR_RES1 (0xFFFFFFF0) /* Reserved */
-#define NS7520_ETH_SAFR_PRO (0x00000008) /* Enable Promiscuous mode */
-#define NS7520_ETH_SAFR_PRM (0x00000004) /* Accept ALL multicast packets */
-#define NS7520_ETH_SAFR_PRA (0x00000002) /* Accept multicast packets table */
-#define NS7520_ETH_SAFR_BROAD (0x00000001) /* Accept ALL Broadcast packets */
-
-/* HT1 Hash Table 1 Register Bit Fields*/
-
-#define NS7520_ETH_HT1_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_HT1_HT1 (0x0000FFFF) /* CRC value 15-0 */
-
-/* HT2 Hash Table 2 Register Bit Fields*/
-
-#define NS7520_ETH_HT2_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_HT2_HT2 (0x0000FFFF) /* CRC value 31-16 */
-
-/* HT3 Hash Table 3 Register Bit Fields*/
-
-#define NS7520_ETH_HT3_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_HT3_HT3 (0x0000FFFF) /* CRC value 47-32 */
-
-/* HT4 Hash Table 4 Register Bit Fields*/
-
-#define NS7520_ETH_HT4_RES1 (0xFFFF0000) /* Reserved */
-#define NS7520_ETH_HT4_HT4 (0x0000FFFF) /* CRC value 63-48 */
-
-#endif /* CONFIG_DRIVER_NS7520_ETHERNET */
-
-#endif /* FS_NS7520_ETH_H */
+/***********************************************************************
+ *
+ * Copyright 2003 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns7520_eth.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @Descr: Defines the NS7520 ethernet registers.
+ * Stick with the old ETH prefix names instead going to the
+ * new EFE names in the manual.
+ * NS7520_ETH_* refer to NS7520 Hardware
+ * Reference/January 2003 [1]
+ * PHY_LXT971_* refer to Intel LXT971 Datasheet
+ * #249414 Rev. 02 [2]
+ * Partly derived from netarm_eth_module.h
+ *
+ * Modified by Arthur Shipkowski <art@videon-central.com> from the
+ * Linux version to be properly formatted for U-Boot (i.e. no C++ comments)
+ *
+ ***********************************************************************/
+
+#ifndef FS_NS7520_ETH_H
+#define FS_NS7520_ETH_H
+
+#ifdef CONFIG_DRIVER_NS7520_ETHERNET
+
+#include <miiphy.h>
+#include "lxt971a.h"
+
+/* The port addresses */
+
+#define NS7520_ETH_MODULE_BASE (0xFF800000)
+
+#define get_eth_reg_addr(c) \
+ ((volatile unsigned int*) ( NS7520_ETH_MODULE_BASE+(unsigned int) (c)))
+#define NS7520_ETH_EGCR (0x0000) /* Ethernet Gen Control */
+#define NS7520_ETH_EGSR (0x0004) /* Ethernet Gen Status */
+#define NS7520_ETH_FIFO (0x0008) /* FIFO Data */
+#define NS7520_ETH_FIFOL (0x000C) /* FIFO Data Last */
+#define NS7520_ETH_ETSR (0x0010) /* Ethernet Transmit Status */
+#define NS7520_ETH_ERSR (0x0014) /* Ethernet Receive Status */
+#define NS7520_ETH_MAC1 (0x0400) /* MAC Config 1 */
+#define NS7520_ETH_MAC2 (0x0404) /* MAC Config 2 */
+#define NS7520_ETH_IPGT (0x0408) /* Back2Back InterPacket Gap */
+#define NS7520_ETH_IPGR (0x040C) /* non back2back InterPacket Gap */
+#define NS7520_ETH_CLRT (0x0410) /* Collision Window/Retry */
+#define NS7520_ETH_MAXF (0x0414) /* Maximum Frame Register */
+#define NS7520_ETH_SUPP (0x0418) /* PHY Support */
+#define NS7520_ETH_TEST (0x041C) /* Test Register */
+#define NS7520_ETH_MCFG (0x0420) /* MII Management Configuration */
+#define NS7520_ETH_MCMD (0x0424) /* MII Management Command */
+#define NS7520_ETH_MADR (0x0428) /* MII Management Address */
+#define NS7520_ETH_MWTD (0x042C) /* MII Management Write Data */
+#define NS7520_ETH_MRDD (0x0430) /* MII Management Read Data */
+#define NS7520_ETH_MIND (0x0434) /* MII Management Indicators */
+#define NS7520_ETH_SMII (0x0438) /* SMII Status Register */
+#define NS7520_ETH_SA1 (0x0440) /* Station Address 1 */
+#define NS7520_ETH_SA2 (0x0444) /* Station Address 2 */
+#define NS7520_ETH_SA3 (0x0448) /* Station Address 3 */
+#define NS7520_ETH_SAFR (0x05C0) /* Station Address Filter */
+#define NS7520_ETH_HT1 (0x05D0) /* Hash Table 1 */
+#define NS7520_ETH_HT2 (0x05D4) /* Hash Table 2 */
+#define NS7520_ETH_HT3 (0x05D8) /* Hash Table 3 */
+#define NS7520_ETH_HT4 (0x05DC) /* Hash Table 4 */
+
+/* EGCR Ethernet General Control Register Bit Fields*/
+
+#define NS7520_ETH_EGCR_ERX (0x80000000) /* Enable Receive FIFO */
+#define NS7520_ETH_EGCR_ERXDMA (0x40000000) /* Enable Receive DMA */
+#define NS7520_ETH_EGCR_ERXLNG (0x20000000) /* Accept Long packets */
+#define NS7520_ETH_EGCR_ERXSHT (0x10000000) /* Accept Short packets */
+#define NS7520_ETH_EGCR_ERXREG (0x08000000) /* Enable Receive Data Interrupt */
+#define NS7520_ETH_EGCR_ERFIFOH (0x04000000) /* Enable Receive Half-Full Int */
+#define NS7520_ETH_EGCR_ERXBR (0x02000000) /* Enable Receive buffer ready */
+#define NS7520_ETH_EGCR_ERXBAD (0x01000000) /* Accept bad receive packets */
+#define NS7520_ETH_EGCR_ETX (0x00800000) /* Enable Transmit FIFO */
+#define NS7520_ETH_EGCR_ETXDMA (0x00400000) /* Enable Transmit DMA */
+#define NS7520_ETH_EGCR_ETXWM_R (0x00300000) /* Enable Transmit FIFO mark Reserv */
+#define NS7520_ETH_EGCR_ETXWM_75 (0x00200000) /* Enable Transmit FIFO mark 75% */
+#define NS7520_ETH_EGCR_ETXWM_50 (0x00100000) /* Enable Transmit FIFO mark 50% */
+#define NS7520_ETH_EGCR_ETXWM_25 (0x00000000) /* Enable Transmit FIFO mark 25% */
+#define NS7520_ETH_EGCR_ETXREG (0x00080000) /* Enable Transmit Data Read Int */
+#define NS7520_ETH_EGCR_ETFIFOH (0x00040000) /* Enable Transmit Fifo Half Int */
+#define NS7520_ETH_EGCR_ETXBC (0x00020000) /* Enable Transmit Buffer Compl Int */
+#define NS7520_ETH_EGCR_EFULLD (0x00010000) /* Enable Full Duplex Operation */
+#define NS7520_ETH_EGCR_MODE_MA (0x0000C000) /* Mask */
+#define NS7520_ETH_EGCR_MODE_SEE (0x0000C000) /* 10 Mbps SEEQ ENDEC PHY */
+#define NS7520_ETH_EGCR_MODE_LEV (0x00008000) /* 10 Mbps Level1 ENDEC PHY */
+#define NS7520_ETH_EGCR_RES1 (0x00002000) /* Reserved */
+#define NS7520_ETH_EGCR_RXCINV (0x00001000) /* Invert the receive clock input */
+#define NS7520_ETH_EGCR_TXCINV (0x00000800) /* Invert the transmit clock input */
+#define NS7520_ETH_EGCR_PNA (0x00000400) /* pSOS pNA buffer */
+#define NS7520_ETH_EGCR_MAC_RES (0x00000200) /* MAC Software reset */
+#define NS7520_ETH_EGCR_ITXA (0x00000100) /* Insert Transmit Source Address */
+#define NS7520_ETH_EGCR_ENDEC_MA (0x000000FC) /* ENDEC media control bits */
+#define NS7520_ETH_EGCR_EXINT_MA (0x00000003) /* Mask */
+#define NS7520_ETH_EGCR_EXINT_RE (0x00000003) /* Reserved */
+#define NS7520_ETH_EGCR_EXINT_TP (0x00000002) /* TP-PMD Mode */
+#define NS7520_ETH_EGCR_EXINT_10 (0x00000001) /* 10-MBit Mode */
+#define NS7520_ETH_EGCR_EXINT_NO (0x00000000) /* MII normal operation */
+
+/* EGSR Ethernet General Status Register Bit Fields*/
+
+#define NS7520_ETH_EGSR_RES1 (0xC0000000) /* Reserved */
+#define NS7520_ETH_EGSR_RXFDB_MA (0x30000000) /* Receive FIFO mask */
+#define NS7520_ETH_EGSR_RXFDB_3 (0x30000000) /* Receive FIFO 3 bytes available */
+#define NS7520_ETH_EGSR_RXFDB_2 (0x20000000) /* Receive FIFO 2 bytes available */
+#define NS7520_ETH_EGCR_RXFDB_1 (0x10000000) /* Receive FIFO 1 Bytes available */
+#define NS7520_ETH_EGCR_RXFDB_4 (0x00000000) /* Receive FIFO 4 Bytes available */
+#define NS7520_ETH_EGSR_RXREGR (0x08000000) /* Receive Register Ready */
+#define NS7520_ETH_EGSR_RXFIFOH (0x04000000) /* Receive FIFO Half Full */
+#define NS7520_ETH_EGSR_RXBR (0x02000000) /* Receive Buffer Ready */
+#define NS7520_ETH_EGSR_RXSKIP (0x01000000) /* Receive Buffer Skip */
+#define NS7520_ETH_EGSR_RES2 (0x00F00000) /* Reserved */
+#define NS7520_ETH_EGSR_TXREGE (0x00080000) /* Transmit Register Empty */
+#define NS7520_ETH_EGSR_TXFIFOH (0x00040000) /* Transmit FIFO half empty */
+#define NS7520_ETH_EGSR_TXBC (0x00020000) /* Transmit buffer complete */
+#define NS7520_ETH_EGSR_TXFIFOE (0x00010000) /* Transmit FIFO empty */
+#define NS7520_ETH_EGSR_RXPINS (0x0000FC00) /* ENDEC Phy Status */
+#define NS7520_ETH_EGSR_RES3 (0x000003FF) /* Reserved */
+
+/* ETSR Ethernet Transmit Status Register Bit Fields*/
+
+#define NS7520_ETH_ETSR_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_ETSR_TXOK (0x00008000) /* Packet transmitted OK */
+#define NS7520_ETH_ETSR_TXBR (0x00004000) /* Broadcast packet transmitted */
+#define NS7520_ETH_ETSR_TXMC (0x00002000) /* Multicast packet transmitted */
+#define NS7520_ETH_ETSR_TXAL (0x00001000) /* Transmit abort - late collision */
+#define NS7520_ETH_ETSR_TXAED (0x00000800) /* Transmit abort - deferral */
+#define NS7520_ETH_ETSR_TXAEC (0x00000400) /* Transmit abort - exc collisions */
+#define NS7520_ETH_ETSR_TXAUR (0x00000200) /* Transmit abort - underrun */
+#define NS7520_ETH_ETSR_TXAJ (0x00000100) /* Transmit abort - jumbo */
+#define NS7520_ETH_ETSR_RES2 (0x00000080) /* Reserved */
+#define NS7520_ETH_ETSR_TXDEF (0x00000040) /* Transmit Packet Deferred */
+#define NS7520_ETH_ETSR_TXCRC (0x00000020) /* Transmit CRC error */
+#define NS7520_ETH_ETSR_RES3 (0x00000010) /* Reserved */
+#define NS7520_ETH_ETSR_TXCOLC (0x0000000F) /* Transmit Collision Count */
+
+/* ERSR Ethernet Receive Status Register Bit Fields*/
+
+#define NS7520_ETH_ERSR_RXSIZE (0xFFFF0000) /* Receive Buffer Size */
+#define NS7520_ETH_ERSR_RXCE (0x00008000) /* Receive Carrier Event */
+#define NS7520_ETH_ERSR_RXDV (0x00004000) /* Receive Data Violation Event */
+#define NS7520_ETH_ERSR_RXOK (0x00002000) /* Receive Packet OK */
+#define NS7520_ETH_ERSR_RXBR (0x00001000) /* Receive Broadcast Packet */
+#define NS7520_ETH_ERSR_RXMC (0x00000800) /* Receive Multicast Packet */
+#define NS7520_ETH_ERSR_RXCRC (0x00000400) /* Receive Packet has CRC error */
+#define NS7520_ETH_ERSR_RXDR (0x00000200) /* Receive Packet has dribble error */
+#define NS7520_ETH_ERSR_RXCV (0x00000100) /* Receive Packet code violation */
+#define NS7520_ETH_ERSR_RXLNG (0x00000080) /* Receive Packet too long */
+#define NS7520_ETH_ERSR_RXSHT (0x00000040) /* Receive Packet too short */
+#define NS7520_ETH_ERSR_ROVER (0x00000020) /* Recive overflow */
+#define NS7520_ETH_ERSR_RES (0x0000001F) /* Reserved */
+
+/* MAC1 MAC Configuration Register 1 Bit Fields*/
+
+#define NS7520_ETH_MAC1_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_MAC1_SRST (0x00008000) /* Soft Reset */
+#define NS7520_ETH_MAC1_SIMMRST (0x00004000) /* Simulation Reset */
+#define NS7520_ETH_MAC1_RES2 (0x00003000) /* Reserved */
+#define NS7520_ETH_MAC1_RPEMCSR (0x00000800) /* Reset PEMCS/RX */
+#define NS7520_ETH_MAC1_RPERFUN (0x00000400) /* Reset PERFUN */
+#define NS7520_ETH_MAC1_RPEMCST (0x00000200) /* Reset PEMCS/TX */
+#define NS7520_ETH_MAC1_RPETFUN (0x00000100) /* Reset PETFUN */
+#define NS7520_ETH_MAC1_RES3 (0x000000E0) /* Reserved */
+#define NS7520_ETH_MAC1_LOOPBK (0x00000010) /* Internal Loopback */
+#define NS7520_ETH_MAC1_TXFLOW (0x00000008) /* TX flow control */
+#define NS7520_ETH_MAC1_RXFLOW (0x00000004) /* RX flow control */
+#define NS7520_ETH_MAC1_PALLRX (0x00000002) /* Pass ALL receive frames */
+#define NS7520_ETH_MAC1_RXEN (0x00000001) /* Receive enable */
+
+/* MAC Configuration Register 2 Bit Fields*/
+
+#define NS7520_ETH_MAC2_RES1 (0xFFFF8000) /* Reserved */
+#define NS7520_ETH_MAC2_EDEFER (0x00004000) /* Excess Deferral */
+#define NS7520_ETH_MAC2_BACKP (0x00002000) /* Backpressure/NO back off */
+#define NS7520_ETH_MAC2_NOBO (0x00001000) /* No back off */
+#define NS7520_ETH_MAC2_RES2 (0x00000C00) /* Reserved */
+#define NS7520_ETH_MAC2_LONGP (0x00000200) /* Long Preable enforcement */
+#define NS7520_ETH_MAC2_PUREP (0x00000100) /* Pure preamble enforcement */
+#define NS7520_ETH_MAC2_AUTOP (0x00000080) /* Auto detect PAD enable */
+#define NS7520_ETH_MAC2_VLANP (0x00000040) /* VLAN pad enable */
+#define NS7520_ETH_MAC2_PADEN (0x00000020) /* PAD/CRC enable */
+#define NS7520_ETH_MAC2_CRCEN (0x00000010) /* CRC enable */
+#define NS7520_ETH_MAC2_DELCRC (0x00000008) /* Delayed CRC */
+#define NS7520_ETH_MAC2_HUGE (0x00000004) /* Huge frame enable */
+#define NS7520_ETH_MAC2_FLENC (0x00000002) /* Frame length checking */
+#define NS7520_ETH_MAC2_FULLD (0x00000001) /* Full duplex */
+
+/* IPGT Back-to-Back Inter-Packet-Gap Register Bit Fields*/
+
+#define NS7520_ETH_IPGT_RES (0xFFFFFF80) /* Reserved */
+#define NS7520_ETH_IPGT_IPGT (0x0000007F) /* Back-to-Back Interpacket Gap */
+
+/* IPGR Non Back-to-Back Inter-Packet-Gap Register Bit Fields*/
+
+#define NS7520_ETH_IPGR_RES1 (0xFFFF8000) /* Reserved */
+#define NS7520_ETH_IPGR_IPGR1 (0x00007F00) /* Non Back-to-back Interpacket Gap */
+#define NS7520_ETH_IPGR_RES2 (0x00000080) /* Reserved */
+#define NS7520_ETH_IPGR_IPGR2 (0x0000007F) /* Non back-to-back Interpacket Gap */
+
+/* CLRT Collision Windows/Collision Retry Register Bit Fields*/
+
+#define NS7520_ETH_CLRT_RES1 (0xFFFFC000) /* Reserved */
+#define NS7520_ETH_CLRT_CWIN (0x00003F00) /* Collision Windows */
+#define NS7520_ETH_CLRT_RES2 (0x000000F0) /* Reserved */
+#define NS7520_ETH_CLRT_RETX (0x0000000F) /* Retransmission maximum */
+
+/* MAXF Maximum Frame Register Bit Fields*/
+
+#define NS7520_ETH_MAXF_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_MAXF_MAXF (0x0000FFFF) /* Maximum frame length */
+
+/* SUPP PHY Support Register Bit Fields*/
+
+#define NS7520_ETH_SUPP_RES1 (0xFFFFFF00) /* Reserved */
+#define NS7520_ETH_SUPP_RPE100X (0x00000080) /* Reset PE100X module */
+#define NS7520_ETH_SUPP_FORCEQ (0x00000040) /* Force Quit */
+#define NS7520_ETH_SUPP_NOCIPH (0x00000020) /* No Cipher */
+#define NS7520_ETH_SUPP_DLINKF (0x00000010) /* Disable link fail */
+#define NS7520_ETH_SUPP_RPE10T (0x00000008) /* Reset PE10T module */
+#define NS7520_ETH_SUPP_RES2 (0x00000004) /* Reserved */
+#define NS7520_ETH_SUPP_JABBER (0x00000002) /* Enable Jabber protection */
+#define NS7520_ETH_SUPP_BITMODE (0x00000001) /* Bit Mode */
+
+/* TEST Register Bit Fields*/
+
+#define NS7520_ETH_TEST_RES1 (0xFFFFFFF8) /* Reserved */
+#define NS7520_ETH_TEST_TBACK (0x00000004) /* Test backpressure */
+#define NS7520_ETH_TEST_TPAUSE (0x00000002) /* Test Pause */
+#define NS7520_ETH_TEST_SPQ (0x00000001) /* Shortcut pause quanta */
+
+/* MCFG MII Management Configuration Register Bit Fields*/
+
+#define NS7520_ETH_MCFG_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_MCFG_RMIIM (0x00008000) /* Reset MII management */
+#define NS7520_ETH_MCFG_RES2 (0x00007FE0) /* Reserved */
+#define NS7520_ETH_MCFG_CLKS_MA (0x0000001C) /* Clock Select */
+#define NS7520_ETH_MCFG_CLKS_4 (0x00000004) /* Sysclk / 4 */
+#define NS7520_ETH_MCFG_CLKS_6 (0x00000008) /* Sysclk / 6 */
+#define NS7520_ETH_MCFG_CLKS_8 (0x0000000C) /* Sysclk / 8 */
+#define NS7520_ETH_MCFG_CLKS_10 (0x00000010) /* Sysclk / 10 */
+#define NS7520_ETH_MCFG_CLKS_14 (0x00000014) /* Sysclk / 14 */
+#define NS7520_ETH_MCFG_CLKS_20 (0x00000018) /* Sysclk / 20 */
+#define NS7520_ETH_MCFG_CLKS_28 (0x0000001C) /* Sysclk / 28 */
+#define NS7520_ETH_MCFG_SPRE (0x00000002) /* Suppress preamble */
+#define NS7520_ETH_MCFG_SCANI (0x00000001) /* Scan increment */
+
+/* MCMD MII Management Command Register Bit Fields*/
+
+#define NS7520_ETH_MCMD_RES1 (0xFFFFFFFC) /* Reserved */
+#define NS7520_ETH_MCMD_SCAN (0x00000002) /* Automatically Scan for Read Data */
+#define NS7520_ETH_MCMD_READ (0x00000001) /* Single scan for Read Data */
+
+/* MCMD MII Management Address Register Bit Fields*/
+
+#define NS7520_ETH_MADR_RES1 (0xFFFFE000) /* Reserved */
+#define NS7520_ETH_MADR_DADR (0x00001F00) /* MII PHY device address */
+#define NS7520_ETH_MADR_RES2 (0x000000E0) /* Reserved */
+#define NS7520_ETH_MADR_RADR (0x0000001F) /* MII PHY register address */
+
+/* MWTD MII Management Write Data Register Bit Fields*/
+
+#define NS7520_ETH_MWTD_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_MWTD_MWTD (0x0000FFFF) /* MII Write Data */
+
+/* MRRD MII Management Read Data Register Bit Fields*/
+
+#define NS7520_ETH_MRRD_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_MRRD_MRDD (0x0000FFFF) /* MII Read Data */
+
+/* MIND MII Management Indicators Register Bit Fields*/
+
+#define NS7520_ETH_MIND_RES1 (0xFFFFFFF8) /* Reserved */
+#define NS7520_ETH_MIND_NVALID (0x00000004) /* Read Data not valid */
+#define NS7520_ETH_MIND_SCAN (0x00000002) /* Automatically scan for read data */
+#define NS7520_ETH_MIND_BUSY (0x00000001) /* MII interface busy */
+
+/* SMII Status Register Bit Fields*/
+
+#define NS7520_ETH_SMII_RES1 (0xFFFFFFE0) /* Reserved */
+#define NS7520_ETH_SMII_CLASH (0x00000010) /* MAC-to-MAC with PHY */
+#define NS7520_ETH_SMII_JABBER (0x00000008) /* Jabber condition present */
+#define NS7520_ETH_SMII_LINK (0x00000004) /* Link OK */
+#define NS7520_ETH_SMII_DUPLEX (0x00000002) /* Full-duplex operation */
+#define NS7520_ETH_SMII_SPEED (0x00000001) /* 100 Mbps */
+
+/* SA1 Station Address 1 Register Bit Fields*/
+
+#define NS7520_ETH_SA1_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_SA1_OCTET1 (0x0000FF00) /* Station Address octet 1 */
+#define NS7520_ETH_SA1_OCTET2 (0x000000FF) /* Station Address octet 2 */
+
+/* SA2 Station Address 2 Register Bit Fields*/
+
+#define NS7520_ETH_SA2_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_SA2_OCTET3 (0x0000FF00) /* Station Address octet 3 */
+#define NS7520_ETH_SA2_OCTET4 (0x000000FF) /* Station Address octet 4 */
+
+/* SA3 Station Address 3 Register Bit Fields*/
+
+#define NS7520_ETH_SA3_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_SA3_OCTET5 (0x0000FF00) /* Station Address octet 5 */
+#define NS7520_ETH_SA3_OCTET6 (0x000000FF) /* Station Address octet 6 */
+
+/* SAFR Station Address Filter Register Bit Fields*/
+
+#define NS7520_ETH_SAFR_RES1 (0xFFFFFFF0) /* Reserved */
+#define NS7520_ETH_SAFR_PRO (0x00000008) /* Enable Promiscuous mode */
+#define NS7520_ETH_SAFR_PRM (0x00000004) /* Accept ALL multicast packets */
+#define NS7520_ETH_SAFR_PRA (0x00000002) /* Accept multicast packets table */
+#define NS7520_ETH_SAFR_BROAD (0x00000001) /* Accept ALL Broadcast packets */
+
+/* HT1 Hash Table 1 Register Bit Fields*/
+
+#define NS7520_ETH_HT1_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_HT1_HT1 (0x0000FFFF) /* CRC value 15-0 */
+
+/* HT2 Hash Table 2 Register Bit Fields*/
+
+#define NS7520_ETH_HT2_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_HT2_HT2 (0x0000FFFF) /* CRC value 31-16 */
+
+/* HT3 Hash Table 3 Register Bit Fields*/
+
+#define NS7520_ETH_HT3_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_HT3_HT3 (0x0000FFFF) /* CRC value 47-32 */
+
+/* HT4 Hash Table 4 Register Bit Fields*/
+
+#define NS7520_ETH_HT4_RES1 (0xFFFF0000) /* Reserved */
+#define NS7520_ETH_HT4_HT4 (0x0000FFFF) /* CRC value 63-48 */
+
+#endif /* CONFIG_DRIVER_NS7520_ETHERNET */
+
+#endif /* FS_NS7520_ETH_H */
diff -Naur u-boot-2009.03_orig/include/ns9750_bbus.h u-boot-2009.03/include/ns9750_bbus.h
--- u-boot-2009.03_orig/include/ns9750_bbus.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/ns9750_bbus.h 2009-03-31 14:58:02.062908800 -0700
@@ -1,125 +1,125 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_bbus.h,v 1.1 2004/02/16 10:37:20 mpietrek Exp $
- * @Author: Markus Pietrek
- * @Descr: Definitions for BBus usage
- * @References: [1] NS9750 Hardware Reference Manual/December 2003 Chap. 10
- *
- * 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
- *
- *
- ***********************************************************************/
-
-#ifndef FS_NS9750_BBUS_H
-#define FS_NS9750_BBUS_H
-
-#define NS9750_BBUS_MODULE_BASE (0x90600000)
-
-#define get_bbus_reg_addr(c) \
- ((volatile unsigned int *)(NS9750_BBUS_MODULE_BASE+(unsigned int) (c)))
-
-/* We have support for 50 GPIO pins */
-
-#define get_gpio_cfg_reg_addr(pin) \
- get_bbus_reg_addr( NS9750_BBUS_GPIO_CFG_BASE + (((pin) >> 3) * 4) )
-
-/* To Read/Modify/Write a pin configuration register, use it like
- set_gpio_cfg_reg_val( 12, NS9750_GPIO_CFG_FUNC_GPIO|NS9750_GPIO_CFG_OUTPUT );
- They should be wrapped by cli()/sti() */
-#define set_gpio_cfg_reg_val(pin,cfg) \
- *get_gpio_cfg_reg_addr(pin)=(*get_gpio_cfg_reg_addr((pin)) & \
- ~NS9750_GPIO_CFG_MASK((pin))) |\
- NS9750_GPIO_CFG_VAL((pin),(cfg));
-
-#define NS9750_GPIO_CFG_MASK(pin) (NS9750_GPIO_CFG_VAL(pin, \
- NS9750_GPIO_CFG_MA))
-#define NS9750_GPIO_CFG_VAL(pin,cfg) ((cfg) << (((pin) % 8) * 4))
-
-#define NS9750_GPIO_CFG_MA (0x0F)
-#define NS9750_GPIO_CFG_INPUT (0x00)
-#define NS9750_GPIO_CFG_OUTPUT (0x08)
-#define NS9750_GPIO_CFG_FUNC_GPIO (0x03)
-#define NS9750_GPIO_CFG_FUNC_2 (0x02)
-#define NS9750_GPIO_CFG_FUNC_1 (0x01)
-#define NS9750_GPIO_CFG_FUNC_0 (0x00)
-
-/* the register addresses */
-
-#define NS9750_BBUS_MASTER_RESET (0x00)
-#define NS9750_BBUS_GPIO_CFG_BASE (0x10)
-#define NS9750_BBUS_GPIO_CTRL_BASE (0x30)
-#define NS9750_BBUS_GPIO_STAT_BASE (0x40)
-#define NS9750_BBUS_MONITOR (0x50)
-#define NS9750_BBUS_DMA_INT_STAT (0x60)
-#define NS9750_BBUS_DMA_INT_ENABLE (0x64)
-#define NS9750_BBUS_USB_CFG (0x70)
-#define NS9750_BBUS_ENDIAN_CFG (0x80)
-#define NS9750_BBUS_ARM_WAKE_UP (0x90)
-
-/* register bit fields */
-
-#define NS9750_BBUS_MASTER_RESET_UTIL (0x00000100)
-#define NS9750_BBUS_MASTER_RESET_I2C (0x00000080)
-#define NS9750_BBUS_MASTER_RESET_1284 (0x00000040)
-#define NS9750_BBUS_MASTER_RESET_SER4 (0x00000020)
-#define NS9750_BBUS_MASTER_RESET_SER3 (0x00000010)
-#define NS9750_BBUS_MASTER_RESET_SER2 (0x00000008)
-#define NS9750_BBUS_MASTER_RESET_SER1 (0x00000004)
-#define NS9750_BBUS_MASTER_RESET_USB (0x00000002)
-#define NS9750_BBUS_MASTER_RESET_DMA (0x00000001)
-
-/* BS9750_BBUS_DMA_INT_BINT* are valid for *DMA_INT_STAT and *DMA_INT_ENABLE */
-
-#define NS9750_BBUS_DMA_INT_BINT16 (0x00010000)
-#define NS9750_BBUS_DMA_INT_BINT15 (0x00008000)
-#define NS9750_BBUS_DMA_INT_BINT14 (0x00004000)
-#define NS9750_BBUS_DMA_INT_BINT13 (0x00002000)
-#define NS9750_BBUS_DMA_INT_BINT12 (0x00001000)
-#define NS9750_BBUS_DMA_INT_BINT11 (0x00000800)
-#define NS9750_BBUS_DMA_INT_BINT10 (0x00000400)
-#define NS9750_BBUS_DMA_INT_BINT9 (0x00000200)
-#define NS9750_BBUS_DMA_INT_BINT8 (0x00000100)
-#define NS9750_BBUS_DMA_INT_BINT7 (0x00000080)
-#define NS9750_BBUS_DMA_INT_BINT6 (0x00000040)
-#define NS9750_BBUS_DMA_INT_BINT5 (0x00000020)
-#define NS9750_BBUS_DMA_INT_BINT4 (0x00000010)
-#define NS9750_BBUS_DMA_INT_BINT3 (0x00000008)
-#define NS9750_BBUS_DMA_INT_BINT2 (0x00000004)
-#define NS9750_BBUS_DMA_INT_BINT1 (0x00000002)
-#define NS9750_BBUS_DMA_INT_BINT0 (0x00000001)
-
-#define NS9750_BBUS_USB_CFG_OUTEN (0x00000008)
-#define NS9750_BBUS_USB_CFG_SPEED (0x00000004)
-#define NS9750_BBUS_USB_CFG_CFG_MA (0x00000003)
-#define NS9750_BBUS_USB_CFG_CFG_HOST_SOFT (0x00000003)
-#define NS9750_BBUS_USB_CFG_CFG_DEVICE (0x00000002)
-#define NS9750_BBUS_USB_CFG_CFG_HOST (0x00000001)
-#define NS9750_BBUS_USB_CFG_CFG_DIS (0x00000000)
-
-#define NS9750_BBUS_ENDIAN_CFG_AHBM (0x00001000)
-#define NS9750_BBUS_ENDIAN_CFG_I2C (0x00000080)
-#define NS9750_BBUS_ENDIAN_CFG_IEEE1284 (0x00000040)
-#define NS9750_BBUS_ENDIAN_CFG_SER4 (0x00000020)
-#define NS9750_BBUS_ENDIAN_CFG_SER3 (0x00000010)
-#define NS9750_BBUS_ENDIAN_CFG_SER2 (0x00000008)
-#define NS9750_BBUS_ENDIAN_CFG_SER1 (0x00000004)
-#define NS9750_BBUS_ENDIAN_CFG_USB (0x00000002)
-#define NS9750_BBUS_ENDIAN_CFG_DMA (0x00000001)
-
-#endif /* FS_NS9750_BBUS_H */
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns9750_bbus.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @Descr: Definitions for BBus usage
+ * @References: [1] NS9750 Hardware Reference Manual/December 2003 Chap. 10
+ *
+ * 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
+ *
+ *
+ ***********************************************************************/
+
+#ifndef FS_NS9750_BBUS_H
+#define FS_NS9750_BBUS_H
+
+#define NS9750_BBUS_MODULE_BASE (0x90600000)
+
+#define get_bbus_reg_addr(c) \
+ ((volatile unsigned int *)(NS9750_BBUS_MODULE_BASE+(unsigned int) (c)))
+
+/* We have support for 50 GPIO pins */
+
+#define get_gpio_cfg_reg_addr(pin) \
+ get_bbus_reg_addr( NS9750_BBUS_GPIO_CFG_BASE + (((pin) >> 3) * 4) )
+
+/* To Read/Modify/Write a pin configuration register, use it like
+ set_gpio_cfg_reg_val( 12, NS9750_GPIO_CFG_FUNC_GPIO|NS9750_GPIO_CFG_OUTPUT );
+ They should be wrapped by cli()/sti() */
+#define set_gpio_cfg_reg_val(pin,cfg) \
+ *get_gpio_cfg_reg_addr(pin)=(*get_gpio_cfg_reg_addr((pin)) & \
+ ~NS9750_GPIO_CFG_MASK((pin))) |\
+ NS9750_GPIO_CFG_VAL((pin),(cfg));
+
+#define NS9750_GPIO_CFG_MASK(pin) (NS9750_GPIO_CFG_VAL(pin, \
+ NS9750_GPIO_CFG_MA))
+#define NS9750_GPIO_CFG_VAL(pin,cfg) ((cfg) << (((pin) % 8) * 4))
+
+#define NS9750_GPIO_CFG_MA (0x0F)
+#define NS9750_GPIO_CFG_INPUT (0x00)
+#define NS9750_GPIO_CFG_OUTPUT (0x08)
+#define NS9750_GPIO_CFG_FUNC_GPIO (0x03)
+#define NS9750_GPIO_CFG_FUNC_2 (0x02)
+#define NS9750_GPIO_CFG_FUNC_1 (0x01)
+#define NS9750_GPIO_CFG_FUNC_0 (0x00)
+
+/* the register addresses */
+
+#define NS9750_BBUS_MASTER_RESET (0x00)
+#define NS9750_BBUS_GPIO_CFG_BASE (0x10)
+#define NS9750_BBUS_GPIO_CTRL_BASE (0x30)
+#define NS9750_BBUS_GPIO_STAT_BASE (0x40)
+#define NS9750_BBUS_MONITOR (0x50)
+#define NS9750_BBUS_DMA_INT_STAT (0x60)
+#define NS9750_BBUS_DMA_INT_ENABLE (0x64)
+#define NS9750_BBUS_USB_CFG (0x70)
+#define NS9750_BBUS_ENDIAN_CFG (0x80)
+#define NS9750_BBUS_ARM_WAKE_UP (0x90)
+
+/* register bit fields */
+
+#define NS9750_BBUS_MASTER_RESET_UTIL (0x00000100)
+#define NS9750_BBUS_MASTER_RESET_I2C (0x00000080)
+#define NS9750_BBUS_MASTER_RESET_1284 (0x00000040)
+#define NS9750_BBUS_MASTER_RESET_SER4 (0x00000020)
+#define NS9750_BBUS_MASTER_RESET_SER3 (0x00000010)
+#define NS9750_BBUS_MASTER_RESET_SER2 (0x00000008)
+#define NS9750_BBUS_MASTER_RESET_SER1 (0x00000004)
+#define NS9750_BBUS_MASTER_RESET_USB (0x00000002)
+#define NS9750_BBUS_MASTER_RESET_DMA (0x00000001)
+
+/* BS9750_BBUS_DMA_INT_BINT* are valid for *DMA_INT_STAT and *DMA_INT_ENABLE */
+
+#define NS9750_BBUS_DMA_INT_BINT16 (0x00010000)
+#define NS9750_BBUS_DMA_INT_BINT15 (0x00008000)
+#define NS9750_BBUS_DMA_INT_BINT14 (0x00004000)
+#define NS9750_BBUS_DMA_INT_BINT13 (0x00002000)
+#define NS9750_BBUS_DMA_INT_BINT12 (0x00001000)
+#define NS9750_BBUS_DMA_INT_BINT11 (0x00000800)
+#define NS9750_BBUS_DMA_INT_BINT10 (0x00000400)
+#define NS9750_BBUS_DMA_INT_BINT9 (0x00000200)
+#define NS9750_BBUS_DMA_INT_BINT8 (0x00000100)
+#define NS9750_BBUS_DMA_INT_BINT7 (0x00000080)
+#define NS9750_BBUS_DMA_INT_BINT6 (0x00000040)
+#define NS9750_BBUS_DMA_INT_BINT5 (0x00000020)
+#define NS9750_BBUS_DMA_INT_BINT4 (0x00000010)
+#define NS9750_BBUS_DMA_INT_BINT3 (0x00000008)
+#define NS9750_BBUS_DMA_INT_BINT2 (0x00000004)
+#define NS9750_BBUS_DMA_INT_BINT1 (0x00000002)
+#define NS9750_BBUS_DMA_INT_BINT0 (0x00000001)
+
+#define NS9750_BBUS_USB_CFG_OUTEN (0x00000008)
+#define NS9750_BBUS_USB_CFG_SPEED (0x00000004)
+#define NS9750_BBUS_USB_CFG_CFG_MA (0x00000003)
+#define NS9750_BBUS_USB_CFG_CFG_HOST_SOFT (0x00000003)
+#define NS9750_BBUS_USB_CFG_CFG_DEVICE (0x00000002)
+#define NS9750_BBUS_USB_CFG_CFG_HOST (0x00000001)
+#define NS9750_BBUS_USB_CFG_CFG_DIS (0x00000000)
+
+#define NS9750_BBUS_ENDIAN_CFG_AHBM (0x00001000)
+#define NS9750_BBUS_ENDIAN_CFG_I2C (0x00000080)
+#define NS9750_BBUS_ENDIAN_CFG_IEEE1284 (0x00000040)
+#define NS9750_BBUS_ENDIAN_CFG_SER4 (0x00000020)
+#define NS9750_BBUS_ENDIAN_CFG_SER3 (0x00000010)
+#define NS9750_BBUS_ENDIAN_CFG_SER2 (0x00000008)
+#define NS9750_BBUS_ENDIAN_CFG_SER1 (0x00000004)
+#define NS9750_BBUS_ENDIAN_CFG_USB (0x00000002)
+#define NS9750_BBUS_ENDIAN_CFG_DMA (0x00000001)
+
+#endif /* FS_NS9750_BBUS_H */
diff -Naur u-boot-2009.03_orig/include/ns9750_eth.h u-boot-2009.03/include/ns9750_eth.h
--- u-boot-2009.03_orig/include/ns9750_eth.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/ns9750_eth.h 2009-03-31 14:58:02.094158400 -0700
@@ -1,298 +1,298 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_eth.h,v 1.2 2004/02/24 13:25:39 mpietrek Exp $
- * @Author: Markus Pietrek
- * @References: [1] NS9750 Hardware Reference, December 2003
- * [2] Intel LXT971 Datasheet #249414 Rev. 02
- * [3] NS7520 Linux Ethernet Driver
- *
- * 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
- *
- ***********************************************************************/
-
-#ifndef FS_NS9750_ETH_H
-#define FS_NS9750_ETH_H
-
-#ifdef CONFIG_DRIVER_NS9750_ETHERNET
-
-#include <miiphy.h>
-#include "lxt971a.h"
-
-#define NS9750_ETH_MODULE_BASE (0xA0600000)
-
-#define get_eth_reg_addr(c) \
- ((volatile unsigned int*) ( NS9750_ETH_MODULE_BASE+(unsigned int) (c)))
-
-#define NS9750_ETH_EGCR1 (0x0000)
-#define NS9750_ETH_EGCR2 (0x0004)
-#define NS9750_ETH_EGSR (0x0008)
-#define NS9750_ETH_FIFORX (0x000C)
-#define NS9750_ETH_FIFOTX (0x0010)
-#define NS9750_ETH_FIFOTXS (0x0014)
-#define NS9750_ETH_ETSR (0x0018)
-#define NS9750_ETH_ERSR (0x001C)
-#define NS9750_ETH_MAC1 (0x0400)
-#define NS9750_ETH_MAC2 (0x0404)
-#define NS9750_ETH_IPGT (0x0408)
-#define NS9750_ETH_IPGR (0x040C)
-#define NS9750_ETH_CLRT (0x0410)
-#define NS9750_ETH_MAXF (0x0414)
-#define NS9750_ETH_SUPP (0x0418)
-#define NS9750_ETH_TEST (0x041C)
-#define NS9750_ETH_MCFG (0x0420)
-#define NS9750_ETH_MCMD (0x0424)
-#define NS9750_ETH_MADR (0x0428)
-#define NS9750_ETH_MWTD (0x042C)
-#define NS9750_ETH_MRDD (0x0430)
-#define NS9750_ETH_MIND (0x0434)
-#define NS9750_ETH_SA1 (0x0440)
-#define NS9750_ETH_SA2 (0x0444)
-#define NS9750_ETH_SA3 (0x0448)
-#define NS9750_ETH_SAFR (0x0500)
-#define NS9750_ETH_HT1 (0x0504)
-#define NS9750_ETH_HT2 (0x0508)
-#define NS9750_ETH_STAT_BASE (0x0680)
-#define NS9750_ETH_RXAPTR (0x0A00)
-#define NS9750_ETH_RXBPTR (0x0A04)
-#define NS9750_ETH_RXCPTR (0x0A08)
-#define NS9750_ETH_RXDPTR (0x0A0C)
-#define NS9750_ETH_EINTR (0x0A10)
-#define NS9750_ETH_EINTREN (0x0A14)
-#define NS9750_ETH_TXPTR (0x0A18)
-#define NS9750_ETH_TXRPTR (0x0A1C)
-#define NS9750_ETH_TXERBD (0x0A20)
-#define NS9750_ETH_TXSPTR (0x0A24)
-#define NS9750_ETH_RXAOFF (0x0A28)
-#define NS9750_ETH_RXBOFF (0x0A2C)
-#define NS9750_ETH_RXCOFF (0x0A30)
-#define NS9750_ETH_RXDOFF (0x0A34)
-#define NS9750_ETH_TXOFF (0x0A38)
-#define NS9750_ETH_RXFREE (0x0A3C)
-#define NS9750_ETH_TXBD (0x1000)
-
-/* register bit fields */
-
-#define NS9750_ETH_EGCR1_ERX (0x80000000)
-#define NS9750_ETH_EGCR1_ERXDMA (0x40000000)
-#define NS9750_ETH_EGCR1_ERXSHT (0x10000000)
-#define NS9750_ETH_EGCR1_ERXSIZ (0x08000000)
-#define NS9750_ETH_EGCR1_ETXSIZ (0x04000000)
-#define NS9750_ETH_EGCR1_ETXDIAG (0x02000000)
-#define NS9750_ETH_EGCR1_ERXBAD (0x01000000)
-#define NS9750_ETH_EGCR1_ETX (0x00800000)
-#define NS9750_ETH_EGCR1_ETXDMA (0x00400000)
-#define NS9750_ETH_EGCR1_ETXWM (0x00200000)
-#define NS9750_ETH_EGCR1_ERXADV (0x00100000)
-#define NS9750_ETH_EGCR1_ERXINIT (0x00080000)
-#define NS9750_ETH_EGCR1_PHY_MODE_MA (0x0000C000)
-#define NS9750_ETH_EGCR1_PHY_MODE_MII (0x00008000)
-#define NS9750_ETH_EGCR1_PHY_MODE_RMII (0x00004000)
-#define NS9750_ETH_EGCR1_RXCINV (0x00001000)
-#define NS9750_ETH_EGCR1_TXCINV (0x00000800)
-#define NS9750_ETH_EGCR1_RXALIGN (0x00000400)
-#define NS9750_ETH_EGCR1_MAC_HRST (0x00000200)
-#define NS9750_ETH_EGCR1_ITXA (0x00000100)
-
-#define NS9750_ETH_EGCR2_TPTV_MA (0xFFFF0000)
-#define NS9750_ETH_EGCR2_TPCF (0x00000040)
-#define NS9750_ETH_EGCR2_THPDF (0x00000020)
-#define NS9750_ETH_EGCR2_TCLER (0x00000008)
-#define NS9750_ETH_EGCR2_AUTOZ (0x00000004)
-#define NS9750_ETH_EGCR2_CLRCNT (0x00000002)
-#define NS9750_ETH_EGCR2_STEN (0x00000001)
-
-#define NS9750_ETH_EGSR_RXINIT (0x00100000)
-#define NS9750_ETH_EGSR_TXFIFONF (0x00080000)
-#define NS9750_ETH_EGSR_TXFIFOH (0x00040000)
-#define NS9750_ETH_EGSR_TXFIFOE (0x00010000)
-
-#define NS9750_ETH_FIFOTXS_ALL (0x00000055)
-#define NS9750_ETH_FIFOTXS_3 (0x000000d5)
-#define NS9750_ETH_FIFOTXS_2 (0x00000035)
-#define NS9750_ETH_FIFOTXS_1 (0x0000000D)
-#define NS9750_ETH_FIFOTXS_0 (0x00000003)
-
-#define NS9750_ETH_ETSR_TXOK (0x00008000)
-#define NS9750_ETH_ETSR_TXBR (0x00004000)
-#define NS9750_ETH_ETSR_TXMC (0x00002000)
-#define NS9750_ETH_ETSR_TXAL (0x00001000)
-#define NS9750_ETH_ETSR_TXAED (0x00000800)
-#define NS9750_ETH_ETSR_TXAEC (0x00000400)
-#define NS9750_ETH_ETSR_TXAUR (0x00000200)
-#define NS9750_ETH_ETSR_TXAJ (0x00000100)
-#define NS9750_ETH_ETSR_TXDEF (0x00000040)
-#define NS9750_ETH_ETSR_TXCRC (0x00000020)
-#define NS9750_ETH_ETSR_TXCOLC (0x0000000F)
-
-#define NS9750_ETH_ERSR_RXSIZE_MA (0x0FFF0000)
-#define NS9750_ETH_ERSR_RXCE (0x00008000)
-#define NS9750_ETH_ERSR_RXDV (0x00004000)
-#define NS9750_ETH_ERSR_RXOK (0x00002000)
-#define NS9750_ETH_ERSR_RXBR (0x00001000)
-#define NS9750_ETH_ERSR_RXMC (0x00000800)
-#define NS9750_ETH_ERSR_RXCRC (0x00000400)
-#define NS9750_ETH_ERSR_RXDR (0x00000200)
-#define NS9750_ETH_ERSR_RXCV (0x00000100)
-#define NS9750_ETH_ERSR_RXSHT (0x00000040)
-
-#define NS9750_ETH_MAC1_SRST (0x00008000)
-#define NS9750_ETH_MAC1_SIMMRST (0x00004000)
-#define NS9750_ETH_MAC1_RPEMCSR (0x00000800)
-#define NS9750_ETH_MAC1_RPERFUN (0x00000400)
-#define NS9750_ETH_MAC1_RPEMCST (0x00000200)
-#define NS9750_ETH_MAC1_RPETFUN (0x00000100)
-#define NS9750_ETH_MAC1_LOOPBK (0x00000010)
-#define NS9750_ETH_MAC1_TXFLOW (0x00000008)
-#define NS9750_ETH_MAC1_RXFLOW (0x00000004)
-#define NS9750_ETH_MAC1_PALLRX (0x00000002)
-#define NS9750_ETH_MAC1_RXEN (0x00000001)
-
-#define NS9750_ETH_MAC2_EDEFER (0x00004000)
-#define NS9750_ETH_MAC2_BACKP (0x00002000)
-#define NS9750_ETH_MAC2_NOBO (0x00001000)
-#define NS9750_ETH_MAC2_LONGP (0x00000200)
-#define NS9750_ETH_MAC2_PUREP (0x00000100)
-#define NS9750_ETH_MAC2_AUTOP (0x00000080)
-#define NS9750_ETH_MAC2_VLANP (0x00000040)
-#define NS9750_ETH_MAC2_PADEN (0x00000020)
-#define NS9750_ETH_MAC2_CRCEN (0x00000010)
-#define NS9750_ETH_MAC2_DELCRC (0x00000008)
-#define NS9750_ETH_MAC2_HUGE (0x00000004)
-#define NS9750_ETH_MAC2_FLENC (0x00000002)
-#define NS9750_ETH_MAC2_FULLD (0x00000001)
-
-#define NS9750_ETH_IPGT_MA (0x0000007F)
-
-#define NS9750_ETH_IPGR_IPGR1 (0x00007F00)
-#define NS9750_ETH_IPGR_IPGR2 (0x0000007F)
-
-#define NS9750_ETH_CLRT_CWIN (0x00003F00)
-#define NS9750_ETH_CLRT_RETX (0x0000000F)
-
-#define NS9750_ETH_MAXF_MAXF (0x0000FFFF)
-
-#define NS9750_ETH_SUPP_RPERMII (0x00008000)
-#define NS9750_ETH_SUPP_SPEED (0x00000080)
-
-#define NS9750_ETH_TEST_TBACK (0x00000004)
-#define NS9750_ETH_TEST_TPAUSE (0x00000002)
-#define NS9750_ETH_TEST_SPQ (0x00000001)
-
-#define NS9750_ETH_MCFG_RMIIM (0x00008000)
-#define NS9750_ETH_MCFG_CLKS_MA (0x0000001C)
-#define NS9750_ETH_MCFG_CLKS_4 (0x00000004)
-#define NS9750_ETH_MCFG_CLKS_6 (0x00000008)
-#define NS9750_ETH_MCFG_CLKS_8 (0x0000000C)
-#define NS9750_ETH_MCFG_CLKS_10 (0x00000010)
-#define NS9750_ETH_MCFG_CLKS_20 (0x00000014)
-#define NS9750_ETH_MCFG_CLKS_30 (0x00000018)
-#define NS9750_ETH_MCFG_CLKS_40 (0x0000001C)
-#define NS9750_ETH_MCFG_SPRE (0x00000002)
-#define NS9750_ETH_MCFG_SCANI (0x00000001)
-
-#define NS9750_ETH_MCMD_SCAN (0x00000002)
-#define NS9750_ETH_MCMD_READ (0x00000001)
-
-#define NS9750_ETH_MADR_DADR_MA (0x00001F00)
-#define NS9750_ETH_MADR_RADR_MA (0x0000001F)
-
-#define NS9750_ETH_MWTD_MA (0x0000FFFF)
-
-#define NS9750_ETH_MRRD_MA (0x0000FFFF)
-
-#define NS9750_ETH_MIND_MIILF (0x00000008)
-#define NS9750_ETH_MIND_NVALID (0x00000004)
-#define NS9750_ETH_MIND_SCAN (0x00000002)
-#define NS9750_ETH_MIND_BUSY (0x00000001)
-
-#define NS9750_ETH_SA1_OCTET1_MA (0x0000FF00)
-#define NS9750_ETH_SA1_OCTET2_MA (0x000000FF)
-
-#define NS9750_ETH_SA2_OCTET3_MA (0x0000FF00)
-#define NS9750_ETH_SA2_OCTET4_MA (0x000000FF)
-
-#define NS9750_ETH_SA3_OCTET5_MA (0x0000FF00)
-#define NS9750_ETH_SA3_OCTET6_MA (0x000000FF)
-
-#define NS9750_ETH_SAFR_PRO (0x00000008)
-#define NS9750_ETH_SAFR_PRM (0x00000004)
-#define NS9750_ETH_SAFR_PRA (0x00000002)
-#define NS9750_ETH_SAFR_BROAD (0x00000001)
-
-#define NS9750_ETH_HT1_MA (0x0000FFFF)
-
-#define NS9750_ETH_HT2_MA (0x0000FFFF)
-
-/* also valid for EINTREN */
-#define NS9750_ETH_EINTR_RXOVL_DATA (0x02000000)
-#define NS9750_ETH_EINTR_RXOVL_STAT (0x01000000)
-#define NS9750_ETH_EINTR_RXBUFC (0x00800000)
-#define NS9750_ETH_EINTR_RXDONEA (0x00400000)
-#define NS9750_ETH_EINTR_RXDONEB (0x00200000)
-#define NS9750_ETH_EINTR_RXDONEC (0x00100000)
-#define NS9750_ETH_EINTR_RXDONED (0x00080000)
-#define NS9750_ETH_EINTR_RXNOBUF (0x00040000)
-#define NS9750_ETH_EINTR_RXBUFFUL (0x00020000)
-#define NS9750_ETH_EINTR_RXBR (0x00010000)
-#define NS9750_ETH_EINTR_STOVFL (0x00000040)
-#define NS9750_ETH_EINTR_TXPAUSE (0x00000020)
-#define NS9750_ETH_EINTR_TXBUFC (0x00000010)
-#define NS9750_ETH_EINTR_TXBUFNR (0x00000008)
-#define NS9750_ETH_EINTR_TXDONE (0x00000004)
-#define NS9750_ETH_EINTR_TXERR (0x00000002)
-#define NS9750_ETH_EINTR_TXIDLE (0x00000001)
-#define NS9750_ETH_EINTR_RX_MA \
- (NS9750_ETH_EINTR_RXOVL_DATA | \
- NS9750_ETH_EINTR_RXOVL_STAT | \
- NS9750_ETH_EINTR_RXBUFC | \
- NS9750_ETH_EINTR_RXDONEA | \
- NS9750_ETH_EINTR_RXDONEB | \
- NS9750_ETH_EINTR_RXDONEC | \
- NS9750_ETH_EINTR_RXDONED | \
- NS9750_ETH_EINTR_RXNOBUF | \
- NS9750_ETH_EINTR_RXBUFFUL | \
- NS9750_ETH_EINTR_RXBR )
-#define NS9750_ETH_EINTR_TX_MA \
- (NS9750_ETH_EINTR_TXPAUSE | \
- NS9750_ETH_EINTR_TXBUFC | \
- NS9750_ETH_EINTR_TXBUFNR | \
- NS9750_ETH_EINTR_TXDONE | \
- NS9750_ETH_EINTR_TXERR | \
- NS9750_ETH_EINTR_TXIDLE)
-
-/* for TXPTR, TXRPTR, TXERBD and TXSPTR */
-#define NS9750_ETH_TXPTR_MA (0x000000FF)
-
-/* for RXAOFF, RXBOFF, RXCOFF and RXDOFF */
-#define NS9750_ETH_RXOFF_MA (0x000007FF)
-
-#define NS9750_ETH_TXOFF_MA (0x000003FF)
-
-#define NS9750_ETH_RXFREE_D (0x00000008)
-#define NS9750_ETH_RXFREE_C (0x00000004)
-#define NS9750_ETH_RXFREE_B (0x00000002)
-#define NS9750_ETH_RXFREE_A (0x00000001)
-
-#ifndef NS9750_ETH_PHY_ADDRESS
-# define NS9750_ETH_PHY_ADDRESS (0x0001) /* suitable for UNC20 */
-#endif /* NETARM_ETH_PHY_ADDRESS */
-
-#endif /* CONFIG_DRIVER_NS9750_ETHERNET */
-
-#endif /* FS_NS9750_ETH_H */
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns9750_eth.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @References: [1] NS9750 Hardware Reference, December 2003
+ * [2] Intel LXT971 Datasheet #249414 Rev. 02
+ * [3] NS7520 Linux Ethernet Driver
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#ifndef FS_NS9750_ETH_H
+#define FS_NS9750_ETH_H
+
+#ifdef CONFIG_DRIVER_NS9750_ETHERNET
+
+#include <miiphy.h>
+#include "lxt971a.h"
+
+#define NS9750_ETH_MODULE_BASE (0xA0600000)
+
+#define get_eth_reg_addr(c) \
+ ((volatile unsigned int*) ( NS9750_ETH_MODULE_BASE+(unsigned int) (c)))
+
+#define NS9750_ETH_EGCR1 (0x0000)
+#define NS9750_ETH_EGCR2 (0x0004)
+#define NS9750_ETH_EGSR (0x0008)
+#define NS9750_ETH_FIFORX (0x000C)
+#define NS9750_ETH_FIFOTX (0x0010)
+#define NS9750_ETH_FIFOTXS (0x0014)
+#define NS9750_ETH_ETSR (0x0018)
+#define NS9750_ETH_ERSR (0x001C)
+#define NS9750_ETH_MAC1 (0x0400)
+#define NS9750_ETH_MAC2 (0x0404)
+#define NS9750_ETH_IPGT (0x0408)
+#define NS9750_ETH_IPGR (0x040C)
+#define NS9750_ETH_CLRT (0x0410)
+#define NS9750_ETH_MAXF (0x0414)
+#define NS9750_ETH_SUPP (0x0418)
+#define NS9750_ETH_TEST (0x041C)
+#define NS9750_ETH_MCFG (0x0420)
+#define NS9750_ETH_MCMD (0x0424)
+#define NS9750_ETH_MADR (0x0428)
+#define NS9750_ETH_MWTD (0x042C)
+#define NS9750_ETH_MRDD (0x0430)
+#define NS9750_ETH_MIND (0x0434)
+#define NS9750_ETH_SA1 (0x0440)
+#define NS9750_ETH_SA2 (0x0444)
+#define NS9750_ETH_SA3 (0x0448)
+#define NS9750_ETH_SAFR (0x0500)
+#define NS9750_ETH_HT1 (0x0504)
+#define NS9750_ETH_HT2 (0x0508)
+#define NS9750_ETH_STAT_BASE (0x0680)
+#define NS9750_ETH_RXAPTR (0x0A00)
+#define NS9750_ETH_RXBPTR (0x0A04)
+#define NS9750_ETH_RXCPTR (0x0A08)
+#define NS9750_ETH_RXDPTR (0x0A0C)
+#define NS9750_ETH_EINTR (0x0A10)
+#define NS9750_ETH_EINTREN (0x0A14)
+#define NS9750_ETH_TXPTR (0x0A18)
+#define NS9750_ETH_TXRPTR (0x0A1C)
+#define NS9750_ETH_TXERBD (0x0A20)
+#define NS9750_ETH_TXSPTR (0x0A24)
+#define NS9750_ETH_RXAOFF (0x0A28)
+#define NS9750_ETH_RXBOFF (0x0A2C)
+#define NS9750_ETH_RXCOFF (0x0A30)
+#define NS9750_ETH_RXDOFF (0x0A34)
+#define NS9750_ETH_TXOFF (0x0A38)
+#define NS9750_ETH_RXFREE (0x0A3C)
+#define NS9750_ETH_TXBD (0x1000)
+
+/* register bit fields */
+
+#define NS9750_ETH_EGCR1_ERX (0x80000000)
+#define NS9750_ETH_EGCR1_ERXDMA (0x40000000)
+#define NS9750_ETH_EGCR1_ERXSHT (0x10000000)
+#define NS9750_ETH_EGCR1_ERXSIZ (0x08000000)
+#define NS9750_ETH_EGCR1_ETXSIZ (0x04000000)
+#define NS9750_ETH_EGCR1_ETXDIAG (0x02000000)
+#define NS9750_ETH_EGCR1_ERXBAD (0x01000000)
+#define NS9750_ETH_EGCR1_ETX (0x00800000)
+#define NS9750_ETH_EGCR1_ETXDMA (0x00400000)
+#define NS9750_ETH_EGCR1_ETXWM (0x00200000)
+#define NS9750_ETH_EGCR1_ERXADV (0x00100000)
+#define NS9750_ETH_EGCR1_ERXINIT (0x00080000)
+#define NS9750_ETH_EGCR1_PHY_MODE_MA (0x0000C000)
+#define NS9750_ETH_EGCR1_PHY_MODE_MII (0x00008000)
+#define NS9750_ETH_EGCR1_PHY_MODE_RMII (0x00004000)
+#define NS9750_ETH_EGCR1_RXCINV (0x00001000)
+#define NS9750_ETH_EGCR1_TXCINV (0x00000800)
+#define NS9750_ETH_EGCR1_RXALIGN (0x00000400)
+#define NS9750_ETH_EGCR1_MAC_HRST (0x00000200)
+#define NS9750_ETH_EGCR1_ITXA (0x00000100)
+
+#define NS9750_ETH_EGCR2_TPTV_MA (0xFFFF0000)
+#define NS9750_ETH_EGCR2_TPCF (0x00000040)
+#define NS9750_ETH_EGCR2_THPDF (0x00000020)
+#define NS9750_ETH_EGCR2_TCLER (0x00000008)
+#define NS9750_ETH_EGCR2_AUTOZ (0x00000004)
+#define NS9750_ETH_EGCR2_CLRCNT (0x00000002)
+#define NS9750_ETH_EGCR2_STEN (0x00000001)
+
+#define NS9750_ETH_EGSR_RXINIT (0x00100000)
+#define NS9750_ETH_EGSR_TXFIFONF (0x00080000)
+#define NS9750_ETH_EGSR_TXFIFOH (0x00040000)
+#define NS9750_ETH_EGSR_TXFIFOE (0x00010000)
+
+#define NS9750_ETH_FIFOTXS_ALL (0x00000055)
+#define NS9750_ETH_FIFOTXS_3 (0x000000d5)
+#define NS9750_ETH_FIFOTXS_2 (0x00000035)
+#define NS9750_ETH_FIFOTXS_1 (0x0000000D)
+#define NS9750_ETH_FIFOTXS_0 (0x00000003)
+
+#define NS9750_ETH_ETSR_TXOK (0x00008000)
+#define NS9750_ETH_ETSR_TXBR (0x00004000)
+#define NS9750_ETH_ETSR_TXMC (0x00002000)
+#define NS9750_ETH_ETSR_TXAL (0x00001000)
+#define NS9750_ETH_ETSR_TXAED (0x00000800)
+#define NS9750_ETH_ETSR_TXAEC (0x00000400)
+#define NS9750_ETH_ETSR_TXAUR (0x00000200)
+#define NS9750_ETH_ETSR_TXAJ (0x00000100)
+#define NS9750_ETH_ETSR_TXDEF (0x00000040)
+#define NS9750_ETH_ETSR_TXCRC (0x00000020)
+#define NS9750_ETH_ETSR_TXCOLC (0x0000000F)
+
+#define NS9750_ETH_ERSR_RXSIZE_MA (0x0FFF0000)
+#define NS9750_ETH_ERSR_RXCE (0x00008000)
+#define NS9750_ETH_ERSR_RXDV (0x00004000)
+#define NS9750_ETH_ERSR_RXOK (0x00002000)
+#define NS9750_ETH_ERSR_RXBR (0x00001000)
+#define NS9750_ETH_ERSR_RXMC (0x00000800)
+#define NS9750_ETH_ERSR_RXCRC (0x00000400)
+#define NS9750_ETH_ERSR_RXDR (0x00000200)
+#define NS9750_ETH_ERSR_RXCV (0x00000100)
+#define NS9750_ETH_ERSR_RXSHT (0x00000040)
+
+#define NS9750_ETH_MAC1_SRST (0x00008000)
+#define NS9750_ETH_MAC1_SIMMRST (0x00004000)
+#define NS9750_ETH_MAC1_RPEMCSR (0x00000800)
+#define NS9750_ETH_MAC1_RPERFUN (0x00000400)
+#define NS9750_ETH_MAC1_RPEMCST (0x00000200)
+#define NS9750_ETH_MAC1_RPETFUN (0x00000100)
+#define NS9750_ETH_MAC1_LOOPBK (0x00000010)
+#define NS9750_ETH_MAC1_TXFLOW (0x00000008)
+#define NS9750_ETH_MAC1_RXFLOW (0x00000004)
+#define NS9750_ETH_MAC1_PALLRX (0x00000002)
+#define NS9750_ETH_MAC1_RXEN (0x00000001)
+
+#define NS9750_ETH_MAC2_EDEFER (0x00004000)
+#define NS9750_ETH_MAC2_BACKP (0x00002000)
+#define NS9750_ETH_MAC2_NOBO (0x00001000)
+#define NS9750_ETH_MAC2_LONGP (0x00000200)
+#define NS9750_ETH_MAC2_PUREP (0x00000100)
+#define NS9750_ETH_MAC2_AUTOP (0x00000080)
+#define NS9750_ETH_MAC2_VLANP (0x00000040)
+#define NS9750_ETH_MAC2_PADEN (0x00000020)
+#define NS9750_ETH_MAC2_CRCEN (0x00000010)
+#define NS9750_ETH_MAC2_DELCRC (0x00000008)
+#define NS9750_ETH_MAC2_HUGE (0x00000004)
+#define NS9750_ETH_MAC2_FLENC (0x00000002)
+#define NS9750_ETH_MAC2_FULLD (0x00000001)
+
+#define NS9750_ETH_IPGT_MA (0x0000007F)
+
+#define NS9750_ETH_IPGR_IPGR1 (0x00007F00)
+#define NS9750_ETH_IPGR_IPGR2 (0x0000007F)
+
+#define NS9750_ETH_CLRT_CWIN (0x00003F00)
+#define NS9750_ETH_CLRT_RETX (0x0000000F)
+
+#define NS9750_ETH_MAXF_MAXF (0x0000FFFF)
+
+#define NS9750_ETH_SUPP_RPERMII (0x00008000)
+#define NS9750_ETH_SUPP_SPEED (0x00000080)
+
+#define NS9750_ETH_TEST_TBACK (0x00000004)
+#define NS9750_ETH_TEST_TPAUSE (0x00000002)
+#define NS9750_ETH_TEST_SPQ (0x00000001)
+
+#define NS9750_ETH_MCFG_RMIIM (0x00008000)
+#define NS9750_ETH_MCFG_CLKS_MA (0x0000001C)
+#define NS9750_ETH_MCFG_CLKS_4 (0x00000004)
+#define NS9750_ETH_MCFG_CLKS_6 (0x00000008)
+#define NS9750_ETH_MCFG_CLKS_8 (0x0000000C)
+#define NS9750_ETH_MCFG_CLKS_10 (0x00000010)
+#define NS9750_ETH_MCFG_CLKS_20 (0x00000014)
+#define NS9750_ETH_MCFG_CLKS_30 (0x00000018)
+#define NS9750_ETH_MCFG_CLKS_40 (0x0000001C)
+#define NS9750_ETH_MCFG_SPRE (0x00000002)
+#define NS9750_ETH_MCFG_SCANI (0x00000001)
+
+#define NS9750_ETH_MCMD_SCAN (0x00000002)
+#define NS9750_ETH_MCMD_READ (0x00000001)
+
+#define NS9750_ETH_MADR_DADR_MA (0x00001F00)
+#define NS9750_ETH_MADR_RADR_MA (0x0000001F)
+
+#define NS9750_ETH_MWTD_MA (0x0000FFFF)
+
+#define NS9750_ETH_MRRD_MA (0x0000FFFF)
+
+#define NS9750_ETH_MIND_MIILF (0x00000008)
+#define NS9750_ETH_MIND_NVALID (0x00000004)
+#define NS9750_ETH_MIND_SCAN (0x00000002)
+#define NS9750_ETH_MIND_BUSY (0x00000001)
+
+#define NS9750_ETH_SA1_OCTET1_MA (0x0000FF00)
+#define NS9750_ETH_SA1_OCTET2_MA (0x000000FF)
+
+#define NS9750_ETH_SA2_OCTET3_MA (0x0000FF00)
+#define NS9750_ETH_SA2_OCTET4_MA (0x000000FF)
+
+#define NS9750_ETH_SA3_OCTET5_MA (0x0000FF00)
+#define NS9750_ETH_SA3_OCTET6_MA (0x000000FF)
+
+#define NS9750_ETH_SAFR_PRO (0x00000008)
+#define NS9750_ETH_SAFR_PRM (0x00000004)
+#define NS9750_ETH_SAFR_PRA (0x00000002)
+#define NS9750_ETH_SAFR_BROAD (0x00000001)
+
+#define NS9750_ETH_HT1_MA (0x0000FFFF)
+
+#define NS9750_ETH_HT2_MA (0x0000FFFF)
+
+/* also valid for EINTREN */
+#define NS9750_ETH_EINTR_RXOVL_DATA (0x02000000)
+#define NS9750_ETH_EINTR_RXOVL_STAT (0x01000000)
+#define NS9750_ETH_EINTR_RXBUFC (0x00800000)
+#define NS9750_ETH_EINTR_RXDONEA (0x00400000)
+#define NS9750_ETH_EINTR_RXDONEB (0x00200000)
+#define NS9750_ETH_EINTR_RXDONEC (0x00100000)
+#define NS9750_ETH_EINTR_RXDONED (0x00080000)
+#define NS9750_ETH_EINTR_RXNOBUF (0x00040000)
+#define NS9750_ETH_EINTR_RXBUFFUL (0x00020000)
+#define NS9750_ETH_EINTR_RXBR (0x00010000)
+#define NS9750_ETH_EINTR_STOVFL (0x00000040)
+#define NS9750_ETH_EINTR_TXPAUSE (0x00000020)
+#define NS9750_ETH_EINTR_TXBUFC (0x00000010)
+#define NS9750_ETH_EINTR_TXBUFNR (0x00000008)
+#define NS9750_ETH_EINTR_TXDONE (0x00000004)
+#define NS9750_ETH_EINTR_TXERR (0x00000002)
+#define NS9750_ETH_EINTR_TXIDLE (0x00000001)
+#define NS9750_ETH_EINTR_RX_MA \
+ (NS9750_ETH_EINTR_RXOVL_DATA | \
+ NS9750_ETH_EINTR_RXOVL_STAT | \
+ NS9750_ETH_EINTR_RXBUFC | \
+ NS9750_ETH_EINTR_RXDONEA | \
+ NS9750_ETH_EINTR_RXDONEB | \
+ NS9750_ETH_EINTR_RXDONEC | \
+ NS9750_ETH_EINTR_RXDONED | \
+ NS9750_ETH_EINTR_RXNOBUF | \
+ NS9750_ETH_EINTR_RXBUFFUL | \
+ NS9750_ETH_EINTR_RXBR )
+#define NS9750_ETH_EINTR_TX_MA \
+ (NS9750_ETH_EINTR_TXPAUSE | \
+ NS9750_ETH_EINTR_TXBUFC | \
+ NS9750_ETH_EINTR_TXBUFNR | \
+ NS9750_ETH_EINTR_TXDONE | \
+ NS9750_ETH_EINTR_TXERR | \
+ NS9750_ETH_EINTR_TXIDLE)
+
+/* for TXPTR, TXRPTR, TXERBD and TXSPTR */
+#define NS9750_ETH_TXPTR_MA (0x000000FF)
+
+/* for RXAOFF, RXBOFF, RXCOFF and RXDOFF */
+#define NS9750_ETH_RXOFF_MA (0x000007FF)
+
+#define NS9750_ETH_TXOFF_MA (0x000003FF)
+
+#define NS9750_ETH_RXFREE_D (0x00000008)
+#define NS9750_ETH_RXFREE_C (0x00000004)
+#define NS9750_ETH_RXFREE_B (0x00000002)
+#define NS9750_ETH_RXFREE_A (0x00000001)
+
+#ifndef NS9750_ETH_PHY_ADDRESS
+# define NS9750_ETH_PHY_ADDRESS (0x0001) /* suitable for UNC20 */
+#endif /* NETARM_ETH_PHY_ADDRESS */
+
+#endif /* CONFIG_DRIVER_NS9750_ETHERNET */
+
+#endif /* FS_NS9750_ETH_H */
diff -Naur u-boot-2009.03_orig/include/ns9750_mem.h u-boot-2009.03/include/ns9750_mem.h
--- u-boot-2009.03_orig/include/ns9750_mem.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/ns9750_mem.h 2009-03-31 14:58:02.125408000 -0700
@@ -1,172 +1,172 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_mem.h,v 1.1 2004/02/16 10:37:20 mpietrek Exp $
- * @Author: Markus Pietrek
- * @Descr: Definitions for Memory Control Module
- * @References: [1] NS9750 Hardware Reference Manual/December 2003 Chap. 5
- *
- * 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
- *
- ***********************************************************************/
-
-#ifndef FS_NS9750_MEM_H
-#define FS_NS9750_SYS_H
-
-#define NS9750_MEM_MODULE_BASE (0xA0700000)
-
-#define get_mem_reg_addr(c) \
- ((volatile unsigned int *)(NS9750_MEM_MODULE_BASE+(unsigned int) (c)))
-
-/* the register addresses */
-
-#define NS9750_MEM_CTRL (0x0000)
-#define NS9750_MEM_STATUS (0x0004)
-#define NS9750_MEM_CFG (0x0008)
-#define NS9750_MEM_DYN_CTRL (0x0020)
-#define NS9750_MEM_DYN_REFRESH (0x0024)
-#define NS9750_MEM_DYN_READ_CFG (0x0028)
-#define NS9750_MEM_DYN_TRP (0x0030)
-#define NS9750_MEM_DYN_TRAS (0x0034)
-#define NS9750_MEM_DYN_TSREX (0x0038)
-#define NS9750_MEM_DYN_TAPR (0x003C)
-#define NS9750_MEM_DYN_TDAL (0x0040)
-#define NS9750_MEM_DYN_TWR (0x0044)
-#define NS9750_MEM_DYN_TRC (0x0048)
-#define NS9750_MEM_DYN_TRFC (0x004C)
-#define NS9750_MEM_DYN_TXSR (0x0050)
-#define NS9750_MEM_DYN_TRRD (0x0054)
-#define NS9750_MEM_DYN_TMRD (0x0058)
-#define NS9750_MEM_STAT_EXT_WAIT (0x0080)
-#define NS9750_MEM_DYN_CFG_BASE (0x0100)
-#define NS9750_MEM_DYN_RAS_CAS_BASE (0x0104)
-#define NS9750_MEM_STAT_CFG_BASE (0x0200)
-#define NS9750_MEM_STAT_WAIT_WEN_BASE (0x0204)
-#define NS9750_MEM_STAT_WAIT_OEN_BASE (0x0208)
-#define NS9750_MEM_STAT_WAIT_RD_BASE (0x020C)
-#define NS9750_MEM_STAT_WAIT_PAGE_BASE (0x0210)
-#define NS9750_MEM_STAT_WAIR_WR_BASE (0x0214)
-#define NS9750_MEM_STAT_WAIT_TURN_BASE (0x0218)
-
-/* the vectored register addresses */
-
-#define NS9750_MEM_DYN_CFG(c) (NS9750_MEM_DYN_CFG_BASE + (c)*0x20)
-#define NS9750_MEM_DYN_RAS_CAS(c) (NS9750_MEM_DYN_RAS_CAS_BASE + (c)*0x20)
-#define NS9750_MEM_STAT_CFG(c) (NS9750_MEM_STAT_CFG_BASE + (c)*0x20)
-#define NS9750_MEM_STAT_WAIT_WEN(c) (NS9750_MEM_STAT_WAIT_WEN_BASE+(c)*0x20)
-#define NS9750_MEM_STAT_WAIT_OEN(c) (NS9750_MEM_STAT_WAIT_OEN_BASE+(c)*0x20)
-#define NS9750_MEM_STAT_RD(c) (NS9750_MEM_STAT_WAIT_RD_BASE+(c)*0x20)
-#define NS9750_MEM_STAT_PAGE(c) (NS9750_MEM_STAT_WAIT_PAGE_BASE+(c)*0x20)
-#define NS9750_MEM_STAT_WR(c) (NS9750_MEM_STAT_WAIT_WR_BASE+(c)*0x20)
-#define NS9750_MEM_STAT_TURN(c) (NS9750_MEM_STAT_WAIT_TURN_BASE+(c)*0x20)
-
-/* register bit fields */
-
-#define NS9750_MEM_CTRL_L (0x00000004)
-#define NS9750_MEM_CTRL_M (0x00000002)
-#define NS9750_MEM_CTRL_E (0x00000001)
-
-#define NS9750_MEM_STAT_SA (0x00000004)
-#define NS9750_MEM_STAT_S (0x00000002)
-#define NS9750_MEM_STAT_B (0x00000001)
-
-#define NS9750_MEM_CFG_CLK (0x00000010)
-#define NS9750_MEM_CFG_N (0x00000001)
-
-#define NS9750_MEM_DYN_CTRL_NRP (0x00004000)
-#define NS9750_MEM_DYN_CTRL_DP (0x00002000)
-#define NS9750_MEM_DYN_CTRL_I_MA (0x00000180)
-#define NS9750_MEM_DYN_CTRL_I_NORMAL (0x00000000)
-#define NS9750_MEM_DYN_CTRL_I_MODE (0x00000080)
-#define NS9750_MEM_DYN_CTRL_I_PALL (0x00000100)
-#define NS9750_MEM_DYN_CTRL_I_NOP (0x00000180)
-#define NS9750_MEM_DYN_CTRL_SR (0x00000002)
-#define NS9750_MEM_DYN_CTRL_CE (0x00000001)
-
-
-#define NS9750_MEM_DYN_REFRESH_MA (0x000007FF)
-
-#define NS9750_MEM_DYN_READ_CFG_MA (0x00000003)
-#define NS9750_MEM_DYN_READ_CFG_DELAY0 (0x00000001)
-#define NS9750_MEM_DYN_READ_CFG_DELAY1 (0x00000002)
-#define NS9750_MEM_DYN_READ_CFG_DELAY2 (0x00000003)
-
-#define NS9750_MEM_DYN_TRP_MA (0x0000000F)
-
-#define NS9750_MEM_DYN_TRAS_MA (0x0000000F)
-
-#define NS9750_MEM_DYN_TSREX_MA (0x0000000F)
-
-#define NS9750_MEM_DYN_TAPR_MA (0x0000000F)
-
-#define NS9750_MEM_DYN_TDAL_MA (0x0000000F)
-
-#define NS9750_MEM_DYN_TWR_MA (0x0000000F)
-
-#define NS9750_MEM_DYN_TRC_MA (0x0000001F)
-
-#define NS9750_MEM_DYN_TRFC_MA (0x0000001F)
-
-#define NS9750_MEM_DYN_TXSR_MA (0x0000001F)
-
-#define NS9750_MEM_DYN_TRRD_MA (0x0000000F)
-
-#define NS9750_MEM_DYN_TMRD_MA (0x0000000F)
-
-#define NS9750_MEM_STAT_EXTW_WAIT_MA (0x0000003F)
-
-#define NS9750_MEM_DYN_CFG_P (0x00100000)
-#define NS9750_MEM_DYN_CFG_BDMC (0x00080000)
-#define NS9750_MEM_DYN_CFG_AM (0x00004000)
-#define NS9750_MEM_DYN_CFG_AM_MA (0x00001F80)
-#define NS9750_MEM_DYN_CFG_MD (0x00000018)
-
-#define NS9750_MEM_DYN_RAS_CAS_CAS_MA (0x00000300)
-#define NS9750_MEM_DYN_RAS_CAS_CAS_1 (0x00000100)
-#define NS9750_MEM_DYN_RAS_CAS_CAS_2 (0x00000200)
-#define NS9750_MEM_DYN_RAS_CAS_CAS_3 (0x00000300)
-#define NS9750_MEM_DYN_RAS_CAS_RAS_MA (0x00000003)
-#define NS9750_MEM_DYN_RAS_CAS_RAS_1 (0x00000001)
-#define NS9750_MEM_DYN_RAS_CAS_RAS_2 (0x00000002)
-#define NS9750_MEM_DYN_RAS_CAS_RAS_3 (0x00000003)
-
-#define NS9750_MEM_STAT_CFG_PSMC (0x00100000)
-#define NS9750_MEM_STAT_CFG_BSMC (0x00080000)
-#define NS9750_MEM_STAT_CFG_EW (0x00000100)
-#define NS9750_MEM_STAT_CFG_PB (0x00000080)
-#define NS9750_MEM_STAT_CFG_PC (0x00000040)
-#define NS9750_MEM_STAT_CFG_PM (0x00000008)
-#define NS9750_MEM_STAT_CFG_MW_MA (0x00000003)
-#define NS9750_MEM_STAT_CFG_MW_8 (0x00000000)
-#define NS9750_MEM_STAT_CFG_MW_16 (0x00000001)
-#define NS9750_MEM_STAT_CFG_MW_32 (0x00000002)
-
-#define NS9750_MEM_STAT_WAIT_WEN_MA (0x0000000F)
-
-#define NS9750_MEM_STAT_WAIT_OEN_MA (0x0000000F)
-
-#define NS9750_MEM_STAT_WAIT_RD_MA (0x0000001F)
-
-#define NS9750_MEM_STAT_WAIT_PAGE_MA (0x0000001F)
-
-#define NS9750_MEM_STAT_WAIT_WR_MA (0x0000001F)
-
-#define NS9750_MEM_STAT_WAIT_TURN_MA (0x0000000F)
-
-
-#endif /* FS_NS9750_MEM_H */
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns9750_mem.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @Descr: Definitions for Memory Control Module
+ * @References: [1] NS9750 Hardware Reference Manual/December 2003 Chap. 5
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#ifndef FS_NS9750_MEM_H
+#define FS_NS9750_SYS_H
+
+#define NS9750_MEM_MODULE_BASE (0xA0700000)
+
+#define get_mem_reg_addr(c) \
+ ((volatile unsigned int *)(NS9750_MEM_MODULE_BASE+(unsigned int) (c)))
+
+/* the register addresses */
+
+#define NS9750_MEM_CTRL (0x0000)
+#define NS9750_MEM_STATUS (0x0004)
+#define NS9750_MEM_CFG (0x0008)
+#define NS9750_MEM_DYN_CTRL (0x0020)
+#define NS9750_MEM_DYN_REFRESH (0x0024)
+#define NS9750_MEM_DYN_READ_CFG (0x0028)
+#define NS9750_MEM_DYN_TRP (0x0030)
+#define NS9750_MEM_DYN_TRAS (0x0034)
+#define NS9750_MEM_DYN_TSREX (0x0038)
+#define NS9750_MEM_DYN_TAPR (0x003C)
+#define NS9750_MEM_DYN_TDAL (0x0040)
+#define NS9750_MEM_DYN_TWR (0x0044)
+#define NS9750_MEM_DYN_TRC (0x0048)
+#define NS9750_MEM_DYN_TRFC (0x004C)
+#define NS9750_MEM_DYN_TXSR (0x0050)
+#define NS9750_MEM_DYN_TRRD (0x0054)
+#define NS9750_MEM_DYN_TMRD (0x0058)
+#define NS9750_MEM_STAT_EXT_WAIT (0x0080)
+#define NS9750_MEM_DYN_CFG_BASE (0x0100)
+#define NS9750_MEM_DYN_RAS_CAS_BASE (0x0104)
+#define NS9750_MEM_STAT_CFG_BASE (0x0200)
+#define NS9750_MEM_STAT_WAIT_WEN_BASE (0x0204)
+#define NS9750_MEM_STAT_WAIT_OEN_BASE (0x0208)
+#define NS9750_MEM_STAT_WAIT_RD_BASE (0x020C)
+#define NS9750_MEM_STAT_WAIT_PAGE_BASE (0x0210)
+#define NS9750_MEM_STAT_WAIR_WR_BASE (0x0214)
+#define NS9750_MEM_STAT_WAIT_TURN_BASE (0x0218)
+
+/* the vectored register addresses */
+
+#define NS9750_MEM_DYN_CFG(c) (NS9750_MEM_DYN_CFG_BASE + (c)*0x20)
+#define NS9750_MEM_DYN_RAS_CAS(c) (NS9750_MEM_DYN_RAS_CAS_BASE + (c)*0x20)
+#define NS9750_MEM_STAT_CFG(c) (NS9750_MEM_STAT_CFG_BASE + (c)*0x20)
+#define NS9750_MEM_STAT_WAIT_WEN(c) (NS9750_MEM_STAT_WAIT_WEN_BASE+(c)*0x20)
+#define NS9750_MEM_STAT_WAIT_OEN(c) (NS9750_MEM_STAT_WAIT_OEN_BASE+(c)*0x20)
+#define NS9750_MEM_STAT_RD(c) (NS9750_MEM_STAT_WAIT_RD_BASE+(c)*0x20)
+#define NS9750_MEM_STAT_PAGE(c) (NS9750_MEM_STAT_WAIT_PAGE_BASE+(c)*0x20)
+#define NS9750_MEM_STAT_WR(c) (NS9750_MEM_STAT_WAIT_WR_BASE+(c)*0x20)
+#define NS9750_MEM_STAT_TURN(c) (NS9750_MEM_STAT_WAIT_TURN_BASE+(c)*0x20)
+
+/* register bit fields */
+
+#define NS9750_MEM_CTRL_L (0x00000004)
+#define NS9750_MEM_CTRL_M (0x00000002)
+#define NS9750_MEM_CTRL_E (0x00000001)
+
+#define NS9750_MEM_STAT_SA (0x00000004)
+#define NS9750_MEM_STAT_S (0x00000002)
+#define NS9750_MEM_STAT_B (0x00000001)
+
+#define NS9750_MEM_CFG_CLK (0x00000010)
+#define NS9750_MEM_CFG_N (0x00000001)
+
+#define NS9750_MEM_DYN_CTRL_NRP (0x00004000)
+#define NS9750_MEM_DYN_CTRL_DP (0x00002000)
+#define NS9750_MEM_DYN_CTRL_I_MA (0x00000180)
+#define NS9750_MEM_DYN_CTRL_I_NORMAL (0x00000000)
+#define NS9750_MEM_DYN_CTRL_I_MODE (0x00000080)
+#define NS9750_MEM_DYN_CTRL_I_PALL (0x00000100)
+#define NS9750_MEM_DYN_CTRL_I_NOP (0x00000180)
+#define NS9750_MEM_DYN_CTRL_SR (0x00000002)
+#define NS9750_MEM_DYN_CTRL_CE (0x00000001)
+
+
+#define NS9750_MEM_DYN_REFRESH_MA (0x000007FF)
+
+#define NS9750_MEM_DYN_READ_CFG_MA (0x00000003)
+#define NS9750_MEM_DYN_READ_CFG_DELAY0 (0x00000001)
+#define NS9750_MEM_DYN_READ_CFG_DELAY1 (0x00000002)
+#define NS9750_MEM_DYN_READ_CFG_DELAY2 (0x00000003)
+
+#define NS9750_MEM_DYN_TRP_MA (0x0000000F)
+
+#define NS9750_MEM_DYN_TRAS_MA (0x0000000F)
+
+#define NS9750_MEM_DYN_TSREX_MA (0x0000000F)
+
+#define NS9750_MEM_DYN_TAPR_MA (0x0000000F)
+
+#define NS9750_MEM_DYN_TDAL_MA (0x0000000F)
+
+#define NS9750_MEM_DYN_TWR_MA (0x0000000F)
+
+#define NS9750_MEM_DYN_TRC_MA (0x0000001F)
+
+#define NS9750_MEM_DYN_TRFC_MA (0x0000001F)
+
+#define NS9750_MEM_DYN_TXSR_MA (0x0000001F)
+
+#define NS9750_MEM_DYN_TRRD_MA (0x0000000F)
+
+#define NS9750_MEM_DYN_TMRD_MA (0x0000000F)
+
+#define NS9750_MEM_STAT_EXTW_WAIT_MA (0x0000003F)
+
+#define NS9750_MEM_DYN_CFG_P (0x00100000)
+#define NS9750_MEM_DYN_CFG_BDMC (0x00080000)
+#define NS9750_MEM_DYN_CFG_AM (0x00004000)
+#define NS9750_MEM_DYN_CFG_AM_MA (0x00001F80)
+#define NS9750_MEM_DYN_CFG_MD (0x00000018)
+
+#define NS9750_MEM_DYN_RAS_CAS_CAS_MA (0x00000300)
+#define NS9750_MEM_DYN_RAS_CAS_CAS_1 (0x00000100)
+#define NS9750_MEM_DYN_RAS_CAS_CAS_2 (0x00000200)
+#define NS9750_MEM_DYN_RAS_CAS_CAS_3 (0x00000300)
+#define NS9750_MEM_DYN_RAS_CAS_RAS_MA (0x00000003)
+#define NS9750_MEM_DYN_RAS_CAS_RAS_1 (0x00000001)
+#define NS9750_MEM_DYN_RAS_CAS_RAS_2 (0x00000002)
+#define NS9750_MEM_DYN_RAS_CAS_RAS_3 (0x00000003)
+
+#define NS9750_MEM_STAT_CFG_PSMC (0x00100000)
+#define NS9750_MEM_STAT_CFG_BSMC (0x00080000)
+#define NS9750_MEM_STAT_CFG_EW (0x00000100)
+#define NS9750_MEM_STAT_CFG_PB (0x00000080)
+#define NS9750_MEM_STAT_CFG_PC (0x00000040)
+#define NS9750_MEM_STAT_CFG_PM (0x00000008)
+#define NS9750_MEM_STAT_CFG_MW_MA (0x00000003)
+#define NS9750_MEM_STAT_CFG_MW_8 (0x00000000)
+#define NS9750_MEM_STAT_CFG_MW_16 (0x00000001)
+#define NS9750_MEM_STAT_CFG_MW_32 (0x00000002)
+
+#define NS9750_MEM_STAT_WAIT_WEN_MA (0x0000000F)
+
+#define NS9750_MEM_STAT_WAIT_OEN_MA (0x0000000F)
+
+#define NS9750_MEM_STAT_WAIT_RD_MA (0x0000001F)
+
+#define NS9750_MEM_STAT_WAIT_PAGE_MA (0x0000001F)
+
+#define NS9750_MEM_STAT_WAIT_WR_MA (0x0000001F)
+
+#define NS9750_MEM_STAT_WAIT_TURN_MA (0x0000000F)
+
+
+#endif /* FS_NS9750_MEM_H */
diff -Naur u-boot-2009.03_orig/include/ns9750_ser.h u-boot-2009.03/include/ns9750_ser.h
--- u-boot-2009.03_orig/include/ns9750_ser.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/ns9750_ser.h 2009-03-31 14:58:02.156657600 -0700
@@ -1,202 +1,202 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_ser.h,v 1.1 2004/02/16 10:37:20 mpietrek Exp $
- * @Author: Markus Pietrek
- * @References: [1] NS9750 Hardware Reference, December 2003
- *
- * 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
- *
- ***********************************************************************/
-
-#ifndef FS_NS9750_SER_H
-#define FS_NS9750_SER_H
-
-#define NS9750_SER_MODULE_BASE (0x90200000)
-
-#define get_ser_reg_addr(c) \
- ((volatile unsigned int *)(NS9750_SER_MODULE_BASE+(unsigned int) (c)))
-
-#define get_ser_reg_addr_channel(reg,chan) \
- get_ser_reg_addr((reg)+(((chan)<2)?0:0x00100000)+(((chan)&1)?0x40:0))
-
-/* the register addresses */
-
-#define NS9750_SER_CTRL_A (0x00)
-#define NS9750_SER_CTRL_B (0x04)
-#define NS9750_SER_STAT_A (0x08)
-#define NS9750_SER_BITRATE (0x0C)
-#define NS9750_SER_FIFO (0x10)
-#define NS9750_SER_RX_BUF_TIMER (0x14)
-#define NS9750_SER_RX_CHAR_TIMER (0x18)
-#define NS9750_SER_RX_MATCH (0x1C)
-#define NS9750_SER_RX_MATCH_MASK (0x20)
-#define NS9750_SER_FLOW_CTRL (0x34)
-#define NS9750_SER_FLOW_CTRL_FORCE (0x38)
-
-/* register bit fields */
-
-/* control A register */
-
-#define NS9750_SER_CTRL_A_CE (0x80000000)
-#define NS9750_SER_CTRL_A_BRK (0x40000000)
-#define NS9750_SER_CTRL_A_STICKP (0x20000000)
-#define NS9750_SER_CTRL_A_EPS (0x10000000)
-#define NS9750_SER_CTRL_A_PE (0x08000000)
-#define NS9750_SER_CTRL_A_STOP (0x04000000)
-#define NS9750_SER_CTRL_A_WLS_MA (0x03000000)
-#define NS9750_SER_CTRL_A_WLS_5 (0x00000000)
-#define NS9750_SER_CTRL_A_WLS_6 (0x01000000)
-#define NS9750_SER_CTRL_A_WLS_7 (0x02000000)
-#define NS9750_SER_CTRL_A_WLS_8 (0x03000000)
-#define NS9750_SER_CTRL_A_CTSTX (0x00800000)
-#define NS9750_SER_CTRL_A_RTSRX (0x00400000)
-#define NS9750_SER_CTRL_A_RL (0x00200000)
-#define NS9750_SER_CTRL_A_LL (0x00100000)
-#define NS9750_SER_CTRL_A_RES (0x000CF000)
-#define NS9750_SER_CTRL_A_DTR (0x00020000)
-#define NS9750_SER_CTRL_A_RTS (0x00010000)
-#define NS9750_SER_CTRL_A_RIE_MA (0x00000E00)
-#define NS9750_SER_CTRL_A_ERXDMA (0x00000100)
-#define NS9750_SER_CTRL_A_RIC_MA (0x000000E0)
-#define NS9750_SER_CTRL_A_TIC_MA (0x0000001E)
-#define NS9750_SER_CTRL_A_ETXDMA (0x00000001)
-
-/* control B register */
-
-#define NS9750_SER_CTRL_B_RDM1 (0x80000000)
-#define NS9750_SER_CTRL_B_RDM2 (0x40000000)
-#define NS9750_SER_CTRL_B_RDM3 (0x20000000)
-#define NS9750_SER_CTRL_B_RDM4 (0x10000000)
-#define NS9750_SER_CTRL_B_RBGT (0x08000000)
-#define NS9750_SER_CTRL_B_RCGT (0x04000000)
-#define NS9750_SER_CTRL_B_MODE_MA (0x00300000)
-#define NS9750_SER_CTRL_B_MODE_UART (0x00000000)
-#define NS9750_SER_CTRL_B_MODE_HDLC (0x00100000)
-#define NS9750_SER_CTRL_B_MODE_SPI_M (0x00200000)
-#define NS9750_SER_CTRL_B_MODE_SPI_S (0x00300000)
-#define NS9750_SER_CTRL_B_BITORDR (0x00080000)
-#define NS9750_SER_CTRL_B_RES (0x0007703F)
-#define NS9750_SER_CTRL_B_RTSTX (0x00008000)
-#define NS9750_SER_CTRL_B_ENDEC_MA (0x00000FC0)
-
-/* status A register */
-
-#define NS9750_SER_STAT_A_MATCH1 (0x80000000)
-#define NS9750_SER_STAT_A_MATCH2 (0x40000000)
-#define NS9750_SER_STAT_A_MATCH3 (0x20000000)
-#define NS9750_SER_STAT_A_MATCH4 (0x10000000)
-#define NS9750_SER_STAT_A_BGAP (0x08000000)
-#define NS9750_SER_STAT_A_CGAP (0x04000000)
-#define NS9750_SER_STAT_A_RXFDB_MA (0x00300000)
-#define NS9750_SER_STAT_A_RXFDB_FULL (0x00000000)
-#define NS9750_SER_STAT_A_RXFDB_1 (0x00100000)
-#define NS9750_SER_STAT_A_RXFDB_2 (0x00200000)
-#define NS9750_SER_STAT_A_RXFDB_3 (0x00300000)
-#define NS9750_SER_STAT_A_DCD (0x00080000)
-#define NS9750_SER_STAT_A_RI (0x00040000)
-#define NS9750_SER_STAT_A_DSR (0x00020000)
-#define NS9750_SER_STAT_A_CTS (0x00010000)
-#define NS9750_SER_STAT_A_RBRK (0x00008000)
-#define NS9750_SER_STAT_A_RFE (0x00004000)
-#define NS9750_SER_STAT_A_RPE (0x00002000)
-#define NS9750_SER_STAT_A_ROVER (0x00001000)
-#define NS9750_SER_STAT_A_RRDY (0x00000800)
-#define NS9750_SER_STAT_A_RHALF (0x00000400)
-#define NS9750_SER_STAT_A_RBC (0x00000200)
-#define NS9750_SER_STAT_A_RFULL (0x00000100)
-#define NS9750_SER_STAT_A_DCDI (0x00000080)
-#define NS9750_SER_STAT_A_RII (0x00000040)
-#define NS9750_SER_STAT_A_DSRI (0x00000020)
-#define NS9750_SER_STAT_A_CTSI (0x00000010)
-#define NS9750_SER_STAT_A_TRDY (0x00000008)
-#define NS9750_SER_STAT_A_THALF (0x00000004)
-#define NS9750_SER_STAT_A_TBC (0x00000002)
-#define NS9750_SER_STAT_A_TEMPTY (0x00000001)
-
-#define NS9750_SER_STAT_A_RX_COND_ERR ( NS9750_SER_STAT_A_RFE | \
- NS9750_SER_STAT_A_ROVER | \
- NS9750_SER_STAT_A_RPE )
-#define NS9750_SER_STAT_A_RX_COND_ALL ( NS9750_SER_STAT_A_RX_COND_ERR | \
- NS9750_SER_STAT_A_RBRK | \
- NS9750_SER_STAT_A_RRDY | \
- NS9750_SER_STAT_A_RHALF | \
- NS9750_SER_STAT_A_RBC | \
- NS9750_SER_STAT_A_DCDI | \
- NS9750_SER_STAT_A_RII | \
- NS9750_SER_STAT_A_DSRI | \
- NS9750_SER_STAT_A_CTSI )
-#define NS9750_SER_STAT_A_TX_COND_ALL ( NS9750_SER_STAT_A_TRDY | \
- NS9750_SER_STAT_A_THALF | \
- NS9750_SER_STAT_A_TBC | \
- NS9750_SER_STAT_A_TEMPTY )
-/* bit rate register */
-
-#define NS9750_SER_BITRATE_EBIT (0x80000000)
-#define NS9750_SER_BITRATE_TMODE (0x40000000)
-#define NS9750_SER_BITRATE_RXSRC (0x20000000)
-#define NS9750_SER_BITRATE_TXSRC (0x10000000)
-#define NS9750_SER_BITRATE_RXEXT (0x08000000)
-#define NS9750_SER_BITRATE_TXEXT (0x04000000)
-#define NS9750_SER_BITRATE_CLKMUX_MA (0x03000000)
-#define NS9750_SER_BITRATE_CLKMUX_XTAL (0x00000000)
-#define NS9750_SER_BITRATE_CLKMUX_BCLK (0x01000000)
-#define NS9750_SER_BITRATE_CLKMUX_OUT1 (0x02000000)
-#define NS9750_SER_BITRATE_CLKMUX_OUT2 (0x03000000)
-#define NS9750_SER_BITRATE_TXCINV (0x00800000)
-#define NS9750_SER_BITRATE_RXCINV (0x00400000)
-#define NS9750_SER_BITRATE_TCDR_MA (0x00180000)
-#define NS9750_SER_BITRATE_TCDR_1 (0x00000000)
-#define NS9750_SER_BITRATE_TCDR_8 (0x00080000)
-#define NS9750_SER_BITRATE_TCDR_16 (0x00100000)
-#define NS9750_SER_BITRATE_TCDR_32 (0x00180000)
-#define NS9750_SER_BITRATE_RCDR_MA (0x00070000)
-#define NS9750_SER_BITRATE_RCDR_1 (0x00000000)
-#define NS9750_SER_BITRATE_RCDR_8 (0x00020000)
-#define NS9750_SER_BITRATE_RCDR_16 (0x00040000)
-#define NS9750_SER_BITRATE_RCDR_32 (0x00060000)
-#define NS9750_SER_BITRATE_TICS (0x00010000)
-#define NS9750_SER_BITRATE_RICS (0x00008000)
-#define NS9750_SER_BITRATE_N_MA (0x00007FFF)
-
-/* receive buffer gap timer */
-
-#define NS9750_SER_RX_BUF_TIMER_TRUN (0x80000000) /* UART and SPI */
-#define NS9750_SER_RX_BUF_TIMER_BT_MA (0x0000FFFF) /* UART and SPI */
-#define NS9750_SER_RX_BUF_TIMER_MAXLEN_MA (0x0000FFFF) /* HDLC only */
-
-/* receive character gap timer */
-
-#define NS9750_SER_RX_CHAR_TIMER_TRUN (0x80000000)
-#define NS9750_SER_RX_CHAR_TIMER_CT_MA (0x000FFFFF)
-
-/* receive match */
-
-#define NS9750_SER_RX_MATCH_RDMB1_MA (0xFF000000)
-#define NS9750_SER_RX_MATCH_RDMB2_MA (0x00FF0000)
-#define NS9750_SER_RX_MATCH_RDMB3_MA (0x0000FF00)
-#define NS9750_SER_RX_MATCH_RDMB4_MA (0x000000FF)
-
-/* receive match mask */
-
-#define NS9750_SER_RX_MATCH_MASK_RDMB1_MA (0xFF000000)
-#define NS9750_SER_RX_MATCH_MASK_RDMB2_MA (0x00FF0000)
-#define NS9750_SER_RX_MATCH_MASK_RDMB3_MA (0x0000FF00)
-#define NS9750_SER_RX_MATCH_MASK_RDMB4_MA (0x000000FF)
-
-#endif /* FS_NS9750_SER_H */
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns9750_ser.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @References: [1] NS9750 Hardware Reference, December 2003
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#ifndef FS_NS9750_SER_H
+#define FS_NS9750_SER_H
+
+#define NS9750_SER_MODULE_BASE (0x90200000)
+
+#define get_ser_reg_addr(c) \
+ ((volatile unsigned int *)(NS9750_SER_MODULE_BASE+(unsigned int) (c)))
+
+#define get_ser_reg_addr_channel(reg,chan) \
+ get_ser_reg_addr((reg)+(((chan)<2)?0:0x00100000)+(((chan)&1)?0x40:0))
+
+/* the register addresses */
+
+#define NS9750_SER_CTRL_A (0x00)
+#define NS9750_SER_CTRL_B (0x04)
+#define NS9750_SER_STAT_A (0x08)
+#define NS9750_SER_BITRATE (0x0C)
+#define NS9750_SER_FIFO (0x10)
+#define NS9750_SER_RX_BUF_TIMER (0x14)
+#define NS9750_SER_RX_CHAR_TIMER (0x18)
+#define NS9750_SER_RX_MATCH (0x1C)
+#define NS9750_SER_RX_MATCH_MASK (0x20)
+#define NS9750_SER_FLOW_CTRL (0x34)
+#define NS9750_SER_FLOW_CTRL_FORCE (0x38)
+
+/* register bit fields */
+
+/* control A register */
+
+#define NS9750_SER_CTRL_A_CE (0x80000000)
+#define NS9750_SER_CTRL_A_BRK (0x40000000)
+#define NS9750_SER_CTRL_A_STICKP (0x20000000)
+#define NS9750_SER_CTRL_A_EPS (0x10000000)
+#define NS9750_SER_CTRL_A_PE (0x08000000)
+#define NS9750_SER_CTRL_A_STOP (0x04000000)
+#define NS9750_SER_CTRL_A_WLS_MA (0x03000000)
+#define NS9750_SER_CTRL_A_WLS_5 (0x00000000)
+#define NS9750_SER_CTRL_A_WLS_6 (0x01000000)
+#define NS9750_SER_CTRL_A_WLS_7 (0x02000000)
+#define NS9750_SER_CTRL_A_WLS_8 (0x03000000)
+#define NS9750_SER_CTRL_A_CTSTX (0x00800000)
+#define NS9750_SER_CTRL_A_RTSRX (0x00400000)
+#define NS9750_SER_CTRL_A_RL (0x00200000)
+#define NS9750_SER_CTRL_A_LL (0x00100000)
+#define NS9750_SER_CTRL_A_RES (0x000CF000)
+#define NS9750_SER_CTRL_A_DTR (0x00020000)
+#define NS9750_SER_CTRL_A_RTS (0x00010000)
+#define NS9750_SER_CTRL_A_RIE_MA (0x00000E00)
+#define NS9750_SER_CTRL_A_ERXDMA (0x00000100)
+#define NS9750_SER_CTRL_A_RIC_MA (0x000000E0)
+#define NS9750_SER_CTRL_A_TIC_MA (0x0000001E)
+#define NS9750_SER_CTRL_A_ETXDMA (0x00000001)
+
+/* control B register */
+
+#define NS9750_SER_CTRL_B_RDM1 (0x80000000)
+#define NS9750_SER_CTRL_B_RDM2 (0x40000000)
+#define NS9750_SER_CTRL_B_RDM3 (0x20000000)
+#define NS9750_SER_CTRL_B_RDM4 (0x10000000)
+#define NS9750_SER_CTRL_B_RBGT (0x08000000)
+#define NS9750_SER_CTRL_B_RCGT (0x04000000)
+#define NS9750_SER_CTRL_B_MODE_MA (0x00300000)
+#define NS9750_SER_CTRL_B_MODE_UART (0x00000000)
+#define NS9750_SER_CTRL_B_MODE_HDLC (0x00100000)
+#define NS9750_SER_CTRL_B_MODE_SPI_M (0x00200000)
+#define NS9750_SER_CTRL_B_MODE_SPI_S (0x00300000)
+#define NS9750_SER_CTRL_B_BITORDR (0x00080000)
+#define NS9750_SER_CTRL_B_RES (0x0007703F)
+#define NS9750_SER_CTRL_B_RTSTX (0x00008000)
+#define NS9750_SER_CTRL_B_ENDEC_MA (0x00000FC0)
+
+/* status A register */
+
+#define NS9750_SER_STAT_A_MATCH1 (0x80000000)
+#define NS9750_SER_STAT_A_MATCH2 (0x40000000)
+#define NS9750_SER_STAT_A_MATCH3 (0x20000000)
+#define NS9750_SER_STAT_A_MATCH4 (0x10000000)
+#define NS9750_SER_STAT_A_BGAP (0x08000000)
+#define NS9750_SER_STAT_A_CGAP (0x04000000)
+#define NS9750_SER_STAT_A_RXFDB_MA (0x00300000)
+#define NS9750_SER_STAT_A_RXFDB_FULL (0x00000000)
+#define NS9750_SER_STAT_A_RXFDB_1 (0x00100000)
+#define NS9750_SER_STAT_A_RXFDB_2 (0x00200000)
+#define NS9750_SER_STAT_A_RXFDB_3 (0x00300000)
+#define NS9750_SER_STAT_A_DCD (0x00080000)
+#define NS9750_SER_STAT_A_RI (0x00040000)
+#define NS9750_SER_STAT_A_DSR (0x00020000)
+#define NS9750_SER_STAT_A_CTS (0x00010000)
+#define NS9750_SER_STAT_A_RBRK (0x00008000)
+#define NS9750_SER_STAT_A_RFE (0x00004000)
+#define NS9750_SER_STAT_A_RPE (0x00002000)
+#define NS9750_SER_STAT_A_ROVER (0x00001000)
+#define NS9750_SER_STAT_A_RRDY (0x00000800)
+#define NS9750_SER_STAT_A_RHALF (0x00000400)
+#define NS9750_SER_STAT_A_RBC (0x00000200)
+#define NS9750_SER_STAT_A_RFULL (0x00000100)
+#define NS9750_SER_STAT_A_DCDI (0x00000080)
+#define NS9750_SER_STAT_A_RII (0x00000040)
+#define NS9750_SER_STAT_A_DSRI (0x00000020)
+#define NS9750_SER_STAT_A_CTSI (0x00000010)
+#define NS9750_SER_STAT_A_TRDY (0x00000008)
+#define NS9750_SER_STAT_A_THALF (0x00000004)
+#define NS9750_SER_STAT_A_TBC (0x00000002)
+#define NS9750_SER_STAT_A_TEMPTY (0x00000001)
+
+#define NS9750_SER_STAT_A_RX_COND_ERR ( NS9750_SER_STAT_A_RFE | \
+ NS9750_SER_STAT_A_ROVER | \
+ NS9750_SER_STAT_A_RPE )
+#define NS9750_SER_STAT_A_RX_COND_ALL ( NS9750_SER_STAT_A_RX_COND_ERR | \
+ NS9750_SER_STAT_A_RBRK | \
+ NS9750_SER_STAT_A_RRDY | \
+ NS9750_SER_STAT_A_RHALF | \
+ NS9750_SER_STAT_A_RBC | \
+ NS9750_SER_STAT_A_DCDI | \
+ NS9750_SER_STAT_A_RII | \
+ NS9750_SER_STAT_A_DSRI | \
+ NS9750_SER_STAT_A_CTSI )
+#define NS9750_SER_STAT_A_TX_COND_ALL ( NS9750_SER_STAT_A_TRDY | \
+ NS9750_SER_STAT_A_THALF | \
+ NS9750_SER_STAT_A_TBC | \
+ NS9750_SER_STAT_A_TEMPTY )
+/* bit rate register */
+
+#define NS9750_SER_BITRATE_EBIT (0x80000000)
+#define NS9750_SER_BITRATE_TMODE (0x40000000)
+#define NS9750_SER_BITRATE_RXSRC (0x20000000)
+#define NS9750_SER_BITRATE_TXSRC (0x10000000)
+#define NS9750_SER_BITRATE_RXEXT (0x08000000)
+#define NS9750_SER_BITRATE_TXEXT (0x04000000)
+#define NS9750_SER_BITRATE_CLKMUX_MA (0x03000000)
+#define NS9750_SER_BITRATE_CLKMUX_XTAL (0x00000000)
+#define NS9750_SER_BITRATE_CLKMUX_BCLK (0x01000000)
+#define NS9750_SER_BITRATE_CLKMUX_OUT1 (0x02000000)
+#define NS9750_SER_BITRATE_CLKMUX_OUT2 (0x03000000)
+#define NS9750_SER_BITRATE_TXCINV (0x00800000)
+#define NS9750_SER_BITRATE_RXCINV (0x00400000)
+#define NS9750_SER_BITRATE_TCDR_MA (0x00180000)
+#define NS9750_SER_BITRATE_TCDR_1 (0x00000000)
+#define NS9750_SER_BITRATE_TCDR_8 (0x00080000)
+#define NS9750_SER_BITRATE_TCDR_16 (0x00100000)
+#define NS9750_SER_BITRATE_TCDR_32 (0x00180000)
+#define NS9750_SER_BITRATE_RCDR_MA (0x00070000)
+#define NS9750_SER_BITRATE_RCDR_1 (0x00000000)
+#define NS9750_SER_BITRATE_RCDR_8 (0x00020000)
+#define NS9750_SER_BITRATE_RCDR_16 (0x00040000)
+#define NS9750_SER_BITRATE_RCDR_32 (0x00060000)
+#define NS9750_SER_BITRATE_TICS (0x00010000)
+#define NS9750_SER_BITRATE_RICS (0x00008000)
+#define NS9750_SER_BITRATE_N_MA (0x00007FFF)
+
+/* receive buffer gap timer */
+
+#define NS9750_SER_RX_BUF_TIMER_TRUN (0x80000000) /* UART and SPI */
+#define NS9750_SER_RX_BUF_TIMER_BT_MA (0x0000FFFF) /* UART and SPI */
+#define NS9750_SER_RX_BUF_TIMER_MAXLEN_MA (0x0000FFFF) /* HDLC only */
+
+/* receive character gap timer */
+
+#define NS9750_SER_RX_CHAR_TIMER_TRUN (0x80000000)
+#define NS9750_SER_RX_CHAR_TIMER_CT_MA (0x000FFFFF)
+
+/* receive match */
+
+#define NS9750_SER_RX_MATCH_RDMB1_MA (0xFF000000)
+#define NS9750_SER_RX_MATCH_RDMB2_MA (0x00FF0000)
+#define NS9750_SER_RX_MATCH_RDMB3_MA (0x0000FF00)
+#define NS9750_SER_RX_MATCH_RDMB4_MA (0x000000FF)
+
+/* receive match mask */
+
+#define NS9750_SER_RX_MATCH_MASK_RDMB1_MA (0xFF000000)
+#define NS9750_SER_RX_MATCH_MASK_RDMB2_MA (0x00FF0000)
+#define NS9750_SER_RX_MATCH_MASK_RDMB3_MA (0x0000FF00)
+#define NS9750_SER_RX_MATCH_MASK_RDMB4_MA (0x000000FF)
+
+#endif /* FS_NS9750_SER_H */
diff -Naur u-boot-2009.03_orig/include/ns9750_sys.h u-boot-2009.03/include/ns9750_sys.h
--- u-boot-2009.03_orig/include/ns9750_sys.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/ns9750_sys.h 2009-03-31 14:58:02.203532000 -0700
@@ -1,215 +1,215 @@
-/***********************************************************************
- *
- * Copyright (C) 2004 by FS Forth-Systeme GmbH.
- * All rights reserved.
- *
- * $Id: ns9750_sys.h,v 1.1 2004/02/16 10:37:20 mpietrek Exp $
- * @Author: Markus Pietrek
- * @Descr: Definitions for SYS Control Module
- * @References: [1] NS9750 Hardware Reference Manual/December 2003 Chap. 4
- *
- * 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
- *
- ***********************************************************************/
-
-#ifndef FS_NS9750_SYS_H
-#define FS_NS9750_SYS_H
-
-#define NS9750_SYS_MODULE_BASE (0xA0900000)
-
-#define get_sys_reg_addr(c) \
- ((volatile unsigned int *)(NS9750_SYS_MODULE_BASE+(unsigned int) (c)))
-
-/* the register addresses */
-
-#define NS9750_SYS_AHB_GEN (0x0000)
-#define NS9750_SYS_BRC_BASE (0x0004)
-#define NS9750_SYS_AHB_TIMEOUT (0x0014)
-#define NS9750_SYS_AHB_ERROR1 (0x0018)
-#define NS9750_SYS_AHB_ERROR2 (0x001C)
-#define NS9750_SYS_AHB_MON (0x0020)
-#define NS9750_SYS_TIMER_COUNT_BASE (0x0044)
-#define NS9750_SYS_TIMER_READ_BASE (0x0084)
-#define NS9750_SYS_INT_VEC_ADR_BASE (0x00C4)
-#define NS9750_SYS_INT_CFG_BASE (0x0144)
-#define NS9750_SYS_ISRADDR (0x0164)
-#define NS9750_SYS_INT_STAT_ACTIVE (0x0168)
-#define NS9750_SYS_INT_STAT_RAW (0x016C)
-#define NS9750_SYS_TIMER_INT_STAT (0x0170)
-#define NS9750_SYS_SW_WDOG_CFG (0x0174)
-#define NS9750_SYS_SW_WDOG_TIMER (0x0178)
-#define NS9750_SYS_CLOCK (0x017C)
-#define NS9750_SYS_RESET (0x0180)
-#define NS9750_SYS_MISC (0x0184)
-#define NS9750_SYS_PLL (0x0188)
-#define NS9750_SYS_ACT_INT_STAT (0x018C)
-#define NS9750_SYS_TIMER_CTRL_BASE (0x0190)
-#define NS9750_SYS_CS_DYN_BASE_BASE (0x01D0)
-#define NS9750_SYS_CS_DYN_MASK_BASE (0x01D4)
-#define NS9750_SYS_CS_STATIC_BASE_BASE (0x01F0)
-#define NS9750_SYS_CS_STATIC_MASK_BASE (0x01F4)
-#define NS9750_SYS_GEN_ID (0x0210)
-#define NS9750_SYS_EXT_INT_CTRL_BASE (0x0214)
-
-/* the vectored register addresses */
-
-#define NS9750_SYS_TIMER_COUNT(c) (NS9750_SYS_TIMER_COUNT_BASE + (c))
-#define NS9750_SYS_TIMER_READ(c) (NS9750_SYS_TIMER_READ_BASE + (c))
-#define NS9750_SYS_INT_VEC_ADR(c) (NS9750_SYS_INT_VEC_ADR_BASE + (c))
-#define NS9750_SYS_TIMER_CTRL(c) (NS9750_SYS_TIMER_CTRL_BASE + (c))
-/* CS_DYN start with 4 */
-#define NS9750_SYS_CS_DYN_BASE(c) (NS9750_SYS_CS_DYN_BASE_BASE + ((c)-4)*2)
-#define NS9750_SYS_CS_DYN_MASK(c) (NS9750_SYS_CS_DYN_MASK_BASE + ((c)-4)*2)
-/* CS_STATIC start with 0 */
-#define NS9750_SYS_CS_STATIC_BASE(c) (NS9750_SYS_CS_STATIC_BASE_BASE + (c)*2)
-#define NS9750_SYS_CS_STATIC_MASK(c) (NS9750_SYS_CS_STATIC_MASK_BASE + (c)*2)
-#define NS9750_SYS_EXT_INT_CTRL(c) (NS9750_SYS_EXT_INT_CTRL + (c))
-
-/* register bit fields */
-
-#define NS9750_SYS_AHB_GEN_EXMAM (0x00000001)
-
-/* need to be n*8bit to BRC channel */
-#define NS9750_SYS_BRC_CEB (0x00000080)
-#define NS9750_SYS_BRC_BRF_MA (0x00000030)
-#define NS9750_SYS_BRC_BRF_100 (0x00000000)
-#define NS9750_SYS_BRC_BRF_75 (0x00000010)
-#define NS9750_SYS_BRC_BRF_50 (0x00000020)
-#define NS9750_SYS_BRC_BRF_25 (0x00000030)
-
-#define NS9750_SYS_AHB_TIMEOUT_BAT_MA (0xFFFF0000)
-#define NS9750_SYS_AHB_TIMEOUT_BMT_MA (0x0000FFFF)
-
-#define NS9750_SYS_AHB_ERROR2_ABL (0x00040000)
-#define NS9750_SYS_AHB_ERROR2_AER (0x00020000)
-#define NS9750_SYS_AHB_ERROR2_ABM (0x00010000)
-#define NS9750_SYS_AHB_ERROR2_ABA (0x00008000)
-#define NS9750_SYS_AHB_ERROR2_HWRT (0x00004000)
-#define NS9750_SYS_AHB_ERROR2_HMID_MA (0x00003C00)
-#define NS9750_SYS_AHB_ERROR2_HTPC_MA (0x000003C0)
-#define NS9750_SYS_AHB_ERROR2_HSZ_MA (0x00000038)
-#define NS9750_SYS_AHB_ERROR2_RR_MA (0x00000007)
-
-#define NS9750_SYS_AHB_MON_EIC (0x00800000)
-#define NS9750_SYS_AHB_MON_MBII (0x00400000)
-#define NS9750_SYS_AHB_MON_MBL_MA (0x003FFFC0)
-#define NS9750_SYS_AHB_MON_MBLDC (0x00000020)
-#define NS9750_SYS_AHB_MON_SERDC (0x00000010)
-#define NS9750_SYS_AHB_MON_BMTC_MA (0x0000000C)
-#define NS9750_SYS_AHB_MON_BMTC_RECORD (0x00000000)
-#define NS9750_SYS_AHB_MON_BMTC_GEN_IRQ (0x00000004)
-#define NS9750_SYS_AHB_MON_BMTC_GEN_RES (0x00000008)
-#define NS9750_SYS_AHB_MON_BATC_MA (0x00000003)
-#define NS9750_SYS_AHB_MON_BATC_RECORD (0x00000000)
-#define NS9750_SYS_AHB_MON_BATC_GEN_IRQ (0x00000001)
-#define NS9750_SYS_AHB_MON_BATC_GEN_RES (0x00000002)
-
-/* need to be n*8bit to Int Level */
-
-#define NS9750_SYS_INT_CFG_IE (0x00000080)
-#define NS9750_SYS_INT_CFG_IT (0x00000020)
-#define NS9750_SYS_INT_CFG_IAD_MA (0x0000001F)
-
-#define NS9750_SYS_TIMER_INT_STAT_MA (0x0000FFFF)
-
-#define NS9750_SYS_SW_WDOG_CFG_SWWE (0x00000080)
-#define NS9750_SYS_SW_WDOG_CFG_SWWI (0x00000020)
-#define NS9750_SYS_SW_WDOG_CFG_SWWIC (0x00000010)
-#define NS9750_SYS_SW_WDOG_CFG_SWTCS_MA (0x00000007)
-#define NS9750_SYS_SW_WDOG_CFG_SWTCS_2 (0x00000000)
-#define NS9750_SYS_SW_WDOG_CFG_SWTCS_4 (0x00000001)
-#define NS9750_SYS_SW_WDOG_CFG_SWTCS_8 (0x00000002)
-#define NS9750_SYS_SW_WDOG_CFG_SWTCS_16 (0x00000003)
-#define NS9750_SYS_SW_WDOG_CFG_SWTCS_32 (0x00000004)
-#define NS9750_SYS_SW_WDOG_CFG_SWTCS_64 (0x00000005)
-
-#define NS9750_SYS_CLOCK_LPCS_MA (0x00000380)
-#define NS9750_SYS_CLOCK_LPCS_1 (0x00000000)
-#define NS9750_SYS_CLOCK_LPCS_2 (0x00000080)
-#define NS9750_SYS_CLOCK_LPCS_4 (0x00000100)
-#define NS9750_SYS_CLOCK_LPCS_8 (0x00000180)
-#define NS9750_SYS_CLOCK_LPCS_EXT (0x00000200)
-#define NS9750_SYS_CLOCK_BBC (0x00000040)
-#define NS9750_SYS_CLOCK_LCC (0x00000020)
-#define NS9750_SYS_CLOCK_MCC (0x00000010)
-#define NS9750_SYS_CLOCK_PARBC (0x00000008)
-#define NS9750_SYS_CLOCK_PC (0x00000004)
-#define NS9750_SYS_CLOCK_MACC (0x00000001)
-
-#define NS9750_SYS_RESET_SR (0x80000000)
-#define NS9750_SYS_RESET_I2CW (0x00100000)
-#define NS9750_SYS_RESET_CSE (0x00080000)
-#define NS9750_SYS_RESET_SMWE (0x00040000)
-#define NS9750_SYS_RESET_EWE (0x00020000)
-#define NS9750_SYS_RESET_PI3WE (0x00010000)
-#define NS9750_SYS_RESET_BBT (0x00000040)
-#define NS9750_SYS_RESET_LCDC (0x00000020)
-#define NS9750_SYS_RESET_MEMC (0x00000010)
-#define NS9750_SYS_RESET_PCIAR (0x00000008)
-#define NS9750_SYS_RESET_PCIM (0x00000004)
-#define NS9750_SYS_RESET_MACM (0x00000001)
-
-#define NS9750_SYS_MISC_REV_MA (0xFF000000)
-#define NS9750_SYS_MISC_PCIA (0x00002000)
-#define NS9750_SYS_MISC_VDIS (0x00001000)
-#define NS9750_SYS_MISC_BMM (0x00000800)
-#define NS9750_SYS_MISC_CS1DB (0x00000400)
-#define NS9750_SYS_MISC_CS1DW_MA (0x00000300)
-#define NS9750_SYS_MISC_MCCM (0x00000080)
-#define NS9750_SYS_MISC_PMSS (0x00000040)
-#define NS9750_SYS_MISC_CS1P (0x00000020)
-#define NS9750_SYS_MISC_ENDM (0x00000008)
-#define NS9750_SYS_MISC_MBAR (0x00000004)
-#define NS9750_SYS_MISC_IRAM0 (0x00000001)
-
-#define NS9750_SYS_PLL_PLLBS (0x02000000)
-#define NS9750_SYS_PLL_PLLFS_MA (0x01800000)
-#define NS9750_SYS_PLL_PLLIS_MA (0x00600000)
-#define NS9750_SYS_PLL_PLLND_MA (0x001F0000)
-#define NS9750_SYS_PLL_PLLSW (0x00008000)
-#define NS9750_SYS_PLL_PLLBSSW (0x00000200)
-#define NS9750_SYS_PLL_FSEL_MA (0x00000180)
-#define NS9750_SYS_PLL_CPCC_MA (0x00000060)
-#define NS9750_SYS_PLL_NDSW_MA (0x0000001F)
-
-#define NS9750_SYS_ACT_INT_STAT_MA (0x0000FFFF)
-
-#define NS9750_SYS_TIMER_CTRL_TEN (0x00008000)
-#define NS9750_SYS_TIMER_CTRL_INTC (0x00000200)
-#define NS9750_SYS_TIMER_CTRL_TLCS_MA (0x000001C0)
-#define NS9750_SYS_TIMER_CTRL_TLCS_1 (0x00000000)
-#define NS9750_SYS_TIMER_CTRL_TLCS_2 (0x00000040)
-#define NS9750_SYS_TIMER_CTRL_TLCS_4 (0x00000080)
-#define NS9750_SYS_TIMER_CTRL_TLCS_8 (0x000000C0)
-#define NS9750_SYS_TIMER_CTRL_TLCS_16 (0x00000100)
-#define NS9750_SYS_TIMER_CTRL_TLCS_32 (0x00000140)
-#define NS9750_SYS_TIMER_CTRL_TLCS_64 (0x00000180)
-#define NS9750_SYS_TIMER_CTRL_TLCS_EXT (0x000001C0)
-#define NS9750_SYS_TIMER_CTRL_TM_MA (0x00000030)
-#define NS9750_SYS_TIMER_CTRL_TM_INT (0x00000000)
-#define NS9750_SYS_TIMER_CTRL_TM_LOW (0x00000010)
-#define NS9750_SYS_TIMER_CTRL_TM_HIGH (0x00000020)
-#define NS9750_SYS_TIMER_CTRL_INTS (0x00000008)
-#define NS9750_SYS_TIMER_CTRL_UDS (0x00000004)
-#define NS9750_SYS_TIMER_CTRL_TSZ (0x00000002)
-#define NS9750_SYS_TIMER_CTRL_REN (0x00000001)
-
-#define NS9750_SYS_EXT_INT_CTRL_STS (0x00000008)
-#define NS9750_SYS_EXT_INT_CTRL_CLR (0x00000004)
-#define NS9750_SYS_EXT_INT_CTRL_PLTY (0x00000002)
-#define NS9750_SYS_EXT_INT_CTRL_LVEDG (0x00000001)
-
-#endif /* FS_NS9750_SYS_H */
+/***********************************************************************
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH.
+ * All rights reserved.
+ *
+ * $Id: ns9750_sys.h,v 1.1.1.1 2009/03/25 22:22:13 kenagy Exp $
+ * @Author: Markus Pietrek
+ * @Descr: Definitions for SYS Control Module
+ * @References: [1] NS9750 Hardware Reference Manual/December 2003 Chap. 4
+ *
+ * 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
+ *
+ ***********************************************************************/
+
+#ifndef FS_NS9750_SYS_H
+#define FS_NS9750_SYS_H
+
+#define NS9750_SYS_MODULE_BASE (0xA0900000)
+
+#define get_sys_reg_addr(c) \
+ ((volatile unsigned int *)(NS9750_SYS_MODULE_BASE+(unsigned int) (c)))
+
+/* the register addresses */
+
+#define NS9750_SYS_AHB_GEN (0x0000)
+#define NS9750_SYS_BRC_BASE (0x0004)
+#define NS9750_SYS_AHB_TIMEOUT (0x0014)
+#define NS9750_SYS_AHB_ERROR1 (0x0018)
+#define NS9750_SYS_AHB_ERROR2 (0x001C)
+#define NS9750_SYS_AHB_MON (0x0020)
+#define NS9750_SYS_TIMER_COUNT_BASE (0x0044)
+#define NS9750_SYS_TIMER_READ_BASE (0x0084)
+#define NS9750_SYS_INT_VEC_ADR_BASE (0x00C4)
+#define NS9750_SYS_INT_CFG_BASE (0x0144)
+#define NS9750_SYS_ISRADDR (0x0164)
+#define NS9750_SYS_INT_STAT_ACTIVE (0x0168)
+#define NS9750_SYS_INT_STAT_RAW (0x016C)
+#define NS9750_SYS_TIMER_INT_STAT (0x0170)
+#define NS9750_SYS_SW_WDOG_CFG (0x0174)
+#define NS9750_SYS_SW_WDOG_TIMER (0x0178)
+#define NS9750_SYS_CLOCK (0x017C)
+#define NS9750_SYS_RESET (0x0180)
+#define NS9750_SYS_MISC (0x0184)
+#define NS9750_SYS_PLL (0x0188)
+#define NS9750_SYS_ACT_INT_STAT (0x018C)
+#define NS9750_SYS_TIMER_CTRL_BASE (0x0190)
+#define NS9750_SYS_CS_DYN_BASE_BASE (0x01D0)
+#define NS9750_SYS_CS_DYN_MASK_BASE (0x01D4)
+#define NS9750_SYS_CS_STATIC_BASE_BASE (0x01F0)
+#define NS9750_SYS_CS_STATIC_MASK_BASE (0x01F4)
+#define NS9750_SYS_GEN_ID (0x0210)
+#define NS9750_SYS_EXT_INT_CTRL_BASE (0x0214)
+
+/* the vectored register addresses */
+
+#define NS9750_SYS_TIMER_COUNT(c) (NS9750_SYS_TIMER_COUNT_BASE + (c))
+#define NS9750_SYS_TIMER_READ(c) (NS9750_SYS_TIMER_READ_BASE + (c))
+#define NS9750_SYS_INT_VEC_ADR(c) (NS9750_SYS_INT_VEC_ADR_BASE + (c))
+#define NS9750_SYS_TIMER_CTRL(c) (NS9750_SYS_TIMER_CTRL_BASE + (c))
+/* CS_DYN start with 4 */
+#define NS9750_SYS_CS_DYN_BASE(c) (NS9750_SYS_CS_DYN_BASE_BASE + ((c)-4)*2)
+#define NS9750_SYS_CS_DYN_MASK(c) (NS9750_SYS_CS_DYN_MASK_BASE + ((c)-4)*2)
+/* CS_STATIC start with 0 */
+#define NS9750_SYS_CS_STATIC_BASE(c) (NS9750_SYS_CS_STATIC_BASE_BASE + (c)*2)
+#define NS9750_SYS_CS_STATIC_MASK(c) (NS9750_SYS_CS_STATIC_MASK_BASE + (c)*2)
+#define NS9750_SYS_EXT_INT_CTRL(c) (NS9750_SYS_EXT_INT_CTRL + (c))
+
+/* register bit fields */
+
+#define NS9750_SYS_AHB_GEN_EXMAM (0x00000001)
+
+/* need to be n*8bit to BRC channel */
+#define NS9750_SYS_BRC_CEB (0x00000080)
+#define NS9750_SYS_BRC_BRF_MA (0x00000030)
+#define NS9750_SYS_BRC_BRF_100 (0x00000000)
+#define NS9750_SYS_BRC_BRF_75 (0x00000010)
+#define NS9750_SYS_BRC_BRF_50 (0x00000020)
+#define NS9750_SYS_BRC_BRF_25 (0x00000030)
+
+#define NS9750_SYS_AHB_TIMEOUT_BAT_MA (0xFFFF0000)
+#define NS9750_SYS_AHB_TIMEOUT_BMT_MA (0x0000FFFF)
+
+#define NS9750_SYS_AHB_ERROR2_ABL (0x00040000)
+#define NS9750_SYS_AHB_ERROR2_AER (0x00020000)
+#define NS9750_SYS_AHB_ERROR2_ABM (0x00010000)
+#define NS9750_SYS_AHB_ERROR2_ABA (0x00008000)
+#define NS9750_SYS_AHB_ERROR2_HWRT (0x00004000)
+#define NS9750_SYS_AHB_ERROR2_HMID_MA (0x00003C00)
+#define NS9750_SYS_AHB_ERROR2_HTPC_MA (0x000003C0)
+#define NS9750_SYS_AHB_ERROR2_HSZ_MA (0x00000038)
+#define NS9750_SYS_AHB_ERROR2_RR_MA (0x00000007)
+
+#define NS9750_SYS_AHB_MON_EIC (0x00800000)
+#define NS9750_SYS_AHB_MON_MBII (0x00400000)
+#define NS9750_SYS_AHB_MON_MBL_MA (0x003FFFC0)
+#define NS9750_SYS_AHB_MON_MBLDC (0x00000020)
+#define NS9750_SYS_AHB_MON_SERDC (0x00000010)
+#define NS9750_SYS_AHB_MON_BMTC_MA (0x0000000C)
+#define NS9750_SYS_AHB_MON_BMTC_RECORD (0x00000000)
+#define NS9750_SYS_AHB_MON_BMTC_GEN_IRQ (0x00000004)
+#define NS9750_SYS_AHB_MON_BMTC_GEN_RES (0x00000008)
+#define NS9750_SYS_AHB_MON_BATC_MA (0x00000003)
+#define NS9750_SYS_AHB_MON_BATC_RECORD (0x00000000)
+#define NS9750_SYS_AHB_MON_BATC_GEN_IRQ (0x00000001)
+#define NS9750_SYS_AHB_MON_BATC_GEN_RES (0x00000002)
+
+/* need to be n*8bit to Int Level */
+
+#define NS9750_SYS_INT_CFG_IE (0x00000080)
+#define NS9750_SYS_INT_CFG_IT (0x00000020)
+#define NS9750_SYS_INT_CFG_IAD_MA (0x0000001F)
+
+#define NS9750_SYS_TIMER_INT_STAT_MA (0x0000FFFF)
+
+#define NS9750_SYS_SW_WDOG_CFG_SWWE (0x00000080)
+#define NS9750_SYS_SW_WDOG_CFG_SWWI (0x00000020)
+#define NS9750_SYS_SW_WDOG_CFG_SWWIC (0x00000010)
+#define NS9750_SYS_SW_WDOG_CFG_SWTCS_MA (0x00000007)
+#define NS9750_SYS_SW_WDOG_CFG_SWTCS_2 (0x00000000)
+#define NS9750_SYS_SW_WDOG_CFG_SWTCS_4 (0x00000001)
+#define NS9750_SYS_SW_WDOG_CFG_SWTCS_8 (0x00000002)
+#define NS9750_SYS_SW_WDOG_CFG_SWTCS_16 (0x00000003)
+#define NS9750_SYS_SW_WDOG_CFG_SWTCS_32 (0x00000004)
+#define NS9750_SYS_SW_WDOG_CFG_SWTCS_64 (0x00000005)
+
+#define NS9750_SYS_CLOCK_LPCS_MA (0x00000380)
+#define NS9750_SYS_CLOCK_LPCS_1 (0x00000000)
+#define NS9750_SYS_CLOCK_LPCS_2 (0x00000080)
+#define NS9750_SYS_CLOCK_LPCS_4 (0x00000100)
+#define NS9750_SYS_CLOCK_LPCS_8 (0x00000180)
+#define NS9750_SYS_CLOCK_LPCS_EXT (0x00000200)
+#define NS9750_SYS_CLOCK_BBC (0x00000040)
+#define NS9750_SYS_CLOCK_LCC (0x00000020)
+#define NS9750_SYS_CLOCK_MCC (0x00000010)
+#define NS9750_SYS_CLOCK_PARBC (0x00000008)
+#define NS9750_SYS_CLOCK_PC (0x00000004)
+#define NS9750_SYS_CLOCK_MACC (0x00000001)
+
+#define NS9750_SYS_RESET_SR (0x80000000)
+#define NS9750_SYS_RESET_I2CW (0x00100000)
+#define NS9750_SYS_RESET_CSE (0x00080000)
+#define NS9750_SYS_RESET_SMWE (0x00040000)
+#define NS9750_SYS_RESET_EWE (0x00020000)
+#define NS9750_SYS_RESET_PI3WE (0x00010000)
+#define NS9750_SYS_RESET_BBT (0x00000040)
+#define NS9750_SYS_RESET_LCDC (0x00000020)
+#define NS9750_SYS_RESET_MEMC (0x00000010)
+#define NS9750_SYS_RESET_PCIAR (0x00000008)
+#define NS9750_SYS_RESET_PCIM (0x00000004)
+#define NS9750_SYS_RESET_MACM (0x00000001)
+
+#define NS9750_SYS_MISC_REV_MA (0xFF000000)
+#define NS9750_SYS_MISC_PCIA (0x00002000)
+#define NS9750_SYS_MISC_VDIS (0x00001000)
+#define NS9750_SYS_MISC_BMM (0x00000800)
+#define NS9750_SYS_MISC_CS1DB (0x00000400)
+#define NS9750_SYS_MISC_CS1DW_MA (0x00000300)
+#define NS9750_SYS_MISC_MCCM (0x00000080)
+#define NS9750_SYS_MISC_PMSS (0x00000040)
+#define NS9750_SYS_MISC_CS1P (0x00000020)
+#define NS9750_SYS_MISC_ENDM (0x00000008)
+#define NS9750_SYS_MISC_MBAR (0x00000004)
+#define NS9750_SYS_MISC_IRAM0 (0x00000001)
+
+#define NS9750_SYS_PLL_PLLBS (0x02000000)
+#define NS9750_SYS_PLL_PLLFS_MA (0x01800000)
+#define NS9750_SYS_PLL_PLLIS_MA (0x00600000)
+#define NS9750_SYS_PLL_PLLND_MA (0x001F0000)
+#define NS9750_SYS_PLL_PLLSW (0x00008000)
+#define NS9750_SYS_PLL_PLLBSSW (0x00000200)
+#define NS9750_SYS_PLL_FSEL_MA (0x00000180)
+#define NS9750_SYS_PLL_CPCC_MA (0x00000060)
+#define NS9750_SYS_PLL_NDSW_MA (0x0000001F)
+
+#define NS9750_SYS_ACT_INT_STAT_MA (0x0000FFFF)
+
+#define NS9750_SYS_TIMER_CTRL_TEN (0x00008000)
+#define NS9750_SYS_TIMER_CTRL_INTC (0x00000200)
+#define NS9750_SYS_TIMER_CTRL_TLCS_MA (0x000001C0)
+#define NS9750_SYS_TIMER_CTRL_TLCS_1 (0x00000000)
+#define NS9750_SYS_TIMER_CTRL_TLCS_2 (0x00000040)
+#define NS9750_SYS_TIMER_CTRL_TLCS_4 (0x00000080)
+#define NS9750_SYS_TIMER_CTRL_TLCS_8 (0x000000C0)
+#define NS9750_SYS_TIMER_CTRL_TLCS_16 (0x00000100)
+#define NS9750_SYS_TIMER_CTRL_TLCS_32 (0x00000140)
+#define NS9750_SYS_TIMER_CTRL_TLCS_64 (0x00000180)
+#define NS9750_SYS_TIMER_CTRL_TLCS_EXT (0x000001C0)
+#define NS9750_SYS_TIMER_CTRL_TM_MA (0x00000030)
+#define NS9750_SYS_TIMER_CTRL_TM_INT (0x00000000)
+#define NS9750_SYS_TIMER_CTRL_TM_LOW (0x00000010)
+#define NS9750_SYS_TIMER_CTRL_TM_HIGH (0x00000020)
+#define NS9750_SYS_TIMER_CTRL_INTS (0x00000008)
+#define NS9750_SYS_TIMER_CTRL_UDS (0x00000004)
+#define NS9750_SYS_TIMER_CTRL_TSZ (0x00000002)
+#define NS9750_SYS_TIMER_CTRL_REN (0x00000001)
+
+#define NS9750_SYS_EXT_INT_CTRL_STS (0x00000008)
+#define NS9750_SYS_EXT_INT_CTRL_CLR (0x00000004)
+#define NS9750_SYS_EXT_INT_CTRL_PLTY (0x00000002)
+#define NS9750_SYS_EXT_INT_CTRL_LVEDG (0x00000001)
+
+#endif /* FS_NS9750_SYS_H */
diff -Naur u-boot-2009.03_orig/include/pcmcia/CVS/Entries u-boot-2009.03/include/pcmcia/CVS/Entries
--- u-boot-2009.03_orig/include/pcmcia/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/pcmcia/CVS/Entries 2009-03-25 15:58:15.496672000 -0700
@@ -0,0 +1,6 @@
+/cirrus.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i82365.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ss.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ti113x.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/yenta.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/pcmcia/CVS/Entries.Extra u-boot-2009.03/include/pcmcia/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/pcmcia/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/pcmcia/CVS/Entries.Extra 2009-03-25 15:58:15.496672000 -0700
@@ -0,0 +1,5 @@
+/cirrus.h///1238019749/
+/i82365.h///1238019749/
+/ss.h///1238019749/
+/ti113x.h///1238019749/
+/yenta.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/pcmcia/CVS/Entries.Extra.Old u-boot-2009.03/include/pcmcia/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/pcmcia/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/pcmcia/CVS/Entries.Extra.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,5 @@
+/cirrus.h///1238019749/
+/i82365.h///1238019749/
+/ss.h///1238019749/
+/ti113x.h///1238019749/
+/yenta.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/pcmcia/CVS/Entries.Old u-boot-2009.03/include/pcmcia/CVS/Entries.Old
--- u-boot-2009.03_orig/include/pcmcia/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/pcmcia/CVS/Entries.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,6 @@
+/cirrus.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/i82365.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/ss.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/ti113x.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/yenta.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/include/pcmcia/CVS/Repository u-boot-2009.03/include/pcmcia/CVS/Repository
--- u-boot-2009.03_orig/include/pcmcia/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/pcmcia/CVS/Repository 2009-03-25 15:25:56.415332200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/pcmcia
diff -Naur u-boot-2009.03_orig/include/pcmcia/CVS/Root u-boot-2009.03/include/pcmcia/CVS/Root
--- u-boot-2009.03_orig/include/pcmcia/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/pcmcia/CVS/Root 2009-03-25 15:25:56.415332200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/include/systemace.h u-boot-2009.03/include/systemace.h
--- u-boot-2009.03_orig/include/systemace.h 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/include/systemace.h 2009-03-31 14:58:25.984477600 -0700
@@ -1,31 +1,31 @@
-#ifndef __SYSTEMACE_H
-#define __SYSTEMACE_H
-/*
- * Copyright (c) 2004 Picture Elements, Inc.
- * Stephen Williams (steve@picturel.com)
- *
- * This source code is free software; you can redistribute it
- * and/or modify it in source code form 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
- */
-#ident "$Id:$"
-
-#ifdef CONFIG_SYSTEMACE
-
-# include <part.h>
-
-block_dev_desc_t * systemace_get_dev(int dev);
-
-#endif /* CONFIG_SYSTEMACE */
-#endif /* __SYSTEMACE_H */
+#ifndef __SYSTEMACE_H
+#define __SYSTEMACE_H
+/*
+ * Copyright (c) 2004 Picture Elements, Inc.
+ * Stephen Williams (steve@picturel.com)
+ *
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form 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
+ */
+#ident "$Id: systemace.h,v 1.1.1.1 2009/03/25 22:22:14 kenagy Exp $"
+
+#ifdef CONFIG_SYSTEMACE
+
+# include <part.h>
+
+block_dev_desc_t * systemace_get_dev(int dev);
+
+#endif /* CONFIG_SYSTEMACE */
+#endif /* __SYSTEMACE_H */
diff -Naur u-boot-2009.03_orig/include/u-boot/CVS/Entries u-boot-2009.03/include/u-boot/CVS/Entries
--- u-boot-2009.03_orig/include/u-boot/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/u-boot/CVS/Entries 2009-03-25 15:58:15.559171600 -0700
@@ -0,0 +1,2 @@
+/md5.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/include/u-boot/CVS/Entries.Extra u-boot-2009.03/include/u-boot/CVS/Entries.Extra
--- u-boot-2009.03_orig/include/u-boot/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/u-boot/CVS/Entries.Extra 2009-03-25 15:58:15.559171600 -0700
@@ -0,0 +1 @@
+/md5.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/u-boot/CVS/Entries.Extra.Old u-boot-2009.03/include/u-boot/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/include/u-boot/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/u-boot/CVS/Entries.Extra.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1 @@
+/md5.h///1238019749/
diff -Naur u-boot-2009.03_orig/include/u-boot/CVS/Entries.Old u-boot-2009.03/include/u-boot/CVS/Entries.Old
--- u-boot-2009.03_orig/include/u-boot/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/u-boot/CVS/Entries.Old 2009-03-25 15:25:56.000000000 -0700
@@ -0,0 +1,2 @@
+/md5.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/include/u-boot/CVS/Repository u-boot-2009.03/include/u-boot/CVS/Repository
--- u-boot-2009.03_orig/include/u-boot/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/u-boot/CVS/Repository 2009-03-25 15:25:56.540331400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/include/u-boot
diff -Naur u-boot-2009.03_orig/include/u-boot/CVS/Root u-boot-2009.03/include/u-boot/CVS/Root
--- u-boot-2009.03_orig/include/u-boot/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/include/u-boot/CVS/Root 2009-03-25 15:25:56.540331400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_arm/CVS/Entries u-boot-2009.03/lib_arm/CVS/Entries
--- u-boot-2009.03_orig/lib_arm/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_arm/CVS/Entries 2009-03-25 15:58:15.762295300 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_ashldi3.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_ashrdi3.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_divsi3.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_modsi3.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_udivsi3.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/_umodsi3.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/div0.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_arm/CVS/Entries.Extra u-boot-2009.03/lib_arm/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_arm/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_arm/CVS/Entries.Extra 2009-03-25 15:58:15.762295300 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019749/
+/_ashldi3.S///1238019749/
+/_ashrdi3.S///1238019749/
+/_divsi3.S///1238019749/
+/_modsi3.S///1238019749/
+/_udivsi3.S///1238019749/
+/_umodsi3.S///1238019749/
+/board.c///1238019749/
+/bootm.c///1238019749/
+/cache.c///1238019749/
+/div0.c///1238019749/
+/interrupts.c///1238019749/
diff -Naur u-boot-2009.03_orig/lib_arm/CVS/Entries.Extra.Old u-boot-2009.03/lib_arm/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_arm/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_arm/CVS/Entries.Extra.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019749/
+/_ashldi3.S///1238019749/
+/_ashrdi3.S///1238019749/
+/_divsi3.S///1238019749/
+/_modsi3.S///1238019749/
+/_udivsi3.S///1238019749/
+/_umodsi3.S///1238019749/
+/board.c///1238019749/
+/bootm.c///1238019749/
+/cache.c///1238019749/
+/div0.c///1238019749/
+/interrupts.c///1238019749/
diff -Naur u-boot-2009.03_orig/lib_arm/CVS/Entries.Old u-boot-2009.03/lib_arm/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_arm/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_arm/CVS/Entries.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/_ashldi3.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/_ashrdi3.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/_divsi3.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/_modsi3.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/_udivsi3.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/_umodsi3.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/div0.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_arm/CVS/Repository u-boot-2009.03/lib_arm/CVS/Repository
--- u-boot-2009.03_orig/lib_arm/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_arm/CVS/Repository 2009-03-25 15:25:56.743455100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_arm
diff -Naur u-boot-2009.03_orig/lib_arm/CVS/Root u-boot-2009.03/lib_arm/CVS/Root
--- u-boot-2009.03_orig/lib_arm/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_arm/CVS/Root 2009-03-25 15:25:56.712205300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_avr32/CVS/Entries u-boot-2009.03/lib_avr32/CVS/Entries
--- u-boot-2009.03_orig/lib_avr32/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_avr32/CVS/Entries 2009-03-25 15:58:15.840419800 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memset.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_avr32/CVS/Entries.Extra u-boot-2009.03/lib_avr32/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_avr32/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_avr32/CVS/Entries.Extra 2009-03-25 15:58:15.856044700 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019749/
+/board.c///1238019749/
+/bootm.c///1238019749/
+/interrupts.c///1238019749/
+/memset.S///1238019749/
diff -Naur u-boot-2009.03_orig/lib_avr32/CVS/Entries.Extra.Old u-boot-2009.03/lib_avr32/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_avr32/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_avr32/CVS/Entries.Extra.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019749/
+/board.c///1238019749/
+/bootm.c///1238019749/
+/interrupts.c///1238019749/
+/memset.S///1238019749/
diff -Naur u-boot-2009.03_orig/lib_avr32/CVS/Entries.Old u-boot-2009.03/lib_avr32/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_avr32/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_avr32/CVS/Entries.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/memset.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_avr32/CVS/Repository u-boot-2009.03/lib_avr32/CVS/Repository
--- u-boot-2009.03_orig/lib_avr32/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_avr32/CVS/Repository 2009-03-25 15:25:57.196577200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_avr32
diff -Naur u-boot-2009.03_orig/lib_avr32/CVS/Root u-boot-2009.03/lib_avr32/CVS/Root
--- u-boot-2009.03_orig/lib_avr32/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_avr32/CVS/Root 2009-03-25 15:25:57.180952300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_blackfin/CVS/Entries u-boot-2009.03/lib_blackfin/CVS/Entries
--- u-boot-2009.03_orig/lib_blackfin/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_blackfin/CVS/Entries 2009-03-25 15:58:15.981043900 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/boot.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/clocks.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memcmp.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memcpy.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memmove.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memset.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/muldi3.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tests.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_blackfin/CVS/Entries.Extra u-boot-2009.03/lib_blackfin/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_blackfin/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_blackfin/CVS/Entries.Extra 2009-03-25 15:58:15.981043900 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019749/
+/board.c///1238019749/
+/boot.c///1238019749/
+/cache.c///1238019749/
+/clocks.c///1238019749/
+/memcmp.S///1238019749/
+/memcpy.S///1238019749/
+/memmove.S///1238019749/
+/memset.S///1238019749/
+/muldi3.c///1238019749/
+/post.c///1238019749/
+/string.c///1238019749/
+/tests.c///1238019749/
diff -Naur u-boot-2009.03_orig/lib_blackfin/CVS/Entries.Extra.Old u-boot-2009.03/lib_blackfin/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_blackfin/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_blackfin/CVS/Entries.Extra.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019749/
+/board.c///1238019749/
+/boot.c///1238019749/
+/cache.c///1238019749/
+/clocks.c///1238019749/
+/memcmp.S///1238019749/
+/memcpy.S///1238019749/
+/memmove.S///1238019749/
+/memset.S///1238019749/
+/muldi3.c///1238019749/
+/post.c///1238019749/
+/string.c///1238019749/
+/tests.c///1238019749/
diff -Naur u-boot-2009.03_orig/lib_blackfin/CVS/Entries.Old u-boot-2009.03/lib_blackfin/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_blackfin/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_blackfin/CVS/Entries.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/boot.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/clocks.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/memcmp.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/memcpy.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/memmove.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/memset.S/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/muldi3.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/post.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/string.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/tests.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_blackfin/CVS/Repository u-boot-2009.03/lib_blackfin/CVS/Repository
--- u-boot-2009.03_orig/lib_blackfin/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_blackfin/CVS/Repository 2009-03-25 15:25:57.321576400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_blackfin
diff -Naur u-boot-2009.03_orig/lib_blackfin/CVS/Root u-boot-2009.03/lib_blackfin/CVS/Root
--- u-boot-2009.03_orig/lib_blackfin/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_blackfin/CVS/Root 2009-03-25 15:25:57.321576400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_generic/CVS/Entries u-boot-2009.03/lib_generic/CVS/Entries
--- u-boot-2009.03_orig/lib_generic/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/CVS/Entries 2009-03-25 15:58:16.371666400 -0700
@@ -0,0 +1,25 @@
+D/lzma////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/addr_map.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib_crctable.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib_decompress.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib_huffman.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib_private.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bzlib_randtable.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc16.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/crc32.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ctype.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/display_options.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/div64.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gunzip.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ldiv.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lmb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/md5.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rbtree.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sha1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sha256.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/strmhz.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/vsprintf.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zlib.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/lib_generic/CVS/Entries.Extra u-boot-2009.03/lib_generic/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_generic/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/CVS/Entries.Extra 2009-03-25 15:58:16.371666400 -0700
@@ -0,0 +1,25 @@
+D/lzma////
+/Makefile///1238019749/
+/addr_map.c///1238019749/
+/bzlib.c///1238019749/
+/bzlib_crctable.c///1238019749/
+/bzlib_decompress.c///1238019749/
+/bzlib_huffman.c///1238019749/
+/bzlib_private.h///1238019749/
+/bzlib_randtable.c///1238019749/
+/crc16.c///1238019749/
+/crc32.c///1238019749/
+/ctype.c///1238019749/
+/display_options.c///1238019749/
+/div64.c///1238019749/
+/gunzip.c///1238019749/
+/ldiv.c///1238019749/
+/lmb.c///1238019749/
+/md5.c///1238019749/
+/rbtree.c///1238019749/
+/sha1.c///1238019749/
+/sha256.c///1238019749/
+/string.c///1238019749/
+/strmhz.c///1238019749/
+/vsprintf.c///1238019749/
+/zlib.c///1238019749/
diff -Naur u-boot-2009.03_orig/lib_generic/CVS/Entries.Extra.Old u-boot-2009.03/lib_generic/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_generic/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/CVS/Entries.Extra.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,25 @@
+/Makefile///1238019749/
+/addr_map.c///1238019749/
+/bzlib.c///1238019749/
+/bzlib_crctable.c///1238019749/
+/bzlib_decompress.c///1238019749/
+/bzlib_huffman.c///1238019749/
+/bzlib_private.h///1238019749/
+/bzlib_randtable.c///1238019749/
+/crc16.c///1238019749/
+/crc32.c///1238019749/
+/ctype.c///1238019749/
+/display_options.c///1238019749/
+/div64.c///1238019749/
+/gunzip.c///1238019749/
+/ldiv.c///1238019749/
+/lmb.c///1238019749/
+/md5.c///1238019749/
+/rbtree.c///1238019749/
+/sha1.c///1238019749/
+/sha256.c///1238019749/
+/string.c///1238019749/
+/strmhz.c///1238019749/
+/vsprintf.c///1238019749/
+/zlib.c///1238019749/
+D/lzma////
diff -Naur u-boot-2009.03_orig/lib_generic/CVS/Entries.Old u-boot-2009.03/lib_generic/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_generic/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/CVS/Entries.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,25 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/addr_map.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bzlib.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bzlib_crctable.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bzlib_decompress.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bzlib_huffman.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bzlib_private.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bzlib_randtable.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/crc16.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/crc32.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/ctype.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/display_options.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/div64.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/gunzip.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/ldiv.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/lmb.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/md5.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/rbtree.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/sha1.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/sha256.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/string.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/strmhz.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/vsprintf.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/zlib.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D/lzma////
diff -Naur u-boot-2009.03_orig/lib_generic/CVS/Repository u-boot-2009.03/lib_generic/CVS/Repository
--- u-boot-2009.03_orig/lib_generic/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/CVS/Repository 2009-03-25 15:25:57.509075200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_generic
diff -Naur u-boot-2009.03_orig/lib_generic/CVS/Root u-boot-2009.03/lib_generic/CVS/Root
--- u-boot-2009.03_orig/lib_generic/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/CVS/Root 2009-03-25 15:25:57.493450300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries u-boot-2009.03/lib_generic/lzma/CVS/Entries
--- u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/lzma/CVS/Entries 2009-03-25 15:58:16.324791700 -0700
@@ -0,0 +1,12 @@
+/LGPL.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LzmaDecode.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LzmaDecode.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LzmaTools.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LzmaTools.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/LzmaTypes.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/history.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/import_lzmasdk.sh/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/lzma.txt/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries.Extra u-boot-2009.03/lib_generic/lzma/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/lzma/CVS/Entries.Extra 2009-03-25 15:58:16.324791700 -0700
@@ -0,0 +1,11 @@
+/LGPL.txt///1238019749/
+/LzmaDecode.c///1238019749/
+/LzmaDecode.h///1238019749/
+/LzmaTools.c///1238019749/
+/LzmaTools.h///1238019749/
+/LzmaTypes.h///1238019749/
+/Makefile///1238019749/
+/README.txt///1238019749/
+/history.txt///1238019749/
+/import_lzmasdk.sh///1238019749/
+/lzma.txt///1238019749/
diff -Naur u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries.Extra.Old u-boot-2009.03/lib_generic/lzma/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/lzma/CVS/Entries.Extra.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,11 @@
+/LGPL.txt///1238019749/
+/LzmaDecode.c///1238019749/
+/LzmaDecode.h///1238019749/
+/LzmaTools.c///1238019749/
+/LzmaTools.h///1238019749/
+/LzmaTypes.h///1238019749/
+/Makefile///1238019749/
+/README.txt///1238019749/
+/history.txt///1238019749/
+/import_lzmasdk.sh///1238019749/
+/lzma.txt///1238019749/
diff -Naur u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries.Old u-boot-2009.03/lib_generic/lzma/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_generic/lzma/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/lzma/CVS/Entries.Old 2009-03-25 15:25:57.000000000 -0700
@@ -0,0 +1,12 @@
+/LGPL.txt/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/LzmaDecode.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/LzmaDecode.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/LzmaTools.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/LzmaTools.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/LzmaTypes.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/README.txt/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/history.txt/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/import_lzmasdk.sh/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/lzma.txt/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_generic/lzma/CVS/Repository u-boot-2009.03/lib_generic/lzma/CVS/Repository
--- u-boot-2009.03_orig/lib_generic/lzma/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/lzma/CVS/Repository 2009-03-25 15:25:57.884072800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_generic/lzma
diff -Naur u-boot-2009.03_orig/lib_generic/lzma/CVS/Root u-boot-2009.03/lib_generic/lzma/CVS/Root
--- u-boot-2009.03_orig/lib_generic/lzma/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_generic/lzma/CVS/Root 2009-03-25 15:25:57.884072800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_i386/CVS/Entries u-boot-2009.03/lib_i386/CVS/Entries
--- u-boot-2009.03_orig/lib_i386/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_i386/CVS/Entries 2009-03-25 15:58:16.496665600 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bios.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bios.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bios_pci.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bios_setup.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/pci_type1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/realmode.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/realmode_switch.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/video_bios.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/zimage.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_i386/CVS/Entries.Extra u-boot-2009.03/lib_i386/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_i386/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_i386/CVS/Entries.Extra 2009-03-25 15:58:16.496665600 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019750/
+/bios.S///1238019750/
+/bios.h///1238019749/
+/bios_pci.S///1238019750/
+/bios_setup.c///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/pci.c///1238019750/
+/pci_type1.c///1238019750/
+/realmode.c///1238019750/
+/realmode_switch.S///1238019750/
+/video.c///1238019750/
+/video_bios.c///1238019750/
+/zimage.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_i386/CVS/Entries.Extra.Old u-boot-2009.03/lib_i386/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_i386/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_i386/CVS/Entries.Extra.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile///1238019750/
+/bios.S///1238019750/
+/bios.h///1238019749/
+/bios_pci.S///1238019750/
+/bios_setup.c///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/pci.c///1238019750/
+/pci_type1.c///1238019750/
+/realmode.c///1238019750/
+/realmode_switch.S///1238019750/
+/video.c///1238019750/
+/video_bios.c///1238019750/
+/zimage.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_i386/CVS/Entries.Old u-boot-2009.03/lib_i386/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_i386/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_i386/CVS/Entries.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,15 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bios.S/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bios.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/bios_pci.S/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bios_setup.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/pci.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/pci_type1.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/realmode.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/realmode_switch.S/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/video.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/video_bios.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/zimage.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_i386/CVS/Repository u-boot-2009.03/lib_i386/CVS/Repository
--- u-boot-2009.03_orig/lib_i386/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_i386/CVS/Repository 2009-03-25 15:25:58.087196500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_i386
diff -Naur u-boot-2009.03_orig/lib_i386/CVS/Root u-boot-2009.03/lib_i386/CVS/Root
--- u-boot-2009.03_orig/lib_i386/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_i386/CVS/Root 2009-03-25 15:25:58.087196500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_m68k/CVS/Entries u-boot-2009.03/lib_m68k/CVS/Entries
--- u-boot-2009.03_orig/lib_m68k/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_m68k/CVS/Entries 2009-03-25 15:58:16.590415000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/traps.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_m68k/CVS/Entries.Extra u-boot-2009.03/lib_m68k/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_m68k/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_m68k/CVS/Entries.Extra 2009-03-25 15:58:16.590415000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/interrupts.c///1238019750/
+/time.c///1238019750/
+/traps.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_m68k/CVS/Entries.Extra.Old u-boot-2009.03/lib_m68k/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_m68k/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_m68k/CVS/Entries.Extra.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/interrupts.c///1238019750/
+/time.c///1238019750/
+/traps.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_m68k/CVS/Entries.Old u-boot-2009.03/lib_m68k/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_m68k/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_m68k/CVS/Entries.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/traps.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_m68k/CVS/Repository u-boot-2009.03/lib_m68k/CVS/Repository
--- u-boot-2009.03_orig/lib_m68k/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_m68k/CVS/Repository 2009-03-25 15:25:58.274695300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_m68k
diff -Naur u-boot-2009.03_orig/lib_m68k/CVS/Root u-boot-2009.03/lib_m68k/CVS/Root
--- u-boot-2009.03_orig/lib_m68k/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_m68k/CVS/Root 2009-03-25 15:25:58.274695300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_microblaze/CVS/Entries u-boot-2009.03/lib_microblaze/CVS/Entries
--- u-boot-2009.03_orig/lib_microblaze/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_microblaze/CVS/Entries 2009-03-25 15:58:16.668539500 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_microblaze/CVS/Entries.Extra u-boot-2009.03/lib_microblaze/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_microblaze/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_microblaze/CVS/Entries.Extra 2009-03-25 15:58:16.684164400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_microblaze/CVS/Entries.Extra.Old u-boot-2009.03/lib_microblaze/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_microblaze/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_microblaze/CVS/Entries.Extra.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_microblaze/CVS/Entries.Old u-boot-2009.03/lib_microblaze/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_microblaze/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_microblaze/CVS/Entries.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_microblaze/CVS/Repository u-boot-2009.03/lib_microblaze/CVS/Repository
--- u-boot-2009.03_orig/lib_microblaze/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_microblaze/CVS/Repository 2009-03-25 15:25:58.415319400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_microblaze
diff -Naur u-boot-2009.03_orig/lib_microblaze/CVS/Root u-boot-2009.03/lib_microblaze/CVS/Root
--- u-boot-2009.03_orig/lib_microblaze/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_microblaze/CVS/Root 2009-03-25 15:25:58.415319400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_mips/CVS/Entries u-boot-2009.03/lib_mips/CVS/Entries
--- u-boot-2009.03_orig/lib_mips/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_mips/CVS/Entries 2009-03-25 15:58:16.762288900 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm_qemu_mips.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_mips/CVS/Entries.Extra u-boot-2009.03/lib_mips/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_mips/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_mips/CVS/Entries.Extra 2009-03-25 15:58:16.762288900 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/bootm_qemu_mips.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_mips/CVS/Entries.Extra.Old u-boot-2009.03/lib_mips/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_mips/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_mips/CVS/Entries.Extra.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/bootm_qemu_mips.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_mips/CVS/Entries.Old u-boot-2009.03/lib_mips/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_mips/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_mips/CVS/Entries.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm_qemu_mips.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_mips/CVS/Repository u-boot-2009.03/lib_mips/CVS/Repository
--- u-boot-2009.03_orig/lib_mips/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_mips/CVS/Repository 2009-03-25 15:25:58.524693700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_mips
diff -Naur u-boot-2009.03_orig/lib_mips/CVS/Root u-boot-2009.03/lib_mips/CVS/Root
--- u-boot-2009.03_orig/lib_mips/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_mips/CVS/Root 2009-03-25 15:25:58.509068800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_nios/CVS/Entries u-boot-2009.03/lib_nios/CVS/Entries
--- u-boot-2009.03_orig/lib_nios/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios/CVS/Entries 2009-03-25 15:58:16.871663200 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/divmod.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/math.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mult.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_nios/CVS/Entries.Extra u-boot-2009.03/lib_nios/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_nios/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios/CVS/Entries.Extra 2009-03-25 15:58:16.871663200 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/divmod.c///1238019750/
+/math.h///1238019750/
+/mult.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_nios/CVS/Entries.Extra.Old u-boot-2009.03/lib_nios/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_nios/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios/CVS/Entries.Extra.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/divmod.c///1238019750/
+/math.h///1238019750/
+/mult.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_nios/CVS/Entries.Old u-boot-2009.03/lib_nios/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_nios/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios/CVS/Entries.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/divmod.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/math.h/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/mult.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_nios/CVS/Repository u-boot-2009.03/lib_nios/CVS/Repository
--- u-boot-2009.03_orig/lib_nios/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios/CVS/Repository 2009-03-25 15:25:58.634068000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_nios
diff -Naur u-boot-2009.03_orig/lib_nios/CVS/Root u-boot-2009.03/lib_nios/CVS/Root
--- u-boot-2009.03_orig/lib_nios/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios/CVS/Root 2009-03-25 15:25:58.634068000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_nios2/CVS/Entries u-boot-2009.03/lib_nios2/CVS/Entries
--- u-boot-2009.03_orig/lib_nios2/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios2/CVS/Entries 2009-03-25 15:58:16.981037500 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/divmod.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/math.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mult.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_nios2/CVS/Entries.Extra u-boot-2009.03/lib_nios2/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_nios2/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios2/CVS/Entries.Extra 2009-03-25 15:58:16.981037500 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.S///1238019750/
+/divmod.c///1238019750/
+/math.h///1238019750/
+/mult.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_nios2/CVS/Entries.Extra.Old u-boot-2009.03/lib_nios2/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_nios2/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios2/CVS/Entries.Extra.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.S///1238019750/
+/divmod.c///1238019750/
+/math.h///1238019750/
+/mult.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_nios2/CVS/Entries.Old u-boot-2009.03/lib_nios2/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_nios2/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios2/CVS/Entries.Old 2009-03-25 15:25:58.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/cache.S/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/divmod.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/math.h/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/mult.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_nios2/CVS/Repository u-boot-2009.03/lib_nios2/CVS/Repository
--- u-boot-2009.03_orig/lib_nios2/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios2/CVS/Repository 2009-03-25 15:25:58.884066400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_nios2
diff -Naur u-boot-2009.03_orig/lib_nios2/CVS/Root u-boot-2009.03/lib_nios2/CVS/Root
--- u-boot-2009.03_orig/lib_nios2/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_nios2/CVS/Root 2009-03-25 15:25:58.868441500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_or1200/CVS/Entries u-boot-2009.03/lib_or1200/CVS/Entries
--- u-boot-2009.03_orig/lib_or1200/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/CVS/Entries 2009-03-25 17:51:53.685755200 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1/Tue Mar 24 20:36:12 2009//
+/board.c/1.1/Thu Mar 26 00:41:25 2009//
+/bootm.c/1.1/Tue Mar 24 20:36:12 2009//
+/cache.c/1.1/Tue Mar 24 20:36:12 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_or1200/CVS/Entries.Extra u-boot-2009.03/lib_or1200/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_or1200/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/CVS/Entries.Extra 2009-03-25 17:51:53.685755200 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238028713/
+/board.c///1238028713/
+/bootm.c///1238028713/
+/cache.c///1238028713/
diff -Naur u-boot-2009.03_orig/lib_or1200/CVS/Entries.Extra.Old u-boot-2009.03/lib_or1200/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_or1200/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/CVS/Entries.Extra.Old 2009-03-25 17:51:34.000000000 -0700
@@ -0,0 +1,4 @@
+/board.c////
+/bootm.c////
+/cache.c////
+/Makefile////
diff -Naur u-boot-2009.03_orig/lib_or1200/CVS/Entries.Old u-boot-2009.03/lib_or1200/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_or1200/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/CVS/Entries.Old 2009-03-25 17:51:34.000000000 -0700
@@ -0,0 +1,5 @@
+/board.c/0/Initial board.c//
+/bootm.c/0/Initial bootm.c//
+/cache.c/0/Initial cache.c//
+/Makefile/0/Initial Makefile//
+D
diff -Naur u-boot-2009.03_orig/lib_or1200/CVS/Repository u-boot-2009.03/lib_or1200/CVS/Repository
--- u-boot-2009.03_orig/lib_or1200/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/CVS/Repository 2009-03-25 17:48:29.140189300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_or1200
diff -Naur u-boot-2009.03_orig/lib_or1200/CVS/Root u-boot-2009.03/lib_or1200/CVS/Root
--- u-boot-2009.03_orig/lib_or1200/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/CVS/Root 2009-03-25 17:48:29.124564400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_or1200/Makefile u-boot-2009.03/lib_or1200/Makefile
--- u-boot-2009.03_orig/lib_or1200/Makefile 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/Makefile 2009-03-24 13:36:12.366942000 -0700
@@ -0,0 +1,45 @@
+#
+# (C) Copyright 2003-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(ARCH).a
+
+SOBJS =
+
+COBJS = board.o bootm.o cache.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+
+$(LIB): $(obj).depend $(OBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff -Naur u-boot-2009.03_orig/lib_or1200/board.c u-boot-2009.03/lib_or1200/board.c
--- u-boot-2009.03_orig/lib_or1200/board.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/board.c 2009-03-25 17:41:25.221131200 -0700
@@ -0,0 +1,172 @@
+/*
+ * (C) Copyright 2007 Michal Simek
+ * (C) Copyright 2004 Atmark Techno, Inc.
+ *
+ * Michal SIMEK <monstr@monstr.eu>
+ * Yasushi SHOJI <yashi@atmark-techno.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+#include <command.h>
+#include <malloc.h>
+#include <version.h>
+#include <watchdog.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+const char version_string[] = U_BOOT_VERSION " (" __DATE__ " - " __TIME__ ")";
+
+
+int board_early_init_f (void);
+void set_de1_post( unsigned int post_code );
+void init_de1_post( void );
+int de1_post_incr( void );
+
+
+/*
+ * Begin and End of memory area for malloc(), and current "brk"
+ */
+static ulong mem_malloc_start;
+static ulong mem_malloc_end;
+static ulong mem_malloc_brk;
+
+/*
+ * The Malloc area is immediately below the monitor copy in DRAM
+ * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
+ * as our monitory code is run from SDRAM
+ */
+static void mem_malloc_init (void)
+{
+ mem_malloc_end = (CONFIG_SYS_MALLOC_BASE + CONFIG_SYS_MALLOC_LEN);
+ mem_malloc_start = CONFIG_SYS_MALLOC_BASE;
+ mem_malloc_brk = mem_malloc_start;
+
+// memset ((void *)mem_malloc_start, 0, mem_malloc_end - mem_malloc_start);
+ memset ((void *)mem_malloc_start, 0, 4 );
+}
+
+void *sbrk (ptrdiff_t increment)
+{
+ ulong old = mem_malloc_brk;
+ ulong new = old + increment;
+
+ if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
+ return (NULL);
+ }
+ mem_malloc_brk = new;
+ return ((void *)old);
+}
+
+
+/*
+ * All attempts to come up with a "common" initialization sequence
+ * that works for all boards and architectures failed: some of the
+ * requirements are just _too_ different. To get rid of the resulting
+ * mess of board dependend #ifdef'ed code we now make the whole
+ * initialization sequence configurable to the user.
+ *
+ * The requirements for any new initalization function is simple: it
+ * receives a pointer to the "global data" structure as it's only
+ * argument, and returns an integer return code, where 0 means
+ * "continue" and != 0 means "fatal error, hang the system".
+ */
+typedef int (init_fnc_t) (void);
+
+init_fnc_t *init_sequence[] = {
+ env_init,
+ de1_post_incr,
+ serial_init,
+ de1_post_incr,
+ NULL,
+};
+
+void board_init (void)
+{
+ bd_t *bd;
+ init_fnc_t **init_fnc_ptr;
+ gd = (gd_t *) (CONFIG_SYS_GBL_DATA_OFFSET);
+
+// #if defined(CONFIG_CMD_FLASH)
+// ulong flash_size = 0;
+// #endif
+
+ memset ((void *)gd, 0, CONFIG_SYS_INIT_DATA_SIZE);
+ gd->bd = (bd_t *) (gd + 1); /* At end of global data */
+ gd->baudrate = CONFIG_BAUDRATE;
+ bd = gd->bd;
+ bd->bi_baudrate = CONFIG_BAUDRATE;
+ bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
+ bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
+
+ init_de1_post();
+
+ /* Initialise malloc() area */
+ mem_malloc_init ();
+
+ set_de1_post(0x00000100);
+
+ board_early_init_f();
+
+ set_de1_post(0x00000200);
+
+ for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
+
+ de1_post_incr();
+ WATCHDOG_RESET ();
+ de1_post_incr();
+
+ if ((*init_fnc_ptr) () != 0) {
+ hang ();
+ }
+ }
+
+ set_de1_post(0x00000300);
+
+// #if defined(CONFIG_CMD_FLASH)
+// bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
+// if (0 < (flash_size = flash_init ())) {
+// bd->bi_flashsize = flash_size;
+// bd->bi_flashoffset = CONFIG_SYS_FLASH_BASE + flash_size;
+// } else {
+// puts ("Flash init FAILED");
+// bd->bi_flashstart = 0;
+// bd->bi_flashsize = 0;
+// bd->bi_flashoffset = 0;
+// }
+// #endif
+
+ /* relocate environment function pointers etc. */
+ env_relocate ();
+
+ set_de1_post(0x00000400);
+
+ /* main_loop */
+ for (;;) {
+ WATCHDOG_RESET ();
+ main_loop ();
+ }
+}
+
+void hang (void)
+{
+ puts ("### ERROR ### Please RESET the board ###\n");
+ for (;;) ;
+}
diff -Naur u-boot-2009.03_orig/lib_or1200/bootm.c u-boot-2009.03/lib_or1200/bootm.c
--- u-boot-2009.03_orig/lib_or1200/bootm.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/bootm.c 2009-03-24 13:36:12.351353000 -0700
@@ -0,0 +1,34 @@
+/*
+ * (C) Copyright 2003, Psyent Corporation <www.psyent.com>
+ * Scott McNutt <smcnutt@psyent.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+#include <command.h>
+
+/* FIXME: Once we find a stable version of uC-linux for nios
+ * we can get this working. ;-)
+ *
+ */
+void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
+ bootm_headers_t *images)
+{
+}
diff -Naur u-boot-2009.03_orig/lib_or1200/cache.c u-boot-2009.03/lib_or1200/cache.c
--- u-boot-2009.03_orig/lib_or1200/cache.c 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_or1200/cache.c 2009-03-24 13:36:12.351353000 -0700
@@ -0,0 +1,32 @@
+/*
+ * (C) Copyright 2003, Psyent Corporation <www.psyent.com>
+ * Scott McNutt <smcnutt@psyent.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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
+ */
+
+#include <common.h>
+
+
+void flush_cache (ulong addr, ulong size)
+{
+ /* Nios cache is write-thru -- nothing to do here.
+ */
+ return;
+}
diff -Naur u-boot-2009.03_orig/lib_ppc/CVS/Entries u-boot-2009.03/lib_ppc/CVS/Entries
--- u-boot-2009.03_orig/lib_ppc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_ppc/CVS/Entries 2009-03-25 15:58:17.106036700 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bat_rw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/extable.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/kgdb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppccache.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ppcstring.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ticks.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_ppc/CVS/Entries.Extra u-boot-2009.03/lib_ppc/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_ppc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_ppc/CVS/Entries.Extra 2009-03-25 15:58:17.106036700 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019750/
+/bat_rw.c///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/extable.c///1238019750/
+/interrupts.c///1238019750/
+/kgdb.c///1238019750/
+/ppccache.S///1238019750/
+/ppcstring.S///1238019750/
+/ticks.S///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_ppc/CVS/Entries.Extra.Old u-boot-2009.03/lib_ppc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_ppc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_ppc/CVS/Entries.Extra.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,12 @@
+/Makefile///1238019750/
+/bat_rw.c///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/extable.c///1238019750/
+/interrupts.c///1238019750/
+/kgdb.c///1238019750/
+/ppccache.S///1238019750/
+/ppcstring.S///1238019750/
+/ticks.S///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_ppc/CVS/Entries.Old u-boot-2009.03/lib_ppc/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_ppc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_ppc/CVS/Entries.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bat_rw.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/extable.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/kgdb.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/ppccache.S/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/ppcstring.S/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/ticks.S/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_ppc/CVS/Repository u-boot-2009.03/lib_ppc/CVS/Repository
--- u-boot-2009.03_orig/lib_ppc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_ppc/CVS/Repository 2009-03-25 15:25:59.040315400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_ppc
diff -Naur u-boot-2009.03_orig/lib_ppc/CVS/Root u-boot-2009.03/lib_ppc/CVS/Root
--- u-boot-2009.03_orig/lib_ppc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_ppc/CVS/Root 2009-03-25 15:25:59.040315400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_sh/CVS/Entries u-boot-2009.03/lib_sh/CVS/Entries
--- u-boot-2009.03_orig/lib_sh/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sh/CVS/Entries 2009-03-25 15:58:17.199786100 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time_sh2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_sh/CVS/Entries.Extra u-boot-2009.03/lib_sh/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_sh/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sh/CVS/Entries.Extra 2009-03-25 15:58:17.199786100 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/time.c///1238019750/
+/time_sh2.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_sh/CVS/Entries.Extra.Old u-boot-2009.03/lib_sh/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_sh/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sh/CVS/Entries.Extra.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/time.c///1238019750/
+/time_sh2.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_sh/CVS/Entries.Old u-boot-2009.03/lib_sh/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_sh/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sh/CVS/Entries.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time_sh2.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_sh/CVS/Repository u-boot-2009.03/lib_sh/CVS/Repository
--- u-boot-2009.03_orig/lib_sh/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sh/CVS/Repository 2009-03-25 15:25:59.227814200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_sh
diff -Naur u-boot-2009.03_orig/lib_sh/CVS/Root u-boot-2009.03/lib_sh/CVS/Root
--- u-boot-2009.03_orig/lib_sh/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sh/CVS/Root 2009-03-25 15:25:59.227814200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/lib_sparc/CVS/Entries u-boot-2009.03/lib_sparc/CVS/Entries
--- u-boot-2009.03_orig/lib_sparc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sparc/CVS/Entries 2009-03-25 15:58:17.277910600 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/board.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/interrupts.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/time.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_sparc/CVS/Entries.Extra u-boot-2009.03/lib_sparc/CVS/Entries.Extra
--- u-boot-2009.03_orig/lib_sparc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sparc/CVS/Entries.Extra 2009-03-25 15:58:17.277910600 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/interrupts.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_sparc/CVS/Entries.Extra.Old u-boot-2009.03/lib_sparc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/lib_sparc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sparc/CVS/Entries.Extra.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile///1238019750/
+/board.c///1238019750/
+/bootm.c///1238019750/
+/cache.c///1238019750/
+/interrupts.c///1238019750/
+/time.c///1238019750/
diff -Naur u-boot-2009.03_orig/lib_sparc/CVS/Entries.Old u-boot-2009.03/lib_sparc/CVS/Entries.Old
--- u-boot-2009.03_orig/lib_sparc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sparc/CVS/Entries.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/board.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/bootm.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/interrupts.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/time.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/lib_sparc/CVS/Repository u-boot-2009.03/lib_sparc/CVS/Repository
--- u-boot-2009.03_orig/lib_sparc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sparc/CVS/Repository 2009-03-25 15:25:59.337188500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/lib_sparc
diff -Naur u-boot-2009.03_orig/lib_sparc/CVS/Root u-boot-2009.03/lib_sparc/CVS/Root
--- u-boot-2009.03_orig/lib_sparc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/lib_sparc/CVS/Root 2009-03-25 15:25:59.337188500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/libfdt/CVS/Entries u-boot-2009.03/libfdt/CVS/Entries
--- u-boot-2009.03_orig/libfdt/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/libfdt/CVS/Entries 2009-03-25 15:58:17.387284900 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_ro.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_rw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_strerror.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_sw.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_wip.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/libfdt_internal.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/libfdt/CVS/Entries.Extra u-boot-2009.03/libfdt/CVS/Entries.Extra
--- u-boot-2009.03_orig/libfdt/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/libfdt/CVS/Entries.Extra 2009-03-25 15:58:17.387284900 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019749/
+/README///1238019749/
+/fdt.c///1238019749/
+/fdt_ro.c///1238019749/
+/fdt_rw.c///1238019749/
+/fdt_strerror.c///1238019749/
+/fdt_sw.c///1238019749/
+/fdt_wip.c///1238019749/
+/libfdt_internal.h///1238019749/
diff -Naur u-boot-2009.03_orig/libfdt/CVS/Entries.Extra.Old u-boot-2009.03/libfdt/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/libfdt/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/libfdt/CVS/Entries.Extra.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile///1238019749/
+/README///1238019749/
+/fdt.c///1238019749/
+/fdt_ro.c///1238019749/
+/fdt_rw.c///1238019749/
+/fdt_strerror.c///1238019749/
+/fdt_sw.c///1238019749/
+/fdt_wip.c///1238019749/
+/libfdt_internal.h///1238019749/
diff -Naur u-boot-2009.03_orig/libfdt/CVS/Entries.Old u-boot-2009.03/libfdt/CVS/Entries.Old
--- u-boot-2009.03_orig/libfdt/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/libfdt/CVS/Entries.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/README/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/fdt.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/fdt_ro.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/fdt_rw.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/fdt_strerror.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/fdt_sw.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/fdt_wip.c/1.1.1.1/Wed Mar 25 22:22:29 2009//
+/libfdt_internal.h/1.1.1.1/Wed Mar 25 22:22:29 2009//
+D
diff -Naur u-boot-2009.03_orig/libfdt/CVS/Repository u-boot-2009.03/libfdt/CVS/Repository
--- u-boot-2009.03_orig/libfdt/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/libfdt/CVS/Repository 2009-03-25 15:25:59.446562800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/libfdt
diff -Naur u-boot-2009.03_orig/libfdt/CVS/Root u-boot-2009.03/libfdt/CVS/Root
--- u-boot-2009.03_orig/libfdt/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/libfdt/CVS/Root 2009-03-25 15:25:59.446562800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/CVS/Entries u-boot-2009.03/nand_spl/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/CVS/Entries 2009-03-25 15:58:18.152905000 -0700
@@ -0,0 +1,3 @@
+D/board////
+/nand_boot.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nand_boot_fsl_elbc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/nand_spl/CVS/Entries.Extra u-boot-2009.03/nand_spl/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/CVS/Entries.Extra 2009-03-25 15:58:18.152905000 -0700
@@ -0,0 +1,3 @@
+D/board////
+/nand_boot.c///1238019750/
+/nand_boot_fsl_elbc.c///1238019750/
diff -Naur u-boot-2009.03_orig/nand_spl/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/CVS/Entries.Extra.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,3 @@
+/nand_boot.c///1238019750/
+/nand_boot_fsl_elbc.c///1238019750/
+D/board////
diff -Naur u-boot-2009.03_orig/nand_spl/CVS/Entries.Old u-boot-2009.03/nand_spl/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/CVS/Entries.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,3 @@
+/nand_boot.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/nand_boot_fsl_elbc.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D/board////
diff -Naur u-boot-2009.03_orig/nand_spl/CVS/Repository u-boot-2009.03/nand_spl/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/CVS/Repository 2009-03-25 15:25:59.618436700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl
diff -Naur u-boot-2009.03_orig/nand_spl/CVS/Root u-boot-2009.03/nand_spl/CVS/Root
--- u-boot-2009.03_orig/nand_spl/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/CVS/Root 2009-03-25 15:25:59.618436700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/CVS/Entries u-boot-2009.03/nand_spl/board/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/CVS/Entries 2009-03-25 15:26:01.212176500 -0700
@@ -0,0 +1,4 @@
+D/amcc////
+D/freescale////
+D/samsung////
+D/sheldon////
diff -Naur u-boot-2009.03_orig/nand_spl/board/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/CVS/Entries.Extra 2009-03-25 15:26:01.212176500 -0700
@@ -0,0 +1,4 @@
+D/amcc////
+D/freescale////
+D/samsung////
+D/sheldon////
diff -Naur u-boot-2009.03_orig/nand_spl/board/CVS/Repository u-boot-2009.03/nand_spl/board/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/CVS/Repository 2009-03-25 15:25:59.665311400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board
diff -Naur u-boot-2009.03_orig/nand_spl/board/CVS/Root u-boot-2009.03/nand_spl/board/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/CVS/Root 2009-03-25 15:25:59.665311400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Entries u-boot-2009.03/nand_spl/board/amcc/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/CVS/Entries 2009-03-25 15:26:00.368431900 -0700
@@ -0,0 +1,5 @@
+D/acadia////
+D/bamboo////
+D/canyonlands////
+D/kilauea////
+D/sequoia////
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/amcc/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/CVS/Entries.Extra 2009-03-25 15:26:00.368431900 -0700
@@ -0,0 +1,5 @@
+D/acadia////
+D/bamboo////
+D/canyonlands////
+D/kilauea////
+D/sequoia////
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Repository u-boot-2009.03/nand_spl/board/amcc/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/CVS/Repository 2009-03-25 15:25:59.727811000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/amcc
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Root u-boot-2009.03/nand_spl/board/amcc/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/amcc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/CVS/Root 2009-03-25 15:25:59.712186100 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries 2009-03-25 15:58:17.512284100 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries.Extra 2009-03-25 15:58:17.512284100 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019750/
+/config.mk///1238019750/
+/u-boot.lds///1238019750/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries.Extra.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019750/
+/config.mk///1238019750/
+/u-boot.lds///1238019750/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries.Old u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Entries.Old 2009-03-25 15:25:59.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Repository u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Repository 2009-03-25 15:25:59.899684900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/amcc/acadia
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Root u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/amcc/acadia/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/acadia/CVS/Root 2009-03-25 15:25:59.884060000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries 2009-03-25 15:58:17.590408600 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sdram.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries.Extra 2009-03-25 15:58:17.590408600 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019750/
+/config.mk///1238019750/
+/sdram.c///1238019750/
+/u-boot.lds///1238019750/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries.Extra.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019750/
+/config.mk///1238019750/
+/sdram.c///1238019750/
+/u-boot.lds///1238019750/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries.Old u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Entries.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/sdram.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Repository u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Repository 2009-03-25 15:26:00.009059200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/amcc/bamboo
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Root u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/amcc/bamboo/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/bamboo/CVS/Root 2009-03-25 15:25:59.993434300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries 2009-03-25 15:58:17.668533100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ddr2_fixed.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra 2009-03-25 15:58:17.668533100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019750/
+/config.mk///1238019750/
+/ddr2_fixed.c///1238019750/
+/u-boot.lds///1238019750/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries.Extra.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019750/
+/config.mk///1238019750/
+/ddr2_fixed.c///1238019750/
+/u-boot.lds///1238019750/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries.Old u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Entries.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/ddr2_fixed.c/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:30 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Repository u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Repository 2009-03-25 15:26:00.102808600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/amcc/canyonlands
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Root u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/amcc/canyonlands/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/canyonlands/CVS/Root 2009-03-25 15:26:00.102808600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries 2009-03-25 15:58:17.746657600 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries.Extra 2009-03-25 15:58:17.762282500 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/config.mk///1238019750/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries.Extra.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/config.mk///1238019750/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries.Old u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Entries.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:30 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Repository u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Repository 2009-03-25 15:26:00.196558000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/amcc/kilauea
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Root u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/amcc/kilauea/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/kilauea/CVS/Root 2009-03-25 15:26:00.196558000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries 2009-03-25 15:58:17.824782100 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries.Extra 2009-03-25 15:58:17.824782100 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/config.mk///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries.Extra.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/config.mk///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries.Old u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Entries.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Repository u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Repository 2009-03-25 15:26:00.290307400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/amcc/sequoia
diff -Naur u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Root u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/amcc/sequoia/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/amcc/sequoia/CVS/Root 2009-03-25 15:26:00.290307400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Entries u-boot-2009.03/nand_spl/board/freescale/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/CVS/Entries 2009-03-25 15:26:00.524680900 -0700
@@ -0,0 +1 @@
+D/mpc8313erdb////
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/freescale/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/CVS/Entries.Extra 2009-03-25 15:26:00.524680900 -0700
@@ -0,0 +1 @@
+D/mpc8313erdb////
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Repository u-boot-2009.03/nand_spl/board/freescale/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/CVS/Repository 2009-03-25 15:26:00.415306600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/freescale
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Root u-boot-2009.03/nand_spl/board/freescale/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/freescale/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/CVS/Root 2009-03-25 15:26:00.415306600 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries 2009-03-25 15:58:17.902906600 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra 2009-03-25 15:58:17.902906600 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Extra.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Old u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Entries.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Repository u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Repository 2009-03-25 15:26:00.446556400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb
diff -Naur u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Root u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/freescale/mpc8313erdb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/freescale/mpc8313erdb/CVS/Root 2009-03-25 15:26:00.446556400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Entries u-boot-2009.03/nand_spl/board/samsung/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/CVS/Entries 2009-03-25 15:26:00.743429500 -0700
@@ -0,0 +1 @@
+D/smdk6400////
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/samsung/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/CVS/Entries.Extra 2009-03-25 15:26:00.743429500 -0700
@@ -0,0 +1 @@
+D/smdk6400////
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Repository u-boot-2009.03/nand_spl/board/samsung/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/CVS/Repository 2009-03-25 15:26:00.571555600 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/samsung
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Root u-boot-2009.03/nand_spl/board/samsung/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/samsung/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/CVS/Root 2009-03-25 15:26:00.555930700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries 2009-03-25 15:58:17.996656000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra 2009-03-25 15:58:17.996656000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/config.mk///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries.Extra.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/config.mk///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries.Old u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Entries.Old 2009-03-25 15:26:00.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Repository u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Repository 2009-03-25 15:26:00.587180500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/samsung/smdk6400
diff -Naur u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Root u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/samsung/smdk6400/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/samsung/smdk6400/CVS/Root 2009-03-25 15:26:00.587180500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Entries u-boot-2009.03/nand_spl/board/sheldon/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/CVS/Entries 2009-03-25 15:26:01.180926700 -0700
@@ -0,0 +1 @@
+D/simpc8313////
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/sheldon/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/CVS/Entries.Extra 2009-03-25 15:26:01.180926700 -0700
@@ -0,0 +1 @@
+D/simpc8313////
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Repository u-boot-2009.03/nand_spl/board/sheldon/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/CVS/Repository 2009-03-25 15:26:00.993427900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/sheldon
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Root u-boot-2009.03/nand_spl/board/sheldon/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/sheldon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/CVS/Root 2009-03-25 15:26:00.977803000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries
--- u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries 2009-03-25 15:58:18.106030300 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra
--- u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra 2009-03-25 15:58:18.121655200 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra.Old u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries.Extra.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019751/
+/u-boot.lds///1238019751/
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries.Old u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries.Old
--- u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Entries.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/u-boot.lds/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Repository u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Repository
--- u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Repository 2009-03-25 15:26:01.102802200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/nand_spl/board/sheldon/simpc8313
diff -Naur u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Root u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Root
--- u-boot-2009.03_orig/nand_spl/board/sheldon/simpc8313/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/nand_spl/board/sheldon/simpc8313/CVS/Root 2009-03-25 15:26:01.102802200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/net/CVS/Entries u-boot-2009.03/net/CVS/Entries
--- u-boot-2009.03_orig/net/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/net/CVS/Entries 2009-03-25 15:58:18.293529100 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bootp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/eth.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/net.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nfs.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/nfs.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rarp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rarp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sntp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sntp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tftp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tftp.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/net/CVS/Entries.Extra u-boot-2009.03/net/CVS/Entries.Extra
--- u-boot-2009.03_orig/net/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/net/CVS/Entries.Extra 2009-03-25 15:58:18.293529100 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019751/
+/bootp.c///1238019751/
+/bootp.h///1238019751/
+/eth.c///1238019751/
+/net.c///1238019751/
+/nfs.c///1238019751/
+/nfs.h///1238019751/
+/rarp.c///1238019751/
+/rarp.h///1238019751/
+/sntp.c///1238019751/
+/sntp.h///1238019751/
+/tftp.c///1238019751/
+/tftp.h///1238019751/
diff -Naur u-boot-2009.03_orig/net/CVS/Entries.Extra.Old u-boot-2009.03/net/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/net/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/net/CVS/Entries.Extra.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,13 @@
+/Makefile///1238019751/
+/bootp.c///1238019751/
+/bootp.h///1238019751/
+/eth.c///1238019751/
+/net.c///1238019751/
+/nfs.c///1238019751/
+/nfs.h///1238019751/
+/rarp.c///1238019751/
+/rarp.h///1238019751/
+/sntp.c///1238019751/
+/sntp.h///1238019751/
+/tftp.c///1238019751/
+/tftp.h///1238019751/
diff -Naur u-boot-2009.03_orig/net/CVS/Entries.Old u-boot-2009.03/net/CVS/Entries.Old
--- u-boot-2009.03_orig/net/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/net/CVS/Entries.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,14 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/bootp.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/bootp.h/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/eth.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/net.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/nfs.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/nfs.h/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/rarp.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/rarp.h/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/sntp.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/sntp.h/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/tftp.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/tftp.h/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/net/CVS/Repository u-boot-2009.03/net/CVS/Repository
--- u-boot-2009.03_orig/net/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/net/CVS/Repository 2009-03-25 15:26:01.290301000 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/net
diff -Naur u-boot-2009.03_orig/net/CVS/Root u-boot-2009.03/net/CVS/Root
--- u-boot-2009.03_orig/net/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/net/CVS/Root 2009-03-25 15:26:01.290301000 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/onenand_ipl/CVS/Entries u-boot-2009.03/onenand_ipl/CVS/Entries
--- u-boot-2009.03_orig/onenand_ipl/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/CVS/Entries 2009-03-25 15:58:18.449778100 -0700
@@ -0,0 +1,4 @@
+D/board////
+/onenand_boot.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_ipl.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/onenand_read.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/onenand_ipl/CVS/Entries.Extra u-boot-2009.03/onenand_ipl/CVS/Entries.Extra
--- u-boot-2009.03_orig/onenand_ipl/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/CVS/Entries.Extra 2009-03-25 15:58:18.449778100 -0700
@@ -0,0 +1,4 @@
+D/board////
+/onenand_boot.c///1238019751/
+/onenand_ipl.h///1238019751/
+/onenand_read.c///1238019751/
diff -Naur u-boot-2009.03_orig/onenand_ipl/CVS/Entries.Extra.Old u-boot-2009.03/onenand_ipl/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/onenand_ipl/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/CVS/Entries.Extra.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,4 @@
+/onenand_boot.c///1238019751/
+/onenand_ipl.h///1238019751/
+/onenand_read.c///1238019751/
+D/board////
diff -Naur u-boot-2009.03_orig/onenand_ipl/CVS/Entries.Old u-boot-2009.03/onenand_ipl/CVS/Entries.Old
--- u-boot-2009.03_orig/onenand_ipl/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/CVS/Entries.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,4 @@
+/onenand_boot.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/onenand_ipl.h/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/onenand_read.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D/board////
diff -Naur u-boot-2009.03_orig/onenand_ipl/CVS/Repository u-boot-2009.03/onenand_ipl/CVS/Repository
--- u-boot-2009.03_orig/onenand_ipl/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/CVS/Repository 2009-03-25 15:26:01.477799800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/onenand_ipl
diff -Naur u-boot-2009.03_orig/onenand_ipl/CVS/Root u-boot-2009.03/onenand_ipl/CVS/Root
--- u-boot-2009.03_orig/onenand_ipl/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/CVS/Root 2009-03-25 15:26:01.477799800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/CVS/Entries u-boot-2009.03/onenand_ipl/board/CVS/Entries
--- u-boot-2009.03_orig/onenand_ipl/board/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/CVS/Entries 2009-03-25 15:26:01.649673700 -0700
@@ -0,0 +1 @@
+D/apollon////
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/CVS/Entries.Extra u-boot-2009.03/onenand_ipl/board/CVS/Entries.Extra
--- u-boot-2009.03_orig/onenand_ipl/board/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/CVS/Entries.Extra 2009-03-25 15:26:01.665298600 -0700
@@ -0,0 +1 @@
+D/apollon////
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/CVS/Repository u-boot-2009.03/onenand_ipl/board/CVS/Repository
--- u-boot-2009.03_orig/onenand_ipl/board/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/CVS/Repository 2009-03-25 15:26:01.524674500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/onenand_ipl/board
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/CVS/Root u-boot-2009.03/onenand_ipl/board/CVS/Root
--- u-boot-2009.03_orig/onenand_ipl/board/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/CVS/Root 2009-03-25 15:26:01.524674500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries
--- u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries 2009-03-25 15:58:18.402903400 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/apollon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/low_levelinit.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/u-boot.onenand.lds/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries.Extra u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries.Extra
--- u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries.Extra 2009-03-25 15:58:18.402903400 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019751/
+/apollon.c///1238019751/
+/config.mk///1238019751/
+/low_levelinit.S///1238019751/
+/u-boot.onenand.lds///1238019751/
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries.Extra.Old u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries.Extra.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile///1238019751/
+/apollon.c///1238019751/
+/config.mk///1238019751/
+/low_levelinit.S///1238019751/
+/u-boot.onenand.lds///1238019751/
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries.Old u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries.Old
--- u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/apollon/CVS/Entries.Old 2009-03-25 15:26:01.000000000 -0700
@@ -0,0 +1,6 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/apollon.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/config.mk/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/low_levelinit.S/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/u-boot.onenand.lds/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Repository u-boot-2009.03/onenand_ipl/board/apollon/CVS/Repository
--- u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/apollon/CVS/Repository 2009-03-25 15:26:01.540299400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/onenand_ipl/board/apollon
diff -Naur u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Root u-boot-2009.03/onenand_ipl/board/apollon/CVS/Root
--- u-boot-2009.03_orig/onenand_ipl/board/apollon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/onenand_ipl/board/apollon/CVS/Root 2009-03-25 15:26:01.540299400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/or1200_config.mk u-boot-2009.03/or1200_config.mk
--- u-boot-2009.03_orig/or1200_config.mk 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/or1200_config.mk 2008-09-18 09:46:16.250000000 -0700
@@ -0,0 +1,28 @@
+#
+# (C) Copyright 2004 Atmark Techno, Inc.
+#
+# Yasushi SHOJI <yashi@atmark-techno.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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
+#
+
+PLATFORM_CPPFLAGS += -D__or1200__
+
+SYM_PREFIX = _
+
diff -Naur u-boot-2009.03_orig/post/CVS/Entries u-boot-2009.03/post/CVS/Entries
--- u-boot-2009.03_orig/post/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/CVS/Entries 2009-03-25 15:58:19.434146800 -0700
@@ -0,0 +1,8 @@
+D/board////
+D/cpu////
+D/drivers////
+D/lib_ppc////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/post.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rules.mk/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/tests.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/post/CVS/Entries.Extra u-boot-2009.03/post/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/CVS/Entries.Extra 2009-03-25 15:58:19.434146800 -0700
@@ -0,0 +1,8 @@
+D/board////
+D/cpu////
+D/drivers////
+D/lib_ppc////
+/Makefile///1238019751/
+/post.c///1238019751/
+/rules.mk///1238019751/
+/tests.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/CVS/Entries.Extra.Old u-boot-2009.03/post/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/CVS/Entries.Extra.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019751/
+/post.c///1238019751/
+/rules.mk///1238019751/
+/tests.c///1238019751/
+D/board////
+D/cpu////
+D/drivers////
+D/lib_ppc////
diff -Naur u-boot-2009.03_orig/post/CVS/Entries.Old u-boot-2009.03/post/CVS/Entries.Old
--- u-boot-2009.03_orig/post/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/CVS/Entries.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/post.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/rules.mk/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/tests.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D/board////
+D/cpu////
+D/drivers////
+D/lib_ppc////
diff -Naur u-boot-2009.03_orig/post/CVS/Repository u-boot-2009.03/post/CVS/Repository
--- u-boot-2009.03_orig/post/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/CVS/Repository 2009-03-25 15:26:02.040296200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post
diff -Naur u-boot-2009.03_orig/post/CVS/Root u-boot-2009.03/post/CVS/Root
--- u-boot-2009.03_orig/post/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/CVS/Root 2009-03-25 15:26:02.024671300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/board/CVS/Entries u-boot-2009.03/post/board/CVS/Entries
--- u-boot-2009.03_orig/post/board/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/CVS/Entries 2009-03-25 15:26:02.415293800 -0700
@@ -0,0 +1,3 @@
+D/lwmon////
+D/lwmon5////
+D/netta////
diff -Naur u-boot-2009.03_orig/post/board/CVS/Entries.Extra u-boot-2009.03/post/board/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/board/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/CVS/Entries.Extra 2009-03-25 15:26:02.430918700 -0700
@@ -0,0 +1,3 @@
+D/lwmon////
+D/lwmon5////
+D/netta////
diff -Naur u-boot-2009.03_orig/post/board/CVS/Repository u-boot-2009.03/post/board/CVS/Repository
--- u-boot-2009.03_orig/post/board/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/CVS/Repository 2009-03-25 15:26:02.102795800 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/board
diff -Naur u-boot-2009.03_orig/post/board/CVS/Root u-boot-2009.03/post/board/CVS/Root
--- u-boot-2009.03_orig/post/board/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/CVS/Root 2009-03-25 15:26:02.087170900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/board/lwmon/CVS/Entries u-boot-2009.03/post/board/lwmon/CVS/Entries
--- u-boot-2009.03_orig/post/board/lwmon/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon/CVS/Entries 2009-03-25 15:58:18.559152400 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sysmon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/post/board/lwmon/CVS/Entries.Extra u-boot-2009.03/post/board/lwmon/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/board/lwmon/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon/CVS/Entries.Extra 2009-03-25 15:58:18.559152400 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019751/
+/sysmon.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/board/lwmon/CVS/Entries.Extra.Old u-boot-2009.03/post/board/lwmon/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/board/lwmon/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon/CVS/Entries.Extra.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,2 @@
+/Makefile///1238019751/
+/sysmon.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/board/lwmon/CVS/Entries.Old u-boot-2009.03/post/board/lwmon/CVS/Entries.Old
--- u-boot-2009.03_orig/post/board/lwmon/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon/CVS/Entries.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/sysmon.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/post/board/lwmon/CVS/Repository u-boot-2009.03/post/board/lwmon/CVS/Repository
--- u-boot-2009.03_orig/post/board/lwmon/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon/CVS/Repository 2009-03-25 15:26:02.118420700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/board/lwmon
diff -Naur u-boot-2009.03_orig/post/board/lwmon/CVS/Root u-boot-2009.03/post/board/lwmon/CVS/Root
--- u-boot-2009.03_orig/post/board/lwmon/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon/CVS/Root 2009-03-25 15:26:02.118420700 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries u-boot-2009.03/post/board/lwmon5/CVS/Entries
--- u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon5/CVS/Entries 2009-03-25 15:58:18.652901800 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dsp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dspic.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpga.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gdc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/sysmon.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries.Extra u-boot-2009.03/post/board/lwmon5/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon5/CVS/Entries.Extra 2009-03-25 15:58:18.652901800 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019751/
+/dsp.c///1238019751/
+/dspic.c///1238019751/
+/fpga.c///1238019751/
+/gdc.c///1238019751/
+/sysmon.c///1238019751/
+/watchdog.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries.Extra.Old u-boot-2009.03/post/board/lwmon5/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon5/CVS/Entries.Extra.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,7 @@
+/Makefile///1238019751/
+/dsp.c///1238019751/
+/dspic.c///1238019751/
+/fpga.c///1238019751/
+/gdc.c///1238019751/
+/sysmon.c///1238019751/
+/watchdog.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries.Old u-boot-2009.03/post/board/lwmon5/CVS/Entries.Old
--- u-boot-2009.03_orig/post/board/lwmon5/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon5/CVS/Entries.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/dsp.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/dspic.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/fpga.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/gdc.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/sysmon.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/post/board/lwmon5/CVS/Repository u-boot-2009.03/post/board/lwmon5/CVS/Repository
--- u-boot-2009.03_orig/post/board/lwmon5/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon5/CVS/Repository 2009-03-25 15:26:02.196545200 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/board/lwmon5
diff -Naur u-boot-2009.03_orig/post/board/lwmon5/CVS/Root u-boot-2009.03/post/board/lwmon5/CVS/Root
--- u-boot-2009.03_orig/post/board/lwmon5/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/lwmon5/CVS/Root 2009-03-25 15:26:02.196545200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/board/netta/CVS/Entries u-boot-2009.03/post/board/netta/CVS/Entries
--- u-boot-2009.03_orig/post/board/netta/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/netta/CVS/Entries 2009-03-25 15:58:18.731026300 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/codec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dsp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/post/board/netta/CVS/Entries.Extra u-boot-2009.03/post/board/netta/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/board/netta/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/netta/CVS/Entries.Extra 2009-03-25 15:58:18.731026300 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/codec.c///1238019751/
+/dsp.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/board/netta/CVS/Entries.Extra.Old u-boot-2009.03/post/board/netta/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/board/netta/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/netta/CVS/Entries.Extra.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,3 @@
+/Makefile///1238019751/
+/codec.c///1238019751/
+/dsp.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/board/netta/CVS/Entries.Old u-boot-2009.03/post/board/netta/CVS/Entries.Old
--- u-boot-2009.03_orig/post/board/netta/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/netta/CVS/Entries.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/codec.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/dsp.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/post/board/netta/CVS/Repository u-boot-2009.03/post/board/netta/CVS/Repository
--- u-boot-2009.03_orig/post/board/netta/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/netta/CVS/Repository 2009-03-25 15:26:02.337169300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/board/netta
diff -Naur u-boot-2009.03_orig/post/board/netta/CVS/Root u-boot-2009.03/post/board/netta/CVS/Root
--- u-boot-2009.03_orig/post/board/netta/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/board/netta/CVS/Root 2009-03-25 15:26:02.337169300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/cpu/CVS/Entries u-boot-2009.03/post/cpu/CVS/Entries
--- u-boot-2009.03_orig/post/cpu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/CVS/Entries 2009-03-25 15:26:02.962165300 -0700
@@ -0,0 +1,2 @@
+D/mpc8xx////
+D/ppc4xx////
diff -Naur u-boot-2009.03_orig/post/cpu/CVS/Entries.Extra u-boot-2009.03/post/cpu/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/cpu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/CVS/Entries.Extra 2009-03-25 15:26:02.962165300 -0700
@@ -0,0 +1,2 @@
+D/mpc8xx////
+D/ppc4xx////
diff -Naur u-boot-2009.03_orig/post/cpu/CVS/Repository u-boot-2009.03/post/cpu/CVS/Repository
--- u-boot-2009.03_orig/post/cpu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/CVS/Repository 2009-03-25 15:26:02.462168500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/cpu
diff -Naur u-boot-2009.03_orig/post/cpu/CVS/Root u-boot-2009.03/post/cpu/CVS/Root
--- u-boot-2009.03_orig/post/cpu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/CVS/Root 2009-03-25 15:26:02.462168500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries
--- u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries 2009-03-25 15:58:18.856025500 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache_8xx.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ether.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/usb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries.Extra u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries.Extra 2009-03-25 15:58:18.856025500 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019751/
+/cache.c///1238019751/
+/cache_8xx.S///1238019751/
+/ether.c///1238019751/
+/spr.c///1238019751/
+/uart.c///1238019751/
+/usb.c///1238019751/
+/watchdog.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries.Extra.Old u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries.Extra.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,8 @@
+/Makefile///1238019751/
+/cache.c///1238019751/
+/cache_8xx.S///1238019751/
+/ether.c///1238019751/
+/spr.c///1238019751/
+/uart.c///1238019751/
+/usb.c///1238019751/
+/watchdog.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries.Old u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries.Old
--- u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/mpc8xx/CVS/Entries.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,9 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cache_8xx.S/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/ether.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/spr.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/uart.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/usb.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Repository u-boot-2009.03/post/cpu/mpc8xx/CVS/Repository
--- u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/mpc8xx/CVS/Repository 2009-03-25 15:26:02.493418300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/cpu/mpc8xx
diff -Naur u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Root u-boot-2009.03/post/cpu/mpc8xx/CVS/Root
--- u-boot-2009.03_orig/post/cpu/mpc8xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/mpc8xx/CVS/Root 2009-03-25 15:26:02.493418300 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries
--- u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries 2009-03-25 15:58:18.981024700 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cache_4xx.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/denali_ecc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ether.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ocm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/spr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/uart.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/watchdog.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries.Extra u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries.Extra 2009-03-25 15:58:18.996649600 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019751/
+/cache.c///1238019751/
+/cache_4xx.S///1238019751/
+/denali_ecc.c///1238019751/
+/ether.c///1238019751/
+/fpu.c///1238019751/
+/ocm.c///1238019751/
+/spr.c///1238019751/
+/uart.c///1238019751/
+/watchdog.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries.Extra.Old u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries.Extra.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,10 @@
+/Makefile///1238019751/
+/cache.c///1238019751/
+/cache_4xx.S///1238019751/
+/denali_ecc.c///1238019751/
+/ether.c///1238019751/
+/fpu.c///1238019751/
+/ocm.c///1238019751/
+/spr.c///1238019751/
+/uart.c///1238019751/
+/watchdog.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries.Old u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries.Old
--- u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/ppc4xx/CVS/Entries.Old 2009-03-25 15:26:02.000000000 -0700
@@ -0,0 +1,11 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cache.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cache_4xx.S/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/denali_ecc.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/ether.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/fpu.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/ocm.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/spr.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/uart.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/watchdog.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Repository u-boot-2009.03/post/cpu/ppc4xx/CVS/Repository
--- u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/ppc4xx/CVS/Repository 2009-03-25 15:26:02.618417500 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/cpu/ppc4xx
diff -Naur u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Root u-boot-2009.03/post/cpu/ppc4xx/CVS/Root
--- u-boot-2009.03_orig/post/cpu/ppc4xx/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/cpu/ppc4xx/CVS/Root 2009-03-25 15:26:02.618417500 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/drivers/CVS/Entries u-boot-2009.03/post/drivers/CVS/Entries
--- u-boot-2009.03_orig/post/drivers/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/drivers/CVS/Entries 2009-03-25 15:58:19.074774100 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/i2c.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/memory.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rtc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/post/drivers/CVS/Entries.Extra u-boot-2009.03/post/drivers/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/drivers/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/drivers/CVS/Entries.Extra 2009-03-25 15:58:19.074774100 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019751/
+/i2c.c///1238019751/
+/memory.c///1238019751/
+/rtc.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/drivers/CVS/Entries.Extra.Old u-boot-2009.03/post/drivers/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/drivers/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/drivers/CVS/Entries.Extra.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,4 @@
+/Makefile///1238019751/
+/i2c.c///1238019751/
+/memory.c///1238019751/
+/rtc.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/drivers/CVS/Entries.Old u-boot-2009.03/post/drivers/CVS/Entries.Old
--- u-boot-2009.03_orig/post/drivers/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/drivers/CVS/Entries.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,5 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/i2c.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/memory.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/rtc.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D
diff -Naur u-boot-2009.03_orig/post/drivers/CVS/Repository u-boot-2009.03/post/drivers/CVS/Repository
--- u-boot-2009.03_orig/post/drivers/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/drivers/CVS/Repository 2009-03-25 15:26:03.102789400 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/drivers
diff -Naur u-boot-2009.03_orig/post/drivers/CVS/Root u-boot-2009.03/post/drivers/CVS/Root
--- u-boot-2009.03_orig/post/drivers/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/drivers/CVS/Root 2009-03-25 15:26:03.102789400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/lib_ppc/CVS/Entries u-boot-2009.03/post/lib_ppc/CVS/Entries
--- u-boot-2009.03_orig/post/lib_ppc/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/CVS/Entries 2009-03-25 15:58:19.387272100 -0700
@@ -0,0 +1,24 @@
+D/fpu////
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/andi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/asm.S/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/b.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmp.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cmpi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/complex.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cpu_asm.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/cr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/load.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/multi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rlwimi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rlwinm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/rlwnm.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/srawi.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/store.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/string.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/three.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/threei.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/threex.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/two.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/twox.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/post/lib_ppc/CVS/Entries.Extra u-boot-2009.03/post/lib_ppc/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/lib_ppc/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/CVS/Entries.Extra 2009-03-25 15:58:19.387272100 -0700
@@ -0,0 +1,24 @@
+D/fpu////
+/Makefile///1238019751/
+/andi.c///1238019751/
+/asm.S///1238019751/
+/b.c///1238019751/
+/cmp.c///1238019751/
+/cmpi.c///1238019751/
+/complex.c///1238019751/
+/cpu.c///1238019751/
+/cpu_asm.h///1238019751/
+/cr.c///1238019751/
+/load.c///1238019751/
+/multi.c///1238019751/
+/rlwimi.c///1238019751/
+/rlwinm.c///1238019751/
+/rlwnm.c///1238019751/
+/srawi.c///1238019751/
+/store.c///1238019751/
+/string.c///1238019751/
+/three.c///1238019751/
+/threei.c///1238019751/
+/threex.c///1238019751/
+/two.c///1238019751/
+/twox.c///1238019751/
diff -Naur u-boot-2009.03_orig/post/lib_ppc/CVS/Entries.Extra.Old u-boot-2009.03/post/lib_ppc/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/lib_ppc/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/CVS/Entries.Extra.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,24 @@
+/Makefile///1238019751/
+/andi.c///1238019751/
+/asm.S///1238019751/
+/b.c///1238019751/
+/cmp.c///1238019751/
+/cmpi.c///1238019751/
+/complex.c///1238019751/
+/cpu.c///1238019751/
+/cpu_asm.h///1238019751/
+/cr.c///1238019751/
+/load.c///1238019751/
+/multi.c///1238019751/
+/rlwimi.c///1238019751/
+/rlwinm.c///1238019751/
+/rlwnm.c///1238019751/
+/srawi.c///1238019751/
+/store.c///1238019751/
+/string.c///1238019751/
+/three.c///1238019751/
+/threei.c///1238019751/
+/threex.c///1238019751/
+/two.c///1238019751/
+/twox.c///1238019751/
+D/fpu////
diff -Naur u-boot-2009.03_orig/post/lib_ppc/CVS/Entries.Old u-boot-2009.03/post/lib_ppc/CVS/Entries.Old
--- u-boot-2009.03_orig/post/lib_ppc/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/CVS/Entries.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,24 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/andi.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/asm.S/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/b.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cmp.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cmpi.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/complex.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cpu.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cpu_asm.h/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/cr.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/load.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/multi.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/rlwimi.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/rlwinm.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/rlwnm.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/srawi.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/store.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/string.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/three.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/threei.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/threex.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/two.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/twox.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+D/fpu////
diff -Naur u-boot-2009.03_orig/post/lib_ppc/CVS/Repository u-boot-2009.03/post/lib_ppc/CVS/Repository
--- u-boot-2009.03_orig/post/lib_ppc/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/CVS/Repository 2009-03-25 15:26:03.212163700 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/lib_ppc
diff -Naur u-boot-2009.03_orig/post/lib_ppc/CVS/Root u-boot-2009.03/post/lib_ppc/CVS/Root
--- u-boot-2009.03_orig/post/lib_ppc/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/CVS/Root 2009-03-25 15:26:03.196538800 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries
--- u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries 2009-03-25 15:58:19.340397400 -0700
@@ -0,0 +1,10 @@
+/20001122-1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/20010114-2.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/20010226-1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/980619-1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/acc1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/compare-fp-1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fpu.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mul-subnormal-single-1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries.Extra u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries.Extra
--- u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries.Extra 2009-03-25 15:58:19.340397400 -0700
@@ -0,0 +1,9 @@
+/20001122-1.c///1238019751/
+/20010114-2.c///1238019752/
+/20010226-1.c///1238019752/
+/980619-1.c///1238019752/
+/Makefile///1238019752/
+/acc1.c///1238019752/
+/compare-fp-1.c///1238019752/
+/fpu.c///1238019752/
+/mul-subnormal-single-1.c///1238019752/
diff -Naur u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries.Extra.Old u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries.Extra.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,9 @@
+/20001122-1.c///1238019751/
+/20010114-2.c///1238019752/
+/20010226-1.c///1238019752/
+/980619-1.c///1238019752/
+/Makefile///1238019752/
+/acc1.c///1238019752/
+/compare-fp-1.c///1238019752/
+/fpu.c///1238019752/
+/mul-subnormal-single-1.c///1238019752/
diff -Naur u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries.Old u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries.Old
--- u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/fpu/CVS/Entries.Old 2009-03-25 15:26:03.000000000 -0700
@@ -0,0 +1,10 @@
+/20001122-1.c/1.1.1.1/Wed Mar 25 22:22:31 2009//
+/20010114-2.c/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/20010226-1.c/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/980619-1.c/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/Makefile/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/acc1.c/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/compare-fp-1.c/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/fpu.c/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/mul-subnormal-single-1.c/1.1.1.1/Wed Mar 25 22:22:32 2009//
+D
diff -Naur u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Repository u-boot-2009.03/post/lib_ppc/fpu/CVS/Repository
--- u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/fpu/CVS/Repository 2009-03-25 15:26:03.430912300 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/post/lib_ppc/fpu
diff -Naur u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Root u-boot-2009.03/post/lib_ppc/fpu/CVS/Root
--- u-boot-2009.03_orig/post/lib_ppc/fpu/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/post/lib_ppc/fpu/CVS/Root 2009-03-25 15:26:03.415287400 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/tools/CVS/Entries u-boot-2009.03/tools/CVS/Entries
--- u-boot-2009.03_orig/tools/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/CVS/Entries 2009-03-25 17:51:54.138877300 -0700
@@ -0,0 +1,25 @@
+D/bddb////
+D/easylogo////
+D/env////
+D/gdb////
+D/logos////
+D/scripts////
+D/updater////
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile.win32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bin2header.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bmp_logo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/envcrc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_host.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gen_eth_addr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/img2brec.sh/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/img2srec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inca-swap-bytes.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mkimage.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mkimage.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc86x_clk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ncb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netconsole/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/setlocalversion/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubsha1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile/1.2/Wed Mar 25 22:49:57 2009//
diff -Naur u-boot-2009.03_orig/tools/CVS/Entries.Extra u-boot-2009.03/tools/CVS/Entries.Extra
--- u-boot-2009.03_orig/tools/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/CVS/Entries.Extra 2009-03-25 17:51:54.138877300 -0700
@@ -0,0 +1,25 @@
+D/bddb////
+D/easylogo////
+D/env////
+D/gdb////
+D/logos////
+D/scripts////
+D/updater////
+/.gitignore///1238019752/
+/Makefile.win32///1238019752/
+/bin2header.c///1238019752/
+/bmp_logo.c///1238019752/
+/envcrc.c///1238019752/
+/fdt_host.h///1238019752/
+/gen_eth_addr.c///1238019752/
+/img2brec.sh///1238019752/
+/img2srec.c///1238019752/
+/inca-swap-bytes.c///1238019752/
+/mkimage.c///1238019752/
+/mkimage.h///1238019752/
+/mpc86x_clk.c///1238019752/
+/ncb.c///1238019752/
+/netconsole///1238019752/
+/setlocalversion///1238019752/
+/ubsha1.c///1238019752/
+/Makefile///1238028713/
diff -Naur u-boot-2009.03_orig/tools/CVS/Entries.Extra.Old u-boot-2009.03/tools/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/tools/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/CVS/Entries.Extra.Old 2009-03-25 15:58:20.000000000 -0700
@@ -0,0 +1,25 @@
+/Makefile///1238019752/
+D/bddb////
+D/easylogo////
+D/env////
+D/gdb////
+D/logos////
+D/scripts////
+D/updater////
+/.gitignore///1238019752/
+/Makefile.win32///1238019752/
+/bin2header.c///1238019752/
+/bmp_logo.c///1238019752/
+/envcrc.c///1238019752/
+/fdt_host.h///1238019752/
+/gen_eth_addr.c///1238019752/
+/img2brec.sh///1238019752/
+/img2srec.c///1238019752/
+/inca-swap-bytes.c///1238019752/
+/mkimage.c///1238019752/
+/mkimage.h///1238019752/
+/mpc86x_clk.c///1238019752/
+/ncb.c///1238019752/
+/netconsole///1238019752/
+/setlocalversion///1238019752/
+/ubsha1.c///1238019752/
diff -Naur u-boot-2009.03_orig/tools/CVS/Entries.Old u-boot-2009.03/tools/CVS/Entries.Old
--- u-boot-2009.03_orig/tools/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/CVS/Entries.Old 2009-03-25 15:58:20.000000000 -0700
@@ -0,0 +1,25 @@
+/Makefile/1.1.1.1/Wed Mar 25 22:22:32 2009//
+D/bddb////
+D/easylogo////
+D/env////
+D/gdb////
+D/logos////
+D/scripts////
+D/updater////
+/.gitignore/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/Makefile.win32/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bin2header.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bmp_logo.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/envcrc.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/fdt_host.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/gen_eth_addr.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/img2brec.sh/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/img2srec.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/inca-swap-bytes.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mkimage.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mkimage.h/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/mpc86x_clk.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ncb.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/netconsole/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/setlocalversion/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/ubsha1.c/1.1.1.1/Sat Mar 21 21:04:41 2009//
diff -Naur u-boot-2009.03_orig/tools/CVS/Repository u-boot-2009.03/tools/CVS/Repository
--- u-boot-2009.03_orig/tools/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/CVS/Repository 2009-03-25 15:26:03.649660900 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/tools
diff -Naur u-boot-2009.03_orig/tools/CVS/Root u-boot-2009.03/tools/CVS/Root
--- u-boot-2009.03_orig/tools/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/CVS/Root 2009-03-25 15:26:03.649660900 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/tools/Makefile u-boot-2009.03/tools/Makefile
--- u-boot-2009.03_orig/tools/Makefile 2009-03-21 14:04:41.000000000 -0700
+++ u-boot-2009.03/tools/Makefile 2009-03-25 15:49:57.874856800 -0700
@@ -21,7 +21,8 @@
# MA 02111-1307 USA
#
-BIN_FILES = img2srec$(SFX) mkimage$(SFX) envcrc$(SFX) ubsha1$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX)
+# BIN_FILES = img2srec$(SFX) mkimage$(SFX) envcrc$(SFX) ubsha1$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX)
+BIN_FILES = img2srec$(SFX) envcrc$(SFX) ubsha1$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX)
OBJ_LINKS = env_embedded.o crc32.o md5.o sha1.o image.o
OBJ_FILES = img2srec.o mkimage.o envcrc.o ubsha1.o gen_eth_addr.o bmp_logo.o
diff -Naur u-boot-2009.03_orig/tools/bddb/CVS/Entries u-boot-2009.03/tools/bddb/CVS/Entries
--- u-boot-2009.03_orig/tools/bddb/CVS/Entries 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/bddb/CVS/Entries 2009-03-25 15:58:19.699770100 -0700
@@ -0,0 +1,21 @@
+/README/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/badsubmit.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/bddb.css/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/brlog.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/browse.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/config.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/create_tables.sql/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/defs.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dodelete.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/dodellog.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/doedit.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/doedlog.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/donew.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/donewlog.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/edit.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/edlog.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/execute.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/index.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/new.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+/newlog.php/1.1.1.1/Sat Mar 21 21:04:41 2009//
+D
diff -Naur u-boot-2009.03_orig/tools/bddb/CVS/Entries.Extra u-boot-2009.03/tools/bddb/CVS/Entries.Extra
--- u-boot-2009.03_orig/tools/bddb/CVS/Entries.Extra 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/bddb/CVS/Entries.Extra 2009-03-25 15:58:19.699770100 -0700
@@ -0,0 +1,20 @@
+/README///1238019752/
+/badsubmit.php///1238019752/
+/bddb.css///1238019752/
+/brlog.php///1238019752/
+/browse.php///1238019752/
+/config.php///1238019752/
+/create_tables.sql///1238019752/
+/defs.php///1238019752/
+/dodelete.php///1238019752/
+/dodellog.php///1238019752/
+/doedit.php///1238019752/
+/doedlog.php///1238019752/
+/donew.php///1238019752/
+/donewlog.php///1238019752/
+/edit.php///1238019752/
+/edlog.php///1238019752/
+/execute.php///1238019752/
+/index.php///1238019752/
+/new.php///1238019752/
+/newlog.php///1238019752/
diff -Naur u-boot-2009.03_orig/tools/bddb/CVS/Entries.Extra.Old u-boot-2009.03/tools/bddb/CVS/Entries.Extra.Old
--- u-boot-2009.03_orig/tools/bddb/CVS/Entries.Extra.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/bddb/CVS/Entries.Extra.Old 2009-03-25 15:26:04.000000000 -0700
@@ -0,0 +1,20 @@
+/README///1238019752/
+/badsubmit.php///1238019752/
+/bddb.css///1238019752/
+/brlog.php///1238019752/
+/browse.php///1238019752/
+/config.php///1238019752/
+/create_tables.sql///1238019752/
+/defs.php///1238019752/
+/dodelete.php///1238019752/
+/dodellog.php///1238019752/
+/doedit.php///1238019752/
+/doedlog.php///1238019752/
+/donew.php///1238019752/
+/donewlog.php///1238019752/
+/edit.php///1238019752/
+/edlog.php///1238019752/
+/execute.php///1238019752/
+/index.php///1238019752/
+/new.php///1238019752/
+/newlog.php///1238019752/
diff -Naur u-boot-2009.03_orig/tools/bddb/CVS/Entries.Old u-boot-2009.03/tools/bddb/CVS/Entries.Old
--- u-boot-2009.03_orig/tools/bddb/CVS/Entries.Old 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/bddb/CVS/Entries.Old 2009-03-25 15:26:04.000000000 -0700
@@ -0,0 +1,21 @@
+/README/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/badsubmit.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/bddb.css/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/brlog.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/browse.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/config.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/create_tables.sql/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/defs.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/dodelete.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/dodellog.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/doedit.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/doedlog.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/donew.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/donewlog.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/edit.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/edlog.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/execute.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/index.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/new.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+/newlog.php/1.1.1.1/Wed Mar 25 22:22:32 2009//
+D
diff -Naur u-boot-2009.03_orig/tools/bddb/CVS/Repository u-boot-2009.03/tools/bddb/CVS/Repository
--- u-boot-2009.03_orig/tools/bddb/CVS/Repository 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/bddb/CVS/Repository 2009-03-25 15:26:03.930909100 -0700
@@ -0,0 +1 @@
+units/or1200_soc/sw/u-boot-2009.03/tools/bddb
diff -Naur u-boot-2009.03_orig/tools/bddb/CVS/Root u-boot-2009.03/tools/bddb/CVS/Root
--- u-boot-2009.03_orig/tools/bddb/CVS/Root 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/bddb/CVS/Root 2009-03-25 15:26:03.915284200 -0700
@@ -0,0 +1 @@
+:local:C:\qaz\__CVS_ROOT
diff -Naur u-boot-2009.03_orig/tools/bmp_logo.exe u-boot-2009.03/tools/bmp_logo.exe
--- u-boot-2009.03_orig/tools/bmp_logo.exe 1969-12-31 16:00:00.000000000 -0800
+++ u-boot-2009.03/tools/bmp_logo.exe 2009-03-25 17:29:42.798339400 -0700
@@ -0,0 +1,29 @@
+ rb %s is not a bitmap file.
+ /*
+ * Automatically generated by "tools/bmp_logo"
+ *
+ * DO NOT EDIT
+ *
+ */
+
+
+#ifndef __BMP_LOGO_H__
+#define __BMP_LOGO_H__
+
+#define BMP_LOGO_WIDTH %d
+#define BMP_LOGO_HEIGHT %d
+#define BMP_LOGO_COLORS %d
+#define BMP_LOGO_OFFSET %d
+
+ Error allocating memory for file %s.
+ unsigned short bmp_logo_palette[] = {
+ %s0x0%X%X%X,%s }; unsigned char bmp_logo_bitmap[] = { 0x%02X,%c
+};
+